diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 000000000..db86c4482 Binary files /dev/null and b/.DS_Store differ diff --git a/CONTRIBUTING.MD b/CONTRIBUTING.MD index 48c4402fe..371b6f05c 100644 --- a/CONTRIBUTING.MD +++ b/CONTRIBUTING.MD @@ -6,18 +6,11 @@ Thank you for your decision to contribute to T-Pot. Please feel free to post your problems, ideas and issues [here](https://github.com/dtag-dev-sec/tpotce/issues). We will try to answer ASAP, but to speed things up we encourage you to ... - [ ] Use the [search function](https://github.com/dtag-dev-sec/tpotce/issues?utf8=%E2%9C%93&q=) first -- [ ] Check the [FAQ](#faq) +- [ ] Check the FAQs in our [WIKI](https://github.com/dtag-dev-sec/tpotce/wiki) - [ ] Provide [basic support information](#info) with regard to your issue Thank you :smiley: -- - - -### FAQ - -##### Where can I find the honeypot logs? -###### The honeypot logs are located in `/data/`. You have to login via ssh and run `sudo su -` and then `cd /data/`. Do not change any permissions here or T-Pot will fail to work. - @@ -25,13 +18,13 @@ Thank you :smiley: ### Basic support information -- What T-Pot version are you currtently using? +- What T-Pot version are you currently using? - Are you running on a Intel NUC or a VM? - How long has your installation been running? - Did you install any upgrades or packages? - Did you modify any scripts? - Have you turned persistence on/off? -- How much RAM available (login via ssh and run `htop`)? +- How much RAM is available (login via ssh and run `htop`)? - How much stress are the CPUs under (login via ssh and run `htop`)? - How much swap space is being used (login via ssh and run `htop`)? - How much free disk space is available (login via ssh and run `sudo df -h`)? diff --git a/README.md b/README.md index e3818d8fd..d5d427eef 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,42 @@ -# T-Pot 17.10 +# T-Pot 18.11 -This repository contains the necessary files to create the **[T-Pot](https://github.com/dtag-dev-sec/tpotce/releases)** ISO image. -The image can then be used to install T-Pot on a physical or virtual machine. - -In October 2016 we released -[T-Pot 16.10](http://dtag-dev-sec.github.io/mediator/feature/2016/10/31/t-pot-16.10.html) - -# T-Pot 17.10 - -T-Pot 17.10 runs on the latest 16.04 LTS Ubuntu Server Network Installer image, is based on +T-Pot 18.11 runs on the latest 18.04.x LTS Ubuntu Server Network Installer image, is based on [docker](https://www.docker.com/), [docker-compose](https://docs.docker.com/compose/) and includes dockerized versions of the following honeypots +* [ciscoasa](https://github.com/Cymmetria/ciscoasa_honeypot), * [conpot](http://conpot.org/), * [cowrie](http://www.micheloosterhof.com/cowrie/), * [dionaea](https://github.com/DinoTools/dionaea), * [elasticpot](https://github.com/schmalle/ElasticPot), -* [emobility](https://github.com/dtag-dev-sec/emobility), -* [glastopf](http://glastopf.org/), +* [glastopf](http://mushmush.org/), +* [glutton](https://github.com/mushorg/glutton), +* [heralding](https://github.com/johnnykv/heralding), * [honeytrap](https://github.com/armedpot/honeytrap/), * [mailoney](https://github.com/awhitehatter/mailoney), -* [rdpy](https://github.com/citronneur/rdpy) and -* [vnclowpot](https://github.com/magisterquis/vnclowpot) +* [medpot](https://github.com/schmalle/medpot), +* [rdpy](https://github.com/citronneur/rdpy), +* [snare](http://mushmush.org/), +* [tanner](http://mushmush.org/) Furthermore we use the following tools +* [Cockpit](https://cockpit-project.org/running) for a lightweight, webui for docker, os, real-time performance monitoring and web terminal. +* [Cyberchef](https://gchq.github.io/CyberChef/) a web app for encryption, encoding, compression and data analysis. * [ELK stack](https://www.elastic.co/videos) to beautifully visualize all the events captured by T-Pot. * [Elasticsearch Head](https://mobz.github.io/elasticsearch-head/) a web front end for browsing and interacting with an Elastic Search cluster. -* [Netdata](http://my-netdata.io/) for real-time performance monitoring. -* [Portainer](http://portainer.io/) a web based UI for docker. * [Spiderfoot](https://github.com/smicallef/spiderfoot) a open source intelligence automation tool. * [Suricata](http://suricata-ids.org/) a Network Security Monitoring engine. -* [Wetty](https://github.com/krishnasrinivas/wetty) a web based SSH client. - # TL;DR -1. Meet the [system requirements](#requirements). The T-Pot installation needs at least 4 GB RAM and 64 GB free disk space as well as a working internet connection. +1. Meet the [system requirements](#requirements). The T-Pot installation needs at least 6-8 GB RAM and 128 GB free disk space as well as a working internet connection. 2. Download the T-Pot ISO from [GitHub](https://github.com/dtag-dev-sec/tpotce/releases) or [create it yourself](#createiso). 3. Install the system in a [VM](#vm) or on [physical hardware](#hw) with [internet access](#placement). -4. Enjoy your favorite beverage - [watch](http://sicherheitstacho.eu/?peers=communityPeers) and [analyze](#kibana). - -# T-Pot-Autoinstaller -T-Pot may also be installed on an existing machine using the [T-Pot-Autoinstaller](https://github.com/dtag-dev-sec/t-pot-autoinstall). - -# Seeing is believing :bowtie: - -[![T-Pot 17.10](https://img.youtube.com/vi/G-_OabDowFU/0.jpg)](https://youtu.be/G-_OabDowFU) +4. Enjoy your favorite beverage - [watch](https://sicherheitstacho.eu) and [analyze](#kibana). # Table of Contents @@ -61,8 +48,11 @@ T-Pot may also be installed on an existing machine using the [T-Pot-Autoinstalle - [Create your own ISO Image](#createiso) - [Running in a VM](#vm) - [Running on Hardware](#hardware) + - [Post Install Manual](#postinstall) + - [Post Install Auto](#postinstallauto) - [First Run](#firstrun) - [System Placement](#placement) +- [Updates](#updates) - [Options](#options) - [SSH and web access](#ssh) - [Kibana Dashboard](#kibana) @@ -78,147 +68,155 @@ T-Pot may also be installed on an existing machine using the [T-Pot-Autoinstalle - [Stay tuned](#staytuned) - [Fun Fact](#funfact) - + # Changelog -- **Size still matters** 😅 - - All docker images have been rebuilt as micro containers based on Alpine Linux to even further reduce the image size and leading to image sizes (compressed) below the 50 MB mark. The uncompressed size of eMobility and the ELK stack could each be reduced by a whopping 600 MB! - - A "Everything" installation now takes roughly 1.6 GB download size -- **docker-compose** - - T-Pot containers are now being controlled and monitored through docker-compose and a single configuration file `/opt/tpot/etc/tpot.yml` allowing for greater flexibility and resulting in easier image management (i.e. updated images). - - As a benefit only a single `systemd` script `/etc/systemd/system/tpot.service` is needed to start `systemctl start tpot` and stop `systemctl stop tpot` the T-Pot services. - - There are four pre-configured compose configurations which do reflect the T-Pot editions `/opt/tpot/etc/compose`. Simply stop the T-Pot services and copy i.e. `cp /opt/tpot/etc/compose/all.yml /opt/tpot/etc/tpot.yml`, restart the T-Pot services and the selcted edition will be running after downloading the required docker images. -- **Introducing** [Spiderfoot](https://github.com/smicallef/spiderfoot) a open source intelligence automation tool. -- **Installation** procedure simplified - - Within the Ubuntu Installer you only have to choose language settings - - After the first reboot the T-Pot installer checks if internet and required services are reachable before the installation procedure begins - - T-Pot Installer now uses a “dialog” which looks way better than the old text based installer - - `tsec` user & password dialog is now part of the T-Pot Installer - - The self-signed certificate is now created automatically to reduce unnecessary overhead for novice users - - New ASCII logo and login screen pointing to web and ssh logins - - Hostnames are now generated using an offline name generator, which still produces funny and collision free hostnames -- **CVE IDs for Suricata** - - Our very own [Listbot](https://github.com/dtag-dev-sec/listbot) builds translation maps for Logstash. If Logstash registers a match the events' CVE ID will be stored alongside the event within Elasticsearch. -- **IP Reputations** - - [Listbot](https://github.com/dtag-dev-sec/listbot) also builds translation maps for blacklisted IPs - - Based upon 30+ publicly available IP blacklisting sources listbot creates a logstash translation map matching the events' source IP addresses against the IPs reputation - - If the source IP is known to a blacklist service a corresponding tag will be stored with the event - - Updates occur on every logstash container start; by default every 24h -- **Honeypot updates and improvements** - - All honeypots were updated to their latest & stable versions. -- **New Honeypots** were added ... - * [mailoney](https://github.com/awhitehatter/mailoney) - - A low interaction SMTP honeypot - * [rdpy](https://github.com/citronneur/rdpy) - - A low interaction RDP honeypot - * [vnclowpot](https://github.com/magisterquis/vnclowpot) - - A low interaction VNC honeypot -- **Persistence** is now enabled by default and will keep honeypot logs and tools data in `/data/` and its sub-folders by default for 30 days. You may change that behavior in `/opt/tpot/etc/logrotate/logrotate.conf`. ELK data however will be kept for 90 days by default. You may change that behavior in `/opt/tpot/etc/curator/actions.yml`. Scripts will be triggered through `/etc/crontab`. -- **Updates** - - **Docker** was updated to the latest **1.12.6** release within Ubuntu 16.04.x LTS - - **ELK** was updated to the latest **Kibana 5.6.3**, **Elasticsearch 5.6.3** and **Logstash 5.6.3** releases. - - **Suricata** was updated to the latest **4.0.0** version including the latest **Emerging Threats** community ruleset. +- **New honeypots** + - *Ciscoasa* a low interaction honeypot for the Cisco ASA component capable of detecting CVE-2018-0101, a DoS and remote code execution vulnerability. + - *Glutton* (NextGen) is the all eating honeypot + - *Heralding* a credentials catching honeypot. + - *Medpot* is a HL7 / FHIR honeypot. + - *Snare* is a web application honeypot sensor, is the successor of Glastopf. SNARE has feature parity with Glastopf and allows to convert existing web pages into attack surfaces. + - *Tanner* is SNARES' "brain". Every event is send from SNARE to TANNER, gets evaluated and TANNER decides how SNARE should respond to the client. This allows us to change the behaviour of many sensors on the fly. We are providing a TANNER instance for your use, but there is nothing stopping you from setting up your own instance. +- **New tools** + - *Cockpit* is an interactive server admin interface. It is easy to use and very lightweight. Cockpit interacts directly with the operating system from a real Linux session in a browser. + - *Cyberchef* is the Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis. + - *grc* (commandline) is yet another colouriser (written in python) for beautifying your logfiles or output of commands. + - *multitail* (commandline) allows you to monitor logfiles and command output in multiple windows in a terminal, colorize, filter and merge. + - *tped.sh* (commandline) allows you to switch between T-Pot Editions after installation. +- **Deprecated tools** + - *Netdata*, *Portainer* and *WeTTY* were superseded by *Cockpit* which is much more lightweight, perfectly well integrated into Ubuntu 18.04 LTS and of course comes with the same but a more basic feature set. +- **New Standard Installation** + - The new standard installation is now running a whopping *14* honeypot instances. +- **T-Pot Universal Installer** + - The T-Pot installer now also includes the option to install on a existing machine, the T-Pot-Autoinstaller is no longer necessary. +- **Tighten Security** + - The docker containers are now running mostly with a read-only file system + - If possible using `setcap` to start daemons without root or dropping privileges + - Introducing `fail2ban` to ease up on `authorized_keys` requirement which is no longer necessary for `SSH`. Also to further prevent brute-force attacks on `Cockpit` and `NGINX` allowing for faster load times of the WebUI. +- **Iptables exceptions for NFQ based honeypots** + - In previous versions `iptables`had manually be maintained, now a a script parses `/opt/tpot/etc/tpot.yml` and extracts port information to automatically generate exceptions for ports that should not be forwarded to NFQ. +- **CI** + - The Kibana UI now uses a magenta theme. +- **ES HEAD** + - A Java Script now automatically enters the correct FQDN / IP. A manual step is no longer required. +- **ELK STACK** + - The ELK Stack was updated to the latest 6.x versions. + - This also means you can now expect the availability of basic *X-Pack-Feaures*, the full feature set however is only available to users with a valid license. - **Dashboards Makeover** - - We now have **160+ Visualizations** pre-configured and compiled to 14 individual **Kibana Dashboards** for every honeypot. Monitor all *honeypot events* locally on your T-Pot installation. Aside from *honeypot events* you can also view *Suricata NSM, Syslog and NGINX* events for a quick overview of local host events. - - View available IP reputation of any source IP address - - View available CVE ID for events - - More **Smart links** are now included. + - Because Kibana 6.x introduced so much whitespace the dashboards and some of the visualizations needed some overhaul. While it probably needs some getting used to the key was to focus on displaying as much information while not compromising on clarity. + - Because of the new honeypots we now more than **200 Visualizations** pre-configured and compiled to 16 individual **Kibana Dashboards**. Monitor all *honeypot events* locally on your T-Pot installation. Aside from *honeypot events* you can also view *Suricata NSM and NGINX* events for a quick overview of wire events. +- **Honeypot updates and improvements** + - All honeypots were updated to their latest stable versions. + - Docker images were mostly overhauled to tighten security even further + - Some of the honeypot configurations were modified to keep things fresh - **Update Feature** - - For the ones who like to live on the bleeding edge of T-Pot development there is now a update script available in `/opt/tpot/update.sh`. Just run the script and it will get the latest changes from the `master branch`. For now this feature is experimental and the first step to a true rolling release cycle. -- **Files & Folders** - - While the `/data` folder is still in its old place, all T-Pot relevant files and folders have been restructured and will now be installed into `/opt/tpot`. Only a few system relevant files with regard to the installed OS and its services will be copied to locations outside the T-Pot base path. + - For the ones who like to live on the bleeding edge of T-Pot development there is now a update script available in `/opt/tpot/update.sh`. + - This feature is now in beta and is mostly intended to provide you with the latest development advances without the need of reinstalling T-Pot. # Technical Concept -T-Pot is based on the network installer of Ubuntu Server 16.04.x LTS. +T-Pot is based on the network installer of Ubuntu Server 18.04.x LTS. The honeypot daemons as well as other support components being used have been containerized using [docker](http://docker.io). This allows us to run multiple honeypot daemons on the same network interface while maintaining a small footprint and constrain each honeypot within its own environment. -In T-Pot we combine the dockerized honeypots -[conpot](http://conpot.org/), -[cowrie](http://www.micheloosterhof.com/cowrie/), -[dionaea](https://github.com/DinoTools/dionaea), -[elasticpot](https://github.com/schmalle/ElasticPot), -[emobility](https://github.com/dtag-dev-sec/emobility), -[glastopf](http://glastopf.org/), -[honeytrap](https://github.com/armedpot/honeytrap/), -[mailoney](https://github.com/awhitehatter/mailoney), -[rdpy](https://github.com/citronneur/rdpy) and -[vnclowpot](https://github.com/magisterquis/vnclowpot) with -[ELK stack](https://www.elastic.co/videos) to beautifully visualize all the events captured by T-Pot, -[Elasticsearch Head](https://mobz.github.io/elasticsearch-head/) a web front end for browsing and interacting with an Elastic Search cluster, -[Netdata](http://my-netdata.io/) for real-time performance monitoring, -[Portainer](http://portainer.io/) a web based UI for docker, -[Spiderfoot](https://github.com/smicallef/spiderfoot) a open source intelligence automation tool, -[Suricata](http://suricata-ids.org/) a Network Security Monitoring engine and -[Wetty](https://github.com/krishnasrinivas/wetty) a web based SSH client. - -![Architecture](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/doc/architecture.png) +In T-Pot we combine the dockerized honeypots ... +* [ciscoasa](https://github.com/Cymmetria/ciscoasa_honeypot), +* [conpot](http://conpot.org/), +* [cowrie](http://www.micheloosterhof.com/cowrie/), +* [dionaea](https://github.com/DinoTools/dionaea), +* [elasticpot](https://github.com/schmalle/ElasticPot), +* [glastopf](http://mushmush.org/), +* [glutton](https://github.com/mushorg/glutton), +* [heralding](https://github.com/johnnykv/heralding), +* [honeytrap](https://github.com/armedpot/honeytrap/), +* [mailoney](https://github.com/awhitehatter/mailoney), +* [medpot](https://github.com/schmalle/medpot), +* [rdpy](https://github.com/citronneur/rdpy), +* [snare](http://mushmush.org/), +* [tanner](http://mushmush.org/) + +... with the following tools ... +* [Cockpit](https://cockpit-project.org/running) for a lightweight, webui for docker, os, real-time performance monitoring and web terminal. +* [Cyberchef](https://gchq.github.io/CyberChef/) a web app for encryption, encoding, compression and data analysis. +* [ELK stack](https://www.elastic.co/videos) to beautifully visualize all the events captured by T-Pot. +* [Elasticsearch Head](https://mobz.github.io/elasticsearch-head/) a web front end for browsing and interacting with an Elastic Search cluster. +* [Spiderfoot](https://github.com/smicallef/spiderfoot) a open source intelligence automation tool. +* [Suricata](http://suricata-ids.org/) a Network Security Monitoring engine. + +... to give you the best out-of-the-box experience possible and a easy-to-use multi-honeypot appliance. + +![Architecture](doc/architecture.png) While data within docker containers is volatile we do now ensure a default 30 day persistence of all relevant honeypot and tool data in the well known `/data` folder and sub-folders. The persistence configuration may be adjusted in `/opt/tpot/etc/logrotate/logrotate.conf`. Once a docker container crashes, all other data produced within its environment is erased and a fresh instance is started from the corresponding docker image.
Basically, what happens when the system is booted up is the following: - start host system -- start all the necessary services (i.e. docker-engine, reverse proxy, etc.) -- start all docker containers via docker-compose (honeypots, nms, elk) - -Within the T-Pot project, we provide all the tools and documentation necessary to build your own honeypot system and contribute to our [community data view](http://sicherheitstacho.eu/?peers=communityPeers), a separate channel on our [Sicherheitstacho](http://sicherheitstacho.eu) that is powered by T-Pot community data. - -The source code and configuration files are stored in individual GitHub repositories, which are linked below. The docker images are pre-configured for the T-Pot environment. If you want to run the docker images separately, make sure you study the docker-compose configuration (`/opt/tpot/etc/tpot.yml`) and the T-Pot systemd script (`/etc/systemd/system/tpot.service`), as they provide a good starting point for implementing changes. - -The individual docker configurations are located in the following GitHub repositories: - -- [conpot](https://github.com/dtag-dev-sec/conpot) -- [cowrie](https://github.com/dtag-dev-sec/cowrie) -- [dionaea](https://github.com/dtag-dev-sec/dionaea) -- [elasticpot](https://github.com/dtag-dev-sec/elasticpot) -- [elk-stack](https://github.com/dtag-dev-sec/elk) -- [emobility](https://github.com/dtag-dev-sec/emobility) -- [ewsposter](https://github.com/dtag-dev-sec/ews) -- [glastopf](https://github.com/dtag-dev-sec/glastopf) -- [honeytrap](https://github.com/dtag-dev-sec/honeytrap) -- [mailoney](https://github.com/dtag-dev-sec/mailoney) -- [netdata](https://github.com/dtag-dev-sec/netdata) -- [portainer](https://github.com/dtag-dev-sec/ui-for-docker) -- [rdpy](https://github.com/dtag-dev-sec/rdpy) -- [spiderfoot](https://github.com/dtag-dev-sec/spiderfoot) -- [suricata & p0f](https://github.com/dtag-dev-sec/suricata) -- [vnclowpot](https://github.com/dtag-dev-sec/vnclowpot) +- start all the necessary services (i.e. cockpit, docker, etc.) +- start all docker containers via docker-compose (honeypots, nms, elk, etc.) + +Within the T-Pot project, we provide all the tools and documentation necessary to build your own honeypot system and contribute to our [Sicherheitstacho](https://sicherheitstacho.eu). + +The source code and configuration files are fully stored in the T-Pot GitHub repository. The docker images are pre-configured for the T-Pot environment. If you want to run the docker images separately, make sure you study the docker-compose configuration (`/opt/tpot/etc/tpot.yml`) and the T-Pot systemd script (`/etc/systemd/system/tpot.service`), as they provide a good starting point for implementing changes. + +The individual docker configurations are located in the [docker folder](https://github.com/dtag-dev-sec/tpotce/tree/master/docker). # System Requirements Depending on your installation type, whether you install on [real hardware](#hardware) or in a [virtual machine](#vm), make sure your designated T-Pot system meets the following requirements: -##### T-Pot Installation (Cowrie, Dionaea, ElasticPot, Glastopf, Honeytrap, Mailoney, Rdpy, Vnclowpot, ELK, Suricata+P0f & Tools) -When installing the T-Pot ISO image, make sure the target system (physical/virtual) meets the following minimum requirements: +##### T-Pot Standard Installation +- Honeypots: ciscoasa, conpot, cowrie, dionaea, elasticpot, heralding, honeytrap, mailoney, rdpy, snare, tanner and vnclowpot +- Tools: cockpit, cyberchef, ELK, elasticsearch head, ewsposter, NGINX, spiderfoot, p0f and suricata -- 4 GB RAM (6-8 GB recommended) -- 64 GB SSD (128 GB SSD recommended) +- 6-8 GB RAM (less RAM is possible but might introduce swapping) +- 128 GB SSD (smaller is possible but limits the capacity of storing events) - Network via DHCP - A working, non-proxied, internet connection -##### Honeypot Installation (Cowrie, Dionaea, ElasticPot, Glastopf, Honeytrap, Mailoney, Rdpy, Vnclowpot) -When installing the T-Pot ISO image, make sure the target system (physical/virtual) meets the following minimum requirements: +##### Sensor Installation +- Honeypots: ciscoasa, conpot, cowrie, dionaea, elasticpot, heralding, honeytrap, mailoney, rdpy, snare, tanner and vnclowpot +- Tools: cockpit -- 3 GB RAM (4-6 GB recommended) -- 64 GB SSD (64 GB SSD recommended) +- 6-8 GB RAM (less RAM is possible but might introduce swapping) +- 128 GB SSD (smaller is possible but limits the capacity of storing events) - Network via DHCP - A working, non-proxied, internet connection -##### Industrial Installation (ConPot, eMobility, ELK, Suricata+P0f & Tools) -When installing the T-Pot ISO image, make sure the target system (physical/virtual) meets the following minimum requirements: +##### Industrial Installation +- Honeypots: conpot, rdpy, vnclowpot +- Tools: cockpit, cyberchef, ELK, elasticsearch head, ewsposter, NGINX, spiderfoot, p0f and suricata -- 4 GB RAM (8 GB recommended) -- 64 GB SSD (128 GB SSD recommended) +- 6-8 GB RAM (less RAM is possible but might introduce swapping) +- 128 GB SSD (smaller is possible but limits the capacity of storing events) - Network via DHCP - A working, non-proxied, internet connection -##### Everything Installation (Everything, all of the above) -When installing the T-Pot ISO image, make sure the target system (physical/virtual) meets the following minimum requirements: +##### Collector Installation (because sometimes all you want to do is catching credentials) +- Honeypots: heralding +- Tools: cockpit, cyberchef, ELK, elasticsearch head, ewsposter, NGINX, spiderfoot, p0f and suricata -- 8+ GB RAM -- 128+ GB SSD +- 6-8 GB RAM (less RAM is possible but might introduce swapping) +- 128 GB SSD (smaller is possible but limits the capacity of storing events) +- Network via DHCP +- A working, non-proxied, internet connection + +##### NextGen Installation (Glutton instead of Honeytrap) +- Honeypots: ciscoasa, conpot, cowrie, dionaea, elasticpot, glutton, heralding, mailoney, rdpy, snare, tanner and vnclowpot +- Tools: cockpit, cyberchef, ELK, elasticsearch head, ewsposter, NGINX, spiderfoot, p0f and suricata + +- 6-8 GB RAM (less RAM is possible but might introduce swapping) +- 128 GB SSD (smaller is possible but limits the capacity of storing events) +- Network via DHCP +- A working, non-proxied, internet connection + +##### Legacy Installation (honeypots based on Standard Installation of T-Pot 17.10) +- Honeypots: cowrie, dionaea, elasticpot, glastopf, honeytrap, mailoney, rdpy and vnclowpot +- Tools: cockpit, cyberchef, ELK, elasticsearch head, ewsposter, NGINX, spiderfoot, p0f and suricata + +- 6-8 GB RAM (less RAM is possible but might introduce swapping) +- 128 GB SSD (smaller is possible but limits the capacity of storing events) - Network via DHCP - A working, non-proxied, internet connection @@ -226,7 +224,7 @@ When installing the T-Pot ISO image, make sure the target system (physical/virtu # Installation The installation of T-Pot is straight forward and heavily depends on a working, transparent and non-proxied up and running internet connection. Otherwise the installation **will fail!** -Firstly, decide if you want to download our prebuilt installation ISO image from [GitHub](https://github.com/dtag-dev-sec/tpotce/releases) ***or*** [create it yourself](#createiso). +Firstly, decide if you want to download our prebuilt installation ISO image from [GitHub](https://github.com/dtag-dev-sec/tpotce/releases), [create it yourself](#createiso) ***or*** [post-install on a existing Ubuntu Server 18.04 LTS](#postinstall). Secondly, decide where you want to let the system run: [real hardware](#hardware) or in a [virtual machine](#vm)? @@ -240,7 +238,7 @@ You can download the prebuilt installation image from [GitHub](https://github.co For transparency reasons and to give you the ability to customize your install, we provide you the [ISO Creator](https://github.com/dtag-dev-sec/tpotce) that enables you to create your own ISO installation image. **Requirements to create the ISO image:** -- Ubuntu 16.04 LTS or newer as host system (others *may* work, but remain untested) +- Ubuntu 18.04 LTS or newer as host system (others *may* work, but *remain* untested) - 4GB of free memory - 32GB of free storage - A working internet connection @@ -265,11 +263,11 @@ You may want to run T-Pot in a virtualized environment. The virtual system confi We successfully tested T-Pot with [VirtualBox](https://www.virtualbox.org) and [VMWare](http://www.vmware.com) with just little modifications to the default machine configurations. -It is important to make sure you meet the [system requirements](#requirements) and assign a virtual harddisk >=64 GB, >=4 GB RAM and bridged networking to T-Pot. +It is important to make sure you meet the [system requirements](#requirements) and assign a virtual harddisk and RAM according to the requirements while making sure networking is bridged. You need to enable promiscuous mode for the network interface for suricata and p0f to work properly. Make sure you enable it during configuration. -If you want to use a wifi card as primary NIC for T-Pot, please be aware of the fact that not all network interface drivers support all wireless cards. E.g. in VirtualBox, you then have to choose the *"MT SERVER"* model of the NIC. +If you want to use a wifi card as a primary NIC for T-Pot, please be aware of the fact that not all network interface drivers support all wireless cards. E.g. in VirtualBox, you then have to choose the *"MT SERVER"* model of the NIC. Lastly, mount the `tpot.iso` ISO to the VM and continue with the installation.
@@ -283,82 +281,143 @@ If you decide to run T-Pot on dedicated hardware, just follow these steps: Whereas most CD burning tools allow you to burn from ISO images, the procedure to create a bootable USB stick from an ISO image depends on your system. There are various Windows GUI tools available, e.g. [this tip](http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-windows) might help you.
On [Linux](http://askubuntu.com/questions/59551/how-to-burn-a-iso-to-a-usb-device) or [MacOS](http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-mac-osx) you can use the tool *dd* or create the USB stick with T-Pot's [ISO Creator](https://github.com/dtag-dev-sec). 2. Boot from the USB stick and install. -*Please note*: We will ensure the compatibility with the Intel NUC platform, as we really like the form factor, looks and build quality. +*Please note*: We will ensure the compatibility with the Intel NUC platform, as we really like the form factor, looks and build quality. Other platforms **remain untested**. + + +## Post-Install Manual +In some cases it is necessary to install Ubuntu Server 18.04 LTS on your own: + - Cloud provider does not offer mounting ISO images. + - Hardware setup needs special drivers and / or kernels. + - Within your company you have to setup special policies, software etc. + - You just like to stay on top of things. + +While the T-Pot-Autoinstaller served us perfectly well in the past we decided to include the feature directly into T-Pot and its Universal Installer. + +Just follow these steps: + +``` +git clone https://github.com/dtag-dev-sec/tpotce +cd tpotce/iso/installer/ +./install.sh --type=user +``` + +The installer will now start and guide you through the install process. + + +## Post-Install Auto +You can also let the installer run automatically if you provide your own `tpot.conf`. A example is available in `tpotce/iso/installer/tpot.conf.dist`. This should make things easier in case you want to automate the installation i.e. with **Ansible**. + +Just follow these steps while adjusting `tpot.conf` to your needs: + +``` +git clone https://github.com/dtag-dev-sec/tpotce +cd tpotce/iso/installer/ +cp tpot.conf.dist tpot.conf +./install.sh --type=auto --conf=tpot.conf +``` + +The installer will start automatically and guide you through the install process. ## First Run -The installation requires very little interaction, only a locale and keyboard setting has to be answered for the basic linux installation. The system will reboot and please maintain an active internet connection. The T-Pot installer will start and ask you for an installation type, password for the **tsec** user and credentials for a **web user**. Everything else will be configured automatically. All docker images and other componenents will be downloaded. Depending on your network connection and the chosen installation type, the installation may take some time. During our tests (50Mbit down, 10Mbit up), the installation is usually finished within a 30 minute timeframe. +The installation requires very little interaction, only a locale and keyboard setting have to be answered for the basic linux installation. The system will reboot and please maintain the active internet connection. The T-Pot installer will start and ask you for an installation type, password for the **tsec** user and credentials for a **web user**. Everything else will be configured automatically. All docker images and other componenents will be downloaded. Depending on your network connection and the chosen installation type, the installation may take some time. During our tests (250Mbit down, 40Mbit up), the installation was usually finished within a 15-30 minute timeframe. -Once the installation is finished, the system will automatically reboot and you will be presented with the T-Pot login screen. On the console you may login with the **tsec** user: +Once the installation is finished, the system will automatically reboot and you will be presented with the T-Pot login screen. On the console you may login with: -- user: **tsec** -- pass: **password you chose during the installation** +- user: **[tsec or user]** *you chose during one of the post install methods* +- pass: **[password]** *you chose during the installation* All honeypot services are preconfigured and are starting automatically. -You can also login from your browser: ``https://:64297`` +You can login from your browser and access the Admin UI: `https://:64294` or via SSH to access the command line: `ssh -l tsec -p 64295 ` -- user: **user you chose during the installation** -- pass: **password you chose during the installation** +- user: **[tsec or user]** *you chose during one of the post install methods* +- pass: **[password]** *you chose during the installation* + +You can also login from your browser and access the Web UI: `https://:64297` +- user: **[user]** *you chose during the installation* +- pass: **[password]** *you chose during the installation* # System Placement -Make sure your system is reachable through the internet. Otherwise it will not capture any attacks, other than the ones from your internal network! We recommend you put it in an unfiltered zone, where all TCP and UDP traffic is forwarded to T-Pot's network interface. +Make sure your system is reachable through the internet. Otherwise it will not capture any attacks, other than the ones from your internal network! We recommend you put it in an unfiltered zone, where all TCP and UDP traffic is forwarded to T-Pot's network interface. However to avoid fingerprinting you can put T-Pot behind a firewall and forward all TCP / UDP traffic in the port range of 1-64000 to T-Pot while allowing access to ports > 64000 only from trusted IPs. A list of all relevant ports is available as part of the [Technical Concept](#concept)
Basically, you can forward as many TCP ports as you want, as honeytrap dynamically binds any TCP port that is not covered by the other honeypot daemons. +In case you need external Admin UI access, forward TCP port 64294 to T-Pot, see below. In case you need external SSH access, forward TCP port 64295 to T-Pot, see below. -In case you need external web access, forward TCP port 64297 to T-Pot, see below. +In case you need external Web UI access, forward TCP port 64297 to T-Pot, see below. T-Pot requires outgoing git, http, https connections for updates (Ubuntu, Docker, GitHub, PyPi) and attack submission (ewsposter, hpfeeds). Ports and availability may vary based on your geographical location. + +# Updates +For the ones of you who want to live on the bleeding edge of T-Pot development we introduced an update feature which will allow you to update all T-Pot relevant files to be up to date with the T-Pot master branch. +**If you made any relevant changes to the T-Pot relevant config files make sure to create a backup first.** +- The Update script will + - **merciless** overwrite local changes to be in sync with the T-Pot master branch + - upgrade the system to the latest kernel within Ubuntu 18.04.x LTS + - upgrade the system to the latest packages available within Ubuntu 18.04.x LTS + - update all resources to be en par with the T-Pot master branch + - ensure all T-Pot relevant system files will be patched / copied into original T-Pot state + +You simply run the update script: +``` +cd /opt/tpot/ +./update.sh -y +``` + +**Despite all our efforts please be reminded that updates sometimes may have unforeseen consequences. Please create a backup of the machine or the files with the most value to your work.** + # Options -The system is designed to run without any interaction or maintenance and automatically contribute to the community.
+The system is designed to run without any interaction or maintenance and automatically contributes to the community.
We know, for some this may not be enough. So here come some ways to further inspect the system and change configuration parameters. ## SSH and web access -By default, the SSH daemon only allows access on **tcp/64295** with a user / password combination from RFC1918 networks. However, if you want to be able to login remotely via SSH you need to put your SSH keys on the host as described below.
-It is configured to prevent password login from official IP addresses and pubkey-authentication must be used. Copy your SSH keyfile to `/home/tsec/.ssh/authorized_keys` and set the appropriate permissions (`chmod 600 authorized_keys`) as well as the correct ownership (`chown tsec:tsec authorized_keys`). +By default, the SSH daemon allows access on **tcp/64295** with a user / password combination and prevents credential brute forcing attempts using `fail2ban`. This also counts for Admin UI (**tcp/64294**) and Web UI (**tcp/64297**) access.
-If you do not have a SSH client at hand and still want to access the machine via SSH you can do so by directing your browser to `https://:64297`, enter +If you do not have a SSH client at hand and still want to access the machine via command line you can do so by accessing the Admin UI from `https://:64294`, enter -- user: **user you chose during the installation** -- pass: **password you chose during the installation** +- user: **[tsec or user]** *you chose during one of the post install methods* +- pass: **[password]** *you chose during the installation* -and choose **WebTTY** from the navigation bar. You will be prompted to allow access for this connection and enter the password for the user **tsec**. - -![WebTTY](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/doc/webssh.png) +![Cockpit Terminal](doc/cockpit3.png) ## Kibana Dashboard -Just open a web browser and access and connect to `https://:64297`, enter +Just open a web browser and connect to `https://:64297`, enter -- user: **user you chose during the installation** -- pass: **password you chose during the installation** +- user: **[user]** *you chose during the installation* +- pass: **[password]** *you chose during the installation* and **Kibana** will automagically load. The Kibana dashboard can be customized to fit your needs. By default, we haven't added any filtering, because the filters depend on your setup. E.g. you might want to filter out your incoming administrative ssh connections and connections to update servers. -![Dashbaord](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/doc/dashboard.png) +![Dashbaord](doc/kibana.png) ## Tools We included some web based management tools to improve and ease up on your daily tasks. -![ES Head Plugin](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/doc/headplugin.png) -![Netdata](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/doc/netdata.png) -![Portainer](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/doc/dockerui.png) -![Spiderfoot](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/doc/spiderfoot.png) +![Cockpit Overview](doc/cockpit1.png) + +![Cockpit Containers](doc/cockpit2.png) + +![Cyberchef](doc/cyberchef.png) + +![ES Head Plugin](doc/headplugin.png) + +![Spiderfoot](doc/spiderfoot.png) ## Maintenance -As mentioned before, the system was designed to be low maintenance. Basically, there is nothing you have to do but let it run. +As mentioned before, the system is designed to be low maintenance. Basically, there is nothing you have to do but let it run. If you run into any problems, a reboot may fix it :bowtie: @@ -366,8 +425,8 @@ If new versions of the components involved appear, we will test them and build n ## Community Data Submission -We provide T-Pot in order to make it accessible to all parties interested in honeypot deployment. By default, the data captured is submitted to a community backend. This community backend uses the data to feed a [community data view](http://sicherheitstacho.eu/?peers=communityPeers), a separate channel on our own [Sicherheitstacho](http://sicherheitstacho.eu), which is powered by our own set of honeypots. -You may opt out the submission to our community server by removing the `# Ewsposter service` from `/opt/tpot/etc/tpot.yml`: +We provide T-Pot in order to make it accessible to all parties interested in honeypot deployment. By default, the captured data is submitted to a community backend. This community backend uses the data to feed [Sicherheitstacho](https://sicherheitstacho.eu. +You may opt out of the submission by removing the `# Ewsposter service` from `/opt/tpot/etc/tpot.yml`: 1. Stop T-Pot services: `systemctl stop tpot` 2. Remove Ewsposter service: `vi /opt/tpot/etc/tpot.yml` 3. Remove the following lines, save and exit vi (`:x!`):
@@ -378,7 +437,7 @@ You may opt out the submission to our community server by removing the `# Ewspos restart: always networks: - ewsposter_local - image: "dtagdevsec/ewsposter:1710" + image: "dtagdevsec/ewsposter:1810" volumes: - /data:/data - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip @@ -393,9 +452,6 @@ We encourage you not to disable the data submission as it is the main purpose of # Roadmap As with every development there is always room for improvements ... -- Introduce new honeypots -- Improve automatic updates - Some features may be provided with updated docker images, others may require some hands on from your side. You are always invited to participate in development on our [GitHub](https://github.com/dtag-dev-sec/tpotce) page. @@ -405,7 +461,7 @@ You are always invited to participate in development on our [GitHub](https://git - We don't have access to your system. So we cannot remote-assist when you break your configuration. But you can simply reinstall. - The software was designed with best effort security, not to be in stealth mode. Because then, we probably would not be able to provide those kind of honeypot services. - You install and you run within your responsibility. Choose your deployment wisely as a system compromise can never be ruled out. -- Honeypots should - by design - not host any sensitive data. Make sure you don't add any. +- Honeypots should - by design - may not host any sensitive data. Make sure you don't add any. - By default, your data is submitted to the community dashboard. You can disable this in the config. But hey, wouldn't it be better to contribute to the community? @@ -417,20 +473,14 @@ Please report any issues or questions on our [GitHub issue list](https://github. We provide the software **as is** in a Community Edition format. T-Pot is designed to run out of the box and with zero maintenance involved.
We hope you understand that we cannot provide support on an individual basis. We will try to address questions, bugs and problems on our [GitHub issue list](https://github.com/dtag-dev-sec/tpotce/issues). -For general feedback you can write to cert @ telekom.de. - # Licenses The software that T-Pot is built on uses the following licenses. -
GPLv2: [conpot (by Lukas Rist)](https://github.com/mushorg/conpot/blob/master/LICENSE.txt), [dionaea](https://github.com/DinoTools/dionaea/blob/master/LICENSE), [honeytrap (by Tillmann Werner)](https://github.com/armedpot/honeytrap/blob/master/LICENSE), [suricata](http://suricata-ids.org/about/open-source/) -
GPLv3: [elasticpot (by Markus Schmall)](https://github.com/schmalle/ElasticPot), [emobility (by Mohamad Sbeiti)](https://github.com/dtag-dev-sec/emobility/blob/master/LICENSE), [ewsposter (by Markus Schroer)](https://github.com/dtag-dev-sec/ews/), [glastopf (by Lukas Rist)](https://github.com/glastopf/glastopf/blob/master/GPL), [rdpy](https://github.com/citronneur/rdpy/blob/master/LICENSE), [netdata](https://github.com/firehol/netdata/blob/master/LICENSE.md) -
Apache 2 License: [elasticsearch](https://github.com/elasticsearch/elasticsearch/blob/master/LICENSE.txt), [logstash](https://github.com/elasticsearch/logstash/blob/master/LICENSE), [kibana](https://github.com/elasticsearch/kibana/blob/master/LICENSE.md), [docker](https://github.com/docker/docker/blob/master/LICENSE), [elasticsearch-head](https://github.com/mobz/elasticsearch-head/blob/master/LICENCE) -
MIT License: [ctop](https://github.com/bcicen/ctop/blob/master/LICENSE), [wetty](https://github.com/krishnasrinivas/wetty/blob/master/LICENSE) -
zlib License: [vnclowpot](https://github.com/magisterquis/vnclowpot/blob/master/LICENSE) -
[cowrie (copyright disclaimer by Upi Tamminen)](https://github.com/micheloosterhof/cowrie/blob/master/doc/COPYRIGHT) -
[mailoney](https://github.com/awhitehatter/mailoney) -
[Ubuntu licensing](http://www.ubuntu.com/about/about-ubuntu/licensing) -
[Portainer](https://github.com/portainer/portainer/blob/develop/LICENSE) +
GPLv2: [conpot)](https://github.com/mushorg/conpot/blob/master/LICENSE.txt), [dionaea](https://github.com/DinoTools/dionaea/blob/master/LICENSE), [honeytrap](https://github.com/armedpot/honeytrap/blob/master/LICENSE), [suricata](http://suricata-ids.org/about/open-source/) +
GPLv3: [elasticpot](https://github.com/schmalle/ElasticPot), [ewsposter](https://github.com/dtag-dev-sec/ews/), [glastopf](https://github.com/glastopf/glastopf/blob/master/GPL), [rdpy](https://github.com/citronneur/rdpy/blob/master/LICENSE), [heralding](https://github.com/johnnykv/heralding/blob/master/LICENSE.txt), [snare](https://github.com/mushorg/snare/blob/master/LICENSE), [tanner](https://github.com/mushorg/snare/blob/master/LICENSE) +
Apache 2 License: [cyberchef](https://github.com/gchq/CyberChef/blob/master/LICENSE), [elasticsearch](https://github.com/elasticsearch/elasticsearch/blob/master/LICENSE.txt), [logstash](https://github.com/elasticsearch/logstash/blob/master/LICENSE), [kibana](https://github.com/elasticsearch/kibana/blob/master/LICENSE.md), [docker](https://github.com/docker/docker/blob/master/LICENSE), [elasticsearch-head](https://github.com/mobz/elasticsearch-head/blob/master/LICENCE) +
MIT license: [ciscoasa](https://github.com/Cymmetria/ciscoasa_honeypot/blob/master/LICENSE), [ctop](https://github.com/bcicen/ctop/blob/master/LICENSE), [glutton](https://github.com/mushorg/glutton/blob/master/LICENSE) +
Other: [cowrie](https://github.com/micheloosterhof/cowrie/blob/master/LICENSE.md), [mailoney](https://github.com/awhitehatter/mailoney), [Ubuntu licensing](http://www.ubuntu.com/about/about-ubuntu/licensing) # Credits @@ -438,6 +488,8 @@ Without open source and the fruitful development community we are proud to be a ### The developers and development communities of +* [ciscoasa](https://github.com/Cymmetria/ciscoasa_honeypot/graphs/contributors) +* [cockpit](https://github.com/cockpit-project/cockpit/graphs/contributors) * [conpot](https://github.com/mushorg/conpot/graphs/contributors) * [cowrie](https://github.com/micheloosterhof/cowrie/graphs/contributors) * [dionaea](https://github.com/DinoTools/dionaea/graphs/contributors) @@ -445,22 +497,22 @@ Without open source and the fruitful development community we are proud to be a * [elasticpot](https://github.com/schmalle/ElasticPot/graphs/contributors) * [elasticsearch](https://github.com/elastic/elasticsearch/graphs/contributors) * [elasticsearch-head](https://github.com/mobz/elasticsearch-head/graphs/contributors) -* [emobility](https://github.com/dtag-dev-sec/emobility/graphs/contributors) * [ewsposter](https://github.com/armedpot/ewsposter/graphs/contributors) * [glastopf](https://github.com/mushorg/glastopf/graphs/contributors) +* [glutton](https://github.com/mushorg/glutton/graphs/contributors) +* [heralding](https://github.com/johnnykv/heralding/graphs/contributors) * [honeytrap](https://github.com/armedpot/honeytrap/graphs/contributors) * [kibana](https://github.com/elastic/kibana/graphs/contributors) * [logstash](https://github.com/elastic/logstash/graphs/contributors) * [mailoney](https://github.com/awhitehatter/mailoney) -* [netdata](https://github.com/firehol/netdata/graphs/contributors) +* [medpot](https://github.com/schmalle/medpot/graphs/contributors) * [p0f](http://lcamtuf.coredump.cx/p0f3/) -* [portainer](https://github.com/portainer/portainer/graphs/contributors) * [rdpy](https://github.com/citronneur/rdpy) * [spiderfoot](https://github.com/smicallef/spiderfoot) +* [snare](https://github.com/mushorg/snare/graphs/contributors) +* [tanner](https://github.com/mushorg/tanner/graphs/contributors) * [suricata](https://github.com/inliniac/suricata/graphs/contributors) * [ubuntu](http://www.ubuntu.com/) -* [vnclowpot](https://github.com/magisterquis/vnclowpot) -* [wetty](https://github.com/krishnasrinivas/wetty/graphs/contributors) ### The following companies and organizations * [canonical](http://www.canonical.com/) @@ -478,4 +530,4 @@ We will be releasing a new version of T-Pot about every 6-12 months. # Fun Fact -Coffee just does not cut it anymore which is why we needed a different caffeine source and consumed *242* bottles of [Club Mate](https://de.wikipedia.org/wiki/Club-Mate) during the development of T-Pot 17.10 😇 +In an effort of saving the environment we are now brewing our own Mate Ice Tea and consumed 235 liters so far for the T-Pot 18.11 development 😇 diff --git a/bin/backup_es_folders.sh b/bin/backup_es_folders.sh index 32409e0bb..775f64f84 100755 --- a/bin/backup_es_folders.sh +++ b/bin/backup_es_folders.sh @@ -5,7 +5,7 @@ myES="http://127.0.0.1:64298/" myESSTATUS=$(curl -s -XGET ''$myES'_cluster/health' | jq '.' | grep -c green) if ! [ "$myESSTATUS" = "1" ] then - echo "### Elasticsearch is not available, try starting via 'systemctl start elk'." + echo "### Elasticsearch is not available, try starting via 'systemctl start tpot'." exit else echo "### Elasticsearch is available, now continuing." @@ -16,7 +16,7 @@ fi myCOUNT=1 myDATE=$(date +%Y%m%d%H%M) myELKPATH="/data/elk/data" -myKIBANAINDEXNAME=$(curl -s -XGET ''$myES'_cat/indices/' | grep .kibana | awk '{ print $4 }') +myKIBANAINDEXNAME=$(curl -s -XGET ''$myES'_cat/indices/' | grep -w ".kibana_1" | awk '{ print $4 }') myKIBANAINDEXPATH=$myELKPATH/nodes/0/indices/$myKIBANAINDEXNAME # Let's ensure normal operation on exit or if interrupted ... diff --git a/bin/clean.sh b/bin/clean.sh index 44c805f95..57ac7536c 100755 --- a/bin/clean.sh +++ b/bin/clean.sh @@ -32,10 +32,14 @@ fuLOGROTATE () { local myHONEYTRAPATTACKSTGZ="/data/honeytrap/attacks.tgz" local myHONEYTRAPDL="/data/honeytrap/downloads/" local myHONEYTRAPDLTGZ="/data/honeytrap/downloads.tgz" + local myTANNERF="/data/tanner/files/" + local myTANNERFTGZ="/data/tanner/files.tgz" # Ensure correct permissions and ownerships for logrotate to run without issues chmod 760 /data/ -R chown tpot:tpot /data -R +chmod 644 /data/nginx/conf -R +chmod 644 /data/nginx/cert -R # Run logrotate with force (-f) first, so the status file can be written and race conditions (with tar) be avoided logrotate -f -s $mySTATUS $myCONF @@ -47,23 +51,32 @@ if [ "$(fuEMPTY $myDIONAEABI)" != "0" ]; then tar cvfz $myDIONAEABITGZ $myDIONAE if [ "$(fuEMPTY $myDIONAEABIN)" != "0" ]; then tar cvfz $myDIONAEABINTGZ $myDIONAEABIN; fi if [ "$(fuEMPTY $myHONEYTRAPATTACKS)" != "0" ]; then tar cvfz $myHONEYTRAPATTACKSTGZ $myHONEYTRAPATTACKS; fi if [ "$(fuEMPTY $myHONEYTRAPDL)" != "0" ]; then tar cvfz $myHONEYTRAPDLTGZ $myHONEYTRAPDL; fi +if [ "$(fuEMPTY $myTANNERF)" != "0" ]; then tar cvfz $myTANNERFTGZ $myTANNERF; fi # Ensure correct permissions and ownership for previously created archives -chmod 760 $myCOWRIETTYTGZ $myCOWRIEDLTGZ $myDIONAEABITGZ $myDIONAEABINTGZ $myHONEYTRAPATTACKSTGZ $myHONEYTRAPDLTGZ -chown tpot:tpot $myCOWRIETTYTGZ $myCOWRIEDLTGZ $myDIONAEABITGZ $myDIONAEABINTGZ $myHONEYTRAPATTACKSTGZ $myHONEYTRAPDLTGZ +chmod 760 $myCOWRIETTYTGZ $myCOWRIEDLTGZ $myDIONAEABITGZ $myDIONAEABINTGZ $myHONEYTRAPATTACKSTGZ $myHONEYTRAPDLTGZ $myTANNERFTGZ +chown tpot:tpot $myCOWRIETTYTGZ $myCOWRIEDLTGZ $myDIONAEABITGZ $myDIONAEABINTGZ $myHONEYTRAPATTACKSTGZ $myHONEYTRAPDLTGZ $myTANNERFTGZ # Need to remove subfolders since too many files cause rm to exit with errors -rm -rf $myCOWRIETTYLOGS $myCOWRIEDL $myDIONAEABI $myDIONAEABIN $myHONEYTRAPATTACKS $myHONEYTRAPDL +rm -rf $myCOWRIETTYLOGS $myCOWRIEDL $myDIONAEABI $myDIONAEABIN $myHONEYTRAPATTACKS $myHONEYTRAPDL $myTANNERF # Recreate subfolders with correct permissions and ownership -mkdir -p $myCOWRIETTYLOGS $myCOWRIEDL $myDIONAEABI $myDIONAEABIN $myHONEYTRAPATTACKS $myHONEYTRAPDL -chmod 760 $myCOWRIETTYLOGS $myCOWRIEDL $myDIONAEABI $myDIONAEABIN $myHONEYTRAPATTACKS $myHONEYTRAPDL -chown tpot:tpot $myCOWRIETTYLOGS $myCOWRIEDL $myDIONAEABI $myDIONAEABIN $myHONEYTRAPATTACKS $myHONEYTRAPDL +mkdir -p $myCOWRIETTYLOGS $myCOWRIEDL $myDIONAEABI $myDIONAEABIN $myHONEYTRAPATTACKS $myHONEYTRAPDL $myTANNERF +chmod 760 $myCOWRIETTYLOGS $myCOWRIEDL $myDIONAEABI $myDIONAEABIN $myHONEYTRAPATTACKS $myHONEYTRAPDL $myTANNERF +chown tpot:tpot $myCOWRIETTYLOGS $myCOWRIEDL $myDIONAEABI $myDIONAEABIN $myHONEYTRAPATTACKS $myHONEYTRAPDL $myTANNERF # Run logrotate again to account for previously created archives - DO NOT FORCE HERE! logrotate -s $mySTATUS $myCONF } +# Let's create a function to clean up and prepare ciscoasa data +fuCISCOASA () { + if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/ciscoasa/*; fi + mkdir -p /data/ciscoasa/log + chmod 760 /data/ciscoasa -R + chown tpot:tpot /data/ciscoasa -R +} + # Let's create a function to clean up and prepare conpot data fuCONPOT () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/conpot/*; fi @@ -101,27 +114,35 @@ fuELK () { # ELK data will be kept for <= 90 days, check /etc/crontab for curator modification # ELK daemon log files will be removed if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/elk/log/*; fi - mkdir -p /data/elk + mkdir -p /data/elk chmod 760 /data/elk -R chown tpot:tpot /data/elk -R } -# Let's create a function to clean up and prepare emobility data -fuEMOBILITY () { - if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/emobility/*; fi - mkdir -p /data/emobility/log - chmod 760 /data/emobility -R - chown tpot:tpot /data/emobility -R -} - # Let's create a function to clean up and prepare glastopf data fuGLASTOPF () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/glastopf/*; fi - mkdir -p /data/glastopf + mkdir -p /data/glastopf/db /data/glastopf/log chmod 760 /data/glastopf -R chown tpot:tpot /data/glastopf -R } +# Let's create a function to clean up and prepare glastopf data +fuGLUTTON () { + if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/glutton/*; fi + mkdir -p /data/glutton/log + chmod 760 /data/glutton -R + chown tpot:tpot /data/glutton -R +} + +# Let's create a function to clean up and prepare heralding data +fuHERALDING () { + if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/heralding/*; fi + mkdir -p /data/heralding/log + chmod 760 /data/heralding -R + chown tpot:tpot /data/heralding -R +} + # Let's create a function to clean up and prepare honeytrap data fuHONEYTRAP () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/honeytrap/*; fi @@ -138,6 +159,22 @@ fuMAILONEY () { chown tpot:tpot /data/mailoney/ -R } +# Let's create a function to clean up and prepare mailoney data +fuMEDPOT () { + if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/medpot/*; fi + mkdir -p /data/medpot/log/ + chmod 760 /data/medpot/ -R + chown tpot:tpot /data/medpot/ -R +} + +# Let's create a function to clean up nginx logs +fuNGINX () { + if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/nginx/log/*; fi + touch /data/nginx/log/error.log + chmod 644 /data/nginx/conf -R + chmod 644 /data/nginx/cert -R +} + # Let's create a function to clean up and prepare rdpy data fuRDPY () { if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/rdpy/*; fi @@ -170,15 +207,14 @@ fuP0F () { chown tpot:tpot -R /data/p0f } -# Let's create a function to clean up and prepare vnclowpot data -fuVNCLOWPOT () { - if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/vnclowpot/*; fi - mkdir -p /data/vnclowpot/log/ - chmod 760 /data/vnclowpot/ -R - chown tpot:tpot /data/vnclowpot/ -R +# Let's create a function to clean up and prepare p0f data +fuTANNER () { + if [ "$myPERSISTENCE" != "on" ]; then rm -rf /data/tanner/*; fi + mkdir -p /data/tanner/log /data/tanner/files + chmod 760 -R /data/tanner + chown tpot:tpot -R /data/tanner } - # Avoid unwanted cleaning if [ "$myPERSISTENCE" = "" ]; then @@ -201,19 +237,22 @@ if [ "$myPERSISTENCE" = "on" ]; fuLOGROTATE else echo "Cleaning up and preparing data folders." + fuCISCOASA fuCONPOT fuCOWRIE fuDIONAEA fuELASTICPOT fuELK - fuEMOBILITY fuGLASTOPF + fuGLUTTON + fuHERALDING fuHONEYTRAP fuMAILONEY + fuMEDPOT + fuNGINX fuRDPY fuSPIDERFOOT fuSURICATA fuP0F - fuVNCLOWPOT + fuTANNER fi - diff --git a/bin/dps.sh b/bin/dps.sh index 8de11cba7..29a89faca 100755 --- a/bin/dps.sh +++ b/bin/dps.sh @@ -1,44 +1,15 @@ #/bin/bash -# Show current status of all running containers +# Show current status of T-Pot containers myPARAM="$1" -myIMAGES="$(cat /opt/tpot/etc/tpot.yml | grep -v '#' | grep container_name | cut -d: -f2)" +myCONTAINERS="$(cat /opt/tpot/etc/tpot.yml | grep -v '#' | grep container_name | cut -d: -f2 | sort | tr -d " ")" myRED="" myGREEN="" myBLUE="" myWHITE="" myMAGENTA="" -function fuCONTAINERSTATUS { -local myNAME="$1" -local mySTATUS="$(/usr/bin/docker ps -f name=$myNAME --format "table {{.Status}}" -f status=running -f status=exited | tail -n 1)" -myDOWN="$(echo "$mySTATUS" | grep -o -E "(STATUS|NAMES|Exited)")" - -case "$myDOWN" in - STATUS) - mySTATUS="$myRED"DOWN"$myWHITE" - ;; - NAMES) - mySTATUS="$myRED"DOWN"$myWHITE" - ;; - Exited) - mySTATUS="$myRED$mySTATUS$myWHITE" - ;; - *) - mySTATUS="$myGREEN$mySTATUS$myWHITE" - ;; -esac - -printf "$mySTATUS" -} - -function fuCONTAINERPORTS { -local myNAME="$1" -local myPORTS="$(/usr/bin/docker ps -f name=$myNAME --format "table {{.Ports}}" -f status=running -f status=exited | tail -n 1 | sed s/","/",\n\t\t\t\t\t\t\t"/g)" - -if [ "$myPORTS" != "PORTS" ]; - then - printf "$myBLUE$myPORTS$myWHITE" -fi +function fuGETSTATUS { +grc docker ps -f status=running -f status=exited --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -v "NAME" | sort } function fuGETSYS { @@ -51,16 +22,20 @@ echo while true do + myDPS=$(fuGETSTATUS) + myDPSNAMES=$(echo "$myDPS" | awk '{ print $1 }' | sort) fuGETSYS - printf "%-19s %-36s %s\n" "NAME" "STATUS" "PORTS" - for i in $myIMAGES; do - myNAME="$myMAGENTA$i$myWHITE" - printf "%-32s %-49s %s" "$myNAME" "$(fuCONTAINERSTATUS $i)" "$(fuCONTAINERPORTS $i)" - echo - if [ "$myPARAM" = "vv" ]; - then - /usr/bin/docker exec -t "$i" /bin/ps awfuwfxwf | egrep -v -E "awfuwfxwf|/bin/ps" - fi + printf "%-21s %-28s %s\n" "NAME" "STATUS" "PORTS" + if [ "$myDPS" != "" ]; + then + echo "$myDPS" + fi + for i in $myCONTAINERS; do + myAVAIL=$(echo "$myDPSNAMES" | grep -o "$i" | uniq | wc -l) + if [ "$myAVAIL" = "0" ]; + then + printf "%-28s %-28s\n" "$myRED$i" "DOWN$myWHITE" + fi done if [[ $myPARAM =~ ^([1-9]|[1-9][0-9]|[1-9][0-9][0-9])$ ]]; then diff --git a/bin/dump_es.sh b/bin/dump_es.sh index d496a98e0..9ed82b9b5 100755 --- a/bin/dump_es.sh +++ b/bin/dump_es.sh @@ -20,7 +20,7 @@ trap fuCLEANUP EXIT # Set vars myDATE=$(date +%Y%m%d%H%M) -myINDICES=$(curl -s -XGET ''$myES'_cat/indices/' | grep logstash | awk '{ print $3 }' | sort | grep -v 1970) +myINDICES=$(curl -s -XGET ''$myES'_cat/indices/' | awk '{ print $3 }' | sort | grep -v 1970) myES="http://127.0.0.1:64298/" myCOL1="" myCOL0="" @@ -41,5 +41,5 @@ for i in $myINDICES; # Build tar archive echo $myCOL1"### Now building tar archive: es_dump_"$myDATE".tgz" $myCOL0 -tar cvf es_dump_$myDATE.tar tmp/* +tar cvf es_dump_$myDATE.tar tmp/. echo $myCOL1"### Done."$myCOL0 diff --git a/bin/export_kibana-objects.sh b/bin/export_kibana-objects.sh index a48b90119..d7f944651 100755 --- a/bin/export_kibana-objects.sh +++ b/bin/export_kibana-objects.sh @@ -1,7 +1,8 @@ #!/bin/bash -# Export all Kibana objects +# Export all Kibana objects through Kibana Saved Objects API # Make sure ES is available myES="http://127.0.0.1:64298/" +myKIBANA="http://127.0.0.1:64296/" myESSTATUS=$(curl -s -XGET ''$myES'_cluster/health' | jq '.' | grep -c green) if ! [ "$myESSTATUS" = "1" ] then @@ -14,10 +15,11 @@ fi # Set vars myDATE=$(date +%Y%m%d%H%M) -myINDEXCOUNT=$(curl -s -XGET ''$myES'.kibana/index-pattern/logstash-*' | tr '\\' '\n' | grep "scripted" | wc -w) -myDASHBOARDS=$(curl -s -XGET ''$myES'.kibana/dashboard/_search?filter_path=hits.hits._id&pretty&size=10000' | jq '.hits.hits[] | {_id}' | jq -r '._id') -myVISUALIZATIONS=$(curl -s -XGET ''$myES'.kibana/visualization/_search?filter_path=hits.hits._id&pretty&size=10000' | jq '.hits.hits[] | {_id}' | jq -r '._id') -mySEARCHES=$(curl -s -XGET ''$myES'.kibana/search/_search?filter_path=hits.hits._id&pretty&size=10000' | jq '.hits.hits[] | {_id}' | jq -r '._id') +myINDEXCOUNT=$(curl -s -XGET ''$myKIBANA'api/saved_objects/_find?type=index-pattern' | jq '.saved_objects[].attributes' | tr '\\' '\n' | grep "scripted" | wc -w) +myINDEXID=$(curl -s -XGET ''$myKIBANA'api/saved_objects/_find?type=index-pattern' | jq '.saved_objects[].id' | tr -d '"') +myDASHBOARDS=$(curl -s -XGET ''$myKIBANA'api/saved_objects/_find?type=dashboard&per_page=300' | jq '.saved_objects[].id' | tr -d '"') +myVISUALIZATIONS=$(curl -s -XGET ''$myKIBANA'api/saved_objects/_find?type=visualization&per_page=300' | jq '.saved_objects[].id' | tr -d '"') +mySEARCHES=$(curl -s -XGET ''$myKIBANA'api/saved_objects/_find?type=search&per_page=300' | jq '.saved_objects[].id' | tr -d '"') myCOL1="" myCOL0="" @@ -29,8 +31,8 @@ trap fuCLEANUP EXIT # Export index patterns mkdir -p patterns -echo $myCOL1"### Now exporting"$myCOL0 $myINDEXCOUNT $myCOL1"index patterns." $myCOL0 -curl -s -XGET ''$myES'.kibana/index-pattern/logstash-*?' | jq '._source' > patterns/index-patterns.json +echo $myCOL1"### Now exporting"$myCOL0 $myINDEXCOUNT $myCOL1"index pattern fields." $myCOL0 +curl -s -XGET ''$myKIBANA'api/saved_objects/index-pattern/'$myINDEXID'' | jq '. | {attributes}' > patterns/$myINDEXID.json & echo # Export dashboards @@ -39,7 +41,7 @@ echo $myCOL1"### Now exporting"$myCOL0 $(echo $myDASHBOARDS | wc -w) $myCOL1"das for i in $myDASHBOARDS; do echo $myCOL1"###### "$i $myCOL0 - curl -s -XGET ''$myES'.kibana/dashboard/'$i'' | jq '._source' > dashboards/$i.json + curl -s -XGET ''$myKIBANA'api/saved_objects/dashboard/'$i'' | jq '. | {attributes}' > dashboards/$i.json & done; echo @@ -49,7 +51,7 @@ echo $myCOL1"### Now exporting"$myCOL0 $(echo $myVISUALIZATIONS | wc -w) $myCOL1 for i in $myVISUALIZATIONS; do echo $myCOL1"###### "$i $myCOL0 - curl -s -XGET ''$myES'.kibana/visualization/'$i'' | jq '._source' > visualizations/$i.json + curl -s -XGET ''$myKIBANA'api/saved_objects/visualization/'$i'' | jq '. | {attributes}' > visualizations/$i.json & done; echo @@ -59,10 +61,13 @@ echo $myCOL1"### Now exporting"$myCOL0 $(echo $mySEARCHES | wc -w) $myCOL1"searc for i in $mySEARCHES; do echo $myCOL1"###### "$i $myCOL0 - curl -s -XGET ''$myES'.kibana/search/'$i'' | jq '._source' > searches/$i.json + curl -s -XGET ''$myKIBANA'api/saved_objects/search/'$i'' | jq '. | {attributes}' > searches/$i.json & done; echo +# Wait for background exports to finish +wait + # Building tar archive echo $myCOL1"### Now building archive"$myCOL0 "kibana-objects_"$myDATE".tgz" tar cvfz kibana-objects_$myDATE.tgz patterns dashboards visualizations searches > /dev/null diff --git a/bin/import_kibana-objects.sh b/bin/import_kibana-objects.sh index 2ae37e6a2..5524ce550 100755 --- a/bin/import_kibana-objects.sh +++ b/bin/import_kibana-objects.sh @@ -2,6 +2,7 @@ # Import Kibana objects # Make sure ES is available myES="http://127.0.0.1:64298/" +myKIBANA="http://127.0.0.1:64296/" myESSTATUS=$(curl -s -XGET ''$myES'_cluster/health' | jq '.' | grep -c green) if ! [ "$myESSTATUS" = "1" ] then @@ -27,7 +28,7 @@ trap fuCLEANUP EXIT if [ "$myDUMP" = "" ]; then echo $myCOL1"### Please provide a backup file name."$myCOL0 - echo $myCOL1"### restore-kibana-objects.sh "$myCOL0 + echo $myCOL1"### import_kibana-objects.sh "$myCOL0 echo exit fi @@ -41,44 +42,61 @@ fi tar xvfz $myDUMP > /dev/null # Restore index patterns -myINDEXCOUNT=$(cat patterns/index-patterns.json | tr '\\' '\n' | grep "scripted" | wc -w) -echo $myCOL1"### Now importing"$myCOL0 $myINDEXCOUNT $myCOL1"index patterns." $myCOL0 -curl -s -XDELETE ''$myES'.kibana/index-pattern/logstash-*' > /dev/null -curl -s -XPUT ''$myES'.kibana/index-pattern/logstash-*' -T patterns/index-patterns.json > /dev/null +myINDEXID=$(ls patterns/*.json | cut -c 10- | rev | cut -c 6- | rev) +myINDEXCOUNT=$(cat patterns/$myINDEXID.json | tr '\\' '\n' | grep "scripted" | wc -w) +echo $myCOL1"### Now importing"$myCOL0 $myINDEXCOUNT $myCOL1"index pattern fields." $myCOL0 +curl -s -XDELETE ''$myKIBANA'api/saved_objects/index-pattern/logstash-*' -H "Content-Type: application/json" -H "kbn-xsrf: true" > /dev/null +curl -s -XDELETE ''$myKIBANA'api/saved_objects/index-pattern/'$myINDEXID'' -H "Content-Type: application/json" -H "kbn-xsrf: true" > /dev/null +curl -s -XPOST ''$myKIBANA'api/saved_objects/index-pattern/'$myINDEXID'' -H "Content-Type: application/json" -H "kbn-xsrf: true" -d @patterns/$myINDEXID.json > /dev/null & echo # Restore dashboards myDASHBOARDS=$(ls dashboards/*.json | cut -c 12- | rev | cut -c 6- | rev) echo $myCOL1"### Now importing "$myCOL0$(echo $myDASHBOARDS | wc -w)$myCOL1 "dashboards." $myCOL0 +for i in $myDASHBOARDS; + do + curl -s -XDELETE ''$myKIBANA'api/saved_objects/dashboard/'$i'' -H "Content-Type: application/json" -H "kbn-xsrf: true" > /dev/null & + done; +wait for i in $myDASHBOARDS; do echo $myCOL1"###### "$i $myCOL0 - curl -s -XDELETE ''$myES'.kibana/dashboard/'$i'' > /dev/null - curl -s -XPUT ''$myES'.kibana/dashboard/'$i'' -T dashboards/$i.json > /dev/null + curl -s -XPOST ''$myKIBANA'api/saved_objects/dashboard/'$i'' -H "Content-Type: application/json" -H "kbn-xsrf: true" -d @dashboards/$i.json > /dev/null & done; +wait echo # Restore visualizations myVISUALIZATIONS=$(ls visualizations/*.json | cut -c 16- | rev | cut -c 6- | rev) echo $myCOL1"### Now importing "$myCOL0$(echo $myVISUALIZATIONS | wc -w)$myCOL1 "visualizations." $myCOL0 +for i in $myVISUALIZATIONS; + do + curl -s -XDELETE ''$myKIBANA'api/saved_objects/visualization/'$i'' -H "Content-Type: application/json" -H "kbn-xsrf: true" > /dev/null & + done; +wait for i in $myVISUALIZATIONS; do echo $myCOL1"###### "$i $myCOL0 - curl -s -XDELETE ''$myES'.kibana/visualization/'$i'' > /dev/null - curl -s -XPUT ''$myES'.kibana/visualization/'$i'' -T visualizations/$i.json > /dev/null + curl -s -XPOST ''$myKIBANA'api/saved_objects/visualization/'$i'' -H "Content-Type: application/json" -H "kbn-xsrf: true" -d @visualizations/$i.json > /dev/null & done; +wait echo # Restore searches mySEARCHES=$(ls searches/*.json | cut -c 10- | rev | cut -c 6- | rev) echo $myCOL1"### Now importing "$myCOL0$(echo $mySEARCHES | wc -w)$myCOL1 "searches." $myCOL0 +for i in $mySEARCHES; + do + curl -s -XDELETE ''$myKIBANA'api/saved_objects/search/'$i'' -H "Content-Type: application/json" -H "kbn-xsrf: true" > /dev/null & + done; +wait for i in $mySEARCHES; do echo $myCOL1"###### "$i $myCOL0 - curl -s -XDELETE ''$myES'.kibana/search/'$i'' > /dev/null - curl -s -XPUT ''$myES'.kibana/search/'$i'' -T searches/$i.json > /dev/null + curl -s -XPOST ''$myKIBANA'api/saved_objects/search/'$i'' -H "Content-Type: application/json" -H "kbn-xsrf: true" -d @searches/$i.json > /dev/null & done; echo +wait # Stats echo diff --git a/bin/restore_es.sh b/bin/restore_es.sh index 506a5c8c2..9a461c6d2 100755 --- a/bin/restore_es.sh +++ b/bin/restore_es.sh @@ -42,6 +42,7 @@ tar xvf $myDUMP # Build indices list myINDICES=$(ls tmp/logstash*.gz | cut -c 5- | rev | cut -c 4- | rev) +myINDICES+=" .kibana" echo $myCOL1"### The following indices will be restored: "$myCOL0 echo $myINDICES echo diff --git a/bin/rules.sh b/bin/rules.sh new file mode 100755 index 000000000..b3b80ac8e --- /dev/null +++ b/bin/rules.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +### Vars, Ports for Standard services +myHOSTPORTS="7634 64294 64295" +myDOCKERCOMPOSEYML="$1" +myRULESFUNCTION="$2" + +function fuCHECKFORARGS { +### Check if args are present, if not throw error + +if [ "$myDOCKERCOMPOSEYML" != "" ] && ([ "$myRULESFUNCTION" == "set" ] || [ "$myRULESFUNCTION" == "unset" ]); + then + echo "All arguments met. Continuing." + else + echo "Usage: rules.sh <[set, unset]>" + exit +fi +} + +function fuNFQCHECK { +### Check if honeytrap or glutton is actively enabled in docker-compose.yml + +myNFQCHECK=$(grep -e '^\s*honeytrap:\|^\s*glutton:' $myDOCKERCOMPOSEYML | tr -d ': ' | uniq) +if [ "$myNFQCHECK" == "" ]; + then + echo "No NFQ related honeypot detected, no iptables rules needed. Exiting." + exit + else + echo "Detected $myNFQCHECK as NFQ based honeypot, iptables rules needed. Continuing." +fi +} + +function fuGETPORTS { +### Get ports from docker-compose.yml + +myDOCKERCOMPOSEPORTS=$(cat $myDOCKERCOMPOSEYML | yq -r '.services[].ports' | grep ':' | sed -e s/127.0.0.1// | tr -d '", ' | sed -e s/^:// | cut -f1 -d ':' ) +myDOCKERCOMPOSEPORTS+=" $myHOSTPORTS" +myRULESPORTS=$(for i in $myDOCKERCOMPOSEPORTS; do echo $i; done | sort -gu) +echo "Setting up / removing these ports:" +echo "$myRULESPORTS" +} + +function fuSETRULES { +### Setting up iptables rules for honeytrap +if [ "$myNFQCHECK" == "honeytrap" ]; + then + /sbin/iptables -w -A INPUT -s 127.0.0.1 -j ACCEPT + /sbin/iptables -w -A INPUT -d 127.0.0.1 -j ACCEPT + + for myPORT in $myRULESPORTS; do + /sbin/iptables -w -A INPUT -p tcp --dport $myPORT -j ACCEPT + done + + /sbin/iptables -w -A INPUT -p tcp --syn -m state --state NEW -j NFQUEUE +fi + +### Setting up iptables rules for glutton +if [ "$myNFQCHECK" == "glutton" ]; + then + /sbin/iptables -w -t raw -A PREROUTING -s 127.0.0.1 -j ACCEPT + /sbin/iptables -w -t raw -A PREROUTING -d 127.0.0.1 -j ACCEPT + + for myPORT in $myRULESPORTS; do + /sbin/iptables -w -t raw -A PREROUTING -p tcp --dport $myPORT -j ACCEPT + done + # No need for NFQ forwarding, such rules are set up by glutton +fi +} + +function fuUNSETRULES { +### Removing iptables rules for honeytrap +if [ "$myNFQCHECK" == "honeytrap" ]; + then + /sbin/iptables -w -D INPUT -s 127.0.0.1 -j ACCEPT + /sbin/iptables -w -D INPUT -d 127.0.0.1 -j ACCEPT + + for myPORT in $myRULESPORTS; do + /sbin/iptables -w -D INPUT -p tcp --dport $myPORT -j ACCEPT + done + + /sbin/iptables -w -D INPUT -p tcp --syn -m state --state NEW -j NFQUEUE +fi + +### Removing iptables rules for glutton +if [ "$myNFQCHECK" == "glutton" ]; + then + /sbin/iptables -w -t raw -D PREROUTING -s 127.0.0.1 -j ACCEPT + /sbin/iptables -w -t raw -D PREROUTING -d 127.0.0.1 -j ACCEPT + + for myPORT in $myRULESPORTS; do + /sbin/iptables -w -t raw -D PREROUTING -p tcp --dport $myPORT -j ACCEPT + done + # No need for removing NFQ forwarding, such rules are removed by glutton +fi +} + +# Main +fuCHECKFORARGS +fuNFQCHECK +fuGETPORTS + +if [ "$myRULESFUNCTION" == "set" ]; + then + fuSETRULES + else + fuUNSETRULES +fi diff --git a/bin/tped.sh b/bin/tped.sh new file mode 100755 index 000000000..4e8769f94 --- /dev/null +++ b/bin/tped.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# set backtitle, get filename +myBACKTITLE="T-Pot Edition Selection Tool" +myYMLS=$(cd /opt/tpot/etc/compose/ && ls -1 *.yml) +myLINK="/opt/tpot/etc/tpot.yml" + +# Let's load docker images in parallel +function fuPULLIMAGES { +local myTPOTCOMPOSE="/opt/tpot/etc/tpot.yml" +for name in $(cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d'"' -f2 | uniq) + do + docker pull $name & + done +wait +echo +} + +# setup menu +for i in $myYMLS; + do + myITEMS+="$i $(echo $i | cut -d "." -f1 | tr [:lower:] [:upper:]) " +done +myEDITION=$(dialog --backtitle "$myBACKTITLE" --menu "Select T-Pot Edition" 13 50 6 $myITEMS 3>&1 1>&2 2>&3 3>&-) +if [ "$myEDITION" == "" ]; + then + echo "Have a nice day!" + exit +fi +dialog --backtitle "$myBACKTITLE" --title "[ Activate now? ]" --yesno "\n$myEDITION" 7 50 +myOK=$? +if [ "$myOK" == "0" ]; + then + echo "OK - Activating and downloading latest images." + systemctl stop tpot + if [ "$(docker ps -aq)" != "" ]; + then + docker stop $(docker ps -aq) + docker rm $(docker ps -aq) + fi + rm -f $myLINK + ln -s /opt/tpot/etc/compose/$myEDITION $myLINK + fuPULLIMAGES + systemctl start tpot + echo "Done. Use \"dps.sh\" for monitoring" + else + echo "Have a nice day!" +fi diff --git a/bin/updateip.sh b/bin/updateip.sh index fb9ff9cdb..a0eecba1a 100755 --- a/bin/updateip.sh +++ b/bin/updateip.sh @@ -8,9 +8,11 @@ if [ "$myEXTIP" = "" ]; then myEXTIP=$myLOCALIP fi +mySSHUSER=$(cat /etc/passwd | grep 1000 | cut -d ':' -f1) sed -i "s#IP:.*#IP: $myLOCALIP ($myEXTIP)#" /etc/issue sed -i "s#SSH:.*#SSH: ssh -l tsec -p 64295 $myLOCALIP#" /etc/issue sed -i "s#WEB:.*#WEB: https://$myLOCALIP:64297#" /etc/issue +sed -i "s#ADMIN:.*#ADMIN: https://$myLOCALIP:64294#" /etc/issue tee /data/ews/conf/ews.ip << EOF [MAIN] ip = $myEXTIP diff --git a/doc/architecture.png b/doc/architecture.png index e23386c56..a76330f22 100644 Binary files a/doc/architecture.png and b/doc/architecture.png differ diff --git a/doc/cockpit1.png b/doc/cockpit1.png new file mode 100644 index 000000000..4bc05c492 Binary files /dev/null and b/doc/cockpit1.png differ diff --git a/doc/cockpit2.png b/doc/cockpit2.png new file mode 100644 index 000000000..bfcade65d Binary files /dev/null and b/doc/cockpit2.png differ diff --git a/doc/cockpit3.png b/doc/cockpit3.png new file mode 100644 index 000000000..d3f8df328 Binary files /dev/null and b/doc/cockpit3.png differ diff --git a/doc/cyberchef.png b/doc/cyberchef.png new file mode 100644 index 000000000..88c6276cd Binary files /dev/null and b/doc/cyberchef.png differ diff --git a/doc/headplugin.png b/doc/headplugin.png index bc71e96b4..602d17a4d 100644 Binary files a/doc/headplugin.png and b/doc/headplugin.png differ diff --git a/doc/kibana.png b/doc/kibana.png new file mode 100644 index 000000000..f58ff79a8 Binary files /dev/null and b/doc/kibana.png differ diff --git a/doc/spiderfoot.png b/doc/spiderfoot.png index 5db81fcc6..53837a353 100644 Binary files a/doc/spiderfoot.png and b/doc/spiderfoot.png differ diff --git a/docker/.DS_Store b/docker/.DS_Store new file mode 100644 index 000000000..3c6415782 Binary files /dev/null and b/docker/.DS_Store differ diff --git a/docker/ciscoasa/Dockerfile b/docker/ciscoasa/Dockerfile new file mode 100644 index 000000000..0d1e9ae26 --- /dev/null +++ b/docker/ciscoasa/Dockerfile @@ -0,0 +1,44 @@ +FROM alpine + +# Include dist +ADD dist/ /root/dist/ + +# Setup env and apt +RUN apk -U upgrade && \ + apk add build-base \ + git \ + libffi \ + libffi-dev \ + openssl \ + openssl-dev \ + python3 \ + python3-dev && \ + +# Setup user + addgroup -g 2000 ciscoasa && \ + adduser -S -s /bin/bash -u 2000 -D -g 2000 ciscoasa && \ + +# Get and install packages + mkdir -p /opt/ && \ + cd /opt/ && \ + git clone --depth=1 https://github.com/cymmetria/ciscoasa_honeypot && \ + cd ciscoasa_honeypot && \ + pip3 install --no-cache-dir --upgrade pip && \ + pip3 install --no-cache-dir -r requirements.txt && \ + cp /root/dist/asa_server.py /opt/ciscoasa_honeypot && \ + chown -R ciscoasa:ciscoasa /opt/ciscoasa_honeypot && \ + +# Clean up + apk del --purge build-base \ + git \ + libffi-dev \ + openssl-dev \ + python3-dev && \ + rm -rf /root/* && \ + rm -rf /var/cache/apk/* + +# Start ciscoasa +STOPSIGNAL SIGINT +WORKDIR /tmp/ciscoasa/ +USER ciscoasa:ciscoasa +CMD cp -R /opt/ciscoasa_honeypot/* /tmp/ciscoasa && exec python3 asa_server.py --ike-port 5000 --enable_ssl --port 8443 --verbose >> /var/log/ciscoasa/ciscoasa.log 2>&1 diff --git a/docker/ciscoasa/README.md b/docker/ciscoasa/README.md new file mode 100644 index 000000000..d33b33200 --- /dev/null +++ b/docker/ciscoasa/README.md @@ -0,0 +1,15 @@ +[![](https://images.microbadger.com/badges/version/dtagdevsec/ciscoasa:1811.svg)](https://microbadger.com/images/dtagdevsec/ciscoasa:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/ciscoasa:1811.svg)](https://microbadger.com/images/dtagdevsec/ciscoasa:1811 "Get your own image badge on microbadger.com") + +# ciscoasa + +[Ciscoasa](https://github.com/cymmetria/ciscoasa_honeypot) is a low interaction honeypot for the Cisco ASA component capable of detecting CVE-2018-0101, a DoS and remote code execution vulnerability + +This dockerized version is part of the **[T-Pot community honeypot](http://dtag-dev-sec.github.io/)** of Deutsche Telekom AG. + +The `Dockerfile` contains the blueprint for the dockerized ciscoasa and will be used to setup the docker image. + +The `docker-compose.yml` contains the necessary settings to test conpot using `docker-compose`. This will ensure to start the docker container with the appropriate permissions and port mappings. + +# Ciscoasa Dashboard + +![Ciscoasa Dashboard](doc/dashboard.png) diff --git a/docker/ciscoasa/dist/asa_server.py b/docker/ciscoasa/dist/asa_server.py new file mode 100644 index 000000000..e18838705 --- /dev/null +++ b/docker/ciscoasa/dist/asa_server.py @@ -0,0 +1,307 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import os +import time +import socket +import logging +logging.basicConfig(format='%(message)s') +import threading +from io import BytesIO +from xml.etree import ElementTree +from http.server import HTTPServer +from socketserver import ThreadingMixIn +from http.server import SimpleHTTPRequestHandler +import ike_server +import datetime + + +class NonBlockingHTTPServer(ThreadingMixIn, HTTPServer): + pass + +class hpflogger: + def __init__(self, hpfserver, hpfport, hpfident, hpfsecret, hpfchannel, serverid, verbose): + self.hpfserver=hpfserver + self.hpfport=hpfport + self.hpfident=hpfident + self.hpfsecret=hpfsecret + self.hpfchannel=hpfchannel + self.serverid=serverid + self.hpc=None + self.verbose=verbose + if (self.hpfserver and self.hpfport and self.hpfident and self.hpfport and self.hpfchannel and self.serverid): + import hpfeeds + try: + self.hpc = hpfeeds.new(self.hpfserver, self.hpfport, self.hpfident, self.hpfsecret) + logger.debug("Logging to hpfeeds using server: {0}, channel {1}.".format(self.hpfserver, self.hpfchannel)) + except (hpfeeds.FeedException, socket.error, hpfeeds.Disconnect): + logger.critical("hpfeeds connection not successful") + + def log(self, level, message): + if self.hpc: + if level in ['debug', 'info'] and not self.verbose: + return + self.hpc.publish(self.hpfchannel, "["+self.serverid+"] ["+level+"] ["+datetime.datetime.now().isoformat() +"] " + str(message)) + + +def header_split(h): + return [list(map(str.strip, l.split(': ', 1))) for l in h.strip().splitlines()] + + +class WebLogicHandler(SimpleHTTPRequestHandler): + logger = None + hpfl = None + + protocol_version = "HTTP/1.1" + + EXPLOIT_STRING = b"host-scan-reply" + RESPONSE = b""" + +9.0(1) +VPN Server could not parse request. +""" + + basepath = os.path.dirname(os.path.abspath(__file__)) + + alert_function = None + + def setup(self): + SimpleHTTPRequestHandler.setup(self) + self.request.settimeout(3) + + def send_header(self, keyword, value): + if keyword.lower() == 'server': + return + SimpleHTTPRequestHandler.send_header(self, keyword, value) + + def send_head(self): + # send_head will return a file object that do_HEAD/GET will use + # do_GET/HEAD are already implemented by SimpleHTTPRequestHandler + filename = os.path.basename(self.path.rstrip('/').split('?', 1)[0]) + + if self.path == '/': + self.send_response(200) + for k, v in header_split(""" + Content-Type: text/html + Cache-Control: no-cache + Pragma: no-cache + Set-Cookie: tg=; expires=Thu, 01 Jan 1970 22:00:00 GMT; path=/; secure + Set-Cookie: webvpn=; expires=Thu, 01 Jan 1970 22:00:00 GMT; path=/; secure + Set-Cookie: webvpnc=; expires=Thu, 01 Jan 1970 22:00:00 GMT; path=/; secure + Set-Cookie: webvpn_portal=; expires=Thu, 01 Jan 1970 22:00:00 GMT; path=/; secure + Set-Cookie: webvpnSharePoint=; expires=Thu, 01 Jan 1970 22:00:00 GMT; path=/; secure + Set-Cookie: webvpnlogin=1; path=/; secure + Set-Cookie: sdesktop=; expires=Thu, 01 Jan 1970 22:00:00 GMT; path=/; secure + """): + self.send_header(k, v) + self.end_headers() + return BytesIO(b'\n') + elif filename == 'asa': # don't allow dir listing + return self.send_file('wrong_url.html', 403) + else: + return self.send_file(filename) + + def redirect(self, loc): + self.send_response(302) + for k, v in header_split(""" + Content-Type: text/html + Content-Length: 0 + Cache-Control: no-cache + Pragma: no-cache + Location: %s + Set-Cookie: tg=; expires=Thu, 01 Jan 1970 22:00:00 GMT; path=/; secure + """ % (loc,)): + self.send_header(k, v) + self.end_headers() + + def do_GET(self): + if self.path == '/+CSCOE+/logon.html': + self.redirect('/+CSCOE+/logon.html?fcadbadd=1') + return + elif self.path.startswith('/+CSCOE+/logon.html?') and 'reason=1' in self.path: + self.wfile.write(self.send_file('logon_failure').getvalue()) + return + SimpleHTTPRequestHandler.do_GET(self) + + def do_POST(self): + data_len = int(self.headers.get('Content-length', 0)) + data = self.rfile.read(data_len) if data_len else b'' + body = self.RESPONSE + if self.EXPLOIT_STRING in data: + xml = ElementTree.fromstring(data) + payloads = [] + for x in xml.iter('host-scan-reply'): + payloads.append(x.text) + + self.alert_function(self.client_address[0], self.client_address[1], payloads) + + elif self.path == '/': + self.redirect('/+webvpn+/index.html') + return + elif self.path == '/+CSCOE+/logon.html': + self.redirect('/+CSCOE+/logon.html?fcadbadd=1') + return + elif self.path.split('?', 1)[0] == '/+webvpn+/index.html': + with open(os.path.join(self.basepath, 'asa', "logon_redir.html"), 'rb') as fh: + body = fh.read() + + self.send_response(200) + self.send_header('Content-Length', int(len(body))) + self.send_header('Content-Type', 'text/html; charset=UTF-8') + self.end_headers() + self.wfile.write(body) + return + + def send_file(self, filename, status_code=200, headers=[]): + try: + with open(os.path.join(self.basepath, 'asa', filename), 'rb') as fh: + body = fh.read() + self.send_response(status_code) + for k, v in headers: + self.send_header(k, v) + if status_code == 200: + for k, v in header_split(""" + Cache-Control: max-age=0 + Set-Cookie: webvpn=; expires=Thu, 01 Jan 1970 22:00:00 GMT; path=/; secure + Set-Cookie: webvpnc=; expires=Thu, 01 Jan 1970 22:00:00 GMT; path=/; secure + Set-Cookie: webvpnlogin=1; secure + X-Transcend-Version: 1 + """): + self.send_header(k, v) + self.send_header('Content-Length', int(len(body))) + self.send_header('Content-Type', 'text/html') + self.end_headers() + return BytesIO(body) + except IOError: + return self.send_file('wrong_url.html', 404) + + def log_message(self, format, *args): + self.logger.debug("{'timestamp': '%s', 'src_ip': '%s', 'payload_printable': '%s'}" % + (datetime.datetime.now().isoformat(), + self.client_address[0], + format % args)) + self.hpfl.log('debug', "%s - - [%s] %s" % + (self.client_address[0], + self.log_date_time_string(), + format % args)) + + def handle_one_request(self): + """Handle a single HTTP request. + Overriden to not send 501 errors + """ + self.close_connection = True + try: + self.raw_requestline = self.rfile.readline(65537) + if len(self.raw_requestline) > 65536: + self.requestline = '' + self.request_version = '' + self.command = '' + self.close_connection = 1 + return + if not self.raw_requestline: + self.close_connection = 1 + return + if not self.parse_request(): + # An error code has been sent, just exit + return + mname = 'do_' + self.command + if not hasattr(self, mname): + self.log_request() + self.close_connection = True + return + method = getattr(self, mname) + method() + self.wfile.flush() # actually send the response if not already done. + except socket.timeout as e: + # a read or a write timed out. Discard this connection + self.log_error("Request timed out: %r", e) + self.close_connection = 1 + return + + +if __name__ == '__main__': + import click + + logging.basicConfig(level=logging.INFO) + logger = logging.getLogger() + logger.info('info') + + @click.command() + @click.option('-h', '--host', default='0.0.0.0', help='Host to listen') + @click.option('-p', '--port', default=8443, help='Port to listen', type=click.INT) + @click.option('-i', '--ike-port', default=5000, help='Port to listen for IKE', type=click.INT) + @click.option('-s', '--enable_ssl', default=False, help='Enable SSL', is_flag=True) + @click.option('-c', '--cert', default=None, help='Certificate File Path (will generate self signed ' + 'cert if not supplied)') + @click.option('-v', '--verbose', default=False, help='Verbose logging', is_flag=True) + + # hpfeeds options + @click.option('--hpfserver', default=os.environ.get('HPFEEDS_SERVER'), help='HPFeeds Server') + @click.option('--hpfport', default=os.environ.get('HPFEEDS_PORT'), help='HPFeeds Port', type=click.INT) + @click.option('--hpfident', default=os.environ.get('HPFEEDS_IDENT'), help='HPFeeds Ident') + @click.option('--hpfsecret', default=os.environ.get('HPFEEDS_SECRET'), help='HPFeeds Secret') + @click.option('--hpfchannel', default=os.environ.get('HPFEEDS_CHANNEL'), help='HPFeeds Channel') + @click.option('--serverid', default=os.environ.get('SERVERID'), help='Verbose logging') + + + def start(host, port, ike_port, enable_ssl, cert, verbose, hpfserver, hpfport, hpfident, hpfsecret, hpfchannel, serverid): + """ + A low interaction honeypot for the Cisco ASA component capable of detecting CVE-2018-0101, + a DoS and remote code execution vulnerability + """ + + hpfl=hpflogger(hpfserver, hpfport, hpfident, hpfsecret, hpfchannel, serverid, verbose) + + def alert(cls, host, port, payloads): + logger.critical({ + 'timestamp': datetime.datetime.utcnow().isoformat(), + 'src_ip': host, + 'src_port': port, + 'payload_printable': payloads, + }) + #log to hpfeeds + hpfl.log("critical", { + 'src': host, + 'spt': port, + 'data': payloads, + }) + + if verbose: + logger.setLevel(logging.DEBUG) + + requestHandler = WebLogicHandler + requestHandler.alert_function = alert + requestHandler.logger = logger + requestHandler.hpfl = hpfl + + def log_date_time_string(): + """Return the current time formatted for logging.""" + now = datetime.datetime.now().isoformat() + return now + + def ike(): + ike_server.start(host, ike_port, alert, logger, hpfl) + t = threading.Thread(target=ike) + t.daemon = True + t.start() + + httpd = HTTPServer((host, port), requestHandler) + if enable_ssl: + import ssl + if not cert: + import gencert + cert = gencert.gencert() + httpd.socket = ssl.wrap_socket(httpd.socket, certfile=cert, server_side=True) + + logger.info('Starting server on port {:d}/tcp, use to stop'.format(port)) + hpfl.log('info', 'Starting server on port {:d}/tcp, use to stop'.format(port)) + + try: + httpd.serve_forever() + except KeyboardInterrupt: + pass + logger.info('Stopping server.') + hpfl.log('info', 'Stopping server.') + + httpd.server_close() + + start() diff --git a/docker/ciscoasa/doc/dashboard.png b/docker/ciscoasa/doc/dashboard.png new file mode 100644 index 000000000..15523a895 Binary files /dev/null and b/docker/ciscoasa/doc/dashboard.png differ diff --git a/docker/ciscoasa/docker-compose.yml b/docker/ciscoasa/docker-compose.yml new file mode 100644 index 000000000..8d1154aa3 --- /dev/null +++ b/docker/ciscoasa/docker-compose.yml @@ -0,0 +1,19 @@ +version: '2.3' + +services: + +# Ciscoasa service + ciscoasa: + build: . + container_name: ciscoasa + restart: always + tmpfs: + - /tmp/ciscoasa:uid=2000,gid=2000 + network_mode: "host" + ports: + - "5000:5000/udp" + - "8443:8443" + image: "dtagdevsec/ciscoasa:1811" + read_only: true + volumes: + - /data/ciscoasa/log:/var/log/ciscoasa diff --git a/docker/conpot/Dockerfile b/docker/conpot/Dockerfile index 97b1fc096..1d03245ff 100644 --- a/docker/conpot/Dockerfile +++ b/docker/conpot/Dockerfile @@ -1,43 +1,60 @@ FROM alpine -MAINTAINER MO # Include dist ADD dist/ /root/dist/ # Setup apt -RUN apk -U add bash \ - build-base \ - file \ - git \ - libev \ - libtool \ - libxslt \ - libxslt-dev \ - mariadb-dev \ - mariadb-client-libs \ - pkgconfig \ - python \ - python-dev \ - py-cffi && \ +RUN apk -U add \ + build-base \ + file \ + git \ + libev \ + libtool \ + libcap \ + libxslt \ + libxslt-dev \ + mariadb-dev \ + pkgconfig \ + python3 \ + python3-dev \ + py-cffi \ + py-cryptography \ + tcpdump \ + wget && \ # Setup ConPot - git clone https://github.com/mushorg/conpot /opt/conpot/ && \ + git clone --depth=1 https://github.com/mushorg/conpot /opt/conpot && \ cd /opt/conpot/ && \ - git checkout d97a68a054e4fe42ff90293188a5702ce8ab09a3 && \ - cp /root/dist/requirements.txt /opt/conpot/ && \ - python setup.py install && \ + # Patch to accept ENV for MIB path + sed -i "s/tmp_mib_dir = tempfile.mkdtemp()/tmp_mib_dir = tempfile.mkdtemp(dir=os.environ['CONPOT_TMP'])/" /opt/conpot/conpot/protocols/snmp/snmp_server.py && \ + # Change template default ports if <1024 + sed -i 's/port="2121"/port="21"/' /opt/conpot/conpot/templates/default/ftp/ftp.xml && \ + sed -i 's/port="8800"/port="80"/' /opt/conpot/conpot/templates/default/http/http.xml && \ + sed -i 's/port="6230"/port="623"/' /opt/conpot/conpot/templates/default/ipmi/ipmi.xml && \ + sed -i 's/port="5020"/port="502"/' /opt/conpot/conpot/templates/default/modbus/modbus.xml && \ + sed -i 's/port="10201"/port="102"/' /opt/conpot/conpot/templates/default/s7comm/s7comm.xml && \ + sed -i 's/port="16100"/port="161"/' /opt/conpot/conpot/templates/default/snmp/snmp.xml && \ + sed -i 's/port="6969"/port="69"/' /opt/conpot/conpot/templates/default/tftp/tftp.xml && \ + sed -i 's/port="16100"/port="161"/' /opt/conpot/conpot/templates/IEC104/snmp/snmp.xml && \ + sed -i 's/port="6230"/port="623"/' /opt/conpot/conpot/templates/ipmi/ipmi/ipmi.xml && \ + pip3 install --no-cache-dir -U pip setuptools && \ + pip3 install --no-cache-dir . && \ cd / && \ rm -rf /opt/conpot /tmp/* /var/tmp/* && \ - -# Setup user, groups and configs + setcap cap_net_bind_service=+ep /usr/bin/python3.6 && \ + +# Get wireshark manuf db for scapy, setup configs, user, groups + mkdir -p /etc/conpot /var/log/conpot /usr/share/wireshark && \ + wget https://github.com/wireshark/wireshark/raw/master/manuf -o /usr/share/wireshark/manuf && \ + cp /root/dist/conpot.cfg /etc/conpot/conpot.cfg && \ + cp -R /root/dist/templates /usr/lib/python3.6/site-packages/conpot/ && \ addgroup -g 2000 conpot && \ - adduser -S -s /bin/bash -u 2000 -D -g 2000 conpot && \ - mkdir -p /etc/conpot /var/log/conpot && \ - mv /root/dist/conpot.cfg /etc/conpot/conpot.cfg && \ - mv /root/dist/kamstrup_382/template.xml /usr/lib/python2.7/site-packages/Conpot-0.5.1-py2.7.egg/conpot/templates/kamstrup_382/ && \ + adduser -S -s /bin/ash -u 2000 -D -g 2000 conpot && \ # Clean up - apk del build-base \ + apk del --purge \ + build-base \ + cython-dev \ file \ git \ libev \ @@ -45,10 +62,14 @@ RUN apk -U add bash \ libxslt-dev \ mariadb-dev \ pkgconfig \ - python-dev \ - py-cffi && \ + python3-dev \ + py-cffi \ + wget && \ rm -rf /root/* && \ + rm -rf /tmp/* && \ rm -rf /var/cache/apk/* -# Run supervisor upon container start -CMD ["/usr/bin/conpot", "--template", "kamstrup_382", "--logfile", "/var/log/conpot/conpot.log", "--config", "/etc/conpot/conpot.cfg"] +# Start conpot +STOPSIGNAL SIGINT +USER conpot:conpot +CMD exec /usr/bin/conpot --temp_dir $CONPOT_TMP --template $CONPOT_TEMPLATE --logfile $CONPOT_LOG --config $CONPOT_CONFIG diff --git a/docker/conpot/README.md b/docker/conpot/README.md index 6b8c20783..72de159ac 100644 --- a/docker/conpot/README.md +++ b/docker/conpot/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/conpot:1710.svg)](https://microbadger.com/images/dtagdevsec/conpot:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/conpot:1710.svg)](https://microbadger.com/images/dtagdevsec/conpot:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/conpot:1811.svg)](https://microbadger.com/images/dtagdevsec/conpot:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/conpot:1811.svg)](https://microbadger.com/images/dtagdevsec/conpot:1811 "Get your own image badge on microbadger.com") # conpot @@ -12,4 +12,4 @@ The `docker-compose.yml` contains the necessary settings to test conpot using `d # ConPot Dashboard -![ConPot Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/conpot/doc/dashboard.png) +![ConPot Dashboard](doc/dashboard.png) diff --git a/docker/conpot/dist/command_responder.py b/docker/conpot/dist/command_responder.py new file mode 100644 index 000000000..74cabca20 --- /dev/null +++ b/docker/conpot/dist/command_responder.py @@ -0,0 +1,1123 @@ +# Copyright (C) 2013 Daniel creo Haslinger +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +import logging +import time +import random + +from datetime import datetime + +from html.parser import HTMLParser +from socketserver import ThreadingMixIn + +import http.server +import http.client +import os +from lxml import etree +from conpot.helpers import str_to_bytes +import conpot.core as conpot_core +import gevent + + +logger = logging.getLogger(__name__) + + +class HTTPServer(http.server.BaseHTTPRequestHandler): + + def log(self, version, request_type, addr, request, response=None): + + session = conpot_core.get_session('http', addr[0], addr[1], self.connection._sock.getsockname()[0], self.connection._sock.getsockname()[1]) + + log_dict = {'remote': addr, + 'timestamp': datetime.utcnow(), + 'data_type': 'http', + 'dst_port': self.server.server_port, + 'data': {0: {'request': '{0} {1}: {2}'.format(version, request_type, request)}}} + + logger.info('%s %s request from %s: %s. %s', version, request_type, addr, request, session.id) + + if response: + logger.info('%s response to %s: %s. %s', version, addr, response, session.id) + log_dict['data'][0]['response'] = '{0} response: {1}'.format(version, response) + session.add_event({'request': str(request), 'response': str(response)}) + else: + session.add_event({'request': str(request)}) + + # FIXME: Proper logging + + def get_entity_headers(self, rqfilename, headers, configuration): + + xml_headers = configuration.xpath( + '//http/htdocs/node[@name="' + rqfilename + '"]/headers/*' + ) + + if xml_headers: + + # retrieve all headers assigned to this entity + for header in xml_headers: + headers.append((header.attrib['name'], header.text)) + + return headers + + def get_trigger_appendix(self, rqfilename, rqparams, configuration): + + xml_triggers = configuration.xpath( + '//http/htdocs/node[@name="' + rqfilename + '"]/triggers/*' + ) + + if xml_triggers: + paramlist = rqparams.split('&') + + # retrieve all subselect triggers assigned to this entity + for triggers in xml_triggers: + + triggerlist = triggers.text.split(';') + trigger_missed = False + + for trigger in triggerlist: + if not trigger in paramlist: + trigger_missed = True + + if not trigger_missed: + return triggers.attrib['appendix'] + + return None + + def get_entity_trailers(self, rqfilename, configuration): + + trailers = [] + xml_trailers = configuration.xpath( + '//http/htdocs/node[@name="' + rqfilename + '"]/trailers/*' + ) + + if xml_trailers: + + # retrieve all headers assigned to this entity + for trailer in xml_trailers: + trailers.append((trailer.attrib['name'], trailer.text)) + + return trailers + + def get_status_headers(self, status, headers, configuration): + + xml_headers = configuration.xpath('//http/statuscodes/status[@name="' + + str(status) + '"]/headers/*') + + if xml_headers: + + # retrieve all headers assigned to this status + for header in xml_headers: + headers.append((header.attrib['name'], header.text)) + + return headers + + def get_status_trailers(self, status, configuration): + + trailers = [] + xml_trailers = configuration.xpath( + '//http/statuscodes/status[@name="' + str(status) + '"]/trailers/*' + ) + + if xml_trailers: + + # retrieve all trailers assigned to this status + for trailer in xml_trailers: + trailers.append((trailer.attrib['name'], trailer.text)) + + return trailers + + def send_response(self, code, message=None): + """Send the response header and log the response code. + This function is overloaded to change the behaviour when + loggers and sending default headers. + """ + + # replace integrated loggers with conpot logger.. + # self.log_request(code) + + if message is None: + if code in self.responses: + message = self.responses[code][0] + else: + message = '' + + if self.request_version != 'HTTP/0.9': + msg = str_to_bytes("{} {} {}\r\n".format(self.protocol_version, code, message)) + self.wfile.write(msg) + + # the following two headers are omitted, which is why we override + # send_response() at all. We do this one on our own... + + # - self.send_header('Server', self.version_string()) + # - self.send_header('Date', self.date_time_string()) + + def substitute_template_fields(self, payload): + + # initialize parser with our payload + parser = TemplateParser(payload) + + # triggers the parser, just in case of open / incomplete tags.. + parser.close() + + # retrieve and return (substituted) payload + return parser.payload + + def load_status(self, status, requeststring, requestheaders, headers, configuration, docpath, method='GET', body=None): + """Retrieves headers and payload for a given status code. + Certain status codes can be configured to forward the + request to a remote system. If not available, generate + a minimal response""" + + # handle PROXY tag + entity_proxy = configuration.xpath('//http/statuscodes/status[@name="' + + str(status) + + '"]/proxy') + + if entity_proxy: + source = 'proxy' + target = entity_proxy[0].xpath('./text()')[0] + else: + source = 'filesystem' + + # handle TARPIT tag + entity_tarpit = configuration.xpath( + '//http/statuscodes/status[@name="' + str(status) + '"]/tarpit' + ) + + if entity_tarpit: + tarpit = self.server.config_sanitize_tarpit(entity_tarpit[0].xpath('./text()')[0]) + else: + tarpit = None + + # check if we have to delay further actions due to global or local TARPIT configuration + if tarpit is not None: + # this node has its own delay configuration + self.server.do_tarpit(tarpit) + else: + # no delay configuration for this node. check for global latency + if self.server.tarpit is not None: + # fall back to the globally configured latency + self.server.do_tarpit(self.server.tarpit) + + # If the requested resource resides on our filesystem, + # we try retrieve all metadata and the resource itself from there. + if source == 'filesystem': + + # retrieve headers from entities configuration block + headers = self.get_status_headers(status, headers, configuration) + + # retrieve headers from entities configuration block + trailers = self.get_status_trailers(status, configuration) + + # retrieve payload directly from filesystem, if possible. + # If this is not possible, return an empty, zero sized string. + try: + if not isinstance(status, int): + status = status.value + with open(os.path.join(docpath, 'statuscodes', str(int(status)) + '.status'), 'rb') as f: + payload = f.read() + + except IOError as e: + logger.exception('%s', e) + payload = '' + + # there might be template data that can be substituted within the + # payload. We only substitute data that is going to be displayed + # by the browser: + + # perform template substitution on payload + payload = self.substitute_template_fields(payload) + + # How do we transport the content? + chunked_transfer = configuration.xpath('//http/htdocs/node[@name="' + + str(status) + '"]/chunks') + + if chunked_transfer: + # Append a chunked transfer encoding header + headers.append(('Transfer-Encoding', 'chunked')) + chunks = str(chunked_transfer[0].xpath('./text()')[0]) + else: + # Calculate and append a content length header + headers.append(('Content-Length', payload.__len__())) + chunks = '0' + + return status, headers, trailers, payload, chunks + + # the requested status code is configured to forward the + # originally targeted resource to a remote system. + + elif source == 'proxy': + + # open a connection to the remote system. + # If something goes wrong, fall back to 503. + + # NOTE: we use try:except here because there is no perfect + # platform independent way to check file accessibility. + + trailers = [] + chunks = '0' + + try: + # Modify a few headers to fit our new destination and the fact + # that we're proxying while being unaware of any session foo.. + requestheaders['Host'] = target + requestheaders['Connection'] = 'close' + + remotestatus = 0 + conn = http.client.HTTPConnection(target) + conn.request(method, requeststring, body, dict(requestheaders)) + response = conn.getresponse() + + remotestatus = int(response.status) + headers = response.getheaders() # We REPLACE the headers to avoid duplicates! + payload = response.read() + + # WORKAROUND: to get around a strange httplib-behaviour when it comes + # to chunked transfer encoding, we replace the chunked-header with a + # valid Content-Length header: + + for i, header in enumerate(headers): + + if header[0].lower() == 'transfer-encoding' and header[1].lower() == 'chunked': + del headers[i] + break + + status = remotestatus + + except: + + # before falling back to 503, we check if we are ALREADY dealing with a 503 + # to prevent an infinite request handling loop... + + if status != 503: + + # we're handling another error here. + # generate a 503 response from configuration. + (status, headers, trailers, payload, chunks) = self.load_status(503, + requeststring, + self.headers, + headers, + configuration, + docpath) + + else: + + # oops, we're heading towards an infinite loop here, + # generate a minimal 503 response regardless of the configuration. + status = 503 + payload = '' + chunks = '0' + headers.append(('Content-Length', 0)) + + return status, headers, trailers, payload, chunks + + def load_entity(self, requeststring, headers, configuration, docpath): + """ + Retrieves status, headers and payload for a given entity, that + can be stored either local or on a remote system + """ + + # extract filename and GET parameters from request string + rqfilename = requeststring.partition('?')[0] + rqparams = requeststring.partition('?')[2] + + # handle ALIAS tag + entity_alias = configuration.xpath( + '//http/htdocs/node[@name="' + rqfilename + '"]/alias' + ) + if entity_alias: + rqfilename = entity_alias[0].xpath('./text()')[0] + + # handle SUBSELECT tag + rqfilename_appendix = self.get_trigger_appendix(rqfilename, rqparams, configuration) + if rqfilename_appendix: + rqfilename += '_' + rqfilename_appendix + + # handle PROXY tag + entity_proxy = configuration.xpath( + '//http/htdocs/node[@name="' + rqfilename + '"]/proxy' + ) + if entity_proxy: + source = 'proxy' + target = entity_proxy[0].xpath('./text()')[0] + else: + source = 'filesystem' + + # handle TARPIT tag + entity_tarpit = configuration.xpath( + '//http/htdocs/node[@name="' + rqfilename + '"]/tarpit' + ) + if entity_tarpit: + tarpit = self.server.config_sanitize_tarpit(entity_tarpit[0].xpath('./text()')[0]) + else: + tarpit = None + + # check if we have to delay further actions due to global or local TARPIT configuration + if tarpit is not None: + # this node has its own delay configuration + self.server.do_tarpit(tarpit) + else: + # no delay configuration for this node. check for global latency + if self.server.tarpit is not None: + # fall back to the globally configured latency + self.server.do_tarpit(self.server.tarpit) + + # If the requested resource resides on our filesystem, + # we try retrieve all metadata and the resource itself from there. + if source == 'filesystem': + + # handle STATUS tag + # ( filesystem only, since proxied requests come with their own status ) + entity_status = configuration.xpath( + '//http/htdocs/node[@name="' + rqfilename + '"]/status' + ) + if entity_status: + status = int(entity_status[0].xpath('./text()')[0]) + else: + status = 200 + + # retrieve headers from entities configuration block + headers = self.get_entity_headers(rqfilename, headers, configuration) + + # retrieve trailers from entities configuration block + trailers = self.get_entity_trailers(rqfilename, configuration) + + # retrieve payload directly from filesystem, if possible. + # If this is not possible, return an empty, zero sized string. + if os.path.isabs(rqfilename): + relrqfilename = rqfilename[1:] + else: + relrqfilename = rqfilename + + try: + with open(os.path.join(docpath, 'htdocs', relrqfilename), 'rb') as f: + payload = f.read() + + except IOError as e: + if not os.path.isdir(os.path.join(docpath, 'htdocs', relrqfilename)): + logger.error('Failed to get template content: %s', e) + payload = '' + + # there might be template data that can be substituted within the + # payload. We only substitute data that is going to be displayed + # by the browser: + + templated = False + for header in headers: + if header[0].lower() == 'content-type' and header[1].lower() == 'text/html': + templated = True + + if templated: + # perform template substitution on payload + payload = self.substitute_template_fields(payload) + + # How do we transport the content? + chunked_transfer = configuration.xpath( + '//http/htdocs/node[@name="' + rqfilename + '"]/chunks' + ) + + if chunked_transfer: + # Calculate and append a chunked transfer encoding header + headers.append(('Transfer-Encoding', 'chunked')) + chunks = str(chunked_transfer[0].xpath('./text()')[0]) + else: + # Calculate and append a content length header + headers.append(('Content-Length', payload.__len__())) + chunks = '0' + + return status, headers, trailers, payload, chunks + + # the requested resource resides on another server, + # so we act as a proxy between client and target system + + elif source == 'proxy': + + # open a connection to the remote system. + # If something goes wrong, fall back to 503 + + trailers = [] + + try: + conn = http.client.HTTPConnection(target) + conn.request("GET", requeststring) + response = conn.getresponse() + + status = int(response.status) + headers = response.getheaders() # We REPLACE the headers to avoid duplicates! + payload = response.read() + chunks = '0' + + except: + status = 503 + (status, headers, trailers, payload, chunks) = self.load_status(status, + requeststring, + self.headers, + headers, + configuration, + docpath) + + return status, headers, trailers, payload, chunks + + def send_chunked(self, chunks, payload, trailers): + """Send payload via chunked transfer encoding to the + client, followed by eventual trailers.""" + + chunk_list = chunks.split(',') + pointer = 0 + for cwidth in chunk_list: + cwidth = int(cwidth) + # send chunk length indicator + self.wfile.write(format(cwidth, 'x').upper() + "\r\n") + # send chunk payload + self.wfile.write(payload[pointer:pointer + cwidth] + "\r\n") + pointer += cwidth + + # is there another chunk that has not been configured? Send it anyway for the sake of completeness.. + if len(payload) > pointer: + # send chunk length indicator + self.wfile.write(format(len(payload) - pointer, 'x').upper() + "\r\n") + # send chunk payload + self.wfile.write(payload[pointer:] + "\r\n") + + # we're done with the payload. Send a zero chunk as EOF indicator + self.wfile.write('0'+"\r\n") + + # if there are trailing headers :-) we send them now.. + for trailer in trailers: + self.wfile.write("%s: %s\r\n" % (trailer[0], trailer[1])) + + # and finally, the closing ceremony... + self.wfile.write("\r\n") + + def send_error(self, code, message=None): + """Send and log an error reply. + This method is overloaded to make use of load_status() + to allow handling of "Unsupported Method" errors. + """ + + headers = [] + headers.extend(self.server.global_headers) + configuration = self.server.configuration + docpath = self.server.docpath + + if not hasattr(self, 'headers'): + self.headers = self.MessageClass(self.rfile, 0) + + trace_data_length = self.headers.get('content-length') + unsupported_request_data = None + + if trace_data_length: + unsupported_request_data = self.rfile.read(int(trace_data_length)) + + # there are certain situations where variables are (not yet) registered + # ( e.g. corrupted request syntax ). In this case, we set them manually. + if hasattr(self, 'path') and self.path is not None: + requeststring = self.path + else: + requeststring = '' + self.path = None + if message is not None: + logger.info(message) + + # generate the appropriate status code, header and payload + (status, headers, trailers, payload, chunks) = self.load_status(code, + requeststring.partition('?')[0], + self.headers, + headers, + configuration, + docpath) + + # send http status to client + self.send_response(status) + + # send all headers to client + for header in headers: + self.send_header(header[0], header[1]) + + self.end_headers() + + # decide upon sending content as a whole or chunked + if chunks == '0': + # send payload as a whole to the client + if type(payload) != bytes: + payload = payload.encode() + self.wfile.write(payload) + else: + # send payload in chunks to the client + self.send_chunked(chunks, payload, trailers) + + # loggers + self.log(self.request_version, self.command, self.client_address, (self.path, + self.headers._headers, + unsupported_request_data), status) + + def do_TRACE(self): + """Handle TRACE requests.""" + + # fetch configuration dependent variables from server instance + headers = [] + headers.extend(self.server.global_headers) + configuration = self.server.configuration + docpath = self.server.docpath + + # retrieve TRACE body data + # ( sticking to the HTTP protocol, there should not be any body in TRACE requests, + # an attacker could though use the body to inject data if not flushed correctly, + # which is done by accessing the data like we do now - just to be secure.. ) + + trace_data_length = self.headers.get('content-length') + trace_data = None + + if trace_data_length: + trace_data = self.rfile.read(int(trace_data_length)) + + # check configuration: are we allowed to use this method? + if self.server.disable_method_trace is True: + + # Method disabled by configuration. Fall back to 501. + status = 501 + (status, headers, trailers, payload, chunks) = self.load_status(status, + self.path, + self.headers, + headers, + configuration, + docpath) + + else: + + # Method is enabled + status = 200 + payload = '' + headers.append(('Content-Type', 'message/http')) + + # Gather all request data and return it to sender.. + for rqheader in self.headers: + payload = payload + str(rqheader) + ': ' + self.headers.get(rqheader) + "\n" + + # send initial HTTP status line to client + self.send_response(status) + + # send all headers to client + for header in headers: + self.send_header(header[0], header[1]) + + self.end_headers() + + # send payload (the actual content) to client + if type(payload) != bytes: + payload = payload.encode() + self.wfile.write(payload) + + # loggers + self.log(self.request_version, + self.command, + self.client_address, + (self.path, self.headers._headers, trace_data), + status) + + def do_HEAD(self): + """Handle HEAD requests.""" + + # fetch configuration dependent variables from server instance + headers = list() + headers.extend(self.server.global_headers) + configuration = self.server.configuration + docpath = self.server.docpath + + # retrieve HEAD body data + # ( sticking to the HTTP protocol, there should not be any body in HEAD requests, + # an attacker could though use the body to inject data if not flushed correctly, + # which is done by accessing the data like we do now - just to be secure.. ) + + head_data_length = self.headers.get('content-length') + head_data = None + + if head_data_length: + head_data = self.rfile.read(int(head_data_length)) + + # check configuration: are we allowed to use this method? + if self.server.disable_method_head is True: + + # Method disabled by configuration. Fall back to 501. + status = 501 + (status, headers, trailers, payload, chunks) = self.load_status(status, + self.path, + self.headers, + headers, + configuration, + docpath) + + else: + + # try to find a configuration item for this GET request + entity_xml = configuration.xpath( + '//http/htdocs/node[@name="' + + self.path.partition('?')[0] + '"]' + ) + + if entity_xml: + # A config item exists for this entity. Handle it.. + (status, headers, trailers, payload, chunks) = self.load_entity(self.path, + headers, + configuration, + docpath) + + else: + # No config item could be found. Fall back to a standard 404.. + status = 404 + (status, headers, trailers, payload, chunks) = self.load_status(status, + self.path, + self.headers, + headers, + configuration, + docpath) + + # send initial HTTP status line to client + self.send_response(status) + + # send all headers to client + for header in headers: + self.send_header(header[0], header[1]) + + self.end_headers() + + # loggers + self.log(self.request_version, + self.command, + self.client_address, + (self.path, self.headers._headers, head_data), + status) + + def do_OPTIONS(self): + """Handle OPTIONS requests.""" + + # fetch configuration dependent variables from server instance + headers = [] + headers.extend(self.server.global_headers) + configuration = self.server.configuration + docpath = self.server.docpath + + # retrieve OPTIONS body data + # ( sticking to the HTTP protocol, there should not be any body in HEAD requests, + # an attacker could though use the body to inject data if not flushed correctly, + # which is done by accessing the data like we do now - just to be secure.. ) + + options_data_length = self.headers.get('content-length') + options_data = None + + if options_data_length: + options_data = self.rfile.read(int(options_data_length)) + + # check configuration: are we allowed to use this method? + if self.server.disable_method_options is True: + + # Method disabled by configuration. Fall back to 501. + status = 501 + (status, headers, trailers, payload, chunks) = self.load_status(status, + self.path, + self.headers, + headers, + configuration, + docpath) + + else: + + status = 200 + payload = '' + + # Add ALLOW header to response. GET, POST and OPTIONS are static, HEAD and TRACE are dynamic + allowed_methods = 'GET' + + if self.server.disable_method_head is False: + # add head to list of allowed methods + allowed_methods += ',HEAD' + + allowed_methods += ',POST,OPTIONS' + + if self.server.disable_method_trace is False: + allowed_methods += ',TRACE' + + headers.append(('Allow', allowed_methods)) + + # Calculate and append a content length header + headers.append(('Content-Length', payload.__len__())) + + # Append CC header + headers.append(('Connection', 'close')) + + # Append CT header + headers.append(('Content-Type', 'text/html')) + + # send initial HTTP status line to client + self.send_response(status) + + # send all headers to client + for header in headers: + self.send_header(header[0], header[1]) + + self.end_headers() + + # loggers + self.log(self.request_version, + self.command, + self.client_address, + (self.path, self.headers._headers, options_data), + status) + + def do_GET(self): + """Handle GET requests""" + + # fetch configuration dependent variables from server instance + headers = [] + headers.extend(self.server.global_headers) + configuration = self.server.configuration + docpath = self.server.docpath + + # retrieve GET body data + # ( sticking to the HTTP protocol, there should not be any body in GET requests, + # an attacker could though use the body to inject data if not flushed correctly, + # which is done by accessing the data like we do now - just to be secure.. ) + + get_data_length = self.headers.get('content-length') + get_data = None + + if get_data_length: + get_data = self.rfile.read(int(get_data_length)) + + # try to find a configuration item for this GET request + logger.debug('Trying to handle GET to resource <%s>, initiated by %s', self.path, self.client_address) + entity_xml = configuration.xpath( + '//http/htdocs/node[@name="' + self.path.partition('?')[0] + '"]' + ) + + if entity_xml: + # A config item exists for this entity. Handle it.. + (status, headers, trailers, payload, chunks) = self.load_entity(self.path, + headers, + configuration, + docpath) + + else: + # No config item could be found. Fall back to a standard 404.. + status = 404 + (status, headers, trailers, payload, chunks) = self.load_status(status, + self.path, + self.headers, + headers, + configuration, + docpath, + 'GET') + + # send initial HTTP status line to client + self.send_response(status) + + # send all headers to client + for header in headers: + self.send_header(header[0], header[1]) + + self.end_headers() + + # decide upon sending content as a whole or chunked + if chunks == '0': + # send payload as a whole to the client + self.wfile.write(str_to_bytes(payload)) + else: + # send payload in chunks to the client + self.send_chunked(chunks, payload, trailers) + + # loggers + self.log(self.request_version, + self.command, + self.client_address, + (self.path, self.headers._headers, get_data), + status) + + def do_POST(self): + """Handle POST requests""" + + # fetch configuration dependent variables from server instance + headers = list() + headers.extend(self.server.global_headers) + configuration = self.server.configuration + docpath = self.server.docpath + + # retrieve POST data ( important to flush request buffers ) + post_data_length = self.headers.get('content-length') + post_data = None + + if post_data_length: + post_data = self.rfile.read(int(post_data_length)) + + # try to find a configuration item for this POST request + entity_xml = configuration.xpath( + '//http/htdocs/node[@name="' + self.path.partition('?')[0] + '"]' + ) + + if entity_xml: + # A config item exists for this entity. Handle it.. + (status, headers, trailers, payload, chunks) = self.load_entity(self.path, + headers, + configuration, + docpath) + + else: + # No config item could be found. Fall back to a standard 404.. + status = 404 + (status, headers, trailers, payload, chunks) = self.load_status(status, + self.path, + self.headers, + headers, + configuration, + docpath, + 'POST', + post_data) + + # send initial HTTP status line to client + self.send_response(status) + + # send all headers to client + for header in headers: + self.send_header(header[0], header[1]) + + self.end_headers() + + # decide upon sending content as a whole or chunked + if chunks == '0': + # send payload as a whole to the client + if type(payload) != bytes: + payload = payload.encode() + self.wfile.write(payload) + else: + # send payload in chunks to the client + self.send_chunked(chunks, payload, trailers) + + # loggers + self.log(self.request_version, + self.command, + self.client_address, + (self.path, self.headers._headers, post_data), + status) + + +class TemplateParser(HTMLParser): + def __init__(self, data): + self.databus = conpot_core.get_databus() + if type(data) == bytes: + data = data.decode() + self.data = data + HTMLParser.__init__(self) + self.payload = self.data + self.feed(self.data) + + def handle_startendtag(self, tag, attrs): + """ handles template tags provided in XHTML notation. + + Expected format: + Example: + + at the moment, the parser is space- and case-sensitive(!), + this could be improved by using REGEX for replacing the template tags + with actual values. + """ + + source = '' + key = '' + + # only parse tags that are conpot template tags ( ) + if tag == 'condata': + + # initialize original tag (needed for value replacement) + origin = '<' + tag + + for attribute in attrs: + + # extend original tag + origin = origin + ' ' + attribute[0] + '="' + attribute[1] + '"' + + # fill variables with all meta information needed to + # gather actual data from the other engines (databus, modbus, ..) + if attribute[0] == 'source': + source = attribute[1] + elif attribute[0] == 'key': + key = attribute[1] + + # finalize original tag + origin += ' />' + + # we really need a key in order to do our work.. + if key: + # deal with databus powered tags: + if source == 'databus': + self.result = self.databus.get_value(key) + self.payload = self.payload.replace(origin, str(self.result)) + + # deal with eval powered tags: + elif source == 'eval': + result = '' + # evaluate key + try: + result = eval(key) + except Exception as e: + logger.exception(e) + self.payload = self.payload.replace(origin, result) + + +class ThreadedHTTPServer(ThreadingMixIn, http.server.HTTPServer): + """Handle requests in a separate thread.""" + + +class SubHTTPServer(ThreadedHTTPServer): + """this class is necessary to allow passing custom request handler into + the RequestHandlerClass""" + daemon_threads = True + + def __init__(self, server_address, RequestHandlerClass, template, docpath): + http.server.HTTPServer.__init__(self, server_address, RequestHandlerClass) + + self.docpath = docpath + + # default configuration + self.update_header_date = True # this preserves authenticity + self.disable_method_head = False + self.disable_method_trace = False + self.disable_method_options = False + self.tarpit = '0' + + # load the configuration from template and parse it + # for the first time in order to reduce further handling.. + self.configuration = etree.parse(template) + + xml_config = self.configuration.xpath('//http/global/config/*') + if xml_config: + + # retrieve all global configuration entities + for entity in xml_config: + + if entity.attrib['name'] == 'protocol_version': + RequestHandlerClass.protocol_version = entity.text + + elif entity.attrib['name'] == 'update_header_date': + if entity.text.lower() == 'false': + # DATE header auto update disabled by configuration + self.update_header_date = False + elif entity.text.lower() == 'true': + # DATE header auto update enabled by configuration + self.update_header_date = True + + elif entity.attrib['name'] == 'disable_method_head': + if entity.text.lower() == 'false': + # HEAD method enabled by configuration + self.disable_method_head = False + elif entity.text.lower() == 'true': + # HEAD method disabled by configuration + self.disable_method_head = True + + elif entity.attrib['name'] == 'disable_method_trace': + if entity.text.lower() == 'false': + # TRACE method enabled by configuration + self.disable_method_trace = False + elif entity.text.lower() == 'true': + # TRACE method disabled by configuration + self.disable_method_trace = True + + elif entity.attrib['name'] == 'disable_method_options': + if entity.text.lower() == 'false': + # OPTIONS method enabled by configuration + self.disable_method_options = False + elif entity.text.lower() == 'true': + # OPTIONS method disabled by configuration + self.disable_method_options = True + + elif entity.attrib['name'] == 'tarpit': + if entity.text: + self.tarpit = self.config_sanitize_tarpit(entity.text) + + # load global headers from XML + self.global_headers = [] + xml_headers = self.configuration.xpath('//http/global/headers/*') + if xml_headers: + + # retrieve all headers assigned to this status code + for header in xml_headers: + if header.attrib['name'].lower() == 'date' and self.update_header_date is True: + # All HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT), + # without exception ( RFC-2616 ) + self.global_headers.append((header.attrib['name'], + time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime()))) + else: + self.global_headers.append((header.attrib['name'], header.text)) + + def config_sanitize_tarpit(self, value): + + # checks tarpit value for being either a single int or float, + # or a series of two concatenated integers and/or floats seperated by semicolon and returns + # either the (sanitized) value or zero. + + if value is not None: + + x, _, y = value.partition(';') + + try: + _ = float(x) + except ValueError: + # first value is invalid, ignore the whole setting. + logger.error("Invalid tarpit value: '%s'. Assuming no latency.", value) + return '0;0' + + try: + _ = float(y) + # both values are fine. + return value + except ValueError: + # second value is invalid, use the first one. + return x + + else: + return '0;0' + + def do_tarpit(self, delay): + + # sleeps the thread for $delay ( should be either 1 float to apply a static period of time to sleep, + # or 2 floats seperated by semicolon to sleep a randomized period of time determined by ( rand[x;y] ) + + lbound, _, ubound = delay.partition(";") + + if not lbound or lbound is None: + # no lower boundary found. Assume zero latency + pass + elif not ubound or ubound is None: + # no upper boundary found. Assume static latency + gevent.sleep(float(lbound)) + else: + # both boundaries found. Assume random latency between lbound and ubound + gevent.sleep(random.uniform(float(lbound), float(ubound))) + + +class CommandResponder(object): + + def __init__(self, host, port, template, docpath): + + # Create HTTP server class + self.httpd = SubHTTPServer((host, port), HTTPServer, template, docpath) + self.server_port = self.httpd.server_port + + def serve_forever(self): + self.httpd.serve_forever() + + def stop(self): + logging.info("HTTP server will shut down gracefully as soon as all connections are closed.") + self.httpd.shutdown() diff --git a/docker/conpot/dist/conpot.cfg b/docker/conpot/dist/conpot.cfg index 72fc34301..218e7b515 100644 --- a/docker/conpot/dist/conpot.cfg +++ b/docker/conpot/dist/conpot.cfg @@ -1,6 +1,10 @@ [common] sensorid = conpot +[virtual_file_system] +data_fs_url = %(CONPOT_TMP)s +fs_url = tar:///usr/lib/python3.6/site-packages/conpot/data.tar + [session] timeout = 30 @@ -10,7 +14,7 @@ group = conpot [json] enabled = True -filename = /var/log/conpot/conpot.json +filename = %(CONPOT_JSON_LOG)s [sqlite] enabled = False diff --git a/docker/conpot/dist/requirements.txt b/docker/conpot/dist/requirements.txt deleted file mode 100644 index ca8e68712..000000000 --- a/docker/conpot/dist/requirements.txt +++ /dev/null @@ -1,23 +0,0 @@ -gevent>=1.0 -pysnmp==4.3.5 -pysmi==0.1.3 -lxml -bottle -jinja2 -beautifulsoup4 -requests -sphinx==1.5.5 -libtaxii>=1.1.0 -MySQL-python -xlrd -crc16 -enum -hpfeeds -modbus-tk -stix-validator -stix -cybox -bacpypes==0.13.8 -pyghmi -mixbox -modbus-tk diff --git a/docker/conpot/dist/templates/IEC104/template.xml b/docker/conpot/dist/templates/IEC104/template.xml new file mode 100644 index 000000000..008e0e3db --- /dev/null +++ b/docker/conpot/dist/templates/IEC104/template.xml @@ -0,0 +1,675 @@ + + + + + + + + + + "Siemens, SIMATIC, S7-300" + + + "0.0" + + + conpot.emulators.misc.uptime.Uptime + + + "Corporate IT" + + + "DE-BER01" + + + "BER01, T2E" + + + "72" + + + + 1 + + + 1 + + + "Siemens, SIMATIC NET, CP 343-1 PN, 6GK7 343-1EX21-0XE0, HW: Version 2, FW: Version V1.2.3, Ethernet Port 1, Rack 0, 100Mbit" + + + 6 + + + 1000 + + + 100000000 + + + "\x00\x0e\x8c\x29\xc5\x1a" + + + 1 + + + 1 + + + conpot.emulators.misc.uptime.Uptime + + + "Compagnie Generale des Eaux" + + + 0 + + + 1 + + + 1618895 + + + 7018 + + + 291 + + + 455107 + + + 872264 + + + 143 + + + + + 2 + + + 60 + + + 31271 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 31282 + + + 69023 + + + 0 + + + 0 + + + 60 + + + 7 + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + "217.172.190.137" + + + 1 + + + "255.255.255.255" + + + 1 + + + 65528 + + + 0 + + + 4 + + + 0 + + + 1 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 144 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 2 + + + 0 + + + 100 + + + -1 + + + 0 + + + 101 + + + 42 + + + 45 + + + 0 + + + 30321 + + + 67821 + + + 2511 + + + 2 + + + "217.172.190.137" + + + 2404 + + + "0.0.0.0" + + + 0 + + + 1 + + + 728 + + + + 1441 + + + 1280 + + + 23 + + + 47 + + + "217.172.190.137" + + + 161 + + + "CP 343-1 IT" + + + + + + + 30 + + + + 15 + + + + 10 + + + + 20 + + + + + 12 + + + + 8 + + + + 254 + + + + + + 1 + + + 0 + + + 0 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + 1 + + + 0 + + + + + 1 + + + 1 + + + 0 + + + 0 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 2 + + + 1 + + + 2 + + + 2 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + 2 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + 103 + + + 31 + + + -49 + + + 28871 + + + 13781 + + + 119 + + + 219 + + + 1009 + + + -2 + + + 701 + + + 441 + + + + + 103 + + + 31 + + + 5 + + + 49 + + + 119 + + + 500 + + + 1 + + + + + 16.2 + + + 15.9 + + + 512.1 + + + 433.4 + + + 344.4 + + + -0.44013 + + + 43.0 + + + 41.2 + + + 12.1 + + + 91 + + + 98.8 + + + 110 + + + 85.1 + + + 85.2 + + + 410 + + + 592 + + + 1.5 + + + 44.7 + + + 11.9 + + + 221.45 + + + 13.4 + + + 0.000402 + + + + + 16.2 + + + 15.9 + + + 880 + + + 344.4 + + + 41.2 + + + 12.1 + + + + "" + + + + diff --git a/docker/conpot/dist/templates/default/template.xml b/docker/conpot/dist/templates/default/template.xml new file mode 100644 index 000000000..28ff00f28 --- /dev/null +++ b/docker/conpot/dist/templates/default/template.xml @@ -0,0 +1,78 @@ + + + + + + + "DoE Water Service" + + + "Central Pump" + + + "Pump Control Unit" + + + conpot.emulators.misc.uptime.Uptime + + + "0.0" + + + "DoE" + + + "Pump Control Unit" + + + "DoE" + + + "72" + + + [random.randint(0,1) for b in range(0,128)] + + + [random.randint(0,1) for b in range(0,32)] + + + [random.randint(0,1) for b in range(0,128)] + + + [random.randint(0,1) for b in range(0,32)] + + + [random.randint(0,1) for b in range(0,128)] + + + [random.randint(0,1) for b in range(0,32)] + + + [random.randint(0,1) for b in range(0,8)] + + + [0 for b in range(0,32)] + + + "Original Siemens Equipment" + + + "88111222" + + + "IM151-8 PN/DP CPU" + + + "" + + + + diff --git a/docker/conpot/dist/templates/guardian_ast/template.xml b/docker/conpot/dist/templates/guardian_ast/template.xml new file mode 100644 index 000000000..2961d76b5 --- /dev/null +++ b/docker/conpot/dist/templates/guardian_ast/template.xml @@ -0,0 +1,93 @@ + + + + + + + "SUPER" + + + "UNLEAD" + + + "DIESEL" + + + "ADBLUE" + + + "AVIA" + + + random.randint(1000, 9050) + + + random.randint(1000, 9050) + + + random.randint(1000, 9050) + + + random.randint(1000, 9050) + + + random.randint(3000, 9999) + + + random.randint(3000, 9999) + + + random.randint(3000, 9999) + + + random.randint(3000, 9999) + + + round(random.uniform(25.00, 75.99), 2) + + + round(random.uniform(25.00, 75.99), 2) + + + round(random.uniform(25.00, 75.99), 2) + + + round(random.uniform(25.00, 75.99), 2) + + + round(random.uniform(0.0, 9.99), 2) + + + round(random.uniform(0.0, 9.99), 2) + + + round(random.uniform(0.0, 9.99), 2) + + + round(random.uniform(0.0, 9.99), 2) + + + round(random.uniform(50.0, 59.99), 2) + + + round(random.uniform(50.0, 59.99), 2) + + + round(random.uniform(50.0, 59.99), 2) + + + round(random.uniform(50.0, 59.99), 2) + + + "" + + + + diff --git a/docker/conpot/dist/templates/ipmi/template.xml b/docker/conpot/dist/templates/ipmi/template.xml new file mode 100644 index 000000000..4738005f0 --- /dev/null +++ b/docker/conpot/dist/templates/ipmi/template.xml @@ -0,0 +1,18 @@ + + + + + + + "DoE" + + + + diff --git a/docker/conpot/dist/kamstrup_382/template.xml b/docker/conpot/dist/templates/kamstrup_382/template.xml similarity index 97% rename from docker/conpot/dist/kamstrup_382/template.xml rename to docker/conpot/dist/templates/kamstrup_382/template.xml index fb68a8a4c..376cf9c63 100644 --- a/docker/conpot/dist/kamstrup_382/template.xml +++ b/docker/conpot/dist/templates/kamstrup_382/template.xml @@ -413,43 +413,43 @@ '' - '192.168.254.111' + '0.0.0.0' - '192.168.254.112' + '0.0.0.0' '0.0.0.0' - '00:13:EA:00:72:FA' + '00:13:EA:00:00:00' 'YES' - '192.168.201.101' + '192.168.1.210' - '192.168.201.254' + '192.168.1.1' '255.255.255.0' - '192.168.200.1' + '192.168.0.1' - '192.168.200.254' + '192.168.0.254' '255.255.255.0' - 'de_fra_lxg00.local.dom' + 'pwr_ctrl_mgmt01.int.local' - '192.168.254.201' + '10.232.15.242' '50' diff --git a/docker/conpot/dist/templates/proxy/template.xml b/docker/conpot/dist/templates/proxy/template.xml new file mode 100644 index 000000000..5532e6538 --- /dev/null +++ b/docker/conpot/dist/templates/proxy/template.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/docker/conpot/doc/dashboard.png b/docker/conpot/doc/dashboard.png index b4830b52c..2ef87335f 100644 Binary files a/docker/conpot/doc/dashboard.png and b/docker/conpot/doc/dashboard.png differ diff --git a/docker/conpot/docker-compose.yml b/docker/conpot/docker-compose.yml index e64a510c7..18ef35b30 100644 --- a/docker/conpot/docker-compose.yml +++ b/docker/conpot/docker-compose.yml @@ -1,19 +1,131 @@ -version: '2.1' +# CONPOT TEMPLATE=[default, IEC104, guardian_ast, ipmi, kamstrup_382, proxy] +version: '2.3' networks: - conpot_local: + conpot_local_default: + conpot_local_IEC104: + conpot_local_guardian_ast: + conpot_local_ipmi: + conpot_local_kamstrup_382: services: -# Conpot service - conpot: - container_name: conpot +# Conpot default service + conpot_default: + build: . + container_name: conpot_default restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_default.json + - CONPOT_LOG=/var/log/conpot/conpot_default.log + - CONPOT_TEMPLATE=default + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 networks: - - conpot_local + - conpot_local_default + ports: +# - "69:69" + - "80:80" + - "102:102" + - "161:161" + - "502:502" +# - "623:623" + - "2121:21" + - "44818:44818" + - "47808:47808" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot IEC104 service + conpot_IEC104: + build: . + container_name: conpot_IEC104 + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json + - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log + - CONPOT_TEMPLATE=IEC104 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_IEC104 + ports: +# - "161:161" + - "2404:2404" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot guardian_ast service + conpot_guardian_ast: + build: . + container_name: conpot_guardian_ast + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json + - CONPOT_LOG=/var/log/conpot/conpot_guardian_ast.log + - CONPOT_TEMPLATE=guardian_ast + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_guardian_ast + ports: + - "10001:10001" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot ipmi + conpot_ipmi: + build: . + container_name: conpot_ipmi + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json + - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log + - CONPOT_TEMPLATE=ipmi + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_ipmi + ports: + - "623:623" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot kamstrup_382 + conpot_kamstrup_382: + build: . + container_name: conpot_kamstrup_382 + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json + - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log + - CONPOT_TEMPLATE=kamstrup_382 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_kamstrup_382 ports: - "1025:1025" - "50100:50100" - image: "dtagdevsec/conpot:1710" + image: "dtagdevsec/conpot:1811" + read_only: true volumes: - /data/conpot/log:/var/log/conpot diff --git a/docker/cowrie/Dockerfile b/docker/cowrie/Dockerfile index fb9935bff..d2742913f 100644 --- a/docker/cowrie/Dockerfile +++ b/docker/cowrie/Dockerfile @@ -1,35 +1,63 @@ FROM alpine -MAINTAINER MO # Include dist ADD dist/ /root/dist/ # Get and install dependencies & packages -RUN apk -U upgrade && \ - apk add git procps py-pip mpfr-dev openssl-dev mpc1-dev libffi-dev build-base python python-dev py-mysqldb py-requests py-setuptools gmp-dev && \ +RUN apk -U --no-cache add \ + build-base \ + git \ + gmp-dev \ + libcap \ + libffi-dev \ + mpc1-dev \ + mpfr-dev \ + openssl-dev \ + python \ + python-dev \ + py-mysqldb \ + py-pip \ + py-requests \ + py-setuptools && \ # Setup user addgroup -g 2000 cowrie && \ - adduser -S -s /bin/bash -u 2000 -D -g 2000 cowrie && \ + adduser -S -s /bin/ash -u 2000 -D -g 2000 cowrie && \ # Install cowrie from git - git clone https://github.com/micheloosterhof/cowrie.git /home/cowrie/cowrie/ && \ + git clone --depth=1 https://github.com/micheloosterhof/cowrie /home/cowrie/cowrie/ -b v1.3.0 && \ cd /home/cowrie/cowrie && \ - pip install --no-cache-dir --upgrade cffi && \ - pip install --no-cache-dir -U -r requirements.txt && \ + pip install --no-cache-dir --upgrade cffi pip && \ + pip install --no-cache-dir --upgrade -r requirements.txt && \ -# Setup user, groups and configs +# Setup configs + setcap cap_net_bind_service=+ep /usr/bin/python2.7 && \ cp /root/dist/cowrie.cfg /home/cowrie/cowrie/cowrie.cfg && \ - cp /root/dist/userdb.txt /home/cowrie/cowrie/data/userdb.txt && \ - chown cowrie:cowrie -R /home/cowrie/* && \ + chown cowrie:cowrie -R /home/cowrie/* /usr/lib/python2.7/site-packages/twisted/plugins && \ + +# Start Cowrie once to prevent dropin.cache errors upon container start caused by read-only filesystem + su - cowrie -c "export PYTHONPATH=/home/cowrie/cowrie && \ + cd /home/cowrie/cowrie && \ + /usr/bin/twistd --uid=2000 --gid=2000 -y cowrie.tac --pidfile cowrie.pid cowrie &" && \ + sleep 10 && \ # Clean up + apk del --purge build-base \ + git \ + gmp-dev \ + libcap \ + libffi-dev \ + mpc1-dev \ + mpfr-dev \ + python-dev \ + py-mysqldb \ + py-pip && \ rm -rf /root/* && \ - apk del git py-pip mpfr-dev mpc1-dev libffi-dev build-base py-mysqldb gmp-dev python-dev && \ - rm -rf /var/cache/apk/* + rm -rf /var/cache/apk/* && \ + rm -rf /home/cowrie/cowrie/cowrie.pid # Start cowrie ENV PYTHONPATH /home/cowrie/cowrie WORKDIR /home/cowrie/cowrie -USER cowrie -CMD ["/usr/bin/twistd", "--nodaemon", "-y", "cowrie.tac", "--pidfile", "var/run/cowrie.pid", "cowrie"] +USER cowrie:cowrie +CMD ["/usr/bin/twistd", "--nodaemon", "-y", "cowrie.tac", "--pidfile", "/tmp/cowrie/cowrie.pid", "cowrie"] diff --git a/docker/cowrie/README.md b/docker/cowrie/README.md index a2152c307..0ce529316 100644 --- a/docker/cowrie/README.md +++ b/docker/cowrie/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/cowrie:1710.svg)](https://microbadger.com/images/dtagdevsec/cowrie:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/cowrie:1710.svg)](https://microbadger.com/images/dtagdevsec/cowrie:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/cowrie:1811.svg)](https://microbadger.com/images/dtagdevsec/cowrie:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/cowrie:1811.svg)](https://microbadger.com/images/dtagdevsec/cowrie:1811 "Get your own image badge on microbadger.com") # cowrie @@ -12,4 +12,4 @@ The `docker-compose.yml` contains the necessary settings to test cowrie using `d # Cowrie Dashboard -![Cowrie Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/cowrie/doc/dashboard.png) +![Cowrie Dashboard](doc/dashboard.png) diff --git a/docker/cowrie/dist/cowrie.cfg b/docker/cowrie/dist/cowrie.cfg index 1a3a03fa4..2124f5e40 100644 --- a/docker/cowrie/dist/cowrie.cfg +++ b/docker/cowrie/dist/cowrie.cfg @@ -1,472 +1,25 @@ -# -# Cowrie configuration file (cowrie.cfg) -# - -# ============================================================================ -# General Honeypot Options -# ============================================================================ [honeypot] - -# Sensor name is used to identify this Cowrie instance. Used by the database -# logging modules such as mysql. -# -# If not specified, the logging modules will instead use the IP address of the -# server as the sensor name. -# -# (default: not specified) -#sensor_name=t-pot - -# Hostname for the honeypot. Displayed by the shell prompt of the virtual -# environment -# -# (default: svr04) hostname = ubuntu - - -# Directory where to save log files in. -# -# (default: log) -log_path = log - - -# Directory where to save downloaded artifacts in. -# -# (default: dl) -download_path = dl - - -# Directory for miscellaneous data files, such as the password database. -# -# (default: data_path) -data_path = data - - -# Directory where virtual file contents are kept in. -# -# This is only used by commands like 'cat' to display the contents of files. -# Adding files here is not enough for them to appear in the honeypot - the -# actual virtual filesystem is kept in filesystem_file (see below) -# -# (default: honeyfs) -contents_path = honeyfs - - -# File in the Python pickle format containing the virtual filesystem. -# -# This includes the filenames, paths, permissions for the Cowrie filesystem, -# but not the file contents. This is created by the bin/createfs utility from -# a real template linux installation. -# -# (default: fs.pickle) -filesystem_file = data/fs.pickle - - -# Directory for creating simple commands that only output text. -# -# The command must be placed under this directory with the proper path, such -# as: -# txtcmds/usr/bin/vi -# The contents of the file will be the output of the command when run inside -# the honeypot. -# -# In addition to this, the file must exist in the virtual filesystem -# -# (default: txtcmds) -txtcmds_path = txtcmds - - -# Maximum file size (in bytes) for downloaded files to be stored in 'download_path'. -# A value of 0 means no limit. If the file size is known to be too big from the start, -# the file will not be stored on disk at all. -# -# (default: 0) -#download_limit_size = 10485760 - - -# TTY logging will log a transcript of the complete terminal interaction in UML -# compatible format. -# (default: true) -ttylog = true - - - -# ============================================================================ -# Network Specific Options -# ============================================================================ - - -# IP address to bind to when opening outgoing connections. Used by wget and -# curl commands. -# -# (default: not specified) -#out_addr = 0.0.0.0 - - -# Fake address displayed as the address of the incoming connection. -# This doesn't affect logging, and is only used by honeypot commands such as -# 'w' and 'last' -# -# If not specified, the actual IP address is displayed instead (default -# behaviour). -# -# (default: not specified) -#fake_addr = 192.168.66.254 - - -# The IP address on which this machine is reachable on from the internet. -# Useful if you use portforwarding or other mechanisms. If empty, Cowrie -# will determine by itself. Used in 'netstat' output -# -#internet_facing_ip = 9.9.9.9 - - -# Enable to log the public IP of the honeypot (useful if listening on 127.0.0.1) -# IP address is obtained by querying http://myip.threatstream.com report_public_ip = true - - - -# ============================================================================ -# Authentication Specific Options -# ============================================================================ - - -# Class that implements the checklogin() method. -# -# Class must be defined in cowrie/core/auth.py -# Default is the 'UserDB' class which uses the password database. -# -# Alternatively the 'AuthRandom' class can be used, which will let -# a user login after a random number of attempts. -# It will also cache username/password combinations that allow login. -# -#auth_class = UserDB - -# When AuthRandom is used also set the -# auth_class_parameters: , , -# for example: 2, 5, 10 = allows access after randint(2,5) attempts -# and cache 10 combinations. -# auth_class = AuthRandom auth_class_parameters = 2, 5, 10 - - -# No authentication checking at all -# enabling 'auth_none' will enable the ssh2 'auth_none' authentication method -# this allows the requested user in without any verification at all -# -# (default: false) -#auth_none_enabled = false - - - -# ============================================================================ -# Historical SSH Specific Options -# historical options in [honeypot] that have not yet been moved to [ssh] -# ============================================================================ - -# Source Port to report in logs (useful if you use iptables to forward ports to Cowrie) reported_ssh_port = 22 +data_path = /tmp/cowrie/data - - -# ============================================================================ -# SSH Specific Options -# ============================================================================ [ssh] - -# Enable SSH support -# (default: true) -enabled = true - - -# Public and private SSH key files. If these don't exist, they are created -# automatically. -rsa_public_key = etc/ssh_host_rsa_key.pub -rsa_private_key = etc/ssh_host_rsa_key -dsa_public_key = etc/ssh_host_dsa_key.pub -dsa_private_key = etc/ssh_host_dsa_key - -# SSH Version String -# -# Use these to disguise your honeypot from a simple SSH version scan -# Examples: -# SSH-2.0-OpenSSH_5.1p1 Debian-5 -# SSH-1.99-OpenSSH_4.3 -# SSH-1.99-OpenSSH_4.7 -# SSH-1.99-Sun_SSH_1.1 -# SSH-2.0-OpenSSH_4.2p1 Debian-7ubuntu3.1 -# SSH-2.0-OpenSSH_4.3 -# SSH-2.0-OpenSSH_4.6 -# SSH-2.0-OpenSSH_5.1p1 Debian-5 -# SSH-2.0-OpenSSH_5.1p1 FreeBSD-20080901 -# SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu5 -# SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu6 -# SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7 -# SSH-2.0-OpenSSH_5.5p1 Debian-6 -# SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze1 -# SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze2 -# SSH-2.0-OpenSSH_5.8p2_hpn13v11 FreeBSD-20110503 -# SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1 -# SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2 -# SSH-2.0-OpenSSH_5.9 -# -# (default: "SSH-2.0-SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2") version = SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2 +listen_endpoints = tcp:22:interface=0.0.0.0 - -# IP addresses to listen for incoming SSH connections. -# -# (default: 0.0.0.0) = any IPv4 address -#listen_addr = 0.0.0.0 -# (use :: for listen to all IPv6 and IPv4 addresses) -#listen_addr = :: - - -# Port to listen for incoming SSH connections. -# -# (default: 2222) -#listen_port = 22 - - -# sftp_enabled enables the sftp subsystem -sftp_enabled = true - - -# Enable SSH direct-tcpip forwarding -# (default: true) -forwarding = true - - -# This enables redirecting forwarding requests to another address -# Useful for forwarding protocols to other honeypots -# (default: false) -forward_redirect = false - - -# Configure where to forward the data to. -# forward_redirect_ = : - -# Redirect http/https -forward_redirect_80 = 127.0.0.1:8000 -forward_redirect_443 = 127.0.0.1:8443 - -# To record SMTP traffic, install an SMTP honeypoint. -# (e.g https://github.com/awhitehatter/mailoney), run -# python mailoney.py -s yahoo.com -t schizo_open_relay -p 12525 -forward_redirect_25 = 127.0.0.1:12525 -forward_redirect_587 = 127.0.0.1:12525 - - - -# ============================================================================ -# Telnet Specific Options -# ============================================================================ [telnet] - -# Enable Telnet support, disabled by default enabled = true - -# IP addresses to listen for incoming Telnet connections. -# -# (default: 0.0.0.0) = any IPv4 address -#listen_addr = 0.0.0.0 -# (use :: for listen to all IPv6 and IPv4 addresses) -#listen_addr = :: - - -# Port to listen for incoming Telnet connections. -# -# (default: 2223) -#listen_port = 23 - -# Source Port to report in logs (useful if you use iptables to forward ports to Cowrie) +listen_endpoints = tcp:23:interface=0.0.0.0 reported_port = 23 - - -# ============================================================================ -# Database logging Specific Options -# ============================================================================ - -# XMPP Logging -# Log to an xmpp server. -# -#[database_xmpp] -#server = sensors.carnivore.it -#user = anonymous@sensors.carnivore.it -#password = anonymous -#muc = dionaea.sensors.carnivore.it -#signal_createsession = cowrie-events -#signal_connectionlost = cowrie-events -#signal_loginfailed = cowrie-events -#signal_loginsucceeded = cowrie-events -#signal_command = cowrie-events -#signal_clientversion = cowrie-events -#debug=true - - - -# ============================================================================ -# Output Plugins -# These provide an extensible mechanism to send audit log entries to third -# parties. The audit entries contain information on clients connecting to -# the honeypot. -# ============================================================================ - - -# JSON based logging module -# [output_jsonlog] +enabled = true logfile = log/cowrie.json - -# Supports logging to Elasticsearch -# This is a simple early release -# -#[output_elasticsearch] -#host = localhost -#port = 9200 -#index = cowrie -#type = cowrie - - -# Send login attemp information to SANS DShield -# See https://isc.sans.edu/ssh.html -# You must signup for an api key. -# Once registered, find your details at: https://isc.sans.edu/myaccount.html -# -#[output_dshield] -#userid = userid_here -#auth_key = auth_key_here -#batch_size = 100 - - -# Local Syslog output module -# -# This sends log messages to the local syslog daemon. -# Facility can be: -# KERN, USER, MAIL, DAEMON, AUTH, LPR, NEWS, UUCP, CRON, SYSLOG and LOCAL0 to LOCAL7. -# -# Format can be: -# text, cef -# -#[output_localsyslog] -#facility = USER -#format = text - - -# Text output -# This writes audit log entries to a text file -# -# Format can be: -# text, cef -# [output_textlog] +enabled = false logfile = log/cowrie-textlog.log format = text - - -# MySQL logging module -# Database structure for this module is supplied in doc/sql/mysql.sql -# -# MySQL logging requires extra software: sudo apt-get install libmysqlclient-dev -# MySQL logging requires an extra Python module: pip install mysql-python -# -#[output_mysql] -#host = localhost -#database = cowrie -#username = cowrie -#password = secret -#port = 3306 -#debug = false - -# Rethinkdb output module -# Rethinkdb output module requires extra Python module: pip install rethinkdb - -#[output_rethinkdblog] -#host = 127.0.0.1 -#port = 28015 -#table = output -#password = -#db = cowrie - -# SQLite3 logging module -# -# Logging to SQLite3 database. To init the database, use the script -# doc/sql/sqlite3.sql: -# sqlite3 < doc/sql/sqlite3.sql -# -#[output_sqlite] -#db_file = cowrie.db - -# MongoDB logging module -# -# MongoDB logging requires an extra Python module: pip install pymongo -# -#[output_mongodb] -#connection_string = mongodb://username:password@host:port/database -#database = dbname - - -# Splunk SDK output module - Legacy. Requires Splunk API installed -# This sends logs directly to Splunk using the Python REST SDK -# -#[output_splunklegacy] -#host = localhost -#port = 8889 -#username = admin -#password = password -#index = cowrie - - -# Splunk HTTP Event Collector (HEC) output module -# Sends JSON directly to Splunk over HTTPS -# mandatory fields: url, token -# optional fields: index, source, sourcetype, host -# -#[output_splunk] -#url = https://localhost:8088/services/collector/event -#token = 6A0EA6C6-8006-4E39-FC44-C35FF6E561A8 -#index = cowrie -#sourcetype = cowrie -#source = cowrie - - -# HPFeeds -# -#[output_hpfeeds] -#server = hpfeeds.mysite.org -#port = 10000 -#identifier = abc123 -#secret = secret -#debug=false - - -# VirusTotal output module -# You must signup for an api key. -# -#[output_virustotal] -#api_key = 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef -# - -#[output_slack] -# This will produce a _lot_ of messages - you have been warned.... -#channel = channel_that_events_should_be_posted_in -#token = slack_token_for_your_bot -##debug=true - - -# https://csirtg.io -# You must signup for an api key. -# -#[output_csirtg] -#username=wes -#feed=scanners -#description=random scanning activity -#token=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef - - -#[output_socketlog] -#address = 127.0.0.1:9000 -#timeout = 5 diff --git a/docker/cowrie/dist/userdb.txt b/docker/cowrie/dist/userdb.txt deleted file mode 100644 index ca66dff42..000000000 --- a/docker/cowrie/dist/userdb.txt +++ /dev/null @@ -1 +0,0 @@ -root:0:password diff --git a/docker/cowrie/doc/dashboard.png b/docker/cowrie/doc/dashboard.png index f4b8cee66..5432992c8 100644 Binary files a/docker/cowrie/doc/dashboard.png and b/docker/cowrie/doc/dashboard.png differ diff --git a/docker/cowrie/docker-compose.yml b/docker/cowrie/docker-compose.yml index 6357aea1a..0bd54a703 100644 --- a/docker/cowrie/docker-compose.yml +++ b/docker/cowrie/docker-compose.yml @@ -1,6 +1,4 @@ -# T-Pot (Standard) -# For docker-compose ... -version: '2.1' +version: '2.3' networks: cowrie_local: @@ -9,16 +7,19 @@ services: # Cowrie service cowrie: + build: . container_name: cowrie restart: always + tmpfs: + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 networks: - cowrie_local - cap_add: - - NET_BIND_SERVICE ports: - - "22:2222" - - "23:2223" - image: "dtagdevsec/cowrie:1710" + - "22:22" + - "23:23" + image: "dtagdevsec/cowrie:1811" + read_only: true volumes: - /data/cowrie/downloads:/home/cowrie/cowrie/dl - /data/cowrie/keys:/home/cowrie/cowrie/etc diff --git a/docker/cyberchef/Dockerfile b/docker/cyberchef/Dockerfile new file mode 100644 index 000000000..22f794d40 --- /dev/null +++ b/docker/cyberchef/Dockerfile @@ -0,0 +1,36 @@ +FROM alpine + +# Get and install dependencies & packages +RUN apk -U --no-cache add \ + curl \ + git \ + npm \ + nodejs && \ + npm install -g grunt-cli && \ + npm install -g http-server && \ + npm install npm@latest -g && \ + +# Install CyberChef + cd /root && \ + git clone https://github.com/gchq/cyberchef -b v7.11.1 --depth=1 && \ + chown -R nobody:nobody cyberchef && \ + cd cyberchef && \ + npm install && \ + grunt prod && \ + mkdir -p /opt/cyberchef && \ + mv build/prod/* /opt/cyberchef && \ + cd / && \ + +# Clean up + apk del --purge git \ + npm && \ + rm -rf /root/* && \ + rm -rf /var/cache/apk/* + +# Healthcheck +HEALTHCHECK --retries=10 CMD curl -s -XGET 'http://127.0.0.1:8000' + +# Set user, workdir and start spiderfoot +USER nobody:nobody +WORKDIR /opt/cyberchef +CMD ["http-server", "-p", "8000"] diff --git a/docker/cyberchef/README.md b/docker/cyberchef/README.md new file mode 100644 index 000000000..2c2e12387 --- /dev/null +++ b/docker/cyberchef/README.md @@ -0,0 +1,15 @@ +[![](https://images.microbadger.com/badges/version/dtagdevsec/cyberchef:1811.svg)](https://microbadger.com/images/dtagdevsec/cyberchef:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/cyberchef:1811.svg)](https://microbadger.com/images/dtagdevsec/cyberchef:1811 "Get your own image badge on microbadger.com") + +# cyberchef + +[cyberchef](https://github.com/gchq/CyberChef) The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis. + +This dockerized version is part of the **[T-Pot community honeypot](http://dtag-dev-sec.github.io/)** of Deutsche Telekom AG. + +The `Dockerfile` contains the blueprint for the dockerized version and will be used to setup the docker image. + +The `docker-compose.yml` contains the necessary settings to test cyberchef using `docker-compose`. This will ensure to start the docker container with the appropriate permissions and port mappings. + +# CyberChef UI + +![Cyberchef](doc/dashboard.png) diff --git a/docker/cyberchef/doc/dashboard.png b/docker/cyberchef/doc/dashboard.png new file mode 100644 index 000000000..852bafd1f Binary files /dev/null and b/docker/cyberchef/doc/dashboard.png differ diff --git a/docker/cyberchef/docker-compose.yml b/docker/cyberchef/docker-compose.yml new file mode 100644 index 000000000..899c6ae34 --- /dev/null +++ b/docker/cyberchef/docker-compose.yml @@ -0,0 +1,18 @@ +version: '2.3' + +networks: + cyberchef_local: + +services: + +# Cyberchef service + cyberchef: + build: . + container_name: cyberchef + restart: always + networks: + - cyberchef_local + ports: + - "127.0.0.1:64299:8000" + image: "dtagdevsec/cyberchef:1811" + read_only: true diff --git a/docker/dionaea/.DS_Store b/docker/dionaea/.DS_Store new file mode 100644 index 000000000..9b786ce52 Binary files /dev/null and b/docker/dionaea/.DS_Store differ diff --git a/docker/dionaea/Dockerfile b/docker/dionaea/Dockerfile index 2a2527ee3..1e3952058 100644 --- a/docker/dionaea/Dockerfile +++ b/docker/dionaea/Dockerfile @@ -1,5 +1,4 @@ FROM debian:stretch-slim -MAINTAINER MO ENV DEBIAN_FRONTEND noninteractive # Include dist @@ -7,55 +6,46 @@ ADD dist/ /root/dist/ # Install dependencies and packages RUN apt-get update -y && \ - apt-get upgrade -y && \ + apt-get dist-upgrade -y && \ apt-get install -y --no-install-recommends \ - autoconf \ - automake \ - build-essential \ - ca-certificates \ - check \ - cython3 \ - git \ - libcurl4-openssl-dev \ - libemu-dev \ - libev-dev \ - libglib2.0-dev \ - libloudmouth1-dev \ - libnetfilter-queue-dev \ - libnl-3-dev \ - libpcap-dev \ - libssl-dev \ - libtool \ - libudns-dev \ - procps \ - python3 \ - python3-dev \ - python3-bson \ - python3-yaml && \ + build-essential \ + ca-certificates \ + check \ + cmake \ + cython3 \ + git \ + libcap2-bin \ + libcurl4-openssl-dev \ + libemu-dev \ + libev-dev \ + libglib2.0-dev \ + libloudmouth1-dev \ + libnetfilter-queue-dev \ + libnl-3-dev \ + libpcap-dev \ + libssl-dev \ + libtool \ + libudns-dev \ + procps \ + python3 \ + python3-dev \ + python3-bson \ + python3-yaml \ + ttf-liberation && \ # Get and install dionaea - git clone https://github.com/dinotools/dionaea /root/dionaea/ && \ + git clone --depth=1 https://github.com/dinotools/dionaea -b 0.8.0 /root/dionaea/ && \ cd /root/dionaea && \ -# git checkout 99e9cfc88cfa8f3715813b18ec7006bca2622d76 && \ - autoreconf -vi && \ - ./configure \ - --prefix=/opt/dionaea \ - --with-python=/usr/bin/python3 \ - --with-cython-dir=/usr/bin \ - --enable-ev \ - --with-ev-include=/usr/include \ - --with-ev-lib=/usr/lib \ - --with-emu-lib=/usr/lib/libemu \ - --with-emu-include=/usr/include \ - --with-nl-include=/usr/include/libnl3 \ - --with-nl-lib=/usr/lib \ - --enable-static && \ + mkdir build && \ + cd build && \ + cmake -DCMAKE_INSTALL_PREFIX:PATH=/opt/dionaea .. && \ make && \ make install && \ # Setup user and groups addgroup --gid 2000 dionaea && \ adduser --system --no-create-home --shell /bin/bash --uid 2000 --disabled-password --disabled-login --gid 2000 dionaea && \ + setcap cap_net_bind_service=+ep /opt/dionaea/bin/dionaea && \ # Supply configs and set permissions chown -R dionaea:dionaea /opt/dionaea/var && \ @@ -64,11 +54,10 @@ RUN apt-get update -y && \ # Setup runtime and clean up apt-get purge -y \ - autoconf \ - automake \ build-essential \ ca-certificates \ check \ + cmake \ cython3 \ git \ libcurl4-openssl-dev \ @@ -85,7 +74,7 @@ RUN apt-get update -y && \ python3 \ python3-dev \ python3-bson \ - python3-yaml && \ + python3-yaml && \ apt-get install -y \ ca-certificates \ @@ -107,4 +96,5 @@ RUN apt-get update -y && \ rm -rf /root/* /var/lib/apt/lists/* /tmp/* /var/tmp/* # Start dionaea +USER dionaea:dionaea CMD ["/opt/dionaea/bin/dionaea", "-u", "dionaea", "-g", "dionaea", "-c", "/opt/dionaea/etc/dionaea/dionaea.cfg"] diff --git a/docker/dionaea/README.md b/docker/dionaea/README.md index a1ed616fe..cd86ece92 100644 --- a/docker/dionaea/README.md +++ b/docker/dionaea/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/dionaea:1710.svg)](https://microbadger.com/images/dtagdevsec/dionaea:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/dionaea:1710.svg)](https://microbadger.com/images/dtagdevsec/dionaea:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/dionaea:1811.svg)](https://microbadger.com/images/dtagdevsec/dionaea:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/dionaea:1811.svg)](https://microbadger.com/images/dtagdevsec/dionaea:1811 "Get your own image badge on microbadger.com") # dionaea @@ -12,4 +12,4 @@ The `docker-compose.yml` contains the necessary settings to test dionaea using ` # Dionaea Dashboard -![Dionaea Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/dionaea/doc/dashboard.png) +![Dionaea Dashboard](doc/dashboard.png) diff --git a/docker/dionaea/dist/etc/dionaea.cfg b/docker/dionaea/dist/etc/dionaea.cfg index 541d911f0..42da6ac91 100644 --- a/docker/dionaea/dist/etc/dionaea.cfg +++ b/docker/dionaea/dist/etc/dionaea.cfg @@ -8,11 +8,11 @@ listen.mode=getifaddrs # listen.interfaces=eth0,tap0 # Country -ssl.default.c=CN +ssl.default.c=AU # Common Name/domain name -ssl.default.cn= +ssl.default.cn=Some-State # Organization -ssl.default.o= +ssl.default.o=Internet Widgits Pty Ltd # Organizational Unit ssl.default.ou= diff --git a/docker/dionaea/dist/etc/ihandlers/emu_scripts.yaml b/docker/dionaea/dist/etc/ihandlers/emu_scripts.yaml new file mode 100644 index 000000000..411094621 --- /dev/null +++ b/docker/dionaea/dist/etc/ihandlers/emu_scripts.yaml @@ -0,0 +1,9 @@ +- name: emu_scripts + config: + # Maximum dumber of subdownloads + # max_subdownloads: 20 + enabled_handlers: + - powershell + - vbscript + # Be very careful if you use the raw_url handler + #- raw_url diff --git a/docker/dionaea/dist/etc/services/http.yaml b/docker/dionaea/dist/etc/services/http.yaml index 9a22e39b0..62d2f00c9 100644 --- a/docker/dionaea/dist/etc/services/http.yaml +++ b/docker/dionaea/dist/etc/services/http.yaml @@ -2,7 +2,7 @@ config: root: "/opt/dionaea/var/dionaea/roots/www" ports: - - 80 + - 81 ssl_ports: - 443 max_request_size: 32768 # maximum size in kbytes of the request (32MB) diff --git a/docker/dionaea/doc/dashboard.png b/docker/dionaea/doc/dashboard.png index 93e4ac583..3775c453c 100644 Binary files a/docker/dionaea/doc/dashboard.png and b/docker/dionaea/doc/dashboard.png differ diff --git a/docker/dionaea/docker-compose.yml b/docker/dionaea/docker-compose.yml index c26863878..fa35736ac 100644 --- a/docker/dionaea/docker-compose.yml +++ b/docker/dionaea/docker-compose.yml @@ -1,27 +1,21 @@ -# T-Pot (Standard) -# For docker-compose ... -version: '2.1' - -networks: - dionaea_local: +version: '2.3' services: # Dionaea service dionaea: + build: . container_name: dionaea stdin_open: true + tty: true restart: always - networks: - - dionaea_local - cap_add: - - NET_BIND_SERVICE + network_mode: "host" ports: - "20:20" - "21:21" - "42:42" - "69:69/udp" - - "8081:80" + - "81:81" - "135:135" - "443:443" - "445:445" @@ -33,7 +27,8 @@ services: - "5060:5060/udp" - "5061:5061" - "27017:27017" - image: "dtagdevsec/dionaea:1710" + image: "dtagdevsec/dionaea:1811" + read_only: true volumes: - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp diff --git a/docker/elasticpot/Dockerfile b/docker/elasticpot/Dockerfile index b1c4bad08..dc2743cb3 100644 --- a/docker/elasticpot/Dockerfile +++ b/docker/elasticpot/Dockerfile @@ -1,30 +1,34 @@ FROM alpine -MAINTAINER MS/MO # Include dist ADD dist/ /root/dist/ # Install packages -RUN apk -U upgrade && \ - apk add bash python3 git && \ - pip3 install --upgrade pip && \ - pip3 install bottle requests configparser datetime && \ +RUN apk -U --no-cache add \ + git \ + python3 && \ + pip3 install --no-cache-dir --upgrade pip && \ + pip3 install --no-cache-dir bottle \ + configparser \ + datetime \ + requests && \ mkdir -p /opt && \ cd /opt/ && \ - git clone https://github.com/schmalle/ElasticpotPY.git && \ + git clone --depth=1 https://github.com/schmalle/ElasticpotPY.git && \ # Setup user, groups and configs addgroup -g 2000 elasticpot && \ - adduser -S -H -s /bin/bash -u 2000 -D -g 2000 elasticpot && \ + adduser -S -H -s /bin/ash -u 2000 -D -g 2000 elasticpot && \ mv /root/dist/elasticpot.cfg /opt/ElasticpotPY/ && \ mkdir /opt/ElasticpotPY/log && \ # Clean up - apk del git && \ + apk del --purge git && \ rm -rf /root/* && \ rm -rf /var/cache/apk/* # Start elasticpot -USER elasticpot +STOPSIGNAL SIGINT +USER elasticpot:elasticpot WORKDIR /opt/ElasticpotPY/ CMD ["/usr/bin/python3","main.py"] diff --git a/docker/elasticpot/README.md b/docker/elasticpot/README.md index 54b65ebd6..2eba07d2f 100644 --- a/docker/elasticpot/README.md +++ b/docker/elasticpot/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/elasticpot:1710.svg)](https://microbadger.com/images/dtagdevsec/elasticpot:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/elasticpot:1710.svg)](https://microbadger.com/images/dtagdevsec/elasticpot:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/elasticpot:1811.svg)](https://microbadger.com/images/dtagdevsec/elasticpot:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/elasticpot:1811.svg)](https://microbadger.com/images/dtagdevsec/elasticpot:1811 "Get your own image badge on microbadger.com") # elasticpot @@ -12,4 +12,4 @@ The `docker-compose.yml` contains the necessary settings to test elasticpot usin # ElasticPot Dashboard -![ElasticPot Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/elasticpot/doc/dashboard.png) +![ElasticPot Dashboard](doc/dashboard.png) diff --git a/docker/elasticpot/doc/dashboard.png b/docker/elasticpot/doc/dashboard.png index 1b3a87fbb..afafee16a 100644 Binary files a/docker/elasticpot/doc/dashboard.png and b/docker/elasticpot/doc/dashboard.png differ diff --git a/docker/elasticpot/docker-compose.yml b/docker/elasticpot/docker-compose.yml index 8e271998e..296152917 100644 --- a/docker/elasticpot/docker-compose.yml +++ b/docker/elasticpot/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '2.3' networks: elasticpot_local: @@ -7,12 +7,14 @@ services: # Elasticpot service elasticpot: + build: . container_name: elasticpot restart: always networks: - elasticpot_local ports: - "9200:9200" - image: "dtagdevsec/elasticpot:1710" + image: "dtagdevsec/elasticpot:1811" + read_only: true volumes: - /data/elasticpot/log:/opt/ElasticpotPY/log diff --git a/docker/elk/README.md b/docker/elk/README.md index 59d865497..c3d253d44 100644 --- a/docker/elk/README.md +++ b/docker/elk/README.md @@ -1,11 +1,11 @@ # Elasticsearch -[![](https://images.microbadger.com/badges/version/dtagdevsec/elasticsearch:1710.svg)](https://microbadger.com/images/dtagdevsec/elasticsearch:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/elasticsearch:1710.svg)](https://microbadger.com/images/dtagdevsec/elasticsearch:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/elasticsearch:1811.svg)](https://microbadger.com/images/dtagdevsec/elasticsearch:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/elasticsearch:1811.svg)](https://microbadger.com/images/dtagdevsec/elasticsearch:1811 "Get your own image badge on microbadger.com") # Logstash -[![](https://images.microbadger.com/badges/version/dtagdevsec/logstash:1710.svg)](https://microbadger.com/images/dtagdevsec/logstash:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/logstash:1710.svg)](https://microbadger.com/images/dtagdevsec/logstash:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/logstash:1811.svg)](https://microbadger.com/images/dtagdevsec/logstash:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/logstash:1811.svg)](https://microbadger.com/images/dtagdevsec/logstash:1811 "Get your own image badge on microbadger.com") # Kibana -[![](https://images.microbadger.com/badges/version/dtagdevsec/kibana:1710.svg)](https://microbadger.com/images/dtagdevsec/kibana:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/kibana:1710.svg)](https://microbadger.com/images/dtagdevsec/kibana:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/kibana:1811.svg)](https://microbadger.com/images/dtagdevsec/kibana:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/kibana:1811.svg)](https://microbadger.com/images/dtagdevsec/kibana:1811 "Get your own image badge on microbadger.com") # elk stack @@ -17,4 +17,4 @@ The `Dockerfiles` contain the blueprint for the dockerized elk stack and will be # T-Pot Dashboard -![T-Pot Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/elk/doc/dashboard.png) +![T-Pot Dashboard](doc/dashboard.png) diff --git a/docker/elk/docker-compose.yml b/docker/elk/docker-compose.yml new file mode 100644 index 000000000..8f65b4832 --- /dev/null +++ b/docker/elk/docker-compose.yml @@ -0,0 +1,70 @@ +version: '2.3' + +services: + +# ELK services +## Elasticsearch service + elasticsearch: + build: elasticsearch/. + container_name: elasticsearch + restart: always + environment: + - bootstrap.memory_lock=true + - ES_JAVA_OPTS=-Xms1024m -Xmx1024m + - ES_TMPDIR=/tmp + cap_add: + - IPC_LOCK + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + mem_limit: 4g + ports: + - "127.0.0.1:64298:9200" + image: "dtagdevsec/elasticsearch:1811" + volumes: + - /data:/data + +## Kibana service + kibana: + build: kibana/. + container_name: kibana + restart: always + stop_signal: SIGKILL + depends_on: + elasticsearch: + condition: service_healthy + ports: + - "127.0.0.1:64296:5601" + image: "dtagdevsec/kibana:1811" + +## Logstash service + logstash: + build: logstash/. + container_name: logstash + restart: always + depends_on: + elasticsearch: + condition: service_healthy + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/logstash:1811" + volumes: + - /data:/data + - /root/tpotce/docker/elk/logstash/dist/logstash.conf:/etc/logstash/conf.d/logstash.conf + +## Elasticsearch-head service + head: + build: head/. + container_name: head + restart: always + depends_on: + elasticsearch: + condition: service_healthy + ports: + - "127.0.0.1:64302:9100" + image: "dtagdevsec/head:1811" + read_only: true diff --git a/docker/elk/elasticsearch/Dockerfile b/docker/elk/elasticsearch/Dockerfile index dfe4d3e0b..0234cfe11 100644 --- a/docker/elk/elasticsearch/Dockerfile +++ b/docker/elk/elasticsearch/Dockerfile @@ -1,18 +1,20 @@ FROM alpine -MAINTAINER MO # Include dist ADD dist/ /root/dist/ # Setup env and apt -RUN apk -U upgrade && \ - apk add bash curl openjdk8-jre procps wget && \ +RUN apk -U add \ + bash \ + curl \ + openjdk8-jre \ + wget && \ # Get and install packages cd /root/dist/ && \ mkdir -p /usr/share/elasticsearch/ && \ - wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.9.tar.gz && \ - tar xvfz elasticsearch-5.6.9.tar.gz --strip-components=1 -C /usr/share/elasticsearch/ && \ + wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.tar.gz && \ + tar xvfz elasticsearch-6.5.1.tar.gz --strip-components=1 -C /usr/share/elasticsearch/ && \ # Add and move files cd /root/dist/ && \ @@ -21,16 +23,19 @@ RUN apk -U upgrade && \ # Setup user, groups and configs addgroup -g 2000 elasticsearch && \ - adduser -S -H -s /bin/bash -u 2000 -D -g 2000 elasticsearch && \ + adduser -S -H -s /bin/ash -u 2000 -D -g 2000 elasticsearch && \ chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/ && \ + rm -rf /usr/share/elasticsearch/modules/x-pack-ml && \ # Clean up - apk del wget && \ - rm -rf /root/* + apk del --purge wget && \ + rm -rf /root/* && \ + rm -rf /tmp/* && \ + rm -rf /var/cache/apk/* # Healthcheck HEALTHCHECK --retries=10 CMD curl -s -XGET 'http://127.0.0.1:9200/_cat/health' # Start ELK -USER elasticsearch +USER elasticsearch:elasticsearch CMD ["/usr/share/elasticsearch/bin/elasticsearch"] diff --git a/docker/elk/elasticsearch/dist/elasticsearch.yml b/docker/elk/elasticsearch/dist/elasticsearch.yml index d1408f0ae..d9b60aa6d 100644 --- a/docker/elk/elasticsearch/dist/elasticsearch.yml +++ b/docker/elk/elasticsearch/dist/elasticsearch.yml @@ -1,5 +1,6 @@ cluster.name: tpotcluster node.name: "tpotcluster-node-01" +xpack.ml.enabled: false path: logs: /data/elk/log data: /data/elk/data diff --git a/docker/elk/elasticsearch/docker-compose.yml b/docker/elk/elasticsearch/docker-compose.yml new file mode 100644 index 000000000..abd82ef26 --- /dev/null +++ b/docker/elk/elasticsearch/docker-compose.yml @@ -0,0 +1,29 @@ +version: '2.3' + +services: + +# ELK services +## Elasticsearch service + elasticsearch: + build: . + container_name: elasticsearch + restart: always + environment: + - bootstrap.memory_lock=true + - ES_JAVA_OPTS=-Xms1024m -Xmx1024m + - ES_TMPDIR=/tmp + cap_add: + - IPC_LOCK + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + mem_limit: 2g + ports: + - "127.0.0.1:64298:9200" + image: "dtagdevsec/elasticsearch:1811" + volumes: + - /data:/data diff --git a/docker/elk/head/Dockerfile b/docker/elk/head/Dockerfile index 3e6db58fa..68120c5c8 100644 --- a/docker/elk/head/Dockerfile +++ b/docker/elk/head/Dockerfile @@ -1,32 +1,34 @@ -# Elasticsearch-head Dockerfile by MO -# -# VERSION 17.06 FROM alpine -MAINTAINER MO # Setup env and apt -RUN apk -U upgrade && \ - apk add bash curl nodejs nodejs-npm git procps && \ +RUN apk -U add \ + curl \ + git \ + nodejs \ + nodejs-npm && \ # Get and install packages mkdir -p /usr/src/app/ && \ cd /usr/src/app/ && \ - git clone https://github.com/mobz/elasticsearch-head . && \ + git clone --depth=1 https://github.com/mobz/elasticsearch-head . && \ npm install http-server && \ - sed -i 's/\"http\:\/\/localhost\:9200\"/\"https\:\/\/\\:64297\/es\/\"/' /usr/src/app/_site/app.js && \ + sed -i "s#\"http\:\/\/localhost\:9200\"#window.location.protocol \+ \'\/\/\' \+ window.location.hostname \+ \'\:\' \+ window.location.port \+ \'\/es\/\'#" /usr/src/app/_site/app.js && \ # Setup user, groups and configs addgroup -g 2000 head && \ - adduser -S -H -s /bin/bash -u 2000 -D -g 2000 head && \ + adduser -S -H -s /bin/ash -u 2000 -D -g 2000 head && \ chown -R head:head /usr/src/app/ && \ # Clean up - apk del git + apk del --purge git && \ + rm -rf /root/* && \ + rm -rf /tmp/* && \ + rm -rf /var/cache/apk/* # Healthcheck HEALTHCHECK --retries=10 CMD curl -s -XGET 'http://127.0.0.1:9100' # Start elasticsearch-head -USER head +USER head:head WORKDIR /usr/src/app CMD ["node_modules/http-server/bin/http-server", "_site", "-p", "9100"] diff --git a/docker/elk/head/docker-compose.yml b/docker/elk/head/docker-compose.yml new file mode 100644 index 000000000..95c04e352 --- /dev/null +++ b/docker/elk/head/docker-compose.yml @@ -0,0 +1,16 @@ +version: '2.3' + +services: + +## Elasticsearch-head service + head: + build: . + container_name: head + restart: always + # depends_on: + # elasticsearch: + # condition: service_healthy + ports: + - "127.0.0.1:64302:9100" + image: "dtagdevsec/head:1811" + read_only: true diff --git a/docker/elk/kibana/Dockerfile b/docker/elk/kibana/Dockerfile index e2315f622..c08b34289 100644 --- a/docker/elk/kibana/Dockerfile +++ b/docker/elk/kibana/Dockerfile @@ -1,24 +1,23 @@ FROM alpine -MAINTAINER MO # Include dist ADD dist/ /root/dist/ # Setup env and apt -RUN apk -U upgrade && \ - apk add bash curl nodejs procps wget && \ +RUN apk -U add \ + curl \ + nodejs \ + wget && \ # Get and install packages cd /root/dist/ && \ mkdir -p /usr/share/kibana/ && \ - wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.9-linux-x86_64.tar.gz && \ - tar xvfz kibana-5.6.9-linux-x86_64.tar.gz --strip-components=1 -C /usr/share/kibana/ && \ + wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1-linux-x86_64.tar.gz && \ + tar xvfz kibana-6.5.1-linux-x86_64.tar.gz --strip-components=1 -C /usr/share/kibana/ && \ # Kibana's bundled node does not work in alpine rm /usr/share/kibana/node/bin/node && \ - rm /usr/share/kibana/node/bin/npm && \ ln -s /usr/bin/node /usr/share/kibana/node/bin/node && \ - ln -s /usr/bin/npm /usr/share/kibana/node/bin/npm && \ # Add and move files cd /root/dist/ && \ @@ -28,25 +27,45 @@ RUN apk -U upgrade && \ cp elk.ico /usr/share/kibana/src/ui/public/assets/favicons/favicon-16x16.png && \ cp elk.ico /usr/share/kibana/src/ui/public/assets/favicons/favicon-32x32.png && \ cp create_kibana_index.js /usr/share/kibana/src/core_plugins/elasticsearch/lib/ && \ - cd / && \ + +# Setup plugins, rebuild bundle + #cd /usr/share/kibana/plugins && \ + #wget https://github.com/dlumbrer/kbn_radar/releases/download/Kibana-6.X/kbn_radar.tar.gz && \ + #wget https://github.com/dlumbrer/kbn_network/releases/download/6.0.X-1/network_vis.tar.gz && \ + #tar xvfz kbn_radar.tar.gz && \ + #tar xvfz network_vis.tar.gz && \ + #rm *.tar.gz && \ + rm -rf /usr/share/kibana/optimize/bundles/* && \ # Setup user, groups and configs sed -i 's/#server.basePath: ""/server.basePath: "\/kibana"/' /usr/share/kibana/config/kibana.yml && \ - sed -i 's/#kibana.defaultAppId: "discover"/kibana.defaultAppId: "dashboards"/' /usr/share/kibana/config/kibana.yml && \ + sed -i 's/#kibana.defaultAppId: "home"/kibana.defaultAppId: "dashboards"/' /usr/share/kibana/config/kibana.yml && \ sed -i 's/#server.host: "localhost"/server.host: "0.0.0.0"/' /usr/share/kibana/config/kibana.yml && \ sed -i 's/#elasticsearch.url: "http:\/\/localhost:9200"/elasticsearch.url: "http:\/\/elasticsearch:9200"/' /usr/share/kibana/config/kibana.yml && \ - /usr/share/kibana/bin/kibana 2>&1 | grep -m 1 "Optimization of bundles" && \ + sed -i 's/#server.rewriteBasePath: false/server.rewriteBasePath: false/' /usr/share/kibana/config/kibana.yml && \ + sed -i "s/#005571/#e20074/g" /usr/share/kibana/src/ui/public/chrome/directives/global_nav/global_nav.less && \ + sed -i "s/globalColorBlue/globalColorMagenta/g" /usr/share/kibana/src/ui/public/chrome/directives/global_nav/global_nav_link/global_nav_link.less && \ + echo "@globalColorMagenta: #9E0051;" >> /usr/share/kibana/src/ui/public/styles/variables/colors.less && \ + echo "xpack.infra.enabled: false" >> /usr/share/kibana/config/kibana.yml && \ + echo "xpack.logstash.enabled: false" >> /usr/share/kibana/config/kibana.yml && \ + echo "xpack.canvas.enabled: false" >> /usr/share/kibana/config/kibana.yml && \ + echo "xpack.spaces.enabled: false" >> /usr/share/kibana/config/kibana.yml && \ + echo "xpack.apm.enabled: false" >> /usr/share/kibana/config/kibana.yml && \ + /usr/share/kibana/bin/kibana --optimize && \ addgroup -g 2000 kibana && \ - adduser -S -H -s /bin/bash -u 2000 -D -g 2000 kibana && \ + adduser -S -H -s /bin/ash -u 2000 -D -g 2000 kibana && \ chown -R kibana:kibana /usr/share/kibana/ && \ # Clean up - apk del wget && \ - rm -rf /root/* + apk del --purge wget && \ + rm -rf /root/* && \ + rm -rf /tmp/* && \ + rm -rf /var/cache/apk/* # Healthcheck HEALTHCHECK --retries=10 CMD curl -s -XGET 'http://127.0.0.1:5601' # Start kibana -USER kibana +STOPSIGNAL SIGKILL +USER kibana:kibana CMD ["/usr/share/kibana/bin/kibana"] diff --git a/docker/elk/kibana/dist/elk.ico b/docker/elk/kibana/dist/elk.ico index a40c23729..2b7ef0636 100644 Binary files a/docker/elk/kibana/dist/elk.ico and b/docker/elk/kibana/dist/elk.ico differ diff --git a/docker/elk/kibana/dist/kibana.svg b/docker/elk/kibana/dist/kibana.svg index ed37c3578..5318c06b2 100644 --- a/docker/elk/kibana/dist/kibana.svg +++ b/docker/elk/kibana/dist/kibana.svg @@ -8,16 +8,15 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - version="1.0" - width="1050" - height="372" - viewBox="0 0 600.00002 279" + width="180" + height="70" preserveAspectRatio="xMidYMid meet" - id="svg2" - inkscape:version="0.92.1 r15371" - sodipodi:docname="kibana.svg"> + version="1.1" + id="svg3766" + sodipodi:docname="test.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + id="defs3770" /> + inkscape:pagecheckerboard="true" + inkscape:zoom="1.5219183" + inkscape:cx="236.2387" + inkscape:cy="139.5" + inkscape:window-x="876" + inkscape:window-y="205" + inkscape:window-maximized="0" + inkscape:current-layer="svg3766" /> -Created by potrace 1.11, written by Peter Selinger 2001-2013 - + id="metadata4">Created by potrace 1.11, written by Peter Selinger 2001-2013image/svg+xml image/svg+xml - + - + + background + + + + Layer 1 + + diff --git a/docker/elk/kibana/dist/kibana_6.2.x_vis_scaling_fixes.zip b/docker/elk/kibana/dist/kibana_6.2.x_vis_scaling_fixes.zip new file mode 100644 index 000000000..9e8c57dbd Binary files /dev/null and b/docker/elk/kibana/dist/kibana_6.2.x_vis_scaling_fixes.zip differ diff --git a/docker/elk/kibana/docker-compose.yml b/docker/elk/kibana/docker-compose.yml new file mode 100644 index 000000000..b2cb61312 --- /dev/null +++ b/docker/elk/kibana/docker-compose.yml @@ -0,0 +1,15 @@ +version: '2.3' + +services: + +## Kibana service + kibana: + build: . + container_name: kibana + restart: always +# depends_on: +# elasticsearch: +# condition: service_healthy + ports: + - "127.0.0.1:64296:5601" + image: "dtagdevsec/kibana:1811" diff --git a/docker/elk/logstash/Dockerfile b/docker/elk/logstash/Dockerfile index dcbfa4d4e..c11028735 100644 --- a/docker/elk/logstash/Dockerfile +++ b/docker/elk/logstash/Dockerfile @@ -1,23 +1,28 @@ FROM alpine -MAINTAINER MO # Include dist ADD dist/ /root/dist/ # Setup env and apt -RUN apk -U upgrade && \ - apk add bash curl git libc6-compat libzmq openjdk8-jre procps wget && \ +RUN apk -U add \ + bash \ + curl \ + git \ + libc6-compat \ + libzmq \ + openjdk8-jre \ + wget && \ # Get and install packages git clone --depth=1 https://github.com/dtag-dev-sec/listbot /etc/listbot && \ cd /root/dist/ && \ mkdir -p /usr/share/logstash/ && \ - wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.9.tar.gz && \ + wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.1.tar.gz && \ wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz && \ - tar xvfz logstash-5.6.9.tar.gz --strip-components=1 -C /usr/share/logstash/ && \ + tar xvfz logstash-6.5.1.tar.gz --strip-components=1 -C /usr/share/logstash/ && \ /usr/share/logstash/bin/logstash-plugin install logstash-filter-translate && \ /usr/share/logstash/bin/logstash-plugin install logstash-output-syslog && \ - tar xvfz GeoLite2-ASN.tar.gz --strip-components=1 -C /usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-filter-geoip-4.3.1-java/vendor/ && \ + tar xvfz GeoLite2-ASN.tar.gz --strip-components=1 -C /usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-filter-geoip-5.0.3-java/vendor/ && \ # Add and move files cd /root/dist/ && \ @@ -25,14 +30,24 @@ RUN apk -U upgrade && \ chmod u+x /usr/bin/update.sh && \ mkdir -p /etc/logstash/conf.d && \ cp logstash.conf /etc/logstash/conf.d/ && \ - cp elasticsearch-template-es5x.json /usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.2-java/lib/logstash/outputs/elasticsearch/ && \ + cp elasticsearch-template-es6x.json /usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-9.2.1-java/lib/logstash/outputs/elasticsearch/ && \ + +# Setup user, groups and configs + addgroup -g 2000 logstash && \ + adduser -S -H -s /bin/bash -u 2000 -D -g 2000 logstash && \ + chown -R logstash:logstash /usr/share/logstash && \ + chown -R logstash:logstash /etc/listbot && \ + chmod 755 /usr/bin/update.sh && \ # Clean up - apk del wget && \ - rm -rf /root/* + apk del --purge wget && \ + rm -rf /root/* && \ + rm -rf /tmp/* && \ + rm -rf /var/cache/apk/* # Healthcheck HEALTHCHECK --retries=10 CMD curl -s -XGET 'http://127.0.0.1:9600' # Start logstash -CMD update.sh && /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf +#USER logstash:logstash +CMD update.sh && exec /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf --java-execution diff --git a/docker/elk/logstash/dist/elasticsearch-template-es6x.json b/docker/elk/logstash/dist/elasticsearch-template-es6x.json new file mode 100644 index 000000000..7a273eb52 --- /dev/null +++ b/docker/elk/logstash/dist/elasticsearch-template-es6x.json @@ -0,0 +1,47 @@ +{ + "template" : "logstash-*", + "version" : 60001, + "settings" : { + "index.refresh_interval" : "5s", + "index.number_of_shards" : "1", + "index.number_of_replicas" : "0" + }, + "mappings" : { + "_default_" : { + "dynamic_templates" : [ { + "message_field" : { + "path_match" : "message", + "match_mapping_type" : "string", + "mapping" : { + "type" : "text", + "norms" : false + } + } + }, { + "string_fields" : { + "match" : "*", + "match_mapping_type" : "string", + "mapping" : { + "type" : "text", "norms" : false, + "fields" : { + "keyword" : { "type": "keyword", "ignore_above": 256 } + } + } + } + } ], + "properties" : { + "@timestamp": { "type": "date"}, + "@version": { "type": "keyword"}, + "geoip" : { + "dynamic": true, + "properties" : { + "ip": { "type": "ip" }, + "location" : { "type" : "geo_point" }, + "latitude" : { "type" : "half_float" }, + "longitude" : { "type" : "half_float" } + } + } + } + } + } +} diff --git a/docker/elk/logstash/dist/logstash.conf b/docker/elk/logstash/dist/logstash.conf index e4412f743..a8c9a7170 100644 --- a/docker/elk/logstash/dist/logstash.conf +++ b/docker/elk/logstash/dist/logstash.conf @@ -15,9 +15,16 @@ input { type => "P0f" } -# Conpot +# Ciscoasa file { - path => ["/data/conpot/log/conpot.json"] + path => ["/data/ciscoasa/log/ciscoasa.log"] + codec => plain + type => "Ciscoasa" + } + +# Conpot + file { + path => ["/data/conpot/log/*.json"] codec => json type => "ConPot" } @@ -43,18 +50,25 @@ input { type => "ElasticPot" } -# eMobility - file { - path => ["/data/emobility/log/centralsystemEWS.log"] - type => "eMobility" - } - # Glastopf file { path => ["/data/glastopf/log/glastopf.log"] type => "Glastopf" } +# Glutton + file { + path => ["/data/glutton/log/glutton.log"] + codec => json + type => "Glutton" + } + +# Heralding + file { + path => ["/data/heralding/log/auth.csv"] + type => "Heralding" + } + # Honeytrap file { path => ["/data/honeytrap/log/attackers.json"] @@ -62,37 +76,39 @@ input { type => "Honeytrap" } -# Mailoney +# Mailoney file { path => ["/data/mailoney/log/commands.log"] type => "Mailoney" } -# Rdpy +# Medpot file { - path => ["/data/rdpy/log/rdpy.log"] - type => "Rdpy" + path => ["/data/medpot/log/medpot.log"] + codec => json + type => "Medpot" } -# Host Syslog +# Rdpy file { - path => ["/data/host/log/auth.log"] - codec => plain - type => "Syslog" + path => ["/data/rdpy/log/rdpy.log"] + type => "Rdpy" } # Host NGINX file { - path => ["/data/host/log/nginx/access.log"] + path => ["/data/nginx/log/access.log"] codec => json type => "NGINX" } -# Vnclowpot +# Tanner file { - path => ["/data/vnclowpot/log/vnclowpot.log"] - type => "Vnclowpot" + path => ["/data/tanner/log/tanner_report.json"] + codec => json + type => "Tanner" } + } # Filter Section @@ -127,11 +143,35 @@ filter { } } +# Ciscoasa + if [type] == "Ciscoasa" { + kv { + remove_char_key => " '{}" + remove_char_value => "'{}" + value_split => ":" + field_split => "," + } + date { + match => [ "timestamp", "ISO8601" ] + } + mutate { + add_field => { + "dest_ip" => "${MY_EXTIP}" + } + } + } + # Conpot if [type] == "ConPot" { date { match => [ "timestamp", "ISO8601" ] } + mutate { + rename => { + "dst_port" => "dest_port" + "dst_ip" => "dest_ip" + } + } } # Cowrie @@ -165,8 +205,8 @@ filter { if [credentials] { mutate { add_field => { - "login.username" => "%{[credentials][username]}" - "login.password" => "%{[credentials][password]}" + "username" => "%{[credentials][username]}" + "password" => "%{[credentials][password]}" } remove_field => "[credentials]" } @@ -180,23 +220,32 @@ filter { } } -# eMobility - if [type] == "eMobility" { +# Glastopf + if [type] == "Glastopf" { grok { - match => [ "message", "\A%{IP:src_ip}\.%{POSINT:src_port:integer}\|%{IP:dest_ip}\.%{POSINT:dest_port:integer}:%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424SD}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{SYSLOG5424PRINTASCII}%{SPACE}%{URIPROTO:http_method}\|%{URIPATH:http_uri}\|%{TIMESTAMP_ISO8601:timestamp}" ] + match => [ "message", "\A%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{NOTSPACE}%{SPACE}%{IP:src_ip}%{SPACE}%{WORD}%{SPACE}%{URIPROTO:http_method}%{SPACE}%{NOTSPACE:http_uri}%{SPACE}%{NOTSPACE}%{SPACE}%{HOSTNAME}:%{NUMBER:dest_port:integer}" ] } date { - match => [ "timestamp", "ISO8601" ] + match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ] + remove_field => ["timestamp"] } } -# Glastopf - if [type] == "Glastopf" { - grok { - match => [ "message", "\A%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{NOTSPACE}%{SPACE}%{IP:src_ip}%{SPACE}%{WORD}%{SPACE}%{URIPROTO:http_method}%{SPACE}%{NOTSPACE:http_uri}%{SPACE}%{NOTSPACE}%{SPACE}%{HOSTNAME}:%{NUMBER:dest_port:integer}" ] +# Glutton + if [type] == "Glutton" { + date { + match => [ "ts", "UNIX" ] + remove_field => ["ts"] + } + } + +# Heralding + if [type] == "Heralding" { + csv { + columns => ["timestamp","auth_id","session_id","src_ip","src_port","dest_ip","dest_port","proto","username","password"] separator => "," } date { - match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ] + match => [ "timestamp", "yyyy-MM-dd HH:mm:ss.SSSSSS" ] remove_field => ["timestamp"] } } @@ -232,6 +281,19 @@ filter { } } +# Medpot + if [type] == "Medpot" { + mutate { + add_field => { + "dest_port" => "2575" + "dest_ip" => "${MY_EXTIP}" + } + } + date { + match => [ "timestamp", "ISO8601" ] + } + } + # Rdpy if [type] == "Rdpy" { grok { match => { "message" => [ "\A%{TIMESTAMP_ISO8601:timestamp},domain:%{CISCO_REASON:domain},username:%{CISCO_REASON:username},password:%{CISCO_REASON:password},hostname:%{GREEDYDATA:hostname}", "\A%{TIMESTAMP_ISO8601:timestamp},Connection from %{IPV4:src_ip}:%{INT:src_port:integer}" ] } } @@ -246,79 +308,6 @@ filter { } } -# Syslog - if [type] == "Syslog" { - grok { - match => { - "message" => ["%{SYSLOGPAMSESSION}", "%{CRONLOG}", "%{SYSLOGLINE}"] - } - overwrite => "message" - } - date { - match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] - remove_field => ["timestamp"] - } - date { - match => ["timestamp8601", "ISO8601"] - remove_field => ["timestamp8601"] - } - grok { - match => { "message" => "Connection closed by %{IP:src_ip}" } - add_tag => [ "ssh_connection_closed" ] - tag_on_failure => [] - } - grok { - match => { "message" => "Received disconnect from %{IP:src_ip}" } - add_tag => [ "ssh_connection_disconnect" ] - tag_on_failure => [] - } - grok { - match => { "message" => "Failed password for invalid user %{USERNAME:username} from %{IP:src_ip} port %{BASE10NUM:port} ssh2" } - add_tag => [ "ssh_failed_password" ] - tag_on_failure => [] - } - grok { - match => { "message" => "Did not receive identification string from %{IP:src_ip}" } - add_tag => [ "ssh_no_id" ] - tag_on_failure => [] - } - grok { - match => { "message" => "User %{USERNAME:username} from %{IP:src_ip} not allowed because not listed in AllowUsers" } - add_tag => [ "ssh_user_not_allowed" ] - tag_on_failure => [] - } - grok { - match => { "message" => "authentication failure; logname=%{USERNAME:logname} uid=%{BASE10NUM:uid} euid=%{BASE10NUM:euid} tty=%{TTY:tty} ruser=%{USERNAME:ruser} rhost=(?:%{HOSTNAME:remote_host}|\s*) user=%{USERNAME:user}"} - add_tag => [ "ssh_auth_failure" ] - tag_on_failure => [] - } - grok { - match => { "message" => "pam_unix\(sshd:auth\): authentication failure; logname= uid=0 euid=0 tty=%{NOTSPACE:tty} ruser= rhost=(?:%{HOSTNAME:remote_host}|\s*) user=%{USERNAME:user}"} - add_tag => [ "ssh_auth_failure" ] - tag_on_failure => [] - } - grok { - match => { "message" => "Failed password for %{USERNAME:username} from %{IP:src_ip} port %{BASE10NUM:port} ssh2"} - add_tag => [ "ssh_failed_password" ] - tag_on_failure => [] - } - grok { - match => { "message" => "Accepted password for %{USERNAME:username} from %{IP:src_ip} port %{BASE10NUM:port} ssh2"} - add_tag => [ "ssh_accepted_password" ] - tag_on_failure => [] - } - grok { - match => { "message" => "Accepted publickey for %{USERNAME:username} from %{IP:src_ip} port %{BASE10NUM:port} ssh2"} - add_tag => [ "ssh_accepted_pubkey" ] - tag_on_failure => [] - } - grok { - match => { "message" => "Accepted keyboard-interactive/pam for %{USERNAME:username} from %{IP:src_ip} port %{BASE10NUM:port} ssh2"} - add_tag => [ "ssh_accepted_interactive" ] - tag_on_failure => [] - } - } - # NGINX if [type] == "NGINX" { date { @@ -326,18 +315,18 @@ filter { } } -# Vnclowpot - if [type] == "Vnclowpot" { - grok { - match => [ "message", "\A%{NOTSPACE}%{SPACE}%{TIME}%{SPACE}%{IPV4:src_ip}:%{INT:src_port}%{SPACE}%{NOTSPACE:vnc_handshake}" ] - } +# Tanner + if [type] == "Tanner" { date { - match => [ "timestamp", "yyyy/MM/dd HH:mm:ss" ] - remove_field => ["timestamp"] + match => [ "timestamp", "ISO8601" ] } mutate { + rename => { + "[peer][ip]" => "src_ip" + "[peer][port]" => "src_port" + } add_field => { - "dest_port" => "5900" + "dest_port" => "80" } } } @@ -350,22 +339,22 @@ if "_grokparsefailure" in [tags] { drop {} } geoip { cache_size => 10000 source => "src_ip" - database => "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-filter-geoip-4.3.1-java/vendor/GeoLite2-City.mmdb" - } + database => "/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-filter-geoip-5.0.3-java/vendor/GeoLite2-City.mmdb" + } geoip { cache_size => 10000 source => "src_ip" - database => "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-filter-geoip-4.3.1-java/vendor/GeoLite2-ASN.mmdb" - } + database => "/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-filter-geoip-5.0.3-java/vendor/GeoLite2-ASN.mmdb" + } translate { refresh_interval => 86400 field => "src_ip" destination => "ip_rep" dictionary_path => "/etc/listbot/iprep.yaml" } - } + } -# In some rare conditions dest_port, src_port is indexed as string, forcing integer for now +# In some rare conditions dest_port, src_port, status are indexed as string, forcing integer for now if [dest_port] { mutate { convert => { "dest_port" => "integer" } @@ -376,9 +365,14 @@ if "_grokparsefailure" in [tags] { drop {} } convert => { "src_port" => "integer" } } } + if [status] { + mutate { + convert => { "status" => "integer" } + } + } # Add T-Pot hostname and external IP - if [type] == "ConPot" or [type] == "Cowrie" or [type] == "Dionaea" or [type] == "ElasticPot" or [type] == "eMobility" or [type] == "Glastopf" or [type] == "Honeytrap" or [type] == "Mailoney" or [type] == "Rdpy" or [type] == "Suricata" or [type] == "Vnclowpot" { + if [type] == "Ciscoasa" or [type] == "ConPot" or [type] == "Cowrie" or [type] == "Dionaea" or [type] == "ElasticPot" or [type] == "Glastopf" or [type] == "Glutton" or [type] == "Honeytrap" or [type] == "Heralding" or [type] == "Mailoney" or [type] == "Medpot" or [type] == "P0f" or [type] == "Rdpy" or [type] == "Suricata" or [type] == "Tanner" { mutate { add_field => { "t-pot_ip_ext" => "${MY_EXTIP}" @@ -394,6 +388,7 @@ if "_grokparsefailure" in [tags] { drop {} } output { elasticsearch { hosts => ["elasticsearch:9200"] +# document_type => "doc" } if [type] == "Suricata" { diff --git a/docker/elk/logstash/docker-compose.yml b/docker/elk/logstash/docker-compose.yml new file mode 100644 index 000000000..c1e0050f2 --- /dev/null +++ b/docker/elk/logstash/docker-compose.yml @@ -0,0 +1,18 @@ +version: '2.3' + +services: + +## Logstash service + logstash: + build: . + container_name: logstash + restart: always +# depends_on: +# elasticsearch: +# condition: service_healthy + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/logstash:1811" + volumes: + - /data:/data + - /root/tpotce/docker/elk/logstash/dist/logstash.conf:/etc/logstash/conf.d/logstash.conf diff --git a/docker/ews/Dockerfile b/docker/ews/Dockerfile index 02044f3e8..7626b7b0d 100644 --- a/docker/ews/Dockerfile +++ b/docker/ews/Dockerfile @@ -1,32 +1,53 @@ FROM alpine -MAINTAINER MO # Include dist ADD dist/ /root/dist/ # Install packages -RUN apk -U upgrade && \ - apk add build-base git libssl1.0 openssl-dev python-dev py-cffi py-ipaddress py-lxml py-mysqldb py-pip py-pysqlite py-requests py-setuptools && \ - pip install pyOpenSSL==16.2.0 && \ +RUN apk -U --no-cache add \ + build-base \ + git \ + libffi-dev \ + libssl1.0 \ + openssl-dev \ + python-dev \ + py-cffi \ + py-ipaddress \ + py-lxml \ + py-mysqldb \ + py-pip \ + py-pysqlite \ + py-requests \ + py-setuptools && \ + pip install --no-cache-dir -U pip && \ + pip install --no-cache-dir pyOpenSSL && \ # Setup ewsposter - git clone https://github.com/rep/hpfeeds /opt/hpfeeds && \ + git clone --depth=1 https://github.com/rep/hpfeeds /opt/hpfeeds && \ cd /opt/hpfeeds && \ python setup.py install && \ - git clone https://github.com/vorband/ewsposter /opt/ewsposter && \ + git clone --depth=1 https://github.com/vorband/ewsposter /opt/ewsposter && \ mkdir -p /opt/ewsposter/spool /opt/ewsposter/log && \ # Setup user and groups addgroup -g 2000 ews && \ adduser -S -H -u 2000 -D -g 2000 ews && \ + chown -R ews:ews /opt/ewsposter && \ # Supply configs mv /root/dist/ews.cfg /opt/ewsposter/ && \ # Clean up - apk del build-base git openssl-dev python-dev py-pip py-setuptools && \ + apk del build-base \ + git \ + openssl-dev \ + python-dev \ + py-pip \ + py-setuptools && \ rm -rf /root/* && \ rm -rf /var/cache/apk/* # Run ewsposter -CMD sleep 10 && /usr/bin/python /opt/ewsposter/ews.py -l 60 +STOPSIGNAL SIGINT +USER ews:ews +CMD sleep 10 && exec /usr/bin/python -u /opt/ewsposter/ews.py -l 60 diff --git a/docker/ews/README.md b/docker/ews/README.md index f99715945..01eedab4b 100644 --- a/docker/ews/README.md +++ b/docker/ews/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/ewsposter:1710.svg)](https://microbadger.com/images/dtagdevsec/ewsposter:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/ewsposter:1710.svg)](https://microbadger.com/images/dtagdevsec/ewsposter:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/ewsposter:1811.svg)](https://microbadger.com/images/dtagdevsec/ewsposter:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/ewsposter:1811.svg)](https://microbadger.com/images/dtagdevsec/ewsposter:1811 "Get your own image badge on microbadger.com") # ewsposter diff --git a/docker/ews/dist/ews.cfg b/docker/ews/dist/ews.cfg index c159379a6..a9c437c5f 100644 --- a/docker/ews/dist/ews.cfg +++ b/docker/ews/dist/ews.cfg @@ -46,12 +46,12 @@ malwaredir = [KIPPO] kippo = false -nodeid = -mysqlhost = -mysqldb = -mysqluser = -mysqlpw = -malwaredir = +nodeid = +mysqlhost = +mysqldb = +mysqluser = +mysqlpw = +malwaredir = [COWRIE] cowrie = true @@ -78,14 +78,14 @@ iptableslog = targetip = [EMOBILITY] -eMobility = true +eMobility = false nodeid = emobility-community-01 logfile = /data/emobility/log/centralsystemEWS.log [CONPOT] conpot = true nodeid = conpot-community-01 -logfile = /data/conpot/log/conpot.json +logfile = /data/conpot/log/conpot*.json [ELASTICPOT] elasticpot = true @@ -111,3 +111,18 @@ logfile = /data/rdpy/log/rdpy.log vnclowpot = true nodeid = vnclowpot-community-01 logfile = /data/vnclowpot/log/vnclowpot.log + +[HERALDING] +heralding = true +nodeid = heralding-community-01 +logfile = /data/heralding/log/auth.csv + +[CISCOASA] +ciscoasa = true +nodeid = ciscoasa-community-01 +logfile = /data/ciscoasa/log/ciscoasa.log + +[TANNER] +tanner = true +nodeid = tanner-community-01 +logfile = /data/tanner/log/tanner_report.json diff --git a/docker/ews/docker-compose.yml b/docker/ews/docker-compose.yml new file mode 100644 index 000000000..2ee17a24d --- /dev/null +++ b/docker/ews/docker-compose.yml @@ -0,0 +1,20 @@ +version: '2.3' + +networks: + ewsposter_local: + +services: + +# Ewsposter service + ewsposter: + build: . + container_name: ewsposter + restart: always + networks: + - ewsposter_local + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/ewsposter:1811" + volumes: + - /data:/data + - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip diff --git a/docker/glastopf/Dockerfile b/docker/glastopf/Dockerfile index 5e1cd6d79..18842cfc5 100644 --- a/docker/glastopf/Dockerfile +++ b/docker/glastopf/Dockerfile @@ -1,21 +1,32 @@ -FROM alpine -MAINTAINER MO +FROM alpine # Include dist ADD dist/ /root/dist/ # Install packages -RUN apk -U upgrade && \ - apk add autoconf bash bind-tools build-base cython git libffi libffi-dev make py-asn1 \ - py-cffi py-chardet py-chardet py-cparser py-cryptography py-dateutil \ - py-enum34 py-idna py-ipaddress py-jinja2 py-lxml py-mysqldb py-openssl \ - py-pip py-requests py-setuptools python python-dev && \ - apk -U add --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ \ - py-beautifulsoup4 php7 php7-dev py-cssselect py-gevent py-greenlet py-mongo \ - py-sqlalchemy py-webob && \ +RUN apk -U --no-cache add \ + autoconf \ + bind-tools \ + build-base \ + cython \ + git \ + libffi \ + libffi-dev \ + libcap \ + libxslt-dev \ + make \ + php7 \ + php7-dev \ + py-mysqldb \ + py-openssl \ + py-pip \ + py-setuptools \ + python \ + python-dev && \ + pip install --no-cache-dir --upgrade pip && \ # Install php sandbox from git - git clone https://github.com/glastopf/BFR.git /opt/BFR && \ + git clone --depth=1 https://github.com/mushorg/BFR /opt/BFR && \ cd /opt/BFR && \ phpize7 && \ ./configure \ @@ -28,23 +39,34 @@ RUN apk -U upgrade && \ echo "zend_extension = "$(find /usr -name bfr.so) >> /etc/php7/php.ini && \ # Install glastopf from git - git clone https://github.com/mushorg/glastopf.git /opt/glastopf && \ + git clone --depth=1 https://github.com/mushorg/glastopf.git /opt/glastopf && \ cd /opt/glastopf && \ - python setup.py install && \ + cp /root/dist/requirements.txt . && \ + pip install --no-cache-dir . && \ cd / && \ rm -rf /opt/glastopf /tmp/* /var/tmp/* && \ + setcap cap_net_bind_service=+ep /usr/bin/python2.7 && \ # Setup user, groups and configs addgroup -g 2000 glastopf && \ adduser -S -H -u 2000 -D -g 2000 glastopf && \ - mkdir -p /opt/glastopf && \ - mv /root/dist/glastopf.cfg /opt/glastopf/ && \ + mkdir -p /etc/glastopf && \ + mv /root/dist/glastopf.cfg /etc/glastopf/ && \ # Clean up - apk del autoconf build-base git libffi-dev php7-dev python-dev && \ + apk del --purge autoconf \ + build-base \ + file \ + git \ + libffi-dev \ + php7-dev \ + python-dev \ + py-pip && \ rm -rf /root/* && \ rm -rf /var/cache/apk/* # Set workdir and start glastopf -WORKDIR /opt/glastopf/ -CMD ["glastopf-runner"] +STOPSIGNAL SIGINT +USER glastopf:glastopf +WORKDIR /tmp/glastopf/ +CMD cp /etc/glastopf/glastopf.cfg /tmp/glastopf && exec glastopf-runner diff --git a/docker/glastopf/README.md b/docker/glastopf/README.md index 1cc94ef61..a11d9aeb6 100644 --- a/docker/glastopf/README.md +++ b/docker/glastopf/README.md @@ -1,8 +1,8 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/glastopf:1710.svg)](https://microbadger.com/images/dtagdevsec/glastopf:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/glastopf:1710.svg)](https://microbadger.com/images/dtagdevsec/glastopf:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/glastopf:1811.svg)](https://microbadger.com/images/dtagdevsec/glastopf:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/glastopf:1811.svg)](https://microbadger.com/images/dtagdevsec/glastopf:1811 "Get your own image badge on microbadger.com") # glastopf -[glastopf](https://github.com/glastopf/glastopf) is a python web application honeypot. +[glastopf](https://github.com/mushorg/glastopf) is a python web application honeypot. This dockerized version is part of the **[T-Pot community honeypot](http://dtag-dev-sec.github.io/)** of Deutsche Telekom AG. @@ -12,4 +12,4 @@ The `docker-compose.yml` contains the necessary settings to test glastopf using # Glastopf Dashboard -![Glastopf Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/glastopf/doc/dashboard.png) +![Glastopf Dashboard](doc/dashboard.png) diff --git a/docker/glastopf/dist/glastopf.cfg b/docker/glastopf/dist/glastopf.cfg index 3fc2fd4f6..daaf45044 100644 --- a/docker/glastopf/dist/glastopf.cfg +++ b/docker/glastopf/dist/glastopf.cfg @@ -104,3 +104,12 @@ sensorid = None [profiler] enabled = False + +[s3storage] +enabled = False +endpoint = http://localhost:8080/ +aws_access_key_id = YOUR_aws_access_key_id +aws_secret_access_key = YOUR_aws_access_key_id +bucket = glastopf +region = eu-west-1 +signature_version = s3 diff --git a/docker/glastopf/dist/requirements.txt b/docker/glastopf/dist/requirements.txt new file mode 100644 index 000000000..d67880691 --- /dev/null +++ b/docker/glastopf/dist/requirements.txt @@ -0,0 +1,35 @@ +asn1crypto==0.24.0 +BeautifulSoup==3.2.1 +beautifulsoup4==4.6.1 +botocore==1.11.6 +certifi==2018.4.16 +cffi==1.10.0 +chardet==3.0.4 +cryptography==2.1.4 +cssselect==1.0.0 +Cython==0.28.2 +docutils==0.14 +enum34==1.1.6 +gevent==1.2.2 +greenlet==0.4.13 +hpfeeds==1.0 +idna==2.6 +ipaddress==1.0.22 +Jinja2==2.9.6 +jmespath==0.9.3 +libtaxii==1.1.111 +lxml==4.2.4 +MarkupSafe==1.0 +MySQL-python==1.2.5 +pyasn1==0.4.2 +pycparser==2.18 +pylibinjection==0.2.4 +pymongo==3.2.2 +pyOpenSSL==17.2.0 +python-dateutil==2.6.1 +python-logstash==0.4.6 +requests==2.18.4 +six==1.11.0 +SQLAlchemy==1.2.7 +urllib3==1.22 +WebOb==1.2.3 diff --git a/docker/glastopf/doc/dashboard.png b/docker/glastopf/doc/dashboard.png index 9cb066c53..1675ad9c5 100644 Binary files a/docker/glastopf/doc/dashboard.png and b/docker/glastopf/doc/dashboard.png differ diff --git a/docker/glastopf/docker-compose.yml b/docker/glastopf/docker-compose.yml index e7e74ff57..cc2e1eec2 100644 --- a/docker/glastopf/docker-compose.yml +++ b/docker/glastopf/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '2.3' networks: glastopf_local: @@ -7,13 +7,17 @@ services: # Glastopf service glastopf: + build: . container_name: glastopf + tmpfs: + - /tmp/glastopf:uid=2000,gid=2000 restart: always networks: - glastopf_local ports: - "80:80" - image: "dtagdevsec/glastopf:1710" + image: "dtagdevsec/glastopf:1811" + read_only: true volumes: - - /data/glastopf/db:/opt/glastopf/db - - /data/glastopf/log:/opt/glastopf/log + - /data/glastopf/db:/tmp/glastopf/db + - /data/glastopf/log:/tmp/glastopf/log diff --git a/docker/glutton/.DS_Store b/docker/glutton/.DS_Store new file mode 100644 index 000000000..9b786ce52 Binary files /dev/null and b/docker/glutton/.DS_Store differ diff --git a/docker/glutton/Dockerfile b/docker/glutton/Dockerfile new file mode 100644 index 000000000..e686969ed --- /dev/null +++ b/docker/glutton/Dockerfile @@ -0,0 +1,54 @@ +FROM alpine + +# Include dist +ADD dist/ /root/dist/ + +# Setup apk +RUN apk -U --no-cache add \ + build-base \ + git \ + go \ + g++ \ + iptables-dev \ + libnetfilter_queue-dev \ + libcap \ + libpcap-dev && \ + +# Setup go, glutton + export GOPATH=/opt/go/ && \ + go get -d github.com/mushorg/glutton && \ + cd /opt/go/src/github.com/satori/ && \ + rm -rf go.uuid && \ + git clone https://github.com/satori/go.uuid && \ + cd go.uuid && \ + git checkout v1.2.0 && \ + mv /root/dist/system.go /opt/go/src/github.com/mushorg/glutton/ && \ + cd /opt/go/src/github.com/mushorg/glutton/ && \ + make build && \ + cd / && \ + mkdir -p /opt/glutton && \ + mv /opt/go/src/github.com/mushorg/glutton/bin /opt/glutton/ && \ + mv /opt/go/src/github.com/mushorg/glutton/config /opt/glutton/ && \ + mv /opt/go/src/github.com/mushorg/glutton/rules /opt/glutton/ && \ + setcap cap_net_admin,cap_net_raw=+ep /opt/glutton/bin/server && \ + setcap cap_net_admin,cap_net_raw=+ep /sbin/xtables-multi && \ + +# Setup user, groups and configs + addgroup -g 2000 glutton && \ + adduser -S -s /bin/ash -u 2000 -D -g 2000 glutton && \ + mkdir -p /var/log/glutton && \ + mv /root/dist/rules.yaml /opt/glutton/rules/ && \ + +# Clean up + apk del --purge build-base \ + git \ + go \ + g++ && \ + rm -rf /var/cache/apk/* \ + /opt/go \ + /root/dist + +# Start glutton +WORKDIR /opt/glutton +USER glutton:glutton +CMD exec bin/server -i $(/sbin/ip address | grep '^2: ' | awk '{ print $2 }' | tr -d [:punct:]) -l /var/log/glutton/glutton.log diff --git a/docker/glutton/README.md b/docker/glutton/README.md new file mode 100644 index 000000000..f1e536f2b --- /dev/null +++ b/docker/glutton/README.md @@ -0,0 +1,15 @@ +[![](https://images.microbadger.com/badges/version/dtagdevsec/glutton:1811.svg)](https://microbadger.com/images/dtagdevsec/glutton:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/glutton:1811.svg)](https://microbadger.com/images/dtagdevsec/glutton:1811 "Get your own image badge on microbadger.com") + +# glutton + +[glutton](https://github.com/mushorg/glutton) is the all eating honeypot. + +This dockerized version is part of the **[T-Pot community honeypot](http://dtag-dev-sec.github.io/)** of Deutsche Telekom AG. + +The `Dockerfile` contains the blueprint for the dockerized glutton and will be used to setup the docker image. + +The `docker-compose.yml` contains the necessary settings to test glutton using `docker-compose`. This will ensure to start the docker container with the appropriate permissions and port mappings. + +# glutton Dashboard + +![glutton Dashboard](doc/dashboard.png) diff --git a/docker/glutton/dist/rules.yaml b/docker/glutton/dist/rules.yaml new file mode 100644 index 000000000..be5e21c29 --- /dev/null +++ b/docker/glutton/dist/rules.yaml @@ -0,0 +1,33 @@ +# Put passthrough rules on top, drop rules on bottom, rules are applied in order (top down) +rules: + - match: udp dst port 53 + type: passthrough + - match: tcp dst port 21 + type: conn_handler + target: ftp + - match: tcp dst port 23 or port 2323 or port 23231 + type: conn_handler + target: telnet + - match: tcp dst port 25 + type: conn_handler + target: smtp + - match: tcp dst port 445 + type: conn_handler + target: smb + - match: tcp dst port 1883 + type: conn_handler + target: mqtt + - match: tcp dst port 3389 + type: conn_handler + target: rdp + - match: tcp dst port 5060 + type: conn_handler + target: sip + - match: tcp dst port 5222 or port 5223 + type: conn_handler + target: jabber + - match: tcp + type: conn_handler + target: default + - match: + type: drop diff --git a/docker/glutton/dist/system.go b/docker/glutton/dist/system.go new file mode 100644 index 000000000..2b94acc7b --- /dev/null +++ b/docker/glutton/dist/system.go @@ -0,0 +1,38 @@ +package glutton + +import ( + "fmt" + "log" + "os" + "os/exec" + "runtime" + "strings" + "time" +) + +func countOpenFiles() int { + out, err := exec.Command("/bin/sh", "-c", fmt.Sprintf("lsof -p %v", os.Getpid())).Output() + if err != nil { + log.Fatal(err) + } + lines := strings.Split(string(out), "\n") + return len(lines) - 1 +} + +func countRunningRoutines() int { + return runtime.NumGoroutine() +} + +func (g *Glutton) startMonitor(quit chan struct{}) { + ticker := time.NewTicker(10 * time.Second) + go func() { + for { + select { + case <-quit: + g.logger.Info("[system ] Monitoring stopped..") + ticker.Stop() + return + } + } + }() +} diff --git a/docker/glutton/doc/dashboard.png b/docker/glutton/doc/dashboard.png new file mode 100644 index 000000000..fde63cad3 Binary files /dev/null and b/docker/glutton/doc/dashboard.png differ diff --git a/docker/glutton/docker-compose.yml b/docker/glutton/docker-compose.yml new file mode 100644 index 000000000..d207da3dd --- /dev/null +++ b/docker/glutton/docker-compose.yml @@ -0,0 +1,19 @@ +version: '2.3' + +services: + +# glutton service + glutton: + build: . + container_name: glutton + restart: always + tmpfs: + - /var/lib/glutton:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: "dtagdevsec/glutton:1811" + read_only: true + volumes: + - /data/glutton/log:/var/log/glutton + - /root/tpotce/docker/glutton/dist/rules.yaml:/opt/glutton/rules/rules.yaml diff --git a/docker/heralding/Dockerfile b/docker/heralding/Dockerfile new file mode 100644 index 000000000..4f1c3b2f6 --- /dev/null +++ b/docker/heralding/Dockerfile @@ -0,0 +1,54 @@ +FROM alpine + +# Include dist +ADD dist/ /root/dist/ + +# Install packages +RUN apk -U --no-cache add \ + build-base \ + git \ + libcap \ + libffi-dev \ + libressl-dev \ + libzmq \ + postgresql-dev \ + python3 \ + python3-dev \ + py-virtualenv && \ + pip3 install --no-cache-dir --upgrade pip && \ + +# Setup heralding + mkdir -p /opt && \ + cd /opt/ && \ + git clone --depth=1 https://github.com/johnnykv/heralding && \ + cd heralding && \ + pip3 install --no-cache-dir -r requirements.txt && \ + pip3 install --no-cache-dir . && \ + +# Setup user, groups and configs + addgroup -g 2000 heralding && \ + adduser -S -H -s /bin/ash -u 2000 -D -g 2000 heralding && \ + mkdir -p /var/log/heralding/ /etc/heralding && \ + mv /root/dist/heralding.yml /etc/heralding/ && \ + setcap cap_net_bind_service=+ep /usr/bin/python3.6 && \ + chown -R heralding:heralding /var/log/heralding && \ + +# Clean up + apk del --purge \ + build-base \ + git \ + libcap \ + libffi-dev \ + libressl-dev \ + postgresql-dev \ + python3-dev \ + py-virtualenv && \ + rm -rf /root/* \ + /var/cache/apk/* \ + /opt/heralding + +# Start elasticpot +STOPSIGNAL SIGINT +WORKDIR /tmp/heralding/ +USER heralding:heralding +CMD exec heralding -c /etc/heralding/heralding.yml -l /var/log/heralding/heralding.log diff --git a/docker/heralding/README.md b/docker/heralding/README.md new file mode 100644 index 000000000..ca92c45a6 --- /dev/null +++ b/docker/heralding/README.md @@ -0,0 +1,15 @@ +[![](https://images.microbadger.com/badges/version/dtagdevsec/heralding:1811.svg)](https://microbadger.com/images/dtagdevsec/heralding:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/heralding:1811.svg)](https://microbadger.com/images/dtagdevsec/heralding:1811 "Get your own image badge on microbadger.com") + +# heralding + +[Heralding](https://github.com/johnnykv/heralding) is a simple honeypot that collects credentials, nothing more. Heralding is that honeypot! Currently the following protocols are supported: ftp, telnet, ssh, http, https, pop3, pop3s, imap, imaps, smtp and postgresql. + +This dockerized version is part of the **[T-Pot community honeypot](http://dtag-dev-sec.github.io/)** of Deutsche Telekom AG. + +The `Dockerfile` contains the blueprint for the dockerized heralding and will be used to setup the docker image. + +The `docker-compose.yml` contains the necessary settings to test conpot using `docker-compose`. This will ensure to start the docker container with the appropriate permissions and port mappings. + +# heralding Dashboard + +![heralding Dashboard](doc/dashboard.png) diff --git a/docker/heralding/dist/heralding.yml b/docker/heralding/dist/heralding.yml new file mode 100644 index 000000000..8e03ef277 --- /dev/null +++ b/docker/heralding/dist/heralding.yml @@ -0,0 +1,152 @@ +# will request and log the public ip every hours from ipify +public_ip_as_destination_ip: true + +# ip address to listen on +bind_host: 0.0.0.0 + +# logging of sessions and authentication attempts +activity_logging: + file: + enabled: true + session_log_file: "/var/log/heralding/session.csv" + authentication_log_file: "/var/log/heralding/auth.csv" + + syslog: + enabled: false + + hpfeeds: + enabled: false + session_channel: "heralding.session" + auth_channel: "heralding.auth" + host: + port: 20000 + ident: + secret: + + curiosum: + enabled: false + port: 23400 + +# protocols to enable +capabilities: + ftp: + enabled: true + port: 21 + timeout: 30 + protocol_specific_data: + max_attempts: 3 + banner: "Microsoft FTP Server" + syst_type: "Windows-NT" + + telnet: + enabled: true + port: 23 + timeout: 30 + protocol_specific_data: + max_attempts: 3 + + pop3: + enabled: true + port: 110 + timeout: 30 + protocol_specific_data: + max_attempts: 3 + + pop3s: + enabled: true + port: 995 + timeout: 30 + protocol_specific_data: + max_attempts: 3 + # if a .pem file is not found in work dir, a new pem file will be created + # using these values + cert: + common_name: "*" + country: "US" + state: None + locality: None + organization: None + organizational_unit: None + # how many days should the certificate be valid for + valid_days: 365 + serial_number: 0 + + postgresql: + enabled: true + port: 5432 + timeout: 30 + + imap: + enabled: true + port: 143 + timeout: 30 + protocol_specific_data: + max_attempts: 3 + banner: "* OK IMAP4rev1 Server Ready" + + imaps: + enabled: true + port: 993 + timeout: 30 + protocol_specific_data: + max_attempts: 3 + banner: "* OK IMAP4rev1 Server Ready" + # if a .pem file is not found in work dir, a new pem file will be created + # using these values + cert: + common_name: "*" + country: "US" + state: None + locality: None + organization: None + organizational_unit: None + # how many days should the certificate be valid for + valid_days: 365 + serial_number: 0 + + ssh: + enabled: true + port: 22 + timeout: 30 + protocol_specific_data: + banner: "SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8" + + http: + enabled: true + port: 80 + timeout: 30 + protocol_specific_data: + banner: "" + + https: + enabled: true + port: 443 + timeout: 30 + protocol_specific_data: + banner: "" + # if a .pem file is not found in work dir, a new pem file will be created + # using these values + cert: + common_name: "*" + country: "US" + state: None + locality: None + organization: None + organizational_unit: None + # how many days should the certificate be valid for + valid_days: 365 + serial_number: 0 + + smtp: + enabled: true + port: 25 + timeout: 30 + protocol_specific_data: + banner: "Microsoft ESMTP MAIL service ready" + # If the fqdn option is commented out or empty, then fqdn of the host will be used + fqdn: "" + + vnc: + enabled: true + port: 5900 + timeout: 30 diff --git a/docker/heralding/doc/dashboard.png b/docker/heralding/doc/dashboard.png new file mode 100644 index 000000000..c82b2f6b6 Binary files /dev/null and b/docker/heralding/doc/dashboard.png differ diff --git a/docker/heralding/docker-compose.yml b/docker/heralding/docker-compose.yml new file mode 100644 index 000000000..da519fbc2 --- /dev/null +++ b/docker/heralding/docker-compose.yml @@ -0,0 +1,33 @@ +version: '2.3' + +networks: + heralding_local: + +services: + +# Heralding service + heralding: + build: . + container_name: heralding + restart: always + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + - "21:21" + - "22:22" + - "23:23" + - "25:25" + - "80:80" + - "110:110" + - "143:143" + - "443:443" + - "993:993" + - "995:995" + - "5432:5432" + - "5900:5900" + image: "dtagdevsec/heralding:1811" + read_only: true + volumes: + - /data/heralding/log:/var/log/heralding diff --git a/docker/honeytrap/Dockerfile b/docker/honeytrap/Dockerfile index 799be0acc..3ea52fcac 100644 --- a/docker/honeytrap/Dockerfile +++ b/docker/honeytrap/Dockerfile @@ -1,6 +1,4 @@ FROM debian:stretch-slim -MAINTAINER MO - ENV DEBIAN_FRONTEND noninteractive # Include dist @@ -11,8 +9,21 @@ RUN apt-get update -y && \ apt-get dist-upgrade -y && \ # Install packages - apt-get install -y autoconf build-essential git iptables libnetfilter-queue1 libnetfilter-queue-dev \ - libjson-c-dev libtool libpq5 libpq-dev netbase procps wget && \ + apt-get install -y autoconf \ + build-essential \ + git \ + iptables \ + libcap2 \ + libcap2-bin \ + libnetfilter-queue1 \ + libnetfilter-queue-dev \ + libjson-c-dev \ + libtool \ + libpq5 \ + libpq-dev \ + netbase \ + procps \ + wget && \ # Install honeytrap from source cd /root/ && \ @@ -33,12 +44,18 @@ RUN apt-get update -y && \ adduser --system --no-create-home --shell /bin/bash --uid 2000 --disabled-password --disabled-login --gid 2000 honeytrap && \ mkdir -p /opt/honeytrap/etc/honeytrap/ /opt/honeytrap/var/attacks /opt/honeytrap/var/downloads /opt/honeytrap/var/log && \ mv /root/dist/honeytrap.conf /opt/honeytrap/etc/honeytrap/ && \ + setcap cap_net_admin=+ep /opt/honeytrap/sbin/honeytrap && \ # Clean up rm -rf /root/* && \ - apt-get purge -y autoconf build-essential git libnetfilter-queue-dev libpq-dev && \ + apt-get purge -y autoconf \ + build-essential \ + git \ + libnetfilter-queue-dev \ + libpq-dev && \ apt-get autoremove -y --purge && \ apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Start honeytrap -CMD ["/opt/honeytrap/sbin/honeytrap", "-D", "-C", "/opt/honeytrap/etc/honeytrap/honeytrap.conf", "-t", "5", "-u", "honeytrap", "-g", "honeytrap"] +USER honeytrap:honeytrap +CMD ["/opt/honeytrap/sbin/honeytrap", "-D", "-C", "/opt/honeytrap/etc/honeytrap/honeytrap.conf", "-P", "/tmp/honeytrap/honeytrap.pid", "-t", "5", "-u", "honeytrap", "-g", "honeytrap"] diff --git a/docker/honeytrap/README.md b/docker/honeytrap/README.md index 81294eb00..696a53425 100644 --- a/docker/honeytrap/README.md +++ b/docker/honeytrap/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/honeytrap:1710.svg)](https://microbadger.com/images/dtagdevsec/honeytrap:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/honeytrap:1710.svg)](https://microbadger.com/images/dtagdevsec/honeytrap:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/honeytrap:1804.svg)](https://microbadger.com/images/dtagdevsec/honeytrap:1804 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/honeytrap:1804.svg)](https://microbadger.com/images/dtagdevsec/honeytrap:1804 "Get your own image badge on microbadger.com") # honeytrap @@ -12,4 +12,4 @@ The `docker-compose.yml` contains the necessary settings to test honeytrap using # Honeytrap Dashboard -![Honeytrap Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/honeytrap/doc/dashboard.png) +![Honeytrap Dashboard](doc/dashboard.png) diff --git a/docker/honeytrap/doc/dashboard.png b/docker/honeytrap/doc/dashboard.png index 64ea4b08a..6ad08025d 100644 Binary files a/docker/honeytrap/doc/dashboard.png and b/docker/honeytrap/doc/dashboard.png differ diff --git a/docker/honeytrap/docker-compose.yml b/docker/honeytrap/docker-compose.yml index 1643c1e2c..5073ab0a8 100644 --- a/docker/honeytrap/docker-compose.yml +++ b/docker/honeytrap/docker-compose.yml @@ -1,18 +1,19 @@ -version: '2.1' - -networks: - honeytrap_local: +version: '2.3' services: # Honeytrap service honeytrap: + build: . container_name: honeytrap restart: always + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 network_mode: "host" cap_add: - NET_ADMIN - image: "dtagdevsec/honeytrap:1710" + image: "dtagdevsec/honeytrap:1811" + read_only: true volumes: - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - /data/honeytrap/downloads:/opt/honeytrap/var/downloads diff --git a/docker/hpfeeds/Dockerfile b/docker/hpfeeds/Dockerfile new file mode 100644 index 000000000..57c078fe6 --- /dev/null +++ b/docker/hpfeeds/Dockerfile @@ -0,0 +1,41 @@ +### This is only for testing purposes, do NOT use for production +FROM alpine + +ADD dist/ /root/dist/ + +# Install packages +RUN apk -U --no-cache add \ + build-base \ + coreutils \ + git \ + libffi \ + libffi-dev \ + py-gevent \ + py-pip \ + python \ + python-dev \ + sqlite && \ + +# Install php sandbox from git + git clone --depth=1 https://github.com/rep/hpfeeds /opt/hpfeeds && \ + cd /opt/hpfeeds/broker && \ + sed -i -e '87d;88d' database.py && \ + cp /root/dist/adduser.sql . && \ + cd /opt/hpfeeds/broker && timeout 5 python broker.py || : && \ + sqlite3 db.sqlite3 < adduser.sql && \ + + #python setup.py build && \ + #python setup.py install && \ + +# Clean up + apk del --purge autoconf \ + build-base \ + coreutils \ + libffi-dev \ + python-dev && \ + rm -rf /root/* && \ + rm -rf /var/cache/apk/* + +# Set workdir and start glastopf +WORKDIR /opt/hpfeeds/broker +CMD python broker.py diff --git a/docker/hpfeeds/dist/adduser.sql b/docker/hpfeeds/dist/adduser.sql new file mode 100644 index 000000000..d05cd2eda --- /dev/null +++ b/docker/hpfeeds/dist/adduser.sql @@ -0,0 +1 @@ +insert into authkeys (owner, ident, secret, pubchans, subchans) values ('testID', 'testID', 'testSecret', '["ciscoasa", "rdpy-channel", "mailoney.mail","mailoney.commands",mailoney.shellcode"]', '["ciscoasa", "rdpy-channel", "mailoney.mail","mailoney.commands",mailoney.shellcode"]'); diff --git a/docker/hpfeeds/docker-compose.yml b/docker/hpfeeds/docker-compose.yml new file mode 100644 index 000000000..da1048957 --- /dev/null +++ b/docker/hpfeeds/docker-compose.yml @@ -0,0 +1,19 @@ +### This is only for testing purposes, do NOT use for production +version: '2.3' + +networks: + hpfeeds_local: + +services: + +# hpfeeds service + hpfeeds: + build: . + container_name: hpfeeds + restart: always + stop_signal: SIGKILL + networks: + - hpfeeds_local + ports: + - "20000:20000" + image: "dtagdevsec/hpfeeds:latest" diff --git a/docker/mailoney/Dockerfile b/docker/mailoney/Dockerfile index 7a2af93a1..0524d2b8c 100644 --- a/docker/mailoney/Dockerfile +++ b/docker/mailoney/Dockerfile @@ -1,12 +1,19 @@ FROM alpine -MAINTAINER MO # Install packages -RUN apk -U upgrade && \ - apk add autoconf automake bash build-base git libtool procps py-pip python python-dev && \ +RUN apk -U --no-cache add \ + autoconf \ + automake \ + build-base \ + git \ + libcap \ + libtool \ + py-pip \ + python \ + python-dev && \ # Install libemu - git clone https://github.com/buffer/libemu /root/libemu/ && \ + git clone --depth=1 https://github.com/buffer/libemu /root/libemu/ && \ cd /root/libemu/ && \ autoreconf -vi && \ ./configure && \ @@ -14,22 +21,32 @@ RUN apk -U upgrade && \ make install && \ # Install libemu python wrapper - pip install pylibemu && \ + pip install --no-cache-dir --upgrade pip && \ + pip install --no-cache-dir \ + hpfeeds \ + pylibemu && \ # Install mailoney from git - git clone https://github.com/awhitehatter/mailoney /opt/mailoney && \ + git clone --depth=1 https://github.com/awhitehatter/mailoney /opt/mailoney && \ # Setup user, groups and configs addgroup -g 2000 mailoney && \ - adduser -S -H -s /bin/bash -u 2000 -D -g 2000 mailoney && \ + adduser -S -H -s /bin/ash -u 2000 -D -g 2000 mailoney && \ chown -R mailoney:mailoney /opt/mailoney && \ + setcap cap_net_bind_service=+ep /usr/bin/python2.7 && \ # Clean up - apk del autoconf automake build-base git py-pip python-dev && \ + apk del --purge autoconf \ + automake \ + build-base \ + git \ + py-pip \ + python-dev && \ rm -rf /root/* && \ rm -rf /var/cache/apk/* -# Set workdir and start glastopf -USER mailoney +# Set workdir and start mailoney +STOPSIGNAL SIGINT +USER mailoney:mailoney WORKDIR /opt/mailoney/ -CMD ["/usr/bin/python","mailoney.py","-i","0.0.0.0","-p","2525","-s","mailserver","-t","schizo_open_relay"] +CMD ["/usr/bin/python","mailoney.py","-i","0.0.0.0","-p","25","-s","mailrelay.local","-t","schizo_open_relay"] diff --git a/docker/mailoney/README.md b/docker/mailoney/README.md index 04bf5691b..fab0323f8 100644 --- a/docker/mailoney/README.md +++ b/docker/mailoney/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/mailoney:1710.svg)](https://microbadger.com/images/dtagdevsec/mailoney:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/mailoney:1710.svg)](https://microbadger.com/images/dtagdevsec/mailoney:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/mailoney:1811.svg)](https://microbadger.com/images/dtagdevsec/mailoney:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/mailoney:1811.svg)](https://microbadger.com/images/dtagdevsec/mailoney:1811 "Get your own image badge on microbadger.com") # mailoney @@ -12,4 +12,4 @@ The `docker-compose.yml` contains the necessary settings to test mailoney using # Mailoney Dashboard -![Mailoney Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/mailoney/doc/dashboard.png) +![Mailoney Dashboard](doc/dashboard.png) diff --git a/docker/mailoney/doc/dashboard.png b/docker/mailoney/doc/dashboard.png index 7af2cbb7c..63920e0e3 100644 Binary files a/docker/mailoney/doc/dashboard.png and b/docker/mailoney/doc/dashboard.png differ diff --git a/docker/mailoney/docker-compose.yml b/docker/mailoney/docker-compose.yml index 7c14e3310..74c09a410 100644 --- a/docker/mailoney/docker-compose.yml +++ b/docker/mailoney/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '2.3' networks: mailoney_local: @@ -7,12 +7,20 @@ services: # Mailoney service mailoney: + build: . container_name: mailoney restart: always + environment: + - HPFEEDS_SERVER= + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=20000 + - HPFEEDS_CHANNELPREFIX=prefix networks: - mailoney_local ports: - - "25:2525" - image: "dtagdevsec/mailoney:1710" - volumes: - - /data/mailoney/log:/opt/mailoney/logs + - "25:25" + image: "dtagdevsec/mailoney:1811" + read_only: true + volumes: + - /data/mailoney/log:/opt/mailoney/logs diff --git a/docker/medpot/.DS_Store b/docker/medpot/.DS_Store new file mode 100644 index 000000000..9b786ce52 Binary files /dev/null and b/docker/medpot/.DS_Store differ diff --git a/docker/medpot/Dockerfile b/docker/medpot/Dockerfile new file mode 100644 index 000000000..b92d58b71 --- /dev/null +++ b/docker/medpot/Dockerfile @@ -0,0 +1,45 @@ +FROM alpine + +# Setup apk +RUN apk -U --no-cache add \ + build-base \ + git \ + go \ + g++ && \ + +# Setup go, build medpot + export GOPATH=/opt/go/ && \ + mkdir -p /opt/go/src && \ + cd /opt/go/src && \ + git clone https://github.com/schmalle/medpot && \ + go get -d -v github.com/davecgh/go-spew/spew && \ + go get -d -v github.com/go-ini/ini && \ + go get -d -v github.com/mozillazg/request && \ + go get -d -v go.uber.org/zap && \ + cd medpot && \ + go build medpot && \ + +# Setup medpot + mkdir -p /opt/medpot \ + /var/log/medpot && \ + cp medpot /opt/medpot && \ + cp /opt/go/src/medpot/template/*.xml /opt/medpot/ && \ + +# Setup user, groups and configs + addgroup -g 2000 medpot && \ + adduser -S -s /bin/ash -u 2000 -D -g 2000 medpot && \ + chown -R medpot:medpot /var/log/medpot && \ + +# Clean up + apk del --purge build-base \ + git \ + go \ + g++ && \ + rm -rf /var/cache/apk/* \ + /opt/go \ + /root/dist + +# Start medpot +WORKDIR /opt/medpot +USER medpot:medpot +CMD ["./medpot"] diff --git a/docker/medpot/README.md b/docker/medpot/README.md new file mode 100644 index 000000000..8cac7d011 --- /dev/null +++ b/docker/medpot/README.md @@ -0,0 +1,15 @@ +[![](https://images.microbadger.com/badges/version/dtagdevsec/medpot:1811.svg)](https://microbadger.com/images/dtagdevsec/medpot:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/medpot:1811.svg)](https://microbadger.com/images/dtagdevsec/medpot:1811 "Get your own image badge on microbadger.com") + +# Medpot + +[Medpot](https://github.com/schmalle/medpot) is a SMTP Honeypot. + +This dockerized version is part of the **[T-Pot community honeypot](http://dtag-dev-sec.github.io/)** of Deutsche Telekom AG. + +The `Dockerfile` contains the blueprint for the dockerized Medpot and will be used to setup the docker image. + +The `docker-compose.yml` contains the necessary settings to test Medpot using `docker-compose`. This will ensure to start the docker container with the appropriate permissions and port mappings. + +# Medpot Dashboard + +![Medpot Dashboard](doc/dashboard.png) diff --git a/docker/medpot/doc/dashboard.png b/docker/medpot/doc/dashboard.png new file mode 100644 index 000000000..d9162fa4f Binary files /dev/null and b/docker/medpot/doc/dashboard.png differ diff --git a/docker/medpot/docker-compose.yml b/docker/medpot/docker-compose.yml new file mode 100644 index 000000000..b665487df --- /dev/null +++ b/docker/medpot/docker-compose.yml @@ -0,0 +1,20 @@ +version: '2.3' + +networks: + medpot_local: + +services: + +# medpot service + medpot: + build: . + container_name: medpot + restart: always + networks: + - medpot_local + ports: + - "2575:2575" + image: "dtagdevsec/medpot:1811" + read_only: true + volumes: + - /data/medpot/log/:/var/log/medpot diff --git a/docker/netdata/Dockerfile b/docker/netdata/Dockerfile deleted file mode 100644 index 76acf9f8f..000000000 --- a/docker/netdata/Dockerfile +++ /dev/null @@ -1,32 +0,0 @@ -FROM alpine -MAINTAINER MO - -# Install packages -RUN apk -U upgrade && \ - apk add alpine-sdk autoconf automake bash curl gawk gcc iw jq libmnl-dev libuuid linux-headers lm_sensors make musl-dev netcat-openbsd util-linux-dev pkgconf python py-requests py-yaml zlib-dev && \ - -# Install netdata - cd /root && \ - git clone https://github.com/firehol/netdata && \ - cd netdata && \ - ./netdata-installer.sh --dont-wait --dont-start-it && \ - sed -i "s/#local:/local:/" /etc/netdata/python.d/elasticsearch.conf && \ - sed -i "s/# host: '127.0.0.1'/host: '127.0.0.1'/" /etc/netdata/python.d/elasticsearch.conf && \ - sed -i "s/port: '9200'/port: '64298'/" /etc/netdata/python.d/elasticsearch.conf && \ - sed -i "s/# cluster_health: True/cluster_health: True/" /etc/netdata/python.d/elasticsearch.conf && \ - sed -i "s/# cluster_stats: True/cluster_stats: True/" /etc/netdata/python.d/elasticsearch.conf && \ - sed -i 's/SEND_EMAIL="YES"/SEND_EMAIL="NO"/' /etc/netdata/health_alarm_notify.conf && \ - echo 0 > /usr/share/netdata/web/version.txt && \ - cd / && \ - -# Clean up - apk del alpine-sdk autoconf automake gcc libmnl-dev linux-headers make musl-dev pkgconf util-linux-dev zlib-dev && \ - rm -rf /root/* && \ - rm -rf /var/cache/apk/* - -# Healthcheck -HEALTHCHECK --retries=10 CMD curl -s -XGET 'http://127.0.0.1:64301' - -# Start netdata -WORKDIR / -CMD ["/usr/sbin/netdata","-D","-s","/host","-i","127.0.0.1","-p","64301"] diff --git a/docker/netdata/LICENSE b/docker/netdata/LICENSE deleted file mode 100644 index 9cecc1d46..000000000 --- a/docker/netdata/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/docker/netdata/README.md b/docker/netdata/README.md deleted file mode 100644 index 799e15bfc..000000000 --- a/docker/netdata/README.md +++ /dev/null @@ -1,15 +0,0 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/netdata:1710.svg)](https://microbadger.com/images/dtagdevsec/netdata:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/netdata:1710.svg)](https://microbadger.com/images/dtagdevsec/netdata:1710 "Get your own image badge on microbadger.com") - -# netdata - -[netdata](http://my-netdata.io/) is a system for distributed real-time performance and health monitoring. It provides unparalleled insights, in real-time, of everything happening on the system it runs (including applications such as web, or database servers), using modern interactive web dashboards. netdata is fast and efficient, designed to permanently run on all systems (physical & virtual servers, containers, IoT devices), without disrupting their core function. - -This dockerized version is part of the **[T-Pot community honeypot](http://dtag-dev-sec.github.io/)** of Deutsche Telekom AG. - -The `Dockerfile` contains the blueprint for the dockerized netdata and will be used to setup the docker image. - -The `docker-compose.yml` contains the necessary settings to test netdata using `docker-compose`. This will ensure to start the docker container with the appropriate permissions and port mappings. - -# Netdata Dashboard - -![Netdata Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/netdata/doc/dashboard.png) diff --git a/docker/netdata/doc/dashboard.png b/docker/netdata/doc/dashboard.png deleted file mode 100644 index eb8752fb8..000000000 Binary files a/docker/netdata/doc/dashboard.png and /dev/null differ diff --git a/docker/netdata/docker-compose.yml b/docker/netdata/docker-compose.yml deleted file mode 100644 index 251339b25..000000000 --- a/docker/netdata/docker-compose.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: '2.1' - -services: - -# Netdata service - netdata: - container_name: netdata - restart: always - network_mode: "host" - cap_add: - - SYS_PTRACE - security_opt: - - apparmor=unconfined - image: "dtagdevsec/netdata:1710" - volumes: - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /var/run/docker.sock:/var/run/docker.sock - command: ["/usr/sbin/netdata","-D","-s","/host","-p","19999"] diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile new file mode 100644 index 000000000..6235c08dc --- /dev/null +++ b/docker/nginx/Dockerfile @@ -0,0 +1,24 @@ +FROM alpine + +# Include dist +ADD dist/ /root/dist/ + +# Get and install dependencies & packages +RUN apk -U --no-cache add \ + nginx \ + nginx-mod-http-headers-more && \ + +# Setup configs + mkdir -p /run/nginx && \ + rm -rf /etc/nginx/conf.d/* /usr/share/nginx/html/* && \ + cp /root/dist/conf/nginx.conf /etc/nginx/ && \ + cp -R /root/dist/conf/ssl /etc/nginx/ && \ + cp /root/dist/conf/tpotweb.conf /etc/nginx/conf.d/ && \ + cp -R /root/dist/html/ /var/lib/nginx/ && \ + +# Clean up + rm -rf /root/* && \ + rm -rf /var/cache/apk/* + +# Start nginx +CMD exec nginx -g 'daemon off;' diff --git a/docker/nginx/Dockerfile.future b/docker/nginx/Dockerfile.future new file mode 100644 index 000000000..b11423968 --- /dev/null +++ b/docker/nginx/Dockerfile.future @@ -0,0 +1,26 @@ +FROM alpine + +# Include dist +ADD dist/ /root/dist/ + +# Get and install dependencies & packages +RUN rm -rf /etc/ssl/openssl.cnf && \ + apk add --no-cache -U -X http://dl-3.alpinelinux.org/alpine/edge/testing/ \ + nginx \ + nginx-mod-http-headers-more \ + openssl1.1 || : && \ + +# Setup configs + mkdir -p /run/nginx && \ + rm -rf /etc/nginx/conf.d/* /usr/share/nginx/html/* && \ + cp /root/dist/conf/nginx.conf /etc/nginx/ && \ + cp -R /root/dist/conf/ssl /etc/nginx/ && \ + cp /root/dist/conf/tpotweb.conf /etc/nginx/conf.d/ && \ + cp -R /root/dist/html/ /var/lib/nginx/ && \ + +# Clean up + rm -rf /root/* && \ + rm -rf /var/cache/apk/* + +# Start nginx +CMD exec nginx -g 'daemon off;' diff --git a/host/etc/nginx/nginx.conf b/docker/nginx/dist/conf/nginx.conf similarity index 95% rename from host/etc/nginx/nginx.conf rename to docker/nginx/dist/conf/nginx.conf index 2e3e786e8..24d24d4d0 100644 --- a/host/etc/nginx/nginx.conf +++ b/docker/nginx/dist/conf/nginx.conf @@ -1,6 +1,7 @@ -user www-data; +user nginx; worker_processes auto; pid /run/nginx.pid; +load_module /usr/lib/nginx/modules/ngx_http_headers_more_filter_module.so; events { worker_connections 768; diff --git a/host/etc/nginx/ssl/dhparam4096.pem b/docker/nginx/dist/conf/ssl/dhparam4096.pem similarity index 100% rename from host/etc/nginx/ssl/dhparam4096.pem rename to docker/nginx/dist/conf/ssl/dhparam4096.pem diff --git a/host/etc/nginx/ssl/gen-cert.sh b/docker/nginx/dist/conf/ssl/gen-cert.sh similarity index 100% rename from host/etc/nginx/ssl/gen-cert.sh rename to docker/nginx/dist/conf/ssl/gen-cert.sh diff --git a/host/etc/nginx/ssl/gen-dhparam.sh b/docker/nginx/dist/conf/ssl/gen-dhparam.sh similarity index 100% rename from host/etc/nginx/ssl/gen-dhparam.sh rename to docker/nginx/dist/conf/ssl/gen-dhparam.sh diff --git a/host/etc/nginx/tpotweb.conf b/docker/nginx/dist/conf/tpotweb.conf similarity index 72% rename from host/etc/nginx/tpotweb.conf rename to docker/nginx/dist/conf/tpotweb.conf index 00eb95eeb..380a4a461 100644 --- a/host/etc/nginx/tpotweb.conf +++ b/docker/nginx/dist/conf/tpotweb.conf @@ -2,11 +2,6 @@ ### NGINX T-Pot configuration file by mo ### ############################################ -################################### -### Allow for 60 reloads per minute -################################### -limit_req_zone $binary_remote_addr zone=base:1m rate=1r/s; - server { ######################### @@ -29,8 +24,8 @@ server { ############################################## ### SSL settings and Cipher Suites ############################################## - ssl_certificate /etc/nginx/ssl/nginx.crt; - ssl_certificate_key /etc/nginx/ssl/nginx.key; + ssl_certificate /etc/nginx/cert/nginx.crt; + ssl_certificate_key /etc/nginx/cert/nginx.key; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!DHE:!SHA:!SHA256'; ssl_ecdh_curve secp384r1; @@ -39,16 +34,16 @@ server { ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; - + #################################### ### OWASP recommendations / settings #################################### ### Size Limits & Buffer Overflows ### the size may be configured based on the needs. - client_body_buffer_size 100K; + client_body_buffer_size 128k; client_header_buffer_size 1k; - client_max_body_size 100k; + client_max_body_size 256k; large_client_header_buffers 2 1k; ### Mitigate Slow HHTP DoS Attack @@ -89,55 +84,32 @@ server { auth_basic_user_file /etc/nginx/nginxpasswd; - ############################## - ### Limit brute-force attempts - ############################## - location = / { - limit_req zone=base burst=1 nodelay; - } - - ################# ### Proxied sites ################# ### Kibana location /kibana/ { - proxy_pass http://localhost:64296; + proxy_pass http://127.0.0.1:64296; rewrite /kibana/(.*)$ /$1 break; } ### ES location /es/ { - proxy_pass http://localhost:64298/; + proxy_pass http://127.0.0.1:64298/; rewrite /es/(.*)$ /$1 break; } ### head standalone location /myhead/ { - proxy_pass http://localhost:64302/; + proxy_pass http://127.0.0.1:64302/; rewrite /myhead/(.*)$ /$1 break; } - ### portainer - location /ui { + ### CyberChef + location /cyberchef { proxy_pass http://127.0.0.1:64299; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $http_connection; - proxy_set_header Host $host; - proxy_redirect off; - rewrite /ui/(.*)$ /$1 break; - } - ### web tty - location /wetty { - proxy_pass http://127.0.0.1:64300/wetty; - } - - ### netdata - location /netdata/ { - proxy_pass http://localhost:64301; - rewrite /netdata/(.*)$ /$1 break; + rewrite ^/cyberchef(.*)$ /$1 break; } ### spiderfoot @@ -152,4 +124,9 @@ server { location /scanviz { proxy_pass http://127.0.0.1:64303/spiderfoot/scanviz; } + + location /scandelete { + proxy_pass http://127.0.0.1:64303/spiderfoot/scandelete; + } + } diff --git a/host/usr/share/nginx/html/error.html b/docker/nginx/dist/html/error.html similarity index 100% rename from host/usr/share/nginx/html/error.html rename to docker/nginx/dist/html/error.html diff --git a/docker/nginx/dist/html/favicon.ico b/docker/nginx/dist/html/favicon.ico new file mode 100644 index 000000000..2b7ef0636 Binary files /dev/null and b/docker/nginx/dist/html/favicon.ico differ diff --git a/docker/nginx/dist/html/navbar.html b/docker/nginx/dist/html/navbar.html new file mode 100644 index 000000000..8c700ef37 --- /dev/null +++ b/docker/nginx/dist/html/navbar.html @@ -0,0 +1,23 @@ + + + + + + T-Pot + + + + +
+ Home + + CyberChef + ES Head + Kibana + Spiderfoot +
+ + + diff --git a/host/usr/share/nginx/html/style.css b/docker/nginx/dist/html/style.css similarity index 100% rename from host/usr/share/nginx/html/style.css rename to docker/nginx/dist/html/style.css diff --git a/host/usr/share/nginx/html/tpotweb.html b/docker/nginx/dist/html/tpotweb.html similarity index 80% rename from host/usr/share/nginx/html/tpotweb.html rename to docker/nginx/dist/html/tpotweb.html index 6f3a0146f..5afd0404c 100644 --- a/host/usr/share/nginx/html/tpotweb.html +++ b/docker/nginx/dist/html/tpotweb.html @@ -8,7 +8,7 @@ - + diff --git a/docker/nginx/docker-compose.yml b/docker/nginx/docker-compose.yml new file mode 100644 index 000000000..b8d0a907e --- /dev/null +++ b/docker/nginx/docker-compose.yml @@ -0,0 +1,25 @@ +version: '2.3' + +services: + +# nginx service + nginx: + build: . + container_name: nginx + restart: always + tmpfs: + - /var/tmp/nginx/client_body + - /var/tmp/nginx/proxy + - /var/tmp/nginx/fastcgi + - /var/tmp/nginx/uwsgi + - /var/tmp/nginx/scgi + - /run + network_mode: "host" + ports: + - "64297:64297" + image: "dtagdevsec/nginx:1811" + read_only: true + volumes: + - /data/nginx/cert/:/etc/nginx/cert/:ro + - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - /data/nginx/log/:/var/log/nginx/ diff --git a/docker/p0f/Dockerfile b/docker/p0f/Dockerfile index d681ba998..dfd873288 100644 --- a/docker/p0f/Dockerfile +++ b/docker/p0f/Dockerfile @@ -1,12 +1,17 @@ FROM alpine -MAINTAINER MO # Add source ADD . /opt/p0f # Install packages -RUN apk -U upgrade && \ - apk add bash build-base git jansson-dev libpcap-dev procps && \ +RUN apk -U --no-cache add \ + bash \ + build-base \ + jansson \ + jansson-dev \ + libcap \ + libpcap \ + libpcap-dev && \ # Setup user, groups and configs addgroup -g 2000 p0f && \ @@ -15,13 +20,16 @@ RUN apk -U upgrade && \ # Download and compile p0f cd /opt/p0f && \ ./build.sh && \ + setcap cap_sys_chroot,cap_setgid,cap_net_raw=+ep /opt/p0f/p0f && \ # Clean up - apk del build-base git jansson-dev libpcap-dev && \ - apk add jansson libpcap && \ + apk del --purge build-base \ + jansson-dev \ + libpcap-dev && \ rm -rf /root/* && \ rm -rf /var/cache/apk/* # Start suricata WORKDIR /opt/p0f -CMD /bin/bash -c "exec /opt/p0f/p0f -u p0f -j -o /var/log/p0f/p0f.json -i $(/sbin/ip address | grep '^2: ' | awk '{ print $2 }' | tr -d [:punct:])" +USER p0f:p0f +CMD exec /opt/p0f/p0f -u p0f -j -o /var/log/p0f/p0f.json -i $(/sbin/ip address | grep '^2: ' | awk '{ print $2 }' | tr -d [:punct:]) diff --git a/docker/p0f/README.md b/docker/p0f/README.md index 1fc304b78..c3af5e3c7 100644 --- a/docker/p0f/README.md +++ b/docker/p0f/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/p0f:1710.svg)](https://microbadger.com/images/dtagdevsec/p0f:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/p0f:1710.svg)](https://microbadger.com/images/dtagdevsec/p0f:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/p0f:1804.svg)](https://microbadger.com/images/dtagdevsec/p0f:1804 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/p0f:1804.svg)](https://microbadger.com/images/dtagdevsec/p0f:1804 "Get your own image badge on microbadger.com") # p0f diff --git a/docker/p0f/docker-compose.yml b/docker/p0f/docker-compose.yml index 970499db6..289e794f5 100644 --- a/docker/p0f/docker-compose.yml +++ b/docker/p0f/docker-compose.yml @@ -1,12 +1,14 @@ -version: '2.1' +version: '2.3' services: # P0f service p0f: + build: . container_name: p0f restart: always network_mode: "host" - image: "dtagdevsec/p0f:1710" + image: "dtagdevsec/p0f:1811" + read_only: true volumes: - /data/p0f/log:/var/log/p0f diff --git a/docker/rdpy/.DS_Store b/docker/rdpy/.DS_Store new file mode 100644 index 000000000..7cbe27504 Binary files /dev/null and b/docker/rdpy/.DS_Store differ diff --git a/docker/rdpy/Dockerfile b/docker/rdpy/Dockerfile index 36160e43c..71c4fe12b 100644 --- a/docker/rdpy/Dockerfile +++ b/docker/rdpy/Dockerfile @@ -1,36 +1,61 @@ FROM alpine -MAINTAINER MO # Include dist ADD dist/ /root/dist/ # Get and install dependencies & packages -RUN apk -U upgrade && \ - apk add bash build-base git libffi-dev openssl openssl-dev procps python python-dev py-pip py-setuptools && \ - apk -U add --repository https://dl-cdn.alpinelinux.org/alpine/edge/testing/ \ +RUN apk -U --no-cache add \ + build-base \ + git \ + libffi-dev \ + openssl \ + openssl-dev \ + python \ + python-dev \ + py-pip \ + py-setuptools && \ + apk -U --no-cache add --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \ py-qt && \ # Setup user addgroup -g 2000 rdpy && \ - adduser -S -s /bin/bash -u 2000 -D -g 2000 rdpy && \ + adduser -S -s /bin/ash -u 2000 -D -g 2000 rdpy && \ -# Install rdpy from git - cd /home/rdpy && \ - git clone https://github.com/t3chn0m4g3/rdpy && \ +# Install deps + pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir --upgrade cffi && \ - pip install twisted pyopenssl qt4reactor service_identity rsa pyasn1==0.3.4 && \ + pip install --no-cache-dir \ + hpfeeds \ + twisted \ + pyopenssl \ + qt4reactor \ + service_identity \ + rsa \ + pyasn1 && \ + +# Install rdpy from git + mkdir /opt && \ + cd /opt && \ + git clone --depth=1 https://github.com/t3chn0m4g3/rdpy && \ cd rdpy && \ python setup.py install && \ # Setup user, groups and configs - cp /root/dist/* /home/rdpy/ && \ - chown rdpy:rdpy -R /home/rdpy/* && \ + cp /root/dist/* /opt/rdpy/ && \ + chown rdpy:rdpy -R /opt/rdpy/* && \ mkdir -p /var/log/rdpy && \ # Clean up rm -rf /root/* && \ - apk del build-base libffi-dev openssl-dev python-dev py-pip py-qt && \ + apk del --purge build-base \ + git \ + libffi-dev \ + openssl-dev \ + python-dev \ + py-pip \ + py-qt && \ rm -rf /var/cache/apk/* # Start rdpy -CMD /usr/bin/python2 -i /usr/bin/rdpy-rdphoneypot.py /home/rdpy/1 /home/rdpy/2 /home/rdpy/3 >> /var/log/rdpy/rdpy.log +USER rdpy:rdpy +CMD exec /usr/bin/python2 -i /usr/bin/rdpy-rdphoneypot.py /opt/rdpy/$(shuf -i 1-3 -n 1) >> /var/log/rdpy/rdpy.log diff --git a/docker/rdpy/README.md b/docker/rdpy/README.md index 65a4fd51e..c7215202a 100644 --- a/docker/rdpy/README.md +++ b/docker/rdpy/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/rdpy:1710.svg)](https://microbadger.com/images/dtagdevsec/rdpy:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/rdpy:1710.svg)](https://microbadger.com/images/dtagdevsec/rdpy:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/rdpy:1811.svg)](https://microbadger.com/images/dtagdevsec/rdpy:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/rdpy:1811.svg)](https://microbadger.com/images/dtagdevsec/rdpy:1811 "Get your own image badge on microbadger.com") # rdpy @@ -12,4 +12,4 @@ The `docker-compose.yml` contains the necessary settings to test rdpy using `doc # RDPY Dashboard -![RDPY Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/rdpy/doc/dashboard.png) +![RDPY Dashboard](doc/dashboard.png) diff --git a/docker/rdpy/doc/dashboard.png b/docker/rdpy/doc/dashboard.png index 27166057d..c09876d22 100644 Binary files a/docker/rdpy/doc/dashboard.png and b/docker/rdpy/doc/dashboard.png differ diff --git a/docker/rdpy/docker-compose.yml b/docker/rdpy/docker-compose.yml index d43a9e8a7..dd606c3c0 100644 --- a/docker/rdpy/docker-compose.yml +++ b/docker/rdpy/docker-compose.yml @@ -1,6 +1,4 @@ -# T-Pot (Standard) -# For docker-compose ... -version: '2.1' +version: '2.3' networks: rdpy_local: @@ -9,12 +7,22 @@ services: # Rdpy service rdpy: + build: . container_name: rdpy + extra_hosts: + - hpfeeds.example.com:127.0.0.1 restart: always + environment: + - HPFEEDS_SERVER=hpfeeds.example.com + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=65000 + - SERVERID=id networks: - rdpy_local ports: - "3389:3389" - image: "dtagdevsec/rdpy:1710" + image: "dtagdevsec/rdpy:1811" + read_only: true volumes: - /data/rdpy/log:/var/log/rdpy diff --git a/docker/spiderfoot/Dockerfile b/docker/spiderfoot/Dockerfile index 40917b330..51db10f7d 100644 --- a/docker/spiderfoot/Dockerfile +++ b/docker/spiderfoot/Dockerfile @@ -1,32 +1,57 @@ FROM alpine -MAINTAINER MO # Get and install dependencies & packages -RUN apk -U upgrade && \ - apk add bash build-base curl git libxml2-dev libxslt-dev openssl-dev procps python-dev py-lxml py-netaddr py-mako py-pip py-setuptools py-requests swig && \ - apk -U add --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ \ - py-beautifulsoup4 py-cherrypy && \ - pip install m2crypto && \ +RUN apk -U --no-cache add \ + build-base \ + curl \ + git \ + libxml2 \ + libxml2-dev \ + libxslt \ + libxslt-dev \ + openssl \ + openssl-dev \ + python \ + python-dev \ + py-lxml \ + py-netaddr \ + py-mako \ + py-markupsafe \ + py-pip \ + py-setuptools \ + py-requests \ + swig && \ + pip install --no-cache-dir --upgrade pip && \ + pip install --no-cache-dir \ + cherrypy \ + bs4 \ + m2crypto && \ # Setup user addgroup -g 2000 spiderfoot && \ - adduser -S -s /bin/bash -u 2000 -D -g 2000 spiderfoot && \ + adduser -S -s /bin/ash -u 2000 -D -g 2000 spiderfoot && \ # Install spiderfoot - git clone https://github.com/smicallef/spiderfoot -b v2.11.0-final /home/spiderfoot && \ + git clone --depth=1 https://github.com/smicallef/spiderfoot -b v2.12.0-final /home/spiderfoot && \ chown -R spiderfoot:spiderfoot /home/spiderfoot && \ sed -i "s#'__docroot': ''#'__docroot': '\/spiderfoot'#" /home/spiderfoot/sf.py && \ sed -i 's#raise cherrypy.HTTPRedirect("\/")#raise cherrypy.HTTPRedirect("\/spiderfoot")#' /home/spiderfoot/sfwebui.py && \ # Clean up - apk del build-base git libxml2-dev libxslt-dev openssl-dev python-dev py-pip py-setuptools && \ - apk add openssl libxml2 libxslt python && \ + apk del --purge build-base \ + git \ + libxml2-dev \ + libxslt-dev \ + openssl-dev \ + python-dev \ + py-pip \ + py-setuptools && \ rm -rf /var/cache/apk/* # Healthcheck HEALTHCHECK --retries=10 CMD curl -s -XGET 'http://127.0.0.1:8080' # Set user, workdir and start spiderfoot -USER spiderfoot +USER spiderfoot:spiderfoot WORKDIR /home/spiderfoot CMD ["/usr/bin/python", "sf.py", "0.0.0.0:8080"] diff --git a/docker/spiderfoot/README.md b/docker/spiderfoot/README.md index 0447eeac4..84111cf48 100644 --- a/docker/spiderfoot/README.md +++ b/docker/spiderfoot/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/spiderfoot:1710.svg)](https://microbadger.com/images/dtagdevsec/spiderfoot:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/spiderfoot:1710.svg)](https://microbadger.com/images/dtagdevsec/spiderfoot:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/spiderfoot:1811.svg)](https://microbadger.com/images/dtagdevsec/spiderfoot:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/spiderfoot:1811.svg)](https://microbadger.com/images/dtagdevsec/spiderfoot:1811 "Get your own image badge on microbadger.com") [spiderfoot](https://github.com/smicallef/spiderfoot) the open source footprinting and intelligence-gathering tool. @@ -10,4 +10,4 @@ The `docker-compose.yml` contains the necessary settings to test spiderfoot usin # Spiderfoot UI -![Spiderfoot UI](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/spiderfoot/doc/dashboard.png) +![Spiderfoot UI](doc/dashboard.png) diff --git a/docker/spiderfoot/docker-compose.yml b/docker/spiderfoot/docker-compose.yml index ba16806d9..dcfedff9b 100644 --- a/docker/spiderfoot/docker-compose.yml +++ b/docker/spiderfoot/docker-compose.yml @@ -1,6 +1,4 @@ -# T-Pot (Standard) -# For docker-compose ... -version: '2.1' +version: '2.3' networks: spiderfoot_local: @@ -9,12 +7,13 @@ services: # Spiderfoot service spiderfoot: + build: . container_name: spiderfoot restart: always networks: - spiderfoot_local ports: - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:1710" + image: "dtagdevsec/spiderfoot:1811" volumes: - /data/spiderfoot/spiderfoot.db:/home/spiderfoot/spiderfoot.db diff --git a/docker/suricata/.DS_Store b/docker/suricata/.DS_Store new file mode 100644 index 000000000..ae5e5a65e Binary files /dev/null and b/docker/suricata/.DS_Store differ diff --git a/docker/suricata/Dockerfile b/docker/suricata/Dockerfile index fa5314510..5c8746ad6 100644 --- a/docker/suricata/Dockerfile +++ b/docker/suricata/Dockerfile @@ -1,29 +1,33 @@ FROM alpine -MAINTAINER MO # Include dist ADD dist/ /root/dist/ # Install packages -RUN apk -U upgrade && \ - apk add bash ca-certificates file procps wget && \ - apk -U add --repository https://dl-cdn.alpinelinux.org/alpine/edge/community \ - suricata && \ +RUN apk -U --no-cache add \ + ca-certificates \ + curl \ + file \ + libcap \ + wget && \ + apk -U add --repository http://dl-cdn.alpinelinux.org/alpine/edge/community \ + suricata && \ # Setup user, groups and configs addgroup -g 2000 suri && \ adduser -S -H -u 2000 -D -g 2000 suri && \ - mv /root/dist/suricata.yaml /etc/suricata/suricata.yaml && \ - mv /root/dist/capture-filter.bpf /etc/suricata/capture-filter.bpf && \ + cp /root/dist/suricata.yaml /etc/suricata/suricata.yaml && \ + cp /root/dist/*.bpf /etc/suricata/ && \ # Download the latest EmergingThreats ruleset, replace rulebase and enable all rules cp /root/dist/update.sh /usr/bin/ && \ - chmod u+x /usr/bin/update.sh && \ - update.sh && \ + chmod 755 /usr/bin/update.sh && \ + update.sh OPEN && \ # Clean up rm -rf /root/* && \ rm -rf /var/cache/apk/* # Start suricata -CMD update.sh && suricata -v -F /etc/suricata/capture-filter.bpf -i $(/sbin/ip address | grep '^2: ' | awk '{ print $2 }' | tr -d [:punct:]) +STOPSIGNAL SIGINT +CMD SURICATA_CAPTURE_FILTER=$(update.sh $OINKCODE) && exec suricata -v -F $SURICATA_CAPTURE_FILTER -i $(/sbin/ip address | grep '^2: ' | awk '{ print $2 }' | tr -d [:punct:]) diff --git a/docker/suricata/README.md b/docker/suricata/README.md index 3bbd7d421..2c5bb1f21 100644 --- a/docker/suricata/README.md +++ b/docker/suricata/README.md @@ -1,4 +1,4 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/suricata:1710.svg)](https://microbadger.com/images/dtagdevsec/suricata:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/suricata:1710.svg)](https://microbadger.com/images/dtagdevsec/suricata:1710 "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/dtagdevsec/suricata:1811.svg)](https://microbadger.com/images/dtagdevsec/suricata:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/suricata:1811.svg)](https://microbadger.com/images/dtagdevsec/suricata:1811 "Get your own image badge on microbadger.com") # dockerized suricata @@ -12,4 +12,4 @@ The `docker-compose.yml` contains the necessary settings to test suricata using # Suricata Dashboard -![Suricata Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/suricata/doc/dashboard.png) +![Suricata Dashboard](doc/dashboard.png) diff --git a/docker/suricata/dist/null.bpf b/docker/suricata/dist/null.bpf new file mode 100644 index 000000000..e69de29bb diff --git a/docker/suricata/dist/update.sh b/docker/suricata/dist/update.sh old mode 100644 new mode 100755 index f1938cb16..bb4e5c4a0 --- a/docker/suricata/dist/update.sh +++ b/docker/suricata/dist/update.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/ash # Let's ensure normal operation on exit or if interrupted ... function fuCLEANUP { @@ -6,8 +6,50 @@ function fuCLEANUP { } trap fuCLEANUP EXIT -# Download the latest EmergingThreats ruleset, replace rulebase and enable all rules -cd /tmp -wget --tries=2 --timeout=2 https://rules.emergingthreats.net/open/suricata-4.0/emerging.rules.tar.gz -tar xvfz emerging.rules.tar.gz -C /etc/suricata/ -sed -i s/^#alert/alert/ /etc/suricata/rules/*.rules +### Vars +myOINKCODE="$1" + +function fuDLRULES { +### Check if args are present then download rules, if not throw error +if [ "$myOINKCODE" != "" ] && [ "$myOINKCODE" == "OPEN" ]; + then + echo "Downloading ET open ruleset." + wget -q --tries=2 --timeout=2 https://rules.emergingthreats.net/open/suricata-4.0/emerging.rules.tar.gz -O /tmp/rules.tar.gz + else + if [ "$myOINKCODE" != "" ]; + then + echo "Downloading ET pro ruleset with Oinkcode $myOINKCODE." + wget -q --tries=2 --timeout=2 https://rules.emergingthreatspro.com/$myOINKCODE/suricata-4.0/etpro.rules.tar.gz -O /tmp/rules.tar.gz + else + echo "Usage: update.sh <[OPEN, OINKCODE]>" + exit + fi +fi +} + +# Check internet availability +function fuCHECKINET () { +mySITES=$1 +error=0 +for i in $mySITES; + do + curl --connect-timeout 5 -Is $i 2>&1 > /dev/null + if [ $? -ne 0 ]; + then + let error+=1 + fi; + done; + echo $error +} + +# Check for connectivity and download rules +myCHECK=$(fuCHECKINET "rules.emergingthreatspro.com rules.emergingthreats.net") +if [ "$myCHECK" == "0" ]; + then + fuDLRULES 2>&1 > /dev/null + tar xvfz /tmp/rules.tar.gz -C /etc/suricata/ 2>&1 > /dev/null + sed -i s/^#alert/alert/ /etc/suricata/rules/*.rules 2>&1 > /dev/null + echo "/etc/suricata/capture-filter.bpf" + else + echo "/etc/suricata/null.bpf" +fi diff --git a/docker/suricata/doc/dashboard.png b/docker/suricata/doc/dashboard.png index f59bf16e8..e9e4d3ac4 100644 Binary files a/docker/suricata/doc/dashboard.png and b/docker/suricata/doc/dashboard.png differ diff --git a/docker/suricata/docker-compose.yml b/docker/suricata/docker-compose.yml index 8e7e53038..620587f81 100644 --- a/docker/suricata/docker-compose.yml +++ b/docker/suricata/docker-compose.yml @@ -1,18 +1,20 @@ -# T-Pot (Standard) -# For docker-compose ... -version: '2.1' +version: '2.3' services: # Suricata service suricata: + build: . container_name: suricata restart: always + environment: + # For ET Pro ruleset replace "OPEN" with your OINKCODE + - OINKCODE=OPEN network_mode: "host" cap_add: - NET_ADMIN - SYS_NICE - NET_RAW - image: "dtagdevsec/suricata:1710" + image: "dtagdevsec/suricata:1811" volumes: - /data/suricata/log:/var/log/suricata diff --git a/docker/tanner/.DS_Store b/docker/tanner/.DS_Store new file mode 100644 index 000000000..e5a8aa58c Binary files /dev/null and b/docker/tanner/.DS_Store differ diff --git a/docker/tanner/README.md b/docker/tanner/README.md new file mode 100644 index 000000000..49c0cb604 --- /dev/null +++ b/docker/tanner/README.md @@ -0,0 +1,15 @@ +[![](https://images.microbadger.com/badges/version/dtagdevsec/tanner:1811.svg)](https://microbadger.com/images/dtagdevsec/tanner:1811 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/tanner:1811.svg)](https://microbadger.com/images/dtagdevsec/tanner:1811 "Get your own image badge on microbadger.com") + +# Snare / Tanner + +[Tanner](https://github.com/mushorg/tanner) TANNER is a remote data analysis, and classification service, to evaluate HTTP requests and composing the response then served by SNARE events. + +This dockerized version is part of the **[T-Pot community honeypot](http://dtag-dev-sec.github.io/)** of Deutsche Telekom AG. + +The `Dockerfile` contains the blueprint for the dockerized tanner and will be used to setup the docker image. + +The `docker-compose.yml` contains the necessary settings to test tanner using `docker-compose`. This will ensure to start the docker container with the appropriate permissions and port mappings. + +# tanner Dashboard + +![tanner Dashboard](doc/dashboard.png) diff --git a/docker/tanner/doc/dashboard.png b/docker/tanner/doc/dashboard.png new file mode 100644 index 000000000..1fffb5958 Binary files /dev/null and b/docker/tanner/doc/dashboard.png differ diff --git a/docker/tanner/docker-compose.yml b/docker/tanner/docker-compose.yml new file mode 100644 index 000000000..fa750d603 --- /dev/null +++ b/docker/tanner/docker-compose.yml @@ -0,0 +1,104 @@ +version: '2.3' + +networks: + tanner_local: + +services: + +# Tanner Redis Service + tanner_redis: + container_name: tanner_redis + restart: always + stop_signal: SIGKILL + tty: true + networks: + - tanner_local + image: "dtagdevsec/redis:1811" + read_only: true + +# PHP Sandbox service + tanner_phpox: + build: ./phpox + container_name: tanner_phpox + restart: always + stop_signal: SIGKILL + tty: true + networks: + - tanner_local + image: "dtagdevsec/phpox:1811" + read_only: true + +# Tanner API Service + tanner_api: + build: ./tanner + container_name: tanner_api + restart: always + stop_signal: SIGKILL + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + command: tannerapi + depends_on: + - tanner_redis + +# Tanner WEB Service + tanner_web: + build: ./tanner + container_name: tanner_web + restart: always + stop_signal: SIGKILL + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + command: tannerweb + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + depends_on: + - tanner_redis + +# Tanner Service + tanner: + build: ./tanner + container_name: tanner + restart: always + stop_signal: SIGKILL + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + command: tanner + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + - /data/tanner/files:/opt/tanner/files + depends_on: + - tanner_api + - tanner_web + - tanner_phpox + +# Snare Service + snare: + build: ./snare + container_name: snare + restart: always + stop_signal: SIGKILL + tty: true + networks: + - tanner_local + ports: + - "80:80" + image: "dtagdevsec/snare:1811" + depends_on: + - tanner diff --git a/docker/tanner/phpox/Dockerfile b/docker/tanner/phpox/Dockerfile new file mode 100644 index 000000000..5da405ffb --- /dev/null +++ b/docker/tanner/phpox/Dockerfile @@ -0,0 +1,51 @@ +FROM alpine + +# Include dist +ADD dist/ /root/dist/ + +# Install packages +RUN apk -U --no-cache add \ + build-base \ + file \ + git \ + make \ + php7 \ + php7-dev \ + python3 \ + python3-dev \ + re2c && \ + pip3 install --no-cache-dir --upgrade pip && \ + +# Install bfr sandbox from git + git clone --depth=1 https://github.com/mushorg/BFR /opt/BFR && \ + cd /opt/BFR && \ + phpize7 && \ + ./configure \ + --with-php-config=/usr/bin/php-config7 \ + --enable-bfr && \ + make && \ + make install && \ + cd / && \ + rm -rf /opt/BFR /tmp/* /var/tmp/* && \ + echo "zend_extension = "$(find /usr -name bfr.so) >> /etc/php7/php.ini && \ + +# Install PHP Sandbox + git clone --depth=1 https://github.com/mushorg/phpox /opt/phpox && \ + cd /opt/phpox && \ + cp /root/dist/sandbox.py . && \ + pip3 install -r requirements.txt && \ + make && \ + +# Clean up + apk del --purge build-base \ + git \ + php7-dev \ + python3-dev && \ + rm -rf /root/* && \ + rm -rf /var/cache/apk/* + +# Set workdir and start phpsandbox +STOPSIGNAL SIGKILL +USER nobody:nobody +WORKDIR /opt/phpox +CMD ["python3.6", "sandbox.py"] diff --git a/docker/tanner/phpox/dist/sandbox.py b/docker/tanner/phpox/dist/sandbox.py new file mode 100644 index 000000000..8b5d363e8 --- /dev/null +++ b/docker/tanner/phpox/dist/sandbox.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2016 Lukas Rist +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +import os +import tempfile +import json +import asyncio +import hashlib +import argparse + +from aiohttp import web +from asyncio.subprocess import PIPE + +from pprint import pprint + +class PHPSandbox(object): + @classmethod + def php_tag_check(cls, script): + with open(script, "r+") as check_file: + file_content = check_file.read() + if "" not in file_content: + file_content += "?>" + check_file.write(file_content) + return script + + @asyncio.coroutine + def read_process(self): + while True: + line = yield from self.proc.stdout.readline() + if not line: + break + else: + self.stdout_value += line + b'\n' + + @asyncio.coroutine + def sandbox(self, script, phpbin="php7.0"): + if not os.path.isfile(script): + raise Exception("Sample not found: {0}".format(script)) + + try: + cmd = [phpbin, "sandbox.php", script] + self.proc = yield from asyncio.create_subprocess_exec(*cmd, stdout=PIPE) + self.stdout_value = b'' + yield from asyncio.wait_for(self.read_process(), timeout=3) + except Exception as e: + try: + self.proc.kill() + except Exception: + pass + print("Error executing the sandbox: {}".format(e)) + # raise e + return {'stdout': self.stdout_value.decode('utf-8')} + + +class EchoServer(asyncio.Protocol): + def connection_made(self, transport): + # peername = transport.get_extra_info('peername') + # print('connection from {}'.format(peername)) + self.transport = transport + + def data_received(self, data): + # print('data received: {}'.format(data.decode())) + self.transport.write(data) + + +@asyncio.coroutine +def api(request): + data = yield from request.read() + file_md5 = hashlib.md5(data).hexdigest() + with tempfile.NamedTemporaryFile(suffix='.php') as f: + f.write(data) + f.seek(0) + sb = PHPSandbox() + try: + server = yield from loop.create_server(EchoServer, '127.0.0.1', 1234) + ret = yield from asyncio.wait_for(sb.sandbox(f.name, phpbin), timeout=10) + server.close() + except KeyboardInterrupt: + pass + ret['file_md5'] = file_md5 + return web.Response(body=json.dumps(ret, sort_keys=True, indent=4).encode('utf-8')) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument("--phpbin", help="PHP binary, ex: php7.0", default="php7.0") + args = parser.parse_args() + phpbin = args.phpbin + + app = web.Application() + app.router.add_route('POST', '/', api) + + loop = asyncio.get_event_loop() + handler = app.make_handler() + f = loop.create_server(handler, '0.0.0.0', 8088) + srv = loop.run_until_complete(f) + print('serving on', srv.sockets[0].getsockname()) + try: + loop.run_forever() + except KeyboardInterrupt: + pass + finally: + loop.run_until_complete(handler.finish_connections(1.0)) + srv.close() + loop.run_until_complete(srv.wait_closed()) + loop.run_until_complete(app.finish()) + loop.close() diff --git a/docker/tanner/redis/Dockerfile b/docker/tanner/redis/Dockerfile new file mode 100644 index 000000000..6eff2dff6 --- /dev/null +++ b/docker/tanner/redis/Dockerfile @@ -0,0 +1,19 @@ +FROM redis:alpine + +# Include dist +ADD dist/ /root/dist/ + +# Setup apt +RUN apk -U --no-cache add redis && \ + + cp /root/dist/redis.conf /etc && \ + +# Clean up + rm -rf /root/* && \ + rm -rf /tmp/* /var/tmp/* && \ + rm -rf /var/cache/apk/* + +# Start conpot +STOPSIGNAL SIGKILL +USER nobody:nobody +CMD redis-server /etc/redis.conf diff --git a/docker/tanner/redis/dist/redis.conf b/docker/tanner/redis/dist/redis.conf new file mode 100644 index 000000000..edfe45da6 --- /dev/null +++ b/docker/tanner/redis/dist/redis.conf @@ -0,0 +1,2 @@ +bind 0.0.0.0 +protected-mode no diff --git a/docker/tanner/snare/Dockerfile b/docker/tanner/snare/Dockerfile new file mode 100644 index 000000000..b1a579a11 --- /dev/null +++ b/docker/tanner/snare/Dockerfile @@ -0,0 +1,36 @@ +FROM alpine + +# Include dist +ADD dist/ /root/dist/ + +# Setup apt +RUN apk -U --no-cache add \ + build-base \ + git \ + linux-headers \ + python3 \ + python3-dev && \ + +# Setup Snare + git clone --depth=1 https://github.com/mushorg/snare /opt/snare && \ + cd /opt/snare/ && \ + pip3 install --no-cache-dir --upgrade pip setuptools && \ + pip3 install --no-cache-dir -r requirements.txt && \ + python3.6 setup.py install && \ + cd / && \ + rm -rf /opt/snare && \ + clone --target http://example.com && \ + mv /root/dist/pages/* /opt/snare/pages/ && \ + +# Clean up + apk del --purge \ + build-base \ + linux-headers \ + python3-dev && \ + rm -rf /root/* && \ + rm -rf /tmp/* /var/tmp/* && \ + rm -rf /var/cache/apk/* + +# Start snare +STOPSIGNAL SIGKILL +CMD snare --tanner tanner --debug true --no-dorks true --auto-update false --host-ip 0.0.0.0 --port 80 --page-dir $(shuf -i 1-10 -n 1) diff --git a/docker/tanner/snare/dist/pages/1/00cad2882b6f6ddfbb13644b48a49cd1 b/docker/tanner/snare/dist/pages/1/00cad2882b6f6ddfbb13644b48a49cd1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/00cad2882b6f6ddfbb13644b48a49cd1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/00d592432e2993bcbfc1ead475b80d9d b/docker/tanner/snare/dist/pages/1/00d592432e2993bcbfc1ead475b80d9d new file mode 100644 index 000000000..c7eb1a9e3 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/00d592432e2993bcbfc1ead475b80d9d @@ -0,0 +1,18 @@ +.atwho-view{position:absolute;top:0;left:0;display:none;margin-top:18px;background:white;color:black;border:1px solid #DDD;border-radius:3px;box-shadow:0 0 5px rgba(0,0,0,0.1);min-width:120px;max-height:200px;overflow:auto;z-index:11110 !important}.atwho-view .cur{background:#3366FF;color:white}.atwho-view .cur small{color:white}.atwho-view strong{color:#3366FF}.atwho-view .cur strong{color:white;font:bold}.atwho-view ul{list-style:none;padding:0;margin:auto}.atwho-view ul li{display:block;padding:5px 10px;border-bottom:1px solid #DDD;cursor:pointer}.atwho-view small{font-size:smaller;color:#777;font-weight:normal}.select2-container{margin:0;position:relative;display:inline-block;zoom:1;*display:inline;vertical-align:middle}.select2-container,.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;border-radius:4px;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));background-image:-webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);background-image:-moz-linear-gradient(center bottom, #eee 0%, #fff 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);background-image:linear-gradient(to top, #eee 0%, #fff 50%)}html[dir="rtl"] .select2-container .select2-choice{padding:0 8px 0 0}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#aaa;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));background-image:-webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);background-image:-moz-linear-gradient(center bottom, #eee 0%, #fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to bottom, #eee 0%, #fff 90%)}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;float:none;width:auto}html[dir="rtl"] .select2-container .select2-choice>.select2-chosen{margin-left:26px;margin-right:0}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) right top no-repeat;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{background-position:right -11px;cursor:pointer}.select2-drop-mask{border:0;margin:0;padding:0;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:9998;background-color:#fff;filter:alpha(opacity=0)}.select2-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-top:0;border-radius:0 0 4px 4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,0.15);box-shadow:0 4px 5px rgba(0,0,0,0.15)}.select2-drop.select2-drop-above{margin-top:1px;border-top:1px solid #aaa;border-bottom:0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,0.15);box-shadow:0 -4px 5px rgba(0,0,0,0.15)}.select2-drop-active{border:1px solid #5897fb;border-top:none}.select2-drop.select2-drop-above.select2-drop-active{border-top:1px solid #5897fb}.select2-drop-auto-width{border-top:1px solid #aaa;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-container .select2-choice .select2-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;border-radius:0 4px 4px 0;background-clip:padding-box;background:#ccc;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));background-image:-webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);background-image:-moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);background-image:linear-gradient(to top, #ccc 0%, #eee 60%)}html[dir="rtl"] .select2-container .select2-choice .select2-arrow{left:0;right:auto;border-left:none;border-right:1px solid #aaa;border-radius:4px 0 0 4px}.select2-container .select2-choice .select2-arrow b{display:block;width:100%;height:100%;background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat 0 1px}html[dir="rtl"] .select2-container .select2-choice .select2-arrow b{background-position:2px 1px}.select2-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto !important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:#fff url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat 100% -22px;background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat 100% -22px,-webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat 100% -22px,-webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat 100% -22px,-moz-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat 100% -22px,linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0}html[dir="rtl"] .select2-search input{padding:4px 5px 4px 20px;background:#fff url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat -37px -22px;background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat -37px -22px,-webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat -37px -22px,-webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat -37px -22px,-moz-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) no-repeat -37px -22px,linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:#fff url(./select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif) no-repeat 100%;background:url(./select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif) no-repeat 100%,-webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));background:url(./select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif) no-repeat 100%,-webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url(./select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif) no-repeat 100%,-moz-linear-gradient(center bottom, #fff 85%, #eee 99%);background:url(./select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif) no-repeat 100%,linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #5897fb;outline:none;-webkit-box-shadow:0 0 5px rgba(0,0,0,0.3);box-shadow:0 0 5px rgba(0,0,0,0.3)}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));background-image:-webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);background-image:-moz-linear-gradient(center bottom, #fff 0%, #eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to top, #fff 0%, #eee 50%)}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #5897fb;border-top-color:transparent;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));background-image:-webkit-linear-gradient(center top, #fff 0%, #eee 50%);background-image:-moz-linear-gradient(center top, #fff 0%, #eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%)}.select2-dropdown-open .select2-choice .select2-arrow{background:transparent;border-left:none;filter:none}html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow{border-right:none}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b{background-position:-16px 1px}.select2-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:transparent}html[dir="rtl"] .select2-results{padding:0 4px 0 0;margin:4px 0 4px 4px}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:bold}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-results-dept-1 .select2-result-label{padding-left:20px}.select2-results-dept-2 .select2-result-label{padding-left:40px}.select2-results-dept-3 .select2-result-label{padding-left:60px}.select2-results-dept-4 .select2-result-label{padding-left:80px}.select2-results-dept-5 .select2-result-label{padding-left:100px}.select2-results-dept-6 .select2-result-label{padding-left:110px}.select2-results-dept-7 .select2-result-label{padding-left:120px}.select2-results .select2-highlighted{background:#3875d7;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:transparent}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-ajax-error,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item;padding-left:5px}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results.select2-active{background:#f4f4f4 url(./select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif) no-repeat 100%}.select2-results .select2-ajax-error{background:rgba(255,50,50,0.2)}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:auto !important;height:1%;margin:0;padding:0 5px 0 0;position:relative;border:1px solid #aaa;cursor:text;overflow:hidden;background-color:#fff;background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));background-image:-webkit-linear-gradient(top, #eee 1%, #fff 15%);background-image:-moz-linear-gradient(top, #eee 1%, #fff 15%);background-image:linear-gradient(to bottom, #eee 1%, #fff 15%)}html[dir="rtl"] .select2-container-multi .select2-choices{padding:0 0 0 5px}.select2-locked{padding:3px 5px 3px 5px !important}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #5897fb;outline:none;-webkit-box-shadow:0 0 5px rgba(0,0,0,0.3);box-shadow:0 0 5px rgba(0,0,0,0.3)}.select2-container-multi .select2-choices li{float:left;list-style:none}html[dir="rtl"] .select2-container-multi .select2-choices li{float:right}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;box-shadow:none;background:transparent !important}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:#fff url(./select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif) no-repeat 100% !important}.select2-default{color:#999 !important}.select2-container-multi .select2-choices .select2-search-choice{padding:3px 5px 3px 18px;margin:3px 0 3px 5px;position:relative;line-height:13px;color:#333;cursor:default;border:1px solid #aaaaaa;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05);background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e4e4e4;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));background-image:-webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);background-image:-moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);background-image:linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%)}html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice{margin:3px 5px 3px 0;padding:3px 18px 3px 5px}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#d4d4d4}.select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:none;background:url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png) right top no-repeat}html[dir="rtl"] .select2-search-choice-close{right:auto;left:3px}.select2-container-multi .select2-search-choice-close{left:3px}html[dir="rtl"] .select2-container-multi .select2-search-choice-close{left:auto;right:2px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover{background-position:right -11px}.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px 3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:none}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0) !important;width:1px !important;height:1px !important;border:0 !important;margin:0 !important;padding:0 !important;overflow:hidden !important;position:absolute !important;outline:0 !important;left:0px !important;top:0px !important}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx){.select2-search input,.select2-search-choice-close,.select2-container .select2-choice abbr,.select2-container .select2-choice .select2-arrow b{background-image:url(./select2x2-6fe28d687dc0ed4d96016238c608ba1e7198c9c9accfa0b360b78018b9fb9bc2.png) !important;background-repeat:no-repeat !important;background-size:60px 40px !important}.select2-search input{background-position:100% -21px !important}}/*! + * Pikaday + * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ + */.pika-single{z-index:9999;display:block;position:relative;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,0.5)}.pika-single{*zoom:1}.pika-single:before,.pika-single:after{content:" ";display:table}.pika-single:after{clear:both}.pika-lendar{float:left;width:240px;margin:8px}.pika-title{position:relative;text-align:center}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-label{display:inline-block;*display:inline;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:bold;color:#333;background-color:#fff}.pika-prev,.pika-next{display:block;cursor:pointer;position:relative;outline:none;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5;*position:absolute;*top:0}.pika-prev:hover,.pika-next:hover{opacity:1}.pika-prev.is-disabled,.pika-next.is-disabled{cursor:default;opacity:.2}.pika-prev,.is-rtl .pika-next{float:left;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==");*left:0}.pika-next,.is-rtl .pika-prev{float:right;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=");*right:0}.pika-select{display:inline-block;*display:inline}.pika-table{width:100%;border-collapse:collapse;border-spacing:0;border:0}.pika-table th,.pika-table td{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:bold;text-align:center}.pika-table abbr{border-bottom:none;cursor:help}.pika-button{cursor:pointer;display:block;-moz-box-sizing:border-box;box-sizing:border-box;outline:none;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.is-today .pika-button{color:#33aaff;font-weight:bold}.is-selected .pika-button{color:#fff;font-weight:bold;background:#33aaff;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button,.is-outside-current-month .pika-button{color:#999;opacity:.3}.is-disabled .pika-button{pointer-events:none;cursor:default}.pika-button:hover{color:#fff;background:#ff8000;box-shadow:none;border-radius:3px}.pika-button .is-selection-disabled{pointer-events:none;cursor:default}.pika-week{font-size:11px;color:#999}.is-inrange .pika-button{background:#D5E9F7}.is-startrange .pika-button{color:#fff;background:#6CB31D;box-shadow:none;border-radius:3px}.is-endrange .pika-button{color:#fff;background:#33aaff;box-shadow:none;border-radius:3px}:root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #007bff;--secondary: #fafafa;--success: #1aaa55;--info: #1f78d1;--warning: #fc9403;--danger: #db3b21;--light: #f8f9fa;--dark: #343a40;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover,.participants-more .btn-link:hover,.user-list-more .btn-link:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,.participants-more .btn-link:not([href]):not([tabindex]):hover,.user-list-more .btn-link:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:0.75rem;padding-bottom:0.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:0.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:0.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:0.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:0.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:0.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:0.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:0.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:90%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:0.2rem 0.4rem;font-size:90%;color:#fff;background-color:#212529;border-radius:0.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:90%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container{max-width:540px}}@media (min-width: 768px){.container{max-width:720px}}@media (min-width: 992px){.container{max-width:960px}}@media (min-width: 1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.form-control-label,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.note-image-attach,.col-lg-5,.col-lg-6,.git_error_tips,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:none}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:none}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width: 768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:none}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2,.form-control-label{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:none}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4,.note-image-attach{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6,.git_error_tips{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:none}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table,.file-holder table,.wiki table,.md table,ul.notes>li .note-body .note-text table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table th,.file-holder table th,.wiki table th,.md table th,ul.notes>li .note-body .note-text table th,.table td,.file-holder table td,.wiki table td,.md table td,ul.notes>li .note-body .note-text table td{padding:0.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th,.file-holder table thead th,.wiki table thead th,.md table thead th,ul.notes>li .note-body .note-text table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody,.file-holder table tbody+tbody,.wiki table tbody+tbody,.md table tbody+tbody,ul.notes>li .note-body .note-text table tbody+tbody{border-top:2px solid #dee2e6}.table .table,.file-holder table .table,.wiki table .table,.md table .table,ul.notes>li .note-body .note-text table .table,.table .file-holder table,.file-holder .table table,.file-holder table table,.table .wiki table,.wiki .table table,.wiki table table,.table .md table,.md .table table,.md table table,.table ul.notes>li .note-body .note-text table,ul.notes>li .note-body .note-text .table table,.file-holder table ul.notes>li .note-body .note-text table,.wiki table ul.notes>li .note-body .note-text table,.md table ul.notes>li .note-body .note-text table,ul.notes>li .note-body .note-text table table{background-color:#fff}.table-sm th,.table-sm td{padding:0.3rem}.table-bordered,.wiki table,.md table,ul.notes>li .note-body .note-text table{border:1px solid #dee2e6}.table-bordered th,.wiki table th,.md table th,ul.notes>li .note-body .note-text table th,.table-bordered td,.wiki table td,.md table td,ul.notes>li .note-body .note-text table td{border:1px solid #dee2e6}.table-bordered thead th,.wiki table thead th,.md table thead th,ul.notes>li .note-body .note-text table thead th,.table-bordered thead td,.wiki table thead td,.md table thead td,ul.notes>li .note-body .note-text table thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:#fafafa}.table-hover tbody tr:hover{background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#fefefe}.table-hover .table-secondary:hover{background-color:#f1f1f1}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#f1f1f1}.table-success,.table-success>th,.table-success>td{background-color:#bfe7cf}.table-hover .table-success:hover{background-color:#ace0c1}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#ace0c1}.table-info,.table-info>th,.table-info>td{background-color:#c0d9f2}.table-hover .table-info:hover{background-color:#abccee}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abccee}.table-warning,.table-warning>th,.table-warning>td{background-color:#fee1b8}.table-hover .table-warning:hover{background-color:#fed69f}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fed69f}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5c8c1}.table-hover .table-danger:hover{background-color:#f1b5ab}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b5ab}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th,.file-holder table .thead-dark th,.wiki table .thead-dark th,.md table .thead-dark th,ul.notes>li .note-body .note-text table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th,.file-holder table .thead-light th,.wiki table .thead-light th,.md table .thead-light th,ul.notes>li .note-body .note-text table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark th,.table-dark td,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered,.wiki table.table-dark,.md table.table-dark,ul.notes>li .note-body .note-text table.table-dark{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered,.wiki .table-responsive-sm>table,.md .table-responsive-sm>table,ul.notes>li .note-body .note-text .table-responsive-sm>table{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered,.wiki .table-responsive-md>table,.md .table-responsive-md>table,ul.notes>li .note-body .note-text .table-responsive-md>table{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered,.wiki .table-responsive-lg>table,.md .table-responsive-lg>table,ul.notes>li .note-body .note-text .table-responsive-lg>table{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered,.wiki .table-responsive-xl>table,.md .table-responsive-xl>table,ul.notes>li .note-body .note-text .table-responsive-xl>table{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered,.wiki .table-responsive>table,.md .table-responsive>table,ul.notes>li .note-body .note-text .table-responsive>table{border:0}.form-control,.search form{display:block;width:100%;padding:0.375rem 0.75rem;font-size:1rem;line-height:20px;color:#2e2e2e;background-color:#fff;background-clip:padding-box;border:1px solid #dfdfdf;border-radius:0.25rem;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.form-control,.search form{transition:none}}.form-control::-ms-expand,.search form::-ms-expand{background-color:transparent;border:0}.form-control:focus,.common-note-form .md-area.is-focused,.search form:focus,.search.search-active form{color:#2e2e2e;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}.form-control::placeholder,.search form::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.search form:disabled,.form-control[readonly],.search form[readonly]{background-color:#fafafa;opacity:1}select.form-control:not([size]):not([multiple]){height:34px}select.form-control:focus::-ms-value,.common-note-form select.md-area.is-focused::-ms-value{color:#2e2e2e;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:20px}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:0.375rem;padding-bottom:0.375rem;margin-bottom:0;line-height:20px;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.input-group-sm>.form-control-plaintext.form-control,.search .input-group-sm>form.form-control-plaintext,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.form-control-plaintext.form-control-lg,.input-group-lg>.form-control-plaintext.form-control,.search .input-group-lg>form.form-control-plaintext,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.search .input-group-sm>form,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:0.25rem 0.5rem;font-size:0.875rem;line-height:1.5;border-radius:0.2rem}select.form-control-sm:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.search .input-group-lg>form,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:0.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:0.3rem}select.form-control-lg:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:0.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:0.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:0.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:0.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#1aaa55}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(26,170,85,0.8);border-radius:.2rem}.was-validated .form-control:valid,.was-validated .search form:valid,.search .was-validated form:valid,.form-control.is-valid,.search form.is-valid,.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#1aaa55}.was-validated .form-control:valid:focus,.was-validated .common-note-form .md-area.is-focused:valid,.common-note-form .was-validated .md-area.is-focused:valid,.was-validated .search form:valid:focus,.search .was-validated form:valid:focus,.was-validated .search.search-active form:valid,.search.search-active .was-validated form:valid,.form-control.is-valid:focus,.common-note-form .is-valid.md-area.is-focused,.search form.is-valid:focus,.search.search-active form.is-valid,.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#1aaa55;box-shadow:0 0 0 0.2rem rgba(26,170,85,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .search form:valid ~ .valid-feedback,.search .was-validated form:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.was-validated .search form:valid ~ .valid-tooltip,.search .was-validated form:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.search form.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip,.search form.is-valid ~ .valid-tooltip,.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control-file:valid ~ .valid-feedback,.was-validated .form-control-file:valid ~ .valid-tooltip,.form-control-file.is-valid ~ .valid-feedback,.form-control-file.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#1aaa55}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#1aaa55}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{background-color:#5de695}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{background-color:#21d66b}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(26,170,85,0.25)}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#1aaa55}.was-validated .custom-file-input:valid ~ .custom-file-label::before,.custom-file-input.is-valid ~ .custom-file-label::before{border-color:inherit}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{box-shadow:0 0 0 0.2rem rgba(26,170,85,0.25)}.invalid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#db3b21}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(219,59,33,0.8);border-radius:.2rem}.was-validated .form-control:invalid,.was-validated .search form:invalid,.search .was-validated form:invalid,.form-control.is-invalid,.search form.is-invalid,.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#db3b21}.was-validated .form-control:invalid:focus,.was-validated .common-note-form .md-area.is-focused:invalid,.common-note-form .was-validated .md-area.is-focused:invalid,.was-validated .search form:invalid:focus,.search .was-validated form:invalid:focus,.was-validated .search.search-active form:invalid,.search.search-active .was-validated form:invalid,.form-control.is-invalid:focus,.common-note-form .is-invalid.md-area.is-focused,.search form.is-invalid:focus,.search.search-active form.is-invalid,.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#db3b21;box-shadow:0 0 0 0.2rem rgba(219,59,33,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .search form:invalid ~ .invalid-feedback,.search .was-validated form:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.was-validated .search form:invalid ~ .invalid-tooltip,.search .was-validated form:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.search form.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip,.search form.is-invalid ~ .invalid-tooltip,.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control-file:invalid ~ .invalid-feedback,.was-validated .form-control-file:invalid ~ .invalid-tooltip,.form-control-file.is-invalid ~ .invalid-feedback,.form-control-file.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#db3b21}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#db3b21}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{background-color:#ee9b8e}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{background-color:#e4604b}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(219,59,33,0.25)}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#db3b21}.was-validated .custom-file-input:invalid ~ .custom-file-label::before,.custom-file-input.is-invalid ~ .custom-file-label::before{border-color:inherit}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{box-shadow:0 0 0 0.2rem rgba(219,59,33,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control,.form-inline .search form,.search .form-inline form{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:0.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;user-select:none;border:1px solid transparent;padding:0.375rem 0.75rem;font-size:1rem;line-height:20px;border-radius:0.25rem;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover,.btn:focus{text-decoration:none}.btn:focus,.btn.focus{outline:0;box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}.btn.disabled,.btn:disabled{opacity:0.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled):active,.btn:not(:disabled):not(.disabled).active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary:focus,.btn-primary.focus{box-shadow:0 0 0 0.2rem rgba(0,123,255,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle,.show>.btn-primary.dropdown-menu-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus,.show>.btn-primary.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(0,123,255,0.5)}.btn-secondary{color:#212529;background-color:#fafafa;border-color:#fafafa}.btn-secondary:hover{color:#212529;background-color:#e7e7e7;border-color:#e1e1e1}.btn-secondary:focus,.btn-secondary.focus{box-shadow:0 0 0 0.2rem rgba(250,250,250,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#fafafa;border-color:#fafafa}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle,.show>.btn-secondary.dropdown-menu-toggle{color:#212529;background-color:#e1e1e1;border-color:#dadada}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus,.show>.btn-secondary.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(250,250,250,0.5)}.btn-success{color:#fff;background-color:#1aaa55;border-color:#1aaa55}.btn-success:hover{color:#fff;background-color:#158944;border-color:#137e3f}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 0.2rem rgba(26,170,85,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#1aaa55;border-color:#1aaa55}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle,.show>.btn-success.dropdown-menu-toggle{color:#fff;background-color:#137e3f;border-color:#127339}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus,.show>.btn-success.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(26,170,85,0.5)}.btn-info{color:#fff;background-color:#1f78d1;border-color:#1f78d1}.btn-info:hover{color:#fff;background-color:#1a65b0;border-color:#185fa5}.btn-info:focus,.btn-info.focus{box-shadow:0 0 0 0.2rem rgba(31,120,209,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#1f78d1;border-color:#1f78d1}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle,.show>.btn-info.dropdown-menu-toggle{color:#fff;background-color:#185fa5;border-color:#175899}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus,.show>.btn-info.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(31,120,209,0.5)}.btn-warning{color:#212529;background-color:#fc9403;border-color:#fc9403}.btn-warning:hover{color:#fff;background-color:#d67e03;border-color:#ca7602}.btn-warning:focus,.btn-warning.focus{box-shadow:0 0 0 0.2rem rgba(252,148,3,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#fc9403;border-color:#fc9403}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle,.show>.btn-warning.dropdown-menu-toggle{color:#fff;background-color:#ca7602;border-color:#bd6f02}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus,.show>.btn-warning.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(252,148,3,0.5)}.btn-danger{color:#fff;background-color:#db3b21;border-color:#db3b21}.btn-danger:hover{color:#fff;background-color:#ba321c;border-color:#af2f1a}.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 0.2rem rgba(219,59,33,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#db3b21;border-color:#db3b21}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle,.show>.btn-danger.dropdown-menu-toggle{color:#fff;background-color:#af2f1a;border-color:#a42c19}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus,.show>.btn-danger.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(219,59,33,0.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{box-shadow:0 0 0 0.2rem rgba(248,249,250,0.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle,.show>.btn-light.dropdown-menu-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus,.show>.btn-light.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(248,249,250,0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 0.2rem rgba(52,58,64,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle,.show>.btn-dark.dropdown-menu-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus,.show>.btn-dark.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(52,58,64,0.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 0.2rem rgba(0,123,255,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle,.show>.btn-outline-primary.dropdown-menu-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus,.show>.btn-outline-primary.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(0,123,255,0.5)}.btn-outline-secondary{color:#fafafa;background-color:transparent;background-image:none;border-color:#fafafa}.btn-outline-secondary:hover{color:#212529;background-color:#fafafa;border-color:#fafafa}.btn-outline-secondary:focus,.btn-outline-secondary.focus{box-shadow:0 0 0 0.2rem rgba(250,250,250,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#fafafa;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle,.show>.btn-outline-secondary.dropdown-menu-toggle{color:#212529;background-color:#fafafa;border-color:#fafafa}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus,.show>.btn-outline-secondary.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(250,250,250,0.5)}.btn-outline-success{color:#1aaa55;background-color:transparent;background-image:none;border-color:#1aaa55}.btn-outline-success:hover{color:#fff;background-color:#1aaa55;border-color:#1aaa55}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 0.2rem rgba(26,170,85,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#1aaa55;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle,.show>.btn-outline-success.dropdown-menu-toggle{color:#fff;background-color:#1aaa55;border-color:#1aaa55}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus,.show>.btn-outline-success.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(26,170,85,0.5)}.btn-outline-info{color:#1f78d1;background-color:transparent;background-image:none;border-color:#1f78d1}.btn-outline-info:hover{color:#fff;background-color:#1f78d1;border-color:#1f78d1}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 0.2rem rgba(31,120,209,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#1f78d1;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle,.show>.btn-outline-info.dropdown-menu-toggle{color:#fff;background-color:#1f78d1;border-color:#1f78d1}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus,.show>.btn-outline-info.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(31,120,209,0.5)}.btn-outline-warning{color:#fc9403;background-color:transparent;background-image:none;border-color:#fc9403}.btn-outline-warning:hover{color:#212529;background-color:#fc9403;border-color:#fc9403}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 0.2rem rgba(252,148,3,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#fc9403;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle,.show>.btn-outline-warning.dropdown-menu-toggle{color:#212529;background-color:#fc9403;border-color:#fc9403}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus,.show>.btn-outline-warning.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(252,148,3,0.5)}.btn-outline-danger{color:#db3b21;background-color:transparent;background-image:none;border-color:#db3b21}.btn-outline-danger:hover{color:#fff;background-color:#db3b21;border-color:#db3b21}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 0.2rem rgba(219,59,33,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#db3b21;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle,.show>.btn-outline-danger.dropdown-menu-toggle{color:#fff;background-color:#db3b21;border-color:#db3b21}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus,.show>.btn-outline-danger.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(219,59,33,0.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 0.2rem rgba(248,249,250,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle,.show>.btn-outline-light.dropdown-menu-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus,.show>.btn-outline-light.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(248,249,250,0.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 0.2rem rgba(52,58,64,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle,.show>.btn-outline-dark.dropdown-menu-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus,.show>.btn-outline-dark.dropdown-menu-toggle:focus{box-shadow:0 0 0 0.2rem rgba(52,58,64,0.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link:focus,.btn-link.focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#6c757d;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:0.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:0.3rem}.btn-sm,.btn-group-sm>.btn{padding:0.25rem 0.5rem;font-size:0.875rem;line-height:1.5;border-radius:0.2rem}.btn-block,.login-page input[type="submit"]{display:block;width:100%}.btn-block+.btn-block,.login-page input[type="submit"]+.btn-block,.login-page .btn-block+input[type="submit"],.login-page input[type="submit"]+input[type="submit"]{margin-top:0.5rem}input[type="submit"].btn-block,.login-page input[type="submit"],input[type="reset"].btn-block,.login-page input[type="reset"][type="submit"],input[type="button"].btn-block,.login-page input[type="button"][type="submit"]{width:100%}.fade{transition:opacity 0.15s linear}@media screen and (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}@media screen and (prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle::after,.dropdown-menu-toggle::after{display:inline-block;width:0;height:0;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid;border-right:0.3em solid transparent;border-bottom:0;border-left:0.3em solid transparent}.dropdown-toggle:empty::after,.dropdown-menu-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:0.5rem 0;margin:0.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #e5e5e5;border-radius:0.25rem}.dropdown-menu-right,.notification-list-item .dropdown-menu,.project-repo-buttons .notification-dropdown .dropdown-menu,.group-buttons .notification-dropdown .dropdown-menu{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:0.125rem}.dropup .dropdown-toggle::after,.dropup .dropdown-menu-toggle::after{display:inline-block;width:0;height:0;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0;border-right:0.3em solid transparent;border-bottom:0.3em solid;border-left:0.3em solid transparent}.dropup .dropdown-toggle:empty::after,.dropup .dropdown-menu-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:0.125rem}.dropright .dropdown-toggle::after,.dropright .dropdown-menu-toggle::after{display:inline-block;width:0;height:0;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0;border-bottom:0.3em solid transparent;border-left:0.3em solid}.dropright .dropdown-toggle:empty::after,.dropright .dropdown-menu-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after,.dropright .dropdown-menu-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:0.125rem}.dropleft .dropdown-toggle::after,.dropleft .dropdown-menu-toggle::after{display:inline-block;width:0;height:0;margin-left:0.255em;vertical-align:0.255em;content:""}.dropleft .dropdown-toggle::after,.dropleft .dropdown-menu-toggle::after{display:none}.dropleft .dropdown-toggle::before,.dropleft .dropdown-menu-toggle::before{display:inline-block;width:0;height:0;margin-right:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0.3em solid;border-bottom:0.3em solid transparent}.dropleft .dropdown-toggle:empty::after,.dropleft .dropdown-menu-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before,.dropleft .dropdown-menu-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider,.divider{height:0;margin:0.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:0.25rem 1.5rem;clear:both;font-weight:400;color:#555;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:#f6fafe}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:0.5rem 1.5rem;margin-bottom:0;font-size:0.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:0.25rem 1.5rem;color:#555}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:0 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:0.5625rem;padding-left:0.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:0.375rem;padding-left:0.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:0.75rem;padding-left:0.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.search .input-group>form,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control:focus,.common-note-form .input-group>.md-area.is-focused,.search .input-group>form:focus,.search.search-active .input-group>form,.input-group>.custom-select:focus,.input-group>.custom-file:focus{z-index:3}.input-group>.form-control+.form-control,.search .input-group>form+.form-control,.search .input-group>.form-control+form,.search .input-group>form+form,.input-group>.form-control+.custom-select,.search .input-group>form+.custom-select,.input-group>.form-control+.custom-file,.search .input-group>form+.custom-file,.input-group>.custom-select+.form-control,.search .input-group>.custom-select+form,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.search .input-group>.custom-file+form,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:not(:last-child),.search .input-group>form:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.search .input-group>form:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:0.375rem 0.75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:20px;color:#2e2e2e;text-align:center;white-space:nowrap;background-color:#f7f8fa;border:1px solid #dfdfdf;border-radius:0.25rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(0,123,255,0.25)}.custom-control-input:active ~ .custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:0.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:0.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:0.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-select{display:inline-block;width:100%;height:34px;padding:0.375rem 1.75rem 0.375rem 0.75rem;line-height:1.5;color:#2e2e2e;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center;background-size:8px 10px;border:1px solid #dfdfdf;border-radius:0.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(128,189,255,0.5)}.custom-select:focus::-ms-value{color:#2e2e2e;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:0.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:0.375rem;padding-bottom:0.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:0.375rem;padding-bottom:0.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:34px;margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:34px;margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#80bdff;box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}.custom-file-input:focus ~ .custom-file-label::after{border-color:#80bdff}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:34px;padding:0.375rem 0.75rem;line-height:1.5;color:#2e2e2e;background-color:#fff;border:1px solid #dfdfdf;border-radius:0.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:0.375rem 0.75rem;line-height:1.5;color:#2e2e2e;content:"Browse";background-color:#f7f8fa;border-left:1px solid #dfdfdf;border-radius:0 0.25rem 0.25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;appearance:none}.custom-range:focus{outline:none}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#007bff;border:0;border-radius:1rem;appearance:none}.custom-range::-webkit-slider-thumb:focus{outline:none;box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(0,123,255,0.25)}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;appearance:none}.custom-range::-moz-range-thumb:focus{outline:none;box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(0,123,255,0.25)}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;appearance:none}.custom-range::-ms-thumb:focus{outline:none;box-shadow:0 0 0 1px #fff,0 0 0 0.2rem rgba(0,123,255,0.25)}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:0.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:0.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:0.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:0.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0.3125rem;padding-bottom:0.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:0.5rem;padding-bottom:0.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:0.25rem 0.75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text .participants-more .btn-link:hover,.participants-more .navbar-light .navbar-text .btn-link:hover,.navbar-light .navbar-text .user-list-more .btn-link:hover,.user-list-more .navbar-light .navbar-text .btn-link:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.5);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text .participants-more .btn-link:hover,.participants-more .navbar-dark .navbar-text .btn-link:hover,.navbar-dark .navbar-text .user-list-more .btn-link:hover,.user-list-more .navbar-dark .navbar-text .btn-link:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card,.card-slim{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:0.25rem}.card>hr,.card-slim>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child,.card-slim>.list-group:first-child .list-group-item:first-child{border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.card>.list-group:last-child .list-group-item:last-child,.card-slim>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:0.25rem;border-bottom-left-radius:0.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:0.75rem}.card-subtitle{margin-top:-0.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:0.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:0.75rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.625rem;margin-bottom:-0.75rem;margin-left:-0.625rem;border-bottom:0}.card-header-pills{margin-right:-0.625rem;margin-left:-0.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(0.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card,.card-deck .card-slim{margin-bottom:15px}@media (min-width: 576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card,.card-deck .card-slim{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card,.card-group>.card-slim{margin-bottom:15px}@media (min-width: 576px){.card-group{flex-flow:row wrap}.card-group>.card,.card-group>.card-slim{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card,.card-group>.card-slim+.card,.card-group>.card+.card-slim,.card-group>.card-slim+.card-slim{margin-left:0;border-left:0}.card-group>.card:first-child,.card-group>.card-slim:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-img-top,.card-group>.card-slim:first-child .card-img-top,.card-group>.card:first-child .card-header,.card-group>.card-slim:first-child .card-header{border-top-right-radius:0}.card-group>.card:first-child .card-img-bottom,.card-group>.card-slim:first-child .card-img-bottom,.card-group>.card:first-child .card-footer,.card-group>.card-slim:first-child .card-footer{border-bottom-right-radius:0}.card-group>.card:last-child,.card-group>.card-slim:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-img-top,.card-group>.card-slim:last-child .card-img-top,.card-group>.card:last-child .card-header,.card-group>.card-slim:last-child .card-header{border-top-left-radius:0}.card-group>.card:last-child .card-img-bottom,.card-group>.card-slim:last-child .card-img-bottom,.card-group>.card:last-child .card-footer,.card-group>.card-slim:last-child .card-footer{border-bottom-left-radius:0}.card-group>.card:only-child,.card-group>.card-slim:only-child{border-radius:0.25rem}.card-group>.card:only-child .card-img-top,.card-group>.card-slim:only-child .card-img-top,.card-group>.card:only-child .card-header,.card-group>.card-slim:only-child .card-header{border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.card-group>.card:only-child .card-img-bottom,.card-group>.card-slim:only-child .card-img-bottom,.card-group>.card:only-child .card-footer,.card-group>.card-slim:only-child .card-footer{border-bottom-right-radius:0.25rem;border-bottom-left-radius:0.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.card-group>.card-slim:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.card-group>.card-slim:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card-slim:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card-slim:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card-slim:not(:first-child):not(:last-child):not(:only-child) .card-footer{border-radius:0}}.card-columns .card,.card-columns .card-slim{margin-bottom:0.75rem}@media (min-width: 576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card,.card-columns .card-slim{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type),.accordion .card-slim:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child,.accordion .card-slim:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type,.accordion .card-slim:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type,.accordion .card-slim:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:0.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:0.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:0.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:0.25rem}.page-link{position:relative;display:block;padding:6px 16px;margin-left:-1px;line-height:20px;color:#007bff;background-color:#fff;border:1px solid #e5e5e5}.page-link:hover{z-index:2;color:#2e2e2e;text-decoration:none;background-color:#f6fafe;border-color:#e5e5e5}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:0.25rem;border-bottom-left-radius:0.25rem}.page-item:last-child .page-link{border-top-right-radius:0.25rem;border-bottom-right-radius:0.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#1b69b6;border-color:#1b69b6}.page-item.disabled .page-link{color:#cdcdcd;pointer-events:none;cursor:auto;background-color:#fafafa;border-color:#e5e5e5}.pagination-lg .page-link{padding:0.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:0.3rem;border-bottom-left-radius:0.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:0.3rem;border-bottom-right-radius:0.3rem}.pagination-sm .page-link{padding:0.25rem 0.5rem;font-size:0.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:0.2rem;border-bottom-left-radius:0.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:0.2rem;border-bottom-right-radius:0.2rem}.badge{display:inline-block;padding:0.25em 0.4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:0.6em;padding-left:0.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:hover,.badge-primary[href]:focus{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#212529;background-color:#fafafa}.badge-secondary[href]:hover,.badge-secondary[href]:focus{color:#212529;text-decoration:none;background-color:#e1e1e1}.badge-success{color:#fff;background-color:#1aaa55}.badge-success[href]:hover,.badge-success[href]:focus{color:#fff;text-decoration:none;background-color:#137e3f}.badge-info{color:#fff;background-color:#1f78d1}.badge-info[href]:hover,.badge-info[href]:focus{color:#fff;text-decoration:none;background-color:#185fa5}.badge-warning{color:#212529;background-color:#fc9403}.badge-warning[href]:hover,.badge-warning[href]:focus{color:#212529;text-decoration:none;background-color:#ca7602}.badge-danger{color:#fff;background-color:#db3b21}.badge-danger[href]:hover,.badge-danger[href]:focus{color:#fff;text-decoration:none;background-color:#af2f1a}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:hover,.badge-light[href]:focus{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:hover,.badge-dark[href]:focus{color:#fff;text-decoration:none;background-color:#1d2124}.alert,.flash-container .flash-notice,.flash-container .flash-warning,.flash-container .flash-alert,.flash-container .flash-success{position:relative;padding:0.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:0.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:0.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#828282;background-color:#fefefe;border-color:#fefefe}.alert-secondary hr{border-top-color:#f1f1f1}.alert-secondary .alert-link{color:dimgray}.alert-success{color:#0e582c;background-color:#d1eedd;border-color:#bfe7cf}.alert-success hr{border-top-color:#ace0c1}.alert-success .alert-link{color:#072c16}.alert-info{color:#103e6d;background-color:#d2e4f6;border-color:#c0d9f2}.alert-info hr{border-top-color:#abccee}.alert-info .alert-link{color:#092541}.alert-warning,.broadcast-message,.broadcast-message-preview{color:#834d02;background-color:#feeacd;border-color:#fee1b8}.alert-warning hr,.broadcast-message hr,.broadcast-message-preview hr{border-top-color:#fed69f}.alert-warning .alert-link,.broadcast-message .alert-link,.broadcast-message-preview .alert-link{color:#512f01}.alert-danger{color:#721f11;background-color:#f8d8d3;border-color:#f5c8c1}.alert-danger hr{border-top-color:#f1b5ab}.alert-danger .alert-link{color:#46130a}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:0.75rem;background-color:#e9ecef;border-radius:0.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width 0.6s ease}@media screen and (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:0.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0.25rem;border-bottom-left-radius:0.25rem}.list-group-item:hover,.list-group-item:focus{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#828282;background-color:#fefefe}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#828282;background-color:#f1f1f1}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#828282;border-color:#828282}.list-group-item-success{color:#0e582c;background-color:#bfe7cf}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0e582c;background-color:#ace0c1}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0e582c;border-color:#0e582c}.list-group-item-info{color:#103e6d;background-color:#c0d9f2}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#103e6d;background-color:#abccee}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#103e6d;border-color:#103e6d}.list-group-item-warning{color:#834d02;background-color:#fee1b8}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#834d02;background-color:#fed69f}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#834d02;border-color:#834d02}.list-group-item-danger{color:#721f11;background-color:#f5c8c1}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#721f11;background-color:#f1b5ab}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721f11;border-color:#721f11}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover,.close:focus{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog,.modal-no-backdrop{position:relative;width:auto;margin:0.5rem;pointer-events:none}.modal.fade .modal-dialog,.modal.fade .modal-no-backdrop{transition:transform 0.3s ease-out;transform:translate(0, -25%)}@media screen and (prefers-reduced-motion: reduce){.modal.fade .modal-dialog,.modal.fade .modal-no-backdrop{transition:none}}.modal.show .modal-dialog,.modal.show .modal-no-backdrop{transform:translate(0, 0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - (0.5rem * 2))}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:0.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:0.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:0.3rem;border-top-right-radius:0.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog,.modal-no-backdrop{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:12px;word-wrap:break-word;opacity:0}.tooltip.show{opacity:0.9}.tooltip .arrow{position:absolute;display:block;width:0.8rem;height:0.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:0.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:0.4rem 0.4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 0.4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:0.4rem;height:0.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:0.4rem 0.4rem 0.4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:0.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 0.4rem 0.4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 0.4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:0.4rem;height:0.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:0.4rem 0 0.4rem 0.4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:0.25rem 0.5rem;color:#fff;text-align:center;background-color:#000;border-radius:0.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:0.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:0.5rem;margin:0 0.3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:0.5rem}.bs-popover-top .arrow,.bs-popover-auto[x-placement^="top"] .arrow{bottom:calc((0.5rem + 1px) * -1)}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{border-width:0.5rem 0.5rem 0}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before{bottom:0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:0.5rem}.bs-popover-right .arrow,.bs-popover-auto[x-placement^="right"] .arrow{left:calc((0.5rem + 1px) * -1);width:0.5rem;height:1rem;margin:0.3rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{border-width:0.5rem 0.5rem 0.5rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before{left:0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{left:1px;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:0.5rem}.bs-popover-bottom .arrow,.bs-popover-auto[x-placement^="bottom"] .arrow{top:calc((0.5rem + 1px) * -1)}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{border-width:0 0.5rem 0.5rem 0.5rem}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before{top:0;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-0.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:0.5rem}.bs-popover-left .arrow,.bs-popover-auto[x-placement^="left"] .arrow{right:calc((0.5rem + 1px) * -1);width:0.5rem;height:1rem;margin:0.3rem 0}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{border-width:0.5rem 0 0.5rem 0.5rem}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before{right:0;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:0.5rem 0.75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:0.5rem 0.75rem;color:#212529}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#007bff !important}a.bg-primary:hover,.participants-more .bg-primary.btn-link:hover,.user-list-more .bg-primary.btn-link:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#0062cc !important}.bg-secondary{background-color:#fafafa !important}a.bg-secondary:hover,.participants-more .bg-secondary.btn-link:hover,.user-list-more .bg-secondary.btn-link:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#e1e1e1 !important}.bg-success{background-color:#1aaa55 !important}a.bg-success:hover,.participants-more .bg-success.btn-link:hover,.user-list-more .bg-success.btn-link:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#137e3f !important}.bg-info{background-color:#1f78d1 !important}a.bg-info:hover,.participants-more .bg-info.btn-link:hover,.user-list-more .bg-info.btn-link:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#185fa5 !important}.bg-warning{background-color:#fc9403 !important}a.bg-warning:hover,.participants-more .bg-warning.btn-link:hover,.user-list-more .bg-warning.btn-link:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#ca7602 !important}.bg-danger{background-color:#db3b21 !important}a.bg-danger:hover,.participants-more .bg-danger.btn-link:hover,.user-list-more .bg-danger.btn-link:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#af2f1a !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,.participants-more .bg-light.btn-link:hover,.user-list-more .bg-light.btn-link:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,.participants-more .bg-dark.btn-link:hover,.user-list-more .bg-dark.btn-link:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #e5e5e5 !important}.border-top{border-top:1px solid #e5e5e5 !important}.border-right{border-right:1px solid #e5e5e5 !important}.border-bottom{border-bottom:1px solid #e5e5e5 !important}.border-left{border-left:1px solid #e5e5e5 !important}.border-0,.card.card-without-border,.card-without-border.card-slim,.card.bg-light,.bg-light.card-slim{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#007bff !important}.border-secondary{border-color:#fafafa !important}.border-success{border-color:#1aaa55 !important}.border-info{border-color:#1f78d1 !important}.border-warning{border-color:#fc9403 !important}.border-danger{border-color:#db3b21 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-white{border-color:#fff !important}.rounded{border-radius:0.25rem !important}.rounded-top{border-top-left-radius:0.25rem !important;border-top-right-radius:0.25rem !important}.rounded-right{border-top-right-radius:0.25rem !important;border-bottom-right-radius:0.25rem !important}.rounded-bottom{border-bottom-right-radius:0.25rem !important;border-bottom-left-radius:0.25rem !important}.rounded-left{border-top-left-radius:0.25rem !important;border-bottom-left-radius:0.25rem !important}.rounded-circle{border-radius:50% !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:0.25rem !important}.mt-1,.my-1{margin-top:0.25rem !important}.mr-1,.mx-1{margin-right:0.25rem !important}.mb-1,.my-1{margin-bottom:0.25rem !important}.ml-1,.mx-1{margin-left:0.25rem !important}.m-2{margin:0.5rem !important}.mt-2,.my-2{margin-top:0.5rem !important}.mr-2,.mx-2{margin-right:0.5rem !important}.mb-2,.my-2{margin-bottom:0.5rem !important}.ml-2,.mx-2{margin-left:0.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:0.25rem !important}.pt-1,.py-1{padding-top:0.25rem !important}.pr-1,.px-1{padding-right:0.25rem !important}.pb-1,.py-1{padding-bottom:0.25rem !important}.pl-1,.px-1{padding-left:0.25rem !important}.p-2{padding:0.5rem !important}.pt-2,.py-2{padding-top:0.5rem !important}.pr-2,.px-2{padding-right:0.5rem !important}.pb-2,.py-2{padding-bottom:0.5rem !important}.pl-2,.px-2{padding-left:0.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:0.25rem !important}.mt-sm-1,.my-sm-1{margin-top:0.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:0.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:0.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:0.25rem !important}.m-sm-2{margin:0.5rem !important}.mt-sm-2,.my-sm-2{margin-top:0.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:0.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:0.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:0.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:0.25rem !important}.pt-sm-1,.py-sm-1{padding-top:0.25rem !important}.pr-sm-1,.px-sm-1{padding-right:0.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:0.25rem !important}.pl-sm-1,.px-sm-1{padding-left:0.25rem !important}.p-sm-2{padding:0.5rem !important}.pt-sm-2,.py-sm-2{padding-top:0.5rem !important}.pr-sm-2,.px-sm-2{padding-right:0.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:0.5rem !important}.pl-sm-2,.px-sm-2{padding-left:0.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:0.25rem !important}.mt-md-1,.my-md-1{margin-top:0.25rem !important}.mr-md-1,.mx-md-1{margin-right:0.25rem !important}.mb-md-1,.my-md-1{margin-bottom:0.25rem !important}.ml-md-1,.mx-md-1{margin-left:0.25rem !important}.m-md-2{margin:0.5rem !important}.mt-md-2,.my-md-2{margin-top:0.5rem !important}.mr-md-2,.mx-md-2{margin-right:0.5rem !important}.mb-md-2,.my-md-2{margin-bottom:0.5rem !important}.ml-md-2,.mx-md-2{margin-left:0.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:0.25rem !important}.pt-md-1,.py-md-1{padding-top:0.25rem !important}.pr-md-1,.px-md-1{padding-right:0.25rem !important}.pb-md-1,.py-md-1{padding-bottom:0.25rem !important}.pl-md-1,.px-md-1{padding-left:0.25rem !important}.p-md-2{padding:0.5rem !important}.pt-md-2,.py-md-2{padding-top:0.5rem !important}.pr-md-2,.px-md-2{padding-right:0.5rem !important}.pb-md-2,.py-md-2{padding-bottom:0.5rem !important}.pl-md-2,.px-md-2{padding-left:0.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:0.25rem !important}.mt-lg-1,.my-lg-1{margin-top:0.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:0.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:0.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:0.25rem !important}.m-lg-2{margin:0.5rem !important}.mt-lg-2,.my-lg-2{margin-top:0.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:0.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:0.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:0.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:0.25rem !important}.pt-lg-1,.py-lg-1{padding-top:0.25rem !important}.pr-lg-1,.px-lg-1{padding-right:0.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:0.25rem !important}.pl-lg-1,.px-lg-1{padding-left:0.25rem !important}.p-lg-2{padding:0.5rem !important}.pt-lg-2,.py-lg-2{padding-top:0.5rem !important}.pr-lg-2,.px-lg-2{padding-right:0.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:0.5rem !important}.pl-lg-2,.px-lg-2{padding-left:0.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:0.25rem !important}.mt-xl-1,.my-xl-1{margin-top:0.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:0.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:0.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:0.25rem !important}.m-xl-2{margin:0.5rem !important}.mt-xl-2,.my-xl-2{margin-top:0.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:0.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:0.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:0.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:0.25rem !important}.pt-xl-1,.py-xl-1{padding-top:0.25rem !important}.pr-xl-1,.px-xl-1{padding-right:0.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:0.25rem !important}.pl-xl-1,.px-xl-1{padding-left:0.25rem !important}.p-xl-2{padding:0.5rem !important}.pt-xl-2,.py-xl-2{padding-top:0.5rem !important}.pr-xl-2,.px-xl-2{padding-right:0.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:0.5rem !important}.pl-xl-2,.px-xl-2{padding-left:0.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-monospace{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#007bff !important}a.text-primary:hover,.participants-more .text-primary.btn-link:hover,.user-list-more .text-primary.btn-link:hover,a.text-primary:focus{color:#0062cc !important}.text-secondary{color:#fafafa !important}a.text-secondary:hover,.participants-more .text-secondary.btn-link:hover,.user-list-more .text-secondary.btn-link:hover,a.text-secondary:focus{color:#e1e1e1 !important}.text-success{color:#1aaa55 !important}a.text-success:hover,.participants-more .text-success.btn-link:hover,.user-list-more .text-success.btn-link:hover,a.text-success:focus{color:#137e3f !important}.text-info{color:#1f78d1 !important}a.text-info:hover,.participants-more .text-info.btn-link:hover,.user-list-more .text-info.btn-link:hover,a.text-info:focus{color:#185fa5 !important}.text-warning{color:#fc9403 !important}a.text-warning:hover,.participants-more .text-warning.btn-link:hover,.user-list-more .text-warning.btn-link:hover,a.text-warning:focus{color:#ca7602 !important}.text-danger{color:#db3b21 !important}a.text-danger:hover,.participants-more .text-danger.btn-link:hover,.user-list-more .text-danger.btn-link:hover,a.text-danger:focus{color:#af2f1a !important}.text-light{color:#f8f9fa !important}a.text-light:hover,.participants-more .text-light.btn-link:hover,.user-list-more .text-light.btn-link:hover,a.text-light:focus{color:#dae0e5 !important}.text-dark{color:#343a40 !important}a.text-dark:hover,.participants-more .text-dark.btn-link:hover,.user-list-more .text-dark.btn-link:hover,a.text-dark:focus{color:#1d2124 !important}.text-body{color:#212529 !important}.text-muted{color:#6c757d !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table,.file-holder table,.wiki table,.md table,ul.notes>li .note-body .note-text table{border-collapse:collapse !important}.table td,.file-holder table td,.wiki table td,.md table td,ul.notes>li .note-body .note-text table td,.table th,.file-holder table th,.wiki table th,.md table th,ul.notes>li .note-body .note-text table th{background-color:#fff !important}.table-bordered th,.wiki table th,.md table th,ul.notes>li .note-body .note-text table th,.table-bordered td,.wiki table td,.md table td,ul.notes>li .note-body .note-text table td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th,.file-holder table .thead-dark th,.wiki table .thead-dark th,.md table .thead-dark th,ul.notes>li .note-body .note-text table .thead-dark th{color:inherit;border-color:#dee2e6}}html{font-size:14px}legend{border-bottom:1px solid #e5e5e5;margin-bottom:20px}button,html [type="button"],[type="reset"],[type="submit"],[role="button"]{-webkit-appearance:inherit;cursor:pointer}h1,h2,h3,h4,h5,h6{color:#2e2e2e;font-weight:600}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h5,.h5{font-size:14px}input[type="file"]{line-height:1}b,strong{font-weight:bold}a{color:#1b69b6}hr{overflow:hidden}.form-group.row .col-form-label{padding-top:0}@media (min-width: 768px){.form-group.row .col-form-label{text-align:right}}kbd{display:inline-block}code{padding:2px 4px;color:#c0341d;background-color:#fbe5e1;border-radius:3px}.code>code{background-color:inherit;padding:unset}.build-trace code{background-color:inherit;padding:inherit}table{border-spacing:0}.tooltip,.no-pointer-events{pointer-events:none}.popover{font-size:14px}.d-table-header-group{display:table-header-group !important}@media (min-width: 576px){.d-sm-table-header-group{display:table-header-group !important}}@media (min-width: 768px){.d-md-table-header-group{display:table-header-group !important}}@media (min-width: 992px){.d-lg-table-header-group{display:table-header-group !important}}@media (min-width: 1200px){.d-xl-table-header-group{display:table-header-group !important}}.text-secondary{color:#707070 !important}.bg-success .card-header,.bg-primary .card-header,.bg-info .card-header,.bg-danger .card-header,.bg-warning .card-header{color:#fff}.hidden{display:none !important;visibility:hidden !important}.hide{display:none}.dropdown-toggle::after,.dropdown-menu-toggle::after,.dropright .dropdown-menu-toggle::after{display:none}h3.popover-header{margin-top:0}.badge,.label{padding:4px 5px;font-size:12px;font-style:normal;font-weight:400;display:inline-block}.badge.badge-gray,.label.badge-gray{background-color:#f8fafc;color:#2e2e2e;text-shadow:none}.badge.badge-inverse,.label.badge-inverse{background-color:#333}.info-well{background:#fafafa;color:#2e2e2e;border:1px solid #e5e5e5;border-radius:4px;margin-bottom:16px}.info-well .well-segment{padding:16px}.info-well .well-segment:not(:last-of-type){border-bottom:1px solid #eef0f2}.info-well .well-segment p:last-of-type,.info-well .well-segment ol:last-of-type,.info-well .well-segment ul:last-of-type,.info-well .well-segment .form-group:last-of-type{margin-bottom:0}.info-well .badge.badge-gray{background-color:#e8f2f7}.card .card-title,.card-slim .card-title{margin-bottom:0}.card.card-without-margin,.card-without-margin.card-slim{margin:0}.card-header h3.card-title,.card-header h4.card-title{margin-top:0}.nav-tabs{border-bottom:0}.nav-tabs .nav-link{border-top:0;border-left:0;border-right:0}.nav-tabs .nav-item{margin-bottom:0}pre code{white-space:pre-wrap}.alert,.flash-container .flash-notice,.flash-container .flash-warning,.flash-container .flash-alert,.flash-container .flash-success,.flash-notice{border-radius:0}.alert-success{background-color:#1aaa55;border-color:#1aaa55}.alert-info{background-color:#1f78d1;border-color:#1f78d1}.alert-warning,.broadcast-message,.broadcast-message-preview{background-color:#fc9403;border-color:#fc9403}.alert-danger{background-color:#db3b21;border-color:#db3b21}.alert-success,.alert-info,.alert-warning,.broadcast-message,.broadcast-message-preview,.alert-danger,.flash-notice{color:#fff}.alert-success h4,.alert-success a:not(.btn),.alert-success .alert-link,.alert-info h4,.alert-info a:not(.btn),.alert-info .alert-link,.alert-warning h4,.broadcast-message h4,.broadcast-message-preview h4,.alert-warning a:not(.btn),.broadcast-message a:not(.btn),.broadcast-message-preview a:not(.btn),.alert-warning .alert-link,.broadcast-message .alert-link,.broadcast-message-preview .alert-link,.alert-danger h4,.alert-danger a:not(.btn),.alert-danger .alert-link,.flash-notice h4,.flash-notice a:not(.btn),.flash-notice .alert-link{color:#fff}input[type=color].form-control{height:34px}.toggle-sidebar-button .collapse-text,.toggle-sidebar-button .icon-angle-double-left,.toggle-sidebar-button .icon-angle-double-right{color:#707070}.project-templates-buttons .btn{vertical-align:unset}html{overflow-y:scroll}html.touch .tooltip{display:none !important}body{text-decoration-skip:ink}body.navless{background-color:#fff !important}body.board-card-content{background-color:#eee}body.board-card-content .content-wrapper{padding:0}body.board-card-content .content-wrapper .container-fluid,body.board-card-content .content-wrapper .container-limited{background-color:#eee}.content-wrapper{margin-top:40px;padding-bottom:100px}.container{padding-top:0;z-index:5}.container .content{margin:0}.navless-container{margin-top:40px;padding-top:32px}.container-limited{max-width:1280px}.container-limited.limit-container-width{max-width:990px}.alert-wrapper .alert,.alert-wrapper .flash-container .flash-notice,.flash-container .alert-wrapper .flash-notice,.alert-wrapper .flash-container .flash-warning,.flash-container .alert-wrapper .flash-warning,.alert-wrapper .flash-container .flash-alert,.flash-container .alert-wrapper .flash-alert,.alert-wrapper .flash-container .flash-success,.flash-container .alert-wrapper .flash-success{margin-bottom:0}.alert-wrapper .alert:last-child,.alert-wrapper .flash-container .flash-notice:last-child,.flash-container .alert-wrapper .flash-notice:last-child,.alert-wrapper .flash-container .flash-warning:last-child,.flash-container .alert-wrapper .flash-warning:last-child,.alert-wrapper .flash-container .flash-alert:last-child,.flash-container .alert-wrapper .flash-alert:last-child,.alert-wrapper .flash-container .flash-success:last-child,.flash-container .alert-wrapper .flash-success:last-child{margin-bottom:16px}.alert-wrapper .alert-link-group{float:right}@media (max-width: 767.98px){.alert-wrapper .alert,.alert-wrapper .flash-container .flash-notice,.flash-container .alert-wrapper .flash-notice,.alert-wrapper .flash-container .flash-warning,.flash-container .alert-wrapper .flash-warning,.alert-wrapper .flash-container .flash-alert,.flash-container .alert-wrapper .flash-alert,.alert-wrapper .flash-container .flash-success,.flash-container .alert-wrapper .flash-success{text-align:center}.alert-wrapper .alert-link-group{float:none}}.alert-wrapper .alert-warning,.alert-wrapper .broadcast-message,.alert-wrapper .broadcast-message-preview{transition:background-color 0.15s, border-color 0.15s;background-color:#fc9403;border-color:#fc9403}.alert-wrapper .alert-warning:only-of-type,.alert-wrapper .broadcast-message:only-of-type,.alert-wrapper .broadcast-message-preview:only-of-type{background-color:#fc9403;border-color:#fc9403}.alert-wrapper .alert-warning+.alert-warning,.alert-wrapper .broadcast-message+.alert-warning,.alert-wrapper .broadcast-message-preview+.alert-warning,.alert-wrapper .alert-warning+.broadcast-message,.alert-wrapper .broadcast-message+.broadcast-message,.alert-wrapper .broadcast-message-preview+.broadcast-message,.alert-wrapper .alert-warning+.broadcast-message-preview,.alert-wrapper .broadcast-message+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview{background-color:#de7e00;border-color:#de7e00}.alert-wrapper .alert-warning+.alert-warning+.alert-warning,.alert-wrapper .broadcast-message+.alert-warning+.alert-warning,.alert-wrapper .broadcast-message-preview+.alert-warning+.alert-warning,.alert-wrapper .alert-warning+.broadcast-message+.alert-warning,.alert-wrapper .broadcast-message+.broadcast-message+.alert-warning,.alert-wrapper .broadcast-message-preview+.broadcast-message+.alert-warning,.alert-wrapper .alert-warning+.broadcast-message-preview+.alert-warning,.alert-wrapper .broadcast-message+.broadcast-message-preview+.alert-warning,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.alert-warning,.alert-wrapper .alert-warning+.alert-warning+.broadcast-message,.alert-wrapper .broadcast-message+.alert-warning+.broadcast-message,.alert-wrapper .broadcast-message-preview+.alert-warning+.broadcast-message,.alert-wrapper .alert-warning+.broadcast-message+.broadcast-message,.alert-wrapper .broadcast-message+.broadcast-message+.broadcast-message,.alert-wrapper .broadcast-message-preview+.broadcast-message+.broadcast-message,.alert-wrapper .alert-warning+.broadcast-message-preview+.broadcast-message,.alert-wrapper .broadcast-message+.broadcast-message-preview+.broadcast-message,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.broadcast-message,.alert-wrapper .alert-warning+.alert-warning+.broadcast-message-preview,.alert-wrapper .broadcast-message+.alert-warning+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.alert-warning+.broadcast-message-preview,.alert-wrapper .alert-warning+.broadcast-message+.broadcast-message-preview,.alert-wrapper .broadcast-message+.broadcast-message+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.broadcast-message+.broadcast-message-preview,.alert-wrapper .alert-warning+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .broadcast-message+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.broadcast-message-preview{background-color:#c26700;border-color:#c26700}.alert-wrapper .alert-warning+.alert-warning+.alert-warning+.alert-warning,.alert-wrapper .broadcast-message+.alert-warning+.alert-warning+.alert-warning,.alert-wrapper .broadcast-message-preview+.alert-warning+.alert-warning+.alert-warning,.alert-wrapper .alert-warning+.broadcast-message+.alert-warning+.alert-warning,.alert-wrapper .broadcast-message+.broadcast-message+.alert-warning+.alert-warning,.alert-wrapper .broadcast-message-preview+.broadcast-message+.alert-warning+.alert-warning,.alert-wrapper .alert-warning+.broadcast-message-preview+.alert-warning+.alert-warning,.alert-wrapper .broadcast-message+.broadcast-message-preview+.alert-warning+.alert-warning,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.alert-warning+.alert-warning,.alert-wrapper .alert-warning+.alert-warning+.broadcast-message+.alert-warning,.alert-wrapper .broadcast-message+.alert-warning+.broadcast-message+.alert-warning,.alert-wrapper .broadcast-message-preview+.alert-warning+.broadcast-message+.alert-warning,.alert-wrapper .alert-warning+.broadcast-message+.broadcast-message+.alert-warning,.alert-wrapper .broadcast-message+.broadcast-message+.broadcast-message+.alert-warning,.alert-wrapper .broadcast-message-preview+.broadcast-message+.broadcast-message+.alert-warning,.alert-wrapper .alert-warning+.broadcast-message-preview+.broadcast-message+.alert-warning,.alert-wrapper .broadcast-message+.broadcast-message-preview+.broadcast-message+.alert-warning,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.broadcast-message+.alert-warning,.alert-wrapper .alert-warning+.alert-warning+.broadcast-message-preview+.alert-warning,.alert-wrapper .broadcast-message+.alert-warning+.broadcast-message-preview+.alert-warning,.alert-wrapper .broadcast-message-preview+.alert-warning+.broadcast-message-preview+.alert-warning,.alert-wrapper .alert-warning+.broadcast-message+.broadcast-message-preview+.alert-warning,.alert-wrapper .broadcast-message+.broadcast-message+.broadcast-message-preview+.alert-warning,.alert-wrapper .broadcast-message-preview+.broadcast-message+.broadcast-message-preview+.alert-warning,.alert-wrapper .alert-warning+.broadcast-message-preview+.broadcast-message-preview+.alert-warning,.alert-wrapper .broadcast-message+.broadcast-message-preview+.broadcast-message-preview+.alert-warning,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.broadcast-message-preview+.alert-warning,.alert-wrapper .alert-warning+.alert-warning+.alert-warning+.broadcast-message,.alert-wrapper .broadcast-message+.alert-warning+.alert-warning+.broadcast-message,.alert-wrapper .broadcast-message-preview+.alert-warning+.alert-warning+.broadcast-message,.alert-wrapper .alert-warning+.broadcast-message+.alert-warning+.broadcast-message,.alert-wrapper .broadcast-message+.broadcast-message+.alert-warning+.broadcast-message,.alert-wrapper .broadcast-message-preview+.broadcast-message+.alert-warning+.broadcast-message,.alert-wrapper .alert-warning+.broadcast-message-preview+.alert-warning+.broadcast-message,.alert-wrapper .broadcast-message+.broadcast-message-preview+.alert-warning+.broadcast-message,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.alert-warning+.broadcast-message,.alert-wrapper .alert-warning+.alert-warning+.broadcast-message+.broadcast-message,.alert-wrapper .broadcast-message+.alert-warning+.broadcast-message+.broadcast-message,.alert-wrapper .broadcast-message-preview+.alert-warning+.broadcast-message+.broadcast-message,.alert-wrapper .alert-warning+.broadcast-message+.broadcast-message+.broadcast-message,.alert-wrapper .broadcast-message+.broadcast-message+.broadcast-message+.broadcast-message,.alert-wrapper .broadcast-message-preview+.broadcast-message+.broadcast-message+.broadcast-message,.alert-wrapper .alert-warning+.broadcast-message-preview+.broadcast-message+.broadcast-message,.alert-wrapper .broadcast-message+.broadcast-message-preview+.broadcast-message+.broadcast-message,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.broadcast-message+.broadcast-message,.alert-wrapper .alert-warning+.alert-warning+.broadcast-message-preview+.broadcast-message,.alert-wrapper .broadcast-message+.alert-warning+.broadcast-message-preview+.broadcast-message,.alert-wrapper .broadcast-message-preview+.alert-warning+.broadcast-message-preview+.broadcast-message,.alert-wrapper .alert-warning+.broadcast-message+.broadcast-message-preview+.broadcast-message,.alert-wrapper .broadcast-message+.broadcast-message+.broadcast-message-preview+.broadcast-message,.alert-wrapper .broadcast-message-preview+.broadcast-message+.broadcast-message-preview+.broadcast-message,.alert-wrapper .alert-warning+.broadcast-message-preview+.broadcast-message-preview+.broadcast-message,.alert-wrapper .broadcast-message+.broadcast-message-preview+.broadcast-message-preview+.broadcast-message,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.broadcast-message-preview+.broadcast-message,.alert-wrapper .alert-warning+.alert-warning+.alert-warning+.broadcast-message-preview,.alert-wrapper .broadcast-message+.alert-warning+.alert-warning+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.alert-warning+.alert-warning+.broadcast-message-preview,.alert-wrapper .alert-warning+.broadcast-message+.alert-warning+.broadcast-message-preview,.alert-wrapper .broadcast-message+.broadcast-message+.alert-warning+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.broadcast-message+.alert-warning+.broadcast-message-preview,.alert-wrapper .alert-warning+.broadcast-message-preview+.alert-warning+.broadcast-message-preview,.alert-wrapper .broadcast-message+.broadcast-message-preview+.alert-warning+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.alert-warning+.broadcast-message-preview,.alert-wrapper .alert-warning+.alert-warning+.broadcast-message+.broadcast-message-preview,.alert-wrapper .broadcast-message+.alert-warning+.broadcast-message+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.alert-warning+.broadcast-message+.broadcast-message-preview,.alert-wrapper .alert-warning+.broadcast-message+.broadcast-message+.broadcast-message-preview,.alert-wrapper .broadcast-message+.broadcast-message+.broadcast-message+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.broadcast-message+.broadcast-message+.broadcast-message-preview,.alert-wrapper .alert-warning+.broadcast-message-preview+.broadcast-message+.broadcast-message-preview,.alert-wrapper .broadcast-message+.broadcast-message-preview+.broadcast-message+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.broadcast-message+.broadcast-message-preview,.alert-wrapper .alert-warning+.alert-warning+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .broadcast-message+.alert-warning+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.alert-warning+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .alert-warning+.broadcast-message+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .broadcast-message+.broadcast-message+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.broadcast-message+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .alert-warning+.broadcast-message-preview+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .broadcast-message+.broadcast-message-preview+.broadcast-message-preview+.broadcast-message-preview,.alert-wrapper .broadcast-message-preview+.broadcast-message-preview+.broadcast-message-preview+.broadcast-message-preview{background-color:#a35200;border-color:#a35200}.with-performance-bar .layout-page{margin-top:75px}.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.once{-webkit-animation-iteration-count:1;animation-iteration-count:1}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.flipOutX,.animated.flipOutY,.animated.bounceIn,.animated.bounceOut{-webkit-animation-duration:0.75s;animation-duration:0.75s}.animated.short{-webkit-animation-duration:321ms;animation-duration:321ms;-webkit-animation-fill-mode:none;animation-fill-mode:none}@-webkit-keyframes pulse{from, + to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.05, 1.05, 1.05);transform:scale3d(1.05, 1.05, 1.05)}}@keyframes pulse{from, + to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.05, 1.05, 1.05);transform:scale3d(1.05, 1.05, 1.05)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}.btn{transition:background-color 100ms linear, border-color 100ms linear, color 100ms linear, box-shadow 100ms linear}.dropdown-menu-toggle,.avatar-circle,.avatar,.avatar-container,.header-user-avatar{transition:border-color 100ms linear}.note-action-button,.toolbar-btn,.dropdown-toggle-caret{transition:color 100ms linear}a{transition:background-color 100ms linear, color 100ms linear, border 100ms linear}.stage-nav-item{transition:background-color 100ms linear, box-shadow 100ms linear}.dropdown-menu a,.dropdown-menu button,.dropdown-menu-nav a{transition:none}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fade-in{animation:fadeIn 200ms 1}@keyframes fadeInHalf{0%{opacity:0}100%{opacity:0.5}}.fade-in-half{animation:fadeInHalf 200ms 1}@keyframes fadeInFull{0%{opacity:0.5}100%{opacity:1}}.fade-in-full{animation:fadeInFull 200ms 1}.animation-container{height:40px;overflow:hidden}.animation-container.animation-container-small{height:12px}.animation-container.animation-container-right .skeleton-line-2{left:0;right:150px}.animation-container [class^="skeleton-line-"]{position:relative;background-color:#f2f2f2;height:10px;overflow:hidden}.animation-container [class^="skeleton-line-"]:not(:last-of-type){margin-bottom:4px}.animation-container [class^="skeleton-line-"]::after{content:' ';display:block;animation:blockTextShine 1s linear infinite forwards;background-repeat:no-repeat;background-size:cover;background-image:linear-gradient(to right, #f2f2f2 0%, #fafafa 20%, #f2f2f2 40%, #f2f2f2 100%);height:10px}.skeleton-line-1{width:156px}.skeleton-line-2{width:235px}.skeleton-line-3{width:200px}@keyframes blockTextShine{0%{transform:translateX(-468px)}100%{transform:translateX(468px)}}.slide-down-enter-active{transition:transform 0.2s}.slide-down-enter,.slide-down-leave-to{transform:translateY(-30%)}.fade-enter-active,.fade-leave-active{transition:opacity 0.3s linear}.fade-enter,.fade-leave-to{opacity:0}.avatar-circle,.avatar,.avatar-container{float:left;margin-right:15px;border-radius:50%;border:1px solid #f5f5f5}.avatar-circle.s16,.s16.avatar,.s16.avatar-container{width:16px;height:16px;margin-right:6px}.avatar-circle.s18,.s18.avatar,.s18.avatar-container{width:18px;height:18px;margin-right:6px}.avatar-circle.s19,.s19.avatar,.s19.avatar-container{width:19px;height:19px;margin-right:6px}.avatar-circle.s20,.s20.avatar,.s20.avatar-container{width:20px;height:20px;margin-right:7px}.avatar-circle.s24,.s24.avatar,.s24.avatar-container{width:24px;height:24px;margin-right:8px}.avatar-circle.s26,.s26.avatar,.s26.avatar-container{width:26px;height:26px;margin-right:8px}.avatar-circle.s32,.s32.avatar,.s32.avatar-container{width:32px;height:32px;margin-right:10px}.avatar-circle.s36,.s36.avatar,.s36.avatar-container{width:36px;height:36px;margin-right:10px}.avatar-circle.s40,.s40.avatar,.s40.avatar-container{width:40px;height:40px;margin-right:10px}.avatar-circle.s46,.s46.avatar,.s46.avatar-container{width:46px;height:46px;margin-right:15px}.avatar-circle.s48,.s48.avatar,.s48.avatar-container{width:48px;height:48px;margin-right:10px}.avatar-circle.s60,.s60.avatar,.s60.avatar-container{width:60px;height:60px;margin-right:12px}.avatar-circle.s70,.s70.avatar,.s70.avatar-container{width:70px;height:70px;margin-right:14px}.avatar-circle.s90,.s90.avatar,.s90.avatar-container{width:90px;height:90px;margin-right:15px}.avatar-circle.s100,.s100.avatar,.s100.avatar-container{width:100px;height:100px;margin-right:15px}.avatar-circle.s110,.s110.avatar,.s110.avatar-container{width:110px;height:110px;margin-right:15px}.avatar-circle.s140,.s140.avatar,.s140.avatar-container{width:140px;height:140px;margin-right:15px}.avatar-circle.s160,.s160.avatar,.s160.avatar-container{width:160px;height:160px;margin-right:20px}.avatar{transition-property:none;width:40px;height:40px;padding:0;background:#fdfdfd;overflow:hidden}.avatar.avatar-inline,.page-content-header .avatar{float:none;display:inline-block;margin-left:2px;flex-shrink:0;-webkit-flex-shrink:0}.avatar.avatar-inline.s16,.page-content-header .avatar.s16{margin-right:4px}.avatar.avatar-inline.s24,.page-content-header .avatar.s24{margin-right:4px}.avatar.center{font-size:14px;line-height:1.8em;text-align:center}.avatar.avatar-tile{border-radius:0;border:0}.avatar:not([href]):hover{border-color:gainsboro}.identicon{text-align:center;vertical-align:top}.identicon.s16{font-size:12px;line-height:1.33}.identicon.s24{font-size:13px;line-height:1.8}.identicon.s26{font-size:20px;line-height:1.33}.identicon.s32{font-size:20px;line-height:30px}.identicon.s40{font-size:16px;line-height:38px}.identicon.s60{font-size:32px;line-height:58px}.identicon.s70{font-size:34px;line-height:70px}.identicon.s90{font-size:36px;line-height:88px}.identicon.s100{font-size:36px;line-height:98px}.identicon.s110{font-size:40px;line-height:108px;font-weight:400}.identicon.s140{font-size:72px;line-height:138px}.identicon.s160{font-size:96px;line-height:158px}.avatar-container{overflow:hidden;display:flex}.avatar-container a{display:flex}.avatar-container .avatar{border-radius:0;border:0;height:auto;width:100%;margin:0;align-self:center}.avatar-container.s40{min-width:40px;min-height:40px}.avatar-counter,.diff-comments-more-count,.diff-notes-collapse{background-color:#c4c4c4;color:#fff;border:1px solid #f5f5f5;border-radius:1em;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:9px;line-height:16px;text-align:center}.admonitionblock td.icon{width:1%}.banner-callout{display:flex;position:relative;align-items:start}.banner-callout .banner-close{position:absolute;top:10px;right:10px;opacity:1}.banner-callout .banner-close .dismiss-icon{color:#2e2e2e;font-size:14px}.banner-callout .banner-graphic{margin:0 16px 16px 0}.banner-callout.banner-non-empty-state{border-bottom:1px solid #e5e5e5}@media (max-width: 575.98px){.banner-callout{justify-content:center;flex-direction:column;align-items:center}.banner-callout .banner-title,.banner-callout .banner-buttons{text-align:center}.banner-callout .banner-graphic{margin-left:16px}}.centered-light-block{text-align:center;color:#2e2e2e;margin:20px}.nothing-here-block{text-align:center;padding:20px;color:#2e2e2e;font-weight:400;font-size:14px}.nothing-here-block.diff-collapsed{padding:5px;line-height:34px}.nothing-here-block.diff-collapsed .click-to-expand{cursor:pointer;vertical-align:initial}.row-content-block{margin-top:0;background-color:#fafafa;padding:16px;margin-bottom:0;border-top:1px solid #eaeaea;border-bottom:1px solid #eaeaea;color:#2e2e2e}.row-content-block.oneline-block{line-height:42px}.row-content-block.white{background-color:#fff}.row-content-block.top-block{border-top:0}.row-content-block.top-block .container-fluid{background-color:inherit}.row-content-block.middle-block{margin-top:24px;margin-bottom:0}.row-content-block.clear-block{margin-bottom:15px;padding-bottom:16px}.row-content-block.second-block{margin-top:-1px;margin-bottom:0}.row-content-block.footer-block{margin-top:24px;border-bottom:0;margin-bottom:-16px}.row-content-block.content-component-block{padding:11px 0;background-color:#fff}.row-content-block .title{color:#2e2e2e}.row-content-block .oneline{line-height:35px}.row-content-block>p:last-child{margin-bottom:0}.row-content-block .block-controls{display:-webkit-flex;display:flex;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-flex:1;flex:1}.row-content-block .block-controls .control{float:left;margin-left:10px}.row-content-block.build-content{background-color:#fff;border-top:0}.sub-header-block{background-color:#fff;border-bottom:1px solid #eaeaea;padding:11px 0;margin-bottom:11px}.sub-header-block .oneline{line-height:35px}.sub-header-block.no-bottom-space{border-bottom:0;margin-bottom:0}.cover-block{text-align:center;background:#fafafa;padding-top:44px;position:relative}.cover-block .avatar-holder .avatar,.cover-block .avatar-holder .identicon{margin:0 auto;float:none}.cover-block .avatar-holder .identicon{border-radius:50%}.cover-block .cover-title{color:#2e2e2e;font-size:23px}.cover-block .cover-title h1{color:#2e2e2e;margin-bottom:6px;font-size:23px}.cover-block .cover-title .visibility-icon{display:inline-block;margin-left:5px;font-size:18px;color:#6c757d}.cover-block .cover-title p{padding:0 16px;color:#2e2e2e}.cover-block .cover-desc{color:#2e2e2e}.cover-block .cover-desc.username:last-child{padding-bottom:16px}.cover-block .cover-controls{position:absolute;top:10px;right:10px}.cover-block .cover-controls.left{left:10px;right:auto}.cover-block.groups-cover-block{background:#fff;border-bottom:1px solid #e5e5e5;text-align:left;padding:24px 0}.cover-block.groups-cover-block .group-info .cover-title{margin-top:9px}.cover-block.groups-cover-block .group-info p{margin-bottom:0}@media (max-width: 575.98px){.cover-block.groups-cover-block{text-align:center}.cover-block.groups-cover-block .avatar{float:none}}.cover-block.user-cover-block{padding:24px 0 0}.cover-block.user-cover-block .nav-links{width:100%;float:none}.cover-block.user-cover-block .nav-links.scrolling-tabs{float:none}.cover-block.user-cover-block li:first-child{margin-left:auto}.cover-block.user-cover-block li:last-child{margin-right:auto}.cover-block .group-info h1{display:inline;font-weight:400;font-size:24px;color:#2e2e2e}.block-connector{margin-top:-1px}.nav-block .controls{float:right;margin-top:8px;padding-bottom:8px}.content-block{padding:16px 0;border-bottom:1px solid #eaeaea}.content-block.oneline-block{line-height:36px}.content-block>.controls{float:right}.content-block .new-branch{margin-top:3px}.content-block-small{padding:10px 0}.landing{margin:16px auto;overflow:hidden;display:flex;position:relative;border:1px solid #73afea;border-radius:4px;background-color:#f6fafe;justify-content:center}.landing .dismiss-button{position:absolute;right:6px;top:6px;cursor:pointer;color:#73afea;z-index:1;border:0;background-color:transparent}.landing .dismiss-button:hover,.landing .dismiss-button:focus{border:0;color:#2e87e0}.landing .svg-container{align-self:center}.landing .inner-content{text-align:left;white-space:nowrap}.landing .inner-content h4{color:#2e2e2e;font-size:17px}.landing .inner-content p{color:#2e2e2e;margin-bottom:16px}@media (max-width: 767.98px){.landing{flex-direction:column}.landing .inner-content{white-space:normal;padding:0 28px;text-align:center}}.empty-state{margin:5% auto 0}.empty-state .text-content{max-width:460px;margin:0 auto;padding:16px}.empty-state .emoji-icon{display:inline-block}.empty-state .btn{margin:10px 5px}@media (max-width: 575.98px){.empty-state .btn{width:100%}}.flex-right{margin-left:auto}.btn{border-radius:3px;font-size:14px;font-weight:400;padding:6px 10px;background-color:#fff;border-color:#e5e5e5;color:#2e2e2e;color:#2e2e2e}.btn:focus,.btn:active{background-color:#ececec;box-shadow:rgba(0,0,0,0.16)}.btn:hover,.btn:focus{background-color:#f0f0f0;border-color:#e3e3e3;color:#2e2e2e}.btn:active,.btn.active{box-shadow:rgba(0,0,0,0.16);background-color:#eaeaea;border-color:#e3e3e3;color:#2e2e2e}.btn:focus:active{outline:0}.btn.btn-sm,.btn-group-sm>.btn{padding:4px 10px;font-size:13px;line-height:18px}.btn.btn-success,.btn.btn-new,.btn.btn-create,.btn.comment-btn,.btn.btn-save{background-color:#1aaa55;border-color:#168f48;color:#fff}.btn.btn-success:hover,.btn.btn-success:focus,.btn.btn-new:hover,.btn.btn-new:focus,.btn.btn-create:hover,.btn.comment-btn:hover,.btn.btn-create:focus,.btn.comment-btn:focus,.btn.btn-save:hover,.btn.btn-save:focus{background-color:#168f48;border-color:#12753a;color:#fff}.btn.btn-success:active,.btn.btn-success.active,.btn.btn-new:active,.btn.btn-new.active,.btn.btn-create:active,.btn.comment-btn:active,.btn.btn-create.active,.btn.active.comment-btn,.btn.btn-save:active,.btn.btn-save.active{box-shadow:rgba(0,0,0,0.16);background-color:#12753a;border-color:#0e5a2d;color:#fff}.btn.btn-inverted.btn-success,.btn.btn-inverted.btn-new,.btn.btn-inverted.btn-create,.btn.btn-inverted.comment-btn,.btn.btn-inverted.btn-save{background-color:#fff;color:#168f48;border-color:#1aaa55}.btn.btn-inverted.btn-success>.icon,.btn.btn-inverted.btn-new>.icon,.btn.btn-inverted.btn-create>.icon,.btn.btn-inverted.comment-btn>.icon,.btn.btn-inverted.btn-save>.icon{color:#168f48}.btn.btn-inverted.btn-success:hover,.btn.btn-inverted.btn-success:focus,.btn.btn-inverted.btn-new:hover,.btn.btn-inverted.btn-new:focus,.btn.btn-inverted.btn-create:hover,.btn.btn-inverted.comment-btn:hover,.btn.btn-inverted.btn-create:focus,.btn.btn-inverted.comment-btn:focus,.btn.btn-inverted.btn-save:hover,.btn.btn-inverted.btn-save:focus{background-color:#1aaa55;border-color:#168f48;color:#fff}.btn.btn-inverted.btn-success:hover>.icon,.btn.btn-inverted.btn-success:focus>.icon,.btn.btn-inverted.btn-new:hover>.icon,.btn.btn-inverted.btn-new:focus>.icon,.btn.btn-inverted.btn-create:hover>.icon,.btn.btn-inverted.comment-btn:hover>.icon,.btn.btn-inverted.btn-create:focus>.icon,.btn.btn-inverted.comment-btn:focus>.icon,.btn.btn-inverted.btn-save:hover>.icon,.btn.btn-inverted.btn-save:focus>.icon{color:#fff}.btn.btn-inverted.btn-success:active,.btn.btn-inverted.btn-new:active,.btn.btn-inverted.btn-create:active,.btn.btn-inverted.comment-btn:active,.btn.btn-inverted.btn-save:active{background-color:#168f48;border-color:#12753a;color:#fff}.btn.btn-inverted.btn-success:active>.icon,.btn.btn-inverted.btn-new:active>.icon,.btn.btn-inverted.btn-create:active>.icon,.btn.btn-inverted.comment-btn:active>.icon,.btn.btn-inverted.btn-save:active>.icon{color:#fff}.btn.btn-inverted.btn-remove{background-color:#fff;color:#db3b21;border-color:#db3b21}.btn.btn-inverted.btn-remove>.icon{color:#db3b21}.btn.btn-inverted.btn-remove:hover,.btn.btn-inverted.btn-remove:focus{background-color:#db3b21;border-color:#c0341d;color:#fff}.btn.btn-inverted.btn-remove:hover>.icon,.btn.btn-inverted.btn-remove:focus>.icon{color:#fff}.btn.btn-inverted.btn-remove:active{background-color:#c0341d;border-color:#a62d19;color:#fff}.btn.btn-inverted.btn-remove:active>.icon{color:#fff}.btn.btn-inverted.btn-primary,.btn.btn-inverted.btn-info{background-color:#fff;color:#1f78d1;border-color:#1f78d1}.btn.btn-inverted.btn-primary>.icon,.btn.btn-inverted.btn-info>.icon{color:#1f78d1}.btn.btn-inverted.btn-primary:hover,.btn.btn-inverted.btn-primary:focus,.btn.btn-inverted.btn-info:hover,.btn.btn-inverted.btn-info:focus{background-color:#1f78d1;border-color:#1b69b6;color:#fff}.btn.btn-inverted.btn-primary:hover>.icon,.btn.btn-inverted.btn-primary:focus>.icon,.btn.btn-inverted.btn-info:hover>.icon,.btn.btn-inverted.btn-info:focus>.icon{color:#fff}.btn.btn-inverted.btn-primary:active,.btn.btn-inverted.btn-info:active{background-color:#1b69b6;border-color:#17599c;color:#fff}.btn.btn-inverted.btn-primary:active>.icon,.btn.btn-inverted.btn-info:active>.icon{color:#fff}.btn.btn-info,.btn.btn-primary,.btn.btn-register{background-color:#1f78d1;border-color:#1b69b6;color:#fff}.btn.btn-info:hover,.btn.btn-info:focus,.btn.btn-primary:hover,.btn.btn-primary:focus,.btn.btn-register:hover,.btn.btn-register:focus{background-color:#1b69b6;border-color:#17599c;color:#fff}.btn.btn-info:active,.btn.btn-info.active,.btn.btn-primary:active,.btn.btn-primary.active,.btn.btn-register:active,.btn.btn-register.active{box-shadow:rgba(0,0,0,0.16);background-color:#17599c;border-color:#134a81;color:#fff}.btn.btn-warning{background-color:#fc9403;border-color:#de7e00;color:#fff}.btn.btn-warning:hover,.btn.btn-warning:focus{background-color:#de7e00;border-color:#c26700;color:#fff}.btn.btn-warning:active,.btn.btn-warning.active{box-shadow:rgba(0,0,0,0.16);background-color:#c26700;border-color:#a35200;color:#fff}.btn.btn-close,.btn.btn-close-color{background-color:#fff;color:#de7e00;border-color:#fc9403}.btn.btn-close>.icon,.btn.btn-close-color>.icon{color:#de7e00}.btn.btn-close:hover,.btn.btn-close:focus,.btn.btn-close-color:hover,.btn.btn-close-color:focus{background-color:#fc9403;border-color:#de7e00;color:#fff}.btn.btn-close:hover>.icon,.btn.btn-close:focus>.icon,.btn.btn-close-color:hover>.icon,.btn.btn-close-color:focus>.icon{color:#fff}.btn.btn-close:active,.btn.btn-close-color:active{background-color:#de7e00;border-color:#c26700;color:#fff}.btn.btn-close:active>.icon,.btn.btn-close-color:active>.icon{color:#fff}.btn.btn-spam{background-color:#fff;color:#db3b21;border-color:#db3b21}.btn.btn-spam>.icon{color:#db3b21}.btn.btn-spam:hover,.btn.btn-spam:focus{background-color:#db3b21;border-color:#c0341d;color:#fff}.btn.btn-spam:hover>.icon,.btn.btn-spam:focus>.icon{color:#fff}.btn.btn-spam:active{background-color:#c0341d;border-color:#a62d19;color:#fff}.btn.btn-spam:active>.icon{color:#fff}.btn.btn-danger,.btn.btn-remove,.btn.btn-red{background-color:#db3b21;border-color:#c0341d;color:#fff}.btn.btn-danger:hover,.btn.btn-danger:focus,.btn.btn-remove:hover,.btn.btn-remove:focus,.btn.btn-red:hover,.btn.btn-red:focus{background-color:#c0341d;border-color:#a62d19;color:#fff}.btn.btn-danger:active,.btn.btn-danger.active,.btn.btn-remove:active,.btn.btn-remove.active,.btn.btn-red:active,.btn.btn-red.active{box-shadow:rgba(0,0,0,0.16);background-color:#a62d19;border-color:#8b2615;color:#fff}.btn.btn-cancel{float:right}.btn.btn-grouped{margin-left:10px;float:left}.btn.btn-grouped.inline{float:none}.btn.btn-grouped.btn-sm,.btn-group-sm>.btn.btn-grouped{margin-left:7px}.btn .fa-caret-down,.btn .fa-chevron-down{margin-left:5px}.btn.dropdown-toggle .fa-caret-down,.btn.dropdown-menu-toggle .fa-caret-down{margin-left:3px}.btn.dot-highlight::after{content:'';background-color:#1f78d1;width:8px;height:8px;display:inline-block;border-radius:50%;margin-left:3px}.btn svg{height:15px;width:15px;position:relative;top:2px}.btn svg:not(:last-child),.btn .fa:not(:last-child){margin-right:5px}.btn-terminal svg{height:14px;width:18px}.btn-lg,.btn-group-lg>.btn{padding:12px 20px}.btn-transparent{color:#707070;background-color:transparent;border:0}.btn-transparent:hover,.btn-transparent:active,.btn-transparent:focus{background-color:transparent;box-shadow:none}.btn-block,.login-page input[type="submit"]{width:100%;margin:0;margin-bottom:15px}.btn-block.btn,.login-page input.btn[type="submit"]{padding:6px 0}.btn-align-content{display:flex;justify-content:center;align-items:center}.btn-group.btn-grouped{margin-left:10px;float:left}.btn-group.btn-grouped.inline{float:none}.btn-group.btn-grouped.btn-sm,.btn-group-sm>.btn-group.btn-grouped.btn{margin-left:7px}.btn-clipboard{border:0;padding:0 5px}.input-group-prepend .btn,.input-group-append .btn{border-radius:3px;font-size:14px;font-weight:400;padding:6px 10px}.input-group-prepend .btn:focus,.input-group-prepend .btn:active,.input-group-append .btn:focus,.input-group-append .btn:active{background-color:#ececec;box-shadow:rgba(0,0,0,0.16)}.input-group-prepend .btn:hover,.input-group-append .btn:hover{outline:none}.input-group-prepend .btn:active,.input-group-append .btn:active{outline:none}.input-group-prepend .btn.btn-clipboard,.input-group-append .btn.btn-clipboard{padding-left:15px;padding-right:15px}.input-group-prepend .active,.input-group-append .active{box-shadow:rgba(0,0,0,0.16);border:1px solid #e3e3e3 !important;background-color:e4e7ed !important}.btn-loading:not(.disabled) .fa{display:none}.btn-loading .fa{margin-right:5px}.btn-text-field{width:100%;text-align:left;padding:6px 16px;border-color:#e5e5e5;color:#c4c4c4;background-color:#fafafa}.btn-text-field:hover,.btn-text-field:active,.btn-text-field:focus{cursor:text;box-shadow:none;border-color:#cce2f7;color:#c4c4c4;background-color:#fafafa}.btn-build{margin-left:10px}.btn-build i{color:#707070}.clone-dropdown-btn a{color:#555}.clone-dropdown-btn a:hover,.clone-dropdown-btn .participants-more .btn-link:hover,.participants-more .clone-dropdown-btn .btn-link:hover,.clone-dropdown-btn .user-list-more .btn-link:hover,.user-list-more .clone-dropdown-btn .btn-link:hover{text-decoration:none}.btn-static{background-color:#fafafa !important;border:1px solid #e8e8e8;cursor:default}.btn-static:active{-moz-box-shadow:inset 0 0 0 #fff;-webkit-box-shadow:inset 0 0 0 #fff;box-shadow:inset 0 0 0 #fff}.btn-inverted-secondary{background-color:#fff;color:#1f78d1;border-color:#1f78d1}.btn-inverted-secondary>.icon{color:#1f78d1}.btn-inverted-secondary:hover,.btn-inverted-secondary:focus{background-color:#1f78d1;border-color:#1b69b6;color:#fff}.btn-inverted-secondary:hover>.icon,.btn-inverted-secondary:focus>.icon{color:#fff}.btn-inverted-secondary:active{background-color:#1b69b6;border-color:#17599c;color:#fff}.btn-inverted-secondary:active>.icon{color:#fff}@media (max-width: 575.98px){.btn-wide-on-xs{width:100%}}.btn-blank,.right-sidebar .title .lock-edit,.right-sidebar .title .edit-link{padding:0;background:transparent;border:0;border-radius:0}.btn-blank:hover,.right-sidebar .title .lock-edit:hover,.right-sidebar .title .edit-link:hover,.btn-blank:active,.right-sidebar .title .lock-edit:active,.right-sidebar .title .edit-link:active,.btn-blank:focus,.right-sidebar .title .lock-edit:focus,.right-sidebar .title .edit-link:focus{outline:0;background:transparent;box-shadow:none}.btn-link{padding:0;background-color:transparent;color:#1b69b6;font-weight:normal;border-radius:0;border-color:transparent}.btn-link:hover,.btn-link:active,.btn-link:focus{color:#134a81;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.btn-secondary-hover-link{color:#707070}.btn-link.btn-secondary-hover-link:hover,.btn-link.btn-secondary-hover-link:active,.btn-link.btn-secondary-hover-link:focus{color:#1b69b6;text-decoration:none}.btn-link.btn-primary-hover-link{color:inherit}.btn-link.btn-primary-hover-link:hover,.btn-link.btn-primary-hover-link:active,.btn-link.btn-primary-hover-link:focus{color:#1b69b6;text-decoration:none}.btn-missing,.project-stats .nav .btn-missing{color:#707070;border:1px dashed #b5b5b5;border-radius:4px}.btn-missing:hover,.project-stats .nav .btn-missing:hover,.btn-missing:active,.project-stats .nav .btn-missing:active,.btn-missing:focus,.project-stats .nav .btn-missing:focus{color:#707070;background-color:#f0f0f0}.btn-svg svg{height:16px;width:16px;top:0;vertical-align:text-top}.btn.disabled,.btn[disabled],fieldset[disabled] .btn,.dropdown-toggle[disabled],[disabled].dropdown-menu-toggle,.btn.disabled:hover,.btn[disabled]:hover,fieldset[disabled] .btn:hover,.dropdown-toggle[disabled]:hover,[disabled].dropdown-menu-toggle:hover{background-color:#fafafa !important;border-color:#dfdfdf !important;color:#919191 !important;opacity:1 !important;cursor:default !important}.btn.disabled i,.btn[disabled] i,fieldset[disabled] .btn i,.dropdown-toggle[disabled] i,[disabled].dropdown-menu-toggle i,.btn.disabled:hover i,.btn[disabled]:hover i,fieldset[disabled] .btn:hover i,.dropdown-toggle[disabled]:hover i,[disabled].dropdown-menu-toggle:hover i{color:#919191 !important}[readonly]{cursor:default}.btn-no-padding{padding:0}.badge.badge-pill,.shortcut-mappings .key{font-weight:400;background-color:rgba(0,0,0,0.07);color:#707070;vertical-align:baseline}.calender-block{padding-left:0;padding-right:0;border-top:0;direction:rtl}@media (min-width: 576px) and (max-width: 576px){.calender-block{overflow-x:auto}}.user-calendar-activities{direction:ltr}.user-calendar-activities .str-truncated{max-width:70%}.user-calendar-activities .user-calendar-activities-loading{font-size:24px}.user-calendar{text-align:center}.user-calendar .calendar{display:inline-block}.user-contrib-cell:hover{cursor:pointer;stroke:#000}.user-contrib-text{font-size:12px;fill:#959494}.calendar-hint{margin-top:-23px;float:right;font-size:12px;direction:ltr}.pika-single.gitlab-theme .pika-label{color:#707070;font-size:14px;font-weight:400}.pika-single.gitlab-theme th{padding:2px 0;color:#b2b2b2;font-weight:400;text-transform:lowercase;border-top:1px solid rgba(0,0,0,0.1)}.pika-single.gitlab-theme abbr{cursor:default}.pika-single.gitlab-theme td{border:1px solid rgba(0,0,0,0.1)}.pika-single.gitlab-theme td:first-child{border-left:0}.pika-single.gitlab-theme td:last-child{border-right:0}.pika-single.gitlab-theme .pika-day{border-radius:0;background-color:#fff;text-align:center}.pika-single.gitlab-theme .is-today .pika-day{color:inherit;font-weight:400}.pika-single.gitlab-theme .is-selected .pika-day,.pika-single.gitlab-theme .pika-day:hover,.pika-single.gitlab-theme .is-today .pika-day{background:#eee;color:#2e2e2e;box-shadow:none}.bs-callout{margin:16px 0;padding:16px;border-left:3px solid #e5e5e5;color:#2e2e2e;background:#fafafa}.bs-callout h4{margin-top:0;margin-bottom:5px}.bs-callout p:last-child{margin-bottom:0}.bs-callout-danger{background-color:#fbe5e1;border-color:#f2b4a9;color:#a62d19}.bs-callout-warning{background-color:#fff1de;border-color:#fed69f;color:#c26700}.bs-callout-info{background-color:#e4f0fb;border-color:#b8d6f4;color:#17599c}.bs-callout-success{background-color:#dcf5e7;border-color:#b3e6c8;color:#12753a}.cgray,.commit.inline-commit .committed_ago,.generic_commit_status.inline-commit .committed_ago{color:#2e2e2e}.clgray{color:#bbb}.cred{color:#db3b21}.cgreen{color:#168f48}.cdark{color:#444}.text-plain,.text-plain:hover{color:#2e2e2e}.text-secondary{color:#707070}.text-tertiary{color:#919191}.text-primary,.text-primary:hover{color:#1f78d1}.text-success,.text-success:hover{color:#1aaa55}.text-danger,.text-danger:hover{color:#db3b21}.text-warning,.text-warning:hover{color:#fc9403}.text-info,.text-info:hover{color:#1f78d1}.hint{font-style:italic;color:#999}.light,.description-block{color:#2e2e2e}.slead{color:#2e2e2e;font-size:14px;margin-bottom:12px;font-weight:400;line-height:24px}.bold{font-weight:600}.tab-content{overflow:visible}pre.clean{background:none;border:0;margin:0;padding:0}pre.card.card-body-pre,pre.card-body-pre.card-slim{border:1px solid #eee;background:#fafafa;border-radius:0;color:#555}pre.wrap{word-break:break-word;white-space:pre-wrap}hr{margin:24px 0;border-top:1px solid #e1e1e1}.str-truncated{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:82%}.str-truncated-60{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:60%}.str-truncated-100{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:100%}.block-truncated{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.block-truncated>div,.block-truncated .str-truncated{display:inline}.item-title{font-weight:600}.author_link,.author-link{color:#1b69b6}.back-link{font-size:14px}table a code{position:relative;top:-2px;margin-right:3px}table td.permission-x{background:#d9edf7 !important;text-align:center}.loading{margin:20px auto;height:40px;color:#555;font-size:32px;text-align:center}span.update-author{display:block;color:#999;font-weight:400;font-style:italic}span.update-author strong{font-weight:600;font-style:normal}.field_with_errors{display:inline}p.time{color:#999;font-size:90%;margin:30px 3px 3px 2px}.highlight{text-shadow:none}.thin_area{height:150px}li.note img{max-width:100%}li.note .note-title li{border-bottom:0 !important}.markdown img{max-width:100%}.wiki_content code,.readme code{background-color:inherit}.project_member_show td:first-child{color:#aaa}.rss-icon img{width:24px;vertical-align:top}.rss-icon strong{line-height:24px}.show-suppressed-diff,.show-all-commits{cursor:pointer}.git_error_tips{text-align:left;margin-top:40px}.git_error_tips pre{background:#fff;border:0;font-size:12px}.error-message{padding:10px;background:#e05842;margin:0;color:#fff}.error-message a{color:#fff;text-decoration:underline}.warning_message{border-left:4px solid #fed69f;color:#c26700;padding:10px;margin-bottom:10px;background:#fff1de;padding-left:20px}.warning_message.centered{text-align:center}.gitlab-promo a{color:#aaa;margin-right:30px}.milestone .progress{margin-top:4px;box-shadow:none;background-color:#ededed}.control-group .controls span.descr{position:relative;top:2px;left:5px;color:#666}img.emoji{height:20px;vertical-align:top;width:20px;margin-top:1px}.chart{overflow:hidden;height:220px}.description-block{margin-bottom:10px}.side-filters fieldset{margin-bottom:15px}.footer-links{margin-bottom:20px}.footer-links a{margin-right:15px}.card.card-body,.search_box,.card-body.card-slim{margin-bottom:16px}.card.card-body hr,.search_box hr,.card-body.card-slim hr{border-color:#eee}.search_box{text-align:center}.header-with-avatar h3{margin:0;font-weight:600}.header-with-avatar .username{font-size:18px;color:#666;margin-top:8px}.header-with-avatar .description{font-size:14px;color:#666;margin-top:8px}.profiler-results{top:73px !important}.profiler-results .profiler-button,.profiler-results .profiler-controls{border-color:#eee !important}.dropzone .dz-preview .dz-progress{border-color:#e5e5e5 !important}.dropzone .dz-preview .dz-progress .dz-upload{background:#1aaa55 !important}.dz-message{margin:0}.space-right{margin-right:10px}.alert,.flash-container .flash-notice,.flash-container .flash-warning,.flash-container .flash-alert,.flash-container .flash-success,.progress{margin-bottom:16px}.project-item-select-holder{display:inline-block;position:relative}.project-item-select-holder .project-item-select{position:absolute;top:0;right:0;min-width:250px;visibility:hidden}.content-separator{margin-left:-16px;margin-right:-16px;border-top:1px solid #e5e5e5}.hide-bottom-border{border-bottom:0 !important}.gl-accessibility:focus{display:flex;align-items:center;top:1px;left:1px;width:auto;height:100%;padding:0 10px;clip:auto;text-decoration:none;color:#2e2e2e;background:#fafafa;z-index:1}.bordered-box{border:1px solid #e5e5e5;border-radius:4px}.tooltip .tooltip-inner{word-wrap:break-word}.disabled-content{pointer-events:none;opacity:.5}.break-word{word-wrap:break-word}.prepend-top-0{margin-top:0}.prepend-top-2{margin-top:2px}.prepend-top-5{margin-top:5px}.prepend-top-8{margin-top:8px}.prepend-top-10{margin-top:10px}.prepend-top-15{margin-top:15px}.prepend-top-default{margin-top:16px !important}.prepend-top-16{margin-top:16px}.prepend-top-20{margin-top:20px}.prepend-left-4{margin-left:4px}.prepend-left-5{margin-left:5px}.prepend-left-8{margin-left:8px}.prepend-left-10{margin-left:10px}.prepend-left-default{margin-left:16px}.prepend-left-20{margin-left:20px}.append-right-5{margin-right:5px}.append-right-8,.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-icon,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-icon{margin-right:8px}.append-right-10{margin-right:10px}.append-right-default{margin-right:16px}.append-right-20{margin-right:20px}.append-bottom-0{margin-bottom:0}.append-bottom-5{margin-bottom:5px}.append-bottom-8{margin-bottom:8px}.append-bottom-10{margin-bottom:10px}.append-bottom-15{margin-bottom:15px}.append-bottom-20{margin-bottom:20px}.append-bottom-default{margin-bottom:16px}.inline{display:inline-block}.center{text-align:center}.vertical-align-middle{vertical-align:middle}.dropdown{position:relative}.dropdown .btn-link:hover{cursor:pointer}.show.dropdown .dropdown-menu,.show.dropdown .dropdown-menu-nav{transform:translateY(0);display:block;min-height:40px;max-height:312px;overflow-y:auto}@media (max-width: 575.98px){.show.dropdown .dropdown-menu,.show.dropdown .dropdown-menu-nav{width:100%}}.show.dropdown .dropdown-menu.frequent-items-dropdown-menu,.show.dropdown .dropdown-menu-nav.frequent-items-dropdown-menu{padding:0;overflow-y:initial;max-height:initial}.show.dropdown .dropdown-toggle,.show.dropdown .dropdown-menu-toggle,.show.dropdown .dropdown-menu-toggle{border-color:#c4c4c4}.show.dropdown .dropdown-toggle .fa-chevron-down,.show.dropdown .dropdown-menu-toggle .fa-chevron-down,.show.dropdown .dropdown-menu-toggle .fa-chevron-down{color:#c4c4c4}.show.dropdown [data-toggle='dropdown']{outline:0}.search-input-container .dropdown-menu{margin-top:11px}.dropdown-toggle,.dropdown-menu-toggle{padding:6px 8px 6px 10px;background-color:#fff;color:#2e2e2e;font-size:14px;text-align:left;border:1px solid #e5e5e5;border-radius:3px;white-space:nowrap}.dropdown-toggle:disabled.read-only,.dropdown-menu-toggle:disabled.read-only{color:#2e2e2e !important}.dropdown-toggle.no-outline,.no-outline.dropdown-menu-toggle{outline:0}.dropdown-toggle.large,.large.dropdown-menu-toggle{width:200px}.dropdown-toggle.wide,.wide.dropdown-menu-toggle{width:100%}.dropdown-toggle.wide+.dropdown-select,.wide.dropdown-menu-toggle+.dropdown-select{width:100%}.dropdown-toggle.dynamic,.dynamic.dropdown-menu-toggle{width:auto;min-width:160px;max-width:100%;padding-right:25px}.dropdown-toggle .fa,.dropdown-menu-toggle .fa{color:#c4c4c4}.dropdown-toggle .fa-chevron-down,.dropdown-menu-toggle .fa-chevron-down{font-size:10px;position:relative;top:-2px;margin-left:5px}.dropdown-toggle:hover,.dropdown-menu-toggle:hover{border-color:#c4c4c4}.dropdown-toggle:hover .fa-chevron-down,.dropdown-menu-toggle:hover .fa-chevron-down{color:#c4c4c4}.dropdown-toggle:focus:active,.dropdown-menu-toggle:focus:active{border-color:#c1c1c1;outline:0}.dropdown-toggle:focus:active .fa-chevron-down,.dropdown-menu-toggle:focus:active .fa-chevron-down{color:#c4c4c4}.dropdown-menu-toggle{padding-right:25px;position:relative;width:163px;text-overflow:ellipsis;overflow:hidden}.dropdown-menu-toggle .fa{position:absolute}.dropdown-menu-toggle .fa.fa-spinner{font-size:16px;margin-top:-3px}.dropdown-menu-toggle .fa-chevron-down,.dropdown-menu-toggle .fa-spinner{position:absolute;top:11px;right:8px}.dropdown-menu,.dropdown-menu-nav{display:none;position:absolute;width:auto;top:100%;z-index:300;min-width:240px;max-width:500px;margin-top:4px;margin-bottom:24px;font-size:14px;font-weight:400;padding:8px 0;background-color:#fff;border:1px solid #e5e5e5;border-radius:3px;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.dropdown-menu.dropdown-open-top,.dropdown-menu-nav.dropdown-open-top{margin-bottom:4px}.dropdown-menu.dropdown-open-left,.dropdown-menu-nav.dropdown-open-left{right:0;left:auto}.dropdown-menu.is-loading .dropdown-content,.dropdown-menu-nav.is-loading .dropdown-content{display:none}.dropdown-menu.is-loading .dropdown-loading,.dropdown-menu-nav.is-loading .dropdown-loading{display:block}.dropdown-menu .shortcut-mappings,.dropdown-menu-nav .shortcut-mappings{display:none}.dropdown-menu.shortcuts .shortcut-mappings,.dropdown-menu-nav.shortcuts .shortcut-mappings{display:inline-block;margin-right:5px}.dropdown-menu ul,.dropdown-menu-nav ul{margin:0;padding:0}.dropdown-menu li,.dropdown-menu-nav li{display:block;text-align:left;list-style:none;padding:0 1px}.dropdown-menu li a,.dropdown-menu li button,.dropdown-menu li .menu-item,.dropdown-menu-nav li a,.dropdown-menu-nav li button,.dropdown-menu-nav li .menu-item{background:transparent;border:0;border-radius:0;box-shadow:none;display:block;font-weight:400;position:relative;padding:8px 16px;color:#2e2e2e;line-height:normal;white-space:normal;overflow:hidden;text-align:left;width:100%}.dropdown-menu li a.text-danger,.dropdown-menu li button.text-danger,.dropdown-menu li .menu-item.text-danger,.dropdown-menu-nav li a.text-danger,.dropdown-menu-nav li button.text-danger,.dropdown-menu-nav li .menu-item.text-danger{color:#db3b21}.dropdown-menu li a.disable-hover,.dropdown-menu li button.disable-hover,.dropdown-menu li .menu-item.disable-hover,.dropdown-menu-nav li a.disable-hover,.dropdown-menu-nav li button.disable-hover,.dropdown-menu-nav li .menu-item.disable-hover{text-decoration:none}.dropdown-menu li a:not(.disable-hover):hover,.dropdown-menu li .participants-more .btn-link:not(.disable-hover):hover,.participants-more .dropdown-menu li .btn-link:not(.disable-hover):hover,.dropdown-menu li .user-list-more .btn-link:not(.disable-hover):hover,.user-list-more .dropdown-menu li .btn-link:not(.disable-hover):hover,.dropdown-menu li a:active,.dropdown-menu li a:focus,.dropdown-menu li a.is-focused,.dropdown-menu li button:not(.disable-hover):hover,.dropdown-menu li button:active,.dropdown-menu li button:focus,.dropdown-menu li button.is-focused,.dropdown-menu li .menu-item:not(.disable-hover):hover,.dropdown-menu li .menu-item:active,.dropdown-menu li .menu-item:focus,.dropdown-menu li .menu-item.is-focused,.dropdown-menu-nav li a:not(.disable-hover):hover,.dropdown-menu-nav li .participants-more .btn-link:not(.disable-hover):hover,.participants-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover,.dropdown-menu-nav li .user-list-more .btn-link:not(.disable-hover):hover,.user-list-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover,.dropdown-menu-nav li a:active,.dropdown-menu-nav li a:focus,.dropdown-menu-nav li a.is-focused,.dropdown-menu-nav li button:not(.disable-hover):hover,.dropdown-menu-nav li button:active,.dropdown-menu-nav li button:focus,.dropdown-menu-nav li button.is-focused,.dropdown-menu-nav li .menu-item:not(.disable-hover):hover,.dropdown-menu-nav li .menu-item:active,.dropdown-menu-nav li .menu-item:focus,.dropdown-menu-nav li .menu-item.is-focused{background-color:#eee;color:#2e2e2e;outline:0;text-decoration:none}.dropdown-menu li a:not(.disable-hover):hover.text-danger,.dropdown-menu li .participants-more .btn-link:not(.disable-hover).text-danger:hover,.participants-more .dropdown-menu li .btn-link:not(.disable-hover).text-danger:hover,.dropdown-menu li .user-list-more .btn-link:not(.disable-hover).text-danger:hover,.user-list-more .dropdown-menu li .btn-link:not(.disable-hover).text-danger:hover,.dropdown-menu li a:active.text-danger,.dropdown-menu li a:focus.text-danger,.dropdown-menu li a.is-focused.text-danger,.dropdown-menu li button:not(.disable-hover):hover.text-danger,.dropdown-menu li button:active.text-danger,.dropdown-menu li button:focus.text-danger,.dropdown-menu li button.is-focused.text-danger,.dropdown-menu li .menu-item:not(.disable-hover):hover.text-danger,.dropdown-menu li .menu-item:active.text-danger,.dropdown-menu li .menu-item:focus.text-danger,.dropdown-menu li .menu-item.is-focused.text-danger,.dropdown-menu-nav li a:not(.disable-hover):hover.text-danger,.dropdown-menu-nav li .participants-more .btn-link:not(.disable-hover).text-danger:hover,.participants-more .dropdown-menu-nav li .btn-link:not(.disable-hover).text-danger:hover,.dropdown-menu-nav li .user-list-more .btn-link:not(.disable-hover).text-danger:hover,.user-list-more .dropdown-menu-nav li .btn-link:not(.disable-hover).text-danger:hover,.dropdown-menu-nav li a:active.text-danger,.dropdown-menu-nav li a:focus.text-danger,.dropdown-menu-nav li a.is-focused.text-danger,.dropdown-menu-nav li button:not(.disable-hover):hover.text-danger,.dropdown-menu-nav li button:active.text-danger,.dropdown-menu-nav li button:focus.text-danger,.dropdown-menu-nav li button.is-focused.text-danger,.dropdown-menu-nav li .menu-item:not(.disable-hover):hover.text-danger,.dropdown-menu-nav li .menu-item:active.text-danger,.dropdown-menu-nav li .menu-item:focus.text-danger,.dropdown-menu-nav li .menu-item.is-focused.text-danger{color:#db3b21}.dropdown-menu li a:not(.disable-hover):hover .avatar,.dropdown-menu li .participants-more .btn-link:not(.disable-hover):hover .avatar,.participants-more .dropdown-menu li .btn-link:not(.disable-hover):hover .avatar,.dropdown-menu li .user-list-more .btn-link:not(.disable-hover):hover .avatar,.user-list-more .dropdown-menu li .btn-link:not(.disable-hover):hover .avatar,.dropdown-menu li a:active .avatar,.dropdown-menu li a:focus .avatar,.dropdown-menu li a.is-focused .avatar,.dropdown-menu li button:not(.disable-hover):hover .avatar,.dropdown-menu li button:active .avatar,.dropdown-menu li button:focus .avatar,.dropdown-menu li button.is-focused .avatar,.dropdown-menu li .menu-item:not(.disable-hover):hover .avatar,.dropdown-menu li .menu-item:active .avatar,.dropdown-menu li .menu-item:focus .avatar,.dropdown-menu li .menu-item.is-focused .avatar,.dropdown-menu-nav li a:not(.disable-hover):hover .avatar,.dropdown-menu-nav li .participants-more .btn-link:not(.disable-hover):hover .avatar,.participants-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover .avatar,.dropdown-menu-nav li .user-list-more .btn-link:not(.disable-hover):hover .avatar,.user-list-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover .avatar,.dropdown-menu-nav li a:active .avatar,.dropdown-menu-nav li a:focus .avatar,.dropdown-menu-nav li a.is-focused .avatar,.dropdown-menu-nav li button:not(.disable-hover):hover .avatar,.dropdown-menu-nav li button:active .avatar,.dropdown-menu-nav li button:focus .avatar,.dropdown-menu-nav li button.is-focused .avatar,.dropdown-menu-nav li .menu-item:not(.disable-hover):hover .avatar,.dropdown-menu-nav li .menu-item:active .avatar,.dropdown-menu-nav li .menu-item:focus .avatar,.dropdown-menu-nav li .menu-item.is-focused .avatar{border-color:#fff}.dropdown-menu li a:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu li .participants-more .btn-link:not(.disable-hover):hover .badge.badge-pill,.participants-more .dropdown-menu li .btn-link:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu li .user-list-more .btn-link:not(.disable-hover):hover .badge.badge-pill,.user-list-more .dropdown-menu li .btn-link:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu li a:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li a:not(.disable-hover):hover .key,.dropdown-menu li .participants-more .btn-link:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li .participants-more .btn-link:not(.disable-hover):hover .key,.participants-more .dropdown-menu li .btn-link:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .participants-more .dropdown-menu li .btn-link:not(.disable-hover):hover .key,.dropdown-menu li .user-list-more .btn-link:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li .user-list-more .btn-link:not(.disable-hover):hover .key,.user-list-more .dropdown-menu li .btn-link:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .user-list-more .dropdown-menu li .btn-link:not(.disable-hover):hover .key,.dropdown-menu li a:active .badge.badge-pill,.dropdown-menu li a:active .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li a:active .key,.dropdown-menu li a:focus .badge.badge-pill,.dropdown-menu li a:focus .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li a:focus .key,.dropdown-menu li a.is-focused .badge.badge-pill,.dropdown-menu li a.is-focused .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li a.is-focused .key,.dropdown-menu li button:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu li button:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li button:not(.disable-hover):hover .key,.dropdown-menu li button:active .badge.badge-pill,.dropdown-menu li button:active .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li button:active .key,.dropdown-menu li button:focus .badge.badge-pill,.dropdown-menu li button:focus .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li button:focus .key,.dropdown-menu li button.is-focused .badge.badge-pill,.dropdown-menu li button.is-focused .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li button.is-focused .key,.dropdown-menu li .menu-item:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu li .menu-item:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li .menu-item:not(.disable-hover):hover .key,.dropdown-menu li .menu-item:active .badge.badge-pill,.dropdown-menu li .menu-item:active .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li .menu-item:active .key,.dropdown-menu li .menu-item:focus .badge.badge-pill,.dropdown-menu li .menu-item:focus .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li .menu-item:focus .key,.dropdown-menu li .menu-item.is-focused .badge.badge-pill,.dropdown-menu li .menu-item.is-focused .shortcut-mappings .key,.shortcut-mappings .dropdown-menu li .menu-item.is-focused .key,.dropdown-menu-nav li a:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu-nav li .participants-more .btn-link:not(.disable-hover):hover .badge.badge-pill,.participants-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu-nav li .user-list-more .btn-link:not(.disable-hover):hover .badge.badge-pill,.user-list-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu-nav li a:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li a:not(.disable-hover):hover .key,.dropdown-menu-nav li .participants-more .btn-link:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li .participants-more .btn-link:not(.disable-hover):hover .key,.participants-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .participants-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover .key,.dropdown-menu-nav li .user-list-more .btn-link:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li .user-list-more .btn-link:not(.disable-hover):hover .key,.user-list-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .user-list-more .dropdown-menu-nav li .btn-link:not(.disable-hover):hover .key,.dropdown-menu-nav li a:active .badge.badge-pill,.dropdown-menu-nav li a:active .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li a:active .key,.dropdown-menu-nav li a:focus .badge.badge-pill,.dropdown-menu-nav li a:focus .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li a:focus .key,.dropdown-menu-nav li a.is-focused .badge.badge-pill,.dropdown-menu-nav li a.is-focused .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li a.is-focused .key,.dropdown-menu-nav li button:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu-nav li button:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li button:not(.disable-hover):hover .key,.dropdown-menu-nav li button:active .badge.badge-pill,.dropdown-menu-nav li button:active .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li button:active .key,.dropdown-menu-nav li button:focus .badge.badge-pill,.dropdown-menu-nav li button:focus .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li button:focus .key,.dropdown-menu-nav li button.is-focused .badge.badge-pill,.dropdown-menu-nav li button.is-focused .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li button.is-focused .key,.dropdown-menu-nav li .menu-item:not(.disable-hover):hover .badge.badge-pill,.dropdown-menu-nav li .menu-item:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li .menu-item:not(.disable-hover):hover .key,.dropdown-menu-nav li .menu-item:active .badge.badge-pill,.dropdown-menu-nav li .menu-item:active .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li .menu-item:active .key,.dropdown-menu-nav li .menu-item:focus .badge.badge-pill,.dropdown-menu-nav li .menu-item:focus .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li .menu-item:focus .key,.dropdown-menu-nav li .menu-item.is-focused .badge.badge-pill,.dropdown-menu-nav li .menu-item.is-focused .shortcut-mappings .key,.shortcut-mappings .dropdown-menu-nav li .menu-item.is-focused .key{background-color:#dfedfb}.dropdown-menu li a.dropdown-menu-user-link,.dropdown-menu li button.dropdown-menu-user-link,.dropdown-menu li .menu-item.dropdown-menu-user-link,.dropdown-menu-nav li a.dropdown-menu-user-link,.dropdown-menu-nav li button.dropdown-menu-user-link,.dropdown-menu-nav li .menu-item.dropdown-menu-user-link{line-height:16px;padding-top:10px;padding-bottom:7px;white-space:nowrap}.dropdown-menu li a.dropdown-menu-user-link .dropdown-menu-user-username,.dropdown-menu li button.dropdown-menu-user-link .dropdown-menu-user-username,.dropdown-menu li .menu-item.dropdown-menu-user-link .dropdown-menu-user-username,.dropdown-menu-nav li a.dropdown-menu-user-link .dropdown-menu-user-username,.dropdown-menu-nav li button.dropdown-menu-user-link .dropdown-menu-user-username,.dropdown-menu-nav li .menu-item.dropdown-menu-user-link .dropdown-menu-user-username{display:block}.dropdown-menu li a .icon-play,.dropdown-menu li button .icon-play,.dropdown-menu li .menu-item .icon-play,.dropdown-menu-nav li a .icon-play,.dropdown-menu-nav li button .icon-play,.dropdown-menu-nav li .menu-item .icon-play{fill:#707070;margin-right:6px;height:12px;width:11px}.dropdown-menu .divider,.dropdown-menu-nav .divider{height:1px;margin:4px 0;padding:0;background-color:rgba(0,0,0,0.1)}.dropdown-menu .divider:hover,.dropdown-menu-nav .divider:hover{background-color:rgba(0,0,0,0.1)}.dropdown-menu .separator,.dropdown-menu-nav .separator{width:100%;height:1px;margin-top:8px;margin-bottom:8px;background-color:rgba(0,0,0,0.1)}.dropdown-menu .dropdown-menu-empty-item a:hover,.dropdown-menu .dropdown-menu-empty-item .participants-more .btn-link:hover,.participants-more .dropdown-menu .dropdown-menu-empty-item .btn-link:hover,.dropdown-menu .dropdown-menu-empty-item .user-list-more .btn-link:hover,.user-list-more .dropdown-menu .dropdown-menu-empty-item .btn-link:hover,.dropdown-menu .dropdown-menu-empty-item a:focus,.dropdown-menu-nav .dropdown-menu-empty-item a:hover,.dropdown-menu-nav .dropdown-menu-empty-item .participants-more .btn-link:hover,.participants-more .dropdown-menu-nav .dropdown-menu-empty-item .btn-link:hover,.dropdown-menu-nav .dropdown-menu-empty-item .user-list-more .btn-link:hover,.user-list-more .dropdown-menu-nav .dropdown-menu-empty-item .btn-link:hover,.dropdown-menu-nav .dropdown-menu-empty-item a:focus{background-color:transparent}.dropdown-menu .dropdown-header,.dropdown-menu-nav .dropdown-header{color:#707070;font-size:13px;line-height:22px;padding:8px 16px}.dropdown-menu.capitalize-header .dropdown-header,.dropdown-menu-nav.capitalize-header .dropdown-header{text-transform:capitalize}.dropdown-menu .dropdown-bold-header,.dropdown-menu-nav .dropdown-bold-header{font-weight:600;line-height:22px;padding:0 16px}.dropdown-menu .separator+.dropdown-header,.dropdown-menu .separator+.dropdown-bold-header,.dropdown-menu-nav .separator+.dropdown-header,.dropdown-menu-nav .separator+.dropdown-bold-header{padding-top:10px}.dropdown-menu .unclickable,.dropdown-menu-nav .unclickable{cursor:not-allowed;padding:5px 8px;color:#707070}.dropdown-menu .badge.badge-pill+span:not(.badge.badge-pill),.dropdown-menu .shortcut-mappings .key+span:not(.badge.badge-pill),.shortcut-mappings .dropdown-menu .key+span:not(.badge.badge-pill),.dropdown-menu-nav .badge.badge-pill+span:not(.badge.badge-pill),.dropdown-menu-nav .shortcut-mappings .key+span:not(.badge.badge-pill),.shortcut-mappings .dropdown-menu-nav .key+span:not(.badge.badge-pill){margin-right:40px}.droplab-dropdown .dropdown-toggle>i,.droplab-dropdown .dropdown-menu-toggle>i{pointer-events:none}.droplab-dropdown .dropdown-menu li{cursor:pointer}.droplab-dropdown .dropdown-menu li.droplab-item-active button{background-color:#eee;color:#2e2e2e;outline:0}.droplab-dropdown .dropdown-menu li.droplab-item-active button.text-danger{color:#db3b21}.droplab-dropdown .dropdown-menu li.droplab-item-active button .avatar{border-color:#fff}.droplab-dropdown .dropdown-menu li>a,.droplab-dropdown .dropdown-menu li>button{display:flex;margin:0;text-overflow:inherit;text-align:left}.droplab-dropdown .dropdown-menu li>a.btn .fa:not(:last-child),.droplab-dropdown .dropdown-menu li>button.btn .fa:not(:last-child){margin-left:5px}.droplab-dropdown .dropdown-menu li.droplab-item-selected i{visibility:visible}.droplab-dropdown .dropdown-menu li .icon{visibility:hidden}.droplab-dropdown .dropdown-menu li .description{display:inline-block;white-space:normal;margin-left:5px}.droplab-dropdown .dropdown-menu li .description p{margin-bottom:0}.droplab-dropdown .icon{display:inline-block;vertical-align:top;padding-top:2px}.droplab-dropdown .dropdown-menu,.droplab-dropdown .dropdown-menu-nav{display:none;opacity:1;visibility:visible;transform:translateY(0)}.comment-type-dropdown.show .dropdown-menu{display:block}.filtered-search-box-input-container .dropdown-menu,.filtered-search-box-input-container .dropdown-menu-nav{max-width:280px}.dropdown-menu-drop-up{top:auto;bottom:100%}.dropdown-menu-large{width:340px}.dropdown-menu-no-wrap a{white-space:normal}.dropdown-menu-full-width{width:100%}.dropdown-menu-paging .dropdown-page-two,.dropdown-menu-paging .dropdown-menu-back{display:none}.dropdown-menu-paging.is-page-two .dropdown-page-one{display:none}.dropdown-menu-paging.is-page-two .dropdown-page-two,.dropdown-menu-paging.is-page-two .dropdown-menu-back{display:block}.dropdown-menu-paging.is-page-two .dropdown-content{padding:0 10px}.dropdown-menu-user .avatar{float:left;width:32px;height:32px;margin:0 10px 0 0}.dropdown-menu-user-full-name{display:block;font-weight:400;line-height:16px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.dropdown-menu-user-username{display:block;line-height:16px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.dropdown-select{width:300px}@media (max-width: 767.98px){.dropdown-select{width:100%}}.dropdown-menu-selectable li a,.dropdown-menu-selectable li button{padding:8px 40px;position:relative}.dropdown-menu-selectable li a.is-indeterminate,.dropdown-menu-selectable li a.is-active,.dropdown-menu-selectable li button.is-indeterminate,.dropdown-menu-selectable li button.is-active{color:#2e2e2e}.dropdown-menu-selectable li a.is-indeterminate::before,.dropdown-menu-selectable li a.is-active::before,.dropdown-menu-selectable li button.is-indeterminate::before,.dropdown-menu-selectable li button.is-active::before{position:absolute;left:16px;top:16px;transform:translateY(-50%);font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu-selectable li a.is-indeterminate.dropdown-menu-user-link::before,.dropdown-menu-selectable li a.is-active.dropdown-menu-user-link::before,.dropdown-menu-selectable li button.is-indeterminate.dropdown-menu-user-link::before,.dropdown-menu-selectable li button.is-active.dropdown-menu-user-link::before{top:50%}.dropdown-menu-selectable li a.is-indeterminate::before,.dropdown-menu-selectable li button.is-indeterminate::before{content:'\f068'}.dropdown-menu-selectable li a.is-active::before,.dropdown-menu-selectable li button.is-active::before{content:'\f00c'}.dropdown-title{position:relative;padding:2px 25px 10px;margin:0 10px 10px;font-weight:600;line-height:1;text-align:center;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid rgba(0,0,0,0.1);overflow:hidden}.dropdown-title-button{position:absolute;top:0;padding:0;color:#bfbfbf;font-size:14px;border:0;background:none;outline:0}.dropdown-title-button:hover{color:#999999}.dropdown-menu-close{right:5px;width:20px;height:20px;top:-1px}.dropdown-menu-back{left:7px;top:2px}.dropdown-input{position:relative;margin-bottom:10px;padding:0 10px}.dropdown-input .fa{position:absolute;top:10px;right:20px;color:#c7c7c7;font-size:12px;pointer-events:none}.dropdown-input .dropdown-input-clear{display:none;cursor:pointer;pointer-events:all;right:22px;top:9px;font-size:14px}.dropdown-input.has-value .dropdown-input-clear{display:block}.dropdown-input.has-value .dropdown-input-search{display:none}.dropdown-input-field,.default-dropdown-input{display:block;width:100%;min-height:30px;padding:0 7px;color:#555;line-height:30px;border:1px solid rgba(0,0,0,0.1);border-radius:2px;outline:0}.dropdown-input-field:focus,.default-dropdown-input:focus{color:#555;border-color:#73afea;box-shadow:0 0 4px rgba(115,175,234,0.4)}.dropdown-input-field:focus ~ .fa,.default-dropdown-input:focus ~ .fa{color:#555}.dropdown-input-field:hover ~ .fa,.default-dropdown-input:hover ~ .fa{color:#555}.dropdown-content{max-height:252px;overflow-y:auto}.dropdown-info-note{color:#707070;text-align:center}.dropdown-footer{padding-top:10px;margin-top:10px;font-size:13px;border-top:1px solid rgba(0,0,0,0.1)}.dropdown-footer-content{padding-left:10px;padding-right:10px}.dropdown-due-date-footer{padding-top:0;margin-left:10px;margin-right:10px;border-top:0}.dropdown-footer-list{font-size:14px}.dropdown-footer-list a{cursor:pointer;padding-left:10px}.dropdown-create-new-item-button{background:transparent;border:0;border-radius:0;box-shadow:none;display:block;font-weight:400;position:relative;padding:8px 16px;color:#2e2e2e;line-height:normal;white-space:normal;overflow:hidden;text-align:left;width:100%;width:100%;background-color:transparent;border:0;text-align:left;text-overflow:ellipsis}.dropdown-create-new-item-button.text-danger{color:#db3b21}.dropdown-create-new-item-button.disable-hover{text-decoration:none}.dropdown-create-new-item-button:not(.disable-hover):hover,.dropdown-create-new-item-button:active,.dropdown-create-new-item-button:focus,.dropdown-create-new-item-button.is-focused{background-color:#eee;color:#2e2e2e;outline:0;text-decoration:none}.dropdown-create-new-item-button:not(.disable-hover):hover.text-danger,.dropdown-create-new-item-button:active.text-danger,.dropdown-create-new-item-button:focus.text-danger,.dropdown-create-new-item-button.is-focused.text-danger{color:#db3b21}.dropdown-create-new-item-button:not(.disable-hover):hover .avatar,.dropdown-create-new-item-button:active .avatar,.dropdown-create-new-item-button:focus .avatar,.dropdown-create-new-item-button.is-focused .avatar{border-color:#fff}.dropdown-create-new-item-button:not(.disable-hover):hover .badge.badge-pill,.dropdown-create-new-item-button:not(.disable-hover):hover .shortcut-mappings .key,.shortcut-mappings .dropdown-create-new-item-button:not(.disable-hover):hover .key,.dropdown-create-new-item-button:active .badge.badge-pill,.dropdown-create-new-item-button:active .shortcut-mappings .key,.shortcut-mappings .dropdown-create-new-item-button:active .key,.dropdown-create-new-item-button:focus .badge.badge-pill,.dropdown-create-new-item-button:focus .shortcut-mappings .key,.shortcut-mappings .dropdown-create-new-item-button:focus .key,.dropdown-create-new-item-button.is-focused .badge.badge-pill,.dropdown-create-new-item-button.is-focused .shortcut-mappings .key,.shortcut-mappings .dropdown-create-new-item-button.is-focused .key{background-color:#dfedfb}.dropdown-create-new-item-button.dropdown-menu-user-link{line-height:16px;padding-top:10px;padding-bottom:7px;white-space:nowrap}.dropdown-create-new-item-button.dropdown-menu-user-link .dropdown-menu-user-username{display:block}.dropdown-create-new-item-button .icon-play{fill:#707070;margin-right:6px;height:12px;width:11px}.dropdown-loading{position:absolute;top:0;right:0;bottom:0;left:0;display:none;z-index:9;background-color:rgba(255,255,255,0.6);font-size:28px}.dropdown-loading .fa{position:absolute;top:50%;left:50%;margin-top:-14px;margin-left:-14px}.dropdown-label-box{position:relative;top:3px;margin-right:5px;display:inline-block;width:15px;height:15px;border-radius:3px}.git-revision-dropdown .dropdown-content{max-height:215px}.sidebar-move-issue-dropdown .dropdown-content{max-height:160px}.dropdown-menu-author .dropdown-content{max-height:215px}.dropdown-menu-labels .dropdown-content{max-height:128px}.dropdown-menu-due-date .dropdown-content{max-height:230px}.dropdown-menu-due-date .pika-single{position:relative !important;top:0 !important;border:0;box-shadow:none}.dropdown-menu-due-date .pika-lendar{margin-top:-5px;margin-bottom:0}.dropdown-menu-inner-title{display:block;color:#2e2e2e;font-weight:600}.dropdown-menu-inner-content{display:block;color:#707070}.dropdown-toggle-text.is-default{color:#707070}.pika-single.animate-picker.is-bound,.pika-single.animate-picker.is-bound.is-hidden{position:absolute !important;display:block}.pika-single.animate-picker.is-bound{transform:translateY(0);display:block}.pika-single.animate-picker.is-bound.is-hidden{transform:translateY(-10px);display:none;overflow:hidden}@media (max-width: 575.98px){.navbar-gitlab li.header-projects,.navbar-gitlab li.header-groups,.navbar-gitlab li.header-more,.navbar-gitlab li.header-new,.navbar-gitlab li.header-user{position:static}header.navbar-gitlab .dropdown .dropdown-menu,header.navbar-gitlab .dropdown .dropdown-menu-nav{width:100%;min-width:100%}header.navbar-gitlab-new .header-content .dropdown .dropdown-menu{left:0;min-width:100%}}header.header-content .dropdown-menu.frequent-items-dropdown-menu{padding:0}.frequent-items-dropdown-container{display:flex;flex-direction:row;width:500px;height:354px}.frequent-items-dropdown-container .frequent-items-dropdown-sidebar,.frequent-items-dropdown-container .frequent-items-dropdown-content{padding:8px 0}.frequent-items-dropdown-container .loading-animation{color:#242424}.frequent-items-dropdown-container .frequent-items-dropdown-sidebar{width:30%;border-right:1px solid #e5e5e5}.frequent-items-dropdown-container .frequent-items-dropdown-content{position:relative;width:70%}@media (max-width: 575.98px){.frequent-items-dropdown-container{flex-direction:column;width:100%;height:auto;flex:1}.frequent-items-dropdown-container .frequent-items-dropdown-sidebar,.frequent-items-dropdown-container .frequent-items-dropdown-content{width:100%}.frequent-items-dropdown-container .frequent-items-dropdown-sidebar{border-bottom:1px solid #e5e5e5;border-right:0}}.frequent-items-dropdown-container .section-header,.frequent-items-dropdown-container .frequent-items-list-container li.section-empty{padding:0 16px;color:#707070;font-size:14px}.frequent-items-dropdown-container .frequent-items-list-container{height:304px;padding:8px 0;overflow-y:auto}.frequent-items-dropdown-container .frequent-items-list-container li.section-empty.section-failure{color:#a62d19}.frequent-items-dropdown-container .frequent-items-list-container .frequent-items-list-item-container a{display:flex}.frequent-items-dropdown-container .search-input-container{position:relative;padding:4px 16px}.frequent-items-dropdown-container .search-input-container .search-icon{position:absolute;top:13px;right:25px;color:#ddd}.frequent-items-dropdown-container .section-header{font-weight:700;margin-top:8px}@media (max-width: 575.98px){.frequent-items-dropdown-container .frequent-items-list-container{width:auto;height:auto;padding-bottom:0}}.frequent-items-list-item-container .frequent-items-item-avatar-container,.frequent-items-list-item-container .frequent-items-item-metadata-container{float:left}.frequent-items-list-item-container .frequent-items-item-metadata-container{display:flex;flex-direction:column;justify-content:center}.frequent-items-list-item-container .frequent-items-item-title,.frequent-items-list-item-container .frequent-items-item-namespace{max-width:250px;text-overflow:ellipsis;white-space:nowrap}.frequent-items-list-item-container:hover .frequent-items-item-avatar-container .avatar{border-color:#ddd}.frequent-items-list-item-container .frequent-items-item-title{font-size:14px;font-weight:400;line-height:16px}.frequent-items-list-item-container .frequent-items-item-namespace{margin-top:4px;font-size:12px;line-height:12px;color:#707070}@media (max-width: 575.98px){.frequent-items-list-item-container .frequent-items-item-metadata-container{float:none}}.dropdown-content-faded-mask{position:relative}.dropdown-content-faded-mask .dropdown-list{max-height:312px;overflow-y:auto;position:relative}.dropdown-content-faded-mask::after{height:32px;width:100%;position:absolute;bottom:0;background:linear-gradient(to top, #fff 0, rgba(255,255,255,0));transition:opacity 0.1s ease-in-out;content:'';pointer-events:none}.dropdown-content-faded-mask.fade-out::after{opacity:0}.file-holder{border:1px solid #e5e5e5;border-radius:4px}.file-holder.file-holder-no-border{border:0}.file-holder.file-holder-bottom-radius{border-radius:0 0 2px 2px}.file-holder.readme-holder{margin:16px 0}.file-holder.readme-holder.limited-width-container .file-content{max-width:990px;margin-left:auto;margin-right:auto}.file-holder .file-title{position:relative;background-color:#fafafa;border-bottom:1px solid #e5e5e5;margin:0;text-align:left;padding:10px 16px;word-wrap:break-word;border-radius:4px 4px 0 0}.file-holder .file-title.file-title-clear{padding-left:0;padding-right:0;background-color:transparent}.file-holder .file-title.file-title-clear .file-actions{right:0}.file-holder .file-title .file-actions{position:absolute;top:5px;right:15px}.file-holder .file-title .file-actions .btn{padding:0 10px;font-size:13px;line-height:28px}.file-holder .file-title a:not(.btn){color:#2e2e2e}.file-holder .file-title .left-options{margin-top:-3px}.file-holder .file-blame-legend{background-color:#fafafa;text-align:right;padding:8px 16px;border-bottom:1px solid #e5e5e5}@media (max-width: 575.98px){.file-holder .file-blame-legend{text-align:left}}.file-holder .file-blame-legend .left-label{padding-right:5px}.file-holder .file-blame-legend .right-label{padding-left:5px}.file-holder .file-blame-legend .legend-box{display:inline-block;width:10px;height:10px;padding:0 2px}.file-holder .file-blame-legend .legend-box-0{background-color:#254e77}.file-holder .file-blame-legend .legend-box-1{background-color:#406990}.file-holder .file-blame-legend .legend-box-2{background-color:#5b84a8}.file-holder .file-blame-legend .legend-box-3{background-color:#769fc1}.file-holder .file-blame-legend .legend-box-4{background-color:#91bad9}.file-holder .file-blame-legend .legend-box-5{background-color:#acd5f2}.file-holder .file-blame-legend .legend-box-6{background-color:#bcdbf1}.file-holder .file-blame-legend .legend-box-7{background-color:#cde1f0}.file-holder .file-blame-legend .legend-box-8{background-color:#dde7ee}.file-holder .file-blame-legend .legend-box-9{background-color:#ededed}.file-holder .file-content{background:#fff}.file-holder .file-content.image_file,.file-holder .file-content.video{background:#eee;text-align:center;padding:30px}.file-holder .file-content.image_file img,.file-holder .file-content.image_file video,.file-holder .file-content.video img,.file-holder .file-content.video video{max-width:80%}.file-holder .file-content.wiki{padding:16px}@media (min-width: 768px){.file-holder .file-content.wiki{padding:32px}}.file-holder .file-content.blob-no-preview{background:#eee;text-shadow:0 1px 2px #fff;padding:100px 0}.file-holder .file-content.blame table{border:0;margin:0}.file-holder .file-content.blame tr{border-bottom:1px solid #eee}.file-holder .file-content.blame tr:last-child{border-bottom:0}.file-holder .file-content.blame td{border-top:0;border-bottom:0}.file-holder .file-content.blame td:first-child{border-left:0}.file-holder .file-content.blame td:last-child{border-right:0}.file-holder .file-content.blame td.blame-commit{padding:5px 10px;min-width:400px;max-width:400px;background:#fafafa;border-left:3px solid}.file-holder .file-content.blame td.blame-commit .commit-row-title{display:flex}.file-holder .file-content.blame td.blame-commit .item-title{flex:1;margin-right:0.5em}.file-holder .file-content.blame td.line-numbers{float:none;border-left:1px solid #ddd}.file-holder .file-content.blame td.line-numbers i{float:none;margin-right:0}.file-holder .file-content.blame td.lines{padding:0}.file-holder .file-content.blame td.blame-commit-age-0{border-left-color:#254e77}.file-holder .file-content.blame td.blame-commit-age-1{border-left-color:#406990}.file-holder .file-content.blame td.blame-commit-age-2{border-left-color:#5b84a8}.file-holder .file-content.blame td.blame-commit-age-3{border-left-color:#769fc1}.file-holder .file-content.blame td.blame-commit-age-4{border-left-color:#91bad9}.file-holder .file-content.blame td.blame-commit-age-5{border-left-color:#acd5f2}.file-holder .file-content.blame td.blame-commit-age-6{border-left-color:#bcdbf1}.file-holder .file-content.blame td.blame-commit-age-7{border-left-color:#cde1f0}.file-holder .file-content.blame td.blame-commit-age-8{border-left-color:#dde7ee}.file-holder .file-content.blame td.blame-commit-age-9{border-left-color:#ededed}.file-holder .file-content.logs{background:#eee;max-height:700px;overflow-y:auto}.file-holder .file-content.logs ol{margin-left:40px;padding:10px 0;border-left:1px solid #e5e5e5;margin-bottom:0;background:#fff}.file-holder .file-content.logs ol li{color:#888}.file-holder .file-content.logs ol li p{margin:0;color:#333;line-height:24px;padding-left:10px}.file-holder .file-content.logs ol li:hover{background:#f6fafe}.file-holder .file-content.code{padding:0}.file-holder .file-content .list-inline.previews{display:flex;flex-wrap:wrap;justify-content:center;align-content:flex-start;align-items:baseline}.file-holder .file-content .list-inline.previews .preview{padding:16px}span.idiff.left{border-top-left-radius:2px;border-bottom-left-radius:2px}span.idiff.right{border-top-right-radius:2px;border-bottom-right-radius:2px}.file-stats ul{list-style:none;margin:0;padding:10px 0}.file-stats ul li{padding:3px 0;line-height:20px}.file-stats .new-file a{color:#168f48}.file-stats .renamed-file a{color:#de7e00}.file-stats .deleted-file a{color:#db3b21}.file-stats .edit-file a{color:#2e2e2e}.file-stats a{text-decoration:none}.file-stats a .new-file{color:#168f48}.file-stats a .deleted-file{color:#a62d19}.file-title-flex-parent,.file-holder .file-title-flex-parent{display:flex;align-items:center;justify-content:space-between;background-color:#fafafa;border-bottom:1px solid #e5e5e5;padding:5px 16px;margin:0;border-radius:4px 4px 0 0}.file-title-flex-parent .file-header-content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:30px;position:relative;width:auto}@media (max-width: 575px){.file-title-flex-parent .file-header-content{width:100%}}.file-holder .file-title-flex-parent .file-actions{position:static}.file-title-flex-parent .btn-clipboard{position:absolute;right:0}.file-title-flex-parent a{color:#2e2e2e}.file-title-flex-parent small{margin:0 10px 0 0}.file-title-flex-parent .file-actions{white-space:nowrap}.file-title-flex-parent .file-actions .btn{padding:0 10px;font-size:13px;line-height:28px;display:inline-block;float:none}@media (max-width: 575.98px){.file-title-flex-parent{display:block}.file-title-flex-parent .file-actions{white-space:normal}.file-title-flex-parent .file-actions .btn-group{padding-top:5px}}.is-stl-loading .stl-controls{display:none}.file-fork-suggestion{display:flex;align-items:center;justify-content:flex-end;background-color:#fafafa;border-bottom:1px solid #e5e5e5;padding:5px 16px}.file-fork-suggestion-note{margin-right:1.5em}.label-lfs{color:#bbb;border:1px solid #bbb}.preview-container{height:100%;overflow:auto}.preview-container .file-container{background-color:#eee;display:flex;height:100%;align-items:center;justify-content:center;text-align:center}.preview-container .file-container .file-content{padding:16px;max-width:100%;max-height:100%}.preview-container .file-container .file-content img{max-width:90%;max-height:70vh}.preview-container .file-container .file-content .is-zoomable{cursor:pointer;cursor:zoom-in}.preview-container .file-container .file-content .is-zoomable.is-zoomed{cursor:pointer;cursor:zoom-out;max-width:none;max-height:none;margin-right:16px}.preview-container .file-container .file-info{font-size:12px;color:grey}.preview-container .md-previewer{padding:16px}.filter-item{vertical-align:top}.filter-item.reset-filters{padding:7px}.filter-item.update-issues-btn{float:right;margin-right:0}@media (max-width: 575.98px){.filter-item.update-issues-btn{float:none}}@media (max-width: 575.98px){.filters-section{display:inline-block}}@media (min-width: 576px){.filter-item:not(:last-child){margin-right:6px}.sort-filter{display:inline-block;float:right}.dropdown-menu-sort{left:auto;right:0}}@media (max-width: 575.98px){.filter-item{display:block;margin:0 0 10px}.dropdown-menu-toggle,.update-issues-btn .btn{width:100%}}.filtered-search-wrapper{display:-webkit-flex;display:flex}@media (max-width: 575.98px){.filtered-search-wrapper{-webkit-flex-direction:column;flex-direction:column}}.filtered-search-wrapper .tokens-container{display:-webkit-flex;display:flex;flex:1;-webkit-flex:1;padding-left:12px;position:relative;margin-bottom:0}.filtered-search-wrapper .input-token{max-width:200px;padding:0}.filtered-search-wrapper .input-token:hover,.filtered-search-wrapper .input-token:focus{background-color:inherit;color:inherit}.filtered-search-wrapper .input-token:only-child,.filtered-search-wrapper .input-token:last-child{flex:1;-webkit-flex:1;max-width:inherit}.filtered-search-token,.filtered-search-term{display:-webkit-flex;display:flex;flex-shrink:0;margin-top:5px;margin-bottom:5px}.filtered-search-token .selectable,.filtered-search-term .selectable{display:-webkit-flex;display:flex}.filtered-search-token .name,.filtered-search-token .value,.filtered-search-term .name,.filtered-search-term .value{display:inline-block;padding:2px 7px}.filtered-search-token .name,.filtered-search-term .name{background-color:#f8f8f8;color:rgba(0,0,0,0.55);border-radius:2px 0 0 2px;margin-right:1px;text-transform:capitalize}.filtered-search-token .value-container,.filtered-search-term .value-container{background-color:#f0f0f0;color:rgba(0,0,0,0.85);border-radius:0 2px 2px 0;margin-right:5px;padding-right:8px}.filtered-search-token .value,.filtered-search-term .value{padding-right:0}.filtered-search-token .remove-token,.filtered-search-term .remove-token{display:inline-block;padding-left:4px;padding-right:0}.filtered-search-token .remove-token .fa-close,.filtered-search-term .remove-token .fa-close{color:#707070}.filtered-search-token .remove-token:hover .fa-close,.filtered-search-term .remove-token:hover .fa-close{color:#2e2e2e}.filtered-search-token .remove-token.inverted .fa-close,.filtered-search-term .remove-token.inverted .fa-close{color:rgba(255,255,255,0.85)}.filtered-search-token .remove-token.inverted:hover .fa-close,.filtered-search-term .remove-token.inverted:hover .fa-close{color:white}.filtered-search-token:hover .name,.filtered-search-token .selected .name,.filtered-search-term .selected .name{background-color:#ebebeb}.filtered-search-token:hover .value-container,.filtered-search-token .selected .value-container,.filtered-search-term .selected .value-container{box-shadow:inset 0 0 0 100px rgba(0,0,0,0.09)}.filtered-search-term .name{background-color:inherit;color:#000;text-transform:none}.filtered-search-term .selectable{cursor:text}.scroll-container{display:-webkit-flex;display:flex;overflow-x:auto;white-space:nowrap;width:100%}.filtered-search-box{position:relative;flex:1;display:-webkit-flex;display:flex;width:100%;min-width:0;border:1px solid #e5e5e5;background-color:#fff}@media (max-width: 575.98px){.filtered-search-box{-webkit-flex:1 1 auto;flex:1 1 auto;margin-bottom:10px}}.filtered-search-box.focus,.filtered-search-box.focus:hover{border-color:#73afea;box-shadow:0 0 4px rgba(115,175,234,0.4)}.filtered-search-box gl-emoji{display:inline-block;font-family:inherit;font-size:inherit;vertical-align:inherit}.filtered-search-box gl-emoji img{height:18px;width:18px}.filtered-search-box .form-control,.filtered-search-box .search form,.search .filtered-search-box form{position:relative;min-width:200px;padding:5px 25px 6px 0;border-color:transparent}.filtered-search-box .form-control:focus,.filtered-search-box .common-note-form .md-area.is-focused,.common-note-form .filtered-search-box .md-area.is-focused,.filtered-search-box .search form:focus,.search .filtered-search-box form:focus,.filtered-search-box .search.search-active form,.search.search-active .filtered-search-box form,.filtered-search-box .form-control:hover,.filtered-search-box .filtered-search-box:hover,.filtered-search-box .search form:hover,.search .filtered-search-box form:hover{outline:none;border-color:transparent;box-shadow:none}.filtered-search-box .fa-times,.filtered-search-box .clearable-input .clear-icon,.clearable-input .filtered-search-box .clear-icon{right:10px;color:#c4c4c4}.filtered-search-box .clear-search{width:35px;background-color:#fff;border:0;outline:none;z-index:1}.filtered-search-box .clear-search:hover .fa-times,.filtered-search-box .clear-search:hover .clearable-input .clear-icon,.clearable-input .filtered-search-box .clear-search:hover .clear-icon{color:#444}.filtered-search-box-input-container{flex:1;position:relative;min-width:0}.filtered-search-input-dropdown-menu{max-height:312px;max-width:280px;overflow:auto}@media (max-width: 575.98px){.filtered-search-input-dropdown-menu{width:auto;left:0;right:0;max-width:none;min-width:100%}}.filtered-search-history-dropdown-wrapper{position:static;display:flex;flex-direction:column}.filtered-search-history-dropdown-toggle-button{flex:1;width:auto;border-radius:0;border:0;border-right:1px solid #e5e5e5;color:#707070;transition:color 0.1s linear}.filtered-search-history-dropdown-toggle-button:hover,.filtered-search-history-dropdown-toggle-button:focus{color:#2e2e2e;border-color:#73afea;outline:none}.filtered-search-history-dropdown-toggle-button svg{height:14px;width:14px;vertical-align:middle;margin-bottom:4px}.filtered-search-history-dropdown-toggle-button .dropdown-toggle-text{display:inline-block;color:inherit}.filtered-search-history-dropdown-toggle-button .dropdown-toggle-text .fa{vertical-align:middle;color:inherit}.filtered-search-history-dropdown{width:40%}@media (max-width: 575.98px){.filtered-search-history-dropdown{left:0;right:0;max-width:none}}.filtered-search-history-dropdown-content{max-height:none}.filtered-search-history-dropdown-content .filtered-search-history-dropdown-item,.filtered-search-history-dropdown-content .filtered-search-history-clear-button{white-space:nowrap;text-overflow:ellipsis}.filtered-search-history-dropdown-token{display:inline}.filtered-search-history-dropdown-token:not(:last-child){margin-right:0.3em}.filtered-search-history-dropdown-token>.value{font-weight:600}.filter-dropdown-container{display:-webkit-flex;display:flex}.filter-dropdown-container .dropdown-toggle,.filter-dropdown-container .dropdown-menu-toggle{line-height:22px}@media (max-width: 575.98px){.issues-details-filters{padding:0 0 10px;background-color:#fff;border-top:0}}@media (max-width: 767.98px){.filter-dropdown-container .dropdown-toggle,.filter-dropdown-container .dropdown-menu-toggle,.filter-dropdown-container .dropdown,.filter-dropdown-container .dropdown-menu{width:100%}.filter-dropdown-container .dropdown{margin-left:0}.filter-dropdown-container .fa-chevron-down{position:absolute;right:10px;top:10px}}.droplab-dropdown .dropdown-menu .filter-dropdown-item .btn{text-overflow:ellipsis}.droplab-dropdown .dropdown-menu .filter-dropdown-item .btn .fa{width:15px;line-height:1.5}.droplab-dropdown .dropdown-menu .filter-dropdown-item .btn .dropdown-label-box{border-color:#fff;border-style:solid;border-width:1px;width:17px;height:17px;top:0}.droplab-dropdown .dropdown-menu .filter-dropdown-item .dropdown-light-content{font-size:14px;font-weight:400}.droplab-dropdown .dropdown-menu .filter-dropdown-item .dropdown-user{display:flex}.droplab-dropdown .dropdown-menu .filter-dropdown-item .dropdown-user-details{display:flex;flex-direction:column}.droplab-dropdown .dropdown-menu .filter-dropdown-item .dropdown-user-details>span{white-space:normal;word-break:break-all}.filter-dropdown-loading{padding:8px 16px;text-align:center}.flash-container{cursor:pointer;margin:0;margin-bottom:16px;font-size:14px;position:relative;z-index:1}.flash-container .flash-notice{background-color:#1f78d1;margin:0}.flash-container .flash-notice.flash-notice-persistent{background-color:#e4f0fb;color:#2e2e2e}.flash-container .flash-notice.flash-notice-persistent a{color:#1b69b6}.flash-container .flash-notice.flash-notice-persistent a:hover,.flash-container .flash-notice.flash-notice-persistent .participants-more .btn-link:hover,.participants-more .flash-container .flash-notice.flash-notice-persistent .btn-link:hover,.flash-container .flash-notice.flash-notice-persistent .user-list-more .btn-link:hover,.user-list-more .flash-container .flash-notice.flash-notice-persistent .btn-link:hover{color:#134a81;text-decoration:none}.flash-container .flash-warning{background-color:#fc9403;margin:0}.flash-container .flash-alert{background-color:#db3b21;margin:0}.flash-container .flash-alert .flash-text,.flash-container .flash-alert .flash-action{display:inline-block}.flash-container .flash-alert .flash-action{margin-left:5px;text-decoration:none;font-weight:400;border-bottom:1px solid}.flash-container .flash-alert .flash-action:hover{border-color:transparent}.flash-container .flash-success{background-color:#1aaa55;margin:0}.flash-container .flash-notice,.flash-container .flash-alert,.flash-container .flash-success,.flash-container .flash-warning{border-radius:4px;color:#fff}.flash-container .flash-notice .container-fluid,.flash-container .flash-notice .container-fluid.container-limited,.flash-container .flash-alert .container-fluid,.flash-container .flash-alert .container-fluid.container-limited,.flash-container .flash-success .container-fluid,.flash-container .flash-success .container-fluid.container-limited,.flash-container .flash-warning .container-fluid,.flash-container .flash-warning .container-fluid.container-limited{background:transparent}.flash-container.flash-container-page{margin-bottom:0}.flash-container.flash-container-page .flash-notice,.flash-container.flash-container-page .flash-alert,.flash-container.flash-container-page .flash-success{border-radius:0}.flash-container:empty{margin:0}@media (max-width: 767.98px){ul.notes .flash-container.timeline-content{margin-left:0}}textarea{resize:vertical}input{border-radius:3px}input[type='text'].danger{background:#f2dede !important;border-color:#e05842;text-shadow:0 1px 1px #fff}.datetime-controls select{width:100px}.form-actions{margin-top:0;margin-bottom:-16px;padding:16px;background-color:#fafafa;border-top:1px solid #e5e5e5}label.inline-label{margin:0}label.label-light{font-weight:600}.inline-input-group{width:250px}.custom-form-control{width:150px}@media (min-width: 576px){.custom-form-control{width:150px}}@media (min-width: 768px){.custom-form-control{width:170px}}@media (min-width: 992px){.custom-form-control{width:200px}}.help-form .form-group{margin-left:0;margin-right:0}.help-form .form-group .form-control-label{font-weight:600;padding-top:4px}.help-form .form-group .form-control,.help-form .form-group .search form,.search .help-form .form-group form{height:29px;background:#fff;font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace}.help-form .form-group .input-group-prepend .btn,.help-form .form-group .input-group-append .btn{padding:3px 10px;background-color:#fafafa;border:1px solid #e5e5e5}.help-form .form-group .text-block{line-height:0.8;padding-top:9px}.help-form .form-group .text-block code{line-height:1.8}.help-form .form-group .text-block img{margin-right:16px}@media (max-width: 575.98px){.help-form .form-group{padding:0 16px}.help-form .form-group .form-control-label,.help-form .form-group .text-block{padding-left:0}}.fieldset-form fieldset{margin-bottom:20px}.form-control,.search form{border-radius:2px;padding:6px 10px}.form-control.input-short,.search form.input-short{width:200px}@media (min-width: 768px){.form-control.input-short,.search form.input-short{width:280px}}.select-wrapper{position:relative}.select-wrapper .fa-chevron-down{position:absolute;font-size:10px;right:10px;top:12px;color:#c4c4c4;pointer-events:none}.select-control{padding-left:10px;padding-right:10px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.select-control::-ms-expand{display:none}.form-control-inline{display:inline}.wiki-content{margin-top:35px}.form-group .form-control-label,.form-group .form-control-label-full-width{font-weight:400}.form-control::-webkit-input-placeholder,.search form::-webkit-input-placeholder{color:#919191}.input-group .select2-container{display:table-cell;max-width:180px}.input-group .input-group-prepend,.input-group .input-group-append{background-color:#f7f8fa}.input-group .input-group-prepend:not(:first-child):not(:last-child),.input-group .input-group-append:not(:first-child):not(:last-child){border-left:0;border-right:0}.form-text.text-muted{margin-bottom:0;margin-top:4px}.gl-field-error{color:#db3b21}.gl-show-field-errors .form-control,.gl-show-field-errors .search form,.search .gl-show-field-errors form{height:34px}.gl-show-field-errors .gl-field-success-outline{border:1px solid #168f48}.gl-show-field-errors .gl-field-success-outline:focus{box-shadow:0 0 0 1px #168f48 inset,0 1px 1px rgba(0,0,0,0.075) inset,0 0 4px 0 #168f48;border:0 none}.gl-show-field-errors .gl-field-error-outline{border:1px solid #db3b21}.gl-show-field-errors .gl-field-error-outline:focus{box-shadow:0 0 0 1px #db3b21 inset,0 1px 1px rgba(0,0,0,0.075) inset,0 0 4px 0 rgba(219,59,33,0.6);border:0 none}.gl-show-field-errors .gl-field-success-message{color:#168f48}.gl-show-field-errors .gl-field-error-message{color:#db3b21}.gl-show-field-errors .gl-field-hint{color:#2e2e2e}@media (max-width: 575.98px){.remember-me .remember-me-checkbox{margin-top:0}}.input-icon-wrapper{position:relative}.input-icon-wrapper .input-icon-right{position:absolute;right:0.8em;top:50%;transform:translateY(-50%);color:#919191}.input-lg{max-width:320px;width:100%}.gfm-project_member{padding:0 2px;border-radius:2px;background-color:rgba(31,120,209,0.044)}.gfm-project_member:hover{background-color:rgba(31,120,209,0.15)}.gfm-color_chip{display:inline-block;line-height:1;margin:0 0 2px 4px;vertical-align:middle;border-radius:3px;width:0.9em;height:0.9em;background:#fff;background-image:linear-gradient(135deg, #e1e1e1 25%, transparent 0%, transparent 75%, #e1e1e1 0%),linear-gradient(135deg, #e1e1e1 25%, transparent 0%, transparent 75%, #e1e1e1 0%);background-size:1em 1em;background-position:0 0, 0.5em 0.5em}.gfm-color_chip>span{display:inline-block;width:100%;height:100%;margin-bottom:2px;border-radius:3px;border:1px solid rgba(0,0,0,0.3)}body.ui-indigo .navbar-gitlab{background-color:#292961}body.ui-indigo .navbar-gitlab .navbar-collapse{color:#d1d1f0}body.ui-indigo .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #6868b9}body.ui-indigo .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-indigo .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-indigo .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-indigo .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-indigo .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-indigo .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-indigo .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-indigo .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-indigo .navbar-gitlab .navbar-nav>li>a:hover,body.ui-indigo .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-indigo .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-indigo .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-indigo .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-indigo .navbar-gitlab .navbar-nav>li>a:focus,body.ui-indigo .navbar-gitlab .navbar-nav>li>button:hover,body.ui-indigo .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(209,209,240,0.2)}body.ui-indigo .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-indigo .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-indigo .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-indigo .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-indigo .navbar-gitlab .navbar-nav>li.active>a,body.ui-indigo .navbar-gitlab .navbar-nav>li.active>button,body.ui-indigo .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-indigo .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#292961;background-color:#fff}body.ui-indigo .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-indigo .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(209,209,240,0.2)}body.ui-indigo .navbar-gitlab .navbar-sub-nav{color:#d1d1f0}body.ui-indigo .navbar-gitlab .nav>li{color:#d1d1f0}body.ui-indigo .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#d1d1f0}@media (min-width: 576px){body.ui-indigo .navbar-gitlab .nav>li>a:hover,body.ui-indigo .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-indigo .navbar-gitlab .nav>li>.btn-link:hover,body.ui-indigo .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-indigo .navbar-gitlab .nav>li>.btn-link:hover,body.ui-indigo .navbar-gitlab .nav>li>a:focus{background-color:rgba(209,209,240,0.2)}}body.ui-indigo .navbar-gitlab .nav>li>a:hover svg,body.ui-indigo .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-indigo .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-indigo .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-indigo .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-indigo .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-indigo .navbar-gitlab .nav>li.active>a,body.ui-indigo .navbar-gitlab .nav>li.dropdown.show>a{color:#292961;background-color:#fff}body.ui-indigo .navbar-gitlab .nav>li.active>a:hover svg,body.ui-indigo .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-indigo .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-indigo .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-indigo .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-indigo .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-indigo .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-indigo .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-indigo .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-indigo .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#292961}body.ui-indigo .navbar-gitlab .nav>li .impersonated-user svg,body.ui-indigo .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#292961}body.ui-indigo .navbar .title>a:hover,body.ui-indigo .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-indigo .navbar .title>.btn-link:hover,body.ui-indigo .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-indigo .navbar .title>.btn-link:hover,body.ui-indigo .navbar .title>a:focus{background-color:rgba(209,209,240,0.2)}body.ui-indigo .search form{background-color:rgba(209,209,240,0.2)}body.ui-indigo .search form:hover{background-color:rgba(209,209,240,0.3)}body.ui-indigo .search .location-badge{color:#ebebfa;background-color:rgba(209,209,240,0.1);border-right:1px solid #393982}body.ui-indigo .search .search-input::placeholder{color:rgba(209,209,240,0.8)}body.ui-indigo .search .search-input-wrap .search-icon,body.ui-indigo .search .search-input-wrap .clear-icon{fill:rgba(209,209,240,0.8)}body.ui-indigo .search.search-active form{background-color:#fff}body.ui-indigo .search.search-active .location-badge{color:#2e2e2e}body.ui-indigo .search.search-active .search-input-wrap .search-icon{fill:rgba(209,209,240,0.8)}body.ui-indigo .nav-sidebar li.active{box-shadow:inset 4px 0 0 #4b4ba3}body.ui-indigo .nav-sidebar li.active>a{color:#393982}body.ui-indigo .nav-sidebar li.active svg{fill:#393982}body.ui-indigo .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-indigo .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-indigo .sidebar-top-level-items>li.active .key{color:#393982}body.ui-indigo .nav-links li.active a,body.ui-indigo .nav-links li a.active{border-bottom:2px solid #6666c4}body.ui-indigo .nav-links li.active a .badge.badge-pill,body.ui-indigo .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-indigo .nav-links li.active a .key,body.ui-indigo .nav-links li a.active .badge.badge-pill,body.ui-indigo .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-indigo .nav-links li a.active .key{font-weight:600}body.ui-indigo .branch-header-title{color:#4b4ba3}body.ui-indigo .ide-sidebar-link.active{color:#4b4ba3;box-shadow:inset 3px 0 #4b4ba3}body.ui-indigo .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #4b4ba3}body.ui-light-indigo .navbar-gitlab{background-color:#4b4ba3}body.ui-light-indigo .navbar-gitlab .navbar-collapse{color:#d1d1f0}body.ui-light-indigo .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #8b8bd2}body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-light-indigo .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light-indigo .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-light-indigo .navbar-gitlab .navbar-nav>li>a:hover,body.ui-light-indigo .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-light-indigo .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light-indigo .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-light-indigo .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light-indigo .navbar-gitlab .navbar-nav>li>a:focus,body.ui-light-indigo .navbar-gitlab .navbar-nav>li>button:hover,body.ui-light-indigo .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(209,209,240,0.2)}body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-light-indigo .navbar-gitlab .navbar-nav>li.active>a,body.ui-light-indigo .navbar-gitlab .navbar-nav>li.active>button,body.ui-light-indigo .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-light-indigo .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#4b4ba3;background-color:#fff}body.ui-light-indigo .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-light-indigo .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(209,209,240,0.2)}body.ui-light-indigo .navbar-gitlab .navbar-sub-nav{color:#d1d1f0}body.ui-light-indigo .navbar-gitlab .nav>li{color:#d1d1f0}body.ui-light-indigo .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#d1d1f0}@media (min-width: 576px){body.ui-light-indigo .navbar-gitlab .nav>li>a:hover,body.ui-light-indigo .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-light-indigo .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light-indigo .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-light-indigo .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light-indigo .navbar-gitlab .nav>li>a:focus{background-color:rgba(209,209,240,0.2)}}body.ui-light-indigo .navbar-gitlab .nav>li>a:hover svg,body.ui-light-indigo .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-light-indigo .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light-indigo .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-light-indigo .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light-indigo .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-light-indigo .navbar-gitlab .nav>li.active>a,body.ui-light-indigo .navbar-gitlab .nav>li.dropdown.show>a{color:#4b4ba3;background-color:#fff}body.ui-light-indigo .navbar-gitlab .nav>li.active>a:hover svg,body.ui-light-indigo .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-light-indigo .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light-indigo .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-light-indigo .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light-indigo .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-light-indigo .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-light-indigo .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-light-indigo .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-light-indigo .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#4b4ba3}body.ui-light-indigo .navbar-gitlab .nav>li .impersonated-user svg,body.ui-light-indigo .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#4b4ba3}body.ui-light-indigo .navbar .title>a:hover,body.ui-light-indigo .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-light-indigo .navbar .title>.btn-link:hover,body.ui-light-indigo .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-light-indigo .navbar .title>.btn-link:hover,body.ui-light-indigo .navbar .title>a:focus{background-color:rgba(209,209,240,0.2)}body.ui-light-indigo .search form{background-color:rgba(209,209,240,0.2)}body.ui-light-indigo .search form:hover{background-color:rgba(209,209,240,0.3)}body.ui-light-indigo .search .location-badge{color:#ebebfa;background-color:rgba(209,209,240,0.1);border-right:1px solid #4b4ba3}body.ui-light-indigo .search .search-input::placeholder{color:rgba(209,209,240,0.8)}body.ui-light-indigo .search .search-input-wrap .search-icon,body.ui-light-indigo .search .search-input-wrap .clear-icon{fill:rgba(209,209,240,0.8)}body.ui-light-indigo .search.search-active form{background-color:#fff}body.ui-light-indigo .search.search-active .location-badge{color:#2e2e2e}body.ui-light-indigo .search.search-active .search-input-wrap .search-icon{fill:rgba(209,209,240,0.8)}body.ui-light-indigo .nav-sidebar li.active{box-shadow:inset 4px 0 0 #6666c4}body.ui-light-indigo .nav-sidebar li.active>a{color:#4b4ba3}body.ui-light-indigo .nav-sidebar li.active svg{fill:#4b4ba3}body.ui-light-indigo .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-light-indigo .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-light-indigo .sidebar-top-level-items>li.active .key{color:#4b4ba3}body.ui-light-indigo .nav-links li.active a,body.ui-light-indigo .nav-links li a.active{border-bottom:2px solid #6666c4}body.ui-light-indigo .nav-links li.active a .badge.badge-pill,body.ui-light-indigo .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-light-indigo .nav-links li.active a .key,body.ui-light-indigo .nav-links li a.active .badge.badge-pill,body.ui-light-indigo .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-light-indigo .nav-links li a.active .key{font-weight:600}body.ui-light-indigo .branch-header-title{color:#6666c4}body.ui-light-indigo .ide-sidebar-link.active{color:#6666c4;box-shadow:inset 3px 0 #6666c4}body.ui-light-indigo .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #6666c4}body.ui-blue .navbar-gitlab{background-color:#1a3652}body.ui-blue .navbar-gitlab .navbar-collapse{color:#c8d7e6}body.ui-blue .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #3d76ae}body.ui-blue .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-blue .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-blue .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-blue .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-blue .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-blue .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-blue .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-blue .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-blue .navbar-gitlab .navbar-nav>li>a:hover,body.ui-blue .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-blue .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-blue .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-blue .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-blue .navbar-gitlab .navbar-nav>li>a:focus,body.ui-blue .navbar-gitlab .navbar-nav>li>button:hover,body.ui-blue .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(200,215,230,0.2)}body.ui-blue .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-blue .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-blue .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-blue .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-blue .navbar-gitlab .navbar-nav>li.active>a,body.ui-blue .navbar-gitlab .navbar-nav>li.active>button,body.ui-blue .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-blue .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#1a3652;background-color:#fff}body.ui-blue .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-blue .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(200,215,230,0.2)}body.ui-blue .navbar-gitlab .navbar-sub-nav{color:#c8d7e6}body.ui-blue .navbar-gitlab .nav>li{color:#c8d7e6}body.ui-blue .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#c8d7e6}@media (min-width: 576px){body.ui-blue .navbar-gitlab .nav>li>a:hover,body.ui-blue .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-blue .navbar-gitlab .nav>li>.btn-link:hover,body.ui-blue .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-blue .navbar-gitlab .nav>li>.btn-link:hover,body.ui-blue .navbar-gitlab .nav>li>a:focus{background-color:rgba(200,215,230,0.2)}}body.ui-blue .navbar-gitlab .nav>li>a:hover svg,body.ui-blue .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-blue .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-blue .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-blue .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-blue .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-blue .navbar-gitlab .nav>li.active>a,body.ui-blue .navbar-gitlab .nav>li.dropdown.show>a{color:#1a3652;background-color:#fff}body.ui-blue .navbar-gitlab .nav>li.active>a:hover svg,body.ui-blue .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-blue .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-blue .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-blue .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-blue .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-blue .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-blue .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-blue .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-blue .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#1a3652}body.ui-blue .navbar-gitlab .nav>li .impersonated-user svg,body.ui-blue .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#1a3652}body.ui-blue .navbar .title>a:hover,body.ui-blue .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-blue .navbar .title>.btn-link:hover,body.ui-blue .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-blue .navbar .title>.btn-link:hover,body.ui-blue .navbar .title>a:focus{background-color:rgba(200,215,230,0.2)}body.ui-blue .search form{background-color:rgba(200,215,230,0.2)}body.ui-blue .search form:hover{background-color:rgba(200,215,230,0.3)}body.ui-blue .search .location-badge{color:#e6edf5;background-color:rgba(200,215,230,0.1);border-right:1px solid #25496e}body.ui-blue .search .search-input::placeholder{color:rgba(200,215,230,0.8)}body.ui-blue .search .search-input-wrap .search-icon,body.ui-blue .search .search-input-wrap .clear-icon{fill:rgba(200,215,230,0.8)}body.ui-blue .search.search-active form{background-color:#fff}body.ui-blue .search.search-active .location-badge{color:#2e2e2e}body.ui-blue .search.search-active .search-input-wrap .search-icon{fill:rgba(200,215,230,0.8)}body.ui-blue .nav-sidebar li.active{box-shadow:inset 4px 0 0 #305c88}body.ui-blue .nav-sidebar li.active>a{color:#25496e}body.ui-blue .nav-sidebar li.active svg{fill:#25496e}body.ui-blue .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-blue .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-blue .sidebar-top-level-items>li.active .key{color:#25496e}body.ui-blue .nav-links li.active a,body.ui-blue .nav-links li a.active{border-bottom:2px solid #4a79a8}body.ui-blue .nav-links li.active a .badge.badge-pill,body.ui-blue .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-blue .nav-links li.active a .key,body.ui-blue .nav-links li a.active .badge.badge-pill,body.ui-blue .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-blue .nav-links li a.active .key{font-weight:600}body.ui-blue .branch-header-title{color:#305c88}body.ui-blue .ide-sidebar-link.active{color:#305c88;box-shadow:inset 3px 0 #305c88}body.ui-blue .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #305c88}body.ui-light-blue .navbar-gitlab{background-color:#2261a1}body.ui-light-blue .navbar-gitlab .navbar-collapse{color:#c9dcf2}body.ui-light-blue .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #5a96d1}body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-light-blue .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light-blue .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-light-blue .navbar-gitlab .navbar-nav>li>a:hover,body.ui-light-blue .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-light-blue .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light-blue .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-light-blue .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light-blue .navbar-gitlab .navbar-nav>li>a:focus,body.ui-light-blue .navbar-gitlab .navbar-nav>li>button:hover,body.ui-light-blue .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(201,220,242,0.2)}body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-light-blue .navbar-gitlab .navbar-nav>li.active>a,body.ui-light-blue .navbar-gitlab .navbar-nav>li.active>button,body.ui-light-blue .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-light-blue .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#2261a1;background-color:#fff}body.ui-light-blue .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-light-blue .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(201,220,242,0.2)}body.ui-light-blue .navbar-gitlab .navbar-sub-nav{color:#c9dcf2}body.ui-light-blue .navbar-gitlab .nav>li{color:#c9dcf2}body.ui-light-blue .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#c9dcf2}@media (min-width: 576px){body.ui-light-blue .navbar-gitlab .nav>li>a:hover,body.ui-light-blue .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-light-blue .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light-blue .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-light-blue .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light-blue .navbar-gitlab .nav>li>a:focus{background-color:rgba(201,220,242,0.2)}}body.ui-light-blue .navbar-gitlab .nav>li>a:hover svg,body.ui-light-blue .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-light-blue .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light-blue .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-light-blue .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light-blue .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-light-blue .navbar-gitlab .nav>li.active>a,body.ui-light-blue .navbar-gitlab .nav>li.dropdown.show>a{color:#2261a1;background-color:#fff}body.ui-light-blue .navbar-gitlab .nav>li.active>a:hover svg,body.ui-light-blue .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-light-blue .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light-blue .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-light-blue .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light-blue .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-light-blue .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-light-blue .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-light-blue .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-light-blue .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#2261a1}body.ui-light-blue .navbar-gitlab .nav>li .impersonated-user svg,body.ui-light-blue .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#2261a1}body.ui-light-blue .navbar .title>a:hover,body.ui-light-blue .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-light-blue .navbar .title>.btn-link:hover,body.ui-light-blue .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-light-blue .navbar .title>.btn-link:hover,body.ui-light-blue .navbar .title>a:focus{background-color:rgba(201,220,242,0.2)}body.ui-light-blue .search form{background-color:rgba(201,220,242,0.2)}body.ui-light-blue .search form:hover{background-color:rgba(201,220,242,0.3)}body.ui-light-blue .search .location-badge{color:#ebf1f7;background-color:rgba(201,220,242,0.1);border-right:1px solid #2261a1}body.ui-light-blue .search .search-input::placeholder{color:rgba(201,220,242,0.8)}body.ui-light-blue .search .search-input-wrap .search-icon,body.ui-light-blue .search .search-input-wrap .clear-icon{fill:rgba(201,220,242,0.8)}body.ui-light-blue .search.search-active form{background-color:#fff}body.ui-light-blue .search.search-active .location-badge{color:#2e2e2e}body.ui-light-blue .search.search-active .search-input-wrap .search-icon{fill:rgba(201,220,242,0.8)}body.ui-light-blue .nav-sidebar li.active{box-shadow:inset 4px 0 0 #367cc2}body.ui-light-blue .nav-sidebar li.active>a{color:#2261a1}body.ui-light-blue .nav-sidebar li.active svg{fill:#2261a1}body.ui-light-blue .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-light-blue .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-light-blue .sidebar-top-level-items>li.active .key{color:#2261a1}body.ui-light-blue .nav-links li.active a,body.ui-light-blue .nav-links li a.active{border-bottom:2px solid #367cc2}body.ui-light-blue .nav-links li.active a .badge.badge-pill,body.ui-light-blue .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-light-blue .nav-links li.active a .key,body.ui-light-blue .nav-links li a.active .badge.badge-pill,body.ui-light-blue .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-light-blue .nav-links li a.active .key{font-weight:600}body.ui-light-blue .branch-header-title{color:#367cc2}body.ui-light-blue .ide-sidebar-link.active{color:#367cc2;box-shadow:inset 3px 0 #367cc2}body.ui-light-blue .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #367cc2}body.ui-green .navbar-gitlab{background-color:#0d4524}body.ui-green .navbar-gitlab .navbar-collapse{color:#c0dfcd}body.ui-green .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #269d58}body.ui-green .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-green .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-green .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-green .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-green .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-green .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-green .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-green .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-green .navbar-gitlab .navbar-nav>li>a:hover,body.ui-green .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-green .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-green .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-green .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-green .navbar-gitlab .navbar-nav>li>a:focus,body.ui-green .navbar-gitlab .navbar-nav>li>button:hover,body.ui-green .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(192,223,205,0.2)}body.ui-green .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-green .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-green .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-green .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-green .navbar-gitlab .navbar-nav>li.active>a,body.ui-green .navbar-gitlab .navbar-nav>li.active>button,body.ui-green .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-green .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#0d4524;background-color:#fff}body.ui-green .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-green .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(192,223,205,0.2)}body.ui-green .navbar-gitlab .navbar-sub-nav{color:#c0dfcd}body.ui-green .navbar-gitlab .nav>li{color:#c0dfcd}body.ui-green .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#c0dfcd}@media (min-width: 576px){body.ui-green .navbar-gitlab .nav>li>a:hover,body.ui-green .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-green .navbar-gitlab .nav>li>.btn-link:hover,body.ui-green .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-green .navbar-gitlab .nav>li>.btn-link:hover,body.ui-green .navbar-gitlab .nav>li>a:focus{background-color:rgba(192,223,205,0.2)}}body.ui-green .navbar-gitlab .nav>li>a:hover svg,body.ui-green .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-green .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-green .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-green .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-green .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-green .navbar-gitlab .nav>li.active>a,body.ui-green .navbar-gitlab .nav>li.dropdown.show>a{color:#0d4524;background-color:#fff}body.ui-green .navbar-gitlab .nav>li.active>a:hover svg,body.ui-green .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-green .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-green .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-green .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-green .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-green .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-green .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-green .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-green .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#0d4524}body.ui-green .navbar-gitlab .nav>li .impersonated-user svg,body.ui-green .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#0d4524}body.ui-green .navbar .title>a:hover,body.ui-green .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-green .navbar .title>.btn-link:hover,body.ui-green .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-green .navbar .title>.btn-link:hover,body.ui-green .navbar .title>a:focus{background-color:rgba(192,223,205,0.2)}body.ui-green .search form{background-color:rgba(192,223,205,0.2)}body.ui-green .search form:hover{background-color:rgba(192,223,205,0.3)}body.ui-green .search .location-badge{color:#e4f3ea;background-color:rgba(192,223,205,0.1);border-right:1px solid #145d33}body.ui-green .search .search-input::placeholder{color:rgba(192,223,205,0.8)}body.ui-green .search .search-input-wrap .search-icon,body.ui-green .search .search-input-wrap .clear-icon{fill:rgba(192,223,205,0.8)}body.ui-green .search.search-active form{background-color:#fff}body.ui-green .search.search-active .location-badge{color:#2e2e2e}body.ui-green .search.search-active .search-input-wrap .search-icon{fill:rgba(192,223,205,0.8)}body.ui-green .nav-sidebar li.active{box-shadow:inset 4px 0 0 #1c7441}body.ui-green .nav-sidebar li.active>a{color:#145d33}body.ui-green .nav-sidebar li.active svg{fill:#145d33}body.ui-green .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-green .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-green .sidebar-top-level-items>li.active .key{color:#145d33}body.ui-green .nav-links li.active a,body.ui-green .nav-links li a.active{border-bottom:2px solid #35935c}body.ui-green .nav-links li.active a .badge.badge-pill,body.ui-green .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-green .nav-links li.active a .key,body.ui-green .nav-links li a.active .badge.badge-pill,body.ui-green .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-green .nav-links li a.active .key{font-weight:600}body.ui-green .branch-header-title{color:#1c7441}body.ui-green .ide-sidebar-link.active{color:#1c7441;box-shadow:inset 3px 0 #1c7441}body.ui-green .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #1c7441}body.ui-light-green .navbar-gitlab{background-color:#156b39}body.ui-light-green .navbar-gitlab .navbar-collapse{color:#c0dfcd}body.ui-light-green .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #43b873}body.ui-light-green .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-light-green .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-light-green .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light-green .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-light-green .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light-green .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-light-green .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-light-green .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-light-green .navbar-gitlab .navbar-nav>li>a:hover,body.ui-light-green .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-light-green .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light-green .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-light-green .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light-green .navbar-gitlab .navbar-nav>li>a:focus,body.ui-light-green .navbar-gitlab .navbar-nav>li>button:hover,body.ui-light-green .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(192,223,205,0.2)}body.ui-light-green .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-light-green .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-light-green .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-light-green .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-light-green .navbar-gitlab .navbar-nav>li.active>a,body.ui-light-green .navbar-gitlab .navbar-nav>li.active>button,body.ui-light-green .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-light-green .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#156b39;background-color:#fff}body.ui-light-green .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-light-green .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(192,223,205,0.2)}body.ui-light-green .navbar-gitlab .navbar-sub-nav{color:#c0dfcd}body.ui-light-green .navbar-gitlab .nav>li{color:#c0dfcd}body.ui-light-green .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#c0dfcd}@media (min-width: 576px){body.ui-light-green .navbar-gitlab .nav>li>a:hover,body.ui-light-green .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-light-green .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light-green .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-light-green .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light-green .navbar-gitlab .nav>li>a:focus{background-color:rgba(192,223,205,0.2)}}body.ui-light-green .navbar-gitlab .nav>li>a:hover svg,body.ui-light-green .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-light-green .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light-green .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-light-green .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light-green .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-light-green .navbar-gitlab .nav>li.active>a,body.ui-light-green .navbar-gitlab .nav>li.dropdown.show>a{color:#156b39;background-color:#fff}body.ui-light-green .navbar-gitlab .nav>li.active>a:hover svg,body.ui-light-green .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-light-green .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light-green .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-light-green .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light-green .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-light-green .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-light-green .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-light-green .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-light-green .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#156b39}body.ui-light-green .navbar-gitlab .nav>li .impersonated-user svg,body.ui-light-green .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#156b39}body.ui-light-green .navbar .title>a:hover,body.ui-light-green .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-light-green .navbar .title>.btn-link:hover,body.ui-light-green .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-light-green .navbar .title>.btn-link:hover,body.ui-light-green .navbar .title>a:focus{background-color:rgba(192,223,205,0.2)}body.ui-light-green .search form{background-color:rgba(192,223,205,0.2)}body.ui-light-green .search form:hover{background-color:rgba(192,223,205,0.3)}body.ui-light-green .search .location-badge{color:#e4f3ea;background-color:rgba(192,223,205,0.1);border-right:1px solid #156b39}body.ui-light-green .search .search-input::placeholder{color:rgba(192,223,205,0.8)}body.ui-light-green .search .search-input-wrap .search-icon,body.ui-light-green .search .search-input-wrap .clear-icon{fill:rgba(192,223,205,0.8)}body.ui-light-green .search.search-active form{background-color:#fff}body.ui-light-green .search.search-active .location-badge{color:#2e2e2e}body.ui-light-green .search.search-active .search-input-wrap .search-icon{fill:rgba(192,223,205,0.8)}body.ui-light-green .nav-sidebar li.active{box-shadow:inset 4px 0 0 #35935c}body.ui-light-green .nav-sidebar li.active>a{color:#156b39}body.ui-light-green .nav-sidebar li.active svg{fill:#156b39}body.ui-light-green .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-light-green .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-light-green .sidebar-top-level-items>li.active .key{color:#156b39}body.ui-light-green .nav-links li.active a,body.ui-light-green .nav-links li a.active{border-bottom:2px solid #35935c}body.ui-light-green .nav-links li.active a .badge.badge-pill,body.ui-light-green .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-light-green .nav-links li.active a .key,body.ui-light-green .nav-links li a.active .badge.badge-pill,body.ui-light-green .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-light-green .nav-links li a.active .key{font-weight:600}body.ui-light-green .branch-header-title{color:#35935c}body.ui-light-green .ide-sidebar-link.active{color:#35935c;box-shadow:inset 3px 0 #35935c}body.ui-light-green .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #35935c}body.ui-red .navbar-gitlab{background-color:#691a16}body.ui-red .navbar-gitlab .navbar-collapse{color:#ebcac5}body.ui-red .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #bb3d29}body.ui-red .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-red .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-red .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-red .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-red .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-red .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-red .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-red .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-red .navbar-gitlab .navbar-nav>li>a:hover,body.ui-red .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-red .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-red .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-red .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-red .navbar-gitlab .navbar-nav>li>a:focus,body.ui-red .navbar-gitlab .navbar-nav>li>button:hover,body.ui-red .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(235,202,197,0.2)}body.ui-red .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-red .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-red .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-red .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-red .navbar-gitlab .navbar-nav>li.active>a,body.ui-red .navbar-gitlab .navbar-nav>li.active>button,body.ui-red .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-red .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#691a16;background-color:#fff}body.ui-red .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-red .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(235,202,197,0.2)}body.ui-red .navbar-gitlab .navbar-sub-nav{color:#ebcac5}body.ui-red .navbar-gitlab .nav>li{color:#ebcac5}body.ui-red .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#ebcac5}@media (min-width: 576px){body.ui-red .navbar-gitlab .nav>li>a:hover,body.ui-red .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-red .navbar-gitlab .nav>li>.btn-link:hover,body.ui-red .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-red .navbar-gitlab .nav>li>.btn-link:hover,body.ui-red .navbar-gitlab .nav>li>a:focus{background-color:rgba(235,202,197,0.2)}}body.ui-red .navbar-gitlab .nav>li>a:hover svg,body.ui-red .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-red .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-red .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-red .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-red .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-red .navbar-gitlab .nav>li.active>a,body.ui-red .navbar-gitlab .nav>li.dropdown.show>a{color:#691a16;background-color:#fff}body.ui-red .navbar-gitlab .nav>li.active>a:hover svg,body.ui-red .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-red .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-red .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-red .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-red .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-red .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-red .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-red .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-red .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#691a16}body.ui-red .navbar-gitlab .nav>li .impersonated-user svg,body.ui-red .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#691a16}body.ui-red .navbar .title>a:hover,body.ui-red .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-red .navbar .title>.btn-link:hover,body.ui-red .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-red .navbar .title>.btn-link:hover,body.ui-red .navbar .title>a:focus{background-color:rgba(235,202,197,0.2)}body.ui-red .search form{background-color:rgba(235,202,197,0.2)}body.ui-red .search form:hover{background-color:rgba(235,202,197,0.3)}body.ui-red .search .location-badge{color:#fae9e6;background-color:rgba(235,202,197,0.1);border-right:1px solid #78291d}body.ui-red .search .search-input::placeholder{color:rgba(235,202,197,0.8)}body.ui-red .search .search-input-wrap .search-icon,body.ui-red .search .search-input-wrap .clear-icon{fill:rgba(235,202,197,0.8)}body.ui-red .search.search-active form{background-color:#fff}body.ui-red .search.search-active .location-badge{color:#2e2e2e}body.ui-red .search.search-active .search-input-wrap .search-icon{fill:rgba(235,202,197,0.8)}body.ui-red .nav-sidebar li.active{box-shadow:inset 4px 0 0 #912f20}body.ui-red .nav-sidebar li.active>a{color:#78291d}body.ui-red .nav-sidebar li.active svg{fill:#78291d}body.ui-red .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-red .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-red .sidebar-top-level-items>li.active .key{color:#78291d}body.ui-red .nav-links li.active a,body.ui-red .nav-links li a.active{border-bottom:2px solid #ad4a3b}body.ui-red .nav-links li.active a .badge.badge-pill,body.ui-red .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-red .nav-links li.active a .key,body.ui-red .nav-links li a.active .badge.badge-pill,body.ui-red .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-red .nav-links li a.active .key{font-weight:600}body.ui-red .branch-header-title{color:#912f20}body.ui-red .ide-sidebar-link.active{color:#912f20;box-shadow:inset 3px 0 #912f20}body.ui-red .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #912f20}body.ui-light-red .navbar-gitlab{background-color:#a62e21}body.ui-light-red .navbar-gitlab .navbar-collapse{color:#f7d5d0}body.ui-light-red .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #d06d5d}body.ui-light-red .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-light-red .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-light-red .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light-red .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-light-red .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light-red .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-light-red .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-light-red .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-light-red .navbar-gitlab .navbar-nav>li>a:hover,body.ui-light-red .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-light-red .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light-red .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-light-red .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light-red .navbar-gitlab .navbar-nav>li>a:focus,body.ui-light-red .navbar-gitlab .navbar-nav>li>button:hover,body.ui-light-red .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(247,213,208,0.2)}body.ui-light-red .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-light-red .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-light-red .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-light-red .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-light-red .navbar-gitlab .navbar-nav>li.active>a,body.ui-light-red .navbar-gitlab .navbar-nav>li.active>button,body.ui-light-red .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-light-red .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#a62e21;background-color:#fff}body.ui-light-red .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-light-red .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(247,213,208,0.2)}body.ui-light-red .navbar-gitlab .navbar-sub-nav{color:#f7d5d0}body.ui-light-red .navbar-gitlab .nav>li{color:#f7d5d0}body.ui-light-red .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#f7d5d0}@media (min-width: 576px){body.ui-light-red .navbar-gitlab .nav>li>a:hover,body.ui-light-red .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-light-red .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light-red .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-light-red .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light-red .navbar-gitlab .nav>li>a:focus{background-color:rgba(247,213,208,0.2)}}body.ui-light-red .navbar-gitlab .nav>li>a:hover svg,body.ui-light-red .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-light-red .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light-red .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-light-red .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light-red .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-light-red .navbar-gitlab .nav>li.active>a,body.ui-light-red .navbar-gitlab .nav>li.dropdown.show>a{color:#a62e21;background-color:#fff}body.ui-light-red .navbar-gitlab .nav>li.active>a:hover svg,body.ui-light-red .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-light-red .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light-red .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-light-red .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light-red .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-light-red .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-light-red .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-light-red .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-light-red .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#a62e21}body.ui-light-red .navbar-gitlab .nav>li .impersonated-user svg,body.ui-light-red .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#a62e21}body.ui-light-red .navbar .title>a:hover,body.ui-light-red .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-light-red .navbar .title>.btn-link:hover,body.ui-light-red .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-light-red .navbar .title>.btn-link:hover,body.ui-light-red .navbar .title>a:focus{background-color:rgba(247,213,208,0.2)}body.ui-light-red .search form{background-color:rgba(247,213,208,0.2)}body.ui-light-red .search form:hover{background-color:rgba(247,213,208,0.3)}body.ui-light-red .search .location-badge{color:#fae2de;background-color:rgba(247,213,208,0.1);border-right:1px solid #a62e21}body.ui-light-red .search .search-input::placeholder{color:rgba(247,213,208,0.8)}body.ui-light-red .search .search-input-wrap .search-icon,body.ui-light-red .search .search-input-wrap .clear-icon{fill:rgba(247,213,208,0.8)}body.ui-light-red .search.search-active form{background-color:#fff}body.ui-light-red .search.search-active .location-badge{color:#2e2e2e}body.ui-light-red .search.search-active .search-input-wrap .search-icon{fill:rgba(247,213,208,0.8)}body.ui-light-red .nav-sidebar li.active{box-shadow:inset 4px 0 0 #c24b38}body.ui-light-red .nav-sidebar li.active>a{color:#a62e21}body.ui-light-red .nav-sidebar li.active svg{fill:#a62e21}body.ui-light-red .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-light-red .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-light-red .sidebar-top-level-items>li.active .key{color:#a62e21}body.ui-light-red .nav-links li.active a,body.ui-light-red .nav-links li a.active{border-bottom:2px solid #c24b38}body.ui-light-red .nav-links li.active a .badge.badge-pill,body.ui-light-red .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-light-red .nav-links li.active a .key,body.ui-light-red .nav-links li a.active .badge.badge-pill,body.ui-light-red .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-light-red .nav-links li a.active .key{font-weight:600}body.ui-light-red .branch-header-title{color:#c24b38}body.ui-light-red .ide-sidebar-link.active{color:#c24b38;box-shadow:inset 3px 0 #c24b38}body.ui-light-red .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #c24b38}body.ui-dark .navbar-gitlab{background-color:#2e2e2e}body.ui-dark .navbar-gitlab .navbar-collapse{color:#dfdfdf}body.ui-dark .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #8a8a8a}body.ui-dark .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-dark .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-dark .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-dark .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-dark .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-dark .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-dark .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-dark .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-dark .navbar-gitlab .navbar-nav>li>a:hover,body.ui-dark .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-dark .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-dark .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-dark .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-dark .navbar-gitlab .navbar-nav>li>a:focus,body.ui-dark .navbar-gitlab .navbar-nav>li>button:hover,body.ui-dark .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(223,223,223,0.2)}body.ui-dark .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-dark .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-dark .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-dark .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-dark .navbar-gitlab .navbar-nav>li.active>a,body.ui-dark .navbar-gitlab .navbar-nav>li.active>button,body.ui-dark .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-dark .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#2e2e2e;background-color:#fff}body.ui-dark .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-dark .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(223,223,223,0.2)}body.ui-dark .navbar-gitlab .navbar-sub-nav{color:#dfdfdf}body.ui-dark .navbar-gitlab .nav>li{color:#dfdfdf}body.ui-dark .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#dfdfdf}@media (min-width: 576px){body.ui-dark .navbar-gitlab .nav>li>a:hover,body.ui-dark .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-dark .navbar-gitlab .nav>li>.btn-link:hover,body.ui-dark .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-dark .navbar-gitlab .nav>li>.btn-link:hover,body.ui-dark .navbar-gitlab .nav>li>a:focus{background-color:rgba(223,223,223,0.2)}}body.ui-dark .navbar-gitlab .nav>li>a:hover svg,body.ui-dark .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-dark .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-dark .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-dark .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-dark .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-dark .navbar-gitlab .nav>li.active>a,body.ui-dark .navbar-gitlab .nav>li.dropdown.show>a{color:#2e2e2e;background-color:#fff}body.ui-dark .navbar-gitlab .nav>li.active>a:hover svg,body.ui-dark .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-dark .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-dark .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-dark .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-dark .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-dark .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-dark .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-dark .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-dark .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#2e2e2e}body.ui-dark .navbar-gitlab .nav>li .impersonated-user svg,body.ui-dark .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#2e2e2e}body.ui-dark .navbar .title>a:hover,body.ui-dark .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-dark .navbar .title>.btn-link:hover,body.ui-dark .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-dark .navbar .title>.btn-link:hover,body.ui-dark .navbar .title>a:focus{background-color:rgba(223,223,223,0.2)}body.ui-dark .search form{background-color:rgba(223,223,223,0.2)}body.ui-dark .search form:hover{background-color:rgba(223,223,223,0.3)}body.ui-dark .search .location-badge{color:#f2f2f2;background-color:rgba(223,223,223,0.1);border-right:1px solid #4f4f4f}body.ui-dark .search .search-input::placeholder{color:rgba(223,223,223,0.8)}body.ui-dark .search .search-input-wrap .search-icon,body.ui-dark .search .search-input-wrap .clear-icon{fill:rgba(223,223,223,0.8)}body.ui-dark .search.search-active form{background-color:#fff}body.ui-dark .search.search-active .location-badge{color:#2e2e2e}body.ui-dark .search.search-active .search-input-wrap .search-icon{fill:rgba(223,223,223,0.8)}body.ui-dark .nav-sidebar li.active{box-shadow:inset 4px 0 0 #707070}body.ui-dark .nav-sidebar li.active>a{color:#4f4f4f}body.ui-dark .nav-sidebar li.active svg{fill:#4f4f4f}body.ui-dark .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-dark .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-dark .sidebar-top-level-items>li.active .key{color:#4f4f4f}body.ui-dark .nav-links li.active a,body.ui-dark .nav-links li a.active{border-bottom:2px solid #a7a7a7}body.ui-dark .nav-links li.active a .badge.badge-pill,body.ui-dark .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-dark .nav-links li.active a .key,body.ui-dark .nav-links li a.active .badge.badge-pill,body.ui-dark .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-dark .nav-links li a.active .key{font-weight:600}body.ui-dark .branch-header-title{color:#707070}body.ui-dark .ide-sidebar-link.active{color:#707070;box-shadow:inset 3px 0 #707070}body.ui-dark .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #707070}body.ui-light .navbar-gitlab{background-color:#f2f2f2}body.ui-light .navbar-gitlab .navbar-collapse{color:#707070}body.ui-light .navbar-gitlab .container-fluid .navbar-toggler{border-left:1px solid #8a8a8a}body.ui-light .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-light .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-light .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-light .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-light .navbar-gitlab .navbar-sub-nav>li>button:hover,body.ui-light .navbar-gitlab .navbar-sub-nav>li>button:focus,body.ui-light .navbar-gitlab .navbar-nav>li>a:hover,body.ui-light .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-light .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-light .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .navbar-nav>li>a:focus,body.ui-light .navbar-gitlab .navbar-nav>li>button:hover,body.ui-light .navbar-gitlab .navbar-nav>li>button:focus{background-color:rgba(112,112,112,0.2)}body.ui-light .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-light .navbar-gitlab .navbar-sub-nav>li.active>button,body.ui-light .navbar-gitlab .navbar-sub-nav>li.dropdown.show>a,body.ui-light .navbar-gitlab .navbar-sub-nav>li.dropdown.show>button,body.ui-light .navbar-gitlab .navbar-nav>li.active>a,body.ui-light .navbar-gitlab .navbar-nav>li.active>button,body.ui-light .navbar-gitlab .navbar-nav>li.dropdown.show>a,body.ui-light .navbar-gitlab .navbar-nav>li.dropdown.show>button{color:#f2f2f2;background-color:#707070}body.ui-light .navbar-gitlab .navbar-sub-nav>li.line-separator,body.ui-light .navbar-gitlab .navbar-nav>li.line-separator{border-left:1px solid rgba(112,112,112,0.2)}body.ui-light .navbar-gitlab .navbar-sub-nav{color:#707070}body.ui-light .navbar-gitlab .nav>li{color:#707070}body.ui-light .navbar-gitlab .nav>li>a.header-user-dropdown-toggle .header-user-avatar{border-color:#707070}@media (min-width: 576px){body.ui-light .navbar-gitlab .nav>li>a:hover,body.ui-light .navbar-gitlab .participants-more .nav>li>.btn-link:hover,.participants-more body.ui-light .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .user-list-more .nav>li>.btn-link:hover,.user-list-more body.ui-light .navbar-gitlab .nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .nav>li>a:focus{background-color:rgba(112,112,112,0.2)}}body.ui-light .navbar-gitlab .nav>li>a:hover svg,body.ui-light .navbar-gitlab .participants-more .nav>li>.btn-link:hover svg,.participants-more body.ui-light .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light .navbar-gitlab .user-list-more .nav>li>.btn-link:hover svg,.user-list-more body.ui-light .navbar-gitlab .nav>li>.btn-link:hover svg,body.ui-light .navbar-gitlab .nav>li>a:focus svg{fill:currentColor}body.ui-light .navbar-gitlab .nav>li.active>a,body.ui-light .navbar-gitlab .nav>li.dropdown.show>a{color:#f2f2f2;background-color:#707070}body.ui-light .navbar-gitlab .nav>li.active>a:hover svg,body.ui-light .navbar-gitlab .participants-more .nav>li.active>.btn-link:hover svg,.participants-more body.ui-light .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light .navbar-gitlab .user-list-more .nav>li.active>.btn-link:hover svg,.user-list-more body.ui-light .navbar-gitlab .nav>li.active>.btn-link:hover svg,body.ui-light .navbar-gitlab .nav>li.dropdown.show>a:hover svg,body.ui-light .navbar-gitlab .participants-more .nav>li.dropdown.show>.btn-link:hover svg,.participants-more body.ui-light .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg,body.ui-light .navbar-gitlab .user-list-more .nav>li.dropdown.show>.btn-link:hover svg,.user-list-more body.ui-light .navbar-gitlab .nav>li.dropdown.show>.btn-link:hover svg{fill:#f2f2f2}body.ui-light .navbar-gitlab .nav>li .impersonated-user svg,body.ui-light .navbar-gitlab .nav>li .impersonated-user:hover svg{fill:#f2f2f2}body.ui-light .navbar .title>a:hover,body.ui-light .navbar .participants-more .title>.btn-link:hover,.participants-more body.ui-light .navbar .title>.btn-link:hover,body.ui-light .navbar .user-list-more .title>.btn-link:hover,.user-list-more body.ui-light .navbar .title>.btn-link:hover,body.ui-light .navbar .title>a:focus{background-color:rgba(112,112,112,0.2)}body.ui-light .search form{background-color:rgba(112,112,112,0.2)}body.ui-light .search form:hover{background-color:rgba(112,112,112,0.3)}body.ui-light .search .location-badge{color:#2e2e2e;background-color:rgba(112,112,112,0.1);border-right:1px solid #707070}body.ui-light .search .search-input::placeholder{color:rgba(112,112,112,0.8)}body.ui-light .search .search-input-wrap .search-icon,body.ui-light .search .search-input-wrap .clear-icon{fill:rgba(112,112,112,0.8)}body.ui-light .search.search-active form{background-color:#fff}body.ui-light .search.search-active .location-badge{color:#2e2e2e}body.ui-light .search.search-active .search-input-wrap .search-icon{fill:rgba(112,112,112,0.8)}body.ui-light .nav-sidebar li.active{box-shadow:inset 4px 0 0 #707070}body.ui-light .nav-sidebar li.active>a{color:#707070}body.ui-light .nav-sidebar li.active svg{fill:#707070}body.ui-light .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-light .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-light .sidebar-top-level-items>li.active .key{color:#707070}body.ui-light .nav-links li.active a,body.ui-light .nav-links li a.active{border-bottom:2px solid #4f4f4f}body.ui-light .nav-links li.active a .badge.badge-pill,body.ui-light .nav-links li.active a .shortcut-mappings .key,.shortcut-mappings body.ui-light .nav-links li.active a .key,body.ui-light .nav-links li a.active .badge.badge-pill,body.ui-light .nav-links li a.active .shortcut-mappings .key,.shortcut-mappings body.ui-light .nav-links li a.active .key{font-weight:600}body.ui-light .branch-header-title{color:#707070}body.ui-light .ide-sidebar-link.active{color:#707070;box-shadow:inset 3px 0 #707070}body.ui-light .ide-sidebar-link.active.is-right{box-shadow:inset -3px 0 #707070}body.ui-light .navbar-gitlab{background-color:#f2f2f2;box-shadow:0 1px 0 0 #e5e5e5}body.ui-light .navbar-gitlab .logo-text svg{fill:#2e2e2e}body.ui-light .navbar-gitlab .navbar-sub-nav>li>a:hover,body.ui-light .navbar-gitlab .participants-more .navbar-sub-nav>li>.btn-link:hover,.participants-more body.ui-light .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .user-list-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more body.ui-light .navbar-gitlab .navbar-sub-nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .navbar-sub-nav>li>a:focus,body.ui-light .navbar-gitlab .navbar-nav>li>a:hover,body.ui-light .navbar-gitlab .participants-more .navbar-nav>li>.btn-link:hover,.participants-more body.ui-light .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .user-list-more .navbar-nav>li>.btn-link:hover,.user-list-more body.ui-light .navbar-gitlab .navbar-nav>li>.btn-link:hover,body.ui-light .navbar-gitlab .navbar-nav>li>a:focus{color:#2e2e2e}body.ui-light .navbar-gitlab .navbar-sub-nav>li.active>a,body.ui-light .navbar-gitlab .navbar-sub-nav>li.active>a:hover,body.ui-light .navbar-gitlab .participants-more .navbar-sub-nav>li.active>.btn-link:hover,.participants-more body.ui-light .navbar-gitlab .navbar-sub-nav>li.active>.btn-link:hover,body.ui-light .navbar-gitlab .user-list-more .navbar-sub-nav>li.active>.btn-link:hover,.user-list-more body.ui-light .navbar-gitlab .navbar-sub-nav>li.active>.btn-link:hover,body.ui-light .navbar-gitlab .navbar-nav>li.active>a,body.ui-light .navbar-gitlab .navbar-nav>li.active>a:hover,body.ui-light .navbar-gitlab .participants-more .navbar-nav>li.active>.btn-link:hover,.participants-more body.ui-light .navbar-gitlab .navbar-nav>li.active>.btn-link:hover,body.ui-light .navbar-gitlab .user-list-more .navbar-nav>li.active>.btn-link:hover,.user-list-more body.ui-light .navbar-gitlab .navbar-nav>li.active>.btn-link:hover{color:#fff}body.ui-light .navbar-gitlab .container-fluid .navbar-toggler,body.ui-light .navbar-gitlab .container-fluid .navbar-toggler:hover{color:#707070;border-left:1px solid #dfdfdf}body.ui-light .search form{background-color:#fff;box-shadow:inset 0 0 0 1px #e5e5e5}body.ui-light .search form:hover{background-color:#fff;box-shadow:inset 0 0 0 1px #b8d6f4}body.ui-light .search form:hover .location-badge{box-shadow:inset 0 0 0 1px #b8d6f4}body.ui-light .search .search-input-wrap .search-icon{fill:#dfdfdf}body.ui-light .search .search-input-wrap .search-input{color:#2e2e2e}body.ui-light .search .location-badge{color:#707070;box-shadow:inset 0 0 0 1px #e5e5e5;background-color:#eee;border-right:0}body.ui-light .nav-sidebar li.active>a{color:#2e2e2e}body.ui-light .nav-sidebar li.active svg{fill:#2e2e2e}body.ui-light .sidebar-top-level-items>li.active .badge.badge-pill,body.ui-light .sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings body.ui-light .sidebar-top-level-items>li.active .key{color:#2e2e2e}.navbar-gitlab{padding:0 16px;z-index:1000;margin-bottom:0;min-height:40px;border:0;border-bottom:1px solid #e5e5e5;position:fixed;top:0;left:0;right:0;border-radius:0}.navbar-gitlab .logo-text{line-height:initial}.navbar-gitlab .logo-text svg{width:55px;height:14px;margin:0;fill:#fff}.navbar-gitlab .close-icon{display:none}.navbar-gitlab .menu-expanded .more-icon{display:none}.navbar-gitlab .menu-expanded .close-icon{display:block}.navbar-gitlab .header-content{width:100%;display:-webkit-flex;display:flex;justify-content:space-between;position:relative;min-height:40px;padding-left:0}.navbar-gitlab .header-content .title-container{display:-webkit-flex;display:flex;-webkit-align-items:stretch;align-items:stretch;-webkit-flex:1 1 auto;flex:1 1 auto;padding-top:0;overflow:visible}.navbar-gitlab .header-content .title{padding-right:0;color:currentColor;display:-webkit-flex;display:flex;position:relative;margin:0;font-size:18px;vertical-align:top;white-space:nowrap}.navbar-gitlab .header-content .title img{height:28px}.navbar-gitlab .header-content .title img+.logo-text{margin-left:8px}.navbar-gitlab .header-content .title.wrap{white-space:normal}.navbar-gitlab .header-content .title.initializing{opacity:0}.navbar-gitlab .header-content .title a{display:-webkit-flex;display:flex;align-items:center;padding:2px 8px;margin:5px 2px 5px -8px;border-radius:4px}@media (min-width: 576px){.navbar-gitlab .header-content .title a .tanuki-logo{margin-right:8px}}.navbar-gitlab .header-content .title .project-item-select{right:auto;left:0}.navbar-gitlab .header-content .dropdown.open>a{border-bottom-color:#fff}@media (max-width: 575.98px){.navbar-gitlab .header-content.menu-expanded .title-container{display:none}.navbar-gitlab .header-content.menu-expanded .navbar-collapse{display:block}}.navbar-gitlab li.dropdown-bold-header{color:#707070;font-size:12px;padding:0 16px}.navbar-gitlab .navbar-collapse{flex:0 0 auto;border-top:0;padding:0}@media (max-width: 575.98px){.navbar-gitlab .navbar-collapse{flex:1 1 auto}}.navbar-gitlab .navbar-collapse .nav{flex-wrap:nowrap}@media (max-width: 575.98px){.navbar-gitlab .navbar-collapse .nav>li:not(.d-none) a{margin-left:0;min-width:100%}}.navbar-gitlab .container-fluid{padding:0}.navbar-gitlab .container-fluid .user-counter svg{margin-right:3px}.navbar-gitlab .container-fluid .navbar-toggler{position:relative;right:-10px;border-radius:0;min-width:45px;padding:0;margin:8px -7px 8px 0;font-size:14px;text-align:center;color:currentColor}.navbar-gitlab .container-fluid .navbar-toggler:hover,.navbar-gitlab .container-fluid .navbar-toggler:focus,.navbar-gitlab .container-fluid .navbar-toggler.active{color:currentColor;background-color:transparent}.navbar-gitlab .container-fluid .navbar-toggler .more-icon,.navbar-gitlab .container-fluid .navbar-toggler .close-icon{fill:#fff;margin:auto}@media (max-width: 575.98px){.navbar-gitlab .container-fluid .navbar-nav{display:-webkit-flex;display:flex;padding-right:10px;flex-direction:row}}.navbar-gitlab .container-fluid .navbar-nav li .badge.badge-pill,.navbar-gitlab .container-fluid .navbar-nav li .shortcut-mappings .key,.shortcut-mappings .navbar-gitlab .container-fluid .navbar-nav li .key{box-shadow:none;font-weight:600}@media (max-width: 575.98px){.navbar-gitlab .container-fluid .nav>li.header-user{padding-left:10px}}.navbar-gitlab .container-fluid .nav>li>a{will-change:color;margin:4px 2px;padding:6px 8px;height:32px}@media (max-width: 575.98px){.navbar-gitlab .container-fluid .nav>li>a{padding:0}}.navbar-gitlab .container-fluid .nav>li>a.header-user-dropdown-toggle{margin-left:2px}.navbar-gitlab .container-fluid .nav>li>a.header-user-dropdown-toggle .header-user-avatar{margin-right:0}.navbar-gitlab .container-fluid .nav>li>a:hover,.navbar-gitlab .container-fluid .participants-more .nav>li>.btn-link:hover,.participants-more .navbar-gitlab .container-fluid .nav>li>.btn-link:hover,.navbar-gitlab .container-fluid .user-list-more .nav>li>.btn-link:hover,.user-list-more .navbar-gitlab .container-fluid .nav>li>.btn-link:hover,.navbar-gitlab .container-fluid .nav>li>a:focus{text-decoration:none;outline:0;opacity:1;color:#fff}.navbar-gitlab .container-fluid .nav>li>a:hover.header-user-dropdown-toggle .header-user-avatar,.navbar-gitlab .container-fluid .participants-more .nav>li>.header-user-dropdown-toggle.btn-link:hover .header-user-avatar,.participants-more .navbar-gitlab .container-fluid .nav>li>.header-user-dropdown-toggle.btn-link:hover .header-user-avatar,.navbar-gitlab .container-fluid .user-list-more .nav>li>.header-user-dropdown-toggle.btn-link:hover .header-user-avatar,.user-list-more .navbar-gitlab .container-fluid .nav>li>.header-user-dropdown-toggle.btn-link:hover .header-user-avatar,.navbar-gitlab .container-fluid .nav>li>a:focus.header-user-dropdown-toggle .header-user-avatar{border-color:#fff}.navbar-gitlab .container-fluid .nav>li .header-new-dropdown-toggle{margin-right:0}.navbar-gitlab .container-fluid .nav>li .impersonated-user,.navbar-gitlab .container-fluid .nav>li .impersonated-user:hover{margin-right:1px;background-color:#fff;border-top-right-radius:0;border-bottom-right-radius:0}.navbar-gitlab .container-fluid .nav>li .impersonation-btn,.navbar-gitlab .container-fluid .nav>li .impersonation-btn:hover{background-color:#fff;margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.navbar-gitlab .container-fluid .nav>li .impersonation-btn i,.navbar-gitlab .container-fluid .nav>li .impersonation-btn:hover i{color:#fc9403;font-size:20px}.navbar-sub-nav>li>a,.navbar-sub-nav>li>button,.navbar-nav>li>a,.navbar-nav>li>button{display:-webkit-flex;display:flex;align-items:center;justify-content:center;padding:6px 8px;margin:4px 2px;font-size:12px;color:currentColor;border-radius:4px;height:32px;font-weight:600}.navbar-sub-nav>li>a:hover,.participants-more .navbar-sub-nav>li>.btn-link:hover,.user-list-more .navbar-sub-nav>li>.btn-link:hover,.navbar-sub-nav>li>a:focus,.navbar-sub-nav>li>button:hover,.navbar-sub-nav>li>button:focus,.navbar-nav>li>a:hover,.participants-more .navbar-nav>li>.btn-link:hover,.user-list-more .navbar-nav>li>.btn-link:hover,.navbar-nav>li>a:focus,.navbar-nav>li>button:hover,.navbar-nav>li>button:focus{text-decoration:none;outline:0;color:#fff}.navbar-sub-nav>li>button,.navbar-nav>li>button{background:transparent;border:0}.navbar-sub-nav>li.line-separator,.navbar-nav>li.line-separator{margin:8px}.navbar-sub-nav .dropdown-menu,.navbar-nav .dropdown-menu{position:absolute}.navbar-sub-nav{display:-webkit-flex;display:flex;margin:0 0 0 6px}.navbar-sub-nav .dropdown-chevron{position:relative;top:-1px;font-size:10px}.navbar-sub-nav .frequent-items-item-select-holder{display:inline}.navbar-sub-nav .impersonation i{color:#db3b21}.caret-down{height:11px;width:11px;margin-left:4px;fill:currentColor}.header-user .dropdown-menu,.header-new .dropdown-menu{margin-top:4px}.breadcrumbs{display:-webkit-flex;display:flex;min-height:48px;color:#2e2e2e}.breadcrumbs-container{display:-webkit-flex;display:flex;width:100%;position:relative;padding-top:8px;padding-bottom:8px;align-items:center;border-bottom:1px solid #e5e5e5}.breadcrumbs-links{-webkit-flex:1;flex:1;min-width:0;align-self:center;color:#707070}.breadcrumbs-links .avatar-tile{margin-right:4px;border:1px solid #e5e5e5;border-radius:50%;vertical-align:sub}.breadcrumbs-links .text-expander{margin-left:0;margin-right:2px}.breadcrumbs-links .text-expander>i{position:relative;top:1px}.breadcrumbs-list{display:-webkit-flex;display:flex;margin-bottom:0;line-height:16px}@media (max-width: 575.98px){.breadcrumbs-list{flex-wrap:wrap}}.breadcrumbs-list>li{display:flex;align-items:center;position:relative;padding:2px 0}.breadcrumbs-list>li:not(:last-child){padding-right:20px}.breadcrumbs-list>li:not(:last-child):not(.dropdown){overflow:hidden}.breadcrumbs-list>li>a{font-size:12px;color:currentColor;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:0 1 auto}.breadcrumb-item-text{text-decoration:inherit}@media (max-width: 575.98px){.breadcrumb-item-text{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:128px}}.breadcrumbs-list-angle{position:absolute;right:7px;top:50%;color:#919191;transform:translateY(-50%)}.breadcrumbs-extra{display:-webkit-flex;display:flex;flex:0 0 auto;margin-left:auto}.breadcrumbs-sub-title{margin:0;font-size:12px;font-weight:600;line-height:16px}.breadcrumbs-sub-title a{color:#2e2e2e}.btn-sign-in{background-color:#ebebfa;color:#292961;font-weight:600;line-height:18px}.btn-sign-in:hover{background-color:#fff}@media (max-width: 575.98px){.btn-sign-in{margin-top:4px}}.navbar-nav li .badge.badge-pill,.navbar-nav li .shortcut-mappings .key,.shortcut-mappings .navbar-nav li .key{position:inherit;font-weight:400;margin-left:-6px;font-size:11px;color:#fff;padding:0 5px;line-height:12px;border-radius:7px;box-shadow:0 1px 0 rgba(76,78,84,0.2)}.navbar-nav li .badge.badge-pill.issues-count,.navbar-nav li .shortcut-mappings .issues-count.key,.shortcut-mappings .navbar-nav li .issues-count.key{background-color:#1aaa55}.navbar-nav li .badge.badge-pill.merge-requests-count,.navbar-nav li .shortcut-mappings .merge-requests-count.key,.shortcut-mappings .navbar-nav li .merge-requests-count.key{background-color:#de7e00}.navbar-nav li .badge.badge-pill.todos-count,.navbar-nav li .shortcut-mappings .todos-count.key,.shortcut-mappings .navbar-nav li .todos-count.key{background-color:#1f78d1}@media (max-width: 575.98px){.navbar-gitlab .container-fluid{font-size:18px}.navbar-gitlab .container-fluid .navbar-nav{table-layout:fixed;width:100%;margin:0;text-align:right}.navbar-gitlab .container-fluid .navbar-collapse{margin-left:-8px;margin-right:-10px}.navbar-gitlab .container-fluid .navbar-collapse .nav>li:not(.d-none){display:table-cell !important;width:25%}.navbar-gitlab .container-fluid .navbar-collapse .nav>li:not(.d-none) a{margin-right:8px}.header-user-dropdown-toggle{text-align:center}.header-user-avatar{float:none}}.header-user .dropdown-menu{width:auto;min-width:unset;margin-top:4px;color:#2e2e2e;left:auto}.header-user .dropdown-menu li.current-user{padding:5px 18px}.header-user .dropdown-menu li.current-user .user-name{display:block}.header-user .dropdown-menu svg{vertical-align:text-top}.header-user-avatar{float:left;margin-right:5px;border-radius:50%;border:1px solid #f5f5f5}.with-performance-bar .navbar-gitlab{top:35px}.navbar-empty{height:40px;background:#fff;border-bottom:1px solid #f0f0f0}.navbar-empty .mx-auto{margin:8px 0;text-align:center}.navbar-empty .mx-auto .tanuki-logo,.navbar-empty .mx-auto img{height:36px}.file-content.code{border:0;box-shadow:none;margin:0;padding:0;table-layout:fixed}.file-content.code pre{padding:10px 0;border:0;border-radius:0;font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;font-size:90%;line-height:19px;margin:0;overflow:auto;overflow-y:hidden;white-space:pre;word-wrap:normal;border-left:1px solid}.file-content.code pre code{display:inline-block;min-width:100%;font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;white-space:normal;word-wrap:normal;padding:0}.file-content.code pre code .line{display:block;width:100%;min-height:19px;padding-left:10px;padding-right:10px;white-space:pre}.file-content.code .line-numbers{padding:10px;text-align:right;float:left}.file-content.code .line-numbers a{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;display:block;font-size:90% !important;min-height:19px;white-space:nowrap}.file-content.code .line-numbers a i{float:left;margin-top:3px;margin-right:5px;visibility:hidden}.file-content.code .line-numbers a:hover,.file-content.code .line-numbers .participants-more .btn-link:hover,.participants-more .file-content.code .line-numbers .btn-link:hover,.file-content.code .line-numbers .user-list-more .btn-link:hover,.user-list-more .file-content.code .line-numbers .btn-link:hover,.file-content.code .line-numbers a:focus{outline:none}.file-content.code .line-numbers a:hover i,.file-content.code .line-numbers .participants-more .btn-link:hover i,.participants-more .file-content.code .line-numbers .btn-link:hover i,.file-content.code .line-numbers .user-list-more .btn-link:hover i,.user-list-more .file-content.code .line-numbers .btn-link:hover i,.file-content.code .line-numbers a:focus i{visibility:visible}.status-box{padding:5px 11px;margin-top:4px;border-radius:3px;display:block;float:left;margin-right:10px;color:#fff;font-size:14px;line-height:25px}@media (min-width: 576px){.status-box{padding:0 10px;margin-top:5px}}.status-box.status-box-closed,.status-box.status-box-mr-closed{background-color:#db3b21}.status-box.status-box-issue-closed,.status-box.status-box-mr-merged{background-color:#1f78d1}.status-box.status-box-open{background-color:#1aaa55}.status-box.status-box-expired{background-color:#fc9403}.status-box.status-box-upcoming{background:#707070}.status-box.status-box-milestone{color:#2e2e2e;background:#eee}.ui-widget{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:1rem}.ui-widget .ui-state-default{border:1px solid #fff;background:#fff;color:#777}.ui-widget .ui-state-highlight{border:0;background:transparent}.hover-list{position:relative;margin:0;padding:0;list-style:none}.hover-list>li{padding:10px 15px;min-height:20px;border-bottom:1px solid rgba(0,0,0,0.05);word-wrap:break-word}.hover-list>li::after{content:" ";display:table;clear:both}.hover-list>li.disabled{color:#919191}.hover-list>li:not(.ui-sort-disabled):hover{background:#f6fafe}.hover-list>li.unstyled:hover{background:none}.hover-list>li.warning-row{background-color:#fff1de;border-color:#fed69f;color:#c26700}.hover-list>li.warning-row:hover{background:#fff1de}.hover-list>li.smoke{background-color:#fafafa}.hover-list>li:last-child{border-bottom:0}.hover-list>li:last-child.bottom{background:#fafafa}.hover-list>li .list-item-name{float:left;position:relative;top:3px}.hover-list>li p{padding-top:1px;margin:0;color:#f0f0f0}.hover-list>li p img{position:relative;top:3px}.hover-list>li .card.card-body-title,.hover-list>li .card-body-title.card-slim{font-size:14px;line-height:18px}ul.bordered-list,ul.unstyled-list{margin:5px 0;padding:0;list-style:none}ul.bordered-list>li,ul.unstyled-list>li{padding:10px 0;border-bottom:1px solid #eee;display:block;margin:0}ul.bordered-list>li::after,ul.unstyled-list>li::after{display:block;clear:both;content:""}ul.bordered-list>li:last-child,ul.unstyled-list>li:last-child{border-bottom:0}ul.bordered-list>li.active,ul.unstyled-list>li.active{background:#fafafa}ul.bordered-list>li.active a,ul.unstyled-list>li.active a{font-weight:600}ul.bordered-list>li.hide,ul.unstyled-list>li.hide{display:none}ul.bordered-list>li.light a,ul.bordered-list>li.description-block a,ul.unstyled-list>li.light a,ul.unstyled-list>li.description-block a{color:#2e2e2e}ul.bordered-list.top-list li:first-child,ul.unstyled-list.top-list li:first-child{padding-top:0}ul.bordered-list.top-list li:first-child h4,ul.bordered-list.top-list li:first-child h5,ul.unstyled-list.top-list li:first-child h4,ul.unstyled-list.top-list li:first-child h5{margin-top:0}ul.unstyled-list>li{border-bottom:0}ul.content-list{margin:5px 0;padding:0;list-style:none;margin:0;padding:0}ul.content-list>li{padding:10px 0;border-bottom:1px solid #eee;display:block;margin:0}ul.content-list>li::after{display:block;clear:both;content:""}ul.content-list>li:last-child{border-bottom:0}ul.content-list>li.active{background:#fafafa}ul.content-list>li.active a{font-weight:600}ul.content-list>li.hide{display:none}ul.content-list>li.light a,ul.content-list>li.description-block a{color:#2e2e2e}ul.content-list li{border-color:#f0f0f0;font-size:14px;color:#2e2e2e}ul.content-list li.no-description .title{line-height:42px}ul.content-list li .title{font-weight:600}ul.content-list li a{color:#2e2e2e}ul.content-list li .member-group-link{color:#1b69b6}ul.content-list li .description{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:82%;color:#707070}ul.content-list li .controls{float:right}ul.content-list li .controls>.control-text{margin-right:10px;line-height:42px}ul.content-list li .controls>.control-text:last-child{margin-right:0}ul.content-list li .controls>.btn,ul.content-list li .controls>.btn-group,ul.content-list li .controls>.dropdown.inline{margin-right:10px;display:inline-block;margin-top:3px;margin-bottom:4px}ul.content-list li .controls>.btn.has-tooltip,ul.content-list li .controls>.btn:last-child,ul.content-list li .controls>.btn-group.has-tooltip,ul.content-list li .controls>.btn-group:last-child,ul.content-list li .controls>.dropdown.inline.has-tooltip,ul.content-list li .controls>.dropdown.inline:last-child{margin-right:0}@media (max-width: 575.98px){ul.content-list li .controls>.btn.has-tooltip,ul.content-list li .controls>.btn:last-child,ul.content-list li .controls>.btn-group.has-tooltip,ul.content-list li .controls>.btn-group:last-child,ul.content-list li .controls>.dropdown.inline.has-tooltip,ul.content-list li .controls>.dropdown.inline:last-child{margin:0 auto}}ul.content-list li .controls .no-comments{opacity:.5}ul.content-list li .member-controls{float:none}@media (min-width: 576px){ul.content-list li .member-controls{float:right}}ul.content-list li.ui-sortable-helper{border-bottom:0}ul.content-list li.list-placeholder{background-color:#fafafa;border:dotted 1px #f0f0f0;margin:1px 0;min-height:52px}.flex-list .flex-row{display:-webkit-flex;display:-ms-flexbox;display:flex;align-items:center;white-space:nowrap}.flex-list .row-main-content{flex:1 1 auto;overflow:hidden;padding-right:8px}.flex-list .row-fixed-content{flex:0 0 auto;margin-left:auto}.flex-list .row-title{font-weight:600}.flex-list .row-second-line{display:block}.flex-list .dropdown .btn-block,.flex-list .dropdown .login-page input[type="submit"],.login-page .flex-list .dropdown input[type="submit"]{margin-bottom:0;line-height:inherit}.flex-list .badge-secondary{color:#707070}.flex-list .avatar-cell{align-self:flex-start}.card>.content-list>li,.card-slim>.content-list>li{padding:10px 16px}ul.controls{float:right;list-style:none;display:flex;align-items:center}ul.controls .btn{padding:10px 14px}ul.controls>li{float:left;margin-right:10px}ul.controls>li:last-child{margin-right:0}ul.controls>li .author_link .avatar-inline,ul.controls>li .author_link .page-content-header .avatar,.page-content-header ul.controls>li .author_link .avatar{margin-left:0;margin-right:0;margin-bottom:0}ul.controls .issuable-pipeline-broken a,ul.controls .issuable-pipeline-status a,ul.controls .author_link{display:flex}ul.indent-list{padding:10px 0 0 30px}@keyframes spin-avatar{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.namespace-title .tooltip-inner{max-width:350px}.tanuki-logo .tanuki-left-ear,.tanuki-logo .tanuki-right-ear,.tanuki-logo .tanuki-nose{fill:#e24329;transition:all 0.8s}.tanuki-logo .tanuki-left-ear:hover,.tanuki-logo .tanuki-right-ear:hover,.tanuki-logo .tanuki-nose:hover{fill:#f1a699;transition:all 0.1s}.tanuki-logo .tanuki-left-eye,.tanuki-logo .tanuki-right-eye{fill:#fc6d26;transition:all 0.8s}.tanuki-logo .tanuki-left-eye:hover,.tanuki-logo .tanuki-right-eye:hover{fill:#fec2a4;transition:all 0.1s}.tanuki-logo .tanuki-left-cheek,.tanuki-logo .tanuki-right-cheek{fill:#fca326;transition:all 0.8s}.tanuki-logo .tanuki-left-cheek:hover,.tanuki-logo .tanuki-right-cheek:hover{fill:#fed8a4;transition:all 0.1s}.tanuki-logo.animate .tanuki-shape{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.tanuki-logo.animate .tanuki-left-cheek{-webkit-animation-name:animate-tanuki-left-cheek;animation-name:animate-tanuki-left-cheek}@-webkit-keyframes animate-tanuki-left-cheek{0%, 10%, 100%{fill:#fed8a4}90%{fill:#fca326}}@keyframes animate-tanuki-left-cheek{0%, 10%, 100%{fill:#fed8a4}90%{fill:#fca326}}.tanuki-logo.animate .tanuki-left-eye{-webkit-animation-name:animate-tanuki-left-eye;animation-name:animate-tanuki-left-eye}@-webkit-keyframes animate-tanuki-left-eye{10%, 80%{fill:#fc6d26}20%, 90%{fill:#fec2a4}}@keyframes animate-tanuki-left-eye{10%, 80%{fill:#fc6d26}20%, 90%{fill:#fec2a4}}.tanuki-logo.animate .tanuki-left-ear{-webkit-animation-name:animate-tanuki-left-ear;animation-name:animate-tanuki-left-ear}@-webkit-keyframes animate-tanuki-left-ear{10%, 80%{fill:#e24329}20%, 90%{fill:#f1a699}}@keyframes animate-tanuki-left-ear{10%, 80%{fill:#e24329}20%, 90%{fill:#f1a699}}.tanuki-logo.animate .tanuki-nose{-webkit-animation-name:animate-tanuki-nose;animation-name:animate-tanuki-nose}@-webkit-keyframes animate-tanuki-nose{20%, 70%{fill:#e24329}30%, 80%{fill:#f1a699}}@keyframes animate-tanuki-nose{20%, 70%{fill:#e24329}30%, 80%{fill:#f1a699}}.tanuki-logo.animate .tanuki-right-eye{-webkit-animation-name:animate-tanuki-right-eye;animation-name:animate-tanuki-right-eye}@-webkit-keyframes animate-tanuki-right-eye{30%, 60%{fill:#fc6d26}40%, 70%{fill:#fec2a4}}@keyframes animate-tanuki-right-eye{30%, 60%{fill:#fc6d26}40%, 70%{fill:#fec2a4}}.tanuki-logo.animate .tanuki-right-ear{-webkit-animation-name:animate-tanuki-right-ear;animation-name:animate-tanuki-right-ear}@-webkit-keyframes animate-tanuki-right-ear{30%, 60%{fill:#e24329}40%, 70%{fill:#f1a699}}@keyframes animate-tanuki-right-ear{30%, 60%{fill:#e24329}40%, 70%{fill:#f1a699}}.tanuki-logo.animate .tanuki-right-cheek{-webkit-animation-name:animate-tanuki-right-cheek;animation-name:animate-tanuki-right-cheek}@-webkit-keyframes animate-tanuki-right-cheek{40%{fill:#fca326}60%{fill:#fed8a4}}@keyframes animate-tanuki-right-cheek{40%{fill:#fca326}60%{fill:#fed8a4}}.div-dropzone-wrapper .div-dropzone{position:relative}.div-dropzone-wrapper .div-dropzone .div-dropzone-hover{position:absolute;top:50%;left:50%;margin-top:-11.5px;margin-left:-15px;opacity:0;font-size:30px;transition:opacity 200ms ease-in-out;pointer-events:none}.div-dropzone-wrapper .div-dropzone .div-dropzone-spinner{position:absolute;bottom:10px;right:5px;opacity:0;font-size:20px;transition:opacity 200ms ease-in-out}.div-dropzone-wrapper .div-dropzone .div-dropzone-icon{display:block;text-align:center;font-size:inherit}.div-dropzone-wrapper .div-dropzone .div-dropzone-progress{position:absolute;top:7px;left:-40px;width:35px;font-size:13px;text-align:right}.div-dropzone-wrapper .div-dropzone .dz-preview{display:none}.div-dropzone-alert{margin-top:5px;margin-bottom:0;transition:opacity 200ms ease-in-out}.md-area{position:relative}.md-header .nav-links a{width:100%;padding-top:0;line-height:19px}.md-header .nav-links a:focus{margin-top:-10px;padding-top:10px}@media (max-width: 575.98px){.md-header-tab{flex:1;width:100%;border-bottom:1px solid #e5e5e5;text-align:center}}.nav-links li.md-header-toolbar{margin-left:auto;display:none}.nav-links li.md-header-toolbar.active{display:block}@media (max-width: 575.98px){.nav-links li.md-header-toolbar.active{flex:none;display:flex;justify-content:center;width:100%;padding-top:10px;padding-bottom:10px}}.referenced-users{color:#2e2e2e;padding-top:10px}.referenced-commands{background:#f6fafe;padding:8px 16px;border-radius:4px}.referenced-commands p{margin:0}.md-preview-holder{min-height:167px;padding:10px 0;overflow-x:auto}.markdown-area{border-radius:0;background:#fff;border:1px solid #ddd;min-height:140px;max-height:500px;padding:5px;box-shadow:none;width:100%}.md.md-preview-holder>ul{list-style-type:disc}.md.md-preview-holder>ul ul{list-style-type:circle}.md.md-preview-holder>ul ul ul{list-style-type:square}.md code{white-space:pre-wrap;word-break:keep-all}.md hr{border-color:#e1e1e1;margin:10px 0}.md img:not(.emoji){border:1px solid #f0f0f0;padding:5px;margin:5px 0;max-height:calc(100vh - 100px)}.md table{width:auto;display:inline-block;overflow-x:auto;border:0;border-color:#ddd}@supports (width: fit-content){.md table{display:block;width:fit-content}}.md table tr th{border-bottom:solid 2px #ddd}.md table tr td{border-color:#ddd}.toolbar-btn{float:left;padding:0 7px;background:transparent;border:0;outline:0}.toolbar-btn svg{width:14px;height:14px;margin-top:3px;fill:#707070}.toolbar-btn:hover svg,.toolbar-btn:focus svg{fill:#1b69b6}.toolbar-fullscreen-btn{margin-left:16px;margin-right:-5px}@media (max-width: 575.98px){.toolbar-fullscreen-btn{margin-left:0;margin-right:0}}.atwho-view{overflow-y:auto;overflow-x:hidden}.atwho-view .name,.atwho-view small.aliases,.atwho-view small.params{float:left}.atwho-view small.aliases,.atwho-view small.params{padding:2px 5px}.atwho-view small.description{float:right;padding:3px 5px}.atwho-view .avatar-inline,.atwho-view .page-content-header .avatar,.page-content-header .atwho-view .avatar{margin-bottom:0}.atwho-view .cur .avatar{-o-transition-property:none !important;-moz-transition-property:none !important;-ms-transition-property:none !important;-webkit-transition-property:none !important;transition-property:none !important;-o-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-webkit-transform:none !important;transform:none !important;-webkit-animation:none !important;-moz-animation:none !important;-o-animation:none !important;-ms-animation:none !important;animation:none !important;border:1px solid #fff}.atwho-view ul>li{white-space:nowrap}.atwho-view ul>li::after{display:block;clear:both;content:""}.atwho-view .atwho-view-ul{padding:8px 1px}.atwho-view .atwho-view-ul li{padding:8px 16px;border:0}.atwho-view .atwho-view-ul li.cur{background-color:#eee;color:#2e2e2e}.atwho-view .atwho-view-ul li.cur small{color:inherit}.atwho-view .atwho-view-ul li div.avatar{display:inline-flex;justify-content:center;align-items:center}.atwho-view .atwho-view-ul li div.avatar .center{line-height:14px}.atwho-view .atwho-view-ul li strong{color:#2e2e2e}@media (max-width: 575.98px){.atwho-view-ul{width:350px}.atwho-view ul li{overflow:hidden;text-overflow:ellipsis}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.media-body-wrap{flex-grow:1}@media (max-width: 575.98px){.container .content{margin-top:20px}.container-fluid{padding-left:5px;padding-right:5px}.nav-links>li>a{padding:10px;font-size:12px;margin-right:3px}.nav-links>li>a .badge.badge-pill,.nav-links>li>a .shortcut-mappings .key,.shortcut-mappings .nav-links>li>a .key{display:none}.referenced-users{margin-right:0}.issues-details-filters:not(.filtered-search-block),.dash-projects-filters,.check-all-holder{display:none}.rss-btn{display:none}.project-home-links{display:none}.project-home-panel{padding-left:0 !important}.project-home-panel .project-repo-buttons,.project-home-panel .git-clone-holder{display:none}.project-home-panel .project-repo-buttons{display:block}.project-home-panel .project-repo-buttons .count-buttons .btn{margin:0 10px}.project-home-panel .project-repo-buttons .count-buttons .count-with-arrow{display:none}.group-buttons{display:none}.container .title{padding-left:15px !important}.nav-links li a,.nav-links li a{font-size:14px;padding:19px 10px}.activity-filter-block{display:none}.projects-search-form .btn{display:none}}@media (max-width: 767.98px){.issues-filters .milestone-filter{display:none}.page-title .note-created-ago,.page-title .new-issue-link{display:none}aside:not(.right-sidebar){display:none}}.modal-xl{max-width:98%}.modal-header{background-color:#fff}.modal-header .page-title .modal-title-with-label span,.modal-header .modal-title .modal-title-with-label span{vertical-align:middle;display:inline-block}.modal-header .page-title .color-label,.modal-header .modal-title .color-label{font-size:14px;padding:6px 10px;vertical-align:middle}.modal-header .page-title{margin-top:0}.modal-body{background-color:#fff;line-height:1.5;min-height:134px;position:relative;padding:24px 16px;text-align:left}.modal-body .form-actions{margin:16px -16px -16px}.modal-body .text-danger{font-weight:600}.modal-footer{display:flex;flex-direction:row}.modal-footer .btn+.btn{margin-left:8px}@media (max-width: 575.98px){.modal-footer{flex-direction:column}.modal-footer .btn+.btn{margin-left:0;margin-top:8px}}@media (min-width: 576px){.modal-footer .btn:first-of-type{margin-left:auto}}body.modal-open{overflow:hidden}.modal-no-backdrop .modal-content{box-shadow:none}.modal{background-color:rgba(0,0,0,0.3);z-index:2100}@media (min-width: 768px){.modal .modal-dialog,.modal .modal-no-backdrop{margin:30px auto}}.recaptcha-modal .recaptcha-form{display:inline-block}.recaptcha-modal .recaptcha-form .recaptcha{margin:0}.gl-pagination a{color:inherit;text-decoration:none}.page-item.active .page-link{z-index:3}.card,.card-slim{margin-bottom:16px}.card-slim{margin-bottom:6px}.card-header{padding:6px 16px;line-height:36px}.card-header .controls{margin-top:-2px;float:right}.card-header .dropdown-menu-toggle{line-height:20px}.card-header .badge.badge-pill,.card-header .shortcut-mappings .key,.shortcut-mappings .card-header .key{margin-top:-2px;margin-left:5px}.card-header.split{display:flex;align-items:center}.card-header .left{flex:1 1 auto}.card-header .right{flex:0 0 auto;text-align:right}.card-empty-heading{border-bottom:0}.card-body{padding:16px;background-color:#fff}.card-body .form-actions{margin:-16px;margin-top:16px}.card-title{font-size:inherit;line-height:inherit}.popup{padding:16px;background-color:#f9f9f9;border:1px solid #eee;border-radius:4px;box-shadow:0 5px 8px rgba(90,90,90,0.05);position:relative}.popup::before,.popup::after{bottom:100%;left:50%;border:solid transparent;content:'';height:0;width:0;position:absolute;pointer-events:none}.popup::before{border-color:transparent;border-bottom-color:#eee;border-width:16px;margin-left:-16px}.popup::after{border-color:transparent;border-bottom-color:#f9f9f9;border-width:15px;margin-left:-15px}.nav-links{display:flex;padding:0;margin:0;list-style:none;height:auto;border-bottom:1px solid #e5e5e5}.nav-links li{display:flex}.nav-links li a{padding:10px;padding-bottom:11px;font-size:14px;line-height:28px;color:#707070;border-bottom:2px solid transparent;white-space:nowrap}.nav-links li a:hover,.nav-links li .participants-more .btn-link:hover,.participants-more .nav-links li .btn-link:hover,.nav-links li .user-list-more .btn-link:hover,.user-list-more .nav-links li .btn-link:hover,.nav-links li a:active,.nav-links li a:focus{text-decoration:none;color:#000;border-bottom:2px solid #c4c4c4}.nav-links li a:hover .badge.badge-pill,.nav-links li .participants-more .btn-link:hover .badge.badge-pill,.participants-more .nav-links li .btn-link:hover .badge.badge-pill,.nav-links li .user-list-more .btn-link:hover .badge.badge-pill,.user-list-more .nav-links li .btn-link:hover .badge.badge-pill,.nav-links li a:hover .shortcut-mappings .key,.shortcut-mappings .nav-links li a:hover .key,.nav-links li .participants-more .btn-link:hover .shortcut-mappings .key,.shortcut-mappings .nav-links li .participants-more .btn-link:hover .key,.participants-more .nav-links li .btn-link:hover .shortcut-mappings .key,.shortcut-mappings .participants-more .nav-links li .btn-link:hover .key,.nav-links li .user-list-more .btn-link:hover .shortcut-mappings .key,.shortcut-mappings .nav-links li .user-list-more .btn-link:hover .key,.user-list-more .nav-links li .btn-link:hover .shortcut-mappings .key,.shortcut-mappings .user-list-more .nav-links li .btn-link:hover .key,.nav-links li a:active .badge.badge-pill,.nav-links li a:active .shortcut-mappings .key,.shortcut-mappings .nav-links li a:active .key,.nav-links li a:focus .badge.badge-pill,.nav-links li a:focus .shortcut-mappings .key,.shortcut-mappings .nav-links li a:focus .key{color:#000}.nav-links li.active a,.nav-links li a.active{color:#000;font-weight:600}.nav-links li.active a .badge.badge-pill,.nav-links li.active a .shortcut-mappings .key,.shortcut-mappings .nav-links li.active a .key,.nav-links li a.active .badge.badge-pill,.nav-links li a.active .shortcut-mappings .key,.shortcut-mappings .nav-links li a.active .key{color:#000}.top-area,.wiki-page-header{border-bottom:1px solid #e5e5e5}.top-area::after,.wiki-page-header::after{display:block;clear:both;content:""}.top-area .nav-text,.wiki-page-header .nav-text{padding-top:16px;padding-bottom:11px;display:inline-block;line-height:28px;white-space:normal}@media (max-width: 575.98px){.top-area .nav-text,.wiki-page-header .nav-text{width:100%}}.top-area .nav-links,.wiki-page-header .nav-links{margin-bottom:0;border-bottom:0;float:left}.top-area .nav-links.wide,.wiki-page-header .nav-links.wide{width:100%;display:block}.top-area .nav-links.scrolling-tabs,.wiki-page-header .nav-links.scrolling-tabs{float:left}.top-area .nav-links li a,.wiki-page-header .nav-links li a{padding:16px 15px 11px}@media (max-width: 575.98px){.top-area .nav-links,.wiki-page-header .nav-links{width:100%}.top-area .nav-links.mobile-separator,.wiki-page-header .nav-links.mobile-separator{border-bottom:1px solid #e5e5e5}}.top-area .nav-controls,.wiki-page-header .nav-controls{display:inline-block;float:right;text-align:right;padding:11px 0;margin-bottom:0}.top-area .nav-controls>.btn,.wiki-page-header .nav-controls>.btn,.top-area .nav-controls>.btn-container,.wiki-page-header .nav-controls>.btn-container,.top-area .nav-controls>.dropdown,.wiki-page-header .nav-controls>.dropdown,.top-area .nav-controls>input,.wiki-page-header .nav-controls>input,.top-area .nav-controls>form,.wiki-page-header .nav-controls>form{margin-right:10px;display:inline-block;vertical-align:top}.top-area .nav-controls>.btn:last-child,.wiki-page-header .nav-controls>.btn:last-child,.top-area .nav-controls>.btn-container:last-child,.wiki-page-header .nav-controls>.btn-container:last-child,.top-area .nav-controls>.dropdown:last-child,.wiki-page-header .nav-controls>.dropdown:last-child,.top-area .nav-controls>input:last-child,.wiki-page-header .nav-controls>input:last-child,.top-area .nav-controls>form:last-child,.wiki-page-header .nav-controls>form:last-child{margin-right:0;float:right}.top-area .nav-controls>.btn-grouped,.wiki-page-header .nav-controls>.btn-grouped{float:none}.top-area .nav-controls .icon-label,.wiki-page-header .nav-controls .icon-label{display:none}.top-area .nav-controls input,.wiki-page-header .nav-controls input{display:inline-block;position:relative}@media (min-width: 768px){.top-area .nav-controls input,.wiki-page-header .nav-controls input{width:200px}}@media (min-width: 992px){.top-area .nav-controls input,.wiki-page-header .nav-controls input{width:250px}}@media (max-width: 575.98px){.top-area .nav-controls,.wiki-page-header .nav-controls{padding-bottom:0;width:100%}.top-area .nav-controls .btn,.wiki-page-header .nav-controls .btn,.top-area .nav-controls form,.wiki-page-header .nav-controls form,.top-area .nav-controls .dropdown,.wiki-page-header .nav-controls .dropdown,.top-area .nav-controls .dropdown-toggle,.wiki-page-header .nav-controls .dropdown-toggle,.top-area .nav-controls .dropdown-menu-toggle,.wiki-page-header .nav-controls .dropdown-menu-toggle,.top-area .nav-controls .dropdown-menu-toggle,.wiki-page-header .nav-controls .dropdown-menu-toggle,.top-area .nav-controls .form-control,.wiki-page-header .nav-controls .form-control,.top-area .nav-controls .search form,.search .top-area .nav-controls form,.wiki-page-header .nav-controls .search form,.search .wiki-page-header .nav-controls form{margin:0 0 10px;display:block;width:100%}.top-area .nav-controls form,.wiki-page-header .nav-controls form{display:block;height:auto;margin-bottom:14px}.top-area .nav-controls form input,.wiki-page-header .nav-controls form input{width:100%;margin:0 0 10px}.top-area .nav-controls .icon-label,.wiki-page-header .nav-controls .icon-label{display:inline-block}.top-area .nav-controls .project-item-select-holder,.wiki-page-header .nav-controls .project-item-select-holder{margin:0;width:100%}}.top-area.adjust .nav-text,.adjust.wiki-page-header .nav-text,.top-area.adjust .nav-controls,.adjust.wiki-page-header .nav-controls{width:auto}@media (max-width: 575.98px){.top-area.adjust .nav-text,.adjust.wiki-page-header .nav-text,.top-area.adjust .nav-controls,.adjust.wiki-page-header .nav-controls{width:100%}}.top-area.multi-line .nav-text,.multi-line.wiki-page-header .nav-text{line-height:20px}.top-area.multi-line .nav-controls,.multi-line.wiki-page-header .nav-controls{padding:17px 0}.top-area pre,.wiki-page-header pre{width:100%}@media (max-width: 575.98px){.top-area,.wiki-page-header{flex-flow:row wrap}.top-area .nav-controls,.wiki-page-header .nav-controls{flex:0 0 100%}.top-area .nav-controls.controls-flex,.wiki-page-header .nav-controls.controls-flex{display:flex;flex-flow:row wrap;align-items:center;justify-content:center;padding:0 0 10px}.top-area .nav-controls .controls-item,.wiki-page-header .nav-controls .controls-item,.top-area .nav-controls .controls-item-full,.wiki-page-header .nav-controls .controls-item-full,.top-area .nav-controls .controls-item:last-child,.wiki-page-header .nav-controls .controls-item:last-child{flex:1 1 35%;display:block;width:100%;margin:3px}.top-area .nav-controls .controls-item .btn,.wiki-page-header .nav-controls .controls-item .btn,.top-area .nav-controls .controls-item .dropdown,.wiki-page-header .nav-controls .controls-item .dropdown,.top-area .nav-controls .controls-item-full .btn,.wiki-page-header .nav-controls .controls-item-full .btn,.top-area .nav-controls .controls-item-full .dropdown,.wiki-page-header .nav-controls .controls-item-full .dropdown,.top-area .nav-controls .controls-item:last-child .btn,.wiki-page-header .nav-controls .controls-item:last-child .btn,.top-area .nav-controls .controls-item:last-child .dropdown,.wiki-page-header .nav-controls .controls-item:last-child .dropdown{margin:0}.top-area .nav-controls .controls-item-full,.wiki-page-header .nav-controls .controls-item-full{flex:1 1 100%}}.scrolling-tabs-container{position:relative}.merge-request-tabs-container .scrolling-tabs-container{overflow:hidden}.scrolling-tabs-container .nav-links{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;display:flex;flex-wrap:nowrap}.scrolling-tabs-container .nav-links::-webkit-scrollbar{display:none}.scrolling-tabs-container .fade-right{visibility:hidden;opacity:0;z-index:2;position:absolute;bottom:12px;width:43px;height:30px;transition-duration:.3s;-webkit-transform:translateZ(0);background:linear-gradient(to left, #fafafa 45%, rgba(250,250,250,0.4));right:-5px}.scrolling-tabs-container .fade-right.scrolling{visibility:visible;opacity:1;transition-duration:.3s}.scrolling-tabs-container .fade-right .fa{position:relative;top:5px;font-size:18px}.scrolling-tabs-container .fade-right .fa{right:-7px}.scrolling-tabs-container .fade-left{visibility:hidden;opacity:0;z-index:2;position:absolute;bottom:12px;width:43px;height:30px;transition-duration:.3s;-webkit-transform:translateZ(0);background:linear-gradient(to right, #fafafa 45%, rgba(250,250,250,0.4));left:-5px;text-align:center}.scrolling-tabs-container .fade-left.scrolling{visibility:visible;opacity:1;transition-duration:.3s}.scrolling-tabs-container .fade-left .fa{position:relative;top:5px;font-size:18px}.scrolling-tabs-container .fade-left .fa{left:-7px}.inner-page-scroll-tabs .fade-right{visibility:hidden;opacity:0;z-index:2;position:absolute;bottom:12px;width:43px;height:30px;transition-duration:.3s;-webkit-transform:translateZ(0);background:linear-gradient(to left, #fff 45%, rgba(255,255,255,0.4));right:0;text-align:right}.inner-page-scroll-tabs .fade-right.scrolling{visibility:visible;opacity:1;transition-duration:.3s}.inner-page-scroll-tabs .fade-right .fa{position:relative;top:5px;font-size:18px}.inner-page-scroll-tabs .fade-right .fa{right:5px}.inner-page-scroll-tabs .fade-left{visibility:hidden;opacity:0;z-index:2;position:absolute;bottom:12px;width:43px;height:30px;transition-duration:.3s;-webkit-transform:translateZ(0);background:linear-gradient(to right, #fff 45%, rgba(255,255,255,0.4));left:0;text-align:left}.inner-page-scroll-tabs .fade-left.scrolling{visibility:visible;opacity:1;transition-duration:.3s}.inner-page-scroll-tabs .fade-left .fa{position:relative;top:5px;font-size:18px}.inner-page-scroll-tabs .fade-left .fa{left:5px}.inner-page-scroll-tabs .fade-right,.inner-page-scroll-tabs .fade-left{top:16px;bottom:auto}.inner-page-scroll-tabs.is-smaller .fade-right,.inner-page-scroll-tabs.is-smaller .fade-left{top:11px}.nav-block{position:relative}.nav-block .nav-links{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;display:flex;flex-wrap:nowrap}.nav-block .nav-links::-webkit-scrollbar{display:none}.nav-block .nav-links .fade-right{visibility:hidden;opacity:0;z-index:2;position:absolute;bottom:12px;width:43px;height:30px;transition-duration:.3s;-webkit-transform:translateZ(0);background:linear-gradient(to left, #fff 45%, rgba(255,255,255,0.4));right:-5px}.nav-block .nav-links .fade-right.scrolling{visibility:visible;opacity:1;transition-duration:.3s}.nav-block .nav-links .fade-right .fa{position:relative;top:5px;font-size:18px}.nav-block .nav-links .fade-right .fa{right:-7px}.nav-block .nav-links .fade-left{visibility:hidden;opacity:0;z-index:2;position:absolute;bottom:12px;width:43px;height:30px;transition-duration:.3s;-webkit-transform:translateZ(0);background:linear-gradient(to right, #fff 45%, rgba(255,255,255,0.4));left:-5px}.nav-block .nav-links .fade-left.scrolling{visibility:visible;opacity:1;transition-duration:.3s}.nav-block .nav-links .fade-left .fa{position:relative;top:5px;font-size:18px}.nav-block .nav-links .fade-left .fa{left:-7px}.nav-block.activities{display:flex;border-bottom:1px solid #e5e5e5;overflow:hidden}.nav-block.activities .nav-links{border-bottom:0}@media (max-width: 575.98px){.nav-block.activities{display:block;overflow:visible}}.project-item-select-holder.btn-group{display:flex;overflow:hidden;float:right}.project-item-select-holder.btn-group .new-project-item-link{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-item-select-holder.btn-group .new-project-item-select-button{width:32px}.empty-state .project-item-select-holder.btn-group{float:none;justify-content:center}.empty-state .project-item-select-holder.btn-group .btn{margin:10px 0;max-width:300px;width:auto}@media (max-width: 575.98px){.empty-state .project-item-select-holder.btn-group .btn{max-width:250px}}.new-project-item-select-button .fa-caret-down{margin-left:2px}.select2-container{width:100% !important}.select2-container .select2-choice,.select2-container.select2-drop-above .select2-choice{background:#fff;border-color:#e5e5e5;height:34px;padding:6px 10px;font-size:14px;line-height:1.42857143;border-radius:3px}.select2-container .select2-choice .select2-arrow,.select2-container.select2-drop-above .select2-choice .select2-arrow{background-image:none;background-color:transparent;border:0;padding-top:12px;padding-right:20px;font-size:10px}.select2-container .select2-choice .select2-arrow b,.select2-container.select2-drop-above .select2-choice .select2-arrow b{display:none}.select2-container .select2-choice .select2-arrow::after,.select2-container.select2-drop-above .select2-choice .select2-arrow::after{content:"\f078";position:absolute;z-index:1;text-align:center;pointer-events:none;box-sizing:border-box;color:#c4c4c4;display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.select2-container .select2-choice .select2-chosen,.select2-container.select2-drop-above .select2-choice .select2-chosen{margin-right:15px}.select2-container .select2-choice:hover,.select2-container.select2-drop-above .select2-choice:hover{border-color:#c4c4c4;color:#2e2e2e}.select2-drop,.select2-drop.select2-drop-above{box-shadow:0 2px 4px rgba(0,0,0,0.1);border-radius:3px;border:1px solid #e5e5e5;min-width:175px;color:#2e2e2e;z-index:999}.select2-drop-mask{z-index:998}.select2-drop.select2-drop-above.select2-drop-active{border-top:1px solid #e5e5e5;margin-top:-6px}.select2-container-active .select2-choice,.select2-container-active .select2-choices{box-shadow:none}.select2-dropdown-open .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choice{border-color:#c4c4c4;outline:0}.select2-container-multi .select2-choices{border-radius:4px;border-color:#e5e5e5;background:none}.select2-container-multi .select2-choices .select2-search-field input{padding:5px 8px;height:auto;font-family:inherit;font-size:inherit}.select2-container-multi .select2-choices .select2-search-choice{margin:5px 0 0 8px;box-shadow:none;border-color:#e5e5e5;color:#2e2e2e;line-height:15px;background-color:#fafafa;background-image:none;padding:3px 18px 3px 5px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close{top:5px;left:initial;right:3px}.select2-container-multi .select2-choices .select2-search-choice.select2-search-choice-focus{border-color:#2e2e2e}.select2-drop-active{margin-top:4px;font-size:14px}.select2-drop-active .select2-results{max-height:350px}.select2-search{padding:8px}.select2-drop-auto-width .select2-search{padding:8px}.select2-search input{padding:8px;background:#fff url(./select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png);background-clip:content-box;background-origin:content-box;background-repeat:no-repeat;background-position:right 0 bottom 0 !important;border:1px solid #e5e5e5;border-radius:4px;line-height:16px;transition:border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s}.select2-search input:focus{border-color:#73afea}.select2-search input.select2-active{background-color:#fff;background-image:url(./select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif) !important;background-origin:content-box;background-repeat:no-repeat;background-position:right 6px center !important;background-size:16px 16px !important}.select2-search+.select2-results{padding-top:0}.select2-results{margin:0;padding:8px 0}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-ajax-error,.select2-results .select2-selection-limit{background:transparent;padding:8px 16px}.select2-results .select2-result-label,.select2-results .select2-more-results{padding:8px 16px}.select2-results .select2-highlighted{background:transparent;color:#2e2e2e}.select2-results .select2-highlighted .select2-result-label{background:#eee}.select2-results .select2-result{padding:0 1px}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:600;color:#2e2e2e}.ajax-users-select{width:400px}.ajax-users-select.input-large{width:210px}.ajax-users-select.input-clamp{max-width:100%}.select2-highlighted .group-result .group-path{color:#fff}.group-result .group-image{float:left}.group-result .group-name{font-weight:600}.group-result .group-path{color:#999}.user-result{min-height:24px}.user-result .user-image{float:left}.user-result.no-username .user-name{line-height:24px}.namespace-result .namespace-kind{color:#aaa;font-weight:400}.namespace-result .namespace-path{margin-left:10px;font-weight:600}.ajax-users-dropdown{min-width:250px !important}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{font-weight:600;text-decoration:none}.content-wrapper{width:100%;transition:padding 0.3s}.content-wrapper .container-fluid{padding:0 16px}.content-wrapper .container-fluid.container-blank{background:none;padding:0;border:0}.nav-header-btn{padding:10px 22px;color:inherit;transition-duration:0.3s;position:absolute;top:0;cursor:pointer}.nav-header-btn:hover,.nav-header-btn:focus{color:#fff;text-decoration:none}.right-sidebar-collapsed{padding-right:0}@media (min-width: 576px){.right-sidebar-collapsed:not(.wiki-sidebar):not(.build-sidebar):not(.issuable-bulk-update-sidebar) .content-wrapper{padding-right:62px}.right-sidebar-collapsed .merge-request-tabs-holder.affix{right:62px}}.right-sidebar-collapsed .sidebar-collapsed-icon .btn{background-color:#fafafa}.right-sidebar-collapsed .sidebar-collapsed-icon:not(.disabled){cursor:pointer}.right-sidebar-collapsed .sidebar-collapsed-icon svg{width:16px;height:16px}.right-sidebar-expanded{padding-right:0;z-index:300}.right-sidebar-expanded .btn-sidebar-action{display:inline-flex}@media (min-width: 576px) and (max-width: 767.98px){.right-sidebar-expanded:not(.wiki-sidebar):not(.build-sidebar):not(.issuable-bulk-update-sidebar) .content-wrapper{padding-right:62px}}@media (min-width: 768px){.right-sidebar-expanded .content-wrapper{padding-right:290px}.right-sidebar-expanded:not(.with-overlay) .merge-request-tabs-holder.affix{right:290px}.right-sidebar-expanded.with-overlay .merge-request-tabs-holder.affix{right:62px}}.right-sidebar{border-left:1px solid #e5e5e5}.with-performance-bar .right-sidebar.affix{top:75px}.issues-bulk-update.right-sidebar{display:block;width:290px;width:0;padding:0;transition:width 0.3s}.issues-bulk-update.right-sidebar.right-sidebar-expanded{display:block;width:290px;width:290px}.issues-bulk-update.right-sidebar.right-sidebar-expanded .issuable-sidebar-header{padding:11px 0}.issues-bulk-update.right-sidebar.right-sidebar-expanded .block:last-of-type{border:0}.issues-bulk-update.right-sidebar.right-sidebar-collapsed{display:block;width:290px;width:0;padding:0}.issues-bulk-update.right-sidebar.right-sidebar-collapsed .block{padding:16px 0;width:250px;border-bottom:1px solid #e5e5e5}.issues-bulk-update.right-sidebar .issuable-sidebar{padding:0 3px;width:calc(100% + 35px)}.issuable-sidebar .labels .value.dont-hide ~ .selectbox{padding-top:8px}.pikaday-container .pika-single{margin-top:2px;width:250px}.pikaday-container .dropdown-menu-toggle{line-height:20px}.sidebar-collapsed-icon .sidebar-collapsed-value{font-size:12px}.page-with-contextual-sidebar{transition:padding-left 0.3s}@media (min-width: 768px){.page-with-contextual-sidebar{padding-left:50px}}@media (min-width: 992px){.page-with-contextual-sidebar{padding-left:220px}}.page-with-contextual-sidebar .issues-bulk-update.right-sidebar.right-sidebar-expanded .issuable-sidebar-header{padding:10px 0 15px}@media (min-width: 576px){.page-with-icon-sidebar{padding-left:50px}}.context-header{position:relative;margin-right:2px;width:220px}.context-header>a,.context-header>button{transition:padding 0.3s;font-weight:600;display:flex;width:100%;align-items:center;padding:10px 16px 10px 10px;color:#2e2e2e;background-color:transparent;border:0;text-align:left}.context-header>a:hover,.participants-more .context-header>.btn-link:hover,.user-list-more .context-header>.btn-link:hover,.context-header>a:focus,.context-header>button:hover,.context-header>button:focus{background-color:rgba(0,0,0,0.06);color:#2e2e2e;outline:0}.context-header .avatar-container{flex:0 0 40px;background-color:#fff}.context-header .sidebar-context-title{overflow:hidden;text-overflow:ellipsis}.settings-avatar{background-color:#fff}.settings-avatar svg{fill:#707070;margin:auto}.nav-sidebar{transition:width 0.3s, left 0.3s;position:fixed;z-index:400;width:220px;top:40px;bottom:0;left:0;background-color:#fafafa;box-shadow:inset -1px 0 0 #e5e5e5;transform:translate3d(0, 0, 0)}@media (min-width: 576px) and (max-width: 576px){.nav-sidebar:not(.sidebar-collapsed-desktop){box-shadow:inset -1px 0 0 #e5e5e5,2px 1px 3px rgba(0,0,0,0.1)}}.nav-sidebar.sidebar-collapsed-desktop{width:50px}.nav-sidebar.sidebar-collapsed-desktop .nav-sidebar-inner-scroll{overflow-x:hidden}.nav-sidebar.sidebar-collapsed-desktop .badge.badge-pill:not(.fly-out-badge),.nav-sidebar.sidebar-collapsed-desktop .shortcut-mappings .key:not(.fly-out-badge),.shortcut-mappings .nav-sidebar.sidebar-collapsed-desktop .key:not(.fly-out-badge),.nav-sidebar.sidebar-collapsed-desktop .sidebar-context-title,.nav-sidebar.sidebar-collapsed-desktop .nav-item-name{display:none}.nav-sidebar.sidebar-collapsed-desktop .sidebar-top-level-items>li>a{min-height:44px}.nav-sidebar.sidebar-collapsed-desktop .fly-out-top-item{display:block}.nav-sidebar.sidebar-collapsed-desktop .avatar-container{margin-right:0}.nav-sidebar.sidebar-expanded-mobile{left:0}.nav-sidebar a{text-decoration:none}.nav-sidebar ul{padding-left:0;list-style:none}.nav-sidebar li{white-space:nowrap}.nav-sidebar li a{transition:padding 0.3s;display:flex;align-items:center;padding:12px 15px;color:#707070}.nav-sidebar li .nav-item-name{flex:1}.nav-sidebar li.active>a{font-weight:600}@media (max-width: 575.98px){.nav-sidebar{left:-220px}}.nav-sidebar .nav-icon-container{display:flex;margin-right:8px}.nav-sidebar .fly-out-top-item{display:none}.nav-sidebar svg{height:16px;width:16px}.nav-sidebar-inner-scroll{height:100%;width:100%;overflow:auto}@media (min-width: 576px){.nav-sidebar-inner-scroll{overflow:hidden}}.with-performance-bar .nav-sidebar{top:75px}.sidebar-sub-level-items{display:none;padding-bottom:8px}.sidebar-sub-level-items>li a{padding:8px 16px 8px 40px}.sidebar-sub-level-items>li a:hover,.sidebar-sub-level-items>li .participants-more .btn-link:hover,.participants-more .sidebar-sub-level-items>li .btn-link:hover,.sidebar-sub-level-items>li .user-list-more .btn-link:hover,.user-list-more .sidebar-sub-level-items>li .btn-link:hover,.sidebar-sub-level-items>li a:focus{background:rgba(0,0,0,0.04);color:#2e2e2e}.sidebar-sub-level-items>li.active a,.sidebar-sub-level-items>li.active a:hover,.sidebar-sub-level-items>li.active .participants-more .btn-link:hover,.participants-more .sidebar-sub-level-items>li.active .btn-link:hover,.sidebar-sub-level-items>li.active .user-list-more .btn-link:hover,.user-list-more .sidebar-sub-level-items>li.active .btn-link:hover,.sidebar-sub-level-items>li.active a:focus{background:rgba(0,0,0,0.04)}.sidebar-top-level-items{margin-bottom:60px}@media (min-width: 576px){.sidebar-top-level-items>li>a{margin-right:1px}}.sidebar-top-level-items>li>a:hover,.participants-more .sidebar-top-level-items>li>.btn-link:hover,.user-list-more .sidebar-top-level-items>li>.btn-link:hover{color:#2e2e2e}.sidebar-top-level-items>li.is-showing-fly-out>a{margin-right:1px}@media (min-width: 576px){.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items{position:fixed;top:0;left:0;min-width:150px;margin-top:-1px;padding:4px 1px;background-color:#fff;box-shadow:2px 1px 3px rgba(0,0,0,0.1);border:1px solid #eee;border-left:0;border-radius:0 3px 3px 0}.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items::before{content:'';position:absolute;top:-30px;bottom:-30px;left:-10px;right:-30px;z-index:-1}.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items.is-above{margin-top:1px}.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items .divider{height:1px;margin:4px -1px;padding:0;background-color:rgba(0,0,0,0.1)}.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items>.active{box-shadow:none}.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items>.active>a{background-color:transparent}.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items a{padding:8px 16px;color:#2e2e2e}.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items a:hover,.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items .participants-more .btn-link:hover,.participants-more .sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items .btn-link:hover,.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items .user-list-more .btn-link:hover,.user-list-more .sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items .btn-link:hover,.sidebar-top-level-items>li.is-showing-fly-out .sidebar-sub-level-items a:focus{background-color:#eee}}.sidebar-top-level-items>li .badge.badge-pill,.sidebar-top-level-items>li .shortcut-mappings .key,.shortcut-mappings .sidebar-top-level-items>li .key{background-color:rgba(0,0,0,0.08);color:#707070}.sidebar-top-level-items>li.active{background:rgba(0,0,0,0.04)}.sidebar-top-level-items>li.active>a{margin-left:4px;padding-left:11px}.sidebar-top-level-items>li.active .badge.badge-pill,.sidebar-top-level-items>li.active .shortcut-mappings .key,.shortcut-mappings .sidebar-top-level-items>li.active .key{font-weight:600}.sidebar-top-level-items>li.active .sidebar-sub-level-items:not(.is-fly-out-only){display:block}.sidebar-top-level-items>li.active>a:hover,.participants-more .sidebar-top-level-items>li.active>.btn-link:hover,.user-list-more .sidebar-top-level-items>li.active>.btn-link:hover,.sidebar-top-level-items>li.is-over>a{background-color:rgba(0,0,0,0.06)}.toggle-sidebar-button,.close-nav-button{width:219px;transition:width 0.3s;position:fixed;bottom:0;padding:16px;background-color:#fafafa;border:0;border-top:1px solid #e5e5e5;color:#707070;display:flex;align-items:center;line-height:1}.toggle-sidebar-button svg,.close-nav-button svg{margin-right:8px}.toggle-sidebar-button .icon-angle-double-right,.close-nav-button .icon-angle-double-right{display:none}.toggle-sidebar-button:hover,.close-nav-button:hover{background-color:#e5e5e5;color:#2e2e2e}@media (max-width: 575.98px){.toggle-sidebar-button{display:none}}.collapse-text{white-space:nowrap;overflow:hidden}.sidebar-collapsed-desktop .context-header{height:60px;width:50px}.sidebar-collapsed-desktop .context-header a{padding:10px 4px}.sidebar-collapsed-desktop .sidebar-top-level-items>li .sidebar-sub-level-items:not(.flyout-list){display:none}.sidebar-collapsed-desktop .nav-icon-container{margin-right:0}.sidebar-collapsed-desktop .toggle-sidebar-button{padding:16px;width:49px}.sidebar-collapsed-desktop .toggle-sidebar-button .collapse-text,.sidebar-collapsed-desktop .toggle-sidebar-button .icon-angle-double-left{display:none}.sidebar-collapsed-desktop .toggle-sidebar-button .icon-angle-double-right{display:block;margin:0}.fly-out-top-item>a{display:flex}.fly-out-top-item .fly-out-badge{margin-left:8px}.fly-out-top-item-name{flex:1}.close-nav-button{display:none}.toggle-mobile-nav{display:none;background-color:transparent;border:0;padding:6px 16px;margin:0 0 0 -15px;height:46px}.toggle-mobile-nav i{font-size:20px;color:#707070}@media (max-width: 575.98px){.toggle-mobile-nav{display:flex;align-items:center}.toggle-mobile-nav i{font-size:18px}}@media (max-width: 575.98px){.toggle-mobile-nav+.breadcrumbs-links{padding-left:16px;border-left:1px solid #d6d6d6}}@media (max-width: 575.98px){.close-nav-button{display:flex}}.mobile-overlay{display:none}.mobile-overlay.mobile-nav-open{display:block;position:fixed;background-color:rgba(0,0,0,0.3);height:100%;width:100%;z-index:300}.table-holder{margin:0;overflow:auto}table.table,.file-holder table,.wiki table,.md table,ul.notes>li .note-body .note-text table{margin-bottom:16px}table.table .dropdown-menu a,.file-holder table .dropdown-menu a,.wiki table .dropdown-menu a,.md table .dropdown-menu a,ul.notes>li .note-body .note-text table .dropdown-menu a{text-decoration:none}table.table .success,.file-holder table .success,.wiki table .success,.md table .success,ul.notes>li .note-body .note-text table .success,table.table .warning,.file-holder table .warning,.wiki table .warning,.md table .warning,ul.notes>li .note-body .note-text table .warning,table.table .danger,.file-holder table .danger,.wiki table .danger,.md table .danger,ul.notes>li .note-body .note-text table .danger,table.table .info,.file-holder table .info,.wiki table .info,.md table .info,ul.notes>li .note-body .note-text table .info{color:#fff}table.table .success a:not(.btn),.file-holder table .success a:not(.btn),.wiki table .success a:not(.btn),.md table .success a:not(.btn),ul.notes>li .note-body .note-text table .success a:not(.btn),table.table .warning a:not(.btn),.file-holder table .warning a:not(.btn),.wiki table .warning a:not(.btn),.md table .warning a:not(.btn),ul.notes>li .note-body .note-text table .warning a:not(.btn),table.table .danger a:not(.btn),.file-holder table .danger a:not(.btn),.wiki table .danger a:not(.btn),.md table .danger a:not(.btn),ul.notes>li .note-body .note-text table .danger a:not(.btn),table.table .info a:not(.btn),.file-holder table .info a:not(.btn),.wiki table .info a:not(.btn),.md table .info a:not(.btn),ul.notes>li .note-body .note-text table .info a:not(.btn){text-decoration:underline;color:#fff}table.table tr td,.file-holder table tr td,.wiki table tr td,.md table tr td,ul.notes>li .note-body .note-text table tr td,table.table tr th,.file-holder table tr th,.wiki table tr th,.md table tr th,ul.notes>li .note-body .note-text table tr th{padding:10px 16px;line-height:20px;vertical-align:middle}table.table tr th,.file-holder table tr th,.wiki table tr th,.md table tr th,ul.notes>li .note-body .note-text table tr th{background-color:#fafafa;font-weight:400;border-bottom:0}table.table tr th.wide,.file-holder table tr th.wide,.wiki table tr th.wide,.md table tr th.wide,ul.notes>li .note-body .note-text table tr th.wide{width:55%}table.table tr th.table-th-transparent,.file-holder table tr th.table-th-transparent,.wiki table tr th.table-th-transparent,.md table tr th.table-th-transparent,ul.notes>li .note-body .note-text table tr th.table-th-transparent{background:none;color:#707070}table.table tr td,.file-holder table tr td,.wiki table tr td,.md table tr td,ul.notes>li .note-body .note-text table tr td{border-color:#f0f0f0}@media (max-width: 767.98px){table.responsive-table thead{display:none}table.responsive-table,table.responsive-table tbody,table.responsive-table td{display:block}table.responsive-table td{color:#707070}table.responsive-table tbody td.responsive-table-cell{padding:16px 0;width:100%;display:flex;text-align:right;align-items:center;justify-content:space-between}table.responsive-table tbody td.responsive-table-cell[data-column]::before{content:attr(data-column);display:block;text-align:left;padding-right:16px;color:#707070}table.responsive-table tbody td.responsive-table-cell:not([data-column]){flex-direction:row-reverse}table.responsive-table tr.responsive-table-border-start,table.responsive-table tr.responsive-table-border-end{display:block;border:solid #d6d6d6;padding-left:0;padding-right:0}table.responsive-table tr.responsive-table-border-start>td,table.responsive-table tr.responsive-table-border-end>td{border-color:#d6d6d6}table.responsive-table tr.responsive-table-border-start>td,table.responsive-table tr.responsive-table-border-start>td:last-child,table.responsive-table tr.responsive-table-border-end>td,table.responsive-table tr.responsive-table-border-end>td:last-child{padding-left:16px;padding-right:16px}table.responsive-table tr.responsive-table-border-start{border-width:1px 1px 0;border-radius:4px 4px 0 0;padding-top:0;padding-bottom:0}table.responsive-table tr.responsive-table-border-start>td:first-child{border-top:0}table.responsive-table tr.responsive-table-border-start>td:last-child{border-bottom:1px solid #d6d6d6}table.responsive-table tr.responsive-table-border-end{border-width:0 1px 1px;border-radius:0 0 4px 4px;margin-bottom:32px}table.responsive-table tr.responsive-table-border-end>:last-child{border-bottom:0}}@media (max-width: 767.98px){.responsive-table:not(table) th{width:100%}.responsive-table:not(table) td{width:100%;float:left}}.gitlab-tabs{background:#fafafa;border:1px solid #e5e5e5;flex-wrap:nowrap}.gitlab-tabs li{width:50%}.gitlab-tabs li:not(:last-child){border-right:1px solid #e5e5e5}.gitlab-tabs li.active{background:#fff}.gitlab-tabs li a{width:100%;text-align:center}.gitlab-tab-content{border:1px solid #e5e5e5;border-top:0;margin-bottom:16px}.gitlab-tab-content .tab-pane{padding:16px}.gitlab-tab-content .tab-pane.no-padding{padding:0}.timeline{margin:5px 0;padding:0;list-style:none;margin:0;padding:0}.timeline>li{padding:10px 0;border-bottom:1px solid #eee;display:block;margin:0}.timeline>li::after{display:block;clear:both;content:""}.timeline>li:last-child{border-bottom:0}.timeline>li.active{background:#fafafa}.timeline>li.active a{font-weight:600}.timeline>li.hide{display:none}.timeline>li.light a,.timeline>li.description-block a{color:#2e2e2e}@media (max-width: 576px){.timeline::before{background:none}}@media (max-width: 1152px){.notes_content.parallel .timeline::before{background:none}}.timeline .system-note .note-text{color:#2e2e2e !important}.timeline .diff-file{border:1px solid #e5e5e5;margin:0}.timeline.text-file .diff-file{border-bottom:0}.timeline-entry{border-color:#f0f0f0;color:#2e2e2e;border-bottom:1px solid #f2f2f2;background:#fff}.timeline-entry .timeline-entry-inner{position:relative}@media (max-width: 576px){.timeline-entry .timeline-entry-inner .timeline-icon{display:none}.timeline-entry .timeline-entry-inner .timeline-content{margin-left:0}}@media (max-width: 1152px){.notes_content.parallel .timeline-entry .timeline-entry-inner .timeline-icon{display:none}.notes_content.parallel .timeline-entry .timeline-entry-inner .timeline-content{margin-left:0}}.timeline-entry:target,.timeline-entry.target{background:#f6faff}.timeline-entry:target.system-note .note-body .note-text.system-note-commit-list::after,.timeline-entry.target.system-note .note-body .note-text.system-note-commit-list::after{background:linear-gradient(rgba(246,250,255,0.1) -100px, #f6faff 100%)}.timeline-entry .avatar{margin-right:15px}.timeline-entry .controls{padding-top:10px;float:right}.discussion .timeline-entry{margin:0;border-right:0}.tooltip-inner{font-size:12px;border-radius:4px;line-height:16px;font-weight:400;padding:8px}.project-feature-toggle{position:relative;border:0;outline:0;display:block;width:50px;height:24px;cursor:pointer;user-select:none;background:#999;border-radius:12px;padding:3px;transition:all .4s ease}.project-feature-toggle::selection,.project-feature-toggle::before::selection,.project-feature-toggle::after::selection{background:none}.project-feature-toggle:focus{outline:none}.project-feature-toggle .toggle-icon{position:relative;display:block;left:0;border-radius:9px;background:#fff;transition:all .2s ease}.project-feature-toggle .toggle-icon,.project-feature-toggle .toggle-icon .toggle-icon-svg{width:18px;height:18px}.project-feature-toggle .toggle-icon .toggle-icon-svg{fill:#999}.project-feature-toggle .toggle-icon .toggle-status-checked{display:none}.project-feature-toggle .toggle-icon .toggle-status-unchecked{display:inline}.project-feature-toggle .loading-icon{display:none;font-size:12px;color:#fff;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.project-feature-toggle.is-loading .toggle-icon{display:none}.project-feature-toggle.is-loading .loading-icon{display:block}.project-feature-toggle.is-loading .loading-icon::before{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.project-feature-toggle.is-checked{background:#4a8bee}.project-feature-toggle.is-checked .toggle-icon{left:calc(100% - 18px)}.project-feature-toggle.is-checked .toggle-icon .toggle-icon-svg{fill:#4a8bee}.project-feature-toggle.is-checked .toggle-icon .toggle-status-checked{display:inline}.project-feature-toggle.is-checked .toggle-icon .toggle-status-unchecked{display:none}.project-feature-toggle.is-disabled{opacity:0.4;cursor:not-allowed}@media (max-width: 575.98px){.project-feature-toggle{width:50px}.project-feature-toggle::before,.project-feature-toggle.is-checked::before{display:none}}@keyframes animate-enabled{0%, 35%{opacity:0}100%{opacity:1}}@keyframes animate-disabled{0%, 35%{opacity:0}100%{opacity:1}}body{-webkit-text-shadow:rgba(255,255,255,0.01) 0 0 1px}.page-title{margin-top:16px;line-height:1.3;font-size:1.25em;font-weight:600}.page-title:last-child{margin-bottom:0}.page-title.with-button{line-height:34px}.page-title-empty{margin-top:0;line-height:1.3;font-size:1.25em;font-weight:600;margin:12px 0}h1,h2,h3,h4,h5,h6{color:#2e2e2e;font-weight:600}.light-header{font-weight:600}pre{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;display:block;padding:8px;margin:0 0 8px;font-size:13px;word-break:break-all;word-wrap:break-word;color:#2e2e2e;background-color:#fafafa;border:1px solid #e5e5e5;border-radius:2px}code.key-fingerprint{background:#fff;color:#2e2e2e}.monospace,.commit-sha,.gfm-commit,.gfm-commit_range,.ref-name,.git-revision-dropdown .dropdown-content ul li a,.mr-state-widget .label-branch,.pipeline-number,.git-revision-dropdown-toggle,.commit-sha-group .label-monospace,.file-editor .file-title,.file-editor .editor-file-name,.ci-table .api,.git-clone-holder .form-control,.git-clone-holder .search form,.search .git-clone-holder form{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace}.weight-normal{font-weight:400}.commit-sha,.gfm-commit,.gfm-commit_range,.ref-name,.git-revision-dropdown .dropdown-content ul li a,.mr-state-widget .label-branch,.pipeline-number{font-size:95%}.wiki{color:#2e2e2e;word-wrap:break-word}.wiki [dir="auto"]{text-align:initial}.wiki a{color:#1b69b6}.wiki img:not(.emoji){margin:0 0 8px}.wiki img.lazy{min-width:200px;min-height:100px;background-color:#fdfdfd}.wiki img.js-lazy-loaded,.wiki img.emoji{min-width:inherit;min-height:inherit;background-color:inherit;max-width:100%}.wiki p a:not(.no-attachment-icon) img{margin-bottom:0}.wiki *:first-child:not(.katex-display){margin-top:0}.wiki>:last-child{margin-bottom:0}.wiki code{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;white-space:pre-wrap;word-wrap:normal}.wiki pre code{white-space:pre}.wiki kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border-width:1px;border-style:solid;border-color:#ccc #ccc #bbb;border-image:none;border-radius:3px;box-shadow:0 -1px 0 #bbb inset}.wiki h1{font-size:1.75em;font-weight:600;margin:24px 0 16px;padding-bottom:0.3em;border-bottom:1px solid #eaeaea;color:#2e2e2e}.wiki h1:first-child{margin-top:0}.wiki h2{font-size:1.5em;font-weight:600;margin:24px 0 16px;padding-bottom:0.3em;border-bottom:1px solid #eaeaea;color:#2e2e2e}.wiki h3{margin:24px 0 16px;font-size:1.3em}.wiki h4{margin:24px 0 16px;font-size:1.2em}.wiki h5{margin:24px 0 16px;font-size:1em}.wiki h6{margin:24px 0 16px;font-size:0.95em}.wiki blockquote,.wiki .blockquote{color:#7f8fa4;font-size:inherit;padding:8px 24px;margin:16px 0;border-left:3px solid #eaeaea}.wiki blockquote:dir(rtl),.wiki .blockquote:dir(rtl){border-left:0;border-right:3px solid #eaeaea}.wiki blockquote p,.wiki .blockquote p{color:#7f8fa4 !important;font-size:inherit;line-height:1.5}.wiki blockquote p:last-child,.wiki .blockquote p:last-child{margin:0}.wiki p{color:#2e2e2e;margin:0 0 16px}.wiki table{margin:16px 0;color:#2e2e2e}.wiki table th{background:#f8fafc}.wiki table:dir(rtl) th{text-align:right}.wiki pre{margin-bottom:16px;font-size:13px;line-height:1.6em;overflow-x:auto;border-radius:2px}.wiki pre.plain-readme{background:none;border:0;padding:0;margin:0;font-size:14px}.wiki p>code{font-weight:inherit}.wiki dd{margin-left:16px}.wiki ul,.wiki ol{padding:0;margin:0 0 16px}.wiki ul:dir(rtl),.wiki ol:dir(rtl){margin:3px 28px 3px 0 !important}.wiki li{line-height:1.6em;margin-left:25px;padding-left:3px}@media screen and (-webkit-min-device-pixel-ratio: 0){.wiki li{margin-left:28px;padding-left:0}}.wiki ul.task-list>li.task-list-item{list-style-type:none;position:relative;min-height:22px;padding-left:28px;margin-left:0 !important}.wiki ul.task-list>li.task-list-item>input.task-list-item-checkbox{position:absolute;left:8px;top:5px}.wiki a[href*="/uploads/"]::before,.wiki a[href*="storage.googleapis.com/google-code-attachments/"]::before{margin-right:4px;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;content:"\f0c6"}.wiki a[href*="/uploads/"]:hover::before,.wiki .participants-more [href*="/uploads/"].btn-link:hover::before,.participants-more .wiki [href*="/uploads/"].btn-link:hover::before,.wiki .user-list-more [href*="/uploads/"].btn-link:hover::before,.user-list-more .wiki [href*="/uploads/"].btn-link:hover::before,.wiki a[href*="storage.googleapis.com/google-code-attachments/"]:hover::before,.wiki .participants-more [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before,.participants-more .wiki [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before,.wiki .user-list-more [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before,.user-list-more .wiki [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before{text-decoration:none}.wiki a.no-attachment-icon::before{display:none}.wiki h1,.wiki h2,.wiki h3,.wiki h4,.wiki h5,.wiki h6{position:relative}.wiki h1 a.anchor,.wiki h2 a.anchor,.wiki h3 a.anchor,.wiki h4 a.anchor,.wiki h5 a.anchor,.wiki h6 a.anchor{left:-16px;position:absolute;text-decoration:none;outline:none}.wiki h1 a.anchor::after,.wiki h2 a.anchor::after,.wiki h3 a.anchor::after,.wiki h4 a.anchor::after,.wiki h5 a.anchor::after,.wiki h6 a.anchor::after{content:url(./icon_anchor-297aa9b0225eff3d6d0da74ce042a0ed5575b92aa66b7109a5e060a795b42e36.svg);visibility:hidden}.wiki h1:hover>a.anchor::after,.wiki h2:hover>a.anchor::after,.wiki h3:hover>a.anchor::after,.wiki h4:hover>a.anchor::after,.wiki h5:hover>a.anchor::after,.wiki h6:hover>a.anchor::after{visibility:visible}.md{color:#2e2e2e;word-wrap:break-word}.md [dir="auto"]{text-align:initial}.md a{color:#1b69b6}.md img:not(.emoji){margin:0 0 8px}.md img.lazy{min-width:200px;min-height:100px;background-color:#fdfdfd}.md img.js-lazy-loaded,.md img.emoji{min-width:inherit;min-height:inherit;background-color:inherit;max-width:100%}.md p a:not(.no-attachment-icon) img{margin-bottom:0}.md *:first-child:not(.katex-display){margin-top:0}.md>:last-child{margin-bottom:0}.md code{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;white-space:pre-wrap;word-wrap:normal}.md pre code{white-space:pre}.md kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border-width:1px;border-style:solid;border-color:#ccc #ccc #bbb;border-image:none;border-radius:3px;box-shadow:0 -1px 0 #bbb inset}.md h1{font-size:1.75em;font-weight:600;margin:24px 0 16px;padding-bottom:0.3em;border-bottom:1px solid #eaeaea;color:#2e2e2e}.md h1:first-child{margin-top:0}.md h2{font-size:1.5em;font-weight:600;margin:24px 0 16px;padding-bottom:0.3em;border-bottom:1px solid #eaeaea;color:#2e2e2e}.md h3{margin:24px 0 16px;font-size:1.3em}.md h4{margin:24px 0 16px;font-size:1.2em}.md h5{margin:24px 0 16px;font-size:1em}.md h6{margin:24px 0 16px;font-size:0.95em}.md blockquote,.md .blockquote{color:#7f8fa4;font-size:inherit;padding:8px 24px;margin:16px 0;border-left:3px solid #eaeaea}.md blockquote:dir(rtl),.md .blockquote:dir(rtl){border-left:0;border-right:3px solid #eaeaea}.md blockquote p,.md .blockquote p{color:#7f8fa4 !important;font-size:inherit;line-height:1.5}.md blockquote p:last-child,.md .blockquote p:last-child{margin:0}.md p{color:#2e2e2e;margin:0 0 16px}.md table{margin:16px 0;color:#2e2e2e}.md table th{background:#f8fafc}.md table:dir(rtl) th{text-align:right}.md pre{margin-bottom:16px;font-size:13px;line-height:1.6em;overflow-x:auto;border-radius:2px}.md pre.plain-readme{background:none;border:0;padding:0;margin:0;font-size:14px}.md p>code{font-weight:inherit}.md dd{margin-left:16px}.md ul,.md ol{padding:0;margin:0 0 16px}.md ul:dir(rtl),.md ol:dir(rtl){margin:3px 28px 3px 0 !important}.md li{line-height:1.6em;margin-left:25px;padding-left:3px}@media screen and (-webkit-min-device-pixel-ratio: 0){.md li{margin-left:28px;padding-left:0}}.md ul.task-list>li.task-list-item{list-style-type:none;position:relative;min-height:22px;padding-left:28px;margin-left:0 !important}.md ul.task-list>li.task-list-item>input.task-list-item-checkbox{position:absolute;left:8px;top:5px}.md a[href*="/uploads/"]::before,.md a[href*="storage.googleapis.com/google-code-attachments/"]::before{margin-right:4px;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;content:"\f0c6"}.md a[href*="/uploads/"]:hover::before,.md .participants-more [href*="/uploads/"].btn-link:hover::before,.participants-more .md [href*="/uploads/"].btn-link:hover::before,.md .user-list-more [href*="/uploads/"].btn-link:hover::before,.user-list-more .md [href*="/uploads/"].btn-link:hover::before,.md a[href*="storage.googleapis.com/google-code-attachments/"]:hover::before,.md .participants-more [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before,.participants-more .md [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before,.md .user-list-more [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before,.user-list-more .md [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before{text-decoration:none}.md a.no-attachment-icon::before{display:none}.md h1,.md h2,.md h3,.md h4,.md h5,.md h6{position:relative}.md h1 a.anchor,.md h2 a.anchor,.md h3 a.anchor,.md h4 a.anchor,.md h5 a.anchor,.md h6 a.anchor{left:-16px;position:absolute;text-decoration:none;outline:none}.md h1 a.anchor::after,.md h2 a.anchor::after,.md h3 a.anchor::after,.md h4 a.anchor::after,.md h5 a.anchor::after,.md h6 a.anchor::after{content:url(./icon_anchor-297aa9b0225eff3d6d0da74ce042a0ed5575b92aa66b7109a5e060a795b42e36.svg);visibility:hidden}.md h1:hover>a.anchor::after,.md h2:hover>a.anchor::after,.md h3:hover>a.anchor::after,.md h4:hover>a.anchor::after,.md h5:hover>a.anchor::after,.md h6:hover>a.anchor::after{visibility:visible}textarea.js-gfm-input{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;font-size:13px}.strikethrough{text-decoration:line-through}h1 small,h2 small,h3 small,h4 small{color:#2e2e2e}@media (min-width: 992px){.text-right-lg{text-align:right}}.idiff.deletion{background:#fac5cd}.idiff.addition{background:#c7f0d2}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#919191}input::-moz-placeholder,textarea::-moz-placeholder{color:#919191;opacity:1}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#919191}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#919191}.zen-backdrop.fullscreen{background-color:#fff;position:fixed;top:0;bottom:0;left:0;right:0;z-index:1031}.zen-backdrop.fullscreen textarea{border:0;box-shadow:none;border-radius:0;color:#000;font-size:20px;line-height:26px;padding:30px;display:block;outline:none;resize:none;height:100vh;max-height:calc(100vh - 10px);max-width:900px;margin:0 auto 10px}.zen-backdrop.fullscreen .zen-control-leave{display:block;position:absolute;top:0}.zen-control{padding:0;color:#555;background:none;border:0}.zen-control-full{color:#707070}.zen-control-full:hover{color:#1b69b6;text-decoration:none}.zen-control-leave{display:none;color:#2e2e2e;position:absolute;right:10px;padding:5px;font-size:36px}.zen-control-leave:hover{color:#000}.blank-state-parent-container .section-container{padding:10px}.blank-state-parent-container .section-body{width:100%;height:100%;padding-bottom:25px;border-radius:4px}.blank-state-row{display:flex;flex-wrap:wrap;justify-content:space-around;height:100%}.blank-state-welcome{text-align:center;padding:20px 0 40px}.blank-state-welcome .blank-state-welcome-title{font-size:24px}.blank-state-welcome .blank-state-text{margin-bottom:0}.blank-state-link{display:block;color:#2e2e2e;flex:0 0 100%;margin-bottom:15px}@media (min-width: 576px){.blank-state-link{flex:0 0 49%}.blank-state-link:nth-child(odd){margin-right:5px}.blank-state-link:nth-child(even){margin-left:5px}}.blank-state-link:hover{background-color:#fafafa;text-decoration:none;color:#2e2e2e}.blank-state-center{padding-top:20px;padding-bottom:20px;text-align:center}.blank-state{padding:20px;border:1px solid #e5e5e5;border-radius:4px}@media (min-width: 576px){.blank-state{display:flex;align-items:center;padding:50px 30px}}.blank-state .blank-state-icon svg,.blank-state-center .blank-state-icon svg{display:block;margin:auto}.blank-state .blank-state-title,.blank-state-center .blank-state-title{margin-top:0;font-size:18px}@media (max-width: 575.98px){.blank-state .blank-state-body,.blank-state-center .blank-state-body{text-align:center;margin-top:20px}}@media (min-width: 576px){.blank-state .blank-state-body,.blank-state-center .blank-state-body{padding-left:20px}}.info-well{background:#fafafa;color:#2e2e2e;border:1px solid #e5e5e5;border-radius:4px;margin-bottom:16px}.info-well .card.card-body-segment,.info-well .card-body-segment.card-slim{padding:16px}.info-well .card.card-body-segment:not(:last-of-type),.info-well .card-body-segment.card-slim:not(:last-of-type){border-bottom:1px solid #eef0f2}.info-well .card.card-body-segment.branch-info .commit-sha,.info-well .card-body-segment.branch-info.card-slim .commit-sha,.info-well .card.card-body-segment.branch-info .gfm-commit,.info-well .card-body-segment.branch-info.card-slim .gfm-commit,.info-well .card.card-body-segment.branch-info .gfm-commit_range,.info-well .card-body-segment.branch-info.card-slim .gfm-commit_range,.info-well .card.card-body-segment.branch-info .commit-info,.info-well .card-body-segment.branch-info.card-slim .commit-info{margin-left:4px}.info-well .card.card-body-segment.branch-info .commit-sha .fork-svg,.info-well .card-body-segment.branch-info.card-slim .commit-sha .fork-svg,.info-well .card.card-body-segment.branch-info .gfm-commit .fork-svg,.info-well .card-body-segment.branch-info.card-slim .gfm-commit .fork-svg,.info-well .card.card-body-segment.branch-info .gfm-commit_range .fork-svg,.info-well .card-body-segment.branch-info.card-slim .gfm-commit_range .fork-svg,.info-well .card.card-body-segment.branch-info .commit-info .fork-svg,.info-well .card-body-segment.branch-info.card-slim .commit-info .fork-svg{margin-right:4px;vertical-align:bottom}.info-well .card.card-body-segment.branch-info .ref-name,.info-well .card-body-segment.branch-info.card-slim .ref-name,.info-well .card.card-body-segment.branch-info .git-revision-dropdown .dropdown-content ul li a,.git-revision-dropdown .dropdown-content ul li .info-well .card.card-body-segment.branch-info a,.info-well .card-body-segment.branch-info.card-slim .git-revision-dropdown .dropdown-content ul li a,.git-revision-dropdown .dropdown-content ul li .info-well .card-body-segment.branch-info.card-slim a,.info-well .card.card-body-segment.branch-info .mr-state-widget .label-branch,.mr-state-widget .info-well .card.card-body-segment.branch-info .label-branch,.info-well .card-body-segment.branch-info.card-slim .mr-state-widget .label-branch,.mr-state-widget .info-well .card-body-segment.branch-info.card-slim .label-branch{font-size:12px}.info-well .card.card-body-segment.branch-info .ref-name:hover,.info-well .card-body-segment.branch-info.card-slim .ref-name:hover,.info-well .card.card-body-segment.branch-info .git-revision-dropdown .dropdown-content ul li a:hover,.git-revision-dropdown .dropdown-content ul li .info-well .card.card-body-segment.branch-info a:hover,.info-well .card-body-segment.branch-info.card-slim .git-revision-dropdown .dropdown-content ul li a:hover,.git-revision-dropdown .dropdown-content ul li .info-well .card-body-segment.branch-info.card-slim a:hover,.info-well .card.card-body-segment.branch-info .git-revision-dropdown .dropdown-content ul li .participants-more .btn-link:hover,.git-revision-dropdown .dropdown-content ul li .participants-more .info-well .card.card-body-segment.branch-info .btn-link:hover,.info-well .card-body-segment.branch-info.card-slim .git-revision-dropdown .dropdown-content ul li .participants-more .btn-link:hover,.git-revision-dropdown .dropdown-content ul li .participants-more .info-well .card-body-segment.branch-info.card-slim .btn-link:hover,.info-well .card.card-body-segment.branch-info .participants-more .git-revision-dropdown .dropdown-content ul li .btn-link:hover,.participants-more .git-revision-dropdown .dropdown-content ul li .info-well .card.card-body-segment.branch-info .btn-link:hover,.info-well .card-body-segment.branch-info.card-slim .participants-more .git-revision-dropdown .dropdown-content ul li .btn-link:hover,.participants-more .git-revision-dropdown .dropdown-content ul li .info-well .card-body-segment.branch-info.card-slim .btn-link:hover,.info-well .card.card-body-segment.branch-info .git-revision-dropdown .dropdown-content ul li .user-list-more .btn-link:hover,.git-revision-dropdown .dropdown-content ul li .user-list-more .info-well .card.card-body-segment.branch-info .btn-link:hover,.info-well .card-body-segment.branch-info.card-slim .git-revision-dropdown .dropdown-content ul li .user-list-more .btn-link:hover,.git-revision-dropdown .dropdown-content ul li .user-list-more .info-well .card-body-segment.branch-info.card-slim .btn-link:hover,.info-well .card.card-body-segment.branch-info .user-list-more .git-revision-dropdown .dropdown-content ul li .btn-link:hover,.user-list-more .git-revision-dropdown .dropdown-content ul li .info-well .card.card-body-segment.branch-info .btn-link:hover,.info-well .card-body-segment.branch-info.card-slim .user-list-more .git-revision-dropdown .dropdown-content ul li .btn-link:hover,.user-list-more .git-revision-dropdown .dropdown-content ul li .info-well .card-body-segment.branch-info.card-slim .btn-link:hover,.info-well .card.card-body-segment.branch-info .mr-state-widget .label-branch:hover,.mr-state-widget .info-well .card.card-body-segment.branch-info .label-branch:hover,.info-well .card-body-segment.branch-info.card-slim .mr-state-widget .label-branch:hover,.mr-state-widget .info-well .card-body-segment.branch-info.card-slim .label-branch:hover{text-decoration:underline;color:#2e2e2e}.info-well .card.card-body-segment.admin-well h4,.info-well .card-body-segment.admin-well.card-slim h4{border-bottom:1px solid #e5e5e5;padding-bottom:8px}.info-well .icon-container{display:inline-block;margin-right:8px}.info-well .icon-container svg{position:relative;top:2px;height:16px;width:16px}.info-well .icon-container.commit-icon svg path{fill:#2e2e2e}.info-well .label-gray{background-color:#e8f2f7}.info-well .branches{display:inline}.info-well .branch-link{margin-bottom:2px}.info-well .limit-box{cursor:pointer;display:inline-flex;align-items:center;background-color:#fbe5e1;border-radius:4px;text-align:center}.info-well .limit-box:hover{background-color:#f2b4a9}.info-well .limit-box .limit-icon{margin:0 4px}.info-well .limit-box .limit-message{line-height:16px;margin-right:8px;font-size:12px}.info-well svg{vertical-align:text-top}.light-well,.description-block{background-color:#fafafa;padding:15px}.dark-well{background-color:#f5f5f5}.dark-well .btn{width:100%}.card.card-body-centered h1,.card-body-centered.card-slim h1{font-weight:400;text-align:center;font-size:48px}.page-content-header{line-height:34px;padding:10px 0;margin-bottom:0}@media (min-width: 576px){.page-content-header{display:flex;align-items:center}.page-content-header .header-main-content{flex:1}}.page-content-header .header-action-buttons i{color:#707070;font-size:13px;margin-right:3px}@media (max-width: 575.98px){.page-content-header .header-action-buttons .btn{width:100%;margin-top:10px}.page-content-header .header-action-buttons .dropdown{width:100%}}.page-content-header .avatar{margin-left:0}@media (min-width: 576px){.page-content-header .avatar{margin-left:4px}}.page-content-header .commit-committer-link,.page-content-header .commit-author-link{color:#2e2e2e;font-weight:600}.page-content-header .commit-info.branches{margin-left:8px}.page-content-header .ci-status-link svg{position:relative;top:2px;margin:0 2px 0 3px}.page-content-header .ci-status{margin-right:10px}.awards{display:flex;flex-wrap:wrap}.awards .emoji-icon{width:20px;height:20px}.emoji-menu{display:none;position:absolute;top:0;margin-top:3px;padding:16px;z-index:300;width:300px;font-size:14px;background-color:#fff;border:1px solid #f2f2f2;border-radius:3px;box-shadow:0 6px 12px rgba(0,0,0,0.175);pointer-events:none;opacity:0;transform:scale(0.2);transform-origin:0 -45px;transition:0.3s cubic-bezier(0.67, 0.06, 0.19, 1.44);transition-property:transform, opacity}.emoji-menu.is-rendered{display:block}.emoji-menu.is-aligned-right{transform-origin:100% -45px}.emoji-menu.is-visible{pointer-events:all;opacity:1;transform:scale(1)}.emoji-menu .emoji-menu-content{height:300px;overflow-y:scroll}.emoji-menu .disabled{cursor:default;opacity:0.5}.emoji-menu .disabled:hover{transform:none}.emoji-search{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAFu0lEQVRIia1WTahkVxH+quqce7vf6zdvJpHoIlkYJ2SiJiIokmQjgoGgIAaEIYuYXWICgojiwkmC4taFwhjcyIDusogEIwwiSSCKPwsdwzAg0SjJ9Izzk5n3+nXfe8+pqizOvd395scfsJqi6dPnnDr11Vc/NJ1OwUTosqJLCmYCHCAC2mSHs+ojZv6AO46Y+20AhIneJsafhPhXVZSXDk7qi+aOLhtQNuBmQtcarAKjTXpn2+l3u2yPunvZSABRucjcAV/eMZuM48/Go/g1d19kc4wq+e8MZjWkbI/P5t2P3RFFbv7SQdyBlBUx8N8OTuqjMcof+N94yMPrY2DMm/ytnb32J0QrY+6AqsHM4Q64O9SKDmerKDD3Oy/tNL9vk342CC8RuU6n0ymCMHb22scu7zQngtASOjUHE1BX4UUAv4b7Ow6qiXCXuz/UdvogAAweDY943/b4cAz0ZlYHXeMsnT07RVb7wMUr8ykI4H5HVkMd5Rcb4/jNURVOL5qErAaAUUdCCIJ5kx5q2nw8m39ImEAAsjpE6PStB0YfMcd1wqqG3Xn7A3PfZyyKnNjaqD4fmE/fCNKshirIyY1xvI+Av6g5QIAIIWX7cJPssboSiBBEeKmsZne0Sb8kzAUWNYyq8NvbDo0fZ6beqxuLmqOOMr/lwOh+YXpXtbjERGja9JyZ9+HxpXKb9Gj5oywRESbj+Cj1ENG1QViTGBl1FbC1We1tbVRfHWIoQkhqH9xbpE92XUbb6VJZ1R4crjRz1JWcDMJvLdoMcyAEhjuwHo8Bfndg3mbszhOY+adVlMtD3po51OwzIQiEaams7oeJhxRw1FFOVpFRRUYIhMBAFRnjOsC8IFHHUA4TQQhgAqpAiIFfGbxkIqj54ayGbL7UoOqHCniAEKHLNr26l+D9wQJzeUwMAnfHvEnLECzZRwRV++d60ptjW9VLZeolEJG6GwCCE0CFVNB+Ay0NEqoQYG4YYFu7B8IEVRt3uRzy/osIoLV9QZimWXGHUMFdmI6M64DUF2Je88R9VZqCSP+QlcF5k+4tCzSsXaqjINuK6UyE0+s/mk6/qFq8oAIL9pqMLhkGsNrOyoOIlszust3aJv0U9+kFdwjTGwWl1YdF+KWlQSZ0Se/psj8yGVdg5tJyfH96EBWmLtoEMwMzMFt031NzGWLLzKhC+KV7H5ZeeaMOPxemma2x68puc0LN3+/u6LJiePS6MKHvn4wu6cPzJj0hsioeMfDrEvjv5r6W9gBvjKJujuKzQ0URIZj75NylvT+mbHfXQa4rwAMaVRTMm/SFyzvNy0yF6+4AM+1ubcSnqkAIUjQKl1RKSbE5jt+vovx1MBqF0WW7/d1Z80ab9BtmuJ3Xk5cJKds9TZt/uLPXvtiTrQ+dIwqfAejUvM1os6FNikXKUHfQ+ekUsXT5u85enJ0CaBSkkGEo1syUQ+DfMdE/4GA1uzupf9zdbzhOmLsF4efHVXjaHHAzmDtGdQRd/Nc5wAEJjNki3XfhyvwVNz80xANrht3LsENY9cBBdN1L9GUyyvFRFZ42t75sBvCQRykbRlU4tT2pPxoCvzx09d4GmPs200M6wKdWSDGK8mppYSWdhAlt0qeaLv+IadXU9/Evq4FAZ8ej+LmtcTxaRX4NWI0Uag5Vg1p5MYg8BnlhXIdPHDow+vTWZvVMVttXDLqkTzZdPj6Qii6cP1cSvIdl3iQkNYyi9HH0I22y+93tY3DcQkTZgQtM+POoCr8x97eylkmtrgKuztrvXJ21x/aNKuqIkZ/fntRfCdcTfhUTAIhRzoDojJD0aSNLLwMzmpT7+JaLtyf1MwDo6qz9djFaUq3t9MlFmy/c1OCSceY9fMsVaL9mvH9ocXdkdWxv1scAePG0THAhMOaLdOw/Gvxfxb1w4eCapyIENUcV5M3/u8FitAxZ25P6GAHT3UX39Srw+QOb1ZffA98Dl2Wy1BYkAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:right 5px center;background-size:16px}.emoji-menu-list{margin-bottom:0;padding-left:0;list-style:none}.emoji-menu-list-item{float:left;padding:3px;margin-left:1px;margin-right:1px}.emoji-menu-btn{display:block;cursor:pointer;width:30px;height:30px;padding:0;background:none;border:0;border-radius:3px;transition:transform 0.15s cubic-bezier(0.3, 0, 0.2, 2)}.emoji-menu-btn:hover{background-color:transparent;outline:0;transform:scale(1.3)}.emoji-menu-btn:focus,.emoji-menu-btn:active{outline:0}.emoji-menu-btn .emoji-icon{display:inline-block;position:relative;top:3px}.emoji-menu-btn>gl-emoji{line-height:1.5}.award-menu-holder{display:inline-block}.award-menu-holder .tooltip{white-space:nowrap}.award-control{margin:4px 8px 4px 0;outline:0;position:relative;display:block;float:left}.award-control.disabled{cursor:default}.award-control.disabled:hover,.award-control.disabled:focus,.award-control.disabled:active{background-color:#fff;border-color:#e5e5e5;box-shadow:none}.award-control.active,.award-control:hover,.award-control:active,.award-control.is-active{background-color:#f6fafe;border-color:#b8d6f4;box-shadow:none;outline:0}.award-control.active .award-control-icon svg,.award-control:hover .award-control-icon svg,.award-control:active .award-control-icon svg,.award-control.is-active .award-control-icon svg{background:#fed159}.award-control.active .award-control-icon svg path,.award-control:hover .award-control-icon svg path,.award-control:active .award-control-icon svg path,.award-control.is-active .award-control-icon svg path{fill:#bb9c13}.award-control.active .award-control-icon-neutral,.award-control:hover .award-control-icon-neutral,.award-control:active .award-control-icon-neutral,.award-control.is-active .award-control-icon-neutral{opacity:0}.award-control.active .award-control-icon-positive,.award-control:hover .award-control-icon-positive,.award-control:active .award-control-icon-positive,.award-control.is-active .award-control-icon-positive{opacity:1;transform:scale(1.15)}.award-control.is-active .award-control-icon-positive{opacity:0;transform:scale(1)}.award-control.is-active .award-control-icon-super-positive{opacity:1;transform:scale(1)}.award-control.user-authored{cursor:default;background-color:#fafafa;border-color:#dfdfdf;color:#919191}.award-control.user-authored gl-emoji{opacity:0.4;filter:grayscale(100%)}.award-control.btn:focus{outline:0}.award-control.btn .award-control-icon{margin:0}.award-control.is-loading .award-control-icon-normal,.award-control.is-loading .emoji-icon{display:none}.award-control.is-loading .award-control-icon-loading{display:block}.award-control .icon,.award-control gl-emoji,.award-control .award-control-icon{vertical-align:middle;margin-right:0.15em;font-size:1.5em;line-height:1}.award-control .award-control-icon-loading{display:none}.award-control .award-control-icon{color:#e8e8e8;margin-top:1px;padding:0 2px}.award-control .award-control-icon svg{margin-bottom:1px;height:18px;width:18px;border-radius:50%}.award-control .award-control-icon svg path{fill:#e8e8e8}.award-control .award-control-icon-positive,.award-control .award-control-icon-super-positive{transition:opacity 100ms linear, transform 100ms linear;position:absolute;left:10px;bottom:6px;opacity:0}.award-control .award-control-text{vertical-align:middle}.appearance-logo-preview{max-width:400px;margin-bottom:20px}.appearance-light-logo-preview{background-color:#fafafa;max-width:72px;padding:10px;margin-bottom:10px}.svg-content{text-align:center;padding:16px}.svg-content svg,.svg-content img{max-width:425px;width:100%}.svg-content.svg-80 img,.svg-content.svg-80 svg{width:80px}.svg-content.svg-130 img,.svg-content.svg-130 svg{width:130px}.svg-content.svg-250 img,.svg-content.svg-250 svg{width:250px}.svg-content.svg-306 img,.svg-content.svg-306 svg{width:306px}.svg-content.svg-394 img,.svg-content.svg-394 svg{width:394px}.svg-content.svg-430 img,.svg-content.svg-430 svg{width:430px}svg{fill:currentColor}svg.s8{width:8px;height:8px}svg.s12{width:12px;height:12px}svg.s16{width:16px;height:16px}svg.s18{width:18px;height:18px}svg.s24{width:24px;height:24px}svg.s32{width:32px;height:32px}svg.s48{width:48px;height:48px}svg.s72{width:72px;height:72px}.broadcast-message,.broadcast-message-preview{padding:10px;text-align:center}.broadcast-message div,.broadcast-message-preview div,.broadcast-message p,.broadcast-message-preview p{display:inline;margin:0}.broadcast-message div a,.broadcast-message-preview div a,.broadcast-message p a,.broadcast-message-preview p a{color:inherit;text-decoration:underline}.broadcast-message-preview{margin-bottom:20px}.toggle-colors input{min-height:34px}gl-emoji{font-style:normal;display:inline-flex;vertical-align:middle;font-family:"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:1.5em;line-height:0.9}.ci-status-icon-success svg,.ci-status-icon-passed svg{fill:#1aaa55}.ci-status-icon-success.add-border svg,.ci-status-icon-passed.add-border svg{border:1px solid #1aaa55;border-radius:50%}.ci-status-icon-failed svg{fill:#db3b21}.ci-status-icon-failed.add-border svg{border:1px solid #db3b21;border-radius:50%}.ci-status-icon-pending svg,.ci-status-icon-failed_with_warnings svg,.ci-status-icon-success_with_warnings svg{fill:#fc9403}.ci-status-icon-pending.add-border svg,.ci-status-icon-failed_with_warnings.add-border svg,.ci-status-icon-success_with_warnings.add-border svg{border:1px solid #fc9403;border-radius:50%}.ci-status-icon-running svg{fill:#2e87e0}.ci-status-icon-running.add-border svg{border:1px solid #2e87e0;border-radius:50%}.ci-status-icon-canceled svg,.ci-status-icon-disabled svg{fill:#2e2e2e}.ci-status-icon-canceled.add-border svg,.ci-status-icon-disabled.add-border svg{border:1px solid #2e2e2e;border-radius:50%}.ci-status-icon-created svg,.ci-status-icon-skipped svg,.ci-status-icon-notfound svg{fill:#c4c4c4}.ci-status-icon-created.add-border svg,.ci-status-icon-skipped.add-border svg,.ci-status-icon-notfound.add-border svg{border:1px solid #c4c4c4;border-radius:50%}.ci-status-icon-manual svg{fill:#2e2e2e}.icon-link:hover{text-decoration:none}.user-avatar-link{text-decoration:none}.snippet-row .title{margin-bottom:2px}.snippet-row .snippet-filename{padding:0 2px}.snippet-form-holder .file-holder .file-title{padding:2px}.markdown-snippet-copy{position:fixed;top:-10px;left:-10px;max-height:0;max-width:0}.snippet-file-content{border-radius:3px}.snippet-header{padding:16px 0}.snippet-title{color:#2e2e2e;font-size:2em;font-weight:600;min-height:40px}.snippet-edited-ago{color:#c4c4c4}@media (min-width: 576px){.snippet-actions{float:right}}.snippet-scope-menu .btn-new{margin-top:15px}.embed-snippet{padding-right:0;padding-top:16px}.embed-snippet .embed-toggle-list li button{padding:8px 40px}.memory-graph-container svg{background:#fff;cursor:pointer}.memory-graph-container svg:hover{box-shadow:0 0 4px #c4c4c4 inset}.memory-graph-container path{fill:none;stroke:#1f78d1;stroke-width:2px}.memory-graph-container circle{stroke:#17599c;fill:#17599c;stroke-width:4px}.gl-responsive-table-row-layout,.gl-responsive-table-row{width:100%}@media (min-width: 768px){.gl-responsive-table-row-layout,.gl-responsive-table-row{display:flex;align-items:center}.gl-responsive-table-row-layout>.gl-responsive-table-row-layout:not(:first-child),.gl-responsive-table-row>.gl-responsive-table-row-layout:not(:first-child),.gl-responsive-table-row-layout>.gl-responsive-table-row:not(:first-child),.gl-responsive-table-row>.gl-responsive-table-row:not(:first-child){margin-top:16px}}.gl-responsive-table-row{margin-top:10px;border:1px solid #e5e5e5}@media (min-width: 768px){.gl-responsive-table-row{margin:0;padding:16px 0;border:0}.gl-responsive-table-row:not(:last-child){border-bottom:1px solid #f0f0f0}}.gl-responsive-table-row-col-span{flex-wrap:wrap}.table-section{white-space:nowrap}.table-section.section-10{flex:0 0 10%}@media (min-width: 768px){.table-section.section-10{max-width:10%}}.table-section.section-15{flex:0 0 15%}@media (min-width: 768px){.table-section.section-15{max-width:15%}}.table-section.section-20{flex:0 0 20%}@media (min-width: 768px){.table-section.section-20{max-width:20%}}.table-section.section-25{flex:0 0 25%}@media (min-width: 768px){.table-section.section-25{max-width:25%}}.table-section.section-30{flex:0 0 30%}@media (min-width: 768px){.table-section.section-30{max-width:30%}}.table-section.section-40{flex:0 0 40%}@media (min-width: 768px){.table-section.section-40{max-width:40%}}.table-section.section-50{flex:0 0 50%}@media (min-width: 768px){.table-section.section-50{max-width:50%}}.table-section.section-100{flex:0 0 100%}@media (min-width: 768px){.table-section.section-100{max-width:100%}}@media (max-width: 767.98px){.table-section{display:flex;align-self:stretch;padding:10px;align-items:center;min-height:62px}.table-section:not(:first-child){border-top:1px solid #f0f0f0}}.table-section.section-wrap{white-space:normal}@media (max-width: 767.98px){.table-section.section-wrap{flex-wrap:wrap}}.table-section.section-align-top{align-self:flex-start}@media (min-width: 768px){.table-button-footer{text-align:right}}@media (max-width: 767.98px){.table-button-footer{display:block;align-self:stretch;min-height:0;background-color:#f5f5f5;border-top:1px solid #e5e5e5}.table-button-footer .table-action-buttons{display:flex}.table-button-footer .table-action-buttons .btn{border-radius:3px}.table-button-footer .table-action-buttons>.btn-group,.table-button-footer .table-action-buttons>.external-url,.table-button-footer .table-action-buttons>.btn{flex:1 1 28px}.table-button-footer .table-action-buttons>.btn-group:not(:first-child),.table-button-footer .table-action-buttons>.external-url:not(:first-child),.table-button-footer .table-action-buttons>.btn:not(:first-child){margin-left:5px}.table-button-footer .table-action-buttons>.btn-group:not(:last-child),.table-button-footer .table-action-buttons>.external-url:not(:last-child),.table-button-footer .table-action-buttons>.btn:not(:last-child){margin-right:5px}.table-button-footer .table-action-buttons .dropdown-new{width:100%}.table-button-footer .table-action-buttons .dropdown-menu{min-width:initial}}.table-row-header{font-size:13px}@media (max-width: 767.98px){.table-row-header{display:none}}.table-mobile-header{flex:0 0 40%;max-width:40%;color:#707070;text-align:left}@media (min-width: 768px){.table-mobile-header{display:none}}@media (max-width: 767.98px){.table-mobile-content{flex:0 0 60%;max-width:60%;text-align:right}}.flex-truncate-parent{display:flex}.flex-truncate-child{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (min-width: 768px){.flex-truncate-child{flex:0 0 90%}}.flex-truncate-child .avatar{float:none;margin-right:4px}.stacked-progress-bar{display:flex;height:16px;border-radius:10px;overflow:hidden;background-color:#f2f2f2}.stacked-progress-bar .status-unavailable,.stacked-progress-bar .status-green,.stacked-progress-bar .status-neutral,.stacked-progress-bar .status-red{height:100%;min-width:30px;padding:0 5px;font-size:12px;font-weight:normal;color:#fff;line-height:16px}.stacked-progress-bar .status-unavailable:hover,.stacked-progress-bar .status-green:hover,.stacked-progress-bar .status-neutral:hover,.stacked-progress-bar .status-red:hover{cursor:pointer}.stacked-progress-bar .status-unavailable{padding:0 10px;color:#707070}.stacked-progress-bar .status-green{background-color:#1aaa55}.stacked-progress-bar .status-green:hover{background-color:#168f48}.stacked-progress-bar .status-neutral{background-color:#dfdfdf;color:#313236}.stacked-progress-bar .status-neutral:hover{background-color:#cccccc}.stacked-progress-bar .status-red{background-color:#db3b21}.stacked-progress-bar .status-red:hover{background-color:#c0341d}.ci-variable-list{margin-left:0;margin-bottom:0;padding-left:0;list-style:none;clear:both}.ci-variable-row{display:flex;align-items:flex-start}@media (max-width: 575.98px){.ci-variable-row{align-items:flex-end}}.ci-variable-row:not(:last-child){margin-bottom:10px}@media (max-width: 575.98px){.ci-variable-row:not(:last-child){margin-bottom:30px}}.ci-variable-row:last-child .ci-variable-body-item:last-child{margin-right:calc(1em + 32px)}@media (max-width: 575.98px){.ci-variable-row:last-child .ci-variable-body-item:last-child{margin-right:0}}.ci-variable-row:last-child .ci-variable-row-remove-button{display:none}@media (max-width: 575.98px){.ci-variable-row:last-child .ci-variable-row-body{margin-right:calc(1em + 32px)}}.ci-variable-row-body{display:flex;align-items:flex-start;width:100%}@media (max-width: 575.98px){.ci-variable-row-body{display:block}}.ci-variable-body-item{flex:1}.ci-variable-body-item:not(:last-child){margin-right:10px}@media (max-width: 575.98px){.ci-variable-body-item:not(:last-child){margin-right:0;margin-bottom:10px}}.ci-variable-protected-item{flex:0 1 auto;display:flex;align-items:center;padding-top:5px;padding-bottom:5px}.ci-variable-row-remove-button{transition:color 100ms linear;flex-shrink:0;display:flex;justify-content:center;align-items:center;width:calc(1em + 32px);height:34px;padding:0;background:transparent;border:0;color:#707070}.ci-variable-row-remove-button:hover,.ci-variable-row-remove-button:focus{outline:none;color:#2e2e2e}.ci-variable-row-remove-button[disabled]{color:#919191}.feature-highlight{position:relative;margin-left:16px;width:20px;height:20px;cursor:pointer}.feature-highlight::before{content:'';display:block;position:absolute;top:6px;left:6px;width:8px;height:8px;background-color:#1f78d1;border-radius:50%;box-shadow:0 0 0 rgba(31,120,209,0.4);animation:pulse-highlight 2s infinite}.feature-highlight:hover::before,.feature-highlight.disable-animation::before{animation:none}.feature-highlight[disabled]::before{display:none}.is-showing-fly-out .feature-highlight{display:none}.feature-highlight-popover-content{display:none}.feature-highlight-popover-content hr{margin:8px 0}.feature-highlight-popover-content .btn-link svg{height:16px;width:16px;top:0;vertical-align:text-top}.feature-highlight-popover-content .btn-link svg path{fill:currentColor}.feature-highlight-popover-content .feature-highlight-illustration{width:100%;height:100px;padding-top:12px;padding-bottom:12px;background-color:#f7f7ff;border-top-left-radius:2px;border-top-right-radius:2px;border-bottom:1px solid #e1e1e1}.popover .feature-highlight-popover-content{display:block}.feature-highlight-popover{width:240px;padding:0;border:1px solid #e5e5e5;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.feature-highlight-popover.right>.arrow{border-right-color:#e5e5e5}.feature-highlight-popover .popover-body{padding:0}.feature-highlight-popover-sub-content{padding:9px 14px}@-webkit-keyframes pulse-highlight{0%{box-shadow:0 0 0 0 rgba(184,214,244,0.4)}70%{box-shadow:0 0 0 10px transparent}100%{box-shadow:0 0 0 0 transparent}}@keyframes pulse-highlight{0%{box-shadow:0 0 0 0 rgba(184,214,244,0.4)}70%{box-shadow:0 0 0 10px transparent}100%{box-shadow:0 0 0 0 transparent}}.with-performance-bar .terms{margin-top:0}.terms .alert-wrapper{min-height:56px}.terms .content{padding-top:16px}.terms .card .card-header,.terms .card-slim .card-header{display:-webkit-flex;display:flex;align-items:center;justify-content:space-between;line-height:1.5}.terms .card .card-header .card-title,.terms .card-slim .card-header .card-title{display:flex;align-items:center}.terms .card .card-header .card-title .logo-text,.terms .card-slim .card-header .card-title .logo-text{width:55px;height:24px;display:flex;flex-direction:column;justify-content:center}.terms .card .card-header .navbar-collapse,.terms .card-slim .card-header .navbar-collapse{padding-right:0;flex-grow:0;flex-basis:auto}.terms .card .card-header .navbar-collapse .navbar-nav,.terms .card-slim .card-header .navbar-collapse .navbar-nav{margin:0}.terms .card .card-header .nav li,.terms .card-slim .card-header .nav li{float:none}.terms .card .panel-content,.terms .card-slim .panel-content{padding:16px}.terms .card .panel-content *:first-child,.terms .card-slim .panel-content *:first-child{margin-top:0}.terms .card .panel-content *:last-child,.terms .card-slim .panel-content *:last-child{margin-bottom:0}.terms .card .footer-block,.terms .card-slim .footer-block{margin:0}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("./fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot");src:url("./fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot?#iefix") format("embedded-opentype"),url("./fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2") format("woff2"),url("./fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff") format("woff"),url("./fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf") format("truetype"),url("./fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:0.75em;vertical-align:-15%}.fa-2x,.admonitionblock td.icon [class^="fa icon-"]{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:0.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eeeeee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#ffffff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before,.clearable-input .clear-icon:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before,.admonitionblock td.icon .icon-important:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before,.admonitionblock td.icon .icon-caution:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before,.admonitionblock td.icon .icon-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before,.admonitionblock td.icon .icon-note:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before,.admonitionblock td.icon .icon-tip:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.info-well .admin-well-statistics,.info-well .admin-well-features{padding-bottom:46px}[v-cloak]{display:none}.user-can-drag{cursor:-webkit-grab;cursor:grab}.is-dragging{opacity:1 !important}.is-dragging *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:-webkit-grabbing !important;cursor:grabbing !important}.is-ghost{opacity:0.3}.dropdown-menu-issues-board-new{width:320px}.open .dropdown-menu-issues-board-new{max-height:400px}.dropdown-menu-issues-board-new .dropdown-content{max-height:162px}.issue-board-dropdown-content{margin:0 8px 10px;padding-bottom:10px;border-bottom:1px solid rgba(0,0,0,0.1)}.issue-board-dropdown-content>p{margin:0;font-size:14px}.issue-boards-page .content-wrapper{padding-bottom:0}.boards-app{position:relative}@media (min-width: 576px){.boards-app{transition:width 0.3s;width:100%}.boards-app.is-compact{width:calc(100% - 290px)}}.boards-app-loading{width:100%;font-size:34px}.boards-list{height:calc(100vh - 103px);width:100%;padding:16px 8px;overflow-x:scroll;white-space:nowrap;min-height:200px}@media (min-width: 576px) and (max-width: 767.98px){.boards-list{height:calc(100vh - 88px)}}@media (min-width: 768px){.boards-list{height:calc(100vh - 156px)}}.with-performance-bar .boards-list{height:calc( 100vh - 103px - 35px )}@media (min-width: 576px) and (max-width: 767.98px){.with-performance-bar .boards-list{height:calc( 100vh - 88px - 35px )}}@media (min-width: 768px){.with-performance-bar .boards-list{height:calc( 100vh - 156px - 35px )}}.board{display:inline-block;width:calc(85vw - 15px);height:100%;padding-right:8px;padding-left:8px;white-space:normal;vertical-align:top}@media (min-width: 576px){.board{width:400px}}.board.is-expandable .board-header{cursor:pointer}.board.is-collapsed{width:50px}.board.is-collapsed .board-header{position:absolute;top:0;right:0;bottom:0;left:0}.board.is-collapsed .board-title{padding:0;border-bottom:0}.board.is-collapsed .board-title>span{display:block;transform:rotate(90deg) translate(35px, 10px)}.board.is-collapsed .board-title-expandable-toggle{position:absolute;top:50%;left:50%;margin-left:-10px}.board.is-collapsed .board-list-component,.board.is-collapsed .issue-count-badge{display:none}.board-inner{position:relative;height:100%;font-size:14px;background:#fafafa;border:1px solid #e5e5e5;border-radius:4px}.board-header{position:relative}.board-header.has-border::before{border-top:3px solid;border-color:inherit;border-top-left-radius:4px;border-top-right-radius:4px;content:'';position:absolute;width:calc(100% + 2px);top:0;left:0;margin-top:-1px;margin-right:-1px;margin-left:-1px;padding-top:1px;padding-right:1px;padding-left:1px}.board-header.has-border::before .board-title{padding-top:13px;padding-bottom:16px}.board-inner-container{border-bottom:1px solid #e5e5e5;padding:16px}.board-title{margin:0;padding:12px 16px;font-size:1em;border-bottom:1px solid #e5e5e5;display:flex;align-items:center}.board-title-text{margin-right:auto}.board-delete{margin-right:10px;padding:0;color:#c4c4c4;background-color:transparent;border:0;outline:0}.board-delete:hover{color:#1b69b6}.board-blank-state{height:calc(100% - 49px);padding:16px;background-color:#fff}.board-blank-state-list{list-style:none}.board-blank-state-list>li:not(:last-child){margin-bottom:8px}.board-blank-state-list .label-color{position:relative;top:2px;display:inline-block;width:16px;height:16px;margin-right:3px;border-radius:4px}.board-list-component{height:calc(100% - 49px);overflow:hidden;position:relative}.board-list{height:100%;width:100%;margin-bottom:0;padding:5px;list-style:none;overflow-y:scroll;overflow-x:hidden}.board-list-loading{margin-top:10px;font-size:1.8571428571em}.board-card{position:relative;padding:11px 10px 11px 16px;background:#fff;border-radius:4px;box-shadow:0 1px 2px rgba(186,186,186,0.5);list-style:none}.board-card:not(:last-child){margin-bottom:5px}.board-card.is-active,.board-card.is-active .board-card-assignee:hover a{background-color:#f6fafe}.board-card .badge{border:0;outline:0}.board-card .confidential-icon{position:relative;top:1px;margin-right:5px}.board-card-title{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;max-width:100%;margin:0 30px 0 0;font-size:1em;line-height:inherit}.board-card-title a{color:#2e2e2e;margin-right:2px}.board-card-header{display:flex;min-height:20px}.board-card-header .board-card-assignee{display:flex;justify-content:flex-end;position:absolute;right:15px;height:20px;width:20px}.board-card-header .board-card-assignee .avatar-counter,.board-card-header .board-card-assignee .diff-comments-more-count,.board-card-header .board-card-assignee .diff-notes-collapse{display:none;vertical-align:middle;min-width:20px;line-height:19px;height:20px;padding-left:2px;padding-right:2px;border-radius:2em}.board-card-header .board-card-assignee img{vertical-align:top}.board-card-header .board-card-assignee a{position:relative;margin-left:-15px}.board-card-header .board-card-assignee a:nth-child(1){z-index:3}.board-card-header .board-card-assignee a:nth-child(2){z-index:2}.board-card-header .board-card-assignee a:nth-child(3){z-index:1}.board-card-header .board-card-assignee a:nth-child(4){display:none}.board-card-header .board-card-assignee:hover .avatar-counter,.board-card-header .board-card-assignee:hover .diff-comments-more-count,.board-card-header .board-card-assignee:hover .diff-notes-collapse{display:inline-block}.board-card-header .board-card-assignee:hover a{position:static;background-color:#fff;transition:background-color 0s;margin-left:auto}.board-card-header .board-card-assignee:hover a:nth-child(4){display:block}.board-card-header .board-card-assignee:hover a:first-child:not(:only-child){box-shadow:-10px 0 10px 1px #fff}.board-card-header .avatar{margin:0}.board-card-footer{margin:0 0 5px}.board-card-footer .badge{margin-top:5px;margin-right:6px}.board-card-number{font-size:12px;color:#707070}.issue-boards-search{width:395px}.issue-boards-search .form-control,.issue-boards-search .search form,.search .issue-boards-search form{display:inline-block;width:210px}.board-list-count{padding:10px 0;color:#707070;font-size:13px}.board-list-count>.fa{margin-right:5px}.board-new-issue-form{z-index:4;margin:5px}.page-with-contextual-sidebar.layout-page .issue-boards-sidebar .issuable-sidebar-header{position:relative}.page-with-contextual-sidebar.layout-page .issue-boards-sidebar .gutter-toggle{position:absolute;top:0;bottom:15px;right:0;width:22px;color:#c4c4c4}.page-with-contextual-sidebar.layout-page .issue-boards-sidebar .gutter-toggle svg{position:absolute;top:50%;margin-top:-5.5px}.page-with-contextual-sidebar.layout-page .issue-boards-sidebar .gutter-toggle:hover path{fill:#c4c4c4}.page-with-contextual-sidebar.layout-page .issue-boards-sidebar .issuable-header-text{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;max-width:100%;padding-right:35px}.page-with-contextual-sidebar.layout-page .issue-boards-sidebar .issuable-header-text>strong{font-weight:600}.right-sidebar.right-sidebar-expanded.boards-sidebar-slide-enter-active,.right-sidebar.right-sidebar-expanded.boards-sidebar-slide-leave-active{transition:width 0.3s, padding 0.3s}.right-sidebar.right-sidebar-expanded.boards-sidebar-slide-enter,.right-sidebar.right-sidebar-expanded.boards-sidebar-slide-leave-active{width:0;padding-left:0;padding-right:0}.add-issues-modal{display:-webkit-flex;display:flex;position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,0.3);z-index:9999}.add-issues-container{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;width:90vw;height:85vh;max-width:1100px;min-height:500px;margin:auto;padding:25px 15px 0;background-color:#fff;border-radius:4px;box-shadow:0 2px 12px rgba(0,0,0,0.5)}.add-issues-container .empty-state{display:-webkit-flex;display:flex;-webkit-flex:1;flex:1;margin-top:0}.add-issues-container .empty-state.add-issues-empty-state-filter{-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:center;justify-content:center}.add-issues-container .empty-state>.row{width:100%;margin:auto 0}.add-issues-container .empty-state .svg-content{margin-top:-40px}.add-issues-header{margin:-25px -15px -5px;border-top:0;border-bottom:1px solid #e5e5e5;border-top-right-radius:4px;border-top-left-radius:4px}.add-issues-header>h2{margin:0;font-size:18px}.add-issues-search{display:-webkit-flex;display:flex}.add-issues-search .issues-filters{-webkit-flex:1;flex:1}.add-issues-list-column{width:100%}@media (min-width: 576px){.add-issues-list-column{width:50%}}@media (min-width: 768px){.add-issues-list-column{width:33.3333333333%}}.add-issues-list{display:-webkit-flex;display:flex;-webkit-flex:1;flex:1;padding-top:3px;margin-left:-6px;margin-right:-6px;overflow-y:scroll}.add-issues-list .board-card-parent{padding:0 5px 5px}.add-issues-list .board-card{border:1px solid #e3e3e3;box-shadow:0 1px 2px rgba(186,186,186,0.3);cursor:pointer}.add-issues-list-loading{-webkit-align-self:center;align-self:center;width:100%;padding-left:6px;padding-right:6px;font-size:35px}.add-issues-footer{margin:auto -15px 0;padding-left:15px;padding-right:15px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.add-issues-footer-to-list{padding-left:6px;padding-right:6px;line-height:34px}.issue-card-selected{position:absolute;right:-3px;top:-3px;width:17px;background-color:#1f78d1;color:#fff;border:1px solid #1b69b6;font-size:9px;line-height:15px;border-radius:50%}.modal-filters{display:flex}.modal-filters>.dropdown{display:none;margin-right:10px}@media (min-width: 576px){.modal-filters>.dropdown{display:block}}.modal-filters .dropdown-menu-toggle{width:100px}@media (min-width: 768px){.modal-filters .dropdown-menu-toggle{width:140px}}.content-list>.branch-item,.branch-title{display:flex;align-items:center}.branch-info{flex:auto;min-width:0;overflow:hidden}.divergence-graph{padding:0 6px}.divergence-graph .graph-side{position:relative;width:80px;height:22px;padding:5px 0 13px;float:left}.divergence-graph .graph-side .bar{position:absolute;height:4px;background-color:#ccc}.divergence-graph .graph-side .bar-behind{right:0;border-radius:3px 0 0 3px}.divergence-graph .graph-side .bar-ahead{left:0;border-radius:0 3px 3px 0}.divergence-graph .graph-side .count{padding-top:6px;padding-bottom:0;font-size:12px;color:#2e2e2e;display:block}.divergence-graph .graph-side .count-behind{padding-right:4px;text-align:right}.divergence-graph .graph-side .count-ahead{padding-left:4px;text-align:left}.divergence-graph .graph-separator{position:relative;width:1px;height:18px;margin:5px 0 0;float:left;background-color:#ccc}.divergence-graph,.branch-item .controls{flex:0 0 auto;white-space:nowrap}@keyframes fade-out-status{0%, + 50%{opacity:1}100%{opacity:0}}@keyframes blinking-dots{0%{background-color:white;box-shadow:12px 0 0 0 rgba(255,255,255,0.2),24px 0 0 0 rgba(255,255,255,0.2)}25%{background-color:rgba(255,255,255,0.4);box-shadow:12px 0 0 0 #fff,24px 0 0 0 rgba(255,255,255,0.2)}75%{background-color:rgba(255,255,255,0.4);box-shadow:12px 0 0 0 rgba(255,255,255,0.2),24px 0 0 0 #fff}100%{background-color:white;box-shadow:12px 0 0 0 rgba(255,255,255,0.2),24px 0 0 0 rgba(255,255,255,0.2)}}@keyframes blinking-scroll-button{0%{opacity:0.2}25%{opacity:0.5}50%{opacity:0.7}100%{opacity:1}}.build-page .build-trace-container{position:relative}.build-page .build-trace{background:#000;color:#c4c4c4;white-space:pre;overflow-x:auto;font-size:12px;border-radius:0;border:0;padding:8px}.build-page .build-trace .bash{display:block}.build-page .build-trace.build-trace-rounded{border-radius:3px}.build-page .top-bar{height:35px;min-height:35px;background:#fafafa;border:1px solid #e5e5e5;color:#2e2e2e;position:sticky;position:-webkit-sticky;top:40px;padding:8px}.build-page .top-bar.affix{top:40px}.build-page .top-bar.affix.sidebar-expanded{right:306px;left:16px}.build-page .top-bar.affix.sidebar-collapsed{right:16px;left:16px}.build-page .top-bar.affix-top{position:absolute;right:0;left:0;top:0}.build-page .top-bar .truncated-info .truncated-info-size{margin:0 5px}.build-page .top-bar .truncated-info .raw-link{color:#2e2e2e;margin-left:5px;text-decoration:underline}.build-page .top-bar .controllers{display:flex;font-size:15px;justify-content:center;align-items:center}.build-page .top-bar .controllers svg{height:15px;display:block;fill:#2e2e2e}.build-page .top-bar .controllers .controllers-buttons{color:#2e2e2e;margin:0 8px}.build-page .top-bar .controllers .controllers-buttons:last-child{margin-right:0}.build-page .top-bar .controllers .btn-scroll.animate .first-triangle{animation:blinking-scroll-button 1s ease infinite;animation-delay:0.3s}.build-page .top-bar .controllers .btn-scroll.animate .second-triangle{animation:blinking-scroll-button 1s ease infinite;animation-delay:0.2s}.build-page .top-bar .controllers .btn-scroll.animate .third-triangle{animation:blinking-scroll-button 1s ease infinite}.build-page .top-bar .controllers .btn-scroll.animate:disabled{opacity:1}.build-page .top-bar .controllers .btn-scroll:disabled{opacity:0.35;cursor:not-allowed}.build-page .environment-information{border:1px solid #e5e5e5;padding:8px 16px 12px;border-radius:4px}.build-page .environment-information svg{position:relative;top:5px;margin-right:5px;width:22px;height:22px}.build-page .build-loader-animation{position:relative;width:6px;height:6px;margin:auto auto 12px 2px;border-radius:50%;animation:blinking-dots 1s linear infinite}.with-performance-bar .build-page .top-bar{top:75px}.with-performance-bar .build-page .top-bar.affix{top:75px}.build-header .ci-header-container,.build-header .header-action-buttons{display:flex}.build-header .ci-header-container{min-height:54px}.build-header .page-content-header{padding:10px 0 9px}@media (max-width: 575.98px){.build-header .header-action-buttons .sidebar-toggle-btn{margin-top:0;margin-left:10px;max-height:34px}}.build-header .header-content a{color:#2e2e2e}.build-header .header-content a:hover,.build-header .header-content .participants-more .btn-link:hover,.participants-more .build-header .header-content .btn-link:hover,.build-header .header-content .user-list-more .btn-link:hover,.user-list-more .build-header .header-content .btn-link:hover{color:#1b69b6;text-decoration:none}.build-header code{color:#e83e8c}.build-header .avatar{float:none;margin-right:2px;margin-left:2px}.right-sidebar.build-sidebar{padding:0}.right-sidebar.build-sidebar.right-sidebar-collapsed{display:none}.right-sidebar.build-sidebar .sidebar-container{width:calc(100% + 100px);padding-right:100px;height:100%;overflow-y:scroll;overflow-x:hidden;-webkit-overflow-scrolling:touch}.right-sidebar.build-sidebar .blocks-container{padding:0 16px;width:289px}.right-sidebar.build-sidebar .block{width:100%}.right-sidebar.build-sidebar .block:last-child{border-bottom:1px solid #e8e8e8}.right-sidebar.build-sidebar .block.coverage{padding:0 16px 11px}.right-sidebar.build-sidebar .block-last{padding:16px 0}.right-sidebar.build-sidebar .trigger-build-variables{margin:0;overflow-x:auto;-ms-overflow-style:scrollbar;-webkit-overflow-scrolling:touch}.right-sidebar.build-sidebar .trigger-build-variable{font-weight:400;color:#e83e8c}.right-sidebar.build-sidebar .trigger-build-value{padding:2px 4px;color:#000;background-color:#fff}.right-sidebar.build-sidebar .badge.badge-pill,.right-sidebar.build-sidebar .shortcut-mappings .key,.shortcut-mappings .right-sidebar.build-sidebar .key{margin-left:2px}.right-sidebar.build-sidebar .retry-link{display:none}.right-sidebar.build-sidebar .retry-link .btn-inverted-secondary{color:#1f78d1}.right-sidebar.build-sidebar .retry-link .btn-inverted-secondary:hover{color:#fff}@media (max-width: 767.98px){.right-sidebar.build-sidebar .retry-link{display:block}.right-sidebar.build-sidebar .retry-link .btn i{margin-left:5px}}.right-sidebar.build-sidebar .stage-item{cursor:pointer}.right-sidebar.build-sidebar .stage-item:hover{color:#2e2e2e}.right-sidebar.build-sidebar .build-dropdown{margin:16px 0;padding:0}.right-sidebar.build-sidebar .build-dropdown .dropdown-menu-toggle{margin-top:8px}.right-sidebar.build-sidebar .build-dropdown svg{position:relative;top:3px;margin-right:3px;width:14px;height:14px}.right-sidebar.build-sidebar .builds-container{background-color:#fff;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5;max-height:300px;width:289px;overflow:auto}.right-sidebar.build-sidebar .builds-container svg{position:relative;top:3px;margin-right:3px;height:14px;width:14px}.right-sidebar.build-sidebar .builds-container a{display:block;padding:16px 10px 16px 40px;width:270px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.right-sidebar.build-sidebar .builds-container a:hover,.right-sidebar.build-sidebar .builds-container .participants-more .btn-link:hover,.participants-more .right-sidebar.build-sidebar .builds-container .btn-link:hover,.right-sidebar.build-sidebar .builds-container .user-list-more .btn-link:hover,.user-list-more .right-sidebar.build-sidebar .builds-container .btn-link:hover{color:#2e2e2e}.right-sidebar.build-sidebar .builds-container .build-job{position:relative}.right-sidebar.build-sidebar .builds-container .build-job .icon-arrow-right{position:absolute;left:15px;top:20px;display:none}.right-sidebar.build-sidebar .builds-container .build-job.active{font-weight:600}.right-sidebar.build-sidebar .builds-container .build-job.active .icon-arrow-right{display:block}.right-sidebar.build-sidebar .builds-container .build-job.retried{background-color:#fdfdfd}.right-sidebar.build-sidebar .builds-container .build-job:hover{background-color:#eee}.right-sidebar.build-sidebar .builds-container .build-job .icon-retry{margin-left:3px}.right-sidebar.build-sidebar .link-commit{color:#1b69b6}.build-sidebar .container-fluid.container-limited{max-width:100%}.build-sidebar .content-wrapper{padding-bottom:6px}.build-detail-row{margin-bottom:5px}.build-detail-row:last-of-type{margin-bottom:0}.build-light-text{color:#707070;word-wrap:break-word}.build-gutter-toggle{position:absolute;top:50%;right:0;margin-top:-17px}.ci-body .project-title{margin:0;color:#444;font-size:20px;line-height:1.5}.ci-body .builds .light,.ci-body .builds .description-block,.ci-body .projects-table .light,.ci-body .projects-table .description-block{border-color:#e5e5e5}.ci-body .builds th,.ci-body .builds td,.ci-body .projects-table th,.ci-body .projects-table td{padding:10px 16px}.ci-body .builds td,.ci-body .projects-table td{color:#2e2e2e;vertical-align:middle !important}.ci-body .builds td a,.ci-body .projects-table td a{font-weight:400;text-decoration:none}.ci-body .commit-info .attr-name{margin-right:5px}.ci-body .commit-info pre.commit-message{background:none;padding:0;border:0;margin:20px 0;border-radius:0}.ci-body .loading{font-size:20px}.ci-body .ci-charts fieldset{margin-bottom:16px}.edit-cluster-form .clipboard-addon{background-color:#fff}.cluster-applications-table{min-height:628px}.clusters-dropdown-menu{max-width:100%}.clusters-error-alert{width:100%}.clusters-container .nav-bar-right{padding:10px 16px}.clusters-container .empty-state .svg-content img{width:145px}.clusters-container .top-area .nav-controls>.btn.btn-add-cluster,.clusters-container .wiki-page-header .nav-controls>.btn.btn-add-cluster{margin-right:0}.gcp-signup-offer{background-color:#f6fafe;border:1px solid #73afea;border-radius:4px}.gcp-signup-offer.alert,.flash-container .gcp-signup-offer.flash-notice,.flash-container .gcp-signup-offer.flash-warning,.flash-container .gcp-signup-offer.flash-alert,.flash-container .gcp-signup-offer.flash-success{padding:24px 16px}.gcp-signup-offer.alert-dismissable{padding-right:32px}.gcp-signup-offer.alert-dismissable .close{top:-8px;right:-16px;color:#1f78d1;opacity:1}.gcp-signup-offer .gcp-logo{margin-bottom:16px;text-align:center}.gcp-signup-offer img{max-width:125px}.gcp-signup-offer a:not(.btn){color:#1b69b6;font-weight:normal;text-decoration:none}@media (min-width: 576px){.gcp-signup-offer>div{display:flex;align-items:center}.gcp-signup-offer .gcp-logo{margin:0}}.commit-description{background:none;border:0;padding:0;word-break:normal;white-space:pre-wrap}.js-details-expand:hover{text-decoration:none}.commit-box{border-top:1px solid #e5e5e5;padding:16px 0}.commit-box .commit-title{margin:0;color:#2e2e2e}@media (max-width: 767.98px){.commit-hash-full{width:80px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:bottom}}.pipeline-info .status-icon-container{display:inline-block;vertical-align:middle;margin-right:3px}.pipeline-info .status-icon-container svg{display:block;width:22px;height:22px}.pipeline-info .mr-widget-pipeline-graph{display:inline-block;vertical-align:middle}.pipeline-info .mr-widget-pipeline-graph .stage-cell .stage-container{margin:3px 3px 3px 0}.pipeline-info .mr-widget-pipeline-graph .stage-container:last-child{margin-right:0}.pipeline-info .mr-widget-pipeline-graph .dropdown-menu{margin-top:11px}.branch-info .commit-icon{margin-right:8px}.branch-info .commit-icon svg{top:3px}.commit-message-container{background-color:#fff;position:relative;font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;overflow:hidden}.commit-message-container .max-width-marker{width:72ch;color:transparent;font-family:inherit;left:12px;height:100%;border-right:1px solid #f2f2f2;position:absolute;z-index:1}.commit-message-container textarea{background-color:transparent;font-family:inherit;padding-left:12px;position:relative;z-index:2}.commits-compare-switch{float:left;margin-right:9px}.commit-header{padding:5px 10px;background-color:#fafafa;border-bottom:1px solid #eee;border-top:1px solid #eee;font-size:14px}.commit-header:first-child{border-top-width:0}.commit-row-title .notes_count{float:right;margin-right:10px}.commit-row-title .str-truncated{max-width:70%}.commit-row-title .commit-row-message{color:#2e2e2e}.text-expander{display:inline-flex;background:#fff;color:#707070;padding:1px 4px;cursor:pointer;border:1px solid #e3e3e3;border-radius:4px;margin-left:5px;font-size:12px;line-height:14px;outline:none}.text-expander.open{background-color:#e1e1e1;box-shadow:inset 0 0 2px rgba(0,0,0,0.2)}.text-expander:hover{background-color:#e1e1e1;text-decoration:none}.commit.flex-list{display:flex}.avatar-cell{width:46px}.avatar-cell img{margin-right:0}.commit-detail{display:flex;justify-content:space-between;align-items:start;flex-grow:1}.commit-content{padding-right:10px;white-space:normal}.commit-content .commit-title{display:flex;align-items:center}@media (min-width: 576px){.commit-actions .fa-spinner{font-size:12px}}.commit-actions .ci-status-link{display:inline-flex}.commit-actions .ci-status-icon svg{vertical-align:text-bottom}.commit-actions>.ci-status-link,.commit-actions>.btn,.commit-actions>.commit-sha-group{margin-left:8px}.commit-sha-group{display:inline-flex}.commit-sha-group .label,.commit-sha-group .btn{padding:6px 10px;border:1px #e5e5e5 solid;font-size:14px;line-height:1.5;border-radius:0;display:flex;align-items:center}.commit-sha-group .label-monospace{user-select:text;color:#2e2e2e;background-color:#fafafa}.commit-sha-group .btn svg{top:auto;fill:#707070}.commit-sha-group .fa-clipboard{color:#707070}.commit-sha-group :first-child{border-bottom-left-radius:4px;border-top-left-radius:4px}.commit-sha-group :not(:first-child){border-left:0}.commit-sha-group :last-child{border-bottom-right-radius:4px;border-top-right-radius:4px}.commit a,.commit button,.generic_commit_status a,.generic_commit_status button{vertical-align:baseline}.commit a,.generic_commit_status a{color:#2e2e2e}.commit a.autodevops-badge,.generic_commit_status a.autodevops-badge{color:#fff}.commit a.autodevops-link,.generic_commit_status a.autodevops-link{color:#1b69b6}.commit .commit-row-description,.generic_commit_status .commit-row-description{font-size:14px;padding:0 0 0 8px;border:0;display:none;white-space:pre-wrap;word-break:normal;color:#707070;background:none;font-family:inherit;border-left:2px solid #cccccc;border-radius:unset}.commit .commit-row-description a,.generic_commit_status .commit-row-description a{color:#2e2e2e}.commit.inline-commit .commit-row-title,.generic_commit_status.inline-commit .commit-row-title{font-size:13px}.commit.inline-commit .committed_ago,.generic_commit_status.inline-commit .committed_ago{float:right}.branch-commit{color:#2e2e2e}.branch-commit .commit-icon{text-align:center;display:inline-block}.branch-commit .commit-icon svg{height:14px;width:14px;vertical-align:middle;fill:#707070}.branch-commit .commit-sha,.branch-commit .gfm-commit,.branch-commit .gfm-commit_range{color:#1b69b6}.branch-commit .commit-row-message{color:#2e2e2e}.gpg-status-box{padding:2px 10px}.gpg-status-box:empty{display:none}.gpg-status-box.valid{color:#1aaa55;border-color:#1aaa55}.gpg-status-box.valid:not(span):hover{background-color:#dcf5e7;color:#12753a;border-color:#12753a}.gpg-status-box.invalid{color:#6c757d;border-color:#6c757d;border-color:#c4c4c4}.gpg-status-box.invalid:not(span):hover{background-color:#e1e1e1;color:#c4c4c4;border-color:#c4c4c4}.gpg-status-box.invalid:not(span):hover{color:#6c757d}.gpg-popover-status{display:flex;align-items:center;font-weight:400;line-height:1.5}.gpg-popover-icon{margin-right:10px}.gpg-popover-icon.valid svg{border:1px solid #1aaa55;fill:#1aaa55}.gpg-popover-icon.invalid svg{border:1px solid #c4c4c4;fill:#c4c4c4}.gpg-popover-icon svg{width:32px;height:32px;border-radius:50%;vertical-align:middle}.gpg-popover-user-link{display:flex;align-items:center;margin-bottom:8px;text-decoration:none;color:#2e2e2e}.commit .gpg-popover-help-link{display:block;color:#007bff}.container-image{border-bottom:1px solid #f0f0f0}.container-image-head{padding:0 16px;line-height:4em}.container-image-head .btn-link{padding:0}.container-image-head .btn-link:focus{outline:none}.table.tags,.file-holder table.tags,.wiki table.tags,.md table.tags,ul.notes>li .note-body .note-text table.tags{margin-bottom:0}.convdev-empty svg{margin:64px auto 32px;max-width:420px}.convdev-header{margin-top:16px;margin-bottom:16px;padding:0 4px;display:flex;align-items:center}.convdev-header .convdev-header-title{font-size:48px;line-height:1;margin:0}.convdev-header .convdev-header-subtitle{font-size:22px;line-height:1;color:#707070;margin-left:8px;font-weight:400}.convdev-header .convdev-header-subtitle a{font-size:18px;color:#707070}.convdev-header .convdev-header-subtitle a:hover,.convdev-header .convdev-header-subtitle .participants-more .btn-link:hover,.participants-more .convdev-header .convdev-header-subtitle .btn-link:hover,.convdev-header .convdev-header-subtitle .user-list-more .btn-link:hover,.user-list-more .convdev-header .convdev-header-subtitle .btn-link:hover{color:#1f78d1}.convdev-cards{display:flex;justify-content:center;flex-wrap:wrap}.convdev-card-wrapper{display:flex;flex-direction:column;align-items:stretch;text-align:center;width:50%;border-color:#e5e5e5;margin:0 0 32px;padding:4px;position:relative;width:25%}@media (min-width: 576px){.convdev-card-wrapper{width:20%}}@media (min-width: 768px){.convdev-card-wrapper{width:16.6666666667%}}@media (min-width: 992px){.convdev-card-wrapper{width:10%}}.convdev-card{border:solid 1px #e5e5e5;border-radius:3px;border-top-width:3px;display:flex;flex-direction:column;flex-grow:1}.convdev-card-low{border-top-color:#e05842}.convdev-card-low .board-card-score-big{background-color:#fef6f5}.convdev-card-average{border-top-color:#fca121}.convdev-card-average .board-card-score-big{background-color:#fffaf4}.convdev-card-high{border-top-color:#37b96d}.convdev-card-high .board-card-score-big{background-color:#f1fdf6}.convdev-card-title{margin:16px auto auto;max-width:100px}.convdev-card-title h3{font-size:14px;margin:0 0 2px}.convdev-card-title .light-text{font-size:13px;line-height:1.25;color:#707070}.board-card-scores{display:flex;justify-content:space-around;align-items:center;margin:16px 10px;line-height:1}.board-card-score{color:#707070}.board-card-score .board-card-score-name{font-size:13px;margin-top:4px}.board-card-score-value{font-size:16px;color:#2e2e2e;font-weight:400}.board-card-score-big{border-top:2px solid #e5e5e5;border-bottom:1px solid #e5e5e5;font-size:22px;padding:10px 0;font-weight:400}.board-card-buttons{display:flex}.board-card-buttons>*{font-size:16px;color:#707070;padding:10px;flex-grow:1}.board-card-buttons>*:hover{background-color:#e5e5e5;color:#2e2e2e}.board-card-buttons>*+*{border-left:solid 1px #e5e5e5}.convdev-steps{margin-top:16px;height:1px;min-width:100%;justify-content:space-around;position:relative;background:#e5e5e5}.convdev-step{position:absolute;transform-origin:75% 50%;padding:8px;height:50px;width:50px;border-radius:3px;display:flex;flex-direction:column;align-items:center;border:solid 1px #e5e5e5;background:#fff;transform:translate(-50%, -50%);color:#707070;fill:#707070;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.convdev-step:nth-child(1){left:5%}.convdev-step:nth-child(2){left:10%}.convdev-step:nth-child(3){left:30%}.convdev-step:nth-child(4){left:42%}.convdev-step:nth-child(5){left:48%}.convdev-step:nth-child(6){left:55%}.convdev-step:nth-child(7){left:60%}.convdev-step:nth-child(8){left:70%}.convdev-step:nth-child(9){left:75%}.convdev-step:nth-child(10){left:90%}.convdev-step:hover{padding:8px 10px;fill:currentColor;z-index:100;height:auto;width:auto}.convdev-step:hover .convdev-step-title{max-height:2em;opacity:1;transition:opacity 0.2s}.convdev-step:hover svg{transform:scale(1.5);margin:10px}.convdev-step svg{transition:transform 0.1s;width:30px;height:30px;min-height:30px;min-width:30px}.convdev-step-title{max-height:0;opacity:0;text-transform:uppercase;margin:6px 0 0;text-align:center;font-size:12px}.convdev-high-score{color:#37b96d}.convdev-average-score{color:#fca121}.convdev-low-score{color:#e05842}#cycle-analytics{max-width:1000px;margin:24px auto 0;position:relative}#cycle-analytics .landing{margin-top:0}#cycle-analytics .landing .inner-content{white-space:normal}#cycle-analytics .landing .inner-content h4,#cycle-analytics .landing .inner-content p{margin:7px 0 0;max-width:480px;padding:0 16px}@media (max-width: 767.98px){#cycle-analytics .landing .inner-content h4,#cycle-analytics .landing .inner-content p{margin:0 auto}}#cycle-analytics .landing svg{width:136px;height:136px}#cycle-analytics .col-headers ul{margin:0;padding:0}#cycle-analytics .col-headers ul::after{display:block;clear:both;content:""}#cycle-analytics .col-headers li{display:inline-block;float:left;line-height:50px;width:20%}#cycle-analytics .col-headers .fa{color:#bfbfbf}#cycle-analytics .col-headers .fa:hover{color:#2e2e2e}#cycle-analytics .col-headers .stage-header{width:26%;padding-left:16px}#cycle-analytics .col-headers .median-header{width:14%}#cycle-analytics .col-headers .event-header{width:45%;padding-left:16px}#cycle-analytics .col-headers .total-time-header{width:15%;text-align:right;padding-right:16px}#cycle-analytics .col-headers .stage-name{font-weight:600}#cycle-analytics .card .content-block,#cycle-analytics .card-slim .content-block{padding:24px 0;border-bottom:0;position:relative}@media (max-width: 575.98px){#cycle-analytics .card .content-block,#cycle-analytics .card-slim .content-block{padding:6px 0 24px}}#cycle-analytics .card .column,#cycle-analytics .card-slim .column{text-align:center}@media (max-width: 575.98px){#cycle-analytics .card .column,#cycle-analytics .card-slim .column{padding:15px 0}}#cycle-analytics .card .column .header,#cycle-analytics .card-slim .column .header{font-size:30px;line-height:38px;font-weight:400;margin:0}#cycle-analytics .card .column .text,#cycle-analytics .card-slim .column .text{color:#7e7c7c;margin:0}@media (max-width: 575.98px){#cycle-analytics .card .column:last-child,#cycle-analytics .card-slim .column:last-child{text-align:center}}#cycle-analytics .js-ca-dropdown{top:10px}#cycle-analytics .fa-spinner{font-size:28px;position:relative;margin-left:-20px;left:50%;margin-top:36px}#cycle-analytics .stage-panel-body{display:flex;flex-wrap:wrap}#cycle-analytics .stage-nav,#cycle-analytics .stage-entries{display:flex;vertical-align:top;font-size:14px}#cycle-analytics .stage-nav{width:40%;margin-bottom:0}#cycle-analytics .stage-nav ul{padding:0;margin:0;width:100%}#cycle-analytics .stage-nav li{list-style-type:none}#cycle-analytics .stage-nav li::after{display:block;clear:both;content:""}#cycle-analytics .stage-nav .stage-nav-item{display:flex;line-height:65px;border-top:1px solid transparent;border-bottom:1px solid transparent;border-right:1px solid #e5e5e5;background-color:#fafafa}#cycle-analytics .stage-nav .stage-nav-item.active{background-color:transparent;border-right-color:transparent;border-top-color:#e5e5e5;border-bottom-color:#e5e5e5;box-shadow:inset 2px 0 0 0 #1f78d1}#cycle-analytics .stage-nav .stage-nav-item.active .stage-name{font-weight:600}#cycle-analytics .stage-nav .stage-nav-item:hover:not(.active){background-color:#fdfdfd;box-shadow:inset 2px 0 0 0 #e5e5e5;cursor:pointer}#cycle-analytics .stage-nav .stage-nav-item:first-child{border-top:0}#cycle-analytics .stage-nav .stage-nav-item:last-child{border-bottom:0}#cycle-analytics .stage-nav .stage-nav-item .stage-nav-item-cell.stage-median{margin-left:auto;margin-right:16px;min-width:calc(35% - 16px)}#cycle-analytics .stage-nav .stage-nav-item .stage-name{padding-left:16px}#cycle-analytics .stage-nav .stage-nav-item .stage-empty,#cycle-analytics .stage-nav .stage-nav-item .not-available{color:#707070}#cycle-analytics .stage-panel-container{width:100%;overflow:auto}#cycle-analytics .stage-panel{min-width:968px}#cycle-analytics .stage-panel .card-header{padding:0;background-color:transparent}#cycle-analytics .stage-panel .events-description{line-height:65px;padding:0 16px}#cycle-analytics .stage-panel .events-info{color:#707070}#cycle-analytics .stage-events{width:60%;overflow:scroll;height:467px}#cycle-analytics .stage-event-list{margin:0;padding:0}#cycle-analytics .stage-event-item{list-style-type:none;padding:0 0 16px;margin:0 16px 16px;border-bottom:1px solid #eee}#cycle-analytics .stage-event-item::after{display:block;clear:both;content:""}#cycle-analytics .stage-event-item:last-child{border-bottom:0;margin-bottom:0}#cycle-analytics .stage-event-item .item-details,#cycle-analytics .stage-event-item .item-time{float:left}#cycle-analytics .stage-event-item .item-details{width:75%}#cycle-analytics .stage-event-item .item-title{margin:0 0 2px}#cycle-analytics .stage-event-item .item-title.issue-title,#cycle-analytics .stage-event-item .item-title.commit-title,#cycle-analytics .stage-event-item .item-title.merge-merquest-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;display:block}#cycle-analytics .stage-event-item .item-title.issue-title a,#cycle-analytics .stage-event-item .item-title.commit-title a,#cycle-analytics .stage-event-item .item-title.merge-merquest-title a{color:#2e2e2e}#cycle-analytics .stage-event-item .item-time{width:25%;text-align:right}#cycle-analytics .stage-event-item .total-time{font-size:19px;color:#2e2e2e}#cycle-analytics .stage-event-item .total-time span{color:#2e2e2e;font-size:14px}#cycle-analytics .stage-event-item .issue-date,#cycle-analytics .stage-event-item .build-date{color:#2e2e2e}#cycle-analytics .stage-event-item .issue-link,#cycle-analytics .stage-event-item .commit-author-link,#cycle-analytics .stage-event-item .issue-author-link{color:#2e2e2e}#cycle-analytics .stage-event-item .item-conmmit-component .commit-icon svg{display:inline-block;width:20px;height:20px;vertical-align:bottom}#cycle-analytics .stage-event-item .merge-request-branch a{max-width:180px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:inline-block;vertical-align:bottom}#cycle-analytics .item-build-component .item-title .icon-build-status{float:left;margin-right:5px;position:relative;top:2px}#cycle-analytics .item-build-component .item-title .item-build-name{color:#2e2e2e}#cycle-analytics .item-build-component .item-title .pipeline-id{color:#2e2e2e;padding:0 3px 0 0}#cycle-analytics .item-build-component .item-title .ref-name,#cycle-analytics .item-build-component .item-title .git-revision-dropdown .dropdown-content ul li a,.git-revision-dropdown .dropdown-content ul li #cycle-analytics .item-build-component .item-title a,#cycle-analytics .item-build-component .item-title .mr-state-widget .label-branch,.mr-state-widget #cycle-analytics .item-build-component .item-title .label-branch{color:#000;display:inline-block;max-width:180px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;line-height:1.3;vertical-align:top}#cycle-analytics .item-build-component .item-title .commit-sha,#cycle-analytics .item-build-component .item-title .gfm-commit,#cycle-analytics .item-build-component .item-title .gfm-commit_range{color:#1b69b6;line-height:1.3;vertical-align:top;font-weight:400}#cycle-analytics .item-build-component .item-title .fa{color:#707070;font-size:90%}#cycle-analytics .empty-stage,#cycle-analytics .no-access-stage{text-align:center;width:75%;margin:0 auto;padding-top:130px;color:#707070}#cycle-analytics .empty-stage h4,#cycle-analytics .no-access-stage h4{color:#2e2e2e}#cycle-analytics .empty-stage .icon-no-data{height:36px;width:78px;display:inline-block;margin-bottom:20px}#cycle-analytics .no-access-stage .icon-lock{height:36px;width:78px;display:inline-block;margin-bottom:20px}.cycle-analytics-overview{padding-top:100px}.cycle-analytics-overview .overview-details{display:flex;align-items:center}.cycle-analytics-overview .overview-image{text-align:right}.cycle-analytics-overview .overview-icon svg{width:365px;height:227px}.deploy-keys-list{width:100%;overflow:auto}.deploy-keys-list table{border:1px solid #dee2e6}.deploy-keys-title{padding-bottom:2px;line-height:2}.detail-page-header{padding:10px 0;border-bottom:1px solid #e5e5e5;color:#2e2e2e;line-height:34px;display:flex}.detail-page-header a{color:#2e2e2e}.detail-page-header .issue_created_ago,.detail-page-header .author_link{white-space:nowrap}@media (max-width: 575.98px){.detail-page-header{display:block}}.detail-page-header-body{position:relative;line-height:35px;display:flex;flex:1 1;min-width:0}@media (min-width: 576px){.detail-page-header-body{padding-left:0;padding-right:0}}.detail-page-header-actions{align-self:center;flex-shrink:0;flex:0 0 auto}@media (max-width: 575.98px){.detail-page-header-actions{width:100%;margin-top:10px}.detail-page-header-actions>.issue-btn-group>.btn{width:100%}}.detail-page-description .title{margin:0 0 16px;font-size:2em;color:#2e2e2e;padding:0 0 0.3em;border-bottom:1px solid #eaeaea}.detail-page-description .description{margin-top:6px}.diff-file{margin-bottom:16px}.diff-file .file-title,.diff-file .file-title-flex-parent{cursor:pointer}.diff-file .file-title a:hover,.diff-file .file-title .participants-more .btn-link:hover,.participants-more .diff-file .file-title .btn-link:hover,.diff-file .file-title .user-list-more .btn-link:hover,.user-list-more .diff-file .file-title .btn-link:hover,.diff-file .file-title-flex-parent a:hover,.diff-file .file-title-flex-parent .participants-more .btn-link:hover,.participants-more .diff-file .file-title-flex-parent .btn-link:hover,.diff-file .file-title-flex-parent .user-list-more .btn-link:hover,.user-list-more .diff-file .file-title-flex-parent .btn-link:hover{text-decoration:none}.diff-file .file-title:hover,.diff-file .file-title-flex-parent:hover{background-color:#f5f5f5}.diff-file .file-title svg,.diff-file .file-title-flex-parent svg{vertical-align:middle}.diff-file .diff-content{background:#fff;color:#2e2e2e;border-radius:0 0 3px 3px}.diff-file .diff-content .code{padding:0}.diff-file .diff-content .unfold{cursor:pointer}.diff-file .diff-content .file-mode-changed{padding:10px;color:#777}.diff-file .diff-content .suppressed-container{padding:11px 16px;text-align:center}.diff-file .diff-content .suppressed-container .show-suppressed-diff{font-size:110%;font-weight:600}.diff-file .diff-content .note-text table{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"}.diff-file .diff-content table{width:100%;font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;border:0;border-collapse:separate;margin:0;padding:0;table-layout:fixed}.diff-file .diff-content table .diff-line-num{width:50px;position:relative}.diff-file .diff-content table .diff-line-num a{transition:none}.diff-file .diff-content table .line_holder td{line-height:1.6;font-size:90%}.diff-file .diff-content table .line_holder td.noteable_line{position:relative}.diff-file .diff-content table .line_holder td span{white-space:pre-wrap}.diff-file .diff-content table .line_holder td span.context-cell{display:inline-block;width:100%;height:100%}.diff-file .diff-content table .line_holder td .line{word-wrap:break-word}.diff-file .diff-content table.left-side-selected td.line_content.parallel.right-side{user-select:none}.diff-file .diff-content table.right-side-selected td.line_content.parallel.left-side{user-select:none}.diff-file .diff-content tr.line_holder.parallel td.line_content.parallel{width:46%}.diff-file .diff-content tr.line_holder.parallel .add-diff-note{margin-left:-55px}.diff-file .diff-content .old_line,.diff-file .diff-content .new_line{user-select:none;margin:0;border:0;padding:0 5px;border-right:1px solid;text-align:right;min-width:35px;max-width:50px;width:35px}.diff-file .diff-content .old_line a,.diff-file .diff-content .new_line a{float:left;width:35px;font-weight:400}.diff-file .diff-content .old_line a[disabled],.diff-file .diff-content .new_line a[disabled]{cursor:default}.diff-file .diff-content .old_line a[disabled]:hover,.diff-file .diff-content .old_line .participants-more [disabled].btn-link:hover,.participants-more .diff-file .diff-content .old_line [disabled].btn-link:hover,.diff-file .diff-content .old_line .user-list-more [disabled].btn-link:hover,.user-list-more .diff-file .diff-content .old_line [disabled].btn-link:hover,.diff-file .diff-content .old_line a[disabled]:active,.diff-file .diff-content .new_line a[disabled]:hover,.diff-file .diff-content .new_line .participants-more [disabled].btn-link:hover,.participants-more .diff-file .diff-content .new_line [disabled].btn-link:hover,.diff-file .diff-content .new_line .user-list-more [disabled].btn-link:hover,.user-list-more .diff-file .diff-content .new_line [disabled].btn-link:hover,.diff-file .diff-content .new_line a[disabled]:active{text-decoration:none}.diff-file .diff-content .line_content{display:block;margin:0;padding:0 1.5em;border:0;position:relative}.diff-file .diff-content .line_content.parallel{display:table-cell}.diff-file .diff-content .line_content.parallel span{word-break:break-all}.diff-file .diff-content .line_content.old::before{content:'-';position:absolute;left:0.5em}.diff-file .diff-content .line_content.new::before{content:'+';position:absolute;left:0.5em}.diff-file .diff-content .diff-loading-error-block{padding:32px 16px;text-align:center}.diff-file .image{background:#eee;text-align:center;padding:30px}.diff-file .image .wrap{display:inline-block}.diff-file .image .frame{display:inline-block;background-color:#fff;line-height:0}.diff-file .image .frame img{border:1px solid #fff;background-image:linear-gradient(45deg, #e5e5e5 25%, transparent 25%, transparent 75%, #e5e5e5 75%, #e5e5e5 100%),linear-gradient(45deg, #e5e5e5 25%, transparent 25%, transparent 75%, #e5e5e5 75%, #e5e5e5 100%);background-size:10px 10px;background-position:0 0, 5px 5px;max-width:100%}.diff-file .image .frame.deleted{border:1px solid #f77}.diff-file .image .frame.added{border:1px solid #63c363}.diff-file .image .image-info{font-size:12px;margin:5px 0 0;color:grey}.diff-file .image .view.swipe{position:relative}.diff-file .image .view.swipe .swipe-frame{display:block;margin:auto;position:relative}.diff-file .image .view.swipe .swipe-wrap{overflow:hidden;border-left:1px solid #999;position:absolute;display:block;top:13px;right:7px}.diff-file .image .view.swipe .frame{top:0;right:0;position:absolute}.diff-file .image .view.swipe .frame.deleted{margin:0;display:block;top:13px;right:7px}.diff-file .image .view.swipe .swipe-bar{display:block;height:100%;width:15px;z-index:100;position:absolute;cursor:pointer}.diff-file .image .view.swipe .swipe-bar:hover .top-handle{background-position:-15px 3px}.diff-file .image .view.swipe .swipe-bar:hover .bottom-handle{background-position:-15px -11px}.diff-file .image .view.swipe .swipe-bar .top-handle{display:block;height:14px;width:15px;position:absolute;top:0;background:url(./swipemode_sprites-522fecbb380f3edfa9b09006e88a51fbcb5c26d95dba87d2e09a363a863cd4e4.gif) 0 3px no-repeat}.diff-file .image .view.swipe .swipe-bar .bottom-handle{display:block;height:14px;width:15px;position:absolute;bottom:0;background:url(./swipemode_sprites-522fecbb380f3edfa9b09006e88a51fbcb5c26d95dba87d2e09a363a863cd4e4.gif) 0 -11px no-repeat}.diff-file .image .view.onion-skin .onion-skin-frame{display:block;margin:auto;position:relative}.diff-file .image .view.onion-skin .frame.added,.diff-file .image .view.onion-skin .frame.deleted{position:absolute;display:block;top:0;left:0}.diff-file .image .view.onion-skin .controls{display:block;height:14px;width:300px;z-index:100;position:absolute;bottom:0;left:50%;margin-left:-150px}.diff-file .image .view.onion-skin .controls .drag-track{display:block;position:absolute;top:0;left:12px;height:10px;width:276px;background:url(./onion_skin_sprites-5c13bf92d3d6bdf19bba75b00fee5b492a43bec51bf78a01ba158b0ad099a48b.gif) -4px -20px repeat-x}.diff-file .image .view.onion-skin .controls .dragger{display:block;position:absolute;left:0;top:0;height:14px;width:14px;background:url(./onion_skin_sprites-5c13bf92d3d6bdf19bba75b00fee5b492a43bec51bf78a01ba158b0ad099a48b.gif) 0 -34px repeat-x;cursor:pointer}.diff-file .image .view.onion-skin .controls .transparent{display:block;position:absolute;top:2px;right:0;height:10px;width:10px;background:url(./onion_skin_sprites-5c13bf92d3d6bdf19bba75b00fee5b492a43bec51bf78a01ba158b0ad099a48b.gif) -2px 0 no-repeat}.diff-file .image .view.onion-skin .controls .opaque{display:block;position:absolute;top:2px;left:0;height:10px;width:10px;background:url(./onion_skin_sprites-5c13bf92d3d6bdf19bba75b00fee5b492a43bec51bf78a01ba158b0ad099a48b.gif) -2px -10px no-repeat}.diff-file .view-modes{padding:10px;text-align:center;background:#eee}.diff-file .view-modes ul,.diff-file .view-modes li{list-style:none;margin:0;padding:0;display:inline-block}.diff-file .view-modes li{color:grey;border-left:1px solid #c1c1c1;padding:0 12px 0 16px;cursor:pointer}.diff-file .view-modes li:first-child{border-left:0}.diff-file .view-modes li:hover{text-decoration:underline}.diff-file .view-modes li.active{cursor:default;color:#2e2e2e}.diff-file .view-modes li.active:hover{text-decoration:none}.diff-file .view-modes li.disabled{display:none}.diff-file .line_content{white-space:pre-wrap}.diff-file .diff-file-container .frame.deleted{border:0;background-color:inherit}.diff-file .diff-file-container .frame.deleted .image_file img{border:1px solid #f77}.diff-file .diff-file-container .frame.added{border:0;background-color:inherit}.diff-file .diff-file-container .frame.added .image_file img{border:1px solid #63c363}.diff-file .diff-file-container .swipe.view .swipe-wrap,.diff-file .diff-file-container .onion-skin.view .swipe-wrap{top:0;right:0}.diff-file .diff-file-container .swipe.view .frame.deleted,.diff-file .diff-file-container .onion-skin.view .frame.deleted{top:0;right:0}.diff-file .diff-file-container .swipe.view .swipe-bar,.diff-file .diff-file-container .onion-skin.view .swipe-bar{top:0}.diff-file .diff-file-container .swipe.view .swipe-bar .top-handle,.diff-file .diff-file-container .onion-skin.view .swipe-bar .top-handle{top:-14px;left:-7px}.diff-file .diff-file-container .swipe.view .swipe-bar .bottom-handle,.diff-file .diff-file-container .onion-skin.view .swipe-bar .bottom-handle{bottom:-14px;left:-7px}.diff-file .diff-file-container .swipe.view .file-container,.diff-file .diff-file-container .onion-skin.view .file-container{display:inline-block}.diff-file .diff-file-container .swipe.view .file-container .file-content,.diff-file .diff-file-container .onion-skin.view .file-container .file-content{padding:0}.diff-file .diff-file-container .swipe.view .file-container .file-content img,.diff-file .diff-file-container .onion-skin.view .file-container .file-content img{max-width:none}.diff-file .diff-file-container .onion-skin.view .controls{bottom:-25px}.file-content .diff-file{margin:0;border:0}.diff-wrap-lines .line_content{white-space:pre-wrap}.inline-parallel-buttons{float:right}.files-changed{border-bottom:0}.merge-request-details .file-content.image_file img{max-height:50vh}.diff-stats-summary-toggler{padding:0;background-color:transparent;border:0;color:#1b69b6;font-weight:600}.diff-stats-summary-toggler:hover,.diff-stats-summary-toggler:focus{outline:none;color:#134a81}.diff-stats-summary-toggler .caret-icon{position:relative;top:2px;left:-1px}@media (max-width: 480px){.diff-title{margin:0}.diff-title .file-mode{display:none}.diff-controls{position:static;text-align:center}}@media (min-width: 481px){.diff-title{margin-right:200px}.diff-title .file-mode{margin-left:10px}.diff-controls{float:right;position:absolute;top:5px;right:15px}}.files{margin-top:1px}.files .diff-file:last-child{margin-bottom:0}.file-holder .diff-line-num:not(.js-unfold-bottom) a::before{content:attr(data-linenumber)}.diff-comment-avatar-holders{position:absolute;height:19px;width:19px;margin-left:-15px;z-index:100}.diff-comment-avatar-holders:hover .diff-comment-avatar:nth-child(1),.diff-comment-avatar-holders:hover .diff-comments-more-count:nth-child(1){transform:translateX(0px)}.diff-comment-avatar-holders:hover .diff-comment-avatar:nth-child(1):hover,.diff-comment-avatar-holders:hover .diff-comments-more-count:nth-child(1):hover{transform:translateX(0px)}.diff-comment-avatar-holders:hover .diff-comment-avatar:nth-child(2),.diff-comment-avatar-holders:hover .diff-comments-more-count:nth-child(2){transform:translateX(14px)}.diff-comment-avatar-holders:hover .diff-comment-avatar:nth-child(2):hover,.diff-comment-avatar-holders:hover .diff-comments-more-count:nth-child(2):hover{transform:translateX(14px)}.diff-comment-avatar-holders:hover .diff-comment-avatar:nth-child(3),.diff-comment-avatar-holders:hover .diff-comments-more-count:nth-child(3){transform:translateX(28px)}.diff-comment-avatar-holders:hover .diff-comment-avatar:nth-child(3):hover,.diff-comment-avatar-holders:hover .diff-comments-more-count:nth-child(3):hover{transform:translateX(28px)}.diff-comment-avatar-holders:hover .diff-comment-avatar:nth-child(4),.diff-comment-avatar-holders:hover .diff-comments-more-count:nth-child(4){transform:translateX(43.5px)}.diff-comment-avatar-holders:hover .diff-comment-avatar:nth-child(4):hover,.diff-comment-avatar-holders:hover .diff-comments-more-count:nth-child(4):hover{transform:translateX(43.5px)}.diff-comment-avatar-holders:hover .diff-comments-more-count{padding-left:2px;padding-right:2px;width:auto}.diff-comment-avatar,.diff-comments-more-count{position:absolute;left:0;width:19px;height:19px;margin-right:0;border-color:#fff;cursor:pointer;transition:all 0.1s ease-out}.diff-comment-avatar:nth-child(1),.diff-comments-more-count:nth-child(1){z-index:3}.diff-comment-avatar:nth-child(2),.diff-comments-more-count:nth-child(2){z-index:2}.diff-comment-avatar:nth-child(3),.diff-comments-more-count:nth-child(3){z-index:1}.diff-comment-avatar:nth-child(4),.diff-comments-more-count:nth-child(4){z-index:0}.diff-comments-more-count{width:19px;min-width:19px;padding-left:0;padding-right:0;overflow:hidden}.diff-notes-collapse{width:24px;height:24px;border-radius:50%;padding:0;transition:transform 0.1s ease-out;z-index:100}.diff-notes-collapse .collapse-icon{height:50%;width:100%}.diff-notes-collapse svg{vertical-align:middle}.diff-notes-collapse .collapse-icon,.diff-notes-collapse path{fill:#fff}.diff-notes-collapse:focus{outline:0}.diff-files-changed .inline-parallel-buttons{position:relative;z-index:1}@media (min-width: 576px){.diff-files-changed .commit-stat-summary{margin-left:-16px;padding-left:16px;background-color:#fff}}@media (min-width: 576px){.diff-files-changed{top:24px;background-color:#fff}.diff-files-changed.diff-files-changed-merge-request{position:sticky;top:90px;z-index:200;margin:16px 0;padding:0}.diff-files-changed.is-stuck{padding-top:0;padding-bottom:0;border-top:1px solid #eaeaea;border-bottom:1px solid #eaeaea}.diff-files-changed.is-stuck .diff-stats-additions-deletions-expanded,.diff-files-changed.is-stuck .inline-parallel-buttons{display:none !important}}@media (min-width: 992px){.diff-files-changed.is-stuck .diff-stats-additions-deletions-collapsed{display:block !important}}@media (min-width: 576px){.with-performance-bar .diff-files-changed.diff-files-changed-merge-request{top:111px}}.diff-file-changes{max-width:560px;width:100%;z-index:150;min-height:40px;max-height:312px;overflow-y:auto;margin-bottom:0}@media (min-width: 576px){.diff-file-changes{left:16px}}.diff-file-changes .diff-changed-file{display:flex;padding-top:8px;padding-bottom:8px;min-width:0}.diff-file-changes .diff-file-changed-icon{margin-top:2px}.diff-file-changes .diff-changed-file-content{display:flex;flex-direction:column;min-width:0}.diff-file-changes .diff-changed-file-name,.diff-file-changes .diff-changed-blank-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.diff-file-changes .diff-changed-blank-file-name{color:#919191;font-style:italic}.diff-file-changes .diff-changed-file-path{color:#919191}.diff-file-changes .diff-changed-stats{margin-left:auto;white-space:nowrap}.diff-file-changes-path{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.note-container{background-color:#fafafa;border-top:1px solid #f0f0f0}.note-container .discussion-notes+.discussion-notes::before,.note-container .discussion-notes+.discussion-form::before{content:'';position:relative;display:block;width:100%;height:10px;background-color:#fff;background-image:linear-gradient(45deg, transparent, transparent 73%, #dcdcdc 75%, #fff 80%),linear-gradient(225deg, transparent, transparent 73%, #dcdcdc 75%, #fff 80%),linear-gradient(135deg, transparent, transparent 73%, #dcdcdc 75%, #fff 80%),linear-gradient(-45deg, transparent, transparent 73%, #dcdcdc 75%, #fff 80%);background-position:5px 5px, 0 5px, 0 5px, 5px 5px;background-size:10px 10px;background-repeat:repeat}.note-container .notes{position:relative}.note-container .diff-notes-collapse{position:absolute;left:-12px}.diff-file .note-container>.new-note,.note-container .discussion-notes{margin-left:100px;border-left:1px solid #f0f0f0}.notes.active .diff-file .note-container>.new-note,.notes.active .note-container .discussion-notes{margin-left:inherit;border-left:inherit}.files:not([data-can-create-note]) .frame{cursor:auto}.frame.click-to-comment{position:relative;cursor:url(./illustrations/image_comment_light_cursor-edc3791b5c9f6694585af95d66f7b252be97436a13d32f9d427a5ca38848bd78.svg) 12 12,auto;cursor:-webkit-image-set(url(./illustrations/image_comment_light_cursor-edc3791b5c9f6694585af95d66f7b252be97436a13d32f9d427a5ca38848bd78.svg) 1x, url(./illustrations/image_comment_light_cursor@2x-10fa8bdc4b52588b90e1d94785978b0a6ae72c4c9278f61d1043d947f0e147f1.svg) 2x) 12 12,auto}.frame.click-to-comment .comment-indicator{position:absolute;padding:0;width:24px;height:24px;margin-top:-10px;margin-left:-11px}.frame.click-to-comment .comment-indicator svg{width:100%;height:100%}.frame.click-to-comment .comment-indicator:focus{outline:none}.frame .badge.badge-pill,.frame .shortcut-mappings .key,.shortcut-mappings .frame .key,.image-diff-avatar-link .badge.badge-pill,.image-diff-avatar-link .shortcut-mappings .key,.shortcut-mappings .image-diff-avatar-link .key,.notes>.badge.badge-pill,.shortcut-mappings .notes>.key{position:absolute;background-color:#2e87e0;color:#fff;border:#fff 1px solid;min-height:16px;padding:5px 8px;border-radius:12px}.frame .badge.badge-pill:focus,.frame .shortcut-mappings .key:focus,.shortcut-mappings .frame .key:focus,.image-diff-avatar-link .badge.badge-pill:focus,.image-diff-avatar-link .shortcut-mappings .key:focus,.shortcut-mappings .image-diff-avatar-link .key:focus,.notes>.badge.badge-pill:focus,.shortcut-mappings .notes>.key:focus{outline:none}.frame .badge.badge-pill,.frame .shortcut-mappings .key,.shortcut-mappings .frame .key,.frame .image-comment-badge{transform:translate(-50%, -50%)}.image-comment-badge{position:absolute;width:24px;height:24px;padding:0;background:none;border:0}.image-comment-badge>svg{width:100%;height:100%}.image-diff-avatar-link{position:relative}.image-diff-avatar-link .badge.badge-pill,.image-diff-avatar-link .shortcut-mappings .key,.shortcut-mappings .image-diff-avatar-link .key,.image-diff-avatar-link .image-comment-badge{top:25px;right:8px}.notes>.badge.badge-pill,.shortcut-mappings .notes>.key{display:none;left:-13px}.discussion-notes{min-height:35px}.discussion-notes:first-child{min-height:25px}.discussion-notes.collapsed{background-color:#fff}.discussion-notes.collapsed .diff-notes-collapse,.discussion-notes.collapsed .note,.discussion-notes.collapsed .discussion-reply-holder{display:none}.discussion-notes.collapsed .notes>.badge.badge-pill,.discussion-notes.collapsed .shortcut-mappings .notes>.key,.shortcut-mappings .discussion-notes.collapsed .notes>.key{display:block}.discussion-body .image .frame{position:relative}.file-editor .nav-links{border-top:1px solid #e5e5e5;border-right:1px solid #e5e5e5;border-left:1px solid #e5e5e5;border-bottom:0;border-radius:2px 2px 0 0;background:#f5f5f5}.file-editor #editor{border:0;border-radius:0;height:500px;margin:0;padding:0;position:relative;width:100%}.file-editor .ace_gutter-cell{background-color:#fafafa}.file-editor .cancel-btn{color:#c0341d}.file-editor .cancel-btn:hover{color:#c0341d}.file-editor .file-title{line-height:35px;padding-top:7px;padding-bottom:7px}.file-editor .file-title .float-right{height:20px}.file-editor .editor-ref{background:#fafafa;padding-right:16px;border-right:1px solid #e5e5e5;display:block;float:left;margin-right:10px}.file-editor .editor-file-name{float:left;margin-right:10px}.file-editor .new-file-name{display:inline-block;max-width:450px;float:left}@media (max-width: 991px){.file-editor .new-file-name{width:280px}}@media (max-width: 767px){.file-editor .new-file-name{width:180px}}.file-editor .file-buttons{font-size:0}.file-editor .select2{float:right}.file-editor .encoding-selector,.file-editor .soft-wrap-toggle{display:inline-block;vertical-align:top;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"}.file-editor .soft-wrap-toggle{margin:0 10px}.file-editor .soft-wrap-toggle .soft-wrap{display:block}.file-editor .soft-wrap-toggle .no-wrap{display:none}.file-editor .soft-wrap-toggle.soft-wrap-active .soft-wrap{display:none}.file-editor .soft-wrap-toggle.soft-wrap-active .no-wrap{display:block}@media (max-width: 575.98px){.file-editor .file-title .float-right{height:auto}.file-editor .new-file-name{max-width:none;width:100%;margin-bottom:3px}.file-editor .file-buttons{display:block;width:100%;margin-bottom:10px}.file-editor .file-buttons .soft-wrap-toggle{width:100%;margin:3px 0}.file-editor .file-buttons .encoding-selector{display:block;margin:3px 0}.file-editor .file-buttons .encoding-selector button{width:100%}}.blob-new-page-title,.blob-edit-page-title{margin:19px 0 21px;vertical-align:top;display:inline-block}@media (max-width: 767px){.blob-new-page-title,.blob-edit-page-title{display:block;margin:19px 0 12px}}.template-selectors-menu{display:inline-block;vertical-align:top;margin:14px 0 0 16px;padding:0 0 0 14px;border-left:1px solid #e5e5e5}@media (max-width: 767px){.template-selectors-menu{display:block;width:100%;margin:5px 0;padding:0;border-left:0}}.templates-selectors-label{display:inline-block;vertical-align:top;margin-top:6px;line-height:21px}@media (max-width: 767px){.templates-selectors-label{display:block;margin:5px 0}}.template-selector-dropdowns-wrap{display:inline-block;margin-left:8px;vertical-align:top;margin:5px 0 0 8px}@media (max-width: 767px){.template-selector-dropdowns-wrap{display:block;width:100%;margin:0 0 16px}}.template-selector-dropdowns-wrap .license-selector,.template-selector-dropdowns-wrap .gitignore-selector,.template-selector-dropdowns-wrap .gitlab-ci-yml-selector,.template-selector-dropdowns-wrap .dockerfile-selector,.template-selector-dropdowns-wrap .template-type-selector{display:inline-block;vertical-align:top;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";margin-top:-5px}@media (max-width: 767px){.template-selector-dropdowns-wrap .license-selector,.template-selector-dropdowns-wrap .gitignore-selector,.template-selector-dropdowns-wrap .gitlab-ci-yml-selector,.template-selector-dropdowns-wrap .dockerfile-selector,.template-selector-dropdowns-wrap .template-type-selector{display:block;width:100%;margin:5px 0}}.template-selector-dropdowns-wrap .license-selector .dropdown,.template-selector-dropdowns-wrap .gitignore-selector .dropdown,.template-selector-dropdowns-wrap .gitlab-ci-yml-selector .dropdown,.template-selector-dropdowns-wrap .dockerfile-selector .dropdown,.template-selector-dropdowns-wrap .template-type-selector .dropdown{line-height:21px}.template-selector-dropdowns-wrap .license-selector .dropdown-menu-toggle,.template-selector-dropdowns-wrap .gitignore-selector .dropdown-menu-toggle,.template-selector-dropdowns-wrap .gitlab-ci-yml-selector .dropdown-menu-toggle,.template-selector-dropdowns-wrap .dockerfile-selector .dropdown-menu-toggle,.template-selector-dropdowns-wrap .template-type-selector .dropdown-menu-toggle{width:250px;vertical-align:top}@media (max-width: 767px){.template-selector-dropdowns-wrap .license-selector .dropdown-menu-toggle,.template-selector-dropdowns-wrap .gitignore-selector .dropdown-menu-toggle,.template-selector-dropdowns-wrap .gitlab-ci-yml-selector .dropdown-menu-toggle,.template-selector-dropdowns-wrap .dockerfile-selector .dropdown-menu-toggle,.template-selector-dropdowns-wrap .template-type-selector .dropdown-menu-toggle{display:block;width:100%;margin:5px 0}}.template-selectors-undo-menu{display:inline-block;margin:7px 0 0 10px}@media (max-width: 767px){.template-selectors-undo-menu{display:block;width:100%;margin:20px 0}}.template-selectors-undo-menu button{margin:-4px 0 0 15px}@media (max-width: 991.98px){.deployments-container{width:100%;overflow:auto}}.environments-folder-name{font-weight:400;padding-top:20px}.environments-container .ci-table .deployment-column>span{word-break:break-all}.environments-container .ci-table .deployment-column .avatar{float:none}.environments-container .ci-table .btn-group>a{color:#707070}.environments-container .ci-table .btn-group svg path{fill:#707070}.environments-container .ci-table .btn-group .dropdown{outline:none}.environments-container .ci-table .btn .text-center{display:inline}.environments-container .ci-table .commit-title{margin:0}.environments-container .ci-table .icon-play{height:13px;width:12px}.environments-container .ci-table .external-url,.environments-container .ci-table .dropdown-new{color:#707070}.environments-container .ci-table .dropdown-menu .fa{margin-right:6px;color:#707070}.environments-container .ci-table .build-link,.environments-container .ci-table .ref-name,.environments-container .ci-table .git-revision-dropdown .dropdown-content ul li a,.git-revision-dropdown .dropdown-content ul li .environments-container .ci-table a,.environments-container .ci-table .mr-state-widget .label-branch,.mr-state-widget .environments-container .ci-table .label-branch{color:#2e2e2e}.environments-container .ci-table .stop-env-link,.environments-container .ci-table .external-url{color:#707070}.environments-container .ci-table .stop-env-link .stop-env-icon,.environments-container .ci-table .external-url .stop-env-icon{font-size:14px}.environments-container .ci-table .deployment .build-column .build-link{color:#2e2e2e}.environments-container .ci-table .deployment .build-column .avatar{float:none;margin-right:0}.environments-container .ci-table .folder-icon{margin-right:3px;color:#707070;display:inline-block}.environments-container .ci-table .folder-icon .fa:nth-child(1){margin-right:3px}.environments-container .ci-table .folder-name{cursor:pointer;color:#707070;display:inline-block}.environments-container .ci-table .icon-container{width:20px;text-align:center}.environments-container .ci-table .branch-commit .commit-sha,.environments-container .ci-table .branch-commit .gfm-commit,.environments-container .ci-table .branch-commit .gfm-commit_range{margin-right:0}.environments-container .ci-table .no-btn{border:0;background:none;outline:none;width:100%;text-align:left}.environments-container .ci-table .environment-child-row{padding-left:20px}.gl-responsive-table-row .branch-commit{max-width:100%}.folder-row{border-left:0;border-right:0}@media (min-width: 767px){.folder-row{border-top:0}}.x-axis path,.y-axis path,.label-x-axis-line,.label-y-axis-line{fill:none;stroke-width:1;shape-rendering:crispEdges}.x-axis path,.y-axis path{stroke:#aaa}.label-x-axis-line,.label-y-axis-line{stroke:#e5e5e5}.y-axis line{stroke:#aaa;stroke-width:1}.metric-area{opacity:0.25}.prometheus-graph-overlay{fill:none;opacity:0;pointer-events:all}.rect-text-metric{fill:#fff;stroke-width:1;stroke:#c4c4c4}.rect-axis-text{fill:#fff}.text-metric{font-size:12px}.selected-metric-line{stroke:#313236;stroke-width:1}.deployment-line{stroke:#000;stroke-width:1}.divider-line{stroke-width:1;stroke:#c4c4c4}.prometheus-state{max-width:460px;margin:10px auto;text-align:center}.prometheus-state .state-svg{max-width:80vw;margin:0 auto}.prometheus-state .state-button{padding:8px}.prometheus-graphs .environments .dropdown-menu-toggle svg{position:absolute;right:5%;top:25%}.prometheus-graphs .environments .dropdown-menu-toggle,.prometheus-graphs .environments .dropdown-menu{width:240px}.environments-actions .external-url,.environments-actions .monitoring-url,.environments-actions .terminal-button,.environments-actions .stop-env-link{width:38px}.prometheus-panel{margin-top:20px}.prometheus-graph-group{display:flex;flex-wrap:wrap;padding:8px}.prometheus-graph{flex:1 0 auto;min-width:450px;max-width:100%;padding:8px}.prometheus-graph h5{font-size:16px}@media (max-width: 767.98px){.prometheus-graph{min-width:100%}}.prometheus-graph-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.prometheus-graph-header h5{margin:0}.prometheus-graph-cursor{position:absolute;background:#919191;width:1px}.prometheus-graph-flag{display:block;min-width:160px}.prometheus-graph-flag h5{padding:0;margin:0;font-size:14px;line-height:1.2}.prometheus-graph-flag .deploy-meta-content{border-bottom:1px solid #eaeaea}.prometheus-graph-flag .deploy-meta-content svg{height:15px;vertical-align:bottom}.prometheus-graph-flag.popover{padding:0;border:1px solid #e5e5e5}.prometheus-graph-flag.popover.left{left:auto;right:0;margin-right:10px}.prometheus-graph-flag.popover.left>.arrow{right:-16px;border-left-color:#e5e5e5}.prometheus-graph-flag.popover.left>.arrow::after{border-left-color:#fafafa}.prometheus-graph-flag.popover.right{left:0;right:auto;margin-left:10px}.prometheus-graph-flag.popover.right>.arrow{left:-16px;border-right-color:#e5e5e5}.prometheus-graph-flag.popover.right>.arrow::after{border-right-color:#fafafa}.prometheus-graph-flag.popover>.arrow{top:16px;margin-top:-8px;border-width:8px}.prometheus-graph-flag.popover>.popover-title,.prometheus-graph-flag.popover>.popover-content{padding:8px;font-size:12px;white-space:nowrap}.prometheus-graph-flag.popover>.popover-title{background-color:#fafafa}.prometheus-graph-flag strong{font-weight:600}.prometheus-table{border-collapse:collapse;padding:0;margin:0}.prometheus-table td{vertical-align:middle}.prometheus-table td+td{padding-left:8px;vertical-align:top}.prometheus-table .legend-metric-title{font-size:12px;vertical-align:middle}.prometheus-svg-container{position:relative;height:0;width:100%;padding:0;padding-bottom:100%}.prometheus-svg-container .text-metric-usage{fill:#000;font-weight:400;font-size:12px}.prometheus-svg-container>svg{position:absolute;height:100%;width:100%;left:0;top:0}.prometheus-svg-container>svg text{fill:#2e2e2e;stroke-width:0}.prometheus-svg-container>svg .text-metric-bold{font-weight:600}.prometheus-svg-container>svg .label-axis-text{fill:#000;font-weight:400;font-size:10px}.prometheus-svg-container>svg .legend-axis-text{fill:#000}.prometheus-svg-container>svg .tick>line{stroke:#eee}.prometheus-svg-container>svg .tick>text{fill:#919191;font-size:10px}.prometheus-svg-container>svg .y-label-text,.prometheus-svg-container>svg .x-label-text{fill:#c4c4c4}.prometheus-svg-container>svg .axis-tick{stroke:#eee}.prometheus-svg-container>svg .deploy-info-text{dominant-baseline:text-before-edge;font-size:12px}.prometheus-svg-container>svg .deploy-info-text-link{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;fill:#1b69b6}.prometheus-svg-container>svg .deploy-info-text-link:hover{fill:#134a81}@media (max-width: 767.98px){.prometheus-svg-container>svg .label-axis-text,.prometheus-svg-container>svg .text-metric-usage,.prometheus-svg-container>svg .legend-axis-text{font-size:8px}.prometheus-svg-container>svg .tick>text{font-size:8px}}.prometheus-table-row-highlight{background-color:#f2f2f2}.event-item{font-size:14px;padding:10px 0 10px 40px;border-bottom:1px solid #f0f0f0;color:#2e2e2e;position:relative}.event-item.event-inline .system-note-image{top:20px}.event-item.event-inline .user-avatar{top:14px}.event-item.event-inline .event-title,.event-item.event-inline .event-item-timestamp{line-height:40px}.event-item a{color:#2e2e2e}.event-item .system-note-image{position:absolute;left:0;top:14px}.event-item .system-note-image svg{width:20px;height:20px;fill:#707070}.event-item .system-note-image.opened-icon svg,.event-item .system-note-image.created-icon svg{fill:#75d09b}.event-item .system-note-image.closed-icon svg{fill:#e67664}.event-item .system-note-image.accepted-icon svg{fill:#73afea}.event-item .event-title{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:calc(100% - 174px);font-weight:600;color:#2e2e2e}.event-item .event-body{margin-right:174px}.event-item .event-body .event-note{word-wrap:break-word}.event-item .event-body .event-note .md{font-size:14px}.event-item .event-body .event-note .md .badge.badge-pill,.event-item .event-body .event-note .md .shortcut-mappings .key,.shortcut-mappings .event-item .event-body .event-note .md .key{color:#2e2e2e}.event-item .event-body .event-note .md iframe.twitter-share-button{vertical-align:bottom}.event-item .event-body .event-note code{white-space:pre-wrap}.event-item .event-body .event-note pre{border:0;background:#fafafa;border-radius:0;color:#777;overflow:hidden}.event-item .event-body .event-note .note-image-attach{margin-top:4px;margin-left:0;max-width:200px;float:none}.event-item .event-body .event-note p:last-child{margin-bottom:0}.event-item .event-body .event-note-icon{color:#777;float:left;font-size:14px;line-height:16px;margin-right:5px}.event-item .event_icon{position:relative;float:right;border:1px solid #eee;padding:5px;border-radius:5px;background:#fafafa;margin-left:10px;top:-6px}.event-item .event_icon img{width:20px}.event-item:last-child{border:0}.event-item .event_commits li.commit{background:transparent;padding:0;border:0}.event-item .event_commits li.commit .commit-row-title{font-size:14px}.event-item .event_commits li.commits-stat{display:block;padding:0 3px 0 0}.event-item .event_commits li.commits-stat:hover{background:none}.event-item .event-item-timestamp{float:right;line-height:22px}.event-last-push{width:100%;display:flex;align-items:center}.event-last-push .event-last-push-text{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:100%;font-size:13px;margin-right:16px}@media (max-width: 575.98px){.event-item{padding-left:0}.event-item.event-inline .event-title{line-height:20px}.event-item .event-title{white-space:normal;overflow:visible;max-width:100%}.event-item .system-note-image{display:none}.event-item .event-body{margin:0;padding-left:0}.event-item .event-item-timestamp{display:none}}.project-activity .event-scope{display:none}.project-network{border:1px solid #e5e5e5}.project-network .controls{color:#888;font-size:14px;padding:5px;border-bottom:1px solid #e5e5e5;background:#eee}.project-network .network-graph{background:#fff;height:500px;overflow-y:scroll;overflow-x:hidden}.graphs .graph-author-email{float:right;color:#777}.graphs .graph-additions{color:#168f48}.graphs .graph-deletions{color:#db3b21}.milestone-row{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:90%}.dashboard .side .card .card-header .input-group .form-control,.dashboard .side .card-slim .card-header .input-group .form-control,.dashboard .side .card .card-header .input-group .search form,.search .dashboard .side .card .card-header .input-group form,.dashboard .side .card-slim .card-header .input-group .search form,.search .dashboard .side .card-slim .card-header .input-group form{height:42px}.group-root-path{max-width:40vw;overflow:hidden;text-overflow:ellipsis;word-wrap:nowrap}.group-row .stats{float:right;line-height:42px;color:#2e2e2e}.group-row .stats span{margin-right:15px}.group-row .description p{margin-bottom:0}.ldap-group-links .form-actions{margin-bottom:16px}.group-nav-container .nav-controls{display:flex;align-items:flex-start;padding:10px 0;border-bottom:1px solid #e5e5e5}.group-nav-container .nav-controls .group-filter-form{flex:1}.group-nav-container .nav-controls .dropdown-menu-right,.group-nav-container .nav-controls .notification-list-item .dropdown-menu,.notification-list-item .group-nav-container .nav-controls .dropdown-menu,.group-nav-container .nav-controls .project-repo-buttons .notification-dropdown .dropdown-menu,.project-repo-buttons .notification-dropdown .group-nav-container .nav-controls .dropdown-menu,.group-nav-container .nav-controls .group-buttons .notification-dropdown .dropdown-menu,.group-buttons .notification-dropdown .group-nav-container .nav-controls .dropdown-menu{margin-top:0}.group-nav-container .nav-controls .new-project-subgroup .dropdown-primary{min-width:115px}.group-nav-container .nav-controls .new-project-subgroup .dropdown-toggle .dropdown-btn-icon,.group-nav-container .nav-controls .new-project-subgroup .dropdown-menu-toggle .dropdown-btn-icon{pointer-events:none;color:inherit;margin-left:0}.group-nav-container .nav-controls .new-project-subgroup .dropdown-menu{min-width:280px;margin-top:2px}.group-nav-container .nav-controls .new-project-subgroup li:not(.divider){padding:0}.group-nav-container .nav-controls .new-project-subgroup li:not(.divider).droplab-item-selected .icon-container .list-item-checkmark{visibility:visible}.group-nav-container .nav-controls .new-project-subgroup li:not(.divider) .menu-item{padding:8px 4px}.group-nav-container .nav-controls .new-project-subgroup li:not(.divider) .menu-item:hover{background-color:#eee;color:#2e2e2e}.group-nav-container .nav-controls .new-project-subgroup li:not(.divider) .icon-container{float:left;padding-left:6px}.group-nav-container .nav-controls .new-project-subgroup li:not(.divider) .icon-container .list-item-checkmark{visibility:hidden}.group-nav-container .nav-controls .new-project-subgroup li:not(.divider) .description{font-size:14px}.group-nav-container .nav-controls .new-project-subgroup li:not(.divider) .description strong{display:block;font-weight:600}@media (max-width: 767.98px){.group-nav-container .nav-controls,.group-nav-container .nav-controls .dropdown,.group-nav-container .nav-controls .dropdown .dropdown-toggle,.group-nav-container .nav-controls .dropdown .dropdown-menu-toggle,.group-nav-container .nav-controls .btn-new{display:block}.group-nav-container .nav-controls .group-filter-form,.group-nav-container .nav-controls .dropdown{margin-bottom:10px;margin-right:0}.group-nav-container .nav-controls .group-filter-form,.group-nav-container .nav-controls .dropdown .dropdown-toggle,.group-nav-container .nav-controls .dropdown .dropdown-menu-toggle,.group-nav-container .nav-controls .btn-new{width:100%}.group-nav-container .nav-controls .dropdown .dropdown-toggle .fa-chevron-down,.group-nav-container .nav-controls .dropdown .dropdown-menu-toggle .fa-chevron-down{position:absolute;top:11px;right:8px}.group-nav-container .nav-controls .new-project-subgroup{display:flex;align-items:flex-start}.group-nav-container .nav-controls .new-project-subgroup .dropdown-primary{flex:1}.group-nav-container .nav-controls .new-project-subgroup .dropdown-menu{width:100%;max-width:inherit;min-width:inherit}}.groups-empty-state{padding:50px 100px;overflow:hidden}@media (max-width: 767.98px){.groups-empty-state{padding:50px 0}}.groups-empty-state svg{float:right}@media (max-width: 767.98px){.groups-empty-state svg{float:none;display:block;width:250px;position:relative;left:50%;margin-left:-125px}}.groups-empty-state .text-content{float:left;width:460px;margin-top:120px}@media (max-width: 767.98px){.groups-empty-state .text-content{float:none;margin-top:60px;width:auto;text-align:center}}.mattermost-icon svg{width:16px;height:16px;vertical-align:text-bottom}.mattermost-team-name{color:#707070}.mattermost-info{display:block;color:#707070;margin-top:10px}.explore-groups.landing .inner-content{padding:0}.explore-groups.landing .inner-content p{margin:7px 0 0;max-width:480px;padding:0 16px}@media (max-width: 767.98px){.explore-groups.landing .inner-content p{margin:0 auto}}.explore-groups.landing svg{width:62px;height:50px}.user-access-role{display:inline-block;color:#707070;font-size:12px;line-height:20px;margin:-5px 3px;padding:0 7px;border:1px solid #e5e5e5;border-radius:100px;font-weight:400}.js-groups-dropdown{width:100%}.dropdown-group-transfer{bottom:100%;top:initial}.dropdown-group-transfer .dropdown-content{overflow-y:unset}.groups-list-tree-container .has-no-search-results{text-align:center;padding:16px;font-style:italic;color:#5b6169}.groups-list-tree-container>.group-list-tree>.group-row.has-children:first-child{border-top:0}.group-list-tree .avatar-container.content-loading{position:relative}.group-list-tree .avatar-container.content-loading>a,.group-list-tree .avatar-container.content-loading>a .avatar{height:100%;border-radius:50%}.group-list-tree .avatar-container.content-loading>a{padding:2px}.group-list-tree .avatar-container.content-loading>a .avatar{border:2px solid #f0f0f0}.group-list-tree .avatar-container.content-loading>a .avatar.identicon{line-height:15px}.group-list-tree .avatar-container.content-loading::after{content:"";position:absolute;height:100%;width:100%;background-color:transparent;border:2px outset #ccc;border-radius:50%;animation:spin-avatar 3s infinite linear}.group-list-tree .folder-toggle-wrap{float:left;line-height:42px;font-size:0}.group-list-tree .folder-toggle-wrap span{font-size:14px}.group-list-tree .folder-caret,.group-list-tree .item-type-icon{display:inline-block}.group-list-tree .folder-caret{width:15px}.group-list-tree .folder-caret svg{margin-bottom:2px}.group-list-tree .item-type-icon{margin-top:2px;width:20px}.group-list-tree>.group-row:not(.has-children) .folder-caret{opacity:0}.group-list-tree .content-list li:last-child{padding-bottom:0}.group-list-tree .group-list-tree{margin-bottom:0;margin-left:30px;position:relative}.group-list-tree .group-list-tree::before{content:'';display:block;width:0;position:absolute;top:5px;bottom:0;left:-16px;border-left:2px solid #e3e3e3}.group-list-tree .group-list-tree .group-row{position:relative}.group-list-tree .group-list-tree .group-row::before{content:"";display:block;width:10px;height:0;border-top:2px solid #e3e3e3;position:absolute;top:30px;left:-16px}.group-list-tree .group-list-tree .group-row:last-child::before{background:#fff;height:auto;top:30px;bottom:0}.group-list-tree .group-list-tree .group-row.being-removed{opacity:0.5}.group-list-tree .group-row{padding:0}.group-list-tree .group-row.has-children{border-top:0}.group-list-tree .group-row:first-child{border-top:1px solid #f0f0f0}.group-list-tree .group-row-contents{padding:10px}.group-list-tree .group-row-contents:hover{border-color:#b8d6f4;background-color:#f6fafe;cursor:pointer}.group-list-tree .group-row-contents .avatar-container>a{width:100%;text-decoration:none}.group-list-tree .group-row-contents.has-more-items{display:block;padding:20px 10px}.group-list-tree .group-row-contents .stats{position:relative;line-height:46px}.group-list-tree .group-row-contents .stats>span{display:inline-flex;align-items:center;height:16px;min-width:30px}.group-list-tree .group-row-contents .stats>span:last-child{margin-right:0}.group-list-tree .group-row-contents .stats .stat-value{margin:2px 0 0 5px}.group-list-tree .group-row-contents .controls{margin-left:5px}.group-list-tree .group-row-contents .controls>.btn{margin-right:5px}.group-list-tree .project-row-contents .stats{line-height:inherit}.group-list-tree .project-row-contents .stats>span:first-child{margin-left:25px}.group-list-tree .project-row-contents .stats .item-visibility{margin-right:0}.group-list-tree .project-row-contents .stats .last-updated{position:absolute;right:12px;min-width:250px;text-align:right;color:#707070}ul.group-list-tree li.group-row>.group-row-contents .title{line-height:42px}ul.group-list-tree li.group-row.has-description>.group-row-contents .title{line-height:inherit}.js-groups-list-holder .groups-list-loading{font-size:34px;text-align:center}.shortcut-mappings{font-size:12px;color:#555}.shortcut-mappings tbody:first-child tr:first-child{padding-top:0}.shortcut-mappings th{padding-top:15px;line-height:1.5;color:#333;text-align:left}.shortcut-mappings td{padding-top:3px;padding-bottom:3px;vertical-align:top;line-height:20px}.shortcut-mappings .shortcut{padding-right:10px;color:#999;text-align:right;white-space:nowrap}.shortcut-mappings .key{background-color:#333;font:11px Consolas, "Liberation Mono", Menlo, Courier, monospace;padding:3px 5px}.documentation{padding:7px}.documentation img:not(.emoji){border:1px solid #f0f0f0;padding:5px;margin:5px;max-height:calc(100vh - 100px)}.import-jobs-from-col,.import-jobs-to-col{width:40%}.import-jobs-status-col{width:20%}.btn-import .loading-icon{display:none}.btn-import.is-loading .loading-icon{display:inline-block}.fixed-width-container,.limit-container-width .detail-page-header,.limit-container-width .page-content-header,.limit-container-width .commit-box,.limit-container-width .info-well,.limit-container-width .commit-ci-menu,.limit-container-width .files-changed-inner,.limit-container-width .limited-header-width,.limit-container-width .limited-width-notes,.limit-container-width .issuable-details .detail-page-description,.limit-container-width .issuable-details .mr-source-target,.limit-container-width .issuable-details .mr-state-widget,.limit-container-width .issuable-details .merge-manually,.limit-container-width .merge-request-details .emoji-list-container,.limit-container-width .diffs .mr-version-controls{max-width:958px;margin-left:auto;margin-right:auto}.issuable-warning-icon{background-color:#fff1de;border-radius:4px;margin:0 10px 0 0;width:24px;height:24px;text-align:center}.issuable-warning-icon .icon{fill:#de7e00;vertical-align:text-bottom}.issuable-warning-icon:first-of-type{margin-right:4px}.issuable-details section .issuable-discussion{margin-right:1px}.issuable-details .title-container{display:flex}.issuable-details .title{padding:0;margin-bottom:16px;border-bottom:0}.issuable-details .btn-edit{margin-left:auto;height:32px}.issuable-details .description img:not(.emoji){border:1px solid #f0f0f0;padding:5px;max-height:calc(100vh - 100px);max-width:100%}.issuable-details .emoji-block{padding:10px 0}.issuable-filter-count span{display:block;margin-bottom:-16px;padding:13px 0}.issuable-show-labels a{margin-bottom:5px;margin-right:5px;display:inline-block}.issuable-show-labels a .color-label{padding:4px 8px;border-radius:100px}.issuable-show-labels a:hover .color-label,.issuable-show-labels .participants-more .btn-link:hover .color-label,.participants-more .issuable-show-labels .btn-link:hover .color-label,.issuable-show-labels .user-list-more .btn-link:hover .color-label,.user-list-more .issuable-show-labels .btn-link:hover .color-label{text-decoration:underline}.issuable-show-labels.has-labels{font-size:0;margin-bottom:-5px}.right-sidebar{position:fixed;top:40px;bottom:0;right:0;transition:width 0.3s;background:#fafafa;z-index:200;overflow:hidden}.right-sidebar a:not(.btn){color:inherit}.right-sidebar a:not(.btn):hover,.right-sidebar .participants-more .btn-link:not(.btn):hover,.participants-more .right-sidebar .btn-link:not(.btn):hover,.right-sidebar .user-list-more .btn-link:not(.btn):hover,.user-list-more .right-sidebar .btn-link:not(.btn):hover{color:#134a81}.right-sidebar a:not(.btn):hover .avatar,.right-sidebar .participants-more .btn-link:not(.btn):hover .avatar,.participants-more .right-sidebar .btn-link:not(.btn):hover .avatar,.right-sidebar .user-list-more .btn-link:not(.btn):hover .avatar,.user-list-more .right-sidebar .btn-link:not(.btn):hover .avatar{border-color:rgba(245,245,245,0.2)}.right-sidebar .btn-link{color:inherit;outline:none}.right-sidebar .issuable-header-text{margin-top:7px}.right-sidebar .block{padding:16px 0;border-bottom:1px solid #e8e8e8;width:250px}.right-sidebar .block::after{display:block;clear:both;content:""}.right-sidebar .block.issuable-sidebar-header{padding-top:0;padding-bottom:10px}.right-sidebar .block:last-child{border:0}.right-sidebar .block .select2-container span{margin-top:0}.right-sidebar .block .gutter-toggle{margin-left:20px;padding-left:10px}.right-sidebar .block .gutter-toggle:hover{color:#2e2e2e}.right-sidebar .block .gutter-toggle:hover,.right-sidebar .block .gutter-toggle:focus{text-decoration:none}.right-sidebar .block.assignee .author_link{display:block;padding-left:42px;position:relative}.right-sidebar .block.assignee .author_link:hover .author{text-decoration:underline}.right-sidebar .block.assignee .author_link .avatar{left:0;position:absolute;top:0}.right-sidebar .block-first{padding-top:0}.right-sidebar .title{color:#2e2e2e;margin-bottom:10px;line-height:1}.right-sidebar .title .avatar{margin-left:0}.right-sidebar .title a.edit-link:not([href]):hover,.right-sidebar .title .participants-more .edit-link.btn-link:not([href]):hover,.participants-more .right-sidebar .title .edit-link.btn-link:not([href]):hover,.right-sidebar .title .user-list-more .edit-link.btn-link:not([href]):hover,.user-list-more .right-sidebar .title .edit-link.btn-link:not([href]):hover{color:rgba(245,245,245,0.2)}.right-sidebar .title .lock-edit,.right-sidebar .title .edit-link{color:#2e2e2e}.right-sidebar .title .lock-edit:hover,.right-sidebar .title .edit-link:hover{text-decoration:underline;color:#134a81}.right-sidebar .cross-project-reference{color:inherit}.right-sidebar .cross-project-reference span{white-space:nowrap;width:85%;overflow:hidden;position:relative;display:inline-block;text-overflow:ellipsis}.right-sidebar .cross-project-reference cite{font-style:normal}.right-sidebar .cross-project-reference button{float:right;padding:1px 5px;background-color:#fafafa}.right-sidebar .selectbox{display:none}.right-sidebar .btn-clipboard:hover{color:#2e2e2e}.right-sidebar .issuable-sidebar{width:calc(100% + 100px);height:100%;overflow-y:scroll;overflow-x:hidden;-webkit-overflow-scrolling:touch}.right-sidebar.affix-top .issuable-sidebar{height:100%}.right-sidebar.right-sidebar-expanded{width:290px}.right-sidebar.right-sidebar-expanded .value{line-height:1}.right-sidebar.right-sidebar-expanded .value .assign-yourself{margin-top:10px;display:block}.right-sidebar.right-sidebar-expanded .issuable-sidebar{padding:0 20px}.right-sidebar.right-sidebar-expanded .issuable-sidebar-header{padding-top:10px}.right-sidebar.right-sidebar-expanded:not(.issue-boards-sidebar):not([data-signed-in]):not([data-always-show-toggle]) .issuable-sidebar-header{display:none}.right-sidebar.right-sidebar-expanded .assign-yourself .btn-link{padding-left:0}.right-sidebar.right-sidebar-expanded .light,.right-sidebar.right-sidebar-expanded .description-block{font-weight:400}.right-sidebar.right-sidebar-expanded .no-value,.right-sidebar.right-sidebar-expanded .btn-secondary-hover-link{color:#707070}.right-sidebar.right-sidebar-expanded .btn-secondary-hover-link:hover{color:#1b69b6}.right-sidebar.right-sidebar-expanded .sidebar-collapsed-icon{display:none}.right-sidebar.right-sidebar-expanded .gutter-toggle{margin-top:7px;border-left:1px solid #e8e8e8;text-align:center}.right-sidebar.right-sidebar-expanded .title .gutter-toggle{margin-top:0}.right-sidebar.right-sidebar-expanded .assignee .avatar{float:left;margin-right:10px;margin-bottom:0;margin-left:0}.right-sidebar.right-sidebar-expanded .assignee .user-list .avatar{margin:0}.right-sidebar.right-sidebar-expanded .username{display:block;margin-top:4px;font-size:13px;font-weight:400}.right-sidebar.right-sidebar-expanded .hide-expanded{display:none}.right-sidebar.right-sidebar-collapsed{display:none;width:62px;padding:0}@media (min-width: 576px){.right-sidebar.right-sidebar-collapsed{display:block}}.right-sidebar.right-sidebar-collapsed .block{width:60px;padding:15px 0 0;border-bottom:0;overflow:hidden}.right-sidebar.right-sidebar-collapsed .block:hover{background-color:#ebebeb}.right-sidebar.right-sidebar-collapsed .block.issuable-sidebar-header{padding-top:0}.right-sidebar.right-sidebar-collapsed .participants{border-bottom:1px solid #e8e8e8}.right-sidebar.right-sidebar-collapsed .hide-collapsed{display:none}.right-sidebar.right-sidebar-collapsed .gutter-toggle{width:100%;height:60px;margin-left:0;padding-left:0;border-bottom:1px solid #e3e3e3}.right-sidebar.right-sidebar-collapsed a.gutter-toggle{display:flex;justify-content:center;flex-direction:column;text-align:center}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon{display:block;width:100%;text-align:center;margin-bottom:10px;color:#707070}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon svg{fill:#707070}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon:hover:not(.disabled),.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon:hover .todo-undone{color:#2e2e2e}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon:hover:not(.disabled) svg,.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon:hover .todo-undone svg{fill:#2e2e2e}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon span{display:block;margin-top:0}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon .sidebar-avatar-counter{padding-top:2px}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon .todo-undone{color:#1b69b6}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon .author{display:none}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon .avatar-counter:hover,.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon .diff-comments-more-count:hover,.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon .diff-notes-collapse:hover{color:#707070;border-color:#707070}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon .btn-clipboard{border:0;background:transparent;color:#707070}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon .btn-clipboard:hover{color:#2e2e2e}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-icon.multiple-users{display:flex;justify-content:center}.right-sidebar.right-sidebar-collapsed .sidebar-avatar-counter{width:24px;height:24px;border-radius:12px}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-user{padding-bottom:0;margin-bottom:10px}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-user .author_link{padding-left:0}.right-sidebar.right-sidebar-collapsed .sidebar-collapsed-user .author_link .avatar{position:static;margin:0}.right-sidebar.right-sidebar-collapsed .issuable-header-btn{display:none}.right-sidebar.right-sidebar-collapsed .multiple-users{height:24px;margin-bottom:17px;margin-top:4px;padding-bottom:4px}.right-sidebar.right-sidebar-collapsed .multiple-users .btn-link{padding:0;border:0}.right-sidebar.right-sidebar-collapsed .multiple-users .btn-link .avatar{margin:0}.right-sidebar.right-sidebar-collapsed .multiple-users .btn-link:first-child{position:absolute;left:10px;z-index:1}.right-sidebar.right-sidebar-collapsed .multiple-users .btn-link:last-child{position:absolute;right:10px}.right-sidebar.right-sidebar-collapsed .multiple-users .btn-link:last-child:hover{text-decoration:none}.right-sidebar.right-sidebar-collapsed .milestone-title span,.right-sidebar.right-sidebar-collapsed .collapse-truncated-title{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:100%;display:block;margin:0 4px}.right-sidebar .dropdown-menu-toggle{width:100%;padding-top:6px}.right-sidebar .dropdown-menu{width:100%}.right-sidebar .dropdown-menu li a:hover,.right-sidebar .dropdown-menu li .participants-more .btn-link:hover,.participants-more .right-sidebar .dropdown-menu li .btn-link:hover,.right-sidebar .dropdown-menu li .user-list-more .btn-link:hover,.user-list-more .right-sidebar .dropdown-menu li .btn-link:hover,.right-sidebar .dropdown-menu li a:active,.right-sidebar .dropdown-menu li a:focus,.right-sidebar .dropdown-menu li a.is-focused{background-color:#eee;color:#2e2e2e;outline:0}.right-sidebar .dropdown-menu li a:hover.text-danger,.right-sidebar .dropdown-menu li .participants-more .text-danger.btn-link:hover,.participants-more .right-sidebar .dropdown-menu li .text-danger.btn-link:hover,.right-sidebar .dropdown-menu li .user-list-more .text-danger.btn-link:hover,.user-list-more .right-sidebar .dropdown-menu li .text-danger.btn-link:hover,.right-sidebar .dropdown-menu li a:active.text-danger,.right-sidebar .dropdown-menu li a:focus.text-danger,.right-sidebar .dropdown-menu li a.is-focused.text-danger{color:#db3b21}.right-sidebar .dropdown-menu li a:hover .avatar,.right-sidebar .dropdown-menu li .participants-more .btn-link:hover .avatar,.participants-more .right-sidebar .dropdown-menu li .btn-link:hover .avatar,.right-sidebar .dropdown-menu li .user-list-more .btn-link:hover .avatar,.user-list-more .right-sidebar .dropdown-menu li .btn-link:hover .avatar,.right-sidebar .dropdown-menu li a:active .avatar,.right-sidebar .dropdown-menu li a:focus .avatar,.right-sidebar .dropdown-menu li a.is-focused .avatar{border-color:#fff}.with-performance-bar .right-sidebar{top:75px}.sidebar-move-issue-confirmation-button{width:100%}.sidebar-move-issue-confirmation-button.is-loading .sidebar-move-issue-confirmation-loading-icon{display:inline-block}.sidebar-move-issue-confirmation-loading-icon{display:none}.detail-page-description{padding:16px 0}.detail-page-description small{color:#c4c4c4}.edited-text{color:#c4c4c4;display:block;margin:16px 0 0;font-size:85%}.edited-text .author_link{color:#c4c4c4}.participants-list{display:flex;flex-wrap:wrap;margin:-7px}.user-list{display:flex;flex-wrap:wrap}.participants-author{display:inline-block;padding:7px}.participants-author:nth-of-type(7n){padding-right:0}.participants-author .author_link{display:block}.participants-author .avatar.avatar-inline,.participants-author .page-content-header .avatar,.page-content-header .participants-author .avatar{margin:0}.user-item{display:inline-block;padding:5px;flex-basis:20%}.user-item .user-link{display:inline-block}.participants-more,.user-list-more{margin-top:5px;margin-left:5px}.participants-more a,.participants-more .btn-link,.user-list-more a,.user-list-more .btn-link{color:#707070}.participants-more .btn-link,.user-list-more .btn-link{outline:none;padding:0}.participants-more .btn-link:hover,.user-list-more .btn-link:hover{text-decoration:none}.participants-more .btn-link:focus,.user-list-more .btn-link:focus{text-decoration:none}@media (min-width: 576px){.issuable-form-padding-top{padding-top:7px}}.issuable-status-box{align-self:stretch;display:flex;justify-content:center;align-items:center;margin-top:0;padding-left:9px;padding-right:9px}@media (min-width: 576px){.issuable-status-box{display:inline-block;height:auto;align-self:center}}@media (max-width: 767.98px){.issuable-gutter-toggle{margin-left:10px}}.issuable-meta{flex:1;display:inline-block;font-size:14px;line-height:24px;align-self:center;overflow:hidden;text-overflow:ellipsis}.js-issuable-selector-wrap .js-issuable-selector{width:100%}@media (max-width: 767.98px){.js-issuable-selector-wrap{margin-bottom:16px}}.issuable-list li .issue-box{display:-webkit-flex;display:flex}.issuable-list li .issue-info-container{-webkit-flex:1;flex:1;display:flex;padding-right:16px}.issuable-list li .issue-info-container .issue-main-info{flex:1 auto;margin-right:10px}.issuable-list li .issue-info-container .issuable-meta{display:flex;flex-direction:column;align-items:flex-end;flex:1 0 auto}.issuable-list li .issue-info-container .issuable-meta .controls{margin-bottom:2px;line-height:20px;padding:0}.issuable-list li .issue-info-container .issuable-meta .issue-updated-at{line-height:20px}@media (max-width: 575.98px){.issuable-list li .issue-info-container .issuable-meta .controls li{margin-right:0}}.issuable-list li .issue-check{padding-right:16px;margin-bottom:10px;min-width:15px}.issuable-list li .issue-check .selected_issue{vertical-align:text-top}.issuable-list li .issuable-milestone,.issuable-list li .issuable-info,.issuable-list li .task-status,.issuable-list li .issuable-updated-at{font-weight:400;color:#707070}.issuable-list li .issuable-milestone a,.issuable-list li .issuable-info a,.issuable-list li .task-status a,.issuable-list li .issuable-updated-at a{color:#2e2e2e}.issuable-list li .issuable-milestone a .fa,.issuable-list li .issuable-info a .fa,.issuable-list li .task-status a .fa,.issuable-list li .issuable-updated-at a .fa{color:#707070}@media (max-width: 991px){.issuable-list li .task-status,.issuable-list li .issuable-due-date,.issuable-list li .project-ref-path{display:none}}.issuable-list li .avatar-counter,.issuable-list li .diff-comments-more-count,.issuable-list li .diff-notes-collapse,.issue-info-container .controls .avatar-counter,.issue-info-container .controls .diff-comments-more-count,.issue-info-container .controls .diff-notes-collapse{display:inline-block;vertical-align:middle;min-width:16px;line-height:14px;height:16px;padding-left:2px;padding-right:2px}.time_tracker{padding-bottom:0;border-bottom:0}.time_tracker .sidebar-collapsed-icon>.stopwatch-svg{display:inline-block}.time_tracker .sidebar-collapsed-icon svg{width:16px;height:16px;fill:#707070}.time_tracker .sidebar-collapsed-icon:hover svg{fill:#2e2e2e}.time_tracker .help-button,.time_tracker .close-help-button{cursor:pointer}.time_tracker .compare-meter.within_estimate .meter-fill{background:#1f78d1}.time_tracker .compare-meter.over_estimate .meter-fill{background:#db3b21}.time_tracker .compare-meter.over_estimate .time-remaining,.time_tracker .compare-meter.over_estimate .compare-value.spent{color:#db3b21}.time_tracker .meter-container{background:#ededed;border-radius:3px}.time_tracker .meter-container .meter-fill{max-width:100%;height:5px;border-radius:3px;background:#1f78d1}.time_tracker .compare-display-container{display:flex;justify-content:space-between;margin-top:5px}.time_tracker .compare-display-container .compare-display{font-size:13px;color:#888}.time_tracker .compare-display-container .compare-display .compare-value{color:#2e2e2e}.time_tracker .time-tracking-help-state{background:#fff;margin:16px -20px 0;padding:16px 20px;border-top:1px solid #ededed;border-bottom:1px solid #ededed}.time_tracker .time-tracking-help-state a:hover,.time_tracker .time-tracking-help-state .participants-more .btn-link:hover,.participants-more .time_tracker .time-tracking-help-state .btn-link:hover,.time_tracker .time-tracking-help-state .user-list-more .btn-link:hover,.user-list-more .time_tracker .time-tracking-help-state .btn-link:hover{color:#848484}.time_tracker .help-state-toggle-enter-active{transition:all .8s ease}.time_tracker .help-state-toggle-leave-active{transition:all .5s ease}.time_tracker .help-state-toggle-enter,.time_tracker .help-state-toggle-leave-active{opacity:0}.issuable-todo-btn .fa-spinner{display:none}.issuable-todo-btn.is-loading .fa-spinner{display:inline-block}.issuable-todo-btn.is-loading.sidebar-collapsed-icon .issuable-todo-inner{display:none}.issuable-close-button,.issuable-close-toggle{transition:border-color 100ms linear, color 100ms linear}.issuable-close-dropdown .dropdown-menu{min-width:270px;left:auto;right:0}.issuable-close-dropdown .description .text{margin:0}.issuable-close-dropdown .dropdown-toggle>.icon,.issuable-close-dropdown .dropdown-menu-toggle>.icon{margin:0 3px}.right-sidebar-collapsed .sidebar-grouped-item .sidebar-collapsed-icon{margin-bottom:0}.right-sidebar-collapsed .sidebar-grouped-item .sidebar-collapsed-divider{line-height:5px;font-size:12px;color:#707070}.right-sidebar-collapsed .sidebar-grouped-item .sidebar-collapsed-divider+.sidebar-collapsed-icon{padding-top:0}.issues-list .issue{padding:10px 0 10px 16px;position:relative}.issues-list .issue .title{margin-bottom:2px}.issues-list .issue .issue-labels{display:inline-block}.issues-list .issue .issuable-meta .author_link{display:inline-block}.issues-list .issue .issuable-meta .issuable-comments{height:18px}.issues-list .issue .icon-merge-request-unmerged{height:13px;margin-bottom:3px}.issue-realtime-pre-pulse{opacity:0}.issue-realtime-trigger-pulse{transition:opacity 200ms linear;opacity:1}.check-all-holder{line-height:36px;float:left;margin-right:15px}.issues_content .title{height:40px}.issues_content form{margin:0}form.edit-issue{margin:0}ul.related-merge-requests>li{display:-ms-flexbox;display:-webkit-flex;display:flex;align-items:center}ul.related-merge-requests>li .merge-request-id{flex-shrink:0}ul.related-merge-requests>li .merge-request-info{margin-left:5px}ul.related-merge-requests>li .row_title{vertical-align:bottom}ul.related-merge-requests>li gl-emoji{font-size:1em}.merge-requests-title,.related-branches-title{font-size:16px;font-weight:600}.merge-request-id{display:inline-block}.merge-request-status{font-size:13px;padding:0 5px;color:#fff;height:20px;border-radius:3px;line-height:18px}.merge-request-status.merged{background:#1f78d1}.merge-request-status.closed{background:#db3b21}.merge-request-status.open{background:#1aaa55}.merge-request.today,.issue.today{background:#f3fff2;border-color:#e1e8d5}.merge-request.closed,.issue.closed{background:#fafafa;border-color:#e5e5e5}.merge-request.merged,.issue.merged{background:#fafafa;border-color:#e5e5e5}.merge-request-ci-status .ci-status-link,.related-merge-requests .ci-status-link{display:block;margin-right:5px}.merge-request-ci-status svg,.related-merge-requests svg{display:block}@media (max-width: 575.98px){.detail-page-header .issuable-meta{line-height:18px}}.issue-form .select2-container{width:250px !important}.issuable-email-modal-btn{padding:0;color:#1b69b6;background-color:transparent;border:0;outline:0}.issuable-email-modal-btn:hover{text-decoration:underline}.email-modal-input-group{margin-bottom:10px}.email-modal-input-group .form-control,.email-modal-input-group .search form,.search .email-modal-input-group form{background-color:#fff}.email-modal-input-group .btn{background-color:#fafafa;border:1px solid #e8e8e8}.recaptcha{margin-bottom:30px}.new-branch-col{padding-top:10px}.create-mr-dropdown-wrap .ref::selection{color:#919191}.create-mr-dropdown-wrap .dropdown .dropdown-menu-toggle{min-width:285px}.create-mr-dropdown-wrap .dropdown .dropdown-select{width:285px}.create-mr-dropdown-wrap .btn-group:not(.hidden){display:flex}.create-mr-dropdown-wrap .js-create-merge-request{flex-grow:1;flex-shrink:0}.create-mr-dropdown-wrap .create-merge-request-dropdown-menu{width:300px;opacity:1;visibility:visible;transform:translateY(0);display:none;margin-top:4px}.create-mr-dropdown-wrap .create-merge-request-dropdown-menu .btn.btn-success{border-radius:3px;font-size:14px;font-weight:400;padding:6px 10px;background-color:#1aaa55;border-color:#168f48;color:#fff;border-style:solid;border-width:1px;line-height:1.5;width:auto}.create-mr-dropdown-wrap .create-merge-request-dropdown-menu .btn.btn-success:focus,.create-mr-dropdown-wrap .create-merge-request-dropdown-menu .btn.btn-success:active{background-color:#ececec;box-shadow:rgba(0,0,0,0.16)}.create-mr-dropdown-wrap .create-merge-request-dropdown-menu .btn.btn-success:hover,.create-mr-dropdown-wrap .create-merge-request-dropdown-menu .btn.btn-success:focus{background-color:#168f48;border-color:#12753a;color:#fff}.create-mr-dropdown-wrap .create-merge-request-dropdown-menu .btn.btn-success:active,.create-mr-dropdown-wrap .create-merge-request-dropdown-menu .btn.btn-success.active{box-shadow:rgba(0,0,0,0.16);background-color:#12753a;border-color:#0e5a2d;color:#fff}.create-mr-dropdown-wrap .create-merge-request-dropdown-toggle .fa-caret-down{pointer-events:none;color:inherit;margin-left:0}.discussion-reply-holder .note-edit-form{display:block}@media (min-width: 576px){.emoji-block .row{display:flex}.emoji-block .row .new-branch-col{padding-top:0;text-align:right;align-self:center}.emoji-block .row .create-mr-dropdown-wrap .btn-group:not(.hidden){display:inline-flex}}.issue-count-badge{display:inline-flex;align-items:stretch;height:24px}.issue-count-badge-count{display:flex;align-items:center;padding-right:10px;padding-left:10px;border:1px solid #e5e5e5;border-radius:3px;line-height:1}.issue-count-badge-count.has-btn{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.issue-count-badge-add-button{display:flex;align-items:center;border:1px solid #e5e5e5;border-radius:0 3px 3px 0;line-height:1}.suggest-colors{margin-top:5px}.suggest-colors a{border-radius:4px;width:30px;height:30px;display:inline-block;margin-right:10px;margin-bottom:10px;text-decoration:none}.suggest-colors.suggest-colors-dropdown{margin-top:10px;margin-bottom:10px;border-radius:3px;overflow:hidden}.suggest-colors.suggest-colors-dropdown a{border-radius:0;width:14.2857142857%;margin-right:0;margin-bottom:-5px}.dropdown-menu-labels .dropdown-content{max-height:135px}.dropdown-new-label .dropdown-content{max-height:136px}.dropdown-label-color-input{position:relative;margin-bottom:10px}.dropdown-label-color-input.is-active{padding-left:32px}.dropdown-label-color-preview{position:absolute;left:0;top:0;width:32px;height:32px;border-top-left-radius:3px;border-bottom-left-radius:3px}.color-label{padding:0 8px;line-height:16px;border-radius:100px;color:#fff}.dropdown-labels-error{padding:5px 10px;margin-bottom:10px;background-color:#db3b21;color:#fff}.manage-labels-list>li:not(.empty-message):not(.is-not-draggable){background-color:#fff;margin-bottom:5px;display:flex;justify-content:space-between;padding:16px;border-radius:4px;border:1px solid #f2f2f2}.manage-labels-list>li:not(.empty-message):not(.is-not-draggable).sortable-ghost{opacity:0.3}.prioritized-labels .manage-labels-list>li:not(.empty-message):not(.is-not-draggable){box-shadow:0 1px 2px rgba(186,186,186,0.5);cursor:move;cursor:-webkit-grab;cursor:-moz-grab;border:0}.prioritized-labels .manage-labels-list>li:not(.empty-message):not(.is-not-draggable):active{cursor:-webkit-grabbing;cursor:-moz-grabbing}.manage-labels-list .btn-action .fa{font-size:18px;vertical-align:middle;pointer-events:none}.manage-labels-list .btn-action:hover{color:#1b69b6}.manage-labels-list .btn-action:hover.remove-row{color:#db3b21}.manage-labels-list .color-label{padding:4px 8px}.prioritized-labels{margin-bottom:30px}.prioritized-labels .add-priority{display:none;color:#fafafa}.prioritized-labels li:hover .draggable-handler{display:inline-block;opacity:1}.other-labels .remove-priority{display:none}.filtered-labels{font-size:0;padding:12px 16px}.filtered-labels .label-row{margin-top:4px;margin-bottom:4px}.filtered-labels .label-row:not(:last-child){margin-right:8px}.filtered-labels .label-remove{border-left:1px solid rgba(0,0,0,0.1);z-index:3;border-radius:100px;padding:6px 10px 6px 9px}.filtered-labels .label-remove:hover{box-shadow:inset 0 0 0 80px rgba(0,0,0,0.1)}.filtered-labels .btn{color:inherit}.filtered-labels a.btn{padding:0}.filtered-labels a.btn .has-tooltip{top:0;border-top-right-radius:0;border-bottom-right-radius:0;line-height:1.1}.label-options-toggle{width:100%}.label-subscription{vertical-align:middle}.label-subscription .dropdown-group-label a{cursor:pointer}.label-subscribe-button{width:105px;font-weight:200}.label-subscribe-button .label-subscribe-button-icon[disabled]{opacity:0.5;pointer-events:none}.label-subscribe-button .label-subscribe-button-loading{display:none}.label-subscribe-button.disabled .label-subscribe-button-icon{display:none}.label-subscribe-button.disabled .label-subscribe-button-loading{display:block}.label-link{display:inline-flex;vertical-align:text-bottom}.label-link:hover .color-label{text-decoration:underline}.label-link .label{vertical-align:inherit;font-size:12px}.labels-container{background-color:#fafafa;border-radius:4px;padding:16px 8px}.label-actions-list{list-style:none;flex-shrink:0;padding:0}.label-badge{color:#2e2e2e;font-weight:400;padding:4px 8px;border-radius:4px;font-size:12px}.label-badge-blue{background-color:#e6edf5}.label-badge-gray{background-color:#f2f2f2}.label-links{list-style:none;padding:0;white-space:nowrap}.label-link-item{padding:0}.content-list .label-list-item::before,.content-list .label-list-item::after{content:none}.label-list-item .label-name{width:150px;flex-shrink:0}.label-list-item .label-name .badge{overflow:hidden;text-overflow:ellipsis;max-width:100%}.label-list-item .label-description{flex-grow:1}.label-list-item .label-description a{color:#1b69b6}.label-list-item .label{padding:4px 8px;font-size:12px;position:relative;top:4px}.label-list-item .label-action{color:#4f4f4f;cursor:pointer}.label-list-item .label-action svg{fill:#4f4f4f}.label-list-item .label-action:hover{color:#1b69b6}.label-list-item .label-action:hover svg{fill:#1b69b6}.priority-labels-empty-state .svg-content img{max-width:114px}.login-page .container{max-width:960px}.login-page .navbar-gitlab .container{max-width:none}.login-page .flash-container{margin-bottom:16px}.login-page .brand-holder{font-size:18px;line-height:1.5}.login-page .brand-holder p{font-size:16px;color:#888}.login-page .brand-holder h1:first-child{font-weight:400;margin-bottom:0.68em;margin-top:0;font-size:34px}.login-page .brand-holder h3{font-size:22px}.login-page .brand-holder img{max-width:100%;margin-bottom:30px}.login-page .brand-holder a{font-weight:600}.login-page p{font-size:13px}.login-page .login-box,.login-page .omniauth-container{box-shadow:0 0 0 1px #e5e5e5;border-bottom-right-radius:2px;border-bottom-left-radius:2px;padding:15px}.login-page .login-box .login-heading h3,.login-page .omniauth-container .login-heading h3{font-weight:400;line-height:1.5;margin:0 0 10px}.login-page .login-box .login-footer,.login-page .omniauth-container .login-footer{margin-top:10px}.login-page .login-box .login-footer p:last-child,.login-page .omniauth-container .login-footer p:last-child{margin-bottom:0}.login-page .login-box a.forgot,.login-page .omniauth-container a.forgot{float:right;padding-top:6px}.login-page .login-box .nav .active a,.login-page .omniauth-container .nav .active a{background:transparent}.login-page .login-box .login-body,.login-page .omniauth-container .login-body{font-size:13px}.login-page .login-box .login-body input+p,.login-page .omniauth-container .login-body input+p{margin-top:5px}.login-page .login-box .login-body .username .validation-success,.login-page .omniauth-container .login-body .username .validation-success{color:#168f48}.login-page .login-box .login-body .username .validation-error,.login-page .omniauth-container .login-body .username .validation-error{color:#db3b21}.login-page .omniauth-container{font-size:13px}.login-page .omniauth-container p{margin:0}.login-page .new-session-tabs{display:-webkit-flex;display:flex;box-shadow:0 0 0 1px #e5e5e5;border-top-right-radius:4px;border-top-left-radius:4px}.login-page .new-session-tabs.custom-provider-tabs{flex-wrap:wrap}.login-page .new-session-tabs.custom-provider-tabs li{min-width:85px;flex-basis:auto}.login-page .new-session-tabs.custom-provider-tabs li:nth-child(n+5){border-top:1px solid #e5e5e5}.login-page .new-session-tabs.custom-provider-tabs a{font-size:16px}.login-page .new-session-tabs li{flex:1;text-align:center;border-left:1px solid #e5e5e5}.login-page .new-session-tabs li:first-of-type{border-left:0;border-top-left-radius:4px}.login-page .new-session-tabs li:last-of-type{border-top-right-radius:4px}.login-page .new-session-tabs li:not(.active){background-color:#fafafa}.login-page .new-session-tabs li a{width:100%;font-size:18px}.login-page .new-session-tabs li.active>a{cursor:default}.login-page .form-control:active,.login-page .search form:active,.search .login-page form:active,.login-page .form-control:focus,.login-page .common-note-form .md-area.is-focused,.common-note-form .login-page .md-area.is-focused,.login-page .search form:focus,.search .login-page form:focus,.login-page .search.search-active form,.search.search-active .login-page form{background-color:#fff}.login-page label{font-weight:400}.login-page .submit-container{margin-top:16px}.login-page input[type="submit"]{margin-bottom:0}.login-page .devise-errors h2{margin-top:0;font-size:14px;color:#a62d19}@media (max-width: 575.98px){.login-page .col-md-5.float-right{float:none !important;margin-bottom:45px}}.oauth-image-link{margin-right:10px}.oauth-image-link img{width:32px;height:32px}.devise-layout-html{margin:0;padding:0;height:100%}.devise-layout-html body{height:calc(100% - 51px);margin:0;padding:0}.devise-layout-html body .page-wrap{min-height:100%;position:relative}.devise-layout-html body .footer-container,.devise-layout-html body hr.footer-fixed{position:absolute;bottom:0;left:0;right:0;height:40px;background:#fff}.devise-layout-html body .login-page-broadcast{margin-top:50px}.devise-layout-html body .navless-container{padding:65px 15px}@media (max-width: 575.98px){.devise-layout-html body .navless-container{padding:0 15px 65px}}.project-members-title{padding-bottom:10px;border-bottom:1px solid #e5e5e5}.users-project-form .btn-create,.users-project-form .comment-btn{margin-right:10px}.member-sort-dropdown{margin-left:8px}@media (min-width: 576px){.member .list-item-name{float:left;width:50%}}.member .list-item-name strong{font-weight:600}@media (min-width: 576px){.member .controls{display:-webkit-flex;display:flex}}.member .controls .dropdown-menu.dropdown-menu-right,.member .controls .notification-list-item .dropdown-menu,.notification-list-item .member .controls .dropdown-menu,.member .controls .project-repo-buttons .notification-dropdown .dropdown-menu,.project-repo-buttons .notification-dropdown .member .controls .dropdown-menu,.member .controls .group-buttons .notification-dropdown .dropdown-menu,.group-buttons .notification-dropdown .member .controls .dropdown-menu{margin-top:-2px}.member .form-group{margin-bottom:0}@media (max-width: 767.98px){.member .form-group{display:block;margin-left:5px}}.member .btn-remove{width:100%}@media (min-width: 576px){.member .btn-remove{width:auto}}@media (min-width: 576px){.member.existing-title{float:left}}@media (max-width: 767.98px){.member-form-control{width:163px;margin-left:0;padding-bottom:5px}}@media (max-width: 575.98px){.member-form-control{margin-right:0;width:auto}}.member-access-text{margin-left:auto;line-height:43px}.member-search-form{position:relative}@media (min-width: 576px){.member-search-form{float:right}}.member-search-form .dropdown{width:100%;margin-top:5px}.member-search-form .dropdown .dropdown-menu-toggle{vertical-align:middle;width:100%}@media (min-width: 576px){.member-search-form .dropdown{margin-top:0;width:155px}}.member-search-form .form-control,.member-search-form .search form,.search .member-search-form form{width:100%;padding-right:35px}@media (min-width: 576px){.member-search-form .form-control,.member-search-form .search form,.search .member-search-form form{width:250px}}.member-search-btn{position:absolute;right:4px;top:0;height:35px;padding-left:10px;padding-right:10px;color:#c4c4c4;background:transparent;border:0;outline:0}.flex-project-members-panel{display:flex;flex-direction:row;align-items:center;justify-content:center}@media (max-width: 767.98px){.flex-project-members-panel{display:block}.flex-project-members-panel .flex-project-title{vertical-align:top;display:inline-block;max-width:90%}}.flex-project-members-panel .flex-project-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.flex-project-members-panel .badge.badge-pill,.flex-project-members-panel .shortcut-mappings .key,.shortcut-mappings .flex-project-members-panel .key{height:17px;line-height:16px;margin-right:5px;padding-top:1px;padding-bottom:1px}.flex-project-members-panel .flex-project-members-form{flex-wrap:nowrap;white-space:nowrap;margin-left:auto}.card .card-header .badge.badge-pill,.card-slim .card-header .badge.badge-pill,.card .card-header .shortcut-mappings .key,.shortcut-mappings .card .card-header .key,.card-slim .card-header .shortcut-mappings .key,.shortcut-mappings .card-slim .card-header .key{margin-top:0}@media (max-width: 767.98px){.card .card-header .badge.badge-pill,.card-slim .card-header .badge.badge-pill,.card .card-header .shortcut-mappings .key,.shortcut-mappings .card .card-header .key,.card-slim .card-header .shortcut-mappings .key,.shortcut-mappings .card-slim .card-header .key{margin-right:0;margin-left:0}}.content-list.members-list li{display:flex;justify-content:space-between}.content-list.members-list li .list-item-name{float:none;display:flex;flex:1}.content-list.members-list li .user-info{padding-right:10px}.content-list.members-list li .member{font-weight:600;overflow-wrap:break-word;word-break:break-all}.content-list.members-list li .member-group-link{display:inline-block}.content-list.members-list li .form-control,.content-list.members-list li .search form,.search .content-list.members-list li form{width:inherit}.content-list.members-list li .btn{align-self:flex-start}@media (max-width: 575.98px){.content-list.members-list li{display:block}.content-list.members-list li .controls>.btn{margin-left:0;margin-right:0;display:block}.content-list.members-list li .controls>.btn:last-child{margin-left:5px;margin-right:5px;width:auto}.content-list.members-list li .form-control,.content-list.members-list li .search form,.search .content-list.members-list li form{width:100%}.content-list.members-list li .member-access-text{line-height:0;margin-left:50px}.content-list.members-list li .member-controls{margin-top:5px}}.card-mobile .content-list.members-list li{display:block}.card-mobile .content-list.members-list li .member-controls{float:none;display:block}.card-mobile .content-list.members-list li .dropdown-menu-toggle,.card-mobile .content-list.members-list li .dropdown-menu,.card-mobile .content-list.members-list li .form-control,.card-mobile .content-list.members-list li .search form,.search .card-mobile .content-list.members-list li form,.card-mobile .content-list.members-list li .list-item-name{width:100%}.card-mobile .content-list.members-list li .dropdown-menu{margin-top:0}.card-mobile .content-list.members-list li .member-form-control{margin:5px 0}.card-mobile .content-list.members-list li .btn{width:100%;margin-left:0}#conflicts .white .header.line_content.origin,#conflicts .white .diff-line-num.origin{background-color:#e0f0ff;border-color:#e0f0ff}#conflicts .white .header.line_content.origin button,#conflicts .white .diff-line-num.origin button{background-color:#87c2fa;border-color:#3e9df7}#conflicts .white .header.line_content.origin.selected,#conflicts .white .diff-line-num.origin.selected{background-color:#add8ff;border-color:#add8ff}#conflicts .white .header.line_content.origin.selected button,#conflicts .white .diff-line-num.origin.selected button{background-color:#268ced;border-color:#0f65b7}#conflicts .white .header.line_content.origin.unselected,#conflicts .white .diff-line-num.origin.unselected{background-color:#f0f0f0;border-color:#f0f0f0}#conflicts .white .header.line_content.origin.unselected button,#conflicts .white .diff-line-num.origin.unselected button{background-color:#d0e7fd;border-color:#87c2fa}#conflicts .white .header.line_content.head,#conflicts .white .diff-line-num.head{background-color:#e1fad7;border-color:#e1fad7}#conflicts .white .header.line_content.head button,#conflicts .white .diff-line-num.head button{background-color:#9adb84;border-color:#69ca49}#conflicts .white .header.line_content.head.selected,#conflicts .white .diff-line-num.head.selected{background-color:#baf0a8;border-color:#baf0a8}#conflicts .white .header.line_content.head.selected button,#conflicts .white .diff-line-num.head.selected button{background-color:#52c22d;border-color:#38841f}#conflicts .white .header.line_content.head.unselected,#conflicts .white .diff-line-num.head.unselected{background-color:#f0f0f0;border-color:#f0f0f0}#conflicts .white .header.line_content.head.unselected button,#conflicts .white .diff-line-num.head.unselected button{background-color:#cbecbf;border-color:#9adb84}#conflicts .white .line_content.origin{background-color:#f2f9ff}#conflicts .white .line_content.origin.selected{background-color:#e0f0ff}#conflicts .white .line_content.origin.unselected{background-color:#fafafa}#conflicts .white .line_content.head{background-color:#effdec}#conflicts .white .line_content.head.selected{background-color:#e1fad7}#conflicts .white .line_content.head.unselected{background-color:#fafafa}#conflicts .dark .header.line_content.origin,#conflicts .dark .diff-line-num.origin{background-color:rgba(40,120,201,0.4);border-color:rgba(40,120,201,0.4)}#conflicts .dark .header.line_content.origin button,#conflicts .dark .diff-line-num.origin button{background-color:#2a5c8c;border-color:#183551}#conflicts .dark .header.line_content.origin.selected,#conflicts .dark .diff-line-num.origin.selected{background-color:rgba(40,120,201,0.6);border-color:rgba(40,120,201,0.6)}#conflicts .dark .header.line_content.origin.selected button,#conflicts .dark .diff-line-num.origin.selected button{background-color:#1d6cbf;border-color:#13467d}#conflicts .dark .header.line_content.origin.unselected,#conflicts .dark .diff-line-num.origin.unselected{background-color:rgba(255,255,255,0.25);border-color:rgba(255,255,255,0.25)}#conflicts .dark .header.line_content.origin.unselected button,#conflicts .dark .diff-line-num.origin.unselected button{background-color:#3e83c5;border-color:#2a5c8c}#conflicts .dark .header.line_content.head,#conflicts .dark .diff-line-num.head{background-color:rgba(51,255,51,0.2);border-color:rgba(51,255,51,0.2)}#conflicts .dark .header.line_content.head button,#conflicts .dark .diff-line-num.head button{background-color:#40874f;border-color:#275331}#conflicts .dark .header.line_content.head.selected,#conflicts .dark .diff-line-num.head.selected{background-color:rgba(51,255,51,0.33);border-color:rgba(51,255,51,0.33)}#conflicts .dark .header.line_content.head.selected button,#conflicts .dark .diff-line-num.head.selected button{background-color:#258537;border-color:#14491e}#conflicts .dark .header.line_content.head.unselected,#conflicts .dark .diff-line-num.head.unselected{background-color:rgba(255,255,255,0.25);border-color:rgba(255,255,255,0.25)}#conflicts .dark .header.line_content.head.unselected button,#conflicts .dark .diff-line-num.head.unselected button{background-color:#60b472;border-color:#40874f}#conflicts .dark .line_content.origin{background-color:rgba(40,120,201,0.3)}#conflicts .dark .line_content.origin.selected{background-color:rgba(40,120,201,0.4)}#conflicts .dark .line_content.origin.unselected{background-color:rgba(255,255,255,0.1)}#conflicts .dark .line_content.head{background-color:rgba(51,255,51,0.1)}#conflicts .dark .line_content.head.selected{background-color:rgba(51,255,51,0.2)}#conflicts .dark .line_content.head.unselected{background-color:rgba(255,255,255,0.1)}#conflicts .monokai .header.line_content.origin,#conflicts .monokai .diff-line-num.origin{background-color:rgba(96,217,241,0.35);border-color:rgba(96,217,241,0.35)}#conflicts .monokai .header.line_content.origin button,#conflicts .monokai .diff-line-num.origin button{background-color:#38848c;border-color:#225055}#conflicts .monokai .header.line_content.origin.selected,#conflicts .monokai .diff-line-num.origin.selected{background-color:rgba(96,217,241,0.5);border-color:rgba(96,217,241,0.5)}#conflicts .monokai .header.line_content.origin.selected button,#conflicts .monokai .diff-line-num.origin.selected button{background-color:#3ea4b2;border-color:#2a7079}#conflicts .monokai .header.line_content.origin.unselected,#conflicts .monokai .diff-line-num.origin.unselected{background-color:rgba(118,113,93,0.24);border-color:rgba(118,113,93,0.24)}#conflicts .monokai .header.line_content.origin.unselected button,#conflicts .monokai .diff-line-num.origin.unselected button{background-color:#55b1bb;border-color:#38848c}#conflicts .monokai .header.line_content.head,#conflicts .monokai .diff-line-num.head{background-color:rgba(166,226,46,0.25);border-color:rgba(166,226,46,0.25)}#conflicts .monokai .header.line_content.head button,#conflicts .monokai .diff-line-num.head button{background-color:#376b20;border-color:#19300e}#conflicts .monokai .header.line_content.head.selected,#conflicts .monokai .diff-line-num.head.selected{background-color:rgba(166,226,46,0.4);border-color:rgba(166,226,46,0.4)}#conflicts .monokai .header.line_content.head.selected button,#conflicts .monokai .diff-line-num.head.selected button{background-color:#39800d;border-color:#1a3b06}#conflicts .monokai .header.line_content.head.unselected,#conflicts .monokai .diff-line-num.head.unselected{background-color:rgba(118,113,93,0.24);border-color:rgba(118,113,93,0.24)}#conflicts .monokai .header.line_content.head.unselected button,#conflicts .monokai .diff-line-num.head.unselected button{background-color:#55a632;border-color:#376b20}#conflicts .monokai .line_content.origin{background-color:rgba(96,217,241,0.15)}#conflicts .monokai .line_content.origin.selected{background-color:rgba(96,217,241,0.35)}#conflicts .monokai .line_content.origin.unselected{background-color:rgba(118,113,93,0.1)}#conflicts .monokai .line_content.head{background-color:rgba(166,226,46,0.1)}#conflicts .monokai .line_content.head.selected{background-color:rgba(166,226,46,0.25)}#conflicts .monokai .line_content.head.unselected{background-color:rgba(118,113,93,0.1)}#conflicts .solarized-light .header.line_content.origin,#conflicts .solarized-light .diff-line-num.origin{background-color:rgba(40,120,201,0.37);border-color:rgba(40,120,201,0.37)}#conflicts .solarized-light .header.line_content.origin button,#conflicts .solarized-light .diff-line-num.origin button{background-color:#60a1bf;border-color:#3c7a96}#conflicts .solarized-light .header.line_content.origin.selected,#conflicts .solarized-light .diff-line-num.origin.selected{background-color:rgba(40,120,201,0.6);border-color:rgba(40,120,201,0.6)}#conflicts .solarized-light .header.line_content.origin.selected button,#conflicts .solarized-light .diff-line-num.origin.selected button{background-color:#2482b2;border-color:#175472}#conflicts .solarized-light .header.line_content.origin.unselected,#conflicts .solarized-light .diff-line-num.origin.unselected{background-color:rgba(131,148,150,0.37);border-color:rgba(131,148,150,0.37)}#conflicts .solarized-light .header.line_content.origin.unselected button,#conflicts .solarized-light .diff-line-num.origin.unselected button{background-color:#97c1d5;border-color:#60a1bf}#conflicts .solarized-light .header.line_content.head,#conflicts .solarized-light .diff-line-num.head{background-color:rgba(133,153,0,0.37);border-color:rgba(133,153,0,0.37)}#conflicts .solarized-light .header.line_content.head button,#conflicts .solarized-light .diff-line-num.head button{background-color:#afb262;border-color:#838642}#conflicts .solarized-light .header.line_content.head.selected,#conflicts .solarized-light .diff-line-num.head.selected{background-color:rgba(133,153,0,0.5);border-color:rgba(133,153,0,0.5)}#conflicts .solarized-light .header.line_content.head.selected button,#conflicts .solarized-light .diff-line-num.head.selected button{background-color:#94993d;border-color:#5f6227}#conflicts .solarized-light .header.line_content.head.unselected,#conflicts .solarized-light .diff-line-num.head.unselected{background-color:rgba(131,148,150,0.37);border-color:rgba(131,148,150,0.37)}#conflicts .solarized-light .header.line_content.head.unselected button,#conflicts .solarized-light .diff-line-num.head.unselected button{background-color:#c9cb95;border-color:#afb262}#conflicts .solarized-light .line_content.origin{background-color:rgba(40,120,201,0.15)}#conflicts .solarized-light .line_content.origin.selected{background-color:rgba(40,120,201,0.37)}#conflicts .solarized-light .line_content.origin.unselected{background-color:rgba(131,148,150,0.2)}#conflicts .solarized-light .line_content.head{background-color:rgba(133,153,0,0.2)}#conflicts .solarized-light .line_content.head.selected{background-color:rgba(133,153,0,0.37)}#conflicts .solarized-light .line_content.head.unselected{background-color:rgba(131,148,150,0.2)}#conflicts .solarized-dark .header.line_content.origin,#conflicts .solarized-dark .diff-line-num.origin{background-color:rgba(40,120,201,0.35);border-color:rgba(40,120,201,0.35)}#conflicts .solarized-dark .header.line_content.origin button,#conflicts .solarized-dark .diff-line-num.origin button{background-color:#086799;border-color:#043650}#conflicts .solarized-dark .header.line_content.origin.selected,#conflicts .solarized-dark .diff-line-num.origin.selected{background-color:rgba(40,120,201,0.6);border-color:rgba(40,120,201,0.6)}#conflicts .solarized-dark .header.line_content.origin.selected button,#conflicts .solarized-dark .diff-line-num.origin.selected button{background-color:#0082cc;border-color:#005180}#conflicts .solarized-dark .header.line_content.origin.unselected,#conflicts .solarized-dark .diff-line-num.origin.unselected{background-color:rgba(131,148,150,0.25);border-color:rgba(131,148,150,0.25)}#conflicts .solarized-dark .header.line_content.origin.unselected button,#conflicts .solarized-dark .diff-line-num.origin.unselected button{background-color:#0c98e2;border-color:#086799}#conflicts .solarized-dark .header.line_content.head,#conflicts .solarized-dark .diff-line-num.head{background-color:rgba(133,153,0,0.35);border-color:rgba(133,153,0,0.35)}#conflicts .solarized-dark .header.line_content.head button,#conflicts .solarized-dark .diff-line-num.head button{background-color:#376b20;border-color:#19300e}#conflicts .solarized-dark .header.line_content.head.selected,#conflicts .solarized-dark .diff-line-num.head.selected{background-color:rgba(133,153,0,0.5);border-color:rgba(133,153,0,0.5)}#conflicts .solarized-dark .header.line_content.head.selected button,#conflicts .solarized-dark .diff-line-num.head.selected button{background-color:#39800d;border-color:#1a3b06}#conflicts .solarized-dark .header.line_content.head.unselected,#conflicts .solarized-dark .diff-line-num.head.unselected{background-color:rgba(131,148,150,0.25);border-color:rgba(131,148,150,0.25)}#conflicts .solarized-dark .header.line_content.head.unselected button,#conflicts .solarized-dark .diff-line-num.head.unselected button{background-color:#55a632;border-color:#376b20}#conflicts .solarized-dark .line_content.origin{background-color:rgba(40,120,201,0.15)}#conflicts .solarized-dark .line_content.origin.selected{background-color:rgba(40,120,201,0.35)}#conflicts .solarized-dark .line_content.origin.unselected{background-color:rgba(131,148,150,0.15)}#conflicts .solarized-dark .line_content.head{background-color:rgba(133,153,0,0.15)}#conflicts .solarized-dark .line_content.head.selected{background-color:rgba(133,153,0,0.35)}#conflicts .solarized-dark .line_content.head.unselected{background-color:rgba(131,148,150,0.15)}#conflicts .diff-wrap-lines .line_content{white-space:normal;min-height:19px}#conflicts .line_content.header{position:relative}#conflicts .line_content.header button{border-radius:2px;font-size:10px;position:absolute;right:10px;padding:0;outline:none;color:#fff;width:75px;height:19px}#conflicts .btn-success .fa-spinner{color:#fff}#conflicts .editor-wrap.is-loading .editor{display:none}#conflicts .editor-wrap.is-loading .loading{display:block}#conflicts .editor-wrap.saved .editor{border-top:solid 2px #75d09b}#conflicts .editor-wrap .editor pre{height:350px;border:0;border-radius:0;margin-bottom:0}#conflicts .editor-wrap .loading{display:none}#conflicts .discard-changes-alert{background-color:#fafafa;text-align:right;padding:10px 16px;color:#2e2e2e}#conflicts .discard-changes-alert .discard-actions{display:inline-block;margin-left:10px}#conflicts .resolve-conflicts-form h4{margin-top:0}@media (max-width: 991px){#conflicts .resolve-conflicts-form .resolve-info{margin-bottom:16px}}.space-children::after{display:block;clear:both;content:""}.space-children>*{float:left}.space-children>*:not(:last-child){margin-right:10px}.mr-widget-heading{position:relative;border:1px solid #e5e5e5;border-radius:4px}.mr-widget-heading:not(.deploy-heading)::before{content:'';border-left:1px solid #dfdfdf;position:absolute;left:32px;top:-17px;height:16px}.mr-section-container{border:1px solid #e5e5e5;border-radius:4px;border-top:0}.mr-widget-heading,.mr-widget-section,.mr-widget-footer{padding:16px}.mr-state-widget{color:#2e2e2e}.mr-state-widget .mr-widget-section,.mr-state-widget .mr-widget-footer{border-top:solid 1px #e5e5e5}.mr-state-widget .mr-widget-footer{padding:0}.mr-state-widget form{margin-bottom:0}.mr-state-widget form .clearfix{margin-bottom:0}.mr-state-widget label{margin-bottom:0}.mr-state-widget .btn{font-size:14px}.mr-state-widget .btn[disabled]{opacity:0.3}.mr-state-widget .btn.dropdown-toggle .fa,.mr-state-widget .btn.dropdown-menu-toggle .fa{color:inherit}.mr-state-widget .accept-merge-holder .accept-action{display:inline-block;float:left}.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-pending,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-running{background-color:#1f78d1;border-color:#1b69b6;color:#fff}.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-pending:hover,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-pending:focus,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-running:hover,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-running:focus{background-color:#1b69b6;border-color:#17599c;color:#fff}.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-pending:active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-pending.active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-running:active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-running.active{box-shadow:rgba(0,0,0,0.16);background-color:#17599c;border-color:#134a81;color:#fff}.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-skipped,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-failed,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-canceled,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-error{background-color:#db3b21;border-color:#c0341d;color:#fff}.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-skipped:hover,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-skipped:focus,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-failed:hover,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-failed:focus,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-canceled:hover,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-canceled:focus,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-error:hover,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-error:focus{background-color:#c0341d;border-color:#a62d19;color:#fff}.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-skipped:active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-skipped.active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-failed:active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-failed.active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-canceled:active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-canceled.active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-error:active,.mr-state-widget .accept-merge-holder .accept-action .accept-merge-request.ci-error.active{box-shadow:rgba(0,0,0,0.16);background-color:#a62d19;border-color:#8b2615;color:#fff}.mr-state-widget .accept-merge-holder .accept-control{display:inline-block;float:left;margin:0;margin-left:20px;padding:5px;padding-top:8px;line-height:20px}.mr-state-widget .accept-merge-holder .accept-control.right{float:right;padding-right:0}.mr-state-widget .accept-merge-holder .accept-control .modify-merge-commit-link{padding:0;background-color:transparent;border:0;color:#2e2e2e}.mr-state-widget .accept-merge-holder .accept-control .modify-merge-commit-link:hover,.mr-state-widget .accept-merge-holder .accept-control .modify-merge-commit-link:focus{text-decoration:underline}.mr-state-widget .accept-merge-holder .accept-control .merge-param-checkbox{margin:0}.mr-state-widget .accept-merge-holder .accept-control a .fa-question-circle{color:#707070}.mr-state-widget .accept-merge-holder .accept-control a .fa-question-circle:hover,.mr-state-widget .accept-merge-holder .accept-control a .fa-question-circle:focus{color:#0056b3}.mr-state-widget .ci-widget{color:#2e2e2e;display:flex;align-items:center;justify-content:space-between}@media (max-width: 575.98px){.mr-state-widget .ci-widget{flex-wrap:wrap}}.mr-state-widget .ci-widget .ci-widget-content{display:flex;align-items:center}.mr-state-widget .mr-widget-icon{font-size:22px;margin-right:10px}.mr-state-widget .ci-status-icon svg{margin:3px 0;position:relative;overflow:visible;display:block}.mr-state-widget .mr-widget-pipeline-graph .dropdown-menu{z-index:300}.mr-state-widget .mini-pipeline-graph-dropdown-toggle{vertical-align:top}.mr-state-widget .normal{flex:1}.mr-state-widget .capitalize{text-transform:capitalize}.mr-state-widget .label-branch{color:#2e2e2e;font-weight:normal;overflow:hidden;word-break:break-all}.mr-state-widget .label-branch.label-truncated{position:relative;display:inline-block;width:250px;margin-bottom:-3px;white-space:nowrap;text-overflow:clip;line-height:14px}.mr-state-widget .label-branch.label-truncated::after{position:absolute;content:'...';right:0;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";background-color:#fafafa}.mr-state-widget .widget-status-icon{align-self:flex-start}.mr-state-widget .mr-widget-body{line-height:28px}.mr-state-widget .mr-widget-body::after{display:block;clear:both;content:""}.mr-state-widget .mr-widget-body.media>*:first-child{margin-right:10px}.mr-state-widget .mr-widget-body .approve-btn{margin-right:5px}.mr-state-widget .mr-widget-body h4{float:left;font-weight:600;font-size:14px;line-height:inherit;margin-top:0;margin-bottom:0}.mr-state-widget .mr-widget-body h4.has-conflicts .fa-exclamation-triangle,.mr-state-widget .mr-widget-body h4.has-conflicts .admonitionblock td.icon .icon-warning,.admonitionblock td.icon .mr-state-widget .mr-widget-body h4.has-conflicts .icon-warning{color:#fc9403}.mr-state-widget .mr-widget-body h4 time{font-weight:400}.mr-state-widget .mr-widget-body .btn-grouped{margin-left:0;margin-right:7px}.mr-state-widget .mr-widget-body label{font-weight:400}.mr-state-widget .mr-widget-body .spacing{margin:0 0 0 10px}.mr-state-widget .mr-widget-body .bold{font-weight:600;color:#5c5c5c}.mr-state-widget .mr-widget-body .state-label{font-weight:600;padding-right:10px}.mr-state-widget .mr-widget-body .danger{color:#db3b21}.mr-state-widget .mr-widget-body .spacing,.mr-state-widget .mr-widget-body .bold{vertical-align:middle}.mr-state-widget .mr-widget-body .dropdown-menu li a{padding:5px}.mr-state-widget .mr-widget-body .dropdown-menu .merge-opt-icon{line-height:1.5}.mr-state-widget .mr-widget-body .dropdown-menu .merge-opt-title{margin-left:8px}.mr-state-widget .mr-widget-body .dropdown-toggle .fa,.mr-state-widget .mr-widget-body .dropdown-menu-toggle .fa{margin-left:0;color:inherit}.mr-state-widget .mr-widget-body .has-custom-error{display:inline-block}@media (max-width: 575.98px){.mr-state-widget .mr-widget-body p{font-size:13px}.mr-state-widget .mr-widget-body .btn-grouped{float:none;margin-right:0}.mr-state-widget .mr-widget-body .accept-action{width:100%;text-align:center}.mr-state-widget .mr-widget-body .accept-control{width:100%;text-align:center;margin:0}}.mr-state-widget .mr-widget-body .commit-message-editor label{padding:0}.mr-state-widget .mr-widget-body.mr-widget-empty-state{line-height:20px}.mr-state-widget .mr-widget-body.mr-widget-empty-state .artwork{margin-bottom:16px}.mr-state-widget .mr-widget-body.mr-widget-empty-state .text span{font-weight:600}.mr-state-widget .mr-widget-body.mr-widget-empty-state .text p{margin-top:16px}.mr-state-widget .mr-widget-help{padding:10px 16px 10px 48px;font-style:italic}.mr-state-widget .ci-coverage{float:right}.mr-state-widget .stop-env-container{color:#2e2e2e;float:right}.mr-state-widget .stop-env-container a{color:#2e2e2e}.mr-widget-body-controls{flex-wrap:wrap}.mr_source_commit,.mr_target_commit{margin-bottom:0}.mr_source_commit .commit,.mr_target_commit .commit{margin:0;padding:10px;list-style:none}.mr_source_commit .commit:hover,.mr_target_commit .commit:hover{background:none}.commits-empty{text-align:center}.commits-empty h4{padding-top:20px;padding-bottom:10px}.commits-empty svg{width:230px}.nothing-here-block img{width:230px}.mr-list .merge-request{padding:10px 0 10px 15px;position:relative;display:-webkit-flex;display:flex}.mr-list .merge-request .issue-info-container{-webkit-flex:1;flex:1}.mr-list .merge-request .merge-request-title{margin-bottom:2px}.mr-list .merge-request .merge-request-title .ci-status-link svg{height:16px;width:16px;position:relative;top:3px}.mr-list .merge-request .merge-request-title .ci-status-link:hover,.mr-list .merge-request .merge-request-title .ci-status-link:focus{text-decoration:none}.mr-list .merge-request-labels{display:inline-block}.merge-request-angle{text-align:center;margin:0 auto;font-size:2em;line-height:1.1}.diff-file .close-mr-link,.diff-file .reopen-mr-link{display:none}#modal_merge_info .modal-dialog .dark,#modal_merge_info .modal-no-backdrop .dark{margin-right:40px}#modal_merge_info .modal-dialog .btn-clipboard,#modal_merge_info .modal-no-backdrop .btn-clipboard{margin-right:20px;margin-top:5px;position:absolute;right:0}.mr-links{padding-left:32px}.mr-info-list{clear:left;position:relative;padding-top:4px}.mr-info-list p{margin:0;position:relative;padding:4px 0}.mr-info-list p:last-child{padding-bottom:0}.mr-info-list.mr-memory-usage p{float:left}.mr-info-list.mr-memory-usage .memory-graph-container{float:left;margin-left:5px}.mr-source-target{display:flex;flex-wrap:wrap;border-radius:4px;padding:16px;border:1px solid #e5e5e5;min-height:69px}@media (min-width: 768px){.mr-source-target{align-items:center}}.mr-source-target .dropdown-toggle .fa,.mr-source-target .dropdown-menu-toggle .fa{color:#2e2e2e}.mr-source-target .git-merge-icon-container{border:1px solid #bababa;border-radius:50%;height:32px;width:32px;color:#707070;line-height:28px}.mr-source-target .git-merge-icon-container .ic-git-merge{vertical-align:middle;width:31px}.mr-source-target .git-merge-container{justify-content:space-between;flex:1;flex-direction:row;align-items:center}@media (max-width: 991.98px){.mr-source-target .git-merge-container{flex-direction:column;align-items:flex-start}.mr-source-target .git-merge-container .branch-actions{margin-top:16px}}@media (min-width: 992px){.mr-source-target .git-merge-container .branch-actions{align-self:center}}.mr-source-target .diverged-commits-count{color:#707070;font-size:12px}.card-new-merge-request .card-header{padding:5px 10px;font-weight:600;line-height:25px}.card-new-merge-request .card-body{padding:10px 5px}.card-new-merge-request .card-footer{padding:0}.card-new-merge-request .card-footer .btn{min-width:auto}.card-new-merge-request .commit .commit-row-title{margin-bottom:4px}@media (min-width: 576px){.card-new-merge-request .commit .item-title{width:45%}}.card-new-merge-request .commit .avatar{left:0;top:2px}.card-new-merge-request .btn-clipboard{margin-right:5px;padding:0;background:transparent}.card-new-merge-request .ci-status-link{margin-right:5px}.merge-request-select{padding-left:5px;padding-right:5px;margin-bottom:10px;float:left;width:50%;margin-bottom:0}.merge-request-select:last-child{margin-bottom:0}.merge-request-select .dropdown-menu-toggle{width:100%}.merge-request-select .dropdown-menu{left:5px;right:5px;width:auto}.issuable-form-select-holder{display:inline-block;width:250px}.issuable-form-select-holder .dropdown-menu-toggle{width:100%}.target-branch-select-dropdown-container{position:relative}.assign-to-me-link{padding-left:12px;white-space:nowrap}.table-holder .ci-table th{background-color:#fff;color:#707070}.merged-buttons .btn{float:left}.mr-version-controls{position:relative;background:#fafafa;color:#2e2e2e}.mr-version-controls .mr-version-menus-container{display:flex;align-items:center;padding:16px;z-index:199}.mr-version-controls .content-block{padding:10px 16px}.mr-version-controls .comments-disabled-notif{line-height:28px}.mr-version-controls .comments-disabled-notif .btn{margin-left:5px}.mr-version-controls .mr-version-dropdown,.mr-version-controls .mr-version-compare-dropdown{margin:0 7px}.mr-version-controls .dropdown-title{color:#2e2e2e}.mr-version-controls .fa-info-circle{color:#fc9403;padding-right:5px}.merge-request-tabs-holder{top:40px;z-index:200;background-color:#fff;border-bottom:1px solid #e5e5e5}@media (min-width: 576px){.merge-request-tabs-holder{position:sticky;position:-webkit-sticky}}.merge-request-tabs-holder.affix{left:0;transition:right .15s}@media (max-width: 575.98px){.merge-request-tabs-holder.affix{right:0}}.merge-request-tabs-holder.affix .merge-request-tabs-container{padding-left:16px;padding-right:16px}.merge-request-tabs-holder .nav-links{border:0}.with-performance-bar .merge-request-tabs-holder{top:75px}.merge-request-tabs{display:flex;flex-wrap:nowrap;margin-bottom:0;padding:0}.limit-container-width .merge-request-tabs-container{max-width:990px;margin-left:auto;margin-right:auto}.limit-container-width .merge-request-tabs-container .inner-page-scroll-tabs{background-color:#fff;margin-left:-16px;padding-left:16px}.merge-request-tabs-container{display:flex;justify-content:space-between}@media (max-width: 575.98px){.merge-request-tabs-container{flex-direction:column-reverse}}.limit-container-width:not(.container-limited) .merge-request-tabs-holder:not(.affix) .merge-request-tabs-container{max-width:958px}.mr-memory-usage{width:100%}.mr-memory-usage p.usage-info-loading .usage-info-load-spinner{margin-right:10px;font-size:16px}.fork-sprite{margin-right:-5px}.deploy-heading{margin-top:-19px;border-top-left-radius:0;border-top-right-radius:0;background-color:#fafafa}@media (min-width: 768px){.deploy-heading{padding:8px 16px}}.deploy-heading .media-body{min-width:0;font-size:12px;margin-left:48px}.deploy-body{display:flex;align-items:center;flex-wrap:wrap;flex-wrap:nowrap;white-space:nowrap}@media (max-width: 991.98px){.deploy-body{flex-direction:column;align-items:flex-start}.deploy-body .deployment-info{margin-bottom:16px}}.deploy-body>*:not(:last-child){margin-right:.3em}.deploy-body svg{vertical-align:text-top}.deploy-body .deployment-info{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:100px;min-width:0;max-width:100%}.deploy-body .btn svg{fill:#707070}.btn-link-retry[disabled]{cursor:not-allowed;box-shadow:none;opacity:.65}.btn-link-retry[disabled]:hover{color:#777;text-decoration:none}.ci-widget-container{justify-content:space-between;flex:1;flex-direction:row}@media (max-width: 991.98px){.ci-widget-container{flex-direction:column}.ci-widget-container .stage-cell .stage-container{margin-top:16px}.ci-widget-container .dropdown .mini-pipeline-graph-dropdown-menu.dropdown-menu{transform:initial}}.ci-widget-container .coverage{font-size:12px;color:#707070;line-height:initial}.ci-widget-container .mini-pipeline-graph-dropdown-toggle,.ci-widget-container .stage-cell .mini-pipeline-graph-dropdown-toggle svg{height:24px;width:24px}.issues-sortable-list .str-truncated{max-width:90%}.milestones{padding:8px;margin-top:8px;border-radius:4px;background-color:#f2f2f2}.milestones .milestone{border:0;padding:10px 16px;border-radius:4px;background-color:#fff}.milestones .milestone:not(:last-child){margin-bottom:4px}.milestones .milestone h4{font-weight:600}.milestones .milestone .progress{width:100%;height:6px;margin-bottom:4px}.milestones .milestone .milestone-progress a{color:#1b69b6}.milestones .milestone .status-box{font-size:12px;margin-top:0;margin-right:4px}@media (max-width: 575.98px){.milestones .milestone .status-box{line-height:unset;padding:4px 10px}}.milestone-content .issues-count{margin-right:17px;float:right;width:105px}.milestone-content .issuable-row span a{color:#2e2e2e;word-wrap:break-word}.milestone-content .card-header{line-height:1.5;padding:14px 16px;display:-webkit-flex;display:flex}.milestone-content .card-header .title{-webkit-flex:1;-webkit-flex-grow:1;flex:1;flex-grow:2}.milestone-content .card-header .counter{-webkit-flex:1;flex:0;padding-left:16px}.milestone-sidebar .milestone-progress .title{padding-top:5px}.milestone-sidebar .milestone-progress .progress{height:6px;margin:0}.milestone-sidebar .milestone-progress .sidebar-collapsed-icon{clear:both;padding:15px 5px 5px}.milestone-sidebar .milestone-progress .sidebar-collapsed-icon .progress{margin:5px 0}.milestone-sidebar .collapsed-milestone-date{font-size:12px}.milestone-sidebar .milestone-date{display:block}.milestone-sidebar .date-separator{line-height:5px}.milestone-sidebar .remaining-days strong{font-weight:400}.milestone-sidebar .milestone-stat{float:left;margin-right:14px}.milestone-sidebar .milestone-stat:last-child{margin-right:0}.right-sidebar-expanded .milestone-sidebar .gutter-toggle{margin-bottom:10px}.right-sidebar-collapsed .milestone-sidebar .milestone-progress{padding-top:0}.right-sidebar-collapsed .milestone-sidebar .reference{border-top:1px solid #e8e8e8}.milestone-issues-list .issuable-detail,.milestone-merge_requests-list .issuable-detail{display:block;margin-top:7px}.milestone-issues-list .issuable-detail .issue-link,.milestone-merge_requests-list .issuable-detail .issue-link{display:inline-block}.milestone-issues-list .issuable-detail .issuable-number,.milestone-merge_requests-list .issuable-detail .issuable-number{color:#707070;margin-right:5px}.milestone-issues-list .issuable-detail .avatar,.milestone-merge_requests-list .issuable-detail .avatar{float:none}.milestone-issues-list .issuable-detail>a:not(:last-of-type),.milestone-merge_requests-list .issuable-detail>a:not(:last-of-type){margin-right:5px}.milestone-detail{border-bottom:1px solid #e5e5e5;padding:20px 0}@media (max-width: 575.98px){.milestone-actions{padding-top:6px}.milestone-actions::after{display:block;clear:both;content:""}.milestone-actions .btn:first-child{margin-left:0}}.milestone-page-header{display:flex;flex-flow:row;align-items:center;flex-wrap:wrap}.milestone-page-header .status-box{margin-top:0;order:1}.milestone-page-header .milestone-buttons{margin-left:auto;order:2}.milestone-page-header .milestone-buttons .verbose{display:none}.milestone-page-header .header-text-content{order:3;width:100%}.milestone-page-header .milestone-buttons .verbose{display:inline}.milestone-page-header .header-text-content{order:2;width:auto}.milestone-page-header .milestone-buttons{order:3}.issuable-row{background-color:#fff}.milestone-deprecation-message .popover{padding:0}.milestone-deprecation-message .popover-content{padding:0}.milestone-popover-body{padding:8px;background-color:#fafafa}.milestone-popover-footer{padding:8px 16px;border-top:1px solid #eaeaea}.milestone-popover-instructions-list{padding-left:2em}.milestone-popover-instructions-list>li{padding-left:1em}.milestone-range{color:#919191}@media (max-width: 575.98px){.milestone-banner-text,.milestone-banner-link{display:inline}}.diff-file .diff-content tr.line_holder:hover>td .line_note_link{opacity:1;filter:alpha(opacity=100)}.diff-file .new-note,.discussion .new-note{margin:0;border:0}.new-note .note-form-actions,.note-edit-form .note-form-actions{position:relative;margin:16px 0 0}.new-note .note-preview-holder>p,.note-edit-form .note-preview-holder>p{overflow-x:auto}.new-note img,.note-edit-form img{max-width:100%}.note-textarea{display:block;padding:10px 0;color:#2e2e2e;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";border:0}.note-textarea:focus{outline:0}.note-image-attach{margin-left:45px;float:none}.common-note-form .md-area{padding:10px 16px;border:1px solid #e5e5e5;border-radius:3px;transition:border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s}.common-note-form .md-area.is-focused .comment-toolbar,.common-note-form .md-area.is-focused .nav-links{border-color:#73afea}.common-note-form .md-area.is-dropzone-hover{border-color:#1aaa55;box-shadow:0 0 2px rgba(0,0,0,0.3),0 0 4px rgba(26,170,85,0.4)}.common-note-form .md-area.is-dropzone-hover .comment-toolbar,.common-note-form .md-area.is-dropzone-hover .nav-links{border-color:#1aaa55}.md-header .nav-links{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap;width:100%}.md-header .nav-links .float-right{margin-left:auto}.issuable-note-warning{color:#de7e00;background-color:#fff1de;border-radius:4px 4px 0 0;border:1px solid #e8e8e8;border-bottom:0;padding:3px 12px;margin:auto;align-items:center}.issuable-note-warning .icon{margin-right:4px;vertical-align:text-bottom;fill:#de7e00}.issuable-note-warning+.md-area{border-top-left-radius:0;border-top-right-radius:0}.issuable-note-warning .disabled-comment{border:0;border-radius:100px;padding-top:6px;padding-bottom:6px}.issuable-note-warning .disabled-comment .icon svg{position:relative;top:2px;margin-right:5px;width:14px;height:14px;fill:#de7e00}.sidebar-item-icon{border-radius:4px;margin:0 5px 0 0;vertical-align:text-bottom}.sidebar-item-icon.is-active{fill:#de7e00}.sidebar-collapsed-icon .sidebar-item-icon{margin:0}.sidebar-item-value .sidebar-item-icon{fill:#707070}.sidebar-item-warning-message{line-height:1.5;padding:16px}.sidebar-item-warning-message .text{color:#2e2e2e}.sidebar-item-warning-message .sidebar-item-warning-message-actions{display:flex}.sidebar-item-warning-message .sidebar-item-warning-message-actions .btn{flex-grow:1}.discussion-form{background-color:#fff}.discussion-form-container{padding:10px 16px 16px}.discussion-notes .disabled-comment{padding:6px 0}@media (max-width: 767px){.notes.notes-form>li.timeline-entry{padding:0}}@media (max-width: 1534px){.notes_content.parallel .notes.notes-form>li.timeline-entry{padding:0}}@media (max-width: 767px){.notes.notes-form>li.timeline-entry .timeline-content{margin:0}}@media (max-width: 1534px){.notes_content.parallel .notes.notes-form>li.timeline-entry .timeline-content{margin:0}}.notes.notes-form>li.timeline-entry .timeline-entry-inner{border:0}.note-edit-form{display:none;font-size:14px}.note-edit-form .md-area{background-color:#fff}.js-note-attachment-delete{display:none}.parallel-comment{padding:6px}.error-alert>.alert,.flash-container .error-alert>.flash-notice,.flash-container .error-alert>.flash-warning,.flash-container .error-alert>.flash-alert,.flash-container .error-alert>.flash-success{margin-top:5px;margin-bottom:5px}.error-alert>.alert.alert-dismissable .close,.flash-container .error-alert>.alert-dismissable.flash-notice .close,.flash-container .error-alert>.alert-dismissable.flash-warning .close,.flash-container .error-alert>.alert-dismissable.flash-alert .close,.flash-container .error-alert>.alert-dismissable.flash-success .close{color:#fff;opacity:0.85;font-weight:400}.error-alert>.alert.alert-dismissable .close:hover,.flash-container .error-alert>.alert-dismissable.flash-notice .close:hover,.flash-container .error-alert>.alert-dismissable.flash-warning .close:hover,.flash-container .error-alert>.alert-dismissable.flash-alert .close:hover,.flash-container .error-alert>.alert-dismissable.flash-success .close:hover{opacity:1}.discussion-body .discussion-reply-holder,.diff-file .discussion-reply-holder{background-color:#fff;padding:10px 16px}.discussion-body .discussion-reply-holder.is-replying,.diff-file .discussion-reply-holder.is-replying{padding-bottom:16px}.discussion-with-resolve-btn .discussion-actions{display:table}.discussion-with-resolve-btn .discussion-actions .btn-default path{fill:#c4c4c4}.discussion-with-resolve-btn .discussion-actions .btn-group{display:table-cell}.discussion-with-resolve-btn .discussion-actions .btn-group:first-child{padding-right:0}.discussion-with-resolve-btn .discussion-actions .btn-group:first-child:not(:last-child)>div{border-right:0}.discussion-with-resolve-btn .btn{width:100%}.discussion-notes-count{font-size:16px}.edit_note .markdown-area{min-height:140px;max-height:500px}.edit_note .note-form-actions{background:transparent}.comment-toolbar{padding-top:10px;color:#707070;border-top:1px solid #e5e5e5}.md-helper{padding-top:10px}.toolbar-button{padding:0;background:none;border:0;font-size:14px;line-height:16px}.toolbar-button:hover,.toolbar-button:focus{color:#1b69b6;outline:0}@media (min-width: 768px){.toolbar-button{float:left;margin-right:16px}.toolbar-button:last-child{float:right;margin-right:0}}.toolbar-button-icon{position:relative;top:1px;margin-right:3px;color:inherit;font-size:16px}.toolbar-text{font-size:14px;line-height:16px;margin-top:2px}@media (min-width: 768px){.toolbar-text{float:left}}@media (max-width: 575.98px){.note-form-actions .btn{float:none;width:100%}.note-form-actions .btn:not(:last-child){margin-bottom:10px}}.note-edit-warning.settings-message{display:none;padding:5px 10px;position:absolute;left:127px;top:2px}@media (max-width: 575.98px){.note-edit-warning.settings-message{position:relative;top:0;left:0;margin-bottom:10px}}.comment-type-dropdown .comment-btn{width:auto}.comment-type-dropdown .dropdown-toggle,.comment-type-dropdown .dropdown-menu-toggle{float:right}.comment-type-dropdown .dropdown-toggle i,.comment-type-dropdown .dropdown-menu-toggle i{color:#fff;padding-right:2px;margin-top:2px}.comment-type-dropdown .dropdown-toggle[disabled] i,.comment-type-dropdown [disabled].dropdown-menu-toggle i{color:#919191}.comment-type-dropdown .dropdown-menu{top:initial;bottom:100%;width:298px}@media (max-width: 575.98px){.comment-type-dropdown{display:flex;width:100%;margin-bottom:10px}.comment-type-dropdown .comment-btn{flex-grow:1;flex-shrink:0;width:auto}.comment-type-dropdown .dropdown-toggle,.comment-type-dropdown .dropdown-menu-toggle{flex-grow:0;flex-shrink:1;width:auto}}.uploading-container{float:right}@media (max-width: 575.98px){.uploading-container{float:left;margin-top:5px}}.uploading-error-icon,.uploading-error-message{color:#db3b21}@media (max-width: 575.98px){.uploading-error-message::after{content:"\a";white-space:pre}}.uploading-progress{margin-right:5px}.attach-new-file,.button-attach-file,.retry-uploading-link{color:#1b69b6;padding:0;background:none;border:0;font-size:14px;line-height:16px}.markdown-selector{color:#1b69b6}@-webkit-keyframes targe3-note{from{background:#fffff0}50%{background:#ffffd3}to{background:#fffff0}}ul.notes{display:block;list-style:none;margin:0;padding:0}ul.notes .note-created-ago,ul.notes .note-updated-at{white-space:normal}ul.notes .discussion-body{padding-top:8px}ul.notes .discussion-body .card,ul.notes .discussion-body .card-slim{margin-bottom:0}ul.notes .discussion{display:block;position:relative}ul.notes .discussion .diff-content{overflow:visible;padding:0}ul.notes>li{padding:0;display:block;position:relative;border-bottom:0}@media (min-width: 576px){ul.notes>li{padding-left:55px}}@media (min-width: 1152px){.notes_content.parallel ul.notes>li{padding-left:55px}}ul.notes>li .timeline-entry-inner{padding:16px 10px;border-bottom:1px solid #f0f0f0}ul.notes>li:target,ul.notes>li.target{border-bottom:1px solid #f0f0f0}ul.notes>li:target:not(:first-child),ul.notes>li.target:not(:first-child){border-top:1px solid #f0f0f0;margin-top:-1px}ul.notes>li:target .timeline-entry-inner,ul.notes>li.target .timeline-entry-inner{border-bottom:0}@media (min-width: 576px){ul.notes>li .timeline-icon{margin-left:-55px}}@media (min-width: 1152px){.notes_content.parallel ul.notes>li .timeline-icon{margin-left:-55px}}ul.notes>li .timeline-content{margin-left:55px}@media (min-width: 576px){ul.notes>li .timeline-content{margin-left:0}}@media (min-width: 1152px){.notes_content.parallel ul.notes>li .timeline-content{margin-left:0}}ul.notes>li.being-posted{pointer-events:none;opacity:0.5}ul.notes>li.being-posted .dummy-avatar{background-color:#ccc;border:1px solid #8c8c8c}ul.notes>li.being-posted .note-headline-light,ul.notes>li.being-posted .fa-spinner{margin-left:3px}ul.notes>li.note-discussion .timeline-entry-inner{padding:16px 10px}ul.notes>li .editing-spinner{display:none}ul.notes>li.is-requesting .note-timestamp{display:none}ul.notes>li.is-requesting .editing-spinner{display:inline-block}ul.notes>li.is-editing .note-header,ul.notes>li.is-editing .note-text,ul.notes>li.is-editing .edited-text{display:none}ul.notes>li.is-editing .note-edit-form{display:block}ul.notes>li.is-editing .note-edit-form.current-note-edit-form+.note-awards{display:none}ul.notes>li .note-body{overflow-x:auto;overflow-y:hidden}ul.notes>li .note-body .note-text{color:#2e2e2e;word-wrap:break-word;word-wrap:break-word}ul.notes>li .note-body .note-text [dir="auto"]{text-align:initial}ul.notes>li .note-body .note-text a{color:#1b69b6}ul.notes>li .note-body .note-text img:not(.emoji){margin:0 0 8px}ul.notes>li .note-body .note-text img.lazy{min-width:200px;min-height:100px;background-color:#fdfdfd}ul.notes>li .note-body .note-text img.js-lazy-loaded,ul.notes>li .note-body .note-text img.emoji{min-width:inherit;min-height:inherit;background-color:inherit;max-width:100%}ul.notes>li .note-body .note-text p a:not(.no-attachment-icon) img{margin-bottom:0}ul.notes>li .note-body .note-text *:first-child:not(.katex-display){margin-top:0}ul.notes>li .note-body .note-text>:last-child{margin-bottom:0}ul.notes>li .note-body .note-text code{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace;white-space:pre-wrap;word-wrap:normal}ul.notes>li .note-body .note-text pre code{white-space:pre}ul.notes>li .note-body .note-text kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border-width:1px;border-style:solid;border-color:#ccc #ccc #bbb;border-image:none;border-radius:3px;box-shadow:0 -1px 0 #bbb inset}ul.notes>li .note-body .note-text h1{font-size:1.75em;font-weight:600;margin:24px 0 16px;padding-bottom:0.3em;border-bottom:1px solid #eaeaea;color:#2e2e2e}ul.notes>li .note-body .note-text h1:first-child{margin-top:0}ul.notes>li .note-body .note-text h2{font-size:1.5em;font-weight:600;margin:24px 0 16px;padding-bottom:0.3em;border-bottom:1px solid #eaeaea;color:#2e2e2e}ul.notes>li .note-body .note-text h3{margin:24px 0 16px;font-size:1.3em}ul.notes>li .note-body .note-text h4{margin:24px 0 16px;font-size:1.2em}ul.notes>li .note-body .note-text h5{margin:24px 0 16px;font-size:1em}ul.notes>li .note-body .note-text h6{margin:24px 0 16px;font-size:0.95em}ul.notes>li .note-body .note-text blockquote,ul.notes>li .note-body .note-text .blockquote{color:#7f8fa4;font-size:inherit;padding:8px 24px;margin:16px 0;border-left:3px solid #eaeaea}ul.notes>li .note-body .note-text blockquote:dir(rtl),ul.notes>li .note-body .note-text .blockquote:dir(rtl){border-left:0;border-right:3px solid #eaeaea}ul.notes>li .note-body .note-text blockquote p,ul.notes>li .note-body .note-text .blockquote p{color:#7f8fa4 !important;font-size:inherit;line-height:1.5}ul.notes>li .note-body .note-text blockquote p:last-child,ul.notes>li .note-body .note-text .blockquote p:last-child{margin:0}ul.notes>li .note-body .note-text p{color:#2e2e2e;margin:0 0 16px}ul.notes>li .note-body .note-text table{margin:16px 0;color:#2e2e2e}ul.notes>li .note-body .note-text table th{background:#f8fafc}ul.notes>li .note-body .note-text table:dir(rtl) th{text-align:right}ul.notes>li .note-body .note-text pre{margin-bottom:16px;font-size:13px;line-height:1.6em;overflow-x:auto;border-radius:2px}ul.notes>li .note-body .note-text pre.plain-readme{background:none;border:0;padding:0;margin:0;font-size:14px}ul.notes>li .note-body .note-text p>code{font-weight:inherit}ul.notes>li .note-body .note-text dd{margin-left:16px}ul.notes>li .note-body .note-text ul,ul.notes>li .note-body .note-text ol{padding:0;margin:0 0 16px}ul.notes>li .note-body .note-text ul:dir(rtl),ul.notes>li .note-body .note-text ol:dir(rtl){margin:3px 28px 3px 0 !important}ul.notes>li .note-body .note-text li{line-height:1.6em;margin-left:25px;padding-left:3px}@media screen and (-webkit-min-device-pixel-ratio: 0){ul.notes>li .note-body .note-text li{margin-left:28px;padding-left:0}}ul.notes>li .note-body .note-text ul.task-list>li.task-list-item{list-style-type:none;position:relative;min-height:22px;padding-left:28px;margin-left:0 !important}ul.notes>li .note-body .note-text ul.task-list>li.task-list-item>input.task-list-item-checkbox{position:absolute;left:8px;top:5px}ul.notes>li .note-body .note-text a[href*="/uploads/"]::before,ul.notes>li .note-body .note-text a[href*="storage.googleapis.com/google-code-attachments/"]::before{margin-right:4px;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;content:"\f0c6"}ul.notes>li .note-body .note-text a[href*="/uploads/"]:hover::before,ul.notes>li .note-body .note-text .participants-more [href*="/uploads/"].btn-link:hover::before,.participants-more ul.notes>li .note-body .note-text [href*="/uploads/"].btn-link:hover::before,ul.notes>li .note-body .note-text .user-list-more [href*="/uploads/"].btn-link:hover::before,.user-list-more ul.notes>li .note-body .note-text [href*="/uploads/"].btn-link:hover::before,ul.notes>li .note-body .note-text a[href*="storage.googleapis.com/google-code-attachments/"]:hover::before,ul.notes>li .note-body .note-text .participants-more [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before,.participants-more ul.notes>li .note-body .note-text [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before,ul.notes>li .note-body .note-text .user-list-more [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before,.user-list-more ul.notes>li .note-body .note-text [href*="storage.googleapis.com/google-code-attachments/"].btn-link:hover::before{text-decoration:none}ul.notes>li .note-body .note-text a.no-attachment-icon::before{display:none}ul.notes>li .note-body .note-text h1,ul.notes>li .note-body .note-text h2,ul.notes>li .note-body .note-text h3,ul.notes>li .note-body .note-text h4,ul.notes>li .note-body .note-text h5,ul.notes>li .note-body .note-text h6{position:relative}ul.notes>li .note-body .note-text h1 a.anchor,ul.notes>li .note-body .note-text h2 a.anchor,ul.notes>li .note-body .note-text h3 a.anchor,ul.notes>li .note-body .note-text h4 a.anchor,ul.notes>li .note-body .note-text h5 a.anchor,ul.notes>li .note-body .note-text h6 a.anchor{left:-16px;position:absolute;text-decoration:none;outline:none}ul.notes>li .note-body .note-text h1 a.anchor::after,ul.notes>li .note-body .note-text h2 a.anchor::after,ul.notes>li .note-body .note-text h3 a.anchor::after,ul.notes>li .note-body .note-text h4 a.anchor::after,ul.notes>li .note-body .note-text h5 a.anchor::after,ul.notes>li .note-body .note-text h6 a.anchor::after{content:url(./icon_anchor-297aa9b0225eff3d6d0da74ce042a0ed5575b92aa66b7109a5e060a795b42e36.svg);visibility:hidden}ul.notes>li .note-body .note-text h1:hover>a.anchor::after,ul.notes>li .note-body .note-text h2:hover>a.anchor::after,ul.notes>li .note-body .note-text h3:hover>a.anchor::after,ul.notes>li .note-body .note-text h4:hover>a.anchor::after,ul.notes>li .note-body .note-text h5:hover>a.anchor::after,ul.notes>li .note-body .note-text h6:hover>a.anchor::after{visibility:visible}ul.notes>li .note-body .note-text>ul{list-style-type:disc}ul.notes>li .note-body .note-text>ul ul{list-style-type:circle}ul.notes>li .note-body .note-text>ul ul ul{list-style-type:square}ul.notes>li .note-body .note-text table{width:auto;display:inline-block;overflow-x:auto;border:0;border-color:#ddd}@supports (width: fit-content){ul.notes>li .note-body .note-text table{display:block;width:fit-content}}ul.notes>li .note-body .note-text table tr th{border-bottom:solid 2px #ddd}ul.notes>li .note-body .note-text table tr td{border-color:#ddd}ul.notes>li .note-awards .js-awards-block{margin-top:16px}@media (max-width: 0){ul.notes>li .note-header .inline{display:block}}@media (max-width: 0){.notes_content.parallel ul.notes>li .note-header .inline{display:block}}ul.notes>li .note-emoji-button{position:relative;line-height:1}ul.notes>li .note-emoji-button .fa-spinner{display:none}ul.notes>li .note-emoji-button.is-loading .fa-smile-o{display:none}ul.notes>li .note-emoji-button.is-loading .fa-spinner{display:inline-block}ul.notes .system-note{font-size:14px;clear:both}ul.notes .system-note .note-header-info{padding-bottom:0}ul.notes .system-note.timeline-entry::after{clear:none}ul.notes .system-note .system-note-message{display:inline}ul.notes .system-note .system-note-message::first-letter{text-transform:lowercase}ul.notes .system-note .system-note-message a{color:#1b69b6}ul.notes .system-note .system-note-message p{display:inline;margin:0}ul.notes .system-note .system-note-message p::first-letter{text-transform:lowercase}ul.notes .system-note .timeline-icon{float:left}@media (min-width: 576px){ul.notes .system-note .timeline-icon{margin-left:0;width:auto}}@media (min-width: 1152px){.notes_content.parallel ul.notes .system-note .timeline-icon{margin-left:0;width:auto}}ul.notes .system-note .timeline-icon svg{width:16px;height:16px;fill:#c4c4c4;margin-top:2px}@media (min-width: 576px){ul.notes .system-note .timeline-content{margin-left:30px}}@media (min-width: 1152px){.notes_content.parallel ul.notes .system-note .timeline-content{margin-left:30px}}ul.notes .system-note .note-header{padding-bottom:0}ul.notes .system-note .note-body{overflow:hidden}ul.notes .system-note .note-body .system-note-commit-list-toggler{color:#1b69b6;padding:10px 0 0;cursor:pointer;position:relative;z-index:2}ul.notes .system-note .note-body .system-note-commit-list-toggler:hover{color:#1b69b6;text-decoration:underline}ul.notes .system-note .note-body .note-text p:first-child{display:none}ul.notes .system-note .note-body .note-text.system-note-commit-list:not(.hide-shade){max-height:70px;overflow:hidden;display:block}ul.notes .system-note .note-body .note-text.system-note-commit-list:not(.hide-shade) ul{margin:3px 0 3px 16px !important}ul.notes .system-note .note-body .note-text.system-note-commit-list:not(.hide-shade) p:first-child{display:none}ul.notes .system-note .note-body .note-text.system-note-commit-list:not(.hide-shade)::after{content:'';width:100%;height:70px;position:absolute;left:0;bottom:0;background:linear-gradient(rgba(255,255,255,0.1) -100px, #fff 100%)}.discussion-body .diff-file .file-title{cursor:default}.discussion-body .diff-file .file-title:hover{background-color:#fafafa}.discussion-body .diff-file .line_content{white-space:pre-wrap}.diff-file .is-over .add-diff-note{display:inline-block}.diff-file .notes_content .note-header .note-headline-light{display:inline-block;position:relative}.diff-file .notes_holder{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"}.diff-file .notes_holder td{border:1px solid #f0f0f0;border-left:0}.diff-file .notes_holder td.notes_line{vertical-align:middle;text-align:center;padding:10px 0;background:#fafafa;color:#2e2e2e}.diff-file .notes_holder td.notes_line2{text-align:center;padding:10px 0;border-left:1px solid #ddd !important}.diff-file .notes_holder td.notes_content{background-color:#fafafa;border-width:1px 0;padding:0;vertical-align:top;white-space:normal}.diff-file .notes_holder td.notes_content.parallel{border-width:1px}.diff-file .notes_holder td.notes_content .discussion-notes:not(:first-child){border-top:1px solid #f0f0f0;margin-top:20px}.diff-file .notes_holder td.notes_content .discussion-notes:not(:last-child){border-bottom:1px solid #f0f0f0;margin-bottom:20px}.diff-file .notes_holder td.notes_content .notes{background-color:#fff}.diff-file .notes_holder td.notes_content a code{top:0;margin-right:0}.discussion-header a,.note-header-info a{color:inherit}.discussion-header a:hover,.discussion-header .participants-more .btn-link:hover,.participants-more .discussion-header .btn-link:hover,.discussion-header .user-list-more .btn-link:hover,.user-list-more .discussion-header .btn-link:hover,.note-header-info a:hover,.note-header-info .participants-more .btn-link:hover,.participants-more .note-header-info .btn-link:hover,.note-header-info .user-list-more .btn-link:hover,.user-list-more .note-header-info .btn-link:hover{color:#1b69b6}.discussion-header a:focus,.discussion-header a:hover,.discussion-header .participants-more .btn-link:hover,.participants-more .discussion-header .btn-link:hover,.discussion-header .user-list-more .btn-link:hover,.user-list-more .discussion-header .btn-link:hover,.note-header-info a:focus,.note-header-info a:hover,.note-header-info .participants-more .btn-link:hover,.participants-more .note-header-info .btn-link:hover,.note-header-info .user-list-more .btn-link:hover,.user-list-more .note-header-info .btn-link:hover{text-decoration:none}.discussion-header a:focus .note-header-author-name,.discussion-header a:hover .note-header-author-name,.discussion-header .participants-more .btn-link:hover .note-header-author-name,.participants-more .discussion-header .btn-link:hover .note-header-author-name,.discussion-header .user-list-more .btn-link:hover .note-header-author-name,.user-list-more .discussion-header .btn-link:hover .note-header-author-name,.note-header-info a:focus .note-header-author-name,.note-header-info a:hover .note-header-author-name,.note-header-info .participants-more .btn-link:hover .note-header-author-name,.participants-more .note-header-info .btn-link:hover .note-header-author-name,.note-header-info .user-list-more .btn-link:hover .note-header-author-name,.user-list-more .note-header-info .btn-link:hover .note-header-author-name{text-decoration:underline}.discussion-header .author_link,.note-header-info .author_link{color:#2e2e2e}.discussion-header{font-size:14px}.note-header{display:flex;justify-content:space-between}.note-header-info{min-width:0;padding-bottom:8px}.note-header-info.discussion{padding-bottom:0}.system-note .note-header-info{padding-bottom:0}@media (max-width: 575px){.note-header-author-name{display:none}}@media (max-width: 1150px){.notes_content.parallel .note-header-author-name{display:none}}.note-headline-light{display:inline}@media (max-width: 0){.note-headline-light{display:block}}@media (max-width: 0){.notes_content.parallel .note-headline-light{display:block}}.note-headline-light,.discussion-headline-light{color:#707070}.discussion-headline-light a{color:#1b69b6}.note-headline-meta{display:inline-block;white-space:nowrap}.note-headline-meta .system-note-message{white-space:normal}.note-headline-meta .system-note-separator{color:#919191}.note-headline-meta a:hover,.note-headline-meta .participants-more .btn-link:hover,.participants-more .note-headline-meta .btn-link:hover,.note-headline-meta .user-list-more .btn-link:hover,.user-list-more .note-headline-meta .btn-link:hover{text-decoration:underline}.discussion-actions{float:right;margin-left:10px;color:#c4c4c4}.discussion-actions .btn-group>.discussion-next-btn{margin-left:-1px}.note-actions{align-self:flex-start;flex-shrink:0;display:inline-flex;align-items:center;margin-left:10px;color:#c4c4c4}@media (max-width: 575px){.note-actions{float:none;margin-left:0}}@media (max-width: 1150px){.notes_content.parallel .note-actions{float:none;margin-left:0}}.more-actions{display:flex;align-items:flex-end}.more-actions .tooltip{white-space:nowrap}.more-actions-toggle:hover .icon,.more-actions-toggle:focus .icon{color:#1b69b6}.more-actions-dropdown{width:180px;min-width:180px}.note-actions-item{margin-left:12px;display:flex;align-items:center}.note-actions-item.more-actions{margin-left:10px}.note-action-button{line-height:1;padding:0;min-width:16px;color:#c4c4c4;fill:#c4c4c4}.note-action-button .fa{position:relative;font-size:16px}.note-action-button svg{height:16px;width:16px;top:0;vertical-align:text-top}.note-action-button .award-control-icon-positive,.note-action-button .award-control-icon-super-positive{position:absolute;top:0;left:0;opacity:0}.note-action-button:hover .danger-highlight,.note-action-button.is-active .danger-highlight{color:#db3b21}.note-action-button:hover .link-highlight,.note-action-button.is-active .link-highlight{color:#1b69b6;fill:#1b69b6}.note-action-button:hover .award-control-icon-neutral,.note-action-button.is-active .award-control-icon-neutral{opacity:0}.note-action-button:hover .award-control-icon-positive,.note-action-button.is-active .award-control-icon-positive{opacity:1}.note-action-button.is-active .award-control-icon-positive{opacity:0}.note-action-button.is-active .award-control-icon-super-positive{opacity:1}.discussion-toggle-button{padding:0;background-color:transparent;border:0;line-height:20px;font-size:13px;transition:color 0.1s linear}.discussion-toggle-button:hover{color:#1b69b6}.discussion-toggle-button:focus{text-decoration:underline;outline:none;color:#1b69b6}.discussion-toggle-button .fa{margin-right:3px;font-size:10px;line-height:18px;vertical-align:top}.note-role{margin:0 3px}.note-role-special{position:relative;display:inline-block;color:#707070;font-size:12px;text-shadow:0 0 15px white}.line_holder .is-over:not(.no-comment-btn) .add-diff-note{opacity:1;z-index:101}.add-diff-note{border-radius:50%;background:#fff;padding:1px 5px;font-size:12px;color:#1f78d1;width:24px;height:24px;border:1px solid #1f78d1;opacity:0;margin-left:-55px;position:absolute;top:50%;transform:translateY(-50%);z-index:10}.add-diff-note:hover,.add-diff-note.inverted{background:#1f78d1;border-color:#1b69b6;color:#fff}.add-diff-note:active{outline:0}.discussion-body .notes .note,.diff-file .notes .note{border-bottom:1px solid #f0f0f0}.discussion-body .notes .note .timeline-entry-inner,.diff-file .notes .note .timeline-entry-inner{padding-left:16px;padding-right:16px;border-bottom:0}.disabled-comment{background-color:#fafafa;border-radius:3px;border:1px solid #e8e8e8;color:#b2b2b2;padding:90px 0}.disabled-comment.discussion-locked{border:0;background-color:#fff}.disabled-comment a{color:#1b69b6}@media (min-width: 576px){.line-resolve-all-container{margin-right:0;padding-left:16px}}@media (min-width: 1152px){.notes_content.parallel .line-resolve-all-container{margin-right:0;padding-left:16px}}.line-resolve-all-container>div{white-space:nowrap}.line-resolve-all-container .btn-group{margin-left:-4px}.line-resolve-all-container .discussion-next-btn{border-top-left-radius:0;border-bottom-left-radius:0}.line-resolve-all-container .btn svg path{fill:#c4c4c4}.line-resolve-all-container .btn.discussion-create-issue-btn{margin-left:-4px;border-radius:0;border-right:0}.line-resolve-all-container .btn.discussion-create-issue-btn a{padding:0;line-height:0}.line-resolve-all-container .btn.discussion-create-issue-btn a:hover,.line-resolve-all-container .btn.discussion-create-issue-btn .participants-more .btn-link:hover,.participants-more .line-resolve-all-container .btn.discussion-create-issue-btn .btn-link:hover,.line-resolve-all-container .btn.discussion-create-issue-btn .user-list-more .btn-link:hover,.user-list-more .line-resolve-all-container .btn.discussion-create-issue-btn .btn-link:hover{text-decoration:none;border:0}.line-resolve-all{vertical-align:middle;display:inline-block;padding:5px 10px 6px;background-color:#fafafa;border:1px solid #e5e5e5;border-radius:4px}.line-resolve-all.has-next-btn{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.line-resolve-all .line-resolve-btn{margin-right:5px}.line-resolve-all .line-resolve-btn svg{vertical-align:middle}.line-resolve-btn{position:relative;top:0;padding:0;background-color:transparent;border:0;outline:0;color:#c4c4c4;transition:color 100ms linear}.line-resolve-btn.is-disabled{cursor:default}.line-resolve-btn:not(.is-disabled):hover,.line-resolve-btn:not(.is-disabled):focus{color:#168f48}.line-resolve-btn.is-active{color:#168f48}.line-resolve-btn.is-active:hover,.line-resolve-btn.is-active:focus{color:#12753a}.line-resolve-btn .loading{margin:0;height:auto}.files .diff-discussions .note-discussion.timeline-entry{padding-left:0}.files .diff-discussions .note-discussion.timeline-entry:last-child{border-bottom:0}.files .diff-discussions .note-discussion.timeline-entry>.timeline-entry-inner{padding:0}.files .diff-discussions .note-discussion.timeline-entry>.timeline-entry-inner>.timeline-content{margin-left:0}.files .diff-discussions .note-discussion.timeline-entry>.timeline-entry-inner>.timeline-icon{display:none}.files .diff-discussions .note-discussion.timeline-entry .discussion-body{padding-top:0}.files .diff-discussions .note-discussion.timeline-entry .discussion-body .discussion-wrapper{border-color:transparent}.files .diff-comment-form{display:block}.files .add-diff-note svg{margin-top:4px}.notification-list-item{line-height:34px}.notification{position:relative;top:1px}.notification .fa{font-size:18px}.pages-domain-list-item{position:relative;display:flex;align-items:center}.pages-domain-list-item .domain-status{display:inline-flex;left:16px;position:absolute}.pages-domain-list-item .domain-name{flex-grow:1}.pages-domain-list.has-verification-status>li{padding-left:48px}.status-badge{display:inline-flex;margin-bottom:8px}.status-badge .label,.status-badge .btn{padding:4px 8px;font-size:14px;line-height:16px;border-radius:0;display:flex;align-items:center}.status-badge .btn svg{top:auto}.status-badge :first-child{border-bottom-left-radius:4px;border-top-left-radius:4px}.status-badge :not(:first-child){border-left:0}.status-badge :last-child{border-bottom-right-radius:4px;border-top-right-radius:4px}.js-pipeline-schedule-form .dropdown-select,.js-pipeline-schedule-form .dropdown-menu-toggle{width:100% !important}.js-pipeline-schedule-form .gl-field-error{margin:10px 0 0}.interval-pattern-form-group label{margin-right:10px;font-weight:400}.interval-pattern-form-group label[for='custom']{margin-right:0}.interval-pattern-form-group .cron-interval-input-wrapper{padding-left:0}.interval-pattern-form-group .cron-interval-input{margin:10px 10px 0 0}.interval-pattern-form-group .cron-syntax-link-wrap{margin-right:10px;font-size:12px}.pipeline-schedule-table-row .branch-name-cell{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pipeline-schedule-table-row .branch-name-cell svg{vertical-align:middle}.pipeline-schedule-table-row .next-run-cell{color:#707070}.pipeline-schedule-table-row a{color:#2e2e2e}.pipeline-schedules-user-callout .bordered-box.content-block{border:1px solid #e5e5e5;background-color:transparent;padding:16px}.pipeline-schedules-user-callout #dismiss-callout-btn{color:#2e2e2e}.cron-preset-radio-input{display:inline-block}@media (max-width: 991.98px){.cron-preset-radio-input{display:block;margin:0 0 5px 5px}}.cron-preset-radio-input input{margin-right:3px}.pipelines .stage{max-width:90px;width:90px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pipelines .table-holder{overflow:unset;width:100%}.pipelines .commit-title{margin:0;white-space:normal}@media (max-width: 767.98px){.pipelines .commit-title{justify-content:flex-end}}.pipelines .ci-table .badge{margin-bottom:3px}.pipelines .ci-table .pipeline-id{color:#000}.pipelines .ci-table .pipelines-time-ago{text-align:right}.pipelines .ci-table .pipeline-actions{min-width:170px}.pipelines .ci-table .pipeline-actions .btn-default{color:#707070}.pipelines .ci-table .pipeline-actions .btn.btn-retry:hover,.pipelines .ci-table .pipeline-actions .btn.btn-retry:focus{border-color:#c1c1c1;background-color:#f0f0f0}.pipelines .ci-table .pipeline-actions svg path{fill:#707070}.pipelines .ci-table .pipeline-actions .dropdown-menu{max-height:312px;overflow-y:auto}.pipelines .ci-table .pipeline-actions .dropdown-toggle,.pipelines .ci-table .pipeline-actions .dropdown-menu-toggle,.pipelines .ci-table .pipeline-actions .dropdown-menu{color:#707070}.pipelines .ci-table .pipeline-actions .dropdown-toggle .fa,.pipelines .ci-table .pipeline-actions .dropdown-menu-toggle .fa,.pipelines .ci-table .pipeline-actions .dropdown-menu .fa{color:#707070;font-size:14px}.pipelines .ci-table .pipeline-actions .btn-group.open .btn-default{background-color:#f0f0f0;border-color:#e3e3e3}.pipelines .ci-table .pipeline-actions .btn .text-center{display:inline}.pipelines .ci-table .pipeline-actions .tooltip{white-space:nowrap}@media (max-width: 991.98px){.content-list.builds-content-list{width:100%;overflow:auto}}.ci-table .build.retried{background-color:#fdfdfd}.ci-table .commit-link a:focus{text-decoration:none}.ci-table .commit-link a:hover,.ci-table .commit-link .participants-more .btn-link:hover,.participants-more .ci-table .commit-link .btn-link:hover,.ci-table .commit-link .user-list-more .btn-link:hover,.user-list-more .ci-table .commit-link .btn-link:hover{text-decoration:none}.ci-table .avatar{margin-left:0;float:none}.ci-table .branch-commit .ref-name,.ci-table .branch-commit .git-revision-dropdown .dropdown-content ul li a,.git-revision-dropdown .dropdown-content ul li .ci-table .branch-commit a,.ci-table .branch-commit .mr-state-widget .label-branch,.mr-state-widget .ci-table .branch-commit .label-branch{font-weight:600;max-width:100px;overflow:hidden;display:inline-block;white-space:nowrap;vertical-align:middle;text-overflow:ellipsis}.ci-table .branch-commit svg{height:14px;width:14px;vertical-align:middle;fill:#707070}.ci-table .branch-commit .sprite{width:12px;height:12px;fill:#2e2e2e}.ci-table .branch-commit .fa{font-size:12px;color:#2e2e2e}.ci-table .branch-commit .commit-sha,.ci-table .branch-commit .gfm-commit,.ci-table .branch-commit .gfm-commit_range{color:#1b69b6}.ci-table .branch-commit .badge{margin-right:4px}.ci-table .branch-commit .label-container{font-size:0}.ci-table .branch-commit .label-container .badge{margin-top:5px}.ci-table .icon-container{display:inline-block;width:10px}.ci-table .icon-container.commit-icon{width:15px;text-align:center}.ci-table .no-btn{border:0;background:none;outline:none;width:100%;text-align:left}.ci-table .no-btn .icon-play{position:relative;top:2px;margin-right:5px;height:13px;width:12px}.ci-table .duration,.ci-table .finished-at{color:#707070;margin:0;white-space:nowrap}.ci-table .duration .fa,.ci-table .finished-at .fa{font-size:12px;margin-right:4px}.ci-table .duration svg,.ci-table .finished-at svg{width:12px;height:12px;vertical-align:middle;margin-right:4px}.ci-table .build-link a{color:#2e2e2e}.ci-table .btn-group.open .dropdown-toggle,.ci-table .btn-group.open .dropdown-menu-toggle{box-shadow:none}.ci-table .pipeline-tags .label-container{white-space:normal}@media (min-width: 768px){.stage-cell.table-section{min-width:160px;margin-right:-4px}}.stage-cell .mini-pipeline-graph-dropdown-toggle svg{height:22px;width:22px;position:absolute;top:-1px;left:-1px;z-index:2;overflow:visible}.stage-cell .stage-container{display:inline-block;position:relative;vertical-align:middle;height:22px;margin:3px 0}.stage-cell .stage-container+.stage-container{margin-left:6px}.stage-cell .stage-container button.has-tooltip+.tooltip{min-width:105px}.stage-cell .stage-container a.has-tooltip{white-space:nowrap}.stage-cell .stage-container:not(:last-child)::after{content:'';width:7px;position:absolute;right:-7px;top:10px;border-bottom:2px solid #e5e5e5}.stage-cell .stage-container.mr-widget-pipeline-stages+.stage-container{margin-left:4px}.stage-cell .stage-container.mr-widget-pipeline-stages:not(:last-child)::after{width:4px;right:-4px;top:11px}.admin-builds-table .ci-table td:last-child{min-width:120px}.pipeline-actions{border-bottom:0}.tab-pane.builds .ci-table tr{height:71px}.build-failures th{border-top:0}.build-failures .build-state{padding:20px 2px}.build-failures .build-state .build-name{font-weight:400}.build-failures .build-state .stage{color:#707070;font-weight:400;vertical-align:middle}.build-failures .build-log{border:0;line-height:initial}.build-failures .build-trace-row td{border-top:0;border-bottom-width:1px;border-bottom-style:solid;padding-top:0}.build-failures .build-trace{width:100%;text-align:left;margin-top:16px}.build-failures .build-name{width:196px}.build-failures .build-name a{font-weight:600;color:#2e2e2e;text-decoration:none}.build-failures .build-name a:focus,.build-failures .build-name a:hover,.build-failures .build-name .participants-more .btn-link:hover,.participants-more .build-failures .build-name .btn-link:hover,.build-failures .build-name .user-list-more .btn-link:hover,.user-list-more .build-failures .build-name .btn-link:hover{text-decoration:underline}.build-failures .build-actions{width:70px;text-align:right}.build-failures .build-stage{width:140px}.build-failures .ci-status-icon-failed{padding:10px 0 10px 12px;width:36px}.build-failures .build-icon svg{width:24px;height:24px;vertical-align:middle}.build-failures .build-state>td:last-child,.build-failures .build-trace-row>td:last-child{padding-right:0}@media (max-width: 767.98px){.build-failures td:empty{display:none}.build-failures .ci-table{margin-top:32px}.build-failures .build-trace-container{padding-top:16px;padding-bottom:16px}.build-failures .build-trace{margin-bottom:0;margin-top:0}}.pipeline-tab-content{width:100%;background-color:#fafafa;padding:16px;overflow:auto}.pipeline-graph{white-space:nowrap;transition:max-height 0.3s, padding 0.3s}.pipeline-graph .stage-column-list,.pipeline-graph .builds-container>ul{padding:0}.pipeline-graph a{text-decoration:none;color:#2e2e2e}.pipeline-graph svg{vertical-align:middle}.pipeline-graph .stage-column{display:inline-block;vertical-align:top}.pipeline-graph .stage-column:not(:last-child){margin-right:44px}.pipeline-graph .stage-column.left-margin:not(:first-child){margin-left:44px}.pipeline-graph .stage-column.left-margin:not(:first-child) .left-connector::before{content:'';position:absolute;top:48%;left:-44px;border-top:2px solid #e5e5e5;width:44px;height:1px}.pipeline-graph .stage-column.no-margin{margin:0}.pipeline-graph .stage-column li{list-style:none}.pipeline-graph .stage-column:last-child .build:first-child::after{border:0}.pipeline-graph .stage-column:last-child .build:not(:first-child)::after{border:0}.pipeline-graph .stage-column:last-child .build .curve::before{display:none}.pipeline-graph .stage-column:first-child .build:not(:first-child)::before{border:0}.pipeline-graph .stage-column:first-child .build .curve::after{display:none}.pipeline-graph .stage-column .curve{display:none}.pipeline-graph .stage-column .curve::before,.pipeline-graph .stage-column .curve::after{content:'';width:21px;height:25px;position:absolute;top:-31px;border-top:2px solid #e5e5e5}.pipeline-graph .stage-column .curve::after{left:-44px;border-right:2px solid #e5e5e5;border-radius:0 20px}.pipeline-graph .stage-column .curve::before{right:-44px;border-left:2px solid #e5e5e5;border-radius:20px 0 0}.pipeline-graph .stage-name{margin:0 0 15px 10px;font-weight:600;width:176px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pipeline-graph .build{position:relative;width:186px;margin-bottom:10px;white-space:normal}.pipeline-graph .build .ci-job-dropdown-container .dropdown-menu li button{padding:0;text-align:center}.pipeline-graph .build .ci-status-icon svg{height:20px;width:20px}.pipeline-graph .build .dropdown-menu-toggle{background-color:transparent;border:0;padding:0}.pipeline-graph .build .dropdown-menu-toggle:focus{outline:none}.pipeline-graph .build .build-content{display:inline-block;padding:8px 10px 9px;width:100%;border:1px solid #e5e5e5;border-radius:30px;background-color:#fff}.pipeline-graph .build .build-content:hover,.pipeline-graph .build .ci-job-dropdown-container:hover .build-content{background-color:#eee;border:1px solid #c1c1c1;color:#2e2e2e}.pipeline-graph .build a.build-content:hover,.pipeline-graph .build .participants-more .build-content.btn-link:hover,.participants-more .pipeline-graph .build .build-content.btn-link:hover,.participants-more .pipeline-graph .build .ci-job-dropdown-container:hover .btn-link.build-content,.pipeline-graph .build .ci-job-dropdown-container:hover .participants-more .btn-link.build-content,.pipeline-graph .build .user-list-more .build-content.btn-link:hover,.user-list-more .pipeline-graph .build .build-content.btn-link:hover,.user-list-more .pipeline-graph .build .ci-job-dropdown-container:hover .btn-link.build-content,.pipeline-graph .build .ci-job-dropdown-container:hover .user-list-more .btn-link.build-content,.pipeline-graph .build .ci-job-dropdown-container:hover a.build-content,.pipeline-graph .build button.build-content:hover,.pipeline-graph .build .ci-job-dropdown-container:hover button.build-content{background-color:#eee;border:1px solid #c1c1c1}.pipeline-graph .build:first-child::after{content:'';position:absolute;top:48%;right:-48px;border-top:2px solid #e5e5e5;width:48px;height:1px}.pipeline-graph .build:not(:first-child)::after,.pipeline-graph .build:not(:first-child)::before{content:'';top:-49px;position:absolute;border-bottom:2px solid #e5e5e5;width:25px;height:69px}.pipeline-graph .build:not(:first-child)::after{right:-25px;border-right:2px solid #e5e5e5;border-radius:0 0 20px}.pipeline-graph .build:not(:first-child)::before{left:-25px;border-left:2px solid #e5e5e5;border-radius:0 0 0 20px}.pipeline-graph .build:nth-child(2)::after,.pipeline-graph .build:nth-child(2)::before{height:29px;top:-9px}.pipeline-graph .build:nth-child(2) .curve{display:block}.pipeline-graph .ci-action-icon-container{position:absolute;right:5px;top:5px}.pipeline-graph .ci-action-icon-container.ci-action-icon-wrapper{height:30px;width:30px;background:#fff;border:1px solid #e5e5e5;border-radius:100%;display:block}.pipeline-graph .ci-action-icon-container.ci-action-icon-wrapper:hover{background-color:#eee;border:1px solid #c1c1c1}.pipeline-graph .ci-action-icon-container.ci-action-icon-wrapper:hover svg{fill:#2e2e2e}.pipeline-graph .ci-action-icon-container.ci-action-icon-wrapper svg{fill:#707070;position:relative;top:-1px}.pipeline-graph .ci-action-icon-container.ci-action-icon-wrapper.play svg{left:2px}.dropdown-counter-badge{font-weight:100;font-size:15px;position:absolute;right:13px;top:8px}.ci-status-text{max-width:110px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;display:inline-block;position:relative;font-weight:400}button.mini-pipeline-graph-dropdown-toggle{border-radius:100px;background-color:#fff;border-width:1px;border-style:solid;width:22px;height:22px;margin:0;padding:0;transition:all 0.2s linear;position:relative;vertical-align:middle}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success{border-color:#1aaa55;color:#1aaa55}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success:active{background-color:#dcf5e7;border-color:#168f48;color:#168f48}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success:active svg{fill:#168f48}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-failed{border-color:#db3b21;color:#db3b21}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-failed:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-failed:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-failed:active{background-color:#fbe5e1;border-color:#c0341d;color:#c0341d}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-failed:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-failed:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-failed:active svg{fill:#c0341d}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-pending,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success_with_warnings{border-color:#fc9403;color:#fc9403}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-pending:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-pending:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-pending:active,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success_with_warnings:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success_with_warnings:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success_with_warnings:active{background-color:#fff1de;border-color:#de7e00;color:#de7e00}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-pending:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-pending:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-pending:active svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success_with_warnings:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success_with_warnings:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-success_with_warnings:active svg{fill:#de7e00}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-running{border-color:#2e87e0;color:#2e87e0}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-running:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-running:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-running:active{background-color:#e4f0fb;border-color:#1b69b6;color:#1b69b6}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-running:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-running:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-running:active svg{fill:#1b69b6}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-canceled,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-disabled,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-not-found,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-manual{border-color:#2e2e2e;color:#2e2e2e}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-canceled:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-canceled:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-canceled:active,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-disabled:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-disabled:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-disabled:active,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-not-found:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-not-found:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-not-found:active,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-manual:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-manual:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-manual:active{background-color:rgba(46,46,46,0.1);border-color:#2e2e2e;color:#2e2e2e}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-canceled:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-canceled:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-canceled:active svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-disabled:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-disabled:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-disabled:active svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-not-found:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-not-found:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-not-found:active svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-manual:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-manual:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-manual:active svg{fill:#2e2e2e}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-created,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-skipped{border-color:#c4c4c4;color:#c4c4c4}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-created:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-created:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-created:active,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-skipped:hover,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-skipped:focus,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-skipped:active{background-color:rgba(196,196,196,0.1);border-color:#c4c4c4;color:#c4c4c4}button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-created:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-created:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-created:active svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-skipped:hover svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-skipped:focus svg,button.mini-pipeline-graph-dropdown-toggle.ci-status-icon-skipped:active svg{fill:#c4c4c4}button.mini-pipeline-graph-dropdown-toggle>.fa.fa-caret-down{position:absolute;left:20px;top:5px;display:inline-block;visibility:hidden;opacity:0;color:inherit;font-size:12px;transition:visibility 0.1s, opacity 0.1s linear}button.mini-pipeline-graph-dropdown-toggle:active,button.mini-pipeline-graph-dropdown-toggle:focus,button.mini-pipeline-graph-dropdown-toggle:hover{outline:none;width:35px}button.mini-pipeline-graph-dropdown-toggle:active .fa.fa-caret-down,button.mini-pipeline-graph-dropdown-toggle:focus .fa.fa-caret-down,button.mini-pipeline-graph-dropdown-toggle:hover .fa.fa-caret-down{visibility:visible;opacity:1}.big-pipeline-graph-dropdown-menu,.mini-pipeline-graph-dropdown-menu{width:240px;max-width:240px}.big-pipeline-graph-dropdown-menu.dropdown-menu li button,.big-pipeline-graph-dropdown-menu.dropdown-menu li a.ci-action-icon-container,.mini-pipeline-graph-dropdown-menu.dropdown-menu li button,.mini-pipeline-graph-dropdown-menu.dropdown-menu li a.ci-action-icon-container{padding:0;text-align:center}.big-pipeline-graph-dropdown-menu .ci-action-icon-container,.mini-pipeline-graph-dropdown-menu .ci-action-icon-container{position:absolute;right:8px;top:8px}.big-pipeline-graph-dropdown-menu .ci-action-icon-container.ci-action-icon-wrapper,.mini-pipeline-graph-dropdown-menu .ci-action-icon-container.ci-action-icon-wrapper{height:24px;width:24px;background:#fff;border:1px solid #e5e5e5;border-radius:50%;display:block}.big-pipeline-graph-dropdown-menu .ci-action-icon-container.ci-action-icon-wrapper:hover,.mini-pipeline-graph-dropdown-menu .ci-action-icon-container.ci-action-icon-wrapper:hover{background-color:#eee;border:1px solid #c1c1c1}.big-pipeline-graph-dropdown-menu .ci-action-icon-container.ci-action-icon-wrapper:hover svg,.mini-pipeline-graph-dropdown-menu .ci-action-icon-container.ci-action-icon-wrapper:hover svg{fill:#2e2e2e}.big-pipeline-graph-dropdown-menu .ci-action-icon-container.ci-action-icon-wrapper svg,.mini-pipeline-graph-dropdown-menu .ci-action-icon-container.ci-action-icon-wrapper svg{width:12px;height:12px;fill:#707070;position:relative;top:0;vertical-align:initial}.big-pipeline-graph-dropdown-menu a.ci-action-icon-container.ci-action-icon-wrapper svg,.mini-pipeline-graph-dropdown-menu a.ci-action-icon-container.ci-action-icon-wrapper svg{top:2px}.big-pipeline-graph-dropdown-menu .scrollable-menu,.mini-pipeline-graph-dropdown-menu .scrollable-menu{padding:0;max-height:245px;overflow:auto}.big-pipeline-graph-dropdown-menu li,.mini-pipeline-graph-dropdown-menu li{position:relative}.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item{align-items:center;clear:both;display:flex;font-weight:normal;line-height:1.5;white-space:nowrap}.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item.non-details-job-component,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item.non-details-job-component{padding:8px 16px}.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-job-name-component,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-job-name-component{align-items:center;display:flex;flex:1}.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-build-text,.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-text,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-build-text,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-text{font-weight:200;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:70%;margin-left:2px;display:inline-block}.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-build-text::after,.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-text::after,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-build-text::after,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-text::after{content:'';display:block}@media (max-width: 575.98px){.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-build-text,.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-text,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-build-text,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-text{max-width:60%}}.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-icon,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-icon{position:relative}.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-icon>svg,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item .ci-status-icon>svg{width:18px;height:18px;margin:3px 0;position:relative;overflow:visible;display:block}.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item:hover,.big-pipeline-graph-dropdown-menu li:hover>.mini-pipeline-graph-dropdown-item,.big-pipeline-graph-dropdown-menu li:hover>.ci-job-component>.mini-pipeline-graph-dropdown-item,.big-pipeline-graph-dropdown-menu .mini-pipeline-graph-dropdown-menu li:hover>.mini-pipeline-graph-dropdown-item,.big-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item:focus,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item:hover,.mini-pipeline-graph-dropdown-menu .big-pipeline-graph-dropdown-menu li:hover>.mini-pipeline-graph-dropdown-item,.mini-pipeline-graph-dropdown-menu li:hover>.mini-pipeline-graph-dropdown-item,.mini-pipeline-graph-dropdown-menu li:hover>.ci-job-component>.mini-pipeline-graph-dropdown-item,.mini-pipeline-graph-dropdown-menu li .mini-pipeline-graph-dropdown-item:focus{outline:none;text-decoration:none;background-color:#eee}.big-pipeline-graph-dropdown-menu{width:195px;min-width:195px;left:100%;top:-10px;box-shadow:0 1px 5px rgba(0,0,0,0.3)}.big-pipeline-graph-dropdown-menu::before,.big-pipeline-graph-dropdown-menu::after{content:'';display:inline-block;position:absolute;width:0;height:0;border-color:transparent;border-style:solid;top:18px}.big-pipeline-graph-dropdown-menu::before{left:-6px;margin-top:3px;border-width:7px 5px 7px 0;border-right-color:#e5e5e5}.big-pipeline-graph-dropdown-menu::after{left:-5px;border-width:10px 7px 10px 0;border-right-color:#fff}.mini-pipeline-graph-dropdown-menu{z-index:200}.mini-pipeline-graph-dropdown-menu::before,.mini-pipeline-graph-dropdown-menu::after{content:'';display:inline-block;position:absolute;width:0;height:0;border-color:transparent;border-style:solid;top:-6px;left:50%;transform:translate(-50%, 0);border-width:0 5px 6px}@media (max-width: 767.98px){.mini-pipeline-graph-dropdown-menu::before,.mini-pipeline-graph-dropdown-menu::after{left:100%;margin-left:-12px}}.mini-pipeline-graph-dropdown-menu::before{border-width:0 5px 5px;border-bottom-color:#e5e5e5}.mini-pipeline-graph-dropdown-menu::after{margin-top:1px;border-bottom-color:#fff}.dropdown .mini-pipeline-graph-dropdown-menu.dropdown-menu{transform:translate(-80%, 0)}@media (min-width: 768px){.dropdown .mini-pipeline-graph-dropdown-menu.dropdown-menu{transform:translate(-50%, 0);right:auto;left:50%}}.terminal-icon{margin-left:3px}.terminal-container .content-block{border-bottom:0}.terminal-container #terminal{margin-top:10px;min-height:450px;box-sizing:border-box}.terminal-container #terminal>div{min-height:450px}.ci-header-container{min-height:55px}.ci-header-container .text-center{padding-top:12px}.ci-header-container .header-action-buttons .btn,.ci-header-container .header-action-buttons a{margin-left:10px}.pipelines-container .top-area .nav-controls>.btn:last-child,.pipelines-container .wiki-page-header .nav-controls>.btn:last-child{float:none}.autodevops-title{font-weight:400;line-height:1.5}.legend-all{color:#707070}.legend-success{color:#1aaa55}.profile-avatar-form-option hr{margin:10px 0}@media (min-width: 576px){.avatar-image{float:left;margin-bottom:0}}.avatar-file-name{position:relative;top:2px;display:inline-block}.account-btn-link,.profile-settings-sidebar a,.settings-sidebar a{color:#1b69b6}.private-tokens-reset div.reset-action:not(:first-child){padding-top:15px}.oauth-buttons .btn-group{margin-right:10px}.oauth-buttons .btn{line-height:40px;height:42px;padding:0 12px}.oauth-buttons .btn img{width:32px;height:32px}.two-factor-new .manual-instructions h3{margin-top:0}.two-factor-new .manual-instructions dl{font-size:1.1em}.account-well{padding:10px;background-color:#fafafa;border:1px solid #e5e5e5;border-radius:3px}.account-well ul{padding-left:20px;margin-bottom:0}.profile-link-holder{display:inline}.profile-link-holder a:not(.text-link){text-decoration:none}.middle-dot-divider::after{content:"\00B7";padding:0 6px;font-weight:600}.middle-dot-divider:last-child::after{content:"";padding:0}.profile-user-bio{max-width:600px;margin:10px auto;padding:0 16px}.user-avatar-button .file-name{display:inline-block;padding-left:10px}.subkeys-list{margin:5px 0;padding:0;list-style:none}.subkeys-list>li{padding:10px 0;border-bottom:1px solid #eee;display:block;margin:0}.subkeys-list>li::after{display:block;clear:both;content:""}.subkeys-list>li:last-child{border-bottom:0}.subkeys-list>li.active{background:#fafafa}.subkeys-list>li.active a{font-weight:600}.subkeys-list>li.hide{display:none}.subkeys-list>li.light a,.subkeys-list>li.description-block a{color:#2e2e2e}.subkeys-list li{padding:3px 0;border:0}@media (min-width: 576px){.key-list-item .key-list-item-info{float:left}}.key-list-item .description{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.key-created-at{line-height:42px}.profile-settings-content a{color:#1b69b6}.provider-btn-group{display:inline-block;margin-right:10px;border:1px solid #e5e5e5;border-radius:3px}.provider-btn-group:last-child{margin-right:0}.provider-btn-image{display:inline-block;padding:5px 10px;border-right:1px solid #e5e5e5}.provider-btn-image>img{width:20px}.provider-btn{display:inline-block;padding:5px 10px;margin-left:-3px;line-height:22px;background-color:#fafafa}.provider-btn.not-active{color:#1f78d1}.oauth-applications form{display:inline-block}.oauth-applications .last-heading{width:105px}.modal-profile-crop .modal-dialog,.modal-profile-crop .modal-no-backdrop{width:380px}@media (max-width: 575.98px){.modal-profile-crop .modal-dialog,.modal-profile-crop .modal-no-backdrop{width:auto}}.modal-profile-crop .profile-crop-image-container{height:300px;margin:0 auto}.modal-profile-crop .crop-controls{padding:10px 0 0;text-align:center}.personal-access-tokens-never-expires-label{color:#b2b2b2}.created-personal-access-token-container .btn-clipboard{border:1px solid #e5e5e5}.user-profile .cover-controls a{margin-left:5px}.user-profile .profile-header{margin:0 auto}.user-profile .profile-header .avatar-holder{width:90px;margin:0 auto 10px}.user-profile .user-profile-nav{font-size:0}.user-profile .fade-right{right:0}.user-profile .fade-left{left:0}@media (max-width: 575.98px){.user-profile .cover-block{padding-top:20px}.user-profile .cover-controls{position:static;padding:0 16px;margin-bottom:20px;display:-webkit-flex;display:flex}.user-profile .cover-controls .btn{-webkit-flex-grow:1;flex-grow:1}.user-profile .cover-controls .btn:first-child{margin-left:0}.user-profile .user-profile-nav a{margin-right:0}}table.u2f-registrations th:not(:last-child),table.u2f-registrations td:not(:last-child){border-right:solid 1px transparent}.oauth-application-show .scope-name{font-weight:600}.oauth-application-show .scopes-list{padding-left:18px}.user-callout{margin:20px -5px 0}.user-callout .bordered-box{border:1px solid #73afea;border-radius:4px;background-color:#f6fafe;position:relative;display:flex;justify-content:center;align-items:center}.user-callout .landing{padding:32px}.user-callout .landing .close{position:absolute;top:20px;right:20px;opacity:1}.user-callout .landing .close .dismiss-icon{float:right;cursor:pointer;color:#73afea}.user-callout .landing .close:hover{background-color:transparent;border:0}.user-callout .landing .close:hover .dismiss-icon{color:#2e87e0}.user-callout .landing .svg-container{margin-right:30px;display:inline-block}.user-callout .landing .svg-container svg{height:110px;vertical-align:top}.user-callout .landing .svg-container.convdev{margin:0 0 0 30px}.user-callout .landing .svg-container.convdev svg{height:127px}.user-callout .landing .user-callout-copy{display:inline-block;vertical-align:top;max-width:570px}@media (max-width: 575.98px){.user-callout{text-align:center}.user-callout .bordered-box{display:block}.user-callout .landing .svg-container,.user-callout .landing .user-callout-copy{margin:0 auto;display:block}.user-callout .landing .svg-container svg,.user-callout .landing .user-callout-copy svg{height:75px}.user-callout .landing .svg-container.convdev,.user-callout .landing .user-callout-copy.convdev{margin:16px auto 0}.user-callout .landing .svg-container.convdev svg,.user-callout .landing .user-callout-copy.convdev svg{height:120px}}.nav-wip{border:1px solid #1f78d1;background:#f6fafe;padding:16px;margin-bottom:16px}.nav-wip a{color:#1f78d1}.nav-wip p:last-child{margin-bottom:0}.email-badge{display:inline;margin-right:8px}.email-badge .email-badge-email{display:inline;margin-right:4px}.email-badge .badge-verification-status{border-width:1px;border-style:solid}.email-badge .badge-verification-status.verified{color:#1aaa55;border-color:#1aaa55}.email-badge .badge-verification-status.verified:not(span):hover{background-color:#dcf5e7;color:#12753a;border-color:#12753a}.email-badge .badge-verification-status.unverified:not(span):hover{background-color:#e1e1e1;color:#444;border-color:#444}.multi-file-editor-options label{margin-right:20px;text-align:center}.multi-file-editor-options .preview{font-size:0}.multi-file-editor-options .preview img{border:1px solid #e1e1e1;border-radius:4px}.application-theme label{margin:0 32px 16px 0;text-align:center}.application-theme .preview{font-size:0;height:48px;border-radius:4px;min-width:112px;margin-bottom:8px}.application-theme .preview.ui-indigo{background-color:#292961}.application-theme .preview.ui-light-indigo{background-color:#4b4ba3}.application-theme .preview.ui-blue{background-color:#1a3652}.application-theme .preview.ui-light-blue{background-color:#2261a1}.application-theme .preview.ui-green{background-color:#0d4524}.application-theme .preview.ui-light-green{background-color:#156b39}.application-theme .preview.ui-red{background-color:#691a16}.application-theme .preview.ui-light-red{background-color:#a62e21}.application-theme .preview.ui-dark{background-color:#2e2e2e}.application-theme .preview.ui-light{background-color:#dfdfdf}.application-theme .preview-row{display:block}.syntax-theme label{margin-right:32px;margin-bottom:16px;text-align:center}.syntax-theme label .preview{margin-bottom:10px;width:160px}.syntax-theme label .preview img{border-radius:4px;max-width:100%}.alert_holder{margin:-16px}.alert_holder .alert-link{font-weight:400}.new_project .form-text.text-muted,.edit-project .form-text.text-muted,.import-project .form-text.text-muted{margin-bottom:10px}.new_project .project-path .form-control,.new_project .project-path .search form,.search .new_project .project-path form,.edit-project .project-path .form-control,.edit-project .project-path .search form,.search .edit-project .project-path form,.import-project .project-path .form-control,.import-project .project-path .search form,.search .import-project .project-path form{border-radius:3px}.new_project .input-group,.edit-project .input-group,.import-project .input-group{display:flex}.new_project .input-group .select2-container,.edit-project .input-group .select2-container,.import-project .input-group .select2-container{display:unset;max-width:unset;width:unset !important;flex-grow:1}.new_project .input-group>div:last-child,.edit-project .input-group>div:last-child,.import-project .input-group>div:last-child{padding-right:0}@media (max-width: 575.98px){.new_project .input-group>div:last-child,.edit-project .input-group>div:last-child,.import-project .input-group>div:last-child{margin-bottom:0}.new_project fieldset>.form-group:first-child,.edit-project fieldset>.form-group:first-child,.import-project fieldset>.form-group:first-child{padding-right:0}}.new_project .input-group-prepend,.new_project .input-group-append,.edit-project .input-group-prepend,.edit-project .input-group-append,.import-project .input-group-prepend,.import-project .input-group-append{overflow:hidden;text-overflow:ellipsis;line-height:unset;width:unset;max-width:50%;text-align:left}.new_project .input-group-prepend.static-namespace,.new_project .input-group-append.static-namespace,.edit-project .input-group-prepend.static-namespace,.edit-project .input-group-append.static-namespace,.import-project .input-group-prepend.static-namespace,.import-project .input-group-append.static-namespace{height:35px;border-radius:3px;border:1px solid #e5e5e5;max-width:100%;flex-grow:1}.new_project .input-group-prepend+.select2 a,.new_project .input-group-prepend+.btn-default,.new_project .input-group-append+.select2 a,.new_project .input-group-append+.btn-default,.edit-project .input-group-prepend+.select2 a,.edit-project .input-group-prepend+.btn-default,.edit-project .input-group-append+.select2 a,.edit-project .input-group-append+.btn-default,.import-project .input-group-prepend+.select2 a,.import-project .input-group-prepend+.btn-default,.import-project .input-group-append+.select2 a,.import-project .input-group-append+.btn-default{border-radius:0 3px 3px 0}.toggle-wrapper{margin-top:5px}.project-feature-row>.toggle-wrapper{margin:10px 0}.project-visibility-setting,.project-feature-settings{border:1px solid #e5e5e5;padding:10px 32px}@media (max-width: 575.98px){.project-visibility-setting,.project-feature-settings{padding:10px 20px}}.project-visibility-setting .request-access{line-height:2}.project-feature-settings{background:#f9f9f9;border-top:0;margin-bottom:16px}.project-repo-select{transition:background 2s ease-out}.project-repo-select:disabled{opacity:0.5;pointer-events:none}.highlight-changes .project-repo-select{background:#ebffe8;transition:none}.project-feature-controls{display:flex;align-items:center;margin:8px 0;max-width:432px}.project-feature-controls .toggle-wrapper{flex:0;margin-right:10px}.project-feature-controls .select-wrapper{flex:1}.project-feature-setting-group{padding-left:32px}.project-feature-setting-group .project-feature-controls{max-width:400px}@media (max-width: 575.98px){.project-feature-setting-group{padding-left:20px}}.project-home-panel,.group-home-panel{padding-top:24px;padding-bottom:24px}@media (min-width: 576px){.project-home-panel,.group-home-panel{border-bottom:1px solid #e5e5e5}}.project-home-panel .project-avatar,.project-home-panel .group-avatar,.group-home-panel .project-avatar,.group-home-panel .group-avatar{float:none;margin:0 auto}.project-home-panel .project-avatar.identicon,.project-home-panel .group-avatar.identicon,.group-home-panel .project-avatar.identicon,.group-home-panel .group-avatar.identicon{border-radius:50%}.project-home-panel .project-title,.project-home-panel .group-title,.group-home-panel .project-title,.group-home-panel .group-title{margin-top:10px;margin-bottom:10px;font-size:24px;font-weight:400;line-height:1;word-wrap:break-word}.project-home-panel .project-title .fa,.project-home-panel .group-title .fa,.group-home-panel .project-title .fa,.group-home-panel .group-title .fa{margin-left:2px;font-size:12px;vertical-align:middle}.project-home-panel .project-home-desc,.project-home-panel .group-home-desc,.group-home-panel .project-home-desc,.group-home-panel .group-home-desc{margin-left:auto;margin-right:auto;margin-bottom:0;max-width:700px}.project-home-panel .project-home-desc>p,.project-home-panel .group-home-desc>p,.group-home-panel .project-home-desc>p,.group-home-panel .group-home-desc>p{margin-bottom:0}.project-home-panel .notifications-btn .fa-bell,.project-home-panel .notifications-btn .fa-spinner,.group-home-panel .notifications-btn .fa-bell,.group-home-panel .notifications-btn .fa-spinner{margin-right:6px}.project-home-panel .notifications-btn .fa-angle-down,.group-home-panel .notifications-btn .fa-angle-down{margin-left:6px}.nav>.project-repo-buttons{margin-top:0}.project-repo-buttons .btn,.group-buttons .btn{padding:3px 10px}.project-repo-buttons .btn:last-child,.group-buttons .btn:last-child{margin-left:0}.project-repo-buttons .btn .fa,.group-buttons .btn .fa{color:#7e7c7c}.project-repo-buttons .btn svg,.group-buttons .btn svg{fill:#7e7c7c}.project-repo-buttons .btn .fa-caret-down,.group-buttons .btn .fa-caret-down{margin-left:3px}.project-repo-buttons .project-action-button,.group-buttons .project-action-button{margin:15px 5px 0;vertical-align:top}@media (max-width: 991.98px){.project-repo-buttons .download-button,.group-buttons .download-button{margin-left:0}}.project-repo-buttons .count-buttons,.group-buttons .count-buttons{display:inline-block;vertical-align:top;margin-top:15px}.project-repo-buttons .project-clone-holder,.group-buttons .project-clone-holder{display:inline-block;margin:15px 5px 0 0}.project-repo-buttons .project-clone-holder input,.group-buttons .project-clone-holder input{height:28px}.project-repo-buttons .count-with-arrow,.group-buttons .count-with-arrow{display:inline-block;position:relative;margin-left:4px}.project-repo-buttons .count-with-arrow .arrow::before,.group-buttons .count-with-arrow .arrow::before{content:'';display:inline-block;position:absolute;width:0;height:0;border-color:transparent;border-style:solid;top:50%;left:0;margin-top:-6px;border-width:7px 5px 7px 0;border-right-color:#dce0e5;pointer-events:none}.project-repo-buttons .count-with-arrow .arrow::after,.group-buttons .count-with-arrow .arrow::after{content:'';position:absolute;width:0;height:0;border-color:transparent;border-style:solid;top:50%;left:1px;margin-top:-9px;border-width:10px 7px 10px 0;border-right-color:#fff;pointer-events:none}.project-repo-buttons .count-with-arrow .count,.group-buttons .count-with-arrow .count{background-color:#fff;border-color:#e5e5e5;color:#2e2e2e;display:inline-block;background:#fff;border-radius:2px;border-width:1px;border-style:solid;font-size:13px;font-weight:600;line-height:13px;letter-spacing:0.4px;padding:6px 14px;text-align:center;vertical-align:middle;touch-action:manipulation;background-image:none;white-space:nowrap;margin:0 10px 0 4px}.project-repo-buttons .count-with-arrow .count:hover,.project-repo-buttons .count-with-arrow .count:focus,.group-buttons .count-with-arrow .count:hover,.group-buttons .count-with-arrow .count:focus{background-color:#f0f0f0;border-color:#e3e3e3;color:#2e2e2e}.project-repo-buttons .count-with-arrow .count:active,.project-repo-buttons .count-with-arrow .count.active,.group-buttons .count-with-arrow .count:active,.group-buttons .count-with-arrow .count.active{box-shadow:rgba(0,0,0,0.16);background-color:#eaeaea;border-color:#e3e3e3;color:#2e2e2e}.project-repo-buttons .count-with-arrow .count a,.group-buttons .count-with-arrow .count a{color:inherit}.project-repo-buttons .count-with-arrow .count:hover,.group-buttons .count-with-arrow .count:hover{background:#fff}.project-repo-buttons .clone-dropdown-btn,.group-buttons .clone-dropdown-btn{background-color:#fff}.project-repo-buttons .clone-options-dropdown,.group-buttons .clone-options-dropdown{min-width:240px}.project-repo-buttons .clone-options-dropdown .dropdown-menu-inner-content,.group-buttons .clone-options-dropdown .dropdown-menu-inner-content{min-width:320px}.split-one{display:inline-table;margin-right:12px}.split-one>a{margin:-1px}.save-project-loader{margin-top:50px;margin-bottom:50px;color:#555}.transfer-project .select2-container{min-width:200px}.deploy-key .fingerprint{word-break:break-all;white-space:normal}.deploy-key .deploy-project-label svg,.deploy-key .key-created-at svg{vertical-align:text-top}.deploy-key .btn svg{vertical-align:top}.deploy-key .key-created-at{line-height:unset}.deploy-project-list{margin-bottom:-4px}.deploy-project-list a.deploy-project-label{margin-right:4px;margin-bottom:4px;color:#707070;background-color:#f2f2f2;line-height:16px}.deploy-project-list a.deploy-project-label:hover,.deploy-project-list .participants-more .deploy-project-label.btn-link:hover,.participants-more .deploy-project-list .deploy-project-label.btn-link:hover,.deploy-project-list .user-list-more .deploy-project-label.btn-link:hover,.user-list-more .deploy-project-list .deploy-project-label.btn-link:hover{color:#1b69b6}.vs-public{color:#1f78d1}.vs-internal{color:#fc9403}.vs-private{color:#1aaa55}.lfs-enabled{color:#1aaa55}.lfs-disabled{color:#fc9403}.breadcrumb.repo-breadcrumb{flex:1;padding:0;background:transparent;border:0;line-height:34px;margin:0}.breadcrumb.repo-breadcrumb>li+li::before{padding:0 3px;color:#999}.breadcrumb.repo-breadcrumb a{color:#2e2e2e}.breadcrumb.repo-breadcrumb .dropdown-menu{width:240px}.fork-thumbnail{height:200px;width:calc((100% / 2) - 32px)}@media (min-width: 768px){.fork-thumbnail{width:calc((100% / 4) - 32px)}}@media (min-width: 992px){.fork-thumbnail{width:calc((100% / 5) - 32px)}}.fork-thumbnail:hover:not(.disabled),.fork-thumbnail.forked{background-color:#f6fafe;border-color:#b8d6f4}.fork-thumbnail .avatar-container,.fork-thumbnail .identicon{float:none;margin-left:auto;margin-right:auto}.fork-thumbnail a{display:block;width:100%;height:100%;padding-top:16px;text-decoration:none}.fork-thumbnail a.disabled{opacity:0.3;cursor:not-allowed}.fork-thumbnail-container{display:flex;flex-wrap:wrap;margin-left:-16px;margin-right:-16px}.fork-thumbnail-container>h5{width:100%}.project-template>.form-group{margin-bottom:0}.project-template .template-option{padding:16px 16px 16px 64px;position:relative}.project-template .template-option:not(:first-child){border-top:1px solid #e5e5e5}.project-template .template-option .btn-template-icon{position:absolute;left:16px;top:16px}.project-template .template-title{font-size:16px}.project-template .template-description{margin:6px 0 12px}.project-template .template-button input{position:absolute;clip:rect(0, 0, 0, 0)}.project-template .project-fields-form{display:none}.project-template .project-fields-form.selected{display:block;padding:16px}.project-template .template-input-group .input-group-prepend{flex:1}.project-template .template-input-group .input-group-text{width:100%;background-color:#fff}.project-template .template-input-group .selected-icon{padding-right:16px}.project-template .template-input-group .selected-icon svg{display:none;top:7px;height:20px;width:20px}.gitlab-tab-content .import-project-pane{padding-bottom:6px}.project-import .import-btn-container{margin-bottom:0}.project-import .toggle-import-form{padding-bottom:10px}.project-import .import-buttons{padding-left:0;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.project-import .import-buttons .btn{padding:8px;margin-right:10px}.project-import .import-buttons .btn-template-icon{height:24px;width:inherit;display:block;margin:0 auto 4px;font-size:24px}@media (min-width: 575px){.project-import .import-buttons .btn-template-icon{top:0}}@media (max-width: 575.98px){.project-import .import-buttons .btn-template-icon{display:inline-block;height:14px;font-size:14px;margin:0}}.project-import .import-buttons>div{margin-bottom:10px;padding-left:0}.create-project-options{display:flex}@media (max-width: 575.98px){.create-project-options{display:block}}.create-project-options .first-column{max-width:50%;padding-right:30px}@media (max-width: 575.98px){.create-project-options .first-column{max-width:100%;width:100%}}.create-project-options .second-column{width:50%;flex:1;padding-left:30px;position:relative}@media (max-width: 575.98px){.create-project-options .second-column{max-width:100%;width:100%;padding-left:0;position:relative}}@media (max-width: 575.98px){.create-project-options .second-column{padding-top:30px}}.create-project-options .second-column::before{content:'OR';position:absolute;left:-10px;top:50%;z-index:10;padding:8px 0;text-align:center;background-color:#fff;color:#919191;transform:translateY(-50%);font-size:12px;font-weight:600;line-height:20px}@media (max-width: 575.98px){.create-project-options .second-column::before{left:50%;top:0;transform:translateX(-50%);padding:0 8px}}.create-project-options .second-column::after{content:'';position:absolute;background-color:#e5e5e5;bottom:0;left:0;right:auto;height:100%;width:1px;top:0}@media (max-width: 575.98px){.create-project-options .second-column::after{top:10px;left:10px;right:10px;height:1px;width:auto}}.project-empty-note-panel{border-bottom:1px solid #e5e5e5}.project-stats{font-size:0;text-align:center;max-width:100%;border-bottom:1px solid #e5e5e5}.project-stats .nav{margin-top:8px;margin-bottom:8px}.project-stats .nav>li{display:inline-block;margin-top:4px;margin-bottom:4px}.project-stats .nav>li:not(:last-child){margin-right:16px}.project-stats .nav>li.right{vertical-align:top;margin-top:0}@media (min-width: 992px){.project-stats .nav>li.right{float:right}}.project-stats .nav .stat-text,.project-stats .nav .stat-link{padding:8px 0;background-color:transparent;font-size:14px;line-height:16px;color:#707070}.project-stats .nav .stat-link:hover,.project-stats .nav .stat-link:focus{color:#2e2e2e;text-decoration:underline}.project-stats .nav .btn{padding:8px 12px;line-height:16px}pre.light-well,pre.description-block{border-color:#f1f1f1}.git-empty{margin-bottom:7px}.git-empty h5{color:#2e2e2e}.git-empty .light-well,.git-empty .description-block{border-radius:2px;color:#5b6169;font-size:13px;line-height:1.6em}.project-footer{margin-top:20px}.project-footer .btn-remove{border-radius:3px;font-size:14px;font-weight:400;padding:6px 10px;background-color:#db3b21;border-color:#c0341d;color:#fff;float:left !important}.project-footer .btn-remove:focus,.project-footer .btn-remove:active{background-color:#ececec;box-shadow:rgba(0,0,0,0.16)}.project-footer .btn-remove:hover,.project-footer .btn-remove:focus{background-color:#c0341d;border-color:#a62d19;color:#fff}.project-footer .btn-remove:active,.project-footer .btn-remove.active{box-shadow:rgba(0,0,0,0.16);background-color:#a62d19;border-color:#8b2615;color:#fff}.projects-list{margin:5px 0;padding:0;list-style:none;display:flex;flex-direction:column}.projects-list>li{padding:10px 0;border-bottom:1px solid #eee;display:block;margin:0}.projects-list>li::after{display:block;clear:both;content:""}.projects-list>li:last-child{border-bottom:0}.projects-list>li.active{background:#fafafa}.projects-list>li.active a{font-weight:600}.projects-list>li.hide{display:none}.projects-list>li.light a,.projects-list>li.description-block a{color:#2e2e2e}.projects-list.admin-projects{display:block}.projects-list.admin-projects .project-row{display:block}.projects-list .project-row{display:flex;align-items:center}.projects-list .project-row .stats{float:right;line-height:42px;color:#2e2e2e}.projects-list .project-row .stats span{margin-right:15px}.projects-list h3{font-size:14px}.projects-list .avatar-container,.projects-list .controls{flex:0 0 auto}.projects-list .avatar-container{align-self:flex-start}.projects-list .avatar-container>a{width:100%}.projects-list .project-details{min-width:0}.projects-list .project-details p,.projects-list .project-details .commit-row-message{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:100%;margin-bottom:0}.projects-list .controls{margin-left:auto;text-align:right}.projects-list .ci-status-link{display:inline-block;line-height:17px;vertical-align:middle}.projects-list .ci-status-link:hover{text-decoration:none}.card .projects-list li,.card-slim .projects-list li{padding:10px 15px;margin:0}.git-clone-holder{width:380px}.git-clone-holder .btn-clipboard{border:1px solid #e5e5e5}.git-clone-holder .clone-options{display:table-cell}.git-clone-holder .clone-options a.btn{width:100%}.git-clone-holder .form-control,.git-clone-holder .search form,.search .git-clone-holder form{background-color:#fff;border-color:#e5e5e5;font-size:14px;margin-left:-1px;cursor:auto}.cannot-be-merged,.cannot-be-merged:hover{color:#db3b21;margin-top:2px}.private-forks-notice .private-fork-icon i:nth-child(1){color:#168f48}.private-forks-notice .private-fork-icon i:nth-child(2){color:#fff}.new-protected-branch label,.new-protected-tag label{margin-top:6px;font-weight:400}.project-tip-command>.input-group-prepend:first-child,.project-tip-command>.input-group-append:first-child{width:auto}.protected-branches-list,.protected-tags-list{margin-bottom:30px}.protected-branches-list .settings-message,.protected-tags-list .settings-message{margin:0;border-radius:0 0 1px 1px;padding:20px 0;border:0}.protected-branches-list .table-bordered,.protected-branches-list .wiki table,.wiki .protected-branches-list table,.protected-branches-list .md table,.md .protected-branches-list table,.protected-branches-list ul.notes>li .note-body .note-text table,ul.notes>li .note-body .note-text .protected-branches-list table,.protected-tags-list .table-bordered,.protected-tags-list .wiki table,.wiki .protected-tags-list table,.protected-tags-list .md table,.md .protected-tags-list table,.protected-tags-list ul.notes>li .note-body .note-text table,ul.notes>li .note-body .note-text .protected-tags-list table{border-radius:1px}.protected-branches-list .table-bordered th:not(:last-child),.protected-branches-list .wiki table th:not(:last-child),.wiki .protected-branches-list table th:not(:last-child),.protected-branches-list .md table th:not(:last-child),.md .protected-branches-list table th:not(:last-child),.protected-branches-list ul.notes>li .note-body .note-text table th:not(:last-child),ul.notes>li .note-body .note-text .protected-branches-list table th:not(:last-child),.protected-branches-list .table-bordered td:not(:last-child),.protected-branches-list .wiki table td:not(:last-child),.wiki .protected-branches-list table td:not(:last-child),.protected-branches-list .md table td:not(:last-child),.md .protected-branches-list table td:not(:last-child),.protected-branches-list ul.notes>li .note-body .note-text table td:not(:last-child),ul.notes>li .note-body .note-text .protected-branches-list table td:not(:last-child),.protected-tags-list .table-bordered th:not(:last-child),.protected-tags-list .wiki table th:not(:last-child),.wiki .protected-tags-list table th:not(:last-child),.protected-tags-list .md table th:not(:last-child),.md .protected-tags-list table th:not(:last-child),.protected-tags-list ul.notes>li .note-body .note-text table th:not(:last-child),ul.notes>li .note-body .note-text .protected-tags-list table th:not(:last-child),.protected-tags-list .table-bordered td:not(:last-child),.protected-tags-list .wiki table td:not(:last-child),.wiki .protected-tags-list table td:not(:last-child),.protected-tags-list .md table td:not(:last-child),.md .protected-tags-list table td:not(:last-child),.protected-tags-list ul.notes>li .note-body .note-text table td:not(:last-child),ul.notes>li .note-body .note-text .protected-tags-list table td:not(:last-child){border-right:solid 1px transparent}.protected-branches-list .flash-container,.protected-tags-list .flash-container{padding:0}.custom-notifications-form .is-loading .custom-notification-event-loading{display:inline-block}.custom-notification-event-loading{display:none;margin-left:5px}.custom-notification-event-loading.is-done{color:#168f48}.project-refs-form .dropdown-menu,.dropdown-menu-projects{width:300px}@media (min-width: 576px){.project-refs-form .dropdown-menu,.dropdown-menu-projects{width:500px}}.project-refs-form .dropdown-menu a,.dropdown-menu-projects a{white-space:normal}.compare-form-group .dropdown-menu,.compare-form-group .inline-input-group{width:100%}@media (min-width: 576px){.compare-form-group .dropdown-menu,.compare-form-group .inline-input-group{width:300px}}.compare-form-group+.compare-ellipsis{width:100%;vertical-align:middle;text-align:center;margin-top:-20px}@media (min-width: 576px){.compare-form-group+.compare-ellipsis{margin:0 8px;width:auto}}.clearable-input{position:relative}.clearable-input .clear-icon{display:none;position:absolute;right:7px;top:7px;color:#e7e9ed}.clearable-input .clear-icon::before{font-family:FontAwesome;font-weight:400;font-style:normal}.clearable-input.has-value .clear-icon{cursor:pointer;display:block}.project-path .form-control,.project-path .search form,.search .project-path form{min-width:100px}@media (min-width: 576px){.project-path.form-group{margin-bottom:0}}.project-path .select2-choice{border-top-right-radius:0;border-bottom-right-radius:0}.project-home-empty{border-top:0}.project-home-empty .container-fluid{background:none}.project-home-empty p{margin-left:auto;margin-right:auto;max-width:650px}.project-feature{padding-top:10px}@media (min-width: 576px){.project-feature{padding-left:45px}}@media (min-width: 576px){.project-feature.nested{padding-left:90px}}.variables-table{table-layout:fixed}.variables-table.table-responsive{border:0}.variables-table .variable-key{max-width:120px;overflow:hidden;word-wrap:break-word;white-space:nowrap;text-overflow:ellipsis}.variables-table .variable-value{max-width:150px;overflow:hidden;word-wrap:break-word;white-space:nowrap;text-overflow:ellipsis}.variables-table .variable-menu{text-align:right}.services-installation-info .row{margin-bottom:10px}.service-installation{padding:32px;margin:32px;border-radius:3px;background-color:#fff}.service-installation h3{margin-top:0}.service-installation hr{margin:32px 0;border-color:#e5e5e5}.issuable-footer{padding-top:16px;padding-bottom:37px}.project-ci-body .incorrect-syntax{font-size:18px;color:#db3b21}.project-ci-body .correct-syntax{font-size:18px;color:#1aaa55}.project-ci-linter .ci-editor{height:400px}.project-ci-linter .ci-template pre{white-space:pre-wrap}.project-badge{opacity:0.9}.project-badge:hover{opacity:1}.project-refs-form,.project-refs-target-form{display:inline-block}.fade-enter,.fade-leave-to{opacity:0}.commit-message{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:250px}.editable-mode{display:inline-block}.ide-view{position:relative;display:flex;height:calc(100vh - 40px);margin-top:0;border-top:1px solid #eaeaea;padding-bottom:25px;color:#2e2e2e}.ide-view.is-collapsed .ide-file-list{max-width:250px}.ide-view .file-status-icon{width:10px;height:10px}.ide-file-list{flex:1;padding-left:16px;padding-right:16px;padding-bottom:8px}.ide-file-list .file{cursor:pointer}.ide-file-list .file.file-active{background:#f2f2f2}.ide-file-list .file .ide-file-name{flex:1;white-space:nowrap;text-overflow:ellipsis;max-width:inherit;line-height:16px;display:inline-block;height:18px}.ide-file-list .file .ide-file-name svg{vertical-align:middle;margin-right:2px}.ide-file-list .file .ide-file-name .loading-container{margin-right:4px;display:inline-block}.ide-file-list .file .ide-file-icon-holder{display:flex;align-items:center}.ide-file-list .file .ide-file-changed-icon{margin-left:auto}.ide-file-list .file .ide-file-changed-icon>svg{display:block}.ide-file-list .file .ide-new-btn{display:none}.ide-file-list .file .ide-new-btn .btn{padding:2px 5px}.ide-file-list .file:hover .ide-new-btn,.ide-file-list .file:focus .ide-new-btn{display:block}.ide-file-list .file .folder-icon{fill:#707070}.ide-file-list a{color:#2e2e2e}.ide-file-list th{position:sticky;top:0}.file-name{display:flex;overflow:visible;align-items:center;width:100%}.multi-file-loading-container{margin-top:10px;padding:10px}.multi-file-table-col-commit-message{white-space:nowrap;width:50%}.multi-file-edit-pane{display:flex;flex-direction:column;flex:1;border-left:1px solid #eaeaea;overflow:hidden}.multi-file-tabs{display:flex;background-color:#f0f0f0;box-shadow:inset 0 -1px #eaeaea}.multi-file-tabs>ul{display:flex;overflow-x:auto}.multi-file-tabs li{display:flex;align-items:center;padding:8px 16px;background-color:#f5f5f5;border-right:1px solid #eaeaea;border-bottom:1px solid #eaeaea}.multi-file-tabs li.active{background-color:#fff;border-bottom-color:#fff}.multi-file-tab{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:141px;cursor:pointer}.multi-file-tab svg{vertical-align:middle}.multi-file-tab-close{width:16px;height:16px;padding:0;margin-left:8px;background:none;border:0;border-radius:4px;color:#2e2e2e}.multi-file-tab-close svg{position:relative;top:-2px}.multi-file-tab-close .ide-file-changed-icon{display:block;position:relative;top:1px;right:-2px}.multi-file-tab-close:not([disabled]):hover{background-color:#dfdfdf}.multi-file-tab-close:not([disabled]):focus{background-color:#1f78d1;color:#fff;outline:0}.multi-file-tab-close:not([disabled]):focus svg{fill:currentColor}.multi-file-edit-pane-content{flex:1;height:0}.blob-editor-container{flex:1;height:0;display:flex;flex-direction:column;justify-content:center}.blob-editor-container .vertical-center{min-height:auto}.blob-editor-container .monaco-editor .lines-content .cigr{display:none}.blob-editor-container .is-readonly .view-lines,.blob-editor-container .editor.original .view-lines{cursor:default}.blob-editor-container .is-readonly .cursors-layer,.blob-editor-container .editor.original .cursors-layer{display:none}.blob-editor-container .monaco-diff-editor.vs .editor.modified{box-shadow:none}.blob-editor-container .monaco-diff-editor.vs .diagonal-fill{display:none !important}.blob-editor-container .monaco-diff-editor.vs .diffOverview{background-color:#fff;border-left:1px solid #eaeaea;cursor:ns-resize}.blob-editor-container .monaco-diff-editor.vs .diffViewport{display:none}.blob-editor-container .monaco-diff-editor.vs .char-insert{background-color:#c7f0d2}.blob-editor-container .monaco-diff-editor.vs .char-delete{background-color:#fac5cd}.blob-editor-container .monaco-diff-editor.vs .line-numbers{color:rgba(0,0,0,0.3)}.blob-editor-container .monaco-diff-editor.vs .view-overlays .line-insert{background-color:#ecfdf0}.blob-editor-container .monaco-diff-editor.vs .view-overlays .line-delete{background-color:#fbe9eb}.blob-editor-container .monaco-diff-editor.vs .margin{background-color:#fff;border-right:1px solid #f2f2f2}.blob-editor-container .monaco-diff-editor.vs .margin .line-insert{border-right:1px solid #c7f0d2}.blob-editor-container .monaco-diff-editor.vs .margin .line-delete{border-right:1px solid #fac5cd}.blob-editor-container .monaco-diff-editor.vs .margin-view-overlays .insert-sign,.blob-editor-container .monaco-diff-editor.vs .margin-view-overlays .delete-sign{opacity:0.4}.multi-file-editor-holder{height:100%;min-height:0}.multi-file-editor-holder.is-readonly .monaco-editor,.multi-file-editor-holder.is-readonly .monaco-editor-background,.multi-file-editor-holder.is-readonly .monaco-editor .inputarea.ime-input,.multi-file-editor-holder .editor.original .monaco-editor,.multi-file-editor-holder .editor.original .monaco-editor-background,.multi-file-editor-holder .editor.original .monaco-editor .inputarea.ime-input{background-color:#fafafa}.preview-container{flex-grow:1;position:relative}.preview-container .md-previewer{position:absolute;top:0;left:0;width:100%;height:100%;overflow:auto;padding:16px}.preview-container .file-container{background-color:#eee;display:flex;height:100%;align-items:center;justify-content:center;text-align:center}.preview-container .file-container .file-content{padding:16px;max-width:100%;max-height:100%}.preview-container .file-container .file-content img{max-width:90%}.preview-container .file-container .file-content .isZoomable{cursor:pointer;cursor:zoom-in}.preview-container .file-container .file-content .isZoomable.isZoomed{cursor:pointer;cursor:zoom-out;max-width:none;max-height:none;margin-right:16px}.preview-container .file-container .file-info{font-size:12px;color:grey}.ide-mode-tabs{border-bottom:1px solid #eaeaea}.ide-mode-tabs .nav-links{border-bottom:0}.ide-mode-tabs .nav-links li a{padding:8px 16px;line-height:16px}.ide-btn-group{padding:4px 6px;line-height:24px}.ide-status-bar{border-top:1px solid #eaeaea;padding:2px 8px 0;background:#fff;display:flex;justify-content:space-between;height:25px;position:absolute;bottom:0;left:0;width:100%;font-size:12px;line-height:22px}.ide-status-bar *{font-size:inherit}.ide-status-bar>div+div{padding-left:16px}.ide-status-bar svg{vertical-align:sub}.ide-status-file{text-align:right}.ide-status-branch+.ide-status-file,.ide-status-file:first-child{margin-left:auto}.multi-file-preview-holder{height:100%;overflow:scroll}.multi-file-preview-holder .file-content.code{display:flex}.multi-file-preview-holder .file-content.code i{margin-left:-10px}.multi-file-preview-holder .line-numbers{min-width:50px}.multi-file-preview-holder .file-content,.multi-file-preview-holder .line-numbers,.multi-file-preview-holder .blob-content,.multi-file-preview-holder .code{min-height:100%}.file-content.blob-no-preview a{margin-left:auto;margin-right:auto}.multi-file-commit-panel{display:flex;position:relative;width:340px;padding:0;background-color:#fafafa;padding-right:1px}.multi-file-commit-panel .context-header{width:auto;margin-right:0}.multi-file-commit-panel .context-header>a,.multi-file-commit-panel .context-header>button{height:60px}.multi-file-commit-panel .projects-sidebar{min-height:0;display:flex;flex-direction:column;flex:1}.multi-file-commit-panel .multi-file-commit-panel-inner{position:relative;display:flex;flex-direction:column;height:100%;min-width:0;width:100%}.multi-file-commit-panel .multi-file-commit-panel-inner-scroll{display:flex;flex:1;flex-direction:column;overflow:auto;background-color:#fff;border-left:1px solid #eaeaea;border-top:1px solid #eaeaea;border-top-left-radius:2px}.multi-file-commit-panel-section{display:flex;flex-direction:column;flex:1;max-height:100%;overflow:auto}.ide-commit-empty-state{padding:0 16px}.ide-commit-empty-state-container{margin-top:auto;margin-bottom:auto}.multi-file-commit-panel-header{display:flex;align-items:center;margin-bottom:0;border-bottom:1px solid #eaeaea;padding:12px 0}.multi-file-commit-panel-header-title{display:flex;flex:1;align-items:center}.multi-file-commit-panel-header-title svg{margin-right:10px;color:#707070}.multi-file-commit-panel-collapse-btn{border-left:1px solid #eaeaea;margin-left:auto}.multi-file-commit-list{flex:1;overflow:auto;padding:8px 0;margin-left:-8px;margin-right:-8px;min-height:60px}.multi-file-commit-list.form-text.text-muted{margin-left:0;right:0}.multi-file-addition,.multi-file-addition-solid{color:#1aaa55}.multi-file-modified,.multi-file-modified-solid{color:#fc9403}.multi-file-commit-list-collapsed{display:flex;flex-direction:column;padding:16px 0}.multi-file-commit-list-collapsed svg{display:block;margin-left:auto;margin-right:auto;color:#707070}.multi-file-commit-list-collapsed .file-status-icon{width:10px;height:10px;margin-left:3px}.multi-file-commit-list-path,.ide-file-list .file{display:flex;align-items:center;margin-left:-8px;margin-right:-8px;padding:4px 8px;border-radius:4px;text-align:left}.multi-file-commit-list-path:hover,.multi-file-commit-list-path:focus,.ide-file-list .file:hover,.ide-file-list .file:focus{background:#f2f2f2}.multi-file-commit-list-path:active,.ide-file-list .file:active{background:#dfdfdf}.multi-file-commit-list-path{cursor:pointer}.multi-file-commit-list-path.is-active{background-color:#f0f0f0}.multi-file-commit-list-path:hover,.multi-file-commit-list-path:focus{outline:0}.multi-file-commit-list-path svg{min-width:16px;vertical-align:middle;display:inline-block}.multi-file-commit-list-file-path{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:calc(100% - 30px)}.multi-file-commit-list-file-path:active{text-decoration:none}.multi-file-discard-btn{top:4px;right:8px;bottom:4px}.multi-file-discard-btn svg{top:0}.multi-file-commit-form{position:relative;background-color:#fff;border-left:1px solid #eaeaea;transition:all 0.3s ease}.multi-file-commit-form>form,.multi-file-commit-form>.commit-form-compact{padding:16px 0;margin-left:16px;margin-right:16px;border-top:1px solid #eaeaea}.multi-file-commit-form .btn{font-size:14px}.multi-file-commit-form .multi-file-commit-panel-success-message{top:0}.multi-file-commit-panel-bottom{position:relative}.dirty-diff{width:4px !important;left:0 !important}.dirty-diff-modified{background-color:#1f78d1}.dirty-diff-added{background-color:#168f48}.dirty-diff-removed{height:0 !important;width:0 !important;bottom:-2px;border-style:solid;border-width:5px;border-color:transparent transparent transparent #db3b21}.dirty-diff-removed::before{content:'';position:absolute;left:0;top:0;width:100px;height:1px;background-color:rgba(219,59,33,0.5)}.ide-loading{display:flex;height:100vh;align-items:center;justify-content:center}.ide-empty-state{display:flex;height:100vh;align-items:center;justify-content:center}.ide-new-btn .btn{padding-top:3px;padding-bottom:3px}.ide-new-btn .dropdown{display:flex}.ide-new-btn .dropdown-toggle svg,.ide-new-btn .dropdown-menu-toggle svg{top:0}.ide-new-btn .dropdown-menu{left:auto;right:0}.ide-new-btn .dropdown-menu label{font-weight:400;padding:5px 8px;margin-bottom:0}.ide{overflow:hidden}.ide.nav-only{padding-top:40px}.with-performance-bar .ide.nav-only{padding-top:75px}.ide.nav-only .flash-container{margin-top:0;margin-bottom:0}.ide.nav-only .alert-wrapper .flash-container .flash-alert:last-child,.ide.nav-only .alert-wrapper .flash-container .flash-notice:last-child{margin-bottom:0}.ide.nav-only .content-wrapper{margin-top:0;padding-bottom:0}.ide.nav-only.flash-shown .content-wrapper{margin-top:0}.ide.nav-only.flash-shown .ide-view{height:calc(100vh - 92px)}.ide.nav-only .projects-sidebar .multi-file-commit-panel-inner-scroll{flex:1}.with-performance-bar .ide.nav-only .flash-container{margin-top:0}.with-performance-bar .ide.nav-only .content-wrapper{margin-top:0;padding-bottom:0}.with-performance-bar .ide.nav-only .ide-view{height:calc(100vh - 75px)}.with-performance-bar .ide.nav-only.flash-shown .ide-view{height:calc(100vh - 127px)}.dragHandle{position:absolute;top:0;bottom:0;width:1px;background-color:#eaeaea}.dragHandle.dragright{right:0}.dragHandle.dragleft{left:0}.ide-commit-list-container{display:flex;flex:1;flex-direction:column;min-height:140px;margin-left:16px;margin-right:16px}.ide-commit-list-container.is-first{border-bottom:1px solid #eaeaea}.ide-staged-action-btn{width:22px;margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.ide-staged-action-btn>svg{top:0}.ide-commit-file-count{min-width:22px;background-color:#fafafa;border:1px solid #eaeaea}.ide-commit-radios label{font-weight:normal}.ide-commit-radios label.is-disabled .ide-radio-label{text-decoration:line-through}.ide-commit-radios .form-text.text-muted{margin-top:0;line-height:0}.ide-commit-new-branch{margin-left:25px}.ide-sidebar-link{display:flex;align-items:center;position:relative;height:60px;width:100%;padding:0 16px;color:#707070;background-color:transparent;border:0;border-top:1px solid transparent;border-bottom:1px solid transparent;outline:0;cursor:pointer}.ide-sidebar-link svg{margin:0 auto}.ide-sidebar-link:hover{color:#2e2e2e;background-color:#f2f2f2}.ide-sidebar-link:focus{color:#2e2e2e;background-color:#dfdfdf}.ide-sidebar-link.active{width:calc(100% + 1px);padding-right:17px;background-color:#fff;border-top-color:#eaeaea;border-bottom-color:#eaeaea}.ide-sidebar-link.active::after{content:'';position:absolute;right:-1px;top:0;bottom:0;width:1px;background:#fff}.ide-sidebar-link.active.is-right{padding-right:16px;padding-left:17px}.ide-sidebar-link.active.is-right::after{right:auto;left:-1px}.ide-activity-bar{position:relative;flex:0 0 60px;z-index:1}.ide-file-finder-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:100}.ide-file-finder{top:10px;left:50%;transform:translateX(-50%)}.ide-file-finder .highlighted{color:#1f78d1;font-weight:600}.ide-commit-message-field{height:200px;background-color:#fff}.ide-commit-message-field .md-area{display:flex;flex-direction:column;height:100%}.ide-commit-message-field .nav-links{height:30px}.ide-commit-message-field .form-text.text-muted{margin-top:2px;color:#1f78d1;cursor:pointer}.ide-commit-message-textarea-container{position:relative;width:100%;height:100%;overflow:hidden}.ide-commit-message-textarea-container .note-textarea{font-family:"Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace}.ide-commit-message-highlights-container{position:absolute;left:0;top:0;right:-100px;bottom:0;padding-right:100px;pointer-events:none;z-index:1}.ide-commit-message-highlights-container .highlights{white-space:pre-wrap;word-wrap:break-word;color:transparent}.ide-commit-message-highlights-container mark{margin-left:-1px;padding:0 2px;border-radius:2px;background-color:#fed69f;color:transparent;opacity:0.6}.ide-commit-message-textarea{position:absolute;left:0;top:0;right:0;bottom:0;width:100%;height:100%;z-index:2;background:transparent;resize:none}.ide-tree-header{display:flex;align-items:center;margin-bottom:8px;padding:12px 0;border-bottom:1px solid #eaeaea}.ide-tree-header .ide-new-btn{margin-left:auto}.ide-sidebar-branch-title{font-weight:400}.ide-sidebar-branch-title svg{position:relative;top:3px;margin-top:-1px}.commit-form-compact .btn{margin-bottom:8px}.commit-form-compact p{margin-bottom:0}.commit-form-slide-up-enter-active,.commit-form-slide-up-leave-active{position:absolute;top:0;left:0;right:0;transition:all 0.3s ease}.is-full .commit-form-slide-up-enter,.is-compact .commit-form-slide-up-leave-to{transform:translateY(100%)}.is-full .commit-form-slide-up-enter-to,.is-compact .commit-form-slide-up-leave{transform:translateY(0)}.commit-form-slide-up-enter,.commit-form-slide-up-leave-to{opacity:0}.ide-review-header{flex-direction:column;align-items:flex-start}.ide-review-header .dropdown{margin-left:auto}.ide-review-header a{color:#1b69b6}.ide-review-sub-header{color:#707070}.ide-tree-changes{display:flex;align-items:center;font-size:12px}.multi-file-commit-panel-success-message{position:absolute;top:61px;left:1px;bottom:0;right:0;z-index:10;background:#fff;overflow:auto;display:flex;flex-direction:column;justify-content:center}.ide-review-button-holder{display:flex;width:100%;align-items:center}.ide-context-header .avatar{flex:0 0 38px}.ide-context-header .ide-merge-requests-dropdown.dropdown-menu{width:385px;max-height:initial}.ide-sidebar-project-title{min-width:0}.ide-sidebar-project-title .sidebar-context-title{white-space:nowrap}.ide-sidebar-project-title .ide-sidebar-branch-title{min-width:50px}.ide-external-link{position:relative}.ide-external-link svg{display:none;position:absolute;top:2px;right:-16px}.ide-external-link:hover svg,.ide-external-link:focus svg{display:inline-block}.ide-right-sidebar{width:auto;min-width:60px}.ide-right-sidebar .ide-activity-bar{border-left:1px solid #eaeaea}.ide-right-sidebar .multi-file-commit-panel-inner{width:350px;padding:8px 16px;background-color:#fff;border-left:1px solid #eaeaea}.ide-pipeline{display:flex;flex-direction:column;height:100%;margin-top:-8px;margin-bottom:-8px}.ide-pipeline .empty-state{margin-top:auto;margin-bottom:auto}.ide-pipeline .empty-state p{margin:8px 0;text-align:center;line-height:24px}.ide-pipeline .empty-state .btn,.ide-pipeline .empty-state h4{margin:0}.ide-pipeline .build-trace,.ide-pipeline .top-bar{margin-left:-16px}.ide-pipeline.build-page .top-bar{top:0;font-size:12px;border-top-right-radius:4px}.ide-pipeline-list{flex:1;overflow:auto}.ide-pipeline-header{min-height:55px;padding-left:16px;padding-right:16px}.ide-pipeline-header .ci-status-icon{display:flex}.ide-job-item{display:flex;padding:16px}.ide-job-item:not(:last-child){border-bottom:1px solid #e5e5e5}.ide-job-item .ci-status-icon{display:flex;justify-content:center;min-width:24px;overflow:hidden}.ide-stage .card-header{display:flex;cursor:pointer}.ide-stage .card-header .ci-status-icon{display:flex;align-items:center}.ide-stage .card-body{padding:0}.ide-stage-collapse-icon{margin:auto 0 auto auto}.ide-stage-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ide-job-header{min-height:60px}.ide-merge-requests-dropdown .nav-links li{width:50%;padding-left:0;padding-right:0}.ide-merge-requests-dropdown .nav-links li a{text-align:center}.ide-merge-requests-dropdown .nav-links li a:not(.active){background-color:#fafafa}.ide-merge-requests-dropdown .dropdown-input{padding-left:16px;padding-right:16px}.ide-merge-requests-dropdown .dropdown-input .fa{right:26px}.ide-merge-requests-dropdown .btn-link{padding-top:16px;padding-bottom:16px}.ide-merge-request-current-icon{min-width:18px}.ide-merge-requests-empty{height:230px}.ide-merge-requests-dropdown-content{min-height:230px;max-height:470px}.ide-merge-request-project-path{font-size:12px;line-height:16px;color:#707070}.ide-merge-request-info .detail-page-header{line-height:initial;min-height:38px}.ide-merge-request-info .issuable-details{overflow:auto}.runner-state{padding:6px 12px;margin-right:10px;color:#fff}.runner-state.runner-state-shared{background:#37b96d}.runner-state.runner-state-specific{background:#2e87e0}.runner-status-online{color:#168f48}.runner-status-offline{color:#c4c4c4}.runner-status-paused{color:#db3b21}.runner .btn{padding:1px 6px}.runner h4{font-weight:400}.admin-runner-btn-group-cell{min-width:150px}.admin-runner-btn-group-cell .btn-sm,.admin-runner-btn-group-cell .btn-group-sm>.btn{padding:4px 9px}.admin-runner-btn-group-cell .btn-default{color:#707070}.admin-runner-btn-group-cell .fa-pause,.admin-runner-btn-group-cell .fa-play{font-size:11px}@media (max-width: 991.98px){.runners-content{width:100%;overflow:auto}}.search-results .search-result-row{border-bottom:1px solid #e5e5e5;padding-bottom:16px;margin-bottom:16px}.search-results .search-result-row:last-child{border-bottom:0}.search-results .blob-result{margin:5px 0}.search form:hover,.file-finder-input:hover,.issuable-search-form:hover,.search-text-input:hover,.form-control:hover,.filtered-search-box:hover,.search form:hover,:not[readonly]{border-color:#cce2f7;box-shadow:0 0 4px rgba(204,226,247,0.4)}input[type="checkbox"]:hover{box-shadow:0 0 2px 2px rgba(204,226,247,0.4),0 0 0 1px rgba(204,226,247,0.4)}.search{margin:0 8px}.search form{margin:0;padding:4px;width:220px;line-height:24px;height:32px;border:0;border-radius:4px;transition:border-color ease-in-out 0.15s, background-color ease-in-out 0.15s}.search form:hover{box-shadow:none}.search .location-badge{white-space:nowrap;height:32px;font-size:12px;margin:-4px 4px -4px -4px;line-height:25px;padding:4px 8px;border-radius:4px 0 0 4px;transition:border-color ease-in-out 0.15s}.search .search-input{border:0;font-size:14px;padding:0 20px 0 0;margin-left:5px;line-height:25px;width:98%;color:#fff;background:none;transition:color ease-in-out 0.15s}.search .search-input::placeholder{transition:color ease-in-out 0.15s}.search .search-input-container{display:flex;position:relative}.search .search-input-wrap .search-icon,.search .search-input-wrap .clear-icon{position:absolute;right:5px;top:4px}.search .search-input-wrap .search-icon{transition:color 0.15s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.search .search-input-wrap .clear-icon{display:none}.search .search-input-wrap .dropdown{position:static}.search .search-input-wrap .dropdown-header{text-transform:uppercase;font-size:11px}.search .search-input-wrap .dropdown-menu{left:-5px}.search .search-input-wrap .dropdown-content{max-height:none}.search.search-active form{border-color:#73afea;box-shadow:none}.search.search-active form .search-input-wrap .search-icon,.search.search-active form .search-input-wrap .clear-icon{color:#919191;transition:color ease-in-out 0.15s}.search.search-active form .search-input{color:#2e2e2e;transition:color ease-in-out 0.15s}.search.search-active form .search-input::placeholder{color:#919191}.search.search-active .location-badge{transition:all 0.15s;background-color:#eee;border-color:#e5e5e5}.search.has-value .search-icon{display:none}.search.has-value .clear-icon{cursor:pointer;display:block}.search.has-location-badge .search-input-wrap{width:68%}@media (min-width: 576px){.search-holder{display:-webkit-flex;display:flex}}.search-holder .search-field-holder,.search-holder .project-filter-form{-webkit-flex:1 0 auto;flex:1 0 auto;position:relative;margin-right:0}@media (min-width: 576px){.search-holder .search-field-holder,.search-holder .project-filter-form{margin-right:5px}}.search-holder .search-icon{position:absolute;left:10px;top:10px;color:#c4c4c4;pointer-events:none}.search-holder .search-text-input,.search-holder .project-filter-form-field{padding-left:31px;padding-right:31px}.search-holder .btn-search,.search-holder .btn-new{width:100%;margin-top:5px}@media (min-width: 576px){.search-holder .btn-search,.search-holder .btn-new{width:auto;margin-top:0;margin-left:5px}}@media (min-width: 576px){.search-holder .dropdown{margin-left:5px;margin-right:5px}}.search-holder .dropdown-menu-toggle{width:100%;margin-top:5px}@media (min-width: 576px){.search-holder .dropdown-menu-toggle{width:180px;margin-top:0}}.search-clear{position:absolute;right:10px;top:10px;padding:0;color:#c4c4c4;line-height:0;background:none;border:0}.search-clear:hover,.search-clear:focus{color:#1b69b6}@keyframes expandMaxHeight{0%{max-height:0}99%{max-height:100vh}100%{max-height:none}}@keyframes collapseMaxHeight{0%{max-height:100vh}100%{max-height:0}}.settings{border-bottom:1px solid #eee}.settings:first-of-type{margin-top:10px}.settings.animating{overflow:hidden}.settings-header{position:relative;padding:20px 110px 10px 0}.settings-header h4{margin-top:0}.settings-header button{position:absolute;top:20px;right:6px;min-width:80px}.settings-content{max-height:1px;overflow-y:hidden;padding-right:110px;animation:collapseMaxHeight 300ms ease-out;pointer-events:none}.settings.expanded .settings-content{max-height:none;overflow-y:visible;animation:expandMaxHeight 300ms ease-in;pointer-events:auto}.settings.no-animate .settings-content{animation:none}@media (max-width: 767px){.settings-content{padding-right:20px}}.settings-content::before{content:' ';display:block;height:1px;overflow:hidden;margin-bottom:4px}.settings-content::after{content:' ';display:block;height:1px;overflow:hidden;margin-top:20px}.settings-content .sub-section{margin-bottom:32px;padding:16px;border:1px solid #e5e5e5;background-color:#fafafa}.settings-content .bs-callout,.settings-content .form-check:first-child,.settings-content .form-text.text-muted{margin-top:0}.settings-list-icon{color:#707070;font-size:18px;line-height:42px}.settings-message{padding:5px;line-height:1.3;color:#c26700;background-color:#fff1de;border:1px solid #fed69f;border-radius:3px}.warning-title{color:#fc9403}.danger-title{color:#db3b21}.integration-settings-form .card.card-body,.integration-settings-form .search_box,.integration-settings-form .card-body.card-slim,.integration-settings-form .info-well{padding:8px;box-shadow:none}.integration-settings-form .svg-container{max-width:150px}.token-token-container #impersonation-token-token{width:80%;display:inline}.token-token-container .btn-clipboard{margin-left:5px}.visibility-level-setting .form-check{margin-bottom:10px}.visibility-level-setting .form-check i.fa{margin:2px 0;font-size:20px}.visibility-level-setting .form-check .option-title{font-weight:400;display:inline-block;color:#2e2e2e}.visibility-level-setting .form-check .option-description,.visibility-level-setting .form-check .option-disabled-reason{margin-left:30px;color:#54565b}.visibility-level-setting .form-check .option-disabled-reason{display:none}.visibility-level-setting .form-check.disabled i.fa{opacity:0.5}.visibility-level-setting .form-check.disabled .option-description{display:none}.visibility-level-setting .form-check.disabled .option-disabled-reason{display:block}.initialize-with-readme-setting .form-check{margin-bottom:10px}.initialize-with-readme-setting .form-check .option-title{font-weight:400;display:inline-block;color:#2e2e2e}.initialize-with-readme-setting .form-check .option-description{color:#54565b}.prometheus-metrics-monitoring .card .card-toggle,.prometheus-metrics-monitoring .card-slim .card-toggle{width:14px}.prometheus-metrics-monitoring .card .badge.badge-pill,.prometheus-metrics-monitoring .card-slim .badge.badge-pill,.prometheus-metrics-monitoring .card .shortcut-mappings .key,.shortcut-mappings .prometheus-metrics-monitoring .card .key,.prometheus-metrics-monitoring .card-slim .shortcut-mappings .key,.shortcut-mappings .prometheus-metrics-monitoring .card-slim .key{font-size:12px;line-height:12px}.prometheus-metrics-monitoring .card .card-header .label-count,.prometheus-metrics-monitoring .card-slim .card-header .label-count{color:#fff;background:#444}.prometheus-metrics-monitoring .card .card-body,.prometheus-metrics-monitoring .card-slim .card-body{padding:0}.prometheus-metrics-monitoring .card .flash-container,.prometheus-metrics-monitoring .card-slim .flash-container{margin-bottom:0;cursor:default}.prometheus-metrics-monitoring .card .flash-container .flash-notice,.prometheus-metrics-monitoring .card-slim .flash-container .flash-notice{border-radius:0}.prometheus-metrics-monitoring .loading-metrics,.prometheus-metrics-monitoring .empty-metrics{padding:30px 10px}.prometheus-metrics-monitoring .loading-metrics p,.prometheus-metrics-monitoring .loading-metrics .btn,.prometheus-metrics-monitoring .empty-metrics p,.prometheus-metrics-monitoring .empty-metrics .btn{margin-top:10px;margin-bottom:0}.prometheus-metrics-monitoring .loading-metrics .metrics-load-spinner{color:#555}.prometheus-metrics-monitoring .metrics-list{margin-bottom:0}.prometheus-metrics-monitoring .metrics-list li{padding:16px}.prometheus-metrics-monitoring .metrics-list li .badge.badge-pill,.prometheus-metrics-monitoring .metrics-list li .shortcut-mappings .key,.shortcut-mappings .prometheus-metrics-monitoring .metrics-list li .key{margin-left:5px;background:rgba(0,0,0,0.07)}.prometheus-metrics-monitoring .metrics-list li+li{border-top:1px solid #e5e5e5}.modal-doorkeepr-auth .modal-body{padding:16px}.deprecated-service{cursor:default}.personal-access-tokens-never-expires-label{color:#b2b2b2}.created-deploy-token-container .deploy-token-field{width:90%;display:inline}.created-deploy-token-container .btn-clipboard{background-color:#fff;border:1px solid #dfdfdf}.created-deploy-token-container .deploy-token-help-block{display:block;margin-bottom:0}.triggers-container .label-container{display:inline-block;margin-left:10px}.trigger-actions{white-space:nowrap}.trigger-actions .btn{margin-left:10px}.registry-placeholder{min-height:60px}.auto-devops-card{margin-bottom:6px}.auto-devops-card>.card-body{border-radius:0.25rem;padding:16px 24px}table .sherlock-code{max-width:700px}.sherlock-code pre{word-wrap:normal}.sherlock-code pre code{white-space:pre}.sherlock-line-samples-table{margin-bottom:0 !important}.sherlock-line-samples-table thead tr th,.sherlock-line-samples-table tbody tr td{font-size:13px !important;text-align:right;padding:0 10px !important}.sherlock-line-samples-table .slow{color:#db3b21;font-weight:600}.sherlock-file-sample pre{padding-top:28px !important}.tint-box{background:#f3f3f3;position:relative;margin-bottom:10px}.area{fill:#1aaa55;fill-opacity:0.5}.axis{font-size:10px}@media (min-width: 768px){#contributors-master{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px;flex:0 0 100%;max-width:100%}}#contributors-master svg{width:100%}#contributors .contributors-list{margin:0 0 10px;list-style:none;padding:0}#contributors .contributors-list svg{width:100%}#contributors .person{margin-top:10px}@media (min-width: 768px){#contributors .person{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px;flex:0 0 50%;max-width:50%}}@media (max-width: 575.98px){#contributors .person{width:100%}}#contributors .person .spark{display:block;background:#f3f3f3;width:100%}#contributors .person .area-contributor{fill:#fc9403}.selection rect{fill-opacity:0.1;stroke-width:1px;stroke-opacity:0.4;shape-rendering:crispedges;stroke-dasharray:3 3}.ci-status{padding:2px 7px 4px;border:1px solid #eee;white-space:nowrap;border-radius:4px}.ci-status:hover,.ci-status:focus{text-decoration:none}.ci-status svg{height:13px;width:13px;position:relative;top:2px;overflow:visible}.ci-status.ci-failed{color:#db3b21;border-color:#db3b21}.ci-status.ci-failed:not(span):hover{background-color:#fbe5e1;color:#c0341d;border-color:#c0341d}.ci-status.ci-success{color:#1aaa55;border-color:#1aaa55}.ci-status.ci-success:not(span):hover{background-color:#dcf5e7;color:#12753a;border-color:#12753a}.ci-status.ci-canceled,.ci-status.ci-disabled,.ci-status.ci-manual{color:#2e2e2e;border-color:#2e2e2e}.ci-status.ci-canceled:not(span):hover,.ci-status.ci-disabled:not(span):hover,.ci-status.ci-manual:not(span):hover{background-color:rgba(46,46,46,0.07)}.ci-status.ci-pending,.ci-status.ci-failed_with_warnings,.ci-status.ci-success_with_warnings{color:#fc9403;border-color:#fc9403}.ci-status.ci-pending:not(span):hover,.ci-status.ci-failed_with_warnings:not(span):hover,.ci-status.ci-success_with_warnings:not(span):hover{background-color:#fff1de;color:#c26700;border-color:#c26700}.ci-status.ci-info,.ci-status.ci-running{color:#1f78d1;border-color:#1f78d1}.ci-status.ci-info:not(span):hover,.ci-status.ci-running:not(span):hover{background-color:#e4f0fb;color:#1b69b6;border-color:#1b69b6}.ci-status.ci-created,.ci-status.ci-skipped{color:#707070;border-color:#707070}.ci-status.ci-created:not(span):hover,.ci-status.ci-skipped:not(span):hover{background-color:rgba(112,112,112,0.07)}.d-block.d-sm-none-inline .ci-status-link{position:relative;top:2px;left:5px}.ci-status-link svg{overflow:visible}.todos-list>.todo{border-top:1px solid transparent;display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row}.todos-list>.todo:hover{background-color:#f6fafe;border-color:#b8d6f4;cursor:pointer}.todos-list>.todo:last-child{border-bottom:1px solid transparent}.todos-list>.todo:last-child:hover{border-color:#b8d6f4}.todos-list>.todo .todo-avatar,.todos-list>.todo .todo-actions{transition:opacity 100ms linear;-webkit-flex:0 0 auto;flex:0 0 auto}.todos-list>.todo .todo-actions{display:-webkit-flex;display:flex;-webkit-justify-content:center;justify-content:center;-webkit-flex-direction:column;flex-direction:column;margin-left:10px;min-width:55px}.todos-list>.todo .todo-item{-webkit-flex:0 1 100%;flex:0 1 100%;min-width:0}.todos-list>.todo.todo-pending.done-reversible{background-color:#fff}.todos-list>.todo.todo-pending.done-reversible:hover{border-color:#f0f0f0;background-color:#fafafa;border-top:1px solid transparent}.todos-list>.todo.todo-pending.done-reversible:hover .todo-avatar,.todos-list>.todo.todo-pending.done-reversible:hover .todo-item{opacity:.6}.todos-list>.todo.todo-pending.done-reversible .todo-avatar,.todos-list>.todo.todo-pending.done-reversible .todo-item{opacity:.2}.todos-list>.todo.todo-pending.done-reversible .btn{background-color:#fafafa}.todo-item{transition:opacity 100ms linear}.todo-item .todo-title{display:flex}.todo-item .todo-title>.title-item{-webkit-flex:0 0 auto;flex:0 0 auto;margin:0 2px}.todo-item .todo-title>.title-item:first-child{margin-left:0}.todo-item .todo-title>.title-item:last-child{margin-right:0}.todo-item .todo-title .todo-label{-webkit-flex:0 1 auto;flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.todo-item .status-box{margin:0;float:none;display:inline-block;font-weight:400;padding:0 5px;line-height:inherit;font-size:14px}.todo-item .action-name{font-weight:400}.todo-item .todo-body .todo-note{word-wrap:break-word}.todo-item .todo-body .todo-note .md{color:#7f8fa4;font-size:14px}.todo-item .todo-body .todo-note .md .badge.badge-pill,.todo-item .todo-body .todo-note .md .shortcut-mappings .key,.shortcut-mappings .todo-item .todo-body .todo-note .md .key{color:#2e2e2e}.todo-item .todo-body .todo-note .md p{color:#2e2e2e}.todo-item .todo-body .todo-note code{white-space:pre-wrap}.todo-item .todo-body .todo-note pre{border:0;background:#fafafa;border-radius:0;color:#777;margin:0 20px;overflow:hidden}.todo-item .todo-body .todo-note .note-image-attach{margin-top:4px;margin-left:0;max-width:200px;float:none}.todo-item .todo-body .todo-note p:last-child{margin-bottom:0}@media (max-width: 767.98px){.todos-filters .dropdown-menu-toggle{width:130px}.todos-filters .dropdown-menu-toggle-sort{width:auto}}@media (max-width: 575.98px){.todo .avatar{display:none}.todo-item .todo-title{flex-flow:row wrap;margin-bottom:10px}.todo-item .todo-title .todo-label{white-space:normal}.todo-item .todo-body{margin:0;border-left:2px solid #ddd;padding-left:10px}.todos-filters .dropdown-menu-toggle{width:100%}}.todos-empty{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;max-width:900px;margin-left:auto;margin-right:auto}@media (min-width: 576px){.todos-empty{-webkit-flex-direction:row;flex-direction:row;padding-top:80px}}.todos-empty-content{-webkit-align-self:center;align-self:center;max-width:480px;margin-right:20px}.todos-empty-hero{width:200px;margin-left:auto;margin-right:auto}@media (min-width: 576px){.todos-empty-hero{width:300px;margin-right:0;-webkit-order:2;order:2}}.todos-all-done{padding-top:20px}@media (min-width: 576px){.todos-all-done{padding-top:50px}}.todos-all-done>svg{display:block;max-width:300px;margin:0 auto 20px}.todos-all-done p{max-width:470px;margin-left:auto;margin-right:auto}.todos-all-done a{font-weight:600}.tree-holder .nav-block{margin:10px 0}.tree-holder .nav-block .btn .fa,.tree-holder .nav-block .btn svg{color:#707070}@media (min-width: 576px){.tree-holder .nav-block{display:flex}.tree-holder .nav-block .tree-ref-container{flex:1}.tree-holder .nav-block .tree-controls{text-align:right}.tree-holder .nav-block .tree-controls .btn-group{margin-left:10px}.tree-holder .nav-block .tree-controls .control{float:left;margin-left:10px}.tree-holder .nav-block .tree-ref-holder{float:left;margin-right:15px}.tree-holder .nav-block .tree-ref-target-holder{display:inline-block}.tree-holder .nav-block .repo-breadcrumb li:last-of-type{position:relative}}@media (max-width: 575.98px){.tree-holder .repo-breadcrumb{margin-top:10px;position:relative}.tree-holder .repo-breadcrumb .dropdown-menu{min-width:100%;width:100%;left:inherit;right:0}.tree-holder .add-to-tree-dropdown{position:absolute;left:0;right:0}.tree-holder .tree-controls{margin-bottom:10px}.tree-holder .tree-controls .btn,.tree-holder .tree-controls .dropdown,.tree-holder .tree-controls .btn-group{width:100%}.tree-holder .tree-controls .btn{margin:10px 0 0}}.tree-holder .file-finder{max-width:500px;width:100%}.tree-holder .file-finder .file-finder-input{width:95%;display:inline-block}.tree-holder .add-to-tree{vertical-align:top;padding:8px}.tree-holder .add-to-tree svg{top:0}.tree-holder .tree-table{margin-bottom:0}.tree-holder .tree-table tr{border-bottom:1px solid #f0f0f0;border-top:1px solid #f0f0f0}.tree-holder .tree-table tr td,.tree-holder .tree-table tr th{line-height:21px}.tree-holder .tree-table tr .last-commit{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:506px}.tree-holder .tree-table tr .last-commit .fa-angle-right{margin-left:5px}@media (min-width: 768px) and (max-width: 991.98px){.tree-holder .tree-table tr .last-commit{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:450px}}.tree-holder .tree-table tr .commit-history-link-spacer{margin:0 10px;color:#f0f0f0}.tree-holder .tree-table tr:hover:not(.tree-truncated-warning) td{background-color:#f6fafe;border-top:1px solid #b8d6f4;border-bottom:1px solid #b8d6f4;cursor:pointer}.tree-holder .tree-table tr.selected td{background:#f0f0f0;border-top:1px solid #e3e3e3;border-bottom:1px solid #e3e3e3}.tree-holder .tree-item .link-container{padding:0}.tree-holder .tree-item .link-container a{padding:10px 16px;display:block}.tree-holder .tree-item .tree-item-file-name{max-width:320px;vertical-align:middle}.tree-holder .tree-item .tree-item-file-name i,.tree-holder .tree-item .tree-item-file-name a{color:#2e2e2e}.tree-holder .tree-item .tree-item-file-name img{position:relative;top:-1px}.tree-holder .tree-item .tree-item-file-external-link{margin-right:4px}.tree-holder .tree-item .tree-item-file-external-link span{text-decoration:inherit}.tree-holder .tree-item .tree_commit{max-width:320px}.tree-holder .tree-item .tree_commit .str-truncated{max-width:100%}.tree-holder .tree-item .tree_time_ago{min-width:135px}.tree-holder .tree_author{padding-right:8px}.tree-holder .tree_author .commit-author-name{color:#2e2e2e}.tree-holder .tree-truncated-warning{color:#de7e00;background-color:#fff1de}.tree-holder .tree-time-ago{min-width:135px;color:#707070}.tree-holder .tree-commit{max-width:320px;color:#707070}.tree-holder .tree-commit .tree-commit-link{color:#707070}.tree-holder .tree-commit .tree-commit-link:hover{text-decoration:underline}.blob-commit-info{list-style:none;margin:0;padding:0}.blob-content-holder{margin-top:16px}.blob-upload-dropzone-previews{display:flex;justify-content:center;align-items:center;text-align:center;border:2px;border-style:dashed;border-color:#e5e5e5;min-height:200px}.upload-link{font-weight:400;color:#1b69b6}.repo-charts .sub-header{margin:20px 0}.repo-charts .sub-header-block.border-top{margin-top:20px;padding:0;border-top:1px solid #eaeaea;border-bottom:0}.repo-charts .commit-stats li{font-size:16px}.repo-charts .tree-ref-header{margin-bottom:20px}.repo-charts .tree-ref-header h4{margin:0;line-height:36px}.gitlab-ui-dev-kit>h2{margin:35px 0 20px;font-weight:600}.gitlab-ui-dev-kit .example{padding:15px;border:1px dashed #ddd;margin-bottom:15px}.gitlab-ui-dev-kit .example::before{content:"Example";color:#bbb}.new-wiki-page .new-wiki-page-slug-tip{display:inline-block;max-width:100%;margin-top:5px}.wiki-form .edit-wiki-page-slug-tip{display:inline-block;max-width:100%;margin-top:5px}.title .edit-wiki-header{width:780px;margin-left:auto;margin-right:auto;padding-right:7px}.wiki-page-header{position:relative}.wiki-page-header .wiki-breadcrumb{border-bottom:1px solid #f0f0f0;padding:11px 0}.wiki-page-header .wiki-page-title{margin:0;font-size:22px}.wiki-page-header .wiki-last-edit-by{display:block;color:#707070}.wiki-page-header .wiki-last-edit-by strong{color:#2e2e2e}.wiki-page-header .light,.wiki-page-header .description-block{font-weight:400;color:#707070}.wiki-page-header .git-access-header{padding:16px 0 10px}.wiki-page-header .git-clone-holder{width:100%;padding-bottom:40px}.wiki-page-header button.sidebar-toggle{position:absolute;right:0;top:11px;display:block}@media (min-width: 576px){.wiki-page-header.has-sidebar-toggle{padding-right:40px}.wiki-page-header .git-clone-holder{width:480px;padding-bottom:16px}.wiki-page-header .nav-controls{width:auto;min-width:50%}}@media (min-width: 768px){.wiki-page-header.has-sidebar-toggle{padding-right:0}.wiki-page-header button.sidebar-toggle{display:none}}.wiki-git-access{margin:16px 0}.wiki-git-access h3{font-size:19px;font-weight:400;margin:16px 0}.right-sidebar.wiki-sidebar{padding:0}.right-sidebar.wiki-sidebar.right-sidebar-collapsed{display:none}.right-sidebar.wiki-sidebar .sidebar-container{padding:16px 0;width:calc(100% + 100px);padding-right:100px;height:100%;overflow-y:scroll;overflow-x:hidden;-webkit-overflow-scrolling:touch}.right-sidebar.wiki-sidebar .blocks-container{padding:0 16px}.right-sidebar.wiki-sidebar .block{width:100%}.right-sidebar.wiki-sidebar a{color:#7e7c7c}.right-sidebar.wiki-sidebar a:hover,.right-sidebar.wiki-sidebar .participants-more .btn-link:hover,.participants-more .right-sidebar.wiki-sidebar .btn-link:hover,.right-sidebar.wiki-sidebar .user-list-more .btn-link:hover,.user-list-more .right-sidebar.wiki-sidebar .btn-link:hover,.right-sidebar.wiki-sidebar a.active{text-decoration:none}.right-sidebar.wiki-sidebar a:hover span,.right-sidebar.wiki-sidebar .participants-more .btn-link:hover span,.participants-more .right-sidebar.wiki-sidebar .btn-link:hover span,.right-sidebar.wiki-sidebar .user-list-more .btn-link:hover span,.user-list-more .right-sidebar.wiki-sidebar .btn-link:hover span,.right-sidebar.wiki-sidebar a.active span{text-decoration:underline}.right-sidebar.wiki-sidebar .active>a{color:#000}.right-sidebar.wiki-sidebar ul.wiki-pages,.right-sidebar.wiki-sidebar ul.wiki-pages li{list-style:none;padding:0;margin:0}.right-sidebar.wiki-sidebar ul.wiki-pages li{margin:5px 0 10px}.right-sidebar.wiki-sidebar ul.wiki-pages ul{padding-left:15px}.right-sidebar.wiki-sidebar .wiki-sidebar-header{padding:0 16px 16px}.right-sidebar.wiki-sidebar .wiki-sidebar-header .gutter-toggle{margin-top:0}ul.wiki-pages-list.content-list ul{list-style:none;margin-left:0;padding-left:15px}ul.wiki-pages-list.content-list ul li{padding:5px 0}.wiki table{width:auto;display:inline-block;overflow-x:auto;border:0;border-color:#ddd}@supports (width: fit-content){.wiki table{display:block;width:fit-content}}.wiki table tr th{border-bottom:solid 2px #ddd}.wiki table tr td{border-color:#ddd}.build-page .term-bold{font-weight:600}.build-page .term-italic{font-style:italic}.build-page .term-conceal{visibility:hidden}.build-page .term-underline{text-decoration:underline}.build-page .term-cross{text-decoration:line-through}.build-page .term-fg-black{color:#000}.build-page .term-fg-red{color:#ea1010}.build-page .term-fg-green{color:#009900}.build-page .term-fg-yellow{color:#999900}.build-page .term-fg-blue{color:#0073e6}.build-page .term-fg-magenta{color:#d411d4}.build-page .term-fg-cyan{color:#009999}.build-page .term-fg-white{color:#ccc}.build-page .term-fg-l-black{color:#373b41}.build-page .term-fg-l-red{color:#ff6161}.build-page .term-fg-l-green{color:#00d600}.build-page .term-fg-l-yellow{color:#bdbd00}.build-page .term-fg-l-blue{color:#5797ff}.build-page .term-fg-l-magenta{color:#d96dd9}.build-page .term-fg-l-cyan{color:#00bdbd}.build-page .term-fg-l-white{color:#fff}.build-page .term-bg-black{background-color:#000}.build-page .term-bg-red{background-color:#ea1010}.build-page .term-bg-green{background-color:#009900}.build-page .term-bg-yellow{background-color:#999900}.build-page .term-bg-blue{background-color:#0073e6}.build-page .term-bg-magenta{background-color:#d411d4}.build-page .term-bg-cyan{background-color:#009999}.build-page .term-bg-white{background-color:#ccc}.build-page .term-bg-l-black{background-color:#373b41}.build-page .term-bg-l-red{background-color:#ff6161}.build-page .term-bg-l-green{background-color:#00d600}.build-page .term-bg-l-yellow{background-color:#bdbd00}.build-page .term-bg-l-blue{background-color:#5797ff}.build-page .term-bg-l-magenta{background-color:#d96dd9}.build-page .term-bg-l-cyan{background-color:#00bdbd}.build-page .term-bg-l-white{background-color:#fff}.build-page .xterm-fg-0{color:#000}.build-page .xterm-fg-1{color:#800000}.build-page .xterm-fg-2{color:#008000}.build-page .xterm-fg-3{color:#808000}.build-page .xterm-fg-4{color:#000080}.build-page .xterm-fg-5{color:#800080}.build-page .xterm-fg-6{color:#008080}.build-page .xterm-fg-7{color:#c0c0c0}.build-page .xterm-fg-8{color:#808080}.build-page .xterm-fg-9{color:#f00}.build-page .xterm-fg-10{color:#0f0}.build-page .xterm-fg-11{color:#ff0}.build-page .xterm-fg-12{color:#00f}.build-page .xterm-fg-13{color:#f0f}.build-page .xterm-fg-14{color:#0ff}.build-page .xterm-fg-15{color:#fff}.build-page .xterm-fg-16{color:#000}.build-page .xterm-fg-17{color:#00005f}.build-page .xterm-fg-18{color:#000087}.build-page .xterm-fg-19{color:#0000af}.build-page .xterm-fg-20{color:#0000d7}.build-page .xterm-fg-21{color:#00f}.build-page .xterm-fg-22{color:#005f00}.build-page .xterm-fg-23{color:#005f5f}.build-page .xterm-fg-24{color:#005f87}.build-page .xterm-fg-25{color:#005faf}.build-page .xterm-fg-26{color:#005fd7}.build-page .xterm-fg-27{color:#005fff}.build-page .xterm-fg-28{color:#008700}.build-page .xterm-fg-29{color:#00875f}.build-page .xterm-fg-30{color:#008787}.build-page .xterm-fg-31{color:#0087af}.build-page .xterm-fg-32{color:#0087d7}.build-page .xterm-fg-33{color:#0087ff}.build-page .xterm-fg-34{color:#00af00}.build-page .xterm-fg-35{color:#00af5f}.build-page .xterm-fg-36{color:#00af87}.build-page .xterm-fg-37{color:#00afaf}.build-page .xterm-fg-38{color:#00afd7}.build-page .xterm-fg-39{color:#00afff}.build-page .xterm-fg-40{color:#00d700}.build-page .xterm-fg-41{color:#00d75f}.build-page .xterm-fg-42{color:#00d787}.build-page .xterm-fg-43{color:#00d7af}.build-page .xterm-fg-44{color:#00d7d7}.build-page .xterm-fg-45{color:#00d7ff}.build-page .xterm-fg-46{color:#0f0}.build-page .xterm-fg-47{color:#00ff5f}.build-page .xterm-fg-48{color:#00ff87}.build-page .xterm-fg-49{color:#00ffaf}.build-page .xterm-fg-50{color:#00ffd7}.build-page .xterm-fg-51{color:#0ff}.build-page .xterm-fg-52{color:#5f0000}.build-page .xterm-fg-53{color:#5f005f}.build-page .xterm-fg-54{color:#5f0087}.build-page .xterm-fg-55{color:#5f00af}.build-page .xterm-fg-56{color:#5f00d7}.build-page .xterm-fg-57{color:#5f00ff}.build-page .xterm-fg-58{color:#5f5f00}.build-page .xterm-fg-59{color:#5f5f5f}.build-page .xterm-fg-60{color:#5f5f87}.build-page .xterm-fg-61{color:#5f5faf}.build-page .xterm-fg-62{color:#5f5fd7}.build-page .xterm-fg-63{color:#5f5fff}.build-page .xterm-fg-64{color:#5f8700}.build-page .xterm-fg-65{color:#5f875f}.build-page .xterm-fg-66{color:#5f8787}.build-page .xterm-fg-67{color:#5f87af}.build-page .xterm-fg-68{color:#5f87d7}.build-page .xterm-fg-69{color:#5f87ff}.build-page .xterm-fg-70{color:#5faf00}.build-page .xterm-fg-71{color:#5faf5f}.build-page .xterm-fg-72{color:#5faf87}.build-page .xterm-fg-73{color:#5fafaf}.build-page .xterm-fg-74{color:#5fafd7}.build-page .xterm-fg-75{color:#5fafff}.build-page .xterm-fg-76{color:#5fd700}.build-page .xterm-fg-77{color:#5fd75f}.build-page .xterm-fg-78{color:#5fd787}.build-page .xterm-fg-79{color:#5fd7af}.build-page .xterm-fg-80{color:#5fd7d7}.build-page .xterm-fg-81{color:#5fd7ff}.build-page .xterm-fg-82{color:#5fff00}.build-page .xterm-fg-83{color:#5fff5f}.build-page .xterm-fg-84{color:#5fff87}.build-page .xterm-fg-85{color:#5fffaf}.build-page .xterm-fg-86{color:#5fffd7}.build-page .xterm-fg-87{color:#5fffff}.build-page .xterm-fg-88{color:#870000}.build-page .xterm-fg-89{color:#87005f}.build-page .xterm-fg-90{color:#870087}.build-page .xterm-fg-91{color:#8700af}.build-page .xterm-fg-92{color:#8700d7}.build-page .xterm-fg-93{color:#8700ff}.build-page .xterm-fg-94{color:#875f00}.build-page .xterm-fg-95{color:#875f5f}.build-page .xterm-fg-96{color:#875f87}.build-page .xterm-fg-97{color:#875faf}.build-page .xterm-fg-98{color:#875fd7}.build-page .xterm-fg-99{color:#875fff}.build-page .xterm-fg-100{color:#878700}.build-page .xterm-fg-101{color:#87875f}.build-page .xterm-fg-102{color:#878787}.build-page .xterm-fg-103{color:#8787af}.build-page .xterm-fg-104{color:#8787d7}.build-page .xterm-fg-105{color:#8787ff}.build-page .xterm-fg-106{color:#87af00}.build-page .xterm-fg-107{color:#87af5f}.build-page .xterm-fg-108{color:#87af87}.build-page .xterm-fg-109{color:#87afaf}.build-page .xterm-fg-110{color:#87afd7}.build-page .xterm-fg-111{color:#87afff}.build-page .xterm-fg-112{color:#87d700}.build-page .xterm-fg-113{color:#87d75f}.build-page .xterm-fg-114{color:#87d787}.build-page .xterm-fg-115{color:#87d7af}.build-page .xterm-fg-116{color:#87d7d7}.build-page .xterm-fg-117{color:#87d7ff}.build-page .xterm-fg-118{color:#87ff00}.build-page .xterm-fg-119{color:#87ff5f}.build-page .xterm-fg-120{color:#87ff87}.build-page .xterm-fg-121{color:#87ffaf}.build-page .xterm-fg-122{color:#87ffd7}.build-page .xterm-fg-123{color:#87ffff}.build-page .xterm-fg-124{color:#af0000}.build-page .xterm-fg-125{color:#af005f}.build-page .xterm-fg-126{color:#af0087}.build-page .xterm-fg-127{color:#af00af}.build-page .xterm-fg-128{color:#af00d7}.build-page .xterm-fg-129{color:#af00ff}.build-page .xterm-fg-130{color:#af5f00}.build-page .xterm-fg-131{color:#af5f5f}.build-page .xterm-fg-132{color:#af5f87}.build-page .xterm-fg-133{color:#af5faf}.build-page .xterm-fg-134{color:#af5fd7}.build-page .xterm-fg-135{color:#af5fff}.build-page .xterm-fg-136{color:#af8700}.build-page .xterm-fg-137{color:#af875f}.build-page .xterm-fg-138{color:#af8787}.build-page .xterm-fg-139{color:#af87af}.build-page .xterm-fg-140{color:#af87d7}.build-page .xterm-fg-141{color:#af87ff}.build-page .xterm-fg-142{color:#afaf00}.build-page .xterm-fg-143{color:#afaf5f}.build-page .xterm-fg-144{color:#afaf87}.build-page .xterm-fg-145{color:#afafaf}.build-page .xterm-fg-146{color:#afafd7}.build-page .xterm-fg-147{color:#afafff}.build-page .xterm-fg-148{color:#afd700}.build-page .xterm-fg-149{color:#afd75f}.build-page .xterm-fg-150{color:#afd787}.build-page .xterm-fg-151{color:#afd7af}.build-page .xterm-fg-152{color:#afd7d7}.build-page .xterm-fg-153{color:#afd7ff}.build-page .xterm-fg-154{color:#afff00}.build-page .xterm-fg-155{color:#afff5f}.build-page .xterm-fg-156{color:#afff87}.build-page .xterm-fg-157{color:#afffaf}.build-page .xterm-fg-158{color:#afffd7}.build-page .xterm-fg-159{color:#afffff}.build-page .xterm-fg-160{color:#d70000}.build-page .xterm-fg-161{color:#d7005f}.build-page .xterm-fg-162{color:#d70087}.build-page .xterm-fg-163{color:#d700af}.build-page .xterm-fg-164{color:#d700d7}.build-page .xterm-fg-165{color:#d700ff}.build-page .xterm-fg-166{color:#d75f00}.build-page .xterm-fg-167{color:#d75f5f}.build-page .xterm-fg-168{color:#d75f87}.build-page .xterm-fg-169{color:#d75faf}.build-page .xterm-fg-170{color:#d75fd7}.build-page .xterm-fg-171{color:#d75fff}.build-page .xterm-fg-172{color:#d78700}.build-page .xterm-fg-173{color:#d7875f}.build-page .xterm-fg-174{color:#d78787}.build-page .xterm-fg-175{color:#d787af}.build-page .xterm-fg-176{color:#d787d7}.build-page .xterm-fg-177{color:#d787ff}.build-page .xterm-fg-178{color:#d7af00}.build-page .xterm-fg-179{color:#d7af5f}.build-page .xterm-fg-180{color:#d7af87}.build-page .xterm-fg-181{color:#d7afaf}.build-page .xterm-fg-182{color:#d7afd7}.build-page .xterm-fg-183{color:#d7afff}.build-page .xterm-fg-184{color:#d7d700}.build-page .xterm-fg-185{color:#d7d75f}.build-page .xterm-fg-186{color:#d7d787}.build-page .xterm-fg-187{color:#d7d7af}.build-page .xterm-fg-188{color:#d7d7d7}.build-page .xterm-fg-189{color:#d7d7ff}.build-page .xterm-fg-190{color:#d7ff00}.build-page .xterm-fg-191{color:#d7ff5f}.build-page .xterm-fg-192{color:#d7ff87}.build-page .xterm-fg-193{color:#d7ffaf}.build-page .xterm-fg-194{color:#d7ffd7}.build-page .xterm-fg-195{color:#d7ffff}.build-page .xterm-fg-196{color:#f00}.build-page .xterm-fg-197{color:#ff005f}.build-page .xterm-fg-198{color:#ff0087}.build-page .xterm-fg-199{color:#ff00af}.build-page .xterm-fg-200{color:#ff00d7}.build-page .xterm-fg-201{color:#f0f}.build-page .xterm-fg-202{color:#ff5f00}.build-page .xterm-fg-203{color:#ff5f5f}.build-page .xterm-fg-204{color:#ff5f87}.build-page .xterm-fg-205{color:#ff5faf}.build-page .xterm-fg-206{color:#ff5fd7}.build-page .xterm-fg-207{color:#ff5fff}.build-page .xterm-fg-208{color:#ff8700}.build-page .xterm-fg-209{color:#ff875f}.build-page .xterm-fg-210{color:#ff8787}.build-page .xterm-fg-211{color:#ff87af}.build-page .xterm-fg-212{color:#ff87d7}.build-page .xterm-fg-213{color:#ff87ff}.build-page .xterm-fg-214{color:#ffaf00}.build-page .xterm-fg-215{color:#ffaf5f}.build-page .xterm-fg-216{color:#ffaf87}.build-page .xterm-fg-217{color:#ffafaf}.build-page .xterm-fg-218{color:#ffafd7}.build-page .xterm-fg-219{color:#ffafff}.build-page .xterm-fg-220{color:#ffd700}.build-page .xterm-fg-221{color:#ffd75f}.build-page .xterm-fg-222{color:#ffd787}.build-page .xterm-fg-223{color:#ffd7af}.build-page .xterm-fg-224{color:#ffd7d7}.build-page .xterm-fg-225{color:#ffd7ff}.build-page .xterm-fg-226{color:#ff0}.build-page .xterm-fg-227{color:#ffff5f}.build-page .xterm-fg-228{color:#ffff87}.build-page .xterm-fg-229{color:#ffffaf}.build-page .xterm-fg-230{color:#ffffd7}.build-page .xterm-fg-231{color:#fff}.build-page .xterm-fg-232{color:#080808}.build-page .xterm-fg-233{color:#121212}.build-page .xterm-fg-234{color:#1c1c1c}.build-page .xterm-fg-235{color:#262626}.build-page .xterm-fg-236{color:#303030}.build-page .xterm-fg-237{color:#3a3a3a}.build-page .xterm-fg-238{color:#444}.build-page .xterm-fg-239{color:#4e4e4e}.build-page .xterm-fg-240{color:#585858}.build-page .xterm-fg-241{color:#626262}.build-page .xterm-fg-242{color:#6c6c6c}.build-page .xterm-fg-243{color:#767676}.build-page .xterm-fg-244{color:#808080}.build-page .xterm-fg-245{color:#8a8a8a}.build-page .xterm-fg-246{color:#949494}.build-page .xterm-fg-247{color:#9e9e9e}.build-page .xterm-fg-248{color:#a8a8a8}.build-page .xterm-fg-249{color:#b2b2b2}.build-page .xterm-fg-250{color:#bcbcbc}.build-page .xterm-fg-251{color:#c6c6c6}.build-page .xterm-fg-252{color:#d0d0d0}.build-page .xterm-fg-253{color:#dadada}.build-page .xterm-fg-254{color:#e4e4e4}.build-page .xterm-fg-255{color:#eee}.code.dark .line-numbers,.code.dark .diff-line-num{background-color:#1d1f21}.code.dark .diff-line-num,.code.dark .diff-line-num a{color:rgba(255,255,255,0.3)}.code.dark pre.code,.code.dark .diff-line-num{border-color:#666}.code.dark,.code.dark pre.code,.code.dark .line_holder .line_content{background-color:#1d1f21;color:#c5c8c6}.code.dark .line_holder.match .line_content,.code.dark .line_holder.old-nonewline .line_content,.code.dark .line_holder.new-nonewline .line_content{color:rgba(255,255,255,0.3);background:rgba(255,255,255,0.1)}.code.dark .line_holder td.diff-line-num.hll:not(.empty-cell),.code.dark .line_holder td.line_content.hll:not(.empty-cell){background-color:#557;border-color:#35354a}.code.dark .line_holder .diff-line-num.new,.code.dark .line_holder .line_content.new{background:rgba(51,255,51,0.1)}.code.dark .line_holder .diff-line-num.new.line_content span.idiff,.code.dark .line_holder .line_content.new.line_content span.idiff{background:rgba(51,255,51,0.2)}.code.dark .line_holder .diff-line-num.new.diff-line-num,.code.dark .line_holder .line_content.new.diff-line-num{border-color:#808080}.code.dark .line_holder .diff-line-num.new::before,.code.dark .line_holder .diff-line-num.new a,.code.dark .line_holder .line_content.new::before,.code.dark .line_holder .line_content.new a{color:#627165}.code.dark .line_holder .diff-line-num.old,.code.dark .line_holder .line_content.old{background:rgba(255,51,51,0.2)}.code.dark .line_holder .diff-line-num.old.line_content span.idiff,.code.dark .line_holder .line_content.old.line_content span.idiff{background:rgba(255,51,51,0.25)}.code.dark .line_holder .diff-line-num.old.diff-line-num,.code.dark .line_holder .line_content.old.diff-line-num{border-color:#808080}.code.dark .line_holder .diff-line-num.old::before,.code.dark .line_holder .diff-line-num.old a,.code.dark .line_holder .line_content.old::before,.code.dark .line_holder .line_content.old a{color:#806565}.code.dark .line_holder .diff-line-num.is-over,.code.dark .line_holder .diff-line-num.hll:not(.empty-cell).is-over{background-color:#9f9ab5;border-color:#918baa}.code.dark .line_holder .diff-line-num.is-over a,.code.dark .line_holder .diff-line-num.hll:not(.empty-cell).is-over a{color:#756e95}.code.dark .line_holder .line_content.match{color:rgba(255,255,255,0.3);background:rgba(255,255,255,0.1)}.code.dark .line_holder:not(.diff-expanded)+.diff-expanded>.diff-line-num,.code.dark .line_holder:not(.diff-expanded)+.diff-expanded>.line_content,.code.dark .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.diff-line-num,.code.dark .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.line_content{border-top:1px solid #000}.code.dark .line_holder.diff-expanded>.diff-line-num,.code.dark .line_holder.diff-expanded>.line_content{background:#3e3e3e;border-color:#3e3e3e}.code.dark pre .hll{background-color:#373b41 !important}.code.dark span.highlight_word{background-color:#ffe792 !important;color:#000 !important}.code.dark .line a{color:#81a2be}.code.dark .hll{background-color:#373b41}.code.dark .c{color:#969896}.code.dark .err{color:#c66}.code.dark .k{color:#b294bb}.code.dark .l{color:#de935f}.code.dark .n{color:#c5c8c6}.code.dark .o{color:#8abeb7}.code.dark .p{color:#c5c8c6}.code.dark .cm{color:#969896}.code.dark .cp{color:#969896}.code.dark .c1{color:#969896}.code.dark .cs{color:#969896}.code.dark .gd{color:#c66}.code.dark .ge{font-style:italic}.code.dark .gh{color:#c5c8c6;font-weight:600}.code.dark .gi{color:#b5bd68}.code.dark .gp{color:#969896;font-weight:600}.code.dark .gs{font-weight:600}.code.dark .gu{color:#8abeb7;font-weight:600}.code.dark .kc{color:#b294bb}.code.dark .kd{color:#b294bb}.code.dark .kn{color:#8abeb7}.code.dark .kp{color:#b294bb}.code.dark .kr{color:#b294bb}.code.dark .kt{color:#f0c674}.code.dark .ld{color:#b5bd68}.code.dark .m{color:#de935f}.code.dark .s{color:#b5bd68}.code.dark .na{color:#81a2be}.code.dark .nb{color:#c5c8c6}.code.dark .nc{color:#f0c674}.code.dark .no{color:#c66}.code.dark .nd{color:#8abeb7}.code.dark .ni{color:#c5c8c6}.code.dark .ne{color:#c66}.code.dark .nf{color:#81a2be}.code.dark .nl{color:#c5c8c6}.code.dark .nn{color:#f0c674}.code.dark .nx{color:#81a2be}.code.dark .py{color:#c5c8c6}.code.dark .nt{color:#8abeb7}.code.dark .nv{color:#c66}.code.dark .ow{color:#8abeb7}.code.dark .w{color:#c5c8c6}.code.dark .mf{color:#de935f}.code.dark .mh{color:#de935f}.code.dark .mi{color:#de935f}.code.dark .mo{color:#de935f}.code.dark .sb{color:#b5bd68}.code.dark .sc{color:#c5c8c6}.code.dark .sd{color:#969896}.code.dark .s2{color:#b5bd68}.code.dark .se{color:#de935f}.code.dark .sh{color:#b5bd68}.code.dark .si{color:#de935f}.code.dark .sx{color:#b5bd68}.code.dark .sr{color:#b5bd68}.code.dark .s1{color:#b5bd68}.code.dark .ss{color:#b5bd68}.code.dark .bp{color:#c5c8c6}.code.dark .vc{color:#c66}.code.dark .vg{color:#c66}.code.dark .vi{color:#c66}.code.dark .il{color:#de935f}.code.monokai .line-numbers,.code.monokai .diff-line-num{background-color:#272822}.code.monokai .diff-line-num,.code.monokai .diff-line-num a{color:rgba(255,255,255,0.3)}.code.monokai pre.code,.code.monokai .diff-line-num{border-color:#555}.code.monokai,.code.monokai pre.code,.code.monokai .line_holder .line_content{background-color:#272822;color:#f8f8f2}.code.monokai .line_holder.match .line_content,.code.monokai .line_holder.old-nonewline .line_content,.code.monokai .line_holder.new-nonewline .line_content{color:rgba(255,255,255,0.3);background:rgba(255,255,255,0.1)}.code.monokai .line_holder td.diff-line-num.hll:not(.empty-cell),.code.monokai .line_holder td.line_content.hll:not(.empty-cell){background-color:#49483e;border-color:#201f1b}.code.monokai .line_holder .diff-line-num.new,.code.monokai .line_holder .line_content.new{background:rgba(166,226,46,0.1)}.code.monokai .line_holder .diff-line-num.new.line_content span.idiff,.code.monokai .line_holder .line_content.new.line_content span.idiff{background:rgba(166,226,46,0.15)}.code.monokai .line_holder .diff-line-num.new.diff-line-num,.code.monokai .line_holder .line_content.new.diff-line-num{border-color:#808080}.code.monokai .line_holder .diff-line-num.new::before,.code.monokai .line_holder .diff-line-num.new a,.code.monokai .line_holder .line_content.new::before,.code.monokai .line_holder .line_content.new a{color:#707565}.code.monokai .line_holder .diff-line-num.old,.code.monokai .line_holder .line_content.old{background:rgba(254,147,140,0.15)}.code.monokai .line_holder .diff-line-num.old.line_content span.idiff,.code.monokai .line_holder .line_content.old.line_content span.idiff{background:rgba(254,147,140,0.2)}.code.monokai .line_holder .diff-line-num.old.diff-line-num,.code.monokai .line_holder .line_content.old.diff-line-num{border-color:#808080}.code.monokai .line_holder .diff-line-num.old::before,.code.monokai .line_holder .diff-line-num.old a,.code.monokai .line_holder .line_content.old::before,.code.monokai .line_holder .line_content.old a{color:#7e736f}.code.monokai .line_holder .diff-line-num.is-over,.code.monokai .line_holder .diff-line-num.hll:not(.empty-cell).is-over{background-color:#9f9ab5;border-color:#918baa}.code.monokai .line_holder .diff-line-num.is-over a,.code.monokai .line_holder .diff-line-num.hll:not(.empty-cell).is-over a{color:#756e95}.code.monokai .line_holder .line_content.match{color:rgba(255,255,255,0.3);background:rgba(255,255,255,0.1)}.code.monokai .line_holder:not(.diff-expanded)+.diff-expanded>.diff-line-num,.code.monokai .line_holder:not(.diff-expanded)+.diff-expanded>.line_content,.code.monokai .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.diff-line-num,.code.monokai .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.line_content{border-top:1px solid #000}.code.monokai .line_holder.diff-expanded>.diff-line-num,.code.monokai .line_holder.diff-expanded>.line_content{background:#3e3e3e;border-color:#3e3e3e}.code.monokai pre .hll{background-color:#49483e !important}.code.monokai span.highlight_word{background-color:#ffe792 !important;color:#000 !important}.code.monokai .line a{color:#66d9ef}.code.monokai .hll{background-color:#49483e}.code.monokai .c{color:#75715e}.code.monokai .err{color:#960050;background-color:#1e0010}.code.monokai .k{color:#66d9ef}.code.monokai .l{color:#ae81ff}.code.monokai .n{color:#f8f8f2}.code.monokai .o{color:#f92672}.code.monokai .p{color:#f8f8f2}.code.monokai .cm{color:#75715e}.code.monokai .cp{color:#75715e}.code.monokai .c1{color:#75715e}.code.monokai .cs{color:#75715e}.code.monokai .ge{font-style:italic}.code.monokai .gs{font-weight:600}.code.monokai .kc{color:#66d9ef}.code.monokai .kd{color:#66d9ef}.code.monokai .kn{color:#f92672}.code.monokai .kp{color:#66d9ef}.code.monokai .kr{color:#66d9ef}.code.monokai .kt{color:#66d9ef}.code.monokai .ld{color:#e6db74}.code.monokai .m{color:#ae81ff}.code.monokai .s{color:#e6db74}.code.monokai .na{color:#a6e22e}.code.monokai .nb{color:#f8f8f2}.code.monokai .nc{color:#a6e22e}.code.monokai .no{color:#66d9ef}.code.monokai .nd{color:#a6e22e}.code.monokai .ni{color:#f8f8f2}.code.monokai .ne{color:#a6e22e}.code.monokai .nf{color:#a6e22e}.code.monokai .nl{color:#f8f8f2}.code.monokai .nn{color:#f8f8f2}.code.monokai .nx{color:#a6e22e}.code.monokai .py{color:#f8f8f2}.code.monokai .nt{color:#f92672}.code.monokai .nv{color:#f8f8f2}.code.monokai .ow{color:#f92672}.code.monokai .w{color:#f8f8f2}.code.monokai .mf{color:#ae81ff}.code.monokai .mh{color:#ae81ff}.code.monokai .mi{color:#ae81ff}.code.monokai .mo{color:#ae81ff}.code.monokai .sb{color:#e6db74}.code.monokai .sc{color:#e6db74}.code.monokai .sd{color:#e6db74}.code.monokai .s2{color:#e6db74}.code.monokai .se{color:#ae81ff}.code.monokai .sh{color:#e6db74}.code.monokai .si{color:#e6db74}.code.monokai .sx{color:#e6db74}.code.monokai .sr{color:#e6db74}.code.monokai .s1{color:#e6db74}.code.monokai .ss{color:#e6db74}.code.monokai .bp{color:#f8f8f2}.code.monokai .vc{color:#f8f8f2}.code.monokai .vg{color:#f8f8f2}.code.monokai .vi{color:#f8f8f2}.code.monokai .il{color:#ae81ff}.code.monokai .gu{color:#75715e}.code.monokai .gd{color:#f92672}.code.monokai .gi{color:#a6e22e}.code.solarized-dark .line-numbers,.code.solarized-dark .diff-line-num{background-color:#002b36}.code.solarized-dark .diff-line-num,.code.solarized-dark .diff-line-num a{color:rgba(255,255,255,0.3)}.code.solarized-dark pre.code,.code.solarized-dark .diff-line-num{border-color:#113b46}.code.solarized-dark,.code.solarized-dark pre.code,.code.solarized-dark .line_holder .line_content{background-color:#002b36;color:#93a1a1}.code.solarized-dark .line_holder.match .line_content,.code.solarized-dark .line_holder.old-nonewline .line_content,.code.solarized-dark .line_holder.new-nonewline .line_content{color:rgba(255,255,255,0.3);background:rgba(255,255,255,0.1)}.code.solarized-dark .line_holder td.diff-line-num.hll:not(.empty-cell),.code.solarized-dark .line_holder td.line_content.hll:not(.empty-cell){background-color:#174652;border-color:#061316}.code.solarized-dark .line_holder .diff-line-num.new,.code.solarized-dark .line_holder .line_content.new{background:rgba(133,153,0,0.15)}.code.solarized-dark .line_holder .diff-line-num.new.line_content span.idiff,.code.solarized-dark .line_holder .line_content.new.line_content span.idiff{background:rgba(133,153,0,0.25)}.code.solarized-dark .line_holder .diff-line-num.new.diff-line-num,.code.solarized-dark .line_holder .line_content.new.diff-line-num{border-color:#113b46}.code.solarized-dark .line_holder .diff-line-num.new::before,.code.solarized-dark .line_holder .diff-line-num.new a,.code.solarized-dark .line_holder .line_content.new::before,.code.solarized-dark .line_holder .line_content.new a{color:#5a766c}.code.solarized-dark .line_holder .diff-line-num.old,.code.solarized-dark .line_holder .line_content.old{background:rgba(220,50,47,0.3)}.code.solarized-dark .line_holder .diff-line-num.old.line_content span.idiff,.code.solarized-dark .line_holder .line_content.old.line_content span.idiff{background:rgba(220,50,47,0.25)}.code.solarized-dark .line_holder .diff-line-num.old.diff-line-num,.code.solarized-dark .line_holder .line_content.old.diff-line-num{border-color:#113b46}.code.solarized-dark .line_holder .diff-line-num.old::before,.code.solarized-dark .line_holder .diff-line-num.old a,.code.solarized-dark .line_holder .line_content.old::before,.code.solarized-dark .line_holder .line_content.old a{color:#7a6c71}.code.solarized-dark .line_holder .diff-line-num.is-over,.code.solarized-dark .line_holder .diff-line-num.hll:not(.empty-cell).is-over{background-color:#9f9ab5;border-color:#918baa}.code.solarized-dark .line_holder .diff-line-num.is-over a,.code.solarized-dark .line_holder .diff-line-num.hll:not(.empty-cell).is-over a{color:#756e95}.code.solarized-dark .line_holder .line_content.match{color:rgba(255,255,255,0.3);background:rgba(255,255,255,0.1)}.code.solarized-dark .line_holder:not(.diff-expanded)+.diff-expanded>.diff-line-num,.code.solarized-dark .line_holder:not(.diff-expanded)+.diff-expanded>.line_content,.code.solarized-dark .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.diff-line-num,.code.solarized-dark .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.line_content{border-top:1px solid #000}.code.solarized-dark .line_holder.diff-expanded>.diff-line-num,.code.solarized-dark .line_holder.diff-expanded>.line_content{background:#010d10;border-color:#010d10}.code.solarized-dark pre .hll{background-color:#174652 !important}.code.solarized-dark span.highlight_word{background-color:#094554 !important}.code.solarized-dark .line a{color:#268bd2}.code.solarized-dark .c{color:#586e75}.code.solarized-dark .err{color:#93a1a1}.code.solarized-dark .g{color:#93a1a1}.code.solarized-dark .k{color:#859900}.code.solarized-dark .l{color:#93a1a1}.code.solarized-dark .n{color:#93a1a1}.code.solarized-dark .o{color:#859900}.code.solarized-dark .x{color:#cb4b16}.code.solarized-dark .p{color:#93a1a1}.code.solarized-dark .cm{color:#586e75}.code.solarized-dark .cp{color:#859900}.code.solarized-dark .c1{color:#586e75}.code.solarized-dark .cs{color:#859900}.code.solarized-dark .gd{color:#2aa198}.code.solarized-dark .ge{color:#93a1a1;font-style:italic}.code.solarized-dark .gr{color:#dc322f}.code.solarized-dark .gh{color:#cb4b16}.code.solarized-dark .gi{color:#859900}.code.solarized-dark .go{color:#93a1a1}.code.solarized-dark .gp{color:#93a1a1}.code.solarized-dark .gs{color:#93a1a1;font-weight:600}.code.solarized-dark .gu{color:#cb4b16}.code.solarized-dark .gt{color:#93a1a1}.code.solarized-dark .kc{color:#cb4b16}.code.solarized-dark .kd{color:#268bd2}.code.solarized-dark .kn{color:#859900}.code.solarized-dark .kp{color:#859900}.code.solarized-dark .kr{color:#268bd2}.code.solarized-dark .kt{color:#dc322f}.code.solarized-dark .ld{color:#93a1a1}.code.solarized-dark .m{color:#2aa198}.code.solarized-dark .s{color:#2aa198}.code.solarized-dark .na{color:#93a1a1}.code.solarized-dark .nb{color:#b58900}.code.solarized-dark .nc{color:#268bd2}.code.solarized-dark .no{color:#cb4b16}.code.solarized-dark .nd{color:#268bd2}.code.solarized-dark .ni{color:#cb4b16}.code.solarized-dark .ne{color:#cb4b16}.code.solarized-dark .nf{color:#268bd2}.code.solarized-dark .nl{color:#93a1a1}.code.solarized-dark .nn{color:#93a1a1}.code.solarized-dark .nx{color:#93a1a1}.code.solarized-dark .py{color:#93a1a1}.code.solarized-dark .nt{color:#268bd2}.code.solarized-dark .nv{color:#268bd2}.code.solarized-dark .ow{color:#859900}.code.solarized-dark .w{color:#93a1a1}.code.solarized-dark .mf{color:#2aa198}.code.solarized-dark .mh{color:#2aa198}.code.solarized-dark .mi{color:#2aa198}.code.solarized-dark .mo{color:#2aa198}.code.solarized-dark .sb{color:#586e75}.code.solarized-dark .sc{color:#2aa198}.code.solarized-dark .sd{color:#93a1a1}.code.solarized-dark .s2{color:#2aa198}.code.solarized-dark .se{color:#cb4b16}.code.solarized-dark .sh{color:#93a1a1}.code.solarized-dark .si{color:#2aa198}.code.solarized-dark .sx{color:#2aa198}.code.solarized-dark .sr{color:#dc322f}.code.solarized-dark .s1{color:#2aa198}.code.solarized-dark .ss{color:#2aa198}.code.solarized-dark .bp{color:#268bd2}.code.solarized-dark .vc{color:#268bd2}.code.solarized-dark .vg{color:#268bd2}.code.solarized-dark .vi{color:#268bd2}.code.solarized-dark .il{color:#2aa198}.code.solarized-light .line-numbers,.code.solarized-light .diff-line-num{background-color:#fdf6e3}.code.solarized-light .diff-line-num,.code.solarized-light .diff-line-num a{color:rgba(0,0,0,0.3)}.code.solarized-light pre.code,.code.solarized-light .diff-line-num{border-color:#c5d0d4}.code.solarized-light,.code.solarized-light pre.code,.code.solarized-light .line_holder .line_content{background-color:#fdf6e3;color:#586e75}.code.solarized-light .line_holder.match .line_content,.code.solarized-light .line_holder.old-nonewline .line_content,.code.solarized-light .line_holder.new-nonewline .line_content{color:rgba(0,0,0,0.3);background:rgba(255,255,255,0.4)}.code.solarized-light .line_holder td.diff-line-num.hll:not(.empty-cell),.code.solarized-light .line_holder td.line_content.hll:not(.empty-cell){background-color:#ddd8c5;border-color:#c1b895}.code.solarized-light .line_holder .diff-line-num.new,.code.solarized-light .line_holder .line_content.new{background:rgba(133,153,0,0.2)}.code.solarized-light .line_holder .diff-line-num.new.line_content span.idiff,.code.solarized-light .line_holder .line_content.new.line_content span.idiff{background:rgba(133,153,0,0.25)}.code.solarized-light .line_holder .diff-line-num.new.diff-line-num,.code.solarized-light .line_holder .line_content.new.diff-line-num{border-color:#c5d0d4}.code.solarized-light .line_holder .diff-line-num.new::before,.code.solarized-light .line_holder .diff-line-num.new a,.code.solarized-light .line_holder .line_content.new::before,.code.solarized-light .line_holder .line_content.new a{color:#a1a080}.code.solarized-light .line_holder .diff-line-num.old,.code.solarized-light .line_holder .line_content.old{background:rgba(220,50,47,0.2)}.code.solarized-light .line_holder .diff-line-num.old.line_content span.idiff,.code.solarized-light .line_holder .line_content.old.line_content span.idiff{background:rgba(220,50,47,0.25)}.code.solarized-light .line_holder .diff-line-num.old.diff-line-num,.code.solarized-light .line_holder .line_content.old.diff-line-num{border-color:#c5d0d4}.code.solarized-light .line_holder .diff-line-num.old::before,.code.solarized-light .line_holder .diff-line-num.old a,.code.solarized-light .line_holder .line_content.old::before,.code.solarized-light .line_holder .line_content.old a{color:#ad9186}.code.solarized-light .line_holder .diff-line-num.is-over,.code.solarized-light .line_holder .diff-line-num.hll:not(.empty-cell).is-over{background-color:#ded7fc;border-color:#cabffa}.code.solarized-light .line_holder .diff-line-num.is-over a,.code.solarized-light .line_holder .diff-line-num.hll:not(.empty-cell).is-over a{color:#a390f7}.code.solarized-light .line_holder .line_content.match{color:rgba(0,0,0,0.3);background:rgba(255,255,255,0.4)}.code.solarized-light .line_holder:not(.diff-expanded)+.diff-expanded>.diff-line-num,.code.solarized-light .line_holder:not(.diff-expanded)+.diff-expanded>.line_content,.code.solarized-light .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.diff-line-num,.code.solarized-light .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.line_content{border-top:1px solid #d2cdbd}.code.solarized-light .line_holder.diff-expanded>.diff-line-num,.code.solarized-light .line_holder.diff-expanded>.line_content{background:#ece6d4;border-color:#ece6d4}.code.solarized-light pre .hll{background-color:#ddd8c5 !important}.code.solarized-light span.highlight_word{background-color:#eee8d5 !important}.code.solarized-light .line a{color:#268bd2}.code.solarized-light .c{color:#93a1a1}.code.solarized-light .err{color:#586e75}.code.solarized-light .g{color:#586e75}.code.solarized-light .k{color:#859900}.code.solarized-light .l{color:#586e75}.code.solarized-light .n{color:#586e75}.code.solarized-light .o{color:#859900}.code.solarized-light .x{color:#cb4b16}.code.solarized-light .p{color:#586e75}.code.solarized-light .cm{color:#93a1a1}.code.solarized-light .cp{color:#859900}.code.solarized-light .c1{color:#93a1a1}.code.solarized-light .cs{color:#859900}.code.solarized-light .gd{color:#2aa198}.code.solarized-light .ge{color:#586e75;font-style:italic}.code.solarized-light .gr{color:#dc322f}.code.solarized-light .gh{color:#cb4b16}.code.solarized-light .gi{color:#859900}.code.solarized-light .go{color:#586e75}.code.solarized-light .gp{color:#586e75}.code.solarized-light .gs{color:#586e75;font-weight:600}.code.solarized-light .gu{color:#cb4b16}.code.solarized-light .gt{color:#586e75}.code.solarized-light .kc{color:#cb4b16}.code.solarized-light .kd{color:#268bd2}.code.solarized-light .kn{color:#859900}.code.solarized-light .kp{color:#859900}.code.solarized-light .kr{color:#268bd2}.code.solarized-light .kt{color:#dc322f}.code.solarized-light .ld{color:#586e75}.code.solarized-light .m{color:#2aa198}.code.solarized-light .s{color:#2aa198}.code.solarized-light .na{color:#586e75}.code.solarized-light .nb{color:#b58900}.code.solarized-light .nc{color:#268bd2}.code.solarized-light .no{color:#cb4b16}.code.solarized-light .nd{color:#268bd2}.code.solarized-light .ni{color:#cb4b16}.code.solarized-light .ne{color:#cb4b16}.code.solarized-light .nf{color:#268bd2}.code.solarized-light .nl{color:#586e75}.code.solarized-light .nn{color:#586e75}.code.solarized-light .nx{color:#586e75}.code.solarized-light .py{color:#586e75}.code.solarized-light .nt{color:#268bd2}.code.solarized-light .nv{color:#268bd2}.code.solarized-light .ow{color:#859900}.code.solarized-light .w{color:#586e75}.code.solarized-light .mf{color:#2aa198}.code.solarized-light .mh{color:#2aa198}.code.solarized-light .mi{color:#2aa198}.code.solarized-light .mo{color:#2aa198}.code.solarized-light .sb{color:#93a1a1}.code.solarized-light .sc{color:#2aa198}.code.solarized-light .sd{color:#586e75}.code.solarized-light .s2{color:#2aa198}.code.solarized-light .se{color:#cb4b16}.code.solarized-light .sh{color:#586e75}.code.solarized-light .si{color:#2aa198}.code.solarized-light .sx{color:#2aa198}.code.solarized-light .sr{color:#dc322f}.code.solarized-light .s1{color:#2aa198}.code.solarized-light .ss{color:#2aa198}.code.solarized-light .bp{color:#268bd2}.code.solarized-light .vc{color:#268bd2}.code.solarized-light .vg{color:#268bd2}.code.solarized-light .vi{color:#268bd2}.code.solarized-light .il{color:#2aa198}.code.white .line-numbers,.code.white .diff-line-num{background-color:#fafafa}.code.white .diff-line-num,.code.white .diff-line-num a{color:rgba(0,0,0,0.3)}.code.white pre.code,.code.white .diff-line-num{border-color:#f0f0f0}.code.white,.code.white pre.code,.code.white .line_holder .line_content{background-color:#fff;color:#2e2e2e}.code.white .line_holder.match .line_content,.code.white .line_holder .new-nonewline.line_content,.code.white .line_holder .old-nonewline.line_content{color:rgba(0,0,0,0.3);background-color:#fafafa}.code.white .line_holder .diff-line-num.old{background-color:#f9d7dc;border-color:#fac5cd}.code.white .line_holder .diff-line-num.old a{color:#ae979a}.code.white .line_holder .diff-line-num.new{background-color:#ddfbe6;border-color:#c7f0d2}.code.white .line_holder .diff-line-num.new a{color:#9bb0a1}.code.white .line_holder .diff-line-num.is-over,.code.white .line_holder .diff-line-num.hll:not(.empty-cell).is-over{background-color:#ded7fc;border-color:#cabffa}.code.white .line_holder .diff-line-num.is-over a,.code.white .line_holder .diff-line-num.hll:not(.empty-cell).is-over a{color:#a390f7}.code.white .line_holder .diff-line-num.hll:not(.empty-cell){background-color:#fbf2da;border-color:#f0e2bd}.code.white .line_holder:not(.diff-expanded)+.diff-expanded>.diff-line-num,.code.white .line_holder:not(.diff-expanded)+.diff-expanded>.line_content,.code.white .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.diff-line-num,.code.white .line_holder.diff-expanded+.line_holder:not(.diff-expanded)>.line_content{border-top:1px solid #e0e0e0}.code.white .line_holder.diff-expanded>.diff-line-num,.code.white .line_holder.diff-expanded>.line_content{background:#f7f7f7;border-color:#f7f7f7}.code.white .line_holder .line_content.old{background-color:#fbe9eb}.code.white .line_holder .line_content.old::before{color:#ae979a}.code.white .line_holder .line_content.old span.idiff{background-color:#fac5cd}.code.white .line_holder .line_content.new{background-color:#ecfdf0}.code.white .line_holder .line_content.new::before{color:#9bb0a1}.code.white .line_holder .line_content.new span.idiff{background-color:#c7f0d2}.code.white .line_holder .line_content.match{color:rgba(0,0,0,0.3);background-color:#fafafa}.code.white .line_holder .line_content.hll:not(.empty-cell){background-color:#fcf8e7}.code.white pre .hll{background-color:#f8eec7 !important}.code.white span.highlight_word{background-color:#fafe3d !important}.code.white .line a{color:#0086b3}.code.white .hll{background-color:#f8f8f8}.code.white .c{color:#998;font-style:italic}.code.white .err{color:#a61717;background-color:#e3d2d2}.code.white .k{font-weight:600}.code.white .o{font-weight:600}.code.white .cm{color:#998;font-style:italic}.code.white .cp{color:#999;font-weight:600}.code.white .c1{color:#998;font-style:italic}.code.white .cs{color:#999;font-weight:600;font-style:italic}.code.white .gd{color:#000;background-color:#fdd}.code.white .gd .x{color:#000;background-color:#faa}.code.white .ge{font-style:italic}.code.white .gr{color:#a00}.code.white .gh{color:#999}.code.white .gi{color:#000;background-color:#dfd}.code.white .gi .x{color:#000;background-color:#afa}.code.white .go{color:#888}.code.white .gp{color:#555}.code.white .gs{font-weight:600}.code.white .gu{color:#800080;font-weight:600}.code.white .gt{color:#a00}.code.white .kc{font-weight:600}.code.white .kd{font-weight:600}.code.white .kn{font-weight:600}.code.white .kp{font-weight:600}.code.white .kr{font-weight:600}.code.white .kt{color:#458;font-weight:600}.code.white .m{color:#099}.code.white .s{color:#d14}.code.white .n{color:#333}.code.white .na{color:teal}.code.white .nb{color:#0086b3}.code.white .nc{color:#458;font-weight:600}.code.white .no{color:teal}.code.white .ni{color:purple}.code.white .ne{color:#900;font-weight:600}.code.white .nf{color:#900;font-weight:600}.code.white .nn{color:#555}.code.white .nt{color:navy}.code.white .nv{color:teal}.code.white .ow{font-weight:600}.code.white .w{color:#bbb}.code.white .mf{color:#099}.code.white .mh{color:#099}.code.white .mi{color:#099}.code.white .mo{color:#099}.code.white .sb{color:#d14}.code.white .sc{color:#d14}.code.white .sd{color:#d14}.code.white .s2{color:#d14}.code.white .se{color:#d14}.code.white .sh{color:#d14}.code.white .si{color:#d14}.code.white .sx{color:#d14}.code.white .sr{color:#009926}.code.white .s1{color:#d14}.code.white .ss{color:#990073}.code.white .bp{color:#999}.code.white .vc{color:teal}.code.white .vg{color:teal}.code.white .vi{color:teal}.code.white .il{color:#099}.code.white .gc{color:#999;background-color:#eaf2f5}.js-details-container .content{display:none}.js-details-container .content.hide{display:block}.js-details-container.open .content{display:block}.js-details-container.open .content.hide{display:none}.js-toggler-container .turn-on{display:block}.js-toggler-container .turn-off{display:none}.js-toggler-container.on .turn-on{display:none}.js-toggler-container.on .turn-off{display:block}[v-cloak="true"]{display:none !important}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:0.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px}/*! + * Cropper v2.3.0 + * https://github.com/fengyuanchen/cropper + * + * Copyright (c) 2014-2016 Fengyuan Chen and contributors + * Released under the MIT license + * + * Date: 2016-02-22T02:13:13.332Z + */.cropper-container{font-size:0;line-height:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;direction:ltr !important;-ms-touch-action:none;touch-action:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.cropper-container img{display:block;width:100%;min-width:0 !important;max-width:none !important;height:100%;min-height:0 !important;max-height:none !important;image-orientation:0deg !important}.cropper-wrap-box,.cropper-canvas,.cropper-drag-box,.cropper-crop-box,.cropper-modal{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-wrap-box{overflow:hidden}.cropper-drag-box{opacity:0;background-color:#fff;filter:alpha(opacity=0)}.cropper-modal{opacity:.5;background-color:#000;filter:alpha(opacity=50)}.cropper-view-box{display:block;overflow:hidden;width:100%;height:100%;outline:1px solid #39f;outline-color:rgba(51,153,255,0.75)}.cropper-dashed{position:absolute;display:block;opacity:.5;border:0 dashed #eee;filter:alpha(opacity=50)}.cropper-dashed.dashed-h{top:33.33333%;left:0;width:100%;height:33.33333%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.33333%;width:33.33333%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-center{position:absolute;top:50%;left:50%;display:block;width:0;height:0;opacity:.75;filter:alpha(opacity=75)}.cropper-center:before,.cropper-center:after{position:absolute;display:block;content:' ';background-color:#eee}.cropper-center:before{top:0;left:-3px;width:7px;height:1px}.cropper-center:after{top:-3px;left:0;width:1px;height:7px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;opacity:.1;filter:alpha(opacity=10)}.cropper-face{top:0;left:0;background-color:#fff}.cropper-line{background-color:#39f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;opacity:.75;background-color:#39f;filter:alpha(opacity=75)}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;opacity:1;filter:alpha(opacity=100)}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:' ';opacity:0;background-color:#39f;filter:alpha(opacity=0)}@media (min-width: 768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width: 992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width: 1200px){.cropper-point.point-se{width:5px;height:5px;opacity:.75;filter:alpha(opacity=75)}}.cropper-invisible{opacity:0;filter:alpha(opacity=0)}.cropper-bg{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC")}.cropper-hide{position:absolute;display:block;width:0;height:0}.cropper-hidden{display:none !important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed} diff --git a/docker/tanner/snare/dist/pages/1/00f67112fd3ca016fce1a69f39adbfaf b/docker/tanner/snare/dist/pages/1/00f67112fd3ca016fce1a69f39adbfaf new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/00f67112fd3ca016fce1a69f39adbfaf @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/011b5c581cfdb9edd9cb1d007fd9361c b/docker/tanner/snare/dist/pages/1/011b5c581cfdb9edd9cb1d007fd9361c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/011b5c581cfdb9edd9cb1d007fd9361c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/012cb9c338cf9385a250da877cc28e72 b/docker/tanner/snare/dist/pages/1/012cb9c338cf9385a250da877cc28e72 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/012cb9c338cf9385a250da877cc28e72 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/01509acdbd55efb87dc9ef9b2f7334a7 b/docker/tanner/snare/dist/pages/1/01509acdbd55efb87dc9ef9b2f7334a7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/01509acdbd55efb87dc9ef9b2f7334a7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/017c53ddded64bf3a9c4770c8a54ea3b b/docker/tanner/snare/dist/pages/1/017c53ddded64bf3a9c4770c8a54ea3b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/017c53ddded64bf3a9c4770c8a54ea3b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/019c274aece89aad026feaaa5b6087cc b/docker/tanner/snare/dist/pages/1/019c274aece89aad026feaaa5b6087cc new file mode 100644 index 000000000..0abb11c2e --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/019c274aece89aad026feaaa5b6087cc @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/01aff4a7b42952aeaf53f6ce3a7195e9 b/docker/tanner/snare/dist/pages/1/01aff4a7b42952aeaf53f6ce3a7195e9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/01aff4a7b42952aeaf53f6ce3a7195e9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/02698ddf87d2e6ea2a063d23bb50db3c b/docker/tanner/snare/dist/pages/1/02698ddf87d2e6ea2a063d23bb50db3c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/02698ddf87d2e6ea2a063d23bb50db3c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/02a886a822ea2bad0b5ea5e4e1a34216 b/docker/tanner/snare/dist/pages/1/02a886a822ea2bad0b5ea5e4e1a34216 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/02a886a822ea2bad0b5ea5e4e1a34216 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/02f9e53aee54691cebf2945503d894a5 b/docker/tanner/snare/dist/pages/1/02f9e53aee54691cebf2945503d894a5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/02f9e53aee54691cebf2945503d894a5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0387afa39c9866c59711c9e7f42a59da b/docker/tanner/snare/dist/pages/1/0387afa39c9866c59711c9e7f42a59da new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0387afa39c9866c59711c9e7f42a59da @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/04d372e3bec9cc01a18f6b739fbadaf0 b/docker/tanner/snare/dist/pages/1/04d372e3bec9cc01a18f6b739fbadaf0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/04d372e3bec9cc01a18f6b739fbadaf0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/053d951e5241370b977a7ad35974d048 b/docker/tanner/snare/dist/pages/1/053d951e5241370b977a7ad35974d048 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/053d951e5241370b977a7ad35974d048 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/05965e062fe06d6f46d77ed7e5de64a7 b/docker/tanner/snare/dist/pages/1/05965e062fe06d6f46d77ed7e5de64a7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/05965e062fe06d6f46d77ed7e5de64a7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/05a9920e221a266973f6dd48580ae0a7 b/docker/tanner/snare/dist/pages/1/05a9920e221a266973f6dd48580ae0a7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/05a9920e221a266973f6dd48580ae0a7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/05d82da5a58ef214b762f6c4b0b6c022 b/docker/tanner/snare/dist/pages/1/05d82da5a58ef214b762f6c4b0b6c022 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/05d82da5a58ef214b762f6c4b0b6c022 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/06656293aa319ac5a6d0bd74962ff3e9 b/docker/tanner/snare/dist/pages/1/06656293aa319ac5a6d0bd74962ff3e9 new file mode 100644 index 000000000..37ea2e7aa --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/06656293aa319ac5a6d0bd74962ff3e9 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/06763407e336fa9722f67c157a27264b b/docker/tanner/snare/dist/pages/1/06763407e336fa9722f67c157a27264b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/06763407e336fa9722f67c157a27264b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/06b541ee853edfe3d82893fe8fbe33e9 b/docker/tanner/snare/dist/pages/1/06b541ee853edfe3d82893fe8fbe33e9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/06b541ee853edfe3d82893fe8fbe33e9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/06bdcf95aafda840b1d04322636de293 b/docker/tanner/snare/dist/pages/1/06bdcf95aafda840b1d04322636de293 new file mode 100644 index 000000000..241fe2895 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/06bdcf95aafda840b1d04322636de293 @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/0791dde4b9014d475973e547dd51ebd7 b/docker/tanner/snare/dist/pages/1/0791dde4b9014d475973e547dd51ebd7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0791dde4b9014d475973e547dd51ebd7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/07ff3147dc614b37e8a04469ba02ba63 b/docker/tanner/snare/dist/pages/1/07ff3147dc614b37e8a04469ba02ba63 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/07ff3147dc614b37e8a04469ba02ba63 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0829a1bb151a668b07a7965e1bdd1225 b/docker/tanner/snare/dist/pages/1/0829a1bb151a668b07a7965e1bdd1225 new file mode 100644 index 000000000..790c8b10c --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0829a1bb151a668b07a7965e1bdd1225 @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + +Index · Review apps · Ci · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Getting started with Review Apps

+
+
+ +

The basis of Review Apps is the dynamic environments which allow you to create +a new environment (dynamically) for each one of your branches.

+

A Review App can then be visible as a link when you visit the merge request +relevant to the branch. That way, you are able to see live all changes introduced +by the merge request changes. Reviewing anything, from performance to interface +changes, becomes much easier with a live environment and as such, Review Apps +can make a huge impact on your development flow.

+

They mostly make sense to be used with web applications, but you can use them +any way you'd like.

+

+Overview

+

Simply put, a Review App is a mapping of a branch with an environment as there +is a 1:1 relation between them.

+

Here's an example of what it looks like when viewing a merge request with a +dynamically set environment.

+

Review App in merge request

+

In the image above you can see that the add-new-line branch was successfully +built and deployed under a dynamic environment and can be previewed with an +also dynamically URL.

+

The details of the Review Apps implementation depend widely on your real +technology stack and on your deployment process. The simplest case is to +deploy a simple static HTML website, but it will not be that straightforward +when your app is using a database for example. To make a branch be deployed +on a temporary instance and booting up this instance with all required software +and services automatically on the fly is not a trivial task. However, it is +doable, especially if you use Docker, or at least a configuration management +tool like Chef, Puppet, Ansible or Salt.

+

+Prerequisites

+

To get a better understanding of Review Apps, you must first learn how +environments and deployments work. The following docs will help you grasp that +knowledge:

+
    +
  1. First, learn about environments and their role in the development workflow.
  2. +
  3. Then make a small stop to learn about CI variables and how they +can be used in your CI jobs.
  4. +
  5. Next, explore the environment syntax as defined in .gitlab-ci.yml. +This will be your primary reference when you are finally comfortable with +how environments work.
  6. +
  7. Additionally, find out about manual actions and how you can use them to +deploy to critical environments like production with the push of a button.
  8. +
  9. And as a last step, follow the example tutorials which will +guide you step by step to set up the infrastructure and make use of +Review Apps.
  10. +
+

+Configuration

+

The configuration of Review apps depends on your technology stack and your +infrastructure. Read the dynamic environments documentation to understand +how to define and create them.

+

+Creating and destroying Review Apps

+

The creation and destruction of a Review App is defined in .gitlab-ci.yml +at a job level under the environment keyword.

+

Check the environments documentation how to do so.

+

+A simple workflow

+

The process of adding Review Apps in your workflow would look like:

+
    +
  1. Set up the infrastructure to host and deploy the Review Apps.
  2. +
  3. +Install and configure a Runner that does +the deployment.
  4. +
  5. Set up a job in .gitlab-ci.yml that uses the predefined +predefined CI environment variable ${CI_COMMIT_REF_NAME} to +create dynamic environments and restrict it to run only on branches.
  6. +
  7. Optionally set a job that manually stops the Review Apps.
  8. +
+

From there on, you would follow the branched Git flow:

+
    +
  1. Push a branch and let the Runner deploy the Review App based on the script +definition of the dynamic environment job.
  2. +
  3. Wait for the Runner to build and/or deploy your web app.
  4. +
  5. Click on the link that's present in the MR related to the branch and see the +changes live.
  6. +
+

+Limitations

+

Check the environments limitations.

+

+Examples

+

A list of examples used with Review Apps can be found below:

+
    +
  • +Use with NGINX - Use NGINX and the shell executor of GitLab Runner +to deploy a simple HTML website.
  • +
+

And below is a soon to be added examples list:

+
    +
  • Use with Amazon S3
  • +
  • Use on Heroku with dpl
  • +
  • Use with OpenShift/kubernetes
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/0830040e9f0542487c3e44376631a37c b/docker/tanner/snare/dist/pages/1/0830040e9f0542487c3e44376631a37c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0830040e9f0542487c3e44376631a37c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/087cd36c419f7d5f8d94b10750b976ff b/docker/tanner/snare/dist/pages/1/087cd36c419f7d5f8d94b10750b976ff new file mode 100644 index 000000000..d450772b6 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/087cd36c419f7d5f8d94b10750b976ff @@ -0,0 +1,2 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[234],{1174:function(p,s,n){p.exports=n(31)}},[[1174,64,65]]]); +//# sourceMappingURL=default.ec9039fb.chunk.js.map \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/089138e877bd49e0ccf8bda19e18519e b/docker/tanner/snare/dist/pages/1/089138e877bd49e0ccf8bda19e18519e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/089138e877bd49e0ccf8bda19e18519e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/08e2cc48524d0939bad668ef373a3d1a b/docker/tanner/snare/dist/pages/1/08e2cc48524d0939bad668ef373a3d1a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/08e2cc48524d0939bad668ef373a3d1a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0959c107d9e955107db9eba58e6e6dbc b/docker/tanner/snare/dist/pages/1/0959c107d9e955107db9eba58e6e6dbc new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0959c107d9e955107db9eba58e6e6dbc @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/09b3069d0d774a009c5abbb87f943b89 b/docker/tanner/snare/dist/pages/1/09b3069d0d774a009c5abbb87f943b89 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/09b3069d0d774a009c5abbb87f943b89 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0a12c2dd302604475cf5083a60961363 b/docker/tanner/snare/dist/pages/1/0a12c2dd302604475cf5083a60961363 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0a12c2dd302604475cf5083a60961363 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0a2b827d2f0d1835c2ce0962de5bb886 b/docker/tanner/snare/dist/pages/1/0a2b827d2f0d1835c2ce0962de5bb886 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0a2b827d2f0d1835c2ce0962de5bb886 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0a71e7af1b30c76f433f86ec4d272a74 b/docker/tanner/snare/dist/pages/1/0a71e7af1b30c76f433f86ec4d272a74 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0a71e7af1b30c76f433f86ec4d272a74 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0a8115109f5f9dd52e234312242a0534 b/docker/tanner/snare/dist/pages/1/0a8115109f5f9dd52e234312242a0534 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0a8115109f5f9dd52e234312242a0534 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0aabf264aa8fed2f1c3746f1d179c651 b/docker/tanner/snare/dist/pages/1/0aabf264aa8fed2f1c3746f1d179c651 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0aabf264aa8fed2f1c3746f1d179c651 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0b5b7d2dbaa3af9473aab0fafc3b1c62 b/docker/tanner/snare/dist/pages/1/0b5b7d2dbaa3af9473aab0fafc3b1c62 new file mode 100644 index 000000000..661bcea10 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0b5b7d2dbaa3af9473aab0fafc3b1c62 @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + +Groups · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

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

Below you will find all the groups that are public.

+

You can easily contribute to them by requesting to join these groups.

+
+
+
No public groups
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/0bd0799e885da5c532d5941265964b6a b/docker/tanner/snare/dist/pages/1/0bd0799e885da5c532d5941265964b6a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0bd0799e885da5c532d5941265964b6a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0be00381b878add6daaa96559ba82c2b b/docker/tanner/snare/dist/pages/1/0be00381b878add6daaa96559ba82c2b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0be00381b878add6daaa96559ba82c2b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0c639cc600d500396a248cf450597bfc b/docker/tanner/snare/dist/pages/1/0c639cc600d500396a248cf450597bfc new file mode 100644 index 000000000..f48bf3e72 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0c639cc600d500396a248cf450597bfc @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/0cd9805cf5a0285bc1a438d4211f0543 b/docker/tanner/snare/dist/pages/1/0cd9805cf5a0285bc1a438d4211f0543 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0cd9805cf5a0285bc1a438d4211f0543 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0d137704b199027b037be0ac05d46ea7 b/docker/tanner/snare/dist/pages/1/0d137704b199027b037be0ac05d46ea7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0d137704b199027b037be0ac05d46ea7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0d60c45f1c902e8608b68b2dc3ee5566 b/docker/tanner/snare/dist/pages/1/0d60c45f1c902e8608b68b2dc3ee5566 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0d60c45f1c902e8608b68b2dc3ee5566 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0d851a0aca487ab359bb7d92911c59c5 b/docker/tanner/snare/dist/pages/1/0d851a0aca487ab359bb7d92911c59c5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0d851a0aca487ab359bb7d92911c59c5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0d9865a319530fb6aeb2c0b71a77c90b b/docker/tanner/snare/dist/pages/1/0d9865a319530fb6aeb2c0b71a77c90b new file mode 100644 index 000000000..ec94287ec --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0d9865a319530fb6aeb2c0b71a77c90b @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + +Groups · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

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

Below you will find all the groups that are public.

+

You can easily contribute to them by requesting to join these groups.

+
+
+
No public groups
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/0d9c9593cce81d8f2a81816b0140907c b/docker/tanner/snare/dist/pages/1/0d9c9593cce81d8f2a81816b0140907c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0d9c9593cce81d8f2a81816b0140907c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0da2569d074237a72ebf904f57ed5aa2 b/docker/tanner/snare/dist/pages/1/0da2569d074237a72ebf904f57ed5aa2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0da2569d074237a72ebf904f57ed5aa2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0dd7f22007ac6af10084cc9dd66cfca1 b/docker/tanner/snare/dist/pages/1/0dd7f22007ac6af10084cc9dd66cfca1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0dd7f22007ac6af10084cc9dd66cfca1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0e1c492395abea57e150bee6b234b373 b/docker/tanner/snare/dist/pages/1/0e1c492395abea57e150bee6b234b373 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0e1c492395abea57e150bee6b234b373 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0e3d418e0243ef904ee17110e5732992 b/docker/tanner/snare/dist/pages/1/0e3d418e0243ef904ee17110e5732992 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0e3d418e0243ef904ee17110e5732992 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0e9c390470f58a1ea4f7960fd55a245b b/docker/tanner/snare/dist/pages/1/0e9c390470f58a1ea4f7960fd55a245b new file mode 100644 index 000000000..fc3d8beb6 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0e9c390470f58a1ea4f7960fd55a245b @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/0eb6917fdf4358b2c616a27db38f0030 b/docker/tanner/snare/dist/pages/1/0eb6917fdf4358b2c616a27db38f0030 new file mode 100644 index 000000000..836df0461 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0eb6917fdf4358b2c616a27db38f0030 @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/0eb89f448c4ffce7afd32ed8138a825f b/docker/tanner/snare/dist/pages/1/0eb89f448c4ffce7afd32ed8138a825f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0eb89f448c4ffce7afd32ed8138a825f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0eef41f66d4bf6efc14c0fa57ae7a743 b/docker/tanner/snare/dist/pages/1/0eef41f66d4bf6efc14c0fa57ae7a743 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0eef41f66d4bf6efc14c0fa57ae7a743 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0f2599f5b881c328a5f73c72f0336950 b/docker/tanner/snare/dist/pages/1/0f2599f5b881c328a5f73c72f0336950 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0f2599f5b881c328a5f73c72f0336950 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0f7fa70712b3499e628f64c2c24c7048 b/docker/tanner/snare/dist/pages/1/0f7fa70712b3499e628f64c2c24c7048 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0f7fa70712b3499e628f64c2c24c7048 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/0fef0e33b5bb9cd87559fb7728a235d4 b/docker/tanner/snare/dist/pages/1/0fef0e33b5bb9cd87559fb7728a235d4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/0fef0e33b5bb9cd87559fb7728a235d4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/10054ff552c59663fadbd319f4db72cd b/docker/tanner/snare/dist/pages/1/10054ff552c59663fadbd319f4db72cd new file mode 100644 index 000000000..83c3f7994 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/10054ff552c59663fadbd319f4db72cd @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/104550d288a2e1dd9d6e19db868ab574 b/docker/tanner/snare/dist/pages/1/104550d288a2e1dd9d6e19db868ab574 new file mode 100644 index 000000000..e62ef7a9c --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/104550d288a2e1dd9d6e19db868ab574 @@ -0,0 +1,2 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[75],{12:function(t,e,i){"use strict";var n=i(0),r=i.n(n);e.a={bind:function(t){r()(t).tooltip({trigger:"hover"})},componentUpdated:function(t){r()(t).tooltip("_fixTitle")},unbind:function(t){r()(t).tooltip("dispose")}}},124:function(t,e,i){"use strict";function n(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var r={name:"DeprecatedModal",props:{id:{type:String,required:!1},title:{type:String,required:!1},text:{type:String,required:!1},hideFooter:{type:Boolean,required:!1,default:!1},kind:{type:String,required:!1,default:"primary"},modalDialogClass:{type:String,required:!1,default:""},closeKind:{type:String,required:!1,default:"default"},closeButtonLabel:{type:String,required:!1,default:"Cancel"},primaryButtonLabel:{type:String,required:!1,default:""},secondaryButtonLabel:{type:String,required:!1,default:""},submitDisabled:{type:Boolean,required:!1,default:!1}},computed:{btnKindClass:function(){return n({},"btn-"+this.kind,!0)},btnCancelKindClass:function(){return n({},"btn-"+this.closeKind,!0)}},methods:{emitCancel:function(t){this.$emit("cancel",t)},emitSubmit:function(t){this.$emit("submit",t)}}},a=i(2),o=Object(a.a)(r,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"modal-open"},[i("div",{staticClass:"modal",class:t.id?"":"d-block",attrs:{id:t.id,role:"dialog",tabindex:"-1"}},[i("div",{staticClass:"modal-dialog",class:t.modalDialogClass,attrs:{role:"document"}},[i("div",{staticClass:"modal-content"},[i("div",{staticClass:"modal-header"},[t._t("header",[i("h4",{staticClass:"modal-title float-left"},[t._v("\n "+t._s(t.title)+"\n ")]),t._v(" "),i("button",{staticClass:"close float-right",attrs:{type:"button","data-dismiss":"modal","aria-label":"Close"},on:{click:function(e){t.emitCancel(e)}}},[i("span",{attrs:{"aria-hidden":"true"}},[t._v("×")])])])],2),t._v(" "),i("div",{staticClass:"modal-body"},[t._t("body",[i("p",[t._v(t._s(t.text))])],{text:t.text})],2),t._v(" "),t.hideFooter?t._e():i("div",{staticClass:"modal-footer"},[i("button",{staticClass:"btn",class:t.btnCancelKindClass,attrs:{type:"button","data-dismiss":"modal"},on:{click:function(e){t.emitCancel(e)}}},[t._v("\n "+t._s(t.closeButtonLabel)+"\n ")]),t._v(" "),t.secondaryButtonLabel?t._t("secondary-button",[t.secondaryButtonLabel?i("button",{staticClass:"btn",attrs:{type:"button","data-dismiss":"modal"}},[t._v("\n "+t._s(t.secondaryButtonLabel)+"\n ")]):t._e()]):t._e(),t._v(" "),t.primaryButtonLabel?i("button",{staticClass:"btn js-primary-button",class:t.btnKindClass,attrs:{disabled:t.submitDisabled,type:"button","data-dismiss":"modal"},on:{click:function(e){t.emitSubmit(e)}}},[t._v("\n "+t._s(t.primaryButtonLabel)+"\n ")]):t._e()],2)])])]),t._v(" "),t.id?t._e():i("div",{staticClass:"modal-backdrop fade show"})])},[],!1,null,null,null);e.a=o.exports},139:function(t,e,i){"use strict";var n=i(12),r=i(97),a=(i(40),{directives:{tooltip:n.a},mixins:[r.a],props:{time:{type:String,required:!0},tooltipPlacement:{type:String,required:!1,default:"top"},cssClass:{type:String,required:!1,default:""}}}),o=i(2),s=Object(o.a)(a,function(){var t=this.$createElement;return(this._self._c||t)("time",{directives:[{name:"tooltip",rawName:"v-tooltip"}],class:this.cssClass,attrs:{title:this.tooltipTitle(this.time),"data-placement":this.tooltipPlacement,"data-container":"body"},domProps:{textContent:this._s(this.timeFormated(this.time))}})},[],!1,null,null,null);e.a=s.exports},180:function(t,e,i){"use strict";var n=i(0),r=i.n(n),a=i(3),o=i.n(a),s=i(5),u=function(){function t(t,e){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:"filter_groups";!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.filterForm=e,this.listFilterElement=i,this.listHolderElement=n,this.filterInputField=r,this.isBusy=!1}return u(t,[{key:"getFilterEndpoint",value:function(){return this.filterForm.getAttribute("action")+"?"+r()(this.filterForm).serialize()}},{key:"getPagePath",value:function(){return this.getFilterEndpoint()}},{key:"initSearch",value:function(){this.debounceFilter=o.a.debounce(this.onFilterInput.bind(this),500),this.unbindEvents(),this.bindEvents()}},{key:"onFilterInput",value:function(){var t={},e=r()(this.filterForm).find('[name="'+this.filterInputField+'"]').val();e&&(t[this.filterInputField]=e),this.filterResults(t),this.setDefaultFilterOption&&this.setDefaultFilterOption()}},{key:"bindEvents",value:function(){this.listFilterElement.addEventListener("input",this.debounceFilter)}},{key:"unbindEvents",value:function(){this.listFilterElement.removeEventListener("input",this.debounceFilter)}},{key:"filterResults",value:function(t){var e=this;return!this.isBusy&&(r()(this.listHolderElement).fadeTo(250,.5),this.isBusy=!0,s.a.get(this.getFilterEndpoint(),{params:t}).then(function(i){e.onFilterSuccess(i,t),e.onFilterComplete()}).catch(function(){return e.onFilterComplete()}))}},{key:"onFilterSuccess",value:function(t,e){t.data.html&&(this.listHolderElement.innerHTML=t.data.html);var i=this.getPagePath(e);return window.history.replaceState({page:i},document.title,i)}},{key:"onFilterComplete",value:function(){this.isBusy=!1,r()(this.listHolderElement).fadeTo(250,1)}}]),t}();e.a=l},19:function(t,e,i){"use strict";var n=[8,12,16,18,24,32,48,72],r={props:{name:{type:String,required:!0},size:{type:Number,required:!1,default:16,validator:function(t){return n.includes(t)}},cssClasses:{type:String,required:!1,default:""},width:{type:Number,required:!1,default:null},height:{type:Number,required:!1,default:null},y:{type:Number,required:!1,default:null},x:{type:Number,required:!1,default:null}},computed:{spriteHref:function(){return gon.sprite_icons+"#"+this.name},iconTestClass:function(){return"ic-"+this.name},iconSizeClass:function(){return this.size?"s"+this.size:""}}},a=i(2),o=Object(a.a)(r,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("svg",{class:[t.iconSizeClass,t.iconTestClass,t.cssClasses],attrs:{width:t.width,height:t.height,x:t.x,y:t.y}},[i("use",t._b({},"use",{"xlink:href":t.spriteHref},!1))])},[],!1,null,null,null);e.a=o.exports},236:function(t,e,i){"use strict";var n=i(1),r=Object(n.e)("Pagination|Prev"),a=Object(n.e)("Pagination|Next"),o=Object(n.e)("Pagination|« First"),s=Object(n.e)("Pagination|Last »"),u={props:{change:{type:Function,required:!0},pageInfo:{type:Object,required:!0}},computed:{prev:function(){return this.pageInfo.previousPage},next:function(){return this.pageInfo.nextPage},getItems:function(){var t=this.pageInfo.totalPages,e=this.pageInfo.page,i=[];e>1&&i.push({title:o,first:!0}),e>1?i.push({title:r,prev:!0}):i.push({title:r,disabled:!0,prev:!0}),e>6&&i.push({title:"...",separator:!0});for(var n=Math.max(e-4,1),u=Math.min(e+4,t),l=n;l<=u;l+=1){var c=l===e;i.push({title:l,active:c,page:!0})}return t-e>4&&i.push({title:"...",separator:!0,page:!0}),e===t?i.push({title:a,disabled:!0,next:!0}):t-e>=1&&i.push({title:a,next:!0}),t-e>=1&&i.push({title:s,last:!0}),i},showPagination:function(){return this.pageInfo.totalPages>1}},methods:{changePage:function(t,e){if(!e){var i=this.pageInfo,n=i.totalPages,u=i.nextPage,l=i.previousPage;switch(t){case"...":break;case s:this.change(n);break;case a:this.change(u);break;case r:this.change(l);break;case o:this.change(1);break;default:this.change(+t)}}},hideOnSmallScreen:function(t){return!(t.first||t.last||t.next||t.prev||t.active)}}},l=i(2),c=Object(l.a)(u,function(){var t=this,e=t.$createElement,i=t._self._c||e;return t.showPagination?i("div",{staticClass:"gl-pagination prepend-top-default"},[i("ul",{staticClass:"pagination justify-content-center"},t._l(t.getItems,function(e,n){return i("li",{key:n,staticClass:"page-item",class:{page:e.page,"js-previous-button":e.prev,"js-next-button":e.next,"js-last-button":e.last,"js-first-button":e.first,"d-none d-md-block":t.hideOnSmallScreen(e),separator:e.separator,active:e.active,disabled:e.disabled||e.separator}},[i("a",{staticClass:"page-link",on:{click:function(i){i.preventDefault(),t.changePage(e.title,e.disabled)}}},[t._v("\n "+t._s(e.title)+"\n ")])])}))]):t._e()},[],!1,null,null,null);e.a=c.exports},382:function(t,e,i){"use strict";var n=i(8),r=i(75),a=i(0),o=i.n(a),s=i(180),u=new n.default,l=i(11),c=function(){function t(t,e){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},e=void 0;if(Object.keys(t).length){var i=Object(l.z)(t);e=Object(l.B)(i)}else e=t;this.state.pageInfo=e}},{key:"getPaginationInfo",value:function(){return this.state.pageInfo}},{key:"formatGroupItem",value:function(t){var e=t.children||[],i=e.length>0||!1,n=this.hideProjects?t.subgroup_count:t.children_count;return{id:t.id,name:t.name,fullName:t.full_name,description:t.markdown_description,visibility:t.visibility,avatarUrl:t.avatar_url,relativePath:t.relative_path,editPath:t.edit_path,leavePath:t.leave_path,canEdit:t.can_edit,canLeave:t.can_leave,type:t.type,permission:t.permission,children:e,isOpen:i,isChildrenLoading:!1,isBeingRemoved:!1,parentId:t.parent_id,childrenCount:n,projectCount:t.project_count,subgroupCount:t.subgroup_count,memberCount:t.number_users_with_delimiter,starCount:t.star_count,updatedAt:t.updated_at}}},{key:"removeGroup",value:function(t,e){var i=e;i.children&&i.children.length?i.children=e.children.filter(function(e){return t.id!==e.id}):this.state.groups=this.state.groups.filter(function(e){return t.id!==e.id})}}]),t}(),f=(i(372),function(){function t(t,e){for(var i=0;i20},moreChildrenStats:function(){return Object(m.d)("One more item","%d more items",this.parentGroup.childrenCount-this.parentGroup.children.length)}}},L=Object(E.a)(I,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("ul",{staticClass:"content-list group-list-tree"},[t._l(t.groups,function(e,n){return i("group-item",{key:n,attrs:{group:e,"parent-group":t.parentGroup}})}),t._v(" "),t.hasMoreChildren?i("li",{staticClass:"group-row"},[i("a",{staticClass:"group-row-contents has-more-items",attrs:{href:t.parentGroup.relativePath}},[i("i",{staticClass:"fa fa-external-link",attrs:{"aria-hidden":"true"}}),t._v("\n "+t._s(t.moreChildrenStats)+"\n ")])]):t._e()],2)},[],!1,null,null,null).exports,F=i(12),x=i(379),q=i(19),B={components:{icon:q.a},props:{isGroupOpen:{type:Boolean,required:!0,default:!1}},computed:{iconClass:function(){return this.isGroupOpen?"angle-down":"angle-right"}}},$=Object(E.a)(B,function(){var t=this.$createElement,e=this._self._c||t;return e("span",{staticClass:"folder-caret"},[e("icon",{attrs:{size:12,name:this.iconClass}})],1)},[],!1,null,null,null).exports,M={components:{icon:q.a},props:{itemType:{type:String,required:!0},isGroupOpen:{type:Boolean,required:!0,default:!1}},computed:{iconClass:function(){return this.itemType===j?this.isGroupOpen?"folder-open":"folder":"bookmark"}}},A=Object(E.a)(M,function(){var t=this.$createElement,e=this._self._c||t;return e("span",{staticClass:"item-type-icon"},[e("icon",{attrs:{name:this.iconClass}})],1)},[],!1,null,null,null).exports,R=i(139),D={components:{icon:q.a},directives:{tooltip:F.a},props:{title:{type:String,required:!1,default:""},cssClass:{type:String,required:!1,default:""},iconName:{type:String,required:!0},tooltipPlacement:{type:String,required:!1,default:"bottom"},value:{type:[Number,String],required:!1,default:""}},computed:{isValuePresent:function(){return""!==this.value}}},N=Object(E.a)(D,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("span",{directives:[{name:"tooltip",rawName:"v-tooltip"}],class:t.cssClass,attrs:{"data-placement":t.tooltipPlacement,title:t.title,"data-container":"body"}},[i("icon",{attrs:{name:t.iconName}}),t._v(" "),t.isValuePresent?i("span",{staticClass:"stat-value"},[t._v("\n "+t._s(t.value)+"\n ")]):t._e()],1)},[],!1,null,null,null).exports,H={components:{icon:q.a,timeAgoTooltip:R.a,itemStatsValue:N},props:{item:{type:Object,required:!0}},computed:{visibilityIcon:function(){return w[this.item.visibility]},visibilityTooltip:function(){return this.item.type===j?O[this.item.visibility]:P[this.item.visibility]},isProject:function(){return this.item.type===C},isGroup:function(){return this.item.type===j}}},z=Object(E.a)(H,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"stats"},[t.isGroup?i("item-stats-value",{attrs:{title:t.__("Subgroups"),value:t.item.subgroupCount,"css-class":"number-subgroups","icon-name":"folder"}}):t._e(),t._v(" "),t.isGroup?i("item-stats-value",{attrs:{title:t.__("Projects"),value:t.item.projectCount,"css-class":"number-projects","icon-name":"bookmark"}}):t._e(),t._v(" "),t.isGroup?i("item-stats-value",{attrs:{title:t.__("Members"),value:t.item.memberCount,"css-class":"number-users","icon-name":"users"}}):t._e(),t._v(" "),t.isProject?i("item-stats-value",{attrs:{value:t.item.starCount,"css-class":"project-stars","icon-name":"star"}}):t._e(),t._v(" "),i("item-stats-value",{attrs:{"icon-name":t.visibilityIcon,title:t.visibilityTooltip,"css-class":"item-visibility","tooltip-placement":"left"}}),t._v(" "),t.isProject?i("div",{staticClass:"last-updated"},[i("time-ago-tooltip",{attrs:{time:t.item.updatedAt,"tooltip-placement":"bottom"}})],1):t._e()],1)},[],!1,null,null,null).exports,U={components:{icon:q.a},directives:{tooltip:F.a},props:{parentGroup:{type:Object,required:!1,default:function(){return{}}},group:{type:Object,required:!0}},computed:{leaveBtnTitle:function(){return _.LEAVE_BTN_TITLE},editBtnTitle:function(){return _.EDIT_BTN_TITLE}},methods:{onLeaveGroup:function(){u.$emit("showLeaveGroupModal",this.group,this.parentGroup)}}},V=Object(E.a)(U,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"controls"},[t.group.canEdit?i("a",{directives:[{name:"tooltip",rawName:"v-tooltip"}],staticClass:"edit-group btn no-expand",attrs:{href:t.group.editPath,title:t.editBtnTitle,"aria-label":t.editBtnTitle,"data-container":"body","data-placement":"bottom"}},[i("icon",{attrs:{name:"settings"}})],1):t._e(),t._v(" "),t.group.canLeave?i("a",{directives:[{name:"tooltip",rawName:"v-tooltip"}],staticClass:"leave-group btn no-expand",attrs:{href:t.group.leavePath,title:t.leaveBtnTitle,"aria-label":t.leaveBtnTitle,"data-container":"body","data-placement":"bottom"},on:{click:function(e){return e.preventDefault(),t.onLeaveGroup(e)}}},[i("icon",{attrs:{name:"leave"}})],1):t._e()])},[],!1,null,null,null).exports,K={directives:{tooltip:F.a},components:{identicon:x.a,itemCaret:$,itemTypeIcon:A,itemStats:z,itemActions:V},props:{parentGroup:{type:Object,required:!1,default:function(){return{}}},group:{type:Object,required:!0}},computed:{groupDomId:function(){return"group-"+this.group.id},rowClass:function(){return{"is-open":this.group.isOpen,"has-children":this.hasChildren,"has-description":this.group.description,"being-removed":this.group.isBeingRemoved}},hasChildren:function(){return this.group.childrenCount>0},hasAvatar:function(){return null!==this.group.avatarUrl},isGroup:function(){return"group"===this.group.type}},methods:{onClickRowGroup:function(t){t.target.classList.contains("no-expand")||t.target.parentElement.classList.contains("no-expand")||(this.hasChildren?u.$emit("toggleChildren",this.group):Object(y.g)(this.group.relativePath))}}},J=Object(E.a)(K,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("li",{staticClass:"group-row",class:t.rowClass,attrs:{id:t.groupDomId},on:{click:function(e){return e.stopPropagation(),t.onClickRowGroup(e)}}},[i("div",{staticClass:"group-row-contents",class:{"project-row-contents":!t.isGroup}},[t.isGroup?i("item-actions",{attrs:{group:t.group,"parent-group":t.parentGroup}}):t._e(),t._v(" "),i("item-stats",{attrs:{item:t.group}}),t._v(" "),i("div",{staticClass:"folder-toggle-wrap"},[i("item-caret",{attrs:{"is-group-open":t.group.isOpen}}),t._v(" "),i("item-type-icon",{attrs:{"item-type":t.group.type,"is-group-open":t.group.isOpen}})],1),t._v(" "),i("div",{staticClass:"avatar-container prepend-top-8 prepend-left-5 s24 d-none d-sm-block",class:{"content-loading":t.group.isChildrenLoading}},[i("a",{staticClass:"no-expand",attrs:{href:t.group.relativePath}},[t.hasAvatar?i("img",{staticClass:"avatar s24",attrs:{src:t.group.avatarUrl}}):i("identicon",{attrs:{"entity-id":t.group.id,"entity-name":t.group.name,"size-class":"s24"}})],1)]),t._v(" "),i("div",{staticClass:"title namespace-title"},[i("a",{directives:[{name:"tooltip",rawName:"v-tooltip"}],staticClass:"no-expand",attrs:{href:t.group.relativePath,title:t.group.fullName,"data-placement":"bottom"}},[t._v(t._s(t.group.name))]),t._v(" "),t.group.permission?i("span",{staticClass:"user-access-role"},[t._v("\n "+t._s(t.group.permission)+"\n ")]):t._e()]),t._v(" "),t.group.description?i("div",{staticClass:"description"},[i("span",{domProps:{innerHTML:t._s(t.group.description)}})]):t._e()],1),t._v(" "),t.group.isOpen&&t.hasChildren?i("group-folder",{attrs:{"parent-group":t.group,groups:t.group.children}}):t._e()],1)},[],!1,null,null,null).exports;n.default.use(r.a);e.a=function(){var t=document.getElementById("js-groups-tree");t&&(n.default.component("group-folder",L),n.default.component("group-item",J),new n.default({el:t,components:{groupsApp:S},data:function(){var t=this.$options.el.dataset,e="true"===t.hideProjects;return{store:new h(e),service:new g(t.endpoint),hideProjects:e,loading:!0}},beforeMount:function(){var t=this.$options.el.dataset,e={form:document.querySelector(t.formSel),filter:document.querySelector(t.filterSel),holder:document.querySelector(t.holderSel),filterEndpoint:t.endpoint,pagePath:t.path,dropdownSel:t.dropdownSel,filterInputField:"filter"};new p(e).initSearch()},render:function(t){return t("groups-app",{props:{store:this.store,service:this.service,hideProjects:this.hideProjects}})}}))}},97:function(t,e,i){"use strict";var n=i(40);e.a={methods:{timeFormated:function(t){return Object(n.d)().format(t)},tooltipTitle:function(t){return Object(n.a)(t)}}}}}]); +//# sourceMappingURL=commons~pages.dashboard.groups.index~pages.explore.groups~pages.groups.show.70112f9d.chunk.js.map \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/106c9129a21541f2a245739b91b8561a b/docker/tanner/snare/dist/pages/1/106c9129a21541f2a245739b91b8561a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/106c9129a21541f2a245739b91b8561a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/107fd6a8580af43920daee0771b88187 b/docker/tanner/snare/dist/pages/1/107fd6a8580af43920daee0771b88187 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/107fd6a8580af43920daee0771b88187 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/108c203b5d890188161e233409cb5d51 b/docker/tanner/snare/dist/pages/1/108c203b5d890188161e233409cb5d51 new file mode 100644 index 000000000..2f41d523a --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/108c203b5d890188161e233409cb5d51 @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + +Readme · Examples · Ci · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab CI/CD Examples

+

A collection of .gitlab-ci.yml template files is maintained at the GitLab CI/CD YAML project. When you create a new file via the UI, +GitLab will give you the option to choose one of the templates existent on this project. +If your favorite programming language or framework are missing we would love your +help by sending a merge request with a new .gitlab-ci.yml to this project.

+

There's also a collection of repositories with example projects for various languages. You can fork an adjust them to your own needs.

+

+Languages, frameworks, OSs

+ +

+Game development

+ +

+Miscellaneous

+ +

+Code Quality analysis

+

(Starter) Analyze your project's Code Quality.

+

+Static Application Security Testing (SAST)

+

(Ultimate) Scan your code for vulnerabilities

+

+Dependency Scanning

+

(Ultimate) Scan your dependencies for vulnerabilities

+

+Container Scanning

+

Scan your Docker images for vulnerabilities

+

+Dynamic Application Security Testing (DAST)

+

Scan your app for vulnerabilities with GitLab Dynamic Application Security Testing (DAST).

+

+Browser Performance Testing with Sitespeed.io

+

Analyze your browser performance with Sitespeed.io.

+

+GitLab CI/CD for Review Apps

+ +

+GitLab CI/CD for GitLab Pages

+

See the documentation on GitLab Pages for a complete overview.

+

+Contributing

+

Contributions are very welcome! You can help your favorite programming +language users and GitLab by sending a merge request with a guide for that language. +You may want to apply for the GitLab Community Writers Program +to get paid for writing complete articles for GitLab.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/1103a5db6f8a9e32930cc9e5d391ca0f b/docker/tanner/snare/dist/pages/1/1103a5db6f8a9e32930cc9e5d391ca0f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1103a5db6f8a9e32930cc9e5d391ca0f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/11fa617f3ddae677bc0c2ae741df1ca5 b/docker/tanner/snare/dist/pages/1/11fa617f3ddae677bc0c2ae741df1ca5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/11fa617f3ddae677bc0c2ae741df1ca5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1243e49abbe9ff6de374327c7b20f469 b/docker/tanner/snare/dist/pages/1/1243e49abbe9ff6de374327c7b20f469 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1243e49abbe9ff6de374327c7b20f469 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1285e4ef5f038f6da41e2989124f2af6 b/docker/tanner/snare/dist/pages/1/1285e4ef5f038f6da41e2989124f2af6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1285e4ef5f038f6da41e2989124f2af6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1299b0df2d99addaac4b4a464823c201 b/docker/tanner/snare/dist/pages/1/1299b0df2d99addaac4b4a464823c201 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1299b0df2d99addaac4b4a464823c201 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/12f62627d82ad070e2512730259cd21d b/docker/tanner/snare/dist/pages/1/12f62627d82ad070e2512730259cd21d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/12f62627d82ad070e2512730259cd21d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/13072692a6624a32a09e446f7fa1b320 b/docker/tanner/snare/dist/pages/1/13072692a6624a32a09e446f7fa1b320 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/13072692a6624a32a09e446f7fa1b320 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/137116ddd315658ef349be49b2ed093d b/docker/tanner/snare/dist/pages/1/137116ddd315658ef349be49b2ed093d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/137116ddd315658ef349be49b2ed093d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/137dc0760ead6468eed3a51ff2a0d290 b/docker/tanner/snare/dist/pages/1/137dc0760ead6468eed3a51ff2a0d290 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/137dc0760ead6468eed3a51ff2a0d290 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/13c67b1ca69f6711a3b87f474e904e6a b/docker/tanner/snare/dist/pages/1/13c67b1ca69f6711a3b87f474e904e6a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/13c67b1ca69f6711a3b87f474e904e6a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/144303eac4e31b53fb4391f95cbc9d23 b/docker/tanner/snare/dist/pages/1/144303eac4e31b53fb4391f95cbc9d23 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/144303eac4e31b53fb4391f95cbc9d23 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/14b6f894dcd7813382ae9003c123ed06 b/docker/tanner/snare/dist/pages/1/14b6f894dcd7813382ae9003c123ed06 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/14b6f894dcd7813382ae9003c123ed06 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/14bd55db10fc365e476ce978ae2b3179 b/docker/tanner/snare/dist/pages/1/14bd55db10fc365e476ce978ae2b3179 new file mode 100644 index 000000000..b072dd0f8 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/14bd55db10fc365e476ce978ae2b3179 @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + +Index · Repository · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Repository

+

A repository +is what you use to store your codebase in GitLab and change it with version control. +A repository is part of a project, which has a lot of other features.

+

+Create a repository

+

To create a new repository, all you need to do is +create a new project.

+

Once you create a new project, you can add new files via UI +(read the section below) or via command line. +To add files from the command line, follow the instructions that will +be presented on the screen when you create a new project, or read +through them in the command line basics +documentation.

+
+

Important: +For security reasons, when using the command line, we strongly recommend +that you connect with GitLab via SSH.

+
+

+Files

+

+Create and edit files

+

Host your codebase in GitLab repositories by pushing your files to GitLab. +You can either use the user interface (UI), or connect your local computer +with GitLab through the command line.

+

To configure GitLab CI/CD to build, test, and deploy +you code, add a file called .gitlab-ci.yml +to your repository's root.

+

From the user interface:

+

GitLab's UI allows you to perform lots of Git commands without having to +touch the command line. Even if you use the command line regularly, sometimes +it's easier to do so via GitLab UI:

+ +

From the command line:

+

To get started with the command line, please read through the +command line basics documentation.

+

+Find files

+

Use GitLab's file finder to search for files in a repository.

+

+Jupyter Notebook files

+
+

Introduced in GitLab 9.1

+
+

Jupyter Notebook (previously IPython Notebook) files are used for +interactive computing in many fields and contain a complete record of the +user's sessions and include code, narrative text, equations and rich output.

+

When added to a repository, Jupyter Notebooks with a .ipynb extension will be +rendered to HTML when viewed.

+

Jupyter Notebook Rich Output

+

Interactive features, including JavaScript plots, will not work when viewed in +GitLab.

+

+Branches

+

When you submit changes in a new branch, you create a new version +of that project's file tree. Your branch contains all the changes +you are presenting, which are detected by Git line by line.

+

To continue your workflow, once you pushed your changes to a new branch, +you can create a merge request, perform +inline code review, and discuss +your implementation with your team. +You can live preview changes submitted to a new branch with +Review Apps.

+

With GitLab Starter, you can also request +approval from your managers.

+

To create, delete, and branches via GitLab's UI:

+ +

Alternatively, you can use the +command line.

+

To learn more about branching strategies read through the +GitLab Flow documentation.

+

+Commits

+

When you commit your changes, +you are introducing those changes to your branch. +Via command line, you can commit multiple times before pushing.

+
    +
  • +Commit message: +A commit message is important to identity what is being changed and, +more importantly, why. In GitLab, you can add keywords to the commit +message that will perform one of the actions below: +
      +
    • +Trigger a GitLab CI/CD pipeline: +If you have your project configured with GitLab CI/CD, +you will trigger a pipeline per push, not per commit.
    • +
    • +Skip pipelines: +You can add to you commit message the keyword +[ci skip] +and GitLab CI will skip that pipeline.
    • +
    • +Cross-link issues and merge requests: +Cross-linking +is great to keep track of what's is somehow related in your workflow. +If you mention an issue or a merge request in a commit message, they will be shown +on their respective thread.
    • +
    +
  • +
  • +Cherry-pick a commit: +In GitLab, you can +cherry-pick a commit +right from the UI.
  • +
  • +Revert a commit: +Easily revert a commit +from the UI to a selected branch.
  • +
  • +Sign a commit: +Use GPG to sign your commits.
  • +
+

+Repository size

+

On GitLab.com, your repository size limit is 10GB +(including LFS). For other instances, the repository size is limited by your +system administrators.

+

You can also reduce a repository size using Git.

+

+Contributors

+

All the contributors to your codebase are displayed under your project's Settings > Contributors.

+

They are ordered from the collaborator with the greatest number +of commits to the fewest, and displayed on a nice graph:

+

contributors to code

+

+Repository graph

+

The repository graph displays visually the Git flow strategy used in that repository:

+

repository Git flow

+

Find it under your project's Repository > Graph.

+

+Compare

+

Select branches to compare and view the changes inline:

+

compare branches

+

Find it under your project's Repository > Compare.

+

+Locked files

+
+

Available in GitLab Premium.

+
+

Lock your files to prevent any conflicting changes.

+

File Locking is available only in +GitLab Premium.

+

+Repository's API

+

You can access your repos via repository API.

+

+Clone in Apple Xcode

+
+

Introduced in GitLab 11.0

+
+

Projects that contain a .xcodeproj or .xcworkspace directory can now be cloned +in Xcode using the new Open in Xcode button, located next to the Git URL +used for cloning your project. The button is only shown on macOS.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/15204cfaa6e4c2b6ef719ff0a83a4923 b/docker/tanner/snare/dist/pages/1/15204cfaa6e4c2b6ef719ff0a83a4923 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/15204cfaa6e4c2b6ef719ff0a83a4923 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/155ac1fcb757538f4e66013992530c5a b/docker/tanner/snare/dist/pages/1/155ac1fcb757538f4e66013992530c5a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/155ac1fcb757538f4e66013992530c5a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/156a42933289f94a4f5b7c0fe9d10d69 b/docker/tanner/snare/dist/pages/1/156a42933289f94a4f5b7c0fe9d10d69 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/156a42933289f94a4f5b7c0fe9d10d69 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/15a6d8fec0f54792ceb66287cf389963 b/docker/tanner/snare/dist/pages/1/15a6d8fec0f54792ceb66287cf389963 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/15a6d8fec0f54792ceb66287cf389963 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/15f648c459cf4d5dd3e91eb0e429bcd1 b/docker/tanner/snare/dist/pages/1/15f648c459cf4d5dd3e91eb0e429bcd1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/15f648c459cf4d5dd3e91eb0e429bcd1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/15fe9a87e936b55c29de254c21c6b0f4 b/docker/tanner/snare/dist/pages/1/15fe9a87e936b55c29de254c21c6b0f4 new file mode 100644 index 000000000..c86f8d9e1 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/15fe9a87e936b55c29de254c21c6b0f4 @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + +Todos · Workflow · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab Todos

+
+

Introduced in GitLab 8.5.

+
+

When you log into GitLab, you normally want to see where you should spend your +time and take some action, or what you need to keep an eye on. All without the +mess of a huge pile of e-mail notifications. GitLab is where you do your work, +so being able to get started quickly is very important.

+

Todos is a chronological list of to-dos that are waiting for your input, all +in a simple dashboard.

+

Todos screenshot showing a list of items to check on

+
+

You can quickly access the Todos dashboard using the bell icon next to the +search bar in the upper right corner. The number in blue is the number of Todos +you still have open if the count is < 100, else it's 99+. The exact number +will still be shown in the body of the To do tab.

+

Todos icon

+

+What triggers a Todo

+

A Todo appears in your Todos dashboard when:

+
    +
  • an issue or merge request is assigned to you,
  • +
  • you are @mentioned in an issue or merge request, be it the description of +the issue/merge request or in a comment,
  • +
  • you are @mentioned in a comment on a commit,
  • +
  • a job in the CI pipeline running for your merge request failed, but this +job is not allowed to fail.
  • +
  • an open merge request becomes unmergeable due to conflict, and you are either: +
      +
    • the author, or
    • +
    • have set it to automatically merge once pipeline succeeds.
    • +
    +
  • +
+

+Directly addressed Todos

+
+

Introduced in GitLab 9.0.

+
+

If you are mentioned at the start of a line, the todo you receive will be listed +as 'directly addressed'. For instance, in this comment:

+
@alice What do you think? cc: @bob
+
+- @carol can you please have a look?
+
+>>>
+@dan what do you think?
+>>>
+
+@erin @frank thank you!
+

The people receiving directly addressed todos are @alice, @erin, and +@frank. Directly addressed todos only differ from mention todos in their type, +for filtering; otherwise, they appear as normal.

+

+Manually creating a Todo

+

You can also add an issue or merge request to your Todos dashboard by clicking +the "Add todo" button in the issue or merge request sidebar.

+

Adding a Todo from the issuable sidebar

+

+Marking a Todo as done

+

Any action to the corresponding issue or merge request will mark your Todo as +Done. Actions that dismiss Todos include:

+
    +
  • changing the assignee
  • +
  • changing the milestone
  • +
  • adding/removing a label
  • +
  • commenting on the issue
  • +
+
+

Todos are personal, and they're only marked as done if the action is coming from +you. If you close the issue or merge request, your Todo will automatically +be marked as done.

+

If someone else closes, merges, or takes action on the issue or merge +request, your Todo will remain pending. This prevents other users from closing issues without you being notified.

+

There is just one Todo per issue or merge request, so mentioning a user a +hundred times in an issue will only trigger one Todo.

+
+

If no action is needed, you can manually mark the Todo as done by clicking the +corresponding Done button, and it will disappear from your Todo list.

+

A Todo in the Todos dashboard

+

A Todo can also be marked as done from the issue or merge request sidebar using +the "Mark todo as done" button.

+

Mark todo as done from the issuable sidebar

+

You can mark all your Todos as done at once by clicking on the Mark all as +done button.

+

+Filtering your Todos

+

There are four kinds of filters you can use on your Todos dashboard.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
FilterDescription
ProjectFilter by project
AuthorFilter by the author that triggered the Todo
TypeFilter by issue or merge request
ActionFilter by the action that triggered the Todo
+

You can also filter by more than one of these at the same time. The possible Actions are Any Action, Assigned, Mentioned, Added, Pipelines, and Directly Addressed, as described above.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/1654049e108edbaa799711f5f99df50c b/docker/tanner/snare/dist/pages/1/1654049e108edbaa799711f5f99df50c new file mode 100644 index 000000000..abe43462f --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1654049e108edbaa799711f5f99df50c @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + +Metrics · Prometheus library · Integrations · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Prometheus Metrics library

+
+

Introduced in GitLab 9.0

+
+

GitLab offers automatic detection of select Prometheus exporters. Currently supported exporters are:

+ +

We have tried to surface the most important metrics for each exporter, and will be continuing to add support for additional exporters in future releases. If you would like to add support for other official exporters, contributions are welcome.

+

+Identifying Environments

+

GitLab retrieves performance data from the configured Prometheus server, and attempts to identifying the presence of known metrics. Once identified, GitLab then needs to be able to map the data to a particular environment.

+

In order to isolate and only display relevant metrics for a given environment, GitLab needs a method to detect which labels are associated. To do that, +GitLab uses the defined queries and fills in the environment specific variables. Typically this involves looking for the $CI_ENVIRONMENT_SLUG, but may also include other information such as the project's Kubernetes namespace. Each search query is defined in the exporter specific documentation.

+

+Adding to the library

+

We strive to support the 2-4 most important metrics for each common system service that supports Prometheus. If you are looking for support for a particular exporter which has not yet been added to the library, additions can be made to the additional_metrics.yml file.

+
+

Note: The library is only for monitoring public, common, system services which all customers can benefit from. Support for monitoring customer proprietary metrics will be added in a subsequent release.

+
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/16bf9e04345baaa908bf0dabc135c235 b/docker/tanner/snare/dist/pages/1/16bf9e04345baaa908bf0dabc135c235 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/16bf9e04345baaa908bf0dabc135c235 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/16e6aec69957fc595257f5e62fcf6217 b/docker/tanner/snare/dist/pages/1/16e6aec69957fc595257f5e62fcf6217 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/16e6aec69957fc595257f5e62fcf6217 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/16f3679fce5753826b92d6ff813ad49c b/docker/tanner/snare/dist/pages/1/16f3679fce5753826b92d6ff813ad49c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/16f3679fce5753826b92d6ff813ad49c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1778b73e0156b467ffe3cfb070cd774e b/docker/tanner/snare/dist/pages/1/1778b73e0156b467ffe3cfb070cd774e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1778b73e0156b467ffe3cfb070cd774e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1823043df2ee58b2cee77f6d1e13f701 b/docker/tanner/snare/dist/pages/1/1823043df2ee58b2cee77f6d1e13f701 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1823043df2ee58b2cee77f6d1e13f701 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1853315820888bc2461c99e4fbce89ba b/docker/tanner/snare/dist/pages/1/1853315820888bc2461c99e4fbce89ba new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1853315820888bc2461c99e4fbce89ba @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/18d17453530d169dda7b89234a3d43e2 b/docker/tanner/snare/dist/pages/1/18d17453530d169dda7b89234a3d43e2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/18d17453530d169dda7b89234a3d43e2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/18fc53a52a033fe75f7d0542124ca8c0 b/docker/tanner/snare/dist/pages/1/18fc53a52a033fe75f7d0542124ca8c0 new file mode 100644 index 000000000..9ff692d30 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/18fc53a52a033fe75f7d0542124ca8c0 @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + +Search · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+ + + +
+ + + +
+
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/18fcae1cdf3382a7a78f769410c41f69 b/docker/tanner/snare/dist/pages/1/18fcae1cdf3382a7a78f769410c41f69 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/18fcae1cdf3382a7a78f769410c41f69 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1998bccee83c89a29c8d841d98d61785 b/docker/tanner/snare/dist/pages/1/1998bccee83c89a29c8d841d98d61785 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1998bccee83c89a29c8d841d98d61785 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/19d340e6c240b14e8f7c5c77287992ba b/docker/tanner/snare/dist/pages/1/19d340e6c240b14e8f7c5c77287992ba new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/19d340e6c240b14e8f7c5c77287992ba @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/19e0d97e0557c2ef205d82c7b239fd06 b/docker/tanner/snare/dist/pages/1/19e0d97e0557c2ef205d82c7b239fd06 new file mode 100644 index 000000000..e5f87fbbc Binary files /dev/null and b/docker/tanner/snare/dist/pages/1/19e0d97e0557c2ef205d82c7b239fd06 differ diff --git a/docker/tanner/snare/dist/pages/1/1a8a21db83fc108098efb66bd88d4d1a b/docker/tanner/snare/dist/pages/1/1a8a21db83fc108098efb66bd88d4d1a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1a8a21db83fc108098efb66bd88d4d1a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1b05da38a0144f86d751234ccef04f78 b/docker/tanner/snare/dist/pages/1/1b05da38a0144f86d751234ccef04f78 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1b05da38a0144f86d751234ccef04f78 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1b35ff83d764df93085db67c8c506472 b/docker/tanner/snare/dist/pages/1/1b35ff83d764df93085db67c8c506472 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1b35ff83d764df93085db67c8c506472 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1b712c35ae98a0de967264e203c86b83 b/docker/tanner/snare/dist/pages/1/1b712c35ae98a0de967264e203c86b83 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1b712c35ae98a0de967264e203c86b83 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1bb64356b580abe3d3cc323c024eed7a b/docker/tanner/snare/dist/pages/1/1bb64356b580abe3d3cc323c024eed7a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1bb64356b580abe3d3cc323c024eed7a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1c6927c37ca51ff44d1f34311be68bc6 b/docker/tanner/snare/dist/pages/1/1c6927c37ca51ff44d1f34311be68bc6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1c6927c37ca51ff44d1f34311be68bc6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1ca0aae40a4ae2b93333cf832cbd6b4b b/docker/tanner/snare/dist/pages/1/1ca0aae40a4ae2b93333cf832cbd6b4b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1ca0aae40a4ae2b93333cf832cbd6b4b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1ca3a8eb7bf1af3cf6102586957eb4a1 b/docker/tanner/snare/dist/pages/1/1ca3a8eb7bf1af3cf6102586957eb4a1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1ca3a8eb7bf1af3cf6102586957eb4a1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1d79efde74645b601a94f669e86ed22f b/docker/tanner/snare/dist/pages/1/1d79efde74645b601a94f669e86ed22f new file mode 100644 index 000000000..9d23af497 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1d79efde74645b601a94f669e86ed22f @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/1db59a49e26239c20dbd7f207e6f58cf b/docker/tanner/snare/dist/pages/1/1db59a49e26239c20dbd7f207e6f58cf new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1db59a49e26239c20dbd7f207e6f58cf @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1dbb00ace86d906f0fa6945fce940835 b/docker/tanner/snare/dist/pages/1/1dbb00ace86d906f0fa6945fce940835 new file mode 100644 index 000000000..f0e410fc8 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1dbb00ace86d906f0fa6945fce940835 @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + +Cherry pick changes · Merge requests · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Cherry-pick changes

+
+

Introduced in GitLab 8.7.

+
+

GitLab implements Git's powerful feature to cherry-pick any commit +with introducing a Cherry-pick button in merge requests and commit details.

+

+Cherry-picking a merge request

+

After the merge request has been merged, a Cherry-pick button will be available +to cherry-pick the changes introduced by that merge request.

+

Cherry-pick Merge Request

+

After you click that button, a modal will appear where you can choose to +cherry-pick the changes directly into the selected branch or you can opt to +create a new merge request with the cherry-pick changes

+

+Cherry-picking a Commit

+

You can cherry-pick a Commit from the Commit details page:

+

Cherry-pick commit

+

Similar to cherry-picking a merge request, you can opt to cherry-pick the changes +directly into the target branch or create a new merge request to cherry-pick the +changes.

+

Please note that when cherry-picking merge commits, the mainline will always be the +first parent. If you want to use a different mainline then you need to do that +from the command line.

+

Here is a quick example to cherry-pick a merge commit using the second parent as the +mainline:

+
git cherry-pick -m 2 7a39eb0
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/1debed0b4cc0df93dc6ec456f247fbf1 b/docker/tanner/snare/dist/pages/1/1debed0b4cc0df93dc6ec456f247fbf1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1debed0b4cc0df93dc6ec456f247fbf1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1e75b9d20f6277188019e9eb2cf72628 b/docker/tanner/snare/dist/pages/1/1e75b9d20f6277188019e9eb2cf72628 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1e75b9d20f6277188019e9eb2cf72628 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1ea89b7cdcf5f4b786514c9bb7397148 b/docker/tanner/snare/dist/pages/1/1ea89b7cdcf5f4b786514c9bb7397148 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1ea89b7cdcf5f4b786514c9bb7397148 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1eb545323434144b5dcd3e8f138d3071 b/docker/tanner/snare/dist/pages/1/1eb545323434144b5dcd3e8f138d3071 new file mode 100644 index 000000000..a49a61128 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1eb545323434144b5dcd3e8f138d3071 @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/1f01c27984d416769f13f9f244350242 b/docker/tanner/snare/dist/pages/1/1f01c27984d416769f13f9f244350242 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1f01c27984d416769f13f9f244350242 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1f27448c5dcfbf19bdc3d90c9fd7a6a3 b/docker/tanner/snare/dist/pages/1/1f27448c5dcfbf19bdc3d90c9fd7a6a3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1f27448c5dcfbf19bdc3d90c9fd7a6a3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1f52f956256b965314f03b85c2afbd61 b/docker/tanner/snare/dist/pages/1/1f52f956256b965314f03b85c2afbd61 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1f52f956256b965314f03b85c2afbd61 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1f90d6405b4a38844af825a628bbc695 b/docker/tanner/snare/dist/pages/1/1f90d6405b4a38844af825a628bbc695 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1f90d6405b4a38844af825a628bbc695 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1f9c660b797d469030a125ad835fc326 b/docker/tanner/snare/dist/pages/1/1f9c660b797d469030a125ad835fc326 new file mode 100644 index 000000000..6689de715 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1f9c660b797d469030a125ad835fc326 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/1f9c7ebe2b8c969bddf2cdd2f28cce38 b/docker/tanner/snare/dist/pages/1/1f9c7ebe2b8c969bddf2cdd2f28cce38 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1f9c7ebe2b8c969bddf2cdd2f28cce38 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/1fcfcff657a08aafa7c881dca99328f2 b/docker/tanner/snare/dist/pages/1/1fcfcff657a08aafa7c881dca99328f2 new file mode 100644 index 000000000..516dc2f47 Binary files /dev/null and b/docker/tanner/snare/dist/pages/1/1fcfcff657a08aafa7c881dca99328f2 differ diff --git a/docker/tanner/snare/dist/pages/1/1fd4867afa2c9c1b7af78cc44f509f8d b/docker/tanner/snare/dist/pages/1/1fd4867afa2c9c1b7af78cc44f509f8d new file mode 100644 index 000000000..7e49e41c0 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1fd4867afa2c9c1b7af78cc44f509f8d @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/1fe77324607a683bf0fb03993e2d6fd9 b/docker/tanner/snare/dist/pages/1/1fe77324607a683bf0fb03993e2d6fd9 new file mode 100644 index 000000000..08100b365 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/1fe77324607a683bf0fb03993e2d6fd9 @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/20139e722022ac5f9da572684f37894e b/docker/tanner/snare/dist/pages/1/20139e722022ac5f9da572684f37894e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/20139e722022ac5f9da572684f37894e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/20d31d169a67bb598b26636f1c058500 b/docker/tanner/snare/dist/pages/1/20d31d169a67bb598b26636f1c058500 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/20d31d169a67bb598b26636f1c058500 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/21807653fb38034544225fc60bf95b26 b/docker/tanner/snare/dist/pages/1/21807653fb38034544225fc60bf95b26 new file mode 100644 index 000000000..f4a874811 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/21807653fb38034544225fc60bf95b26 @@ -0,0 +1,365 @@ + + + + + + + + + + + + + + + + + + +Readme · Ssh · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab and SSH keys

+

Git is a distributed version control system, which means you can work locally +but you can also share or "push" your changes to other servers. +Before you can push your changes to a GitLab server +you need a secure communication channel for sharing information.

+

The SSH protocol provides this security and allows you to authenticate to the +GitLab remote server without supplying your username or password each time.

+

For a more detailed explanation of how the SSH protocol works, we advise you to +read this nice tutorial by DigitalOcean.

+

+Locating an existing SSH key pair

+

Before generating a new SSH key pair check if your system already has one +at the default location by opening a shell, or Command Prompt on Windows, +and running the following command:

+

Windows Command Prompt:

+
type %userprofile%\.ssh\id_rsa.pub
+

Git Bash on Windows / GNU/Linux / macOS / PowerShell:

+
cat ~/.ssh/id_rsa.pub
+

If you see a string starting with ssh-rsa you already have an SSH key pair +and you can skip the generate portion of the next section and skip to the copy +to clipboard step. +If you don't see the string or would like to generate a SSH key pair with a +custom name continue onto the next step.

+

Note that Public SSH key may also be named as follows:

+
    +
  • id_dsa.pub
  • +
  • id_ecdsa.pub
  • +
  • id_ed25519.pub
  • +
+

+Generating a new SSH key pair

+
    +
  1. +

    To generate a new SSH key pair, use the following command:

    +

    Git Bash on Windows / GNU/Linux / macOS:

    +
    ssh-keygen -t rsa -C "your.email@example.com" -b 4096
    +

    Windows:

    +

    Alternatively on Windows you can download +PuttyGen +and follow this documentation article to generate a SSH key pair.

    +
  2. +
  3. +

    Next, you will be prompted to input a file path to save your SSH key pair to.

    +

    If you don't already have an SSH key pair use the suggested path by pressing +enter. Using the suggested path will normally allow your SSH client +to automatically use the SSH key pair with no additional configuration.

    +

    If you already have a SSH key pair with the suggested file path, you will need +to input a new file path and declare what host this SSH key pair will be used +for in your .ssh/config file, see Working with non-default SSH key pair paths +for more information.

    +
  4. +
  5. +

    Once you have input a file path you will be prompted to input a password to +secure your SSH key pair. It is a best practice to use a password for an SSH +key pair, but it is not required and you can skip creating a password by +pressing enter.

    +

    NOTE: Note: +If you want to change the password of your SSH key pair, you can use +ssh-keygen -p <keyname>.

    +
  6. +
  7. +

    The next step is to copy the public SSH key as we will need it afterwards.

    +

    To copy your public SSH key to the clipboard, use the appropriate code below:

    +

    macOS:

    +
    pbcopy < ~/.ssh/id_rsa.pub
    +

    GNU/Linux (requires the xclip package):

    +
    xclip -sel clip < ~/.ssh/id_rsa.pub
    +

    Windows Command Line:

    +
    type %userprofile%\.ssh\id_rsa.pub | clip
    +

    Git Bash on Windows / Windows PowerShell:

    +
    cat ~/.ssh/id_rsa.pub | clip
    +
  8. +
  9. +

    The final step is to add your public SSH key to GitLab.

    +

    Navigate to the 'SSH Keys' tab in your 'Profile Settings'. +Paste your key in the 'Key' section and give it a relevant 'Title'. +Use an identifiable title like 'Work Laptop - Windows 7' or +'Home MacBook Pro 15'.

    +

    If you manually copied your public SSH key make sure you copied the entire +key starting with ssh-rsa and ending with your email.

    +
  10. +
  11. +

    Optionally you can test your setup by running ssh -T git@example.com +(replacing example.com with your GitLab domain) and verifying that you +receive a Welcome to GitLab message.

    +
  12. +
+

+Working with non-default SSH key pair paths

+

If you used a non-default file path for your GitLab SSH key pair, +you must configure your SSH client to find your GitLab private SSH key +for connections to your GitLab server (perhaps gitlab.com).

+

For your current terminal session you can do so using the following commands +(replacing other_id_rsa with your private SSH key):

+

Git Bash on Windows / GNU/Linux / macOS:

+
eval $(ssh-agent -s)
+ssh-add ~/.ssh/other_id_rsa
+

To retain these settings you'll need to save them to a configuration file. +For OpenSSH clients this is configured in the ~/.ssh/config file for some +operating systems. +Below are two example host configurations using their own SSH key:

+
# GitLab.com server
+Host gitlab.com
+RSAAuthentication yes
+IdentityFile ~/.ssh/config/private-key-filename-01
+
+# Private GitLab server
+Host gitlab.company.com
+RSAAuthentication yes
+IdentityFile ~/.ssh/config/private-key-filename
+

Due to the wide variety of SSH clients and their very large number of +configuration options, further explanation of these topics is beyond the scope +of this document.

+

Public SSH keys need to be unique, as they will bind to your account. +Your SSH key is the only identifier you'll have when pushing code via SSH. +That's why it needs to uniquely map to a single user.

+

+Deploy keys

+

+Per-repository deploy keys

+

Deploy keys allow read-only or read-write (if enabled) access to one or +multiple projects with a single SSH key pair.

+

This is really useful for cloning repositories to your Continuous +Integration (CI) server. By using deploy keys, you don't have to set up a +dummy user account.

+

If you are a project maintainer or owner, you can add a deploy key in the +project settings under the section 'Repository'. Specify a title for the new +deploy key and paste a public SSH key. After this, the machine that uses +the corresponding private SSH key has read-only or read-write (if enabled) +access to the project.

+

You can't add the same deploy key twice using the form. +If you want to add the same key to another project, please enable it in the +list that says 'Deploy keys from projects available to you'. All the deploy +keys of all the projects you have access to are available. This project +access can happen through being a direct member of the project, or through +a group.

+

Deploy keys can be shared between projects, you just need to add them to each +project.

+

+Global shared deploy keys

+

Global Shared Deploy keys allow read-only or read-write (if enabled) access to +be configured on any repository in the entire GitLab installation.

+

This is really useful for integrating repositories to secured, shared Continuous +Integration (CI) services or other shared services. +GitLab administrators can set up the Global Shared Deploy key in GitLab and +add the private key to any shared systems. Individual repositories opt into +exposing their repository using these keys when a project maintainers (or higher) +authorizes a Global Shared Deploy key to be used with their project.

+

Global Shared Keys can provide greater security compared to Per-Project Deploy +Keys since an administrator of the target integrated system is the only one +who needs to know and configure the private key.

+

GitLab administrators set up Global Deploy keys in the Admin area under the +section Deploy Keys. Ensure keys have a meaningful title as that will be +the primary way for project maintainers and owners to identify the correct Global +Deploy key to add. For instance, if the key gives access to a SaaS CI instance, +use the name of that service in the key name if that is all it is used for. +When creating Global Shared Deploy keys, give some thought to the granularity +of keys - they could be of very narrow usage such as just a specific service or +of broader usage for something like "Anywhere you need to give read access to +your repository".

+

Once a GitLab administrator adds the Global Deployment key, project maintainers +and owners can add it in project's Settings > Repository section by expanding the +Deploy Key section and clicking Enable next to the appropriate key listed +under Public deploy keys available to any project.

+

NOTE: Note: +The heading Public deploy keys available to any project only appears +if there is at least one Global Deploy Key configured.

+

CAUTION: Warning: +Defining Global Deploy Keys does not expose any given repository via +the key until that repository adds the Global Deploy Key to their project. +In this way the Global Deploy Keys enable access by other systems, but do +not implicitly give any access just by setting them up.

+

+Applications

+

+Eclipse

+

How to add your SSH key to Eclipse: https://wiki.eclipse.org/EGit/User_Guide#Eclipse_SSH_Configuration

+

+SSH on the GitLab server

+

GitLab integrates with the system-installed SSH daemon, designating a user +(typically named git) through which all access requests are handled. Users +connecting to the GitLab server over SSH are identified by their SSH key instead +of their username.

+

SSH client operations performed on the GitLab server wil be executed as this +user. Although it is possible to modify the SSH configuration for this user to, +e.g., provide a private SSH key to authenticate these requests by, this practice +is not supported and is strongly discouraged as it presents significant +security risks.

+

The GitLab check process includes a check for this condition, and will direct you +to this section if your server is configured like this, e.g.:

+
$ gitlab-rake gitlab:check
+# ...
+Git user has default SSH configuration? ... no
+  Try fixing it:
+  mkdir ~/gitlab-check-backup-1504540051
+  sudo mv /var/lib/git/.ssh/id_rsa ~/gitlab-check-backup-1504540051
+  sudo mv /var/lib/git/.ssh/id_rsa.pub ~/gitlab-check-backup-1504540051
+  For more information see:
+  doc/ssh/README.md in section "SSH on the GitLab server"
+  Please fix the error above and rerun the checks.
+

Remove the custom configuration as soon as you're able to. These customizations +are explicitly not supported and may stop working at any time.

+

+Troubleshooting

+

If on Git clone you are prompted for a password like git@gitlab.com's password: +something is wrong with your SSH setup.

+
    +
  • Ensure that you generated your SSH key pair correctly and added the public SSH +key to your GitLab profile
  • +
  • Try manually registering your private SSH key using ssh-agent as documented +earlier in this document
  • +
  • Try to debug the connection by running ssh -Tv git@example.com +(replacing example.com with your GitLab domain)
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2211b83ba6eaf7ba73f0b32c195ee9ef b/docker/tanner/snare/dist/pages/1/2211b83ba6eaf7ba73f0b32c195ee9ef new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2211b83ba6eaf7ba73f0b32c195ee9ef @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/22908655dffe630ec9c15e47437d3e92 b/docker/tanner/snare/dist/pages/1/22908655dffe630ec9c15e47437d3e92 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/22908655dffe630ec9c15e47437d3e92 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/22d30940c25d1181d17c6026ebcaa250 b/docker/tanner/snare/dist/pages/1/22d30940c25d1181d17c6026ebcaa250 new file mode 100644 index 000000000..29708889a --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/22d30940c25d1181d17c6026ebcaa250 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/22ecc586122e05fcc71eede347b79b00 b/docker/tanner/snare/dist/pages/1/22ecc586122e05fcc71eede347b79b00 new file mode 100644 index 000000000..d99146324 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/22ecc586122e05fcc71eede347b79b00 @@ -0,0 +1,1632 @@ + + + + + + + + + + + + + + + + + + +Readme · Yaml · Ci · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Configuration of your jobs with .gitlab-ci.yml

+

This document describes the usage of .gitlab-ci.yml, the file that is used by +GitLab Runner to manage your project's jobs.

+

From version 7.12, GitLab CI uses a YAML +file (.gitlab-ci.yml) for the project configuration. It is placed in the root +of your repository and contains definitions of how your project should be built.

+

If you want a quick introduction to GitLab CI, follow our +quick start guide.

+

NOTE: Note: +If you have a mirrored repository where GitLab pulls from, +you may need to enable pipeline triggering in your project's +Settings > Repository > Pull from a remote repository > Trigger pipelines for mirror updates.

+

+Jobs

+

The YAML file defines a set of jobs with constraints stating when they should +be run. You can specify an unlimited number of jobs which are defined as +top-level elements with an arbitrary name and always have to contain at least +the script clause.

+
job1:
+  script: "execute-script-for-job1"
+
+job2:
+  script: "execute-script-for-job2"
+

The above example is the simplest possible CI/CD configuration with two separate +jobs, where each of the jobs executes a different command. +Of course a command can execute code directly (./configure;make;make install) +or run a script (test.sh) in the repository.

+

Jobs are picked up by Runners and executed within the +environment of the Runner. What is important, is that each job is run +independently from each other.

+

Each job must have a unique name, but there are a few reserved keywords that +cannot be used as job names:

+
    +
  • image
  • +
  • services
  • +
  • stages
  • +
  • types
  • +
  • before_script
  • +
  • after_script
  • +
  • variables
  • +
  • cache
  • +
+

A job is defined by a list of parameters that define the job behavior.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeywordRequiredDescription
scriptyesDefines a shell script which is executed by Runner
imagenoUse docker image, covered in Using Docker Images +
servicesnoUse docker services, covered in Using Docker Images +
stagenoDefines a job stage (default: test)
typenoAlias for stage +
variablesnoDefine job variables on a job level
onlynoDefines a list of git refs for which job is created
exceptnoDefines a list of git refs for which job is not created
tagsnoDefines a list of tags which are used to select Runner
allow_failurenoAllow job to fail. Failed job doesn't contribute to commit status
whennoDefine when to run job. Can be on_success, on_failure, always or manual +
dependenciesnoDefine other jobs that a job depends on so that you can pass artifacts between them
artifactsnoDefine list of job artifacts +
cachenoDefine list of files that should be cached between subsequent runs
before_scriptnoOverride a set of commands that are executed before job
after_scriptnoOverride a set of commands that are executed after job
environmentnoDefines a name of environment to which deployment is done by this job
coveragenoDefine code coverage settings for a given job
retrynoDefine how many times a job can be auto-retried in case of a failure
+

+pages +

+

pages is a special job that is used to upload static content to GitLab that +can be used to serve your website. It has a special syntax, so the two +requirements below must be met:

+
    +
  1. Any static content must be placed under a public/ directory
  2. +
  3. +artifacts with a path to the public/ directory must be defined
  4. +
+

The example below simply moves all files from the root of the project to the +public/ directory. The .public workaround is so cp doesn't also copy +public/ to itself in an infinite loop:

+
pages:
+  stage: deploy
+  script:
+    - mkdir .public
+    - cp -r * .public
+    - mv .public public
+  artifacts:
+    paths:
+      - public
+  only:
+    - master
+

Read more on GitLab Pages user documentation.

+

+image and services +

+

This allows to specify a custom Docker image and a list of services that can be +used for time of the job. The configuration of this feature is covered in +a separate document.

+

+before_script and after_script +

+
+

Introduced in GitLab 8.7 and requires Gitlab Runner v1.2

+
+

before_script is used to define the command that should be run before all +jobs, including deploy jobs, but after the restoration of artifacts. +This can be an array or a multi-line string.

+

after_script is used to define the command that will be run after for all +jobs, including failed ones. This has to be an array or a multi-line string.

+

The before_script and the main script are concatenated and run in a single context/container. +The after_script is run separately, so depending on the executor, changes done +outside of the working tree might not be visible, e.g. software installed in the +before_script.

+

It's possible to overwrite the globally defined before_script and after_script +if you set it per-job:

+
before_script:
+  - global before script
+
+job:
+  before_script:
+    - execute this instead of global before script
+  script:
+    - my command
+  after_script:
+    - execute this after my script
+

+stages +

+

stages is used to define stages that can be used by jobs and is defined +globally.

+

The specification of stages allows for having flexible multi stage pipelines. +The ordering of elements in stages defines the ordering of jobs' execution:

+
    +
  1. Jobs of the same stage are run in parallel.
  2. +
  3. Jobs of the next stage are run after the jobs from the previous stage +complete successfully.
  4. +
+

Let's consider the following example, which defines 3 stages:

+
stages:
+  - build
+  - test
+  - deploy
+
    +
  1. First, all jobs of build are executed in parallel.
  2. +
  3. If all jobs of build succeed, the test jobs are executed in parallel.
  4. +
  5. If all jobs of test succeed, the deploy jobs are executed in parallel.
  6. +
  7. If all jobs of deploy succeed, the commit is marked as passed.
  8. +
  9. If any of the previous jobs fails, the commit is marked as failed and no +jobs of further stage are executed.
  10. +
+

There are also two edge cases worth mentioning:

+
    +
  1. If no stages are defined in .gitlab-ci.yml, then the build, +test and deploy are allowed to be used as job's stage by default.
  2. +
  3. If a job doesn't specify a stage, the job is assigned the test stage.
  4. +
+

+stage +

+

stage is defined per-job and relies on stages which is defined +globally. It allows to group jobs into different stages, and jobs of the same +stage are executed in parallel. For example:

+
stages:
+  - build
+  - test
+  - deploy
+
+job 1:
+  stage: build
+  script: make build dependencies
+
+job 2:
+  stage: build
+  script: make build artifacts
+
+job 3:
+  stage: test
+  script: make test
+
+job 4:
+  stage: deploy
+  script: make deploy
+

+types +

+

CAUTION: Deprecated: +types is deprecated, and could be removed in one of the future releases. +Use stages instead.

+

+script +

+

script is the only required keyword that a job needs. It's a shell script +which is executed by the Runner. For example:

+
job:
+  script: "bundle exec rspec"
+

This parameter can also contain several commands using an array:

+
job:
+  script:
+    - uname -a
+    - bundle exec rspec
+

Sometimes, script commands will need to be wrapped in single or double quotes. +For example, commands that contain a colon (:) need to be wrapped in quotes so +that the YAML parser knows to interpret the whole thing as a string rather than +a "key: value" pair. Be careful when using special characters: +:, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, `.

+

+only and except (simplified)

+

only and except are two parameters that set a job policy to limit when +jobs are created:

+
    +
  1. +only defines the names of branches and tags for which the job will run.
  2. +
  3. +except defines the names of branches and tags for which the job will +not run.
  4. +
+

There are a few rules that apply to the usage of job policy:

+
    +
  • +only and except are inclusive. If both only and except are defined +in a job specification, the ref is filtered by only and except.
  • +
  • +only and except allow the use of regular expressions.
  • +
  • +only and except allow to specify a repository path to filter jobs for +forks.
  • +
+

In addition, only and except allow the use of special keywords:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription
branchesWhen a branch is pushed.
tagsWhen a tag is pushed.
apiWhen pipeline has been triggered by a second pipelines API (not triggers API).
externalWhen using CI services other than GitLab.
pipelinesFor multi-project triggers, created using the API with CI_JOB_TOKEN.
pushesPipeline is triggered by a git push by the user.
schedulesFor scheduled pipelines.
triggersFor pipelines created using a trigger token.
webFor pipelines created using Run pipeline button in GitLab UI (under your project's Pipelines).
+

In the example below, job will run only for refs that start with issue-, +whereas all branches will be skipped:

+
job:
+  # use regexp
+  only:
+    - /^issue-.*$/
+  # use special keyword
+  except:
+    - branches
+

In this example, job will run only for refs that are tagged, or if a build is +explicitly requested via an API trigger or a Pipeline Schedule:

+
job:
+  # use special keywords
+  only:
+    - tags
+    - triggers
+    - schedules
+

The repository path can be used to have jobs executed only for the parent +repository and not forks:

+
job:
+  only:
+    - branches@gitlab-org/gitlab-ce
+  except:
+    - master@gitlab-org/gitlab-ce
+

The above example will run job for all branches on gitlab-org/gitlab-ce, +except master.

+

+only and except (complex)

+
+

refs and kubernetes policies introduced in GitLab 10.0

+
+
+

variables policy introduced in 10.7

+
+

CAUTION: Warning: +This an alpha feature, and it it subject to change at any time without +prior notice!

+

Since GitLab 10.0 it is possible to define a more elaborate only/except job +policy configuration.

+

GitLab now supports both, simple and complex strategies, so it is possible to +use an array and a hash configuration scheme.

+

Three keys are now available: refs, kubernetes and variables. +Refs strategy equals to simplified only/except configuration, whereas +kubernetes strategy accepts only active keyword.

+

variables keyword is used to define variables expressions. In other words +you can use predefined variables / project / group or +environment-scoped variables to define an expression GitLab is going to +evaluate in order to decide whether a job should be created or not.

+

See the example below. Job is going to be created only when pipeline has been +scheduled or runs for a master branch, and only if kubernetes service is +active in the project.

+
job:
+  only:
+    refs:
+      - master
+      - schedules
+    kubernetes: active
+

Examples of using variables expressions:

+
deploy:
+  script: cap staging deploy
+  only:
+    refs:
+      - branches
+    variables:
+      - $RELEASE == "staging"
+      - $STAGING
+

Another use case is exluding jobs depending on a commit message (added in 11.0):

+
end-to-end:
+  script: rake test:end-to-end
+  except:
+    variables:
+      - $CI_COMMIT_MESSAGE =~ /skip-end-to-end-tests/
+

Learn more about variables expressions on a separate page.

+

+tags +

+

tags is used to select specific Runners from the list of all Runners that are +allowed to run this project.

+

During the registration of a Runner, you can specify the Runner's tags, for +example ruby, postgres, development.

+

tags allow you to run jobs with Runners that have the specified tags +assigned to them:

+
job:
+  tags:
+    - ruby
+    - postgres
+

The specification above, will make sure that job is built by a Runner that +has both ruby AND postgres tags defined.

+

+allow_failure +

+

allow_failure is used when you want to allow a job to fail without impacting +the rest of the CI suite. Failed jobs don't contribute to the commit status.

+

When enabled and the job fails, the pipeline will be successful/green for all +intents and purposes, but a "CI build passed with warnings" message will be +displayed on the merge request or commit or job page. This is to be used by +jobs that are allowed to fail, but where failure indicates some other (manual) +steps should be taken elsewhere.

+

In the example below, job1 and job2 will run in parallel, but if job1 +fails, it will not stop the next stage from running, since it's marked with +allow_failure: true:

+
job1:
+  stage: test
+  script:
+    - execute_script_that_will_fail
+  allow_failure: true
+
+job2:
+  stage: test
+  script:
+    - execute_script_that_will_succeed
+
+job3:
+  stage: deploy
+  script:
+    - deploy_to_staging
+

+when +

+

when is used to implement jobs that are run in case of failure or despite the +failure.

+

when can be set to one of the following values:

+
    +
  1. +on_success - execute job only when all jobs from prior stages +succeed. This is the default.
  2. +
  3. +on_failure - execute job only when at least one job from prior stages +fails.
  4. +
  5. +always - execute job regardless of the status of jobs from prior stages.
  6. +
  7. +manual - execute job manually (added in GitLab 8.10). Read about +manual actions below.
  8. +
+

For example:

+
stages:
+  - build
+  - cleanup_build
+  - test
+  - deploy
+  - cleanup
+
+build_job:
+  stage: build
+  script:
+    - make build
+
+cleanup_build_job:
+  stage: cleanup_build
+  script:
+    - cleanup build when failed
+  when: on_failure
+
+test_job:
+  stage: test
+  script:
+    - make test
+
+deploy_job:
+  stage: deploy
+  script:
+    - make deploy
+  when: manual
+
+cleanup_job:
+  stage: cleanup
+  script:
+    - cleanup after jobs
+  when: always
+

The above script will:

+
    +
  1. Execute cleanup_build_job only when build_job fails.
  2. +
  3. Always execute cleanup_job as the last step in pipeline regardless of +success or failure.
  4. +
  5. Allow you to manually execute deploy_job from GitLab's UI.
  6. +
+

+when:manual +

+
+

Notes:

+
+
    +
  • Introduced in GitLab 8.10.
  • +
  • Blocking manual actions were introduced in GitLab 9.0.
  • +
  • Protected actions were introduced in GitLab 9.2.
  • +
+

Manual actions are a special type of job that are not executed automatically, +they need to be explicitly started by a user. An example usage of manual actions +would be a deployment to a production environment. Manual actions can be started +from the pipeline, job, environment, and deployment views. Read more at the +environments documentation.

+

Manual actions can be either optional or blocking. Blocking manual actions will +block the execution of the pipeline at the stage this action is defined in. It's +possible to resume execution of the pipeline when someone executes a blocking +manual action by clicking a play button.

+

When a pipeline is blocked, it will not be merged if Merge When Pipeline Succeeds +is set. Blocked pipelines also do have a special status, called manual. +Manual actions are non-blocking by default. If you want to make manual action +blocking, it is necessary to add allow_failure: false to the job's definition +in .gitlab-ci.yml.

+

Optional manual actions have allow_failure: true set by default and their +Statuses do not contribute to the overall pipeline status. So, if a manual +action fails, the pipeline will eventually succeed.

+

Manual actions are considered to be write actions, so permissions for +protected branches are used when +user wants to trigger an action. In other words, in order to trigger a manual +action assigned to a branch that the pipeline is running for, user needs to +have ability to merge to this branch.

+

+environment +

+
+
+

Notes:

+ +

environment is used to define that a job deploys to a specific environment. +If environment is specified and no environment under that name exists, a new +one will be created automatically.

+

In its simplest form, the environment keyword can be defined like:

+
deploy to production:
+  stage: deploy
+  script: git push production HEAD:master
+  environment:
+    name: production
+

In the above example, the deploy to production job will be marked as doing a +deployment to the production environment.

+

+environment:name +

+
+
+

Notes:

+
    +
  • Introduced in GitLab 8.11.
  • +
  • Before GitLab 8.11, the name of an environment could be defined as a string like +environment: production. The recommended way now is to define it under the +name keyword.
  • +
  • The name parameter can use any of the defined CI variables, +including predefined, secure variables and .gitlab-ci.yml variables. +You however cannot use variables defined under script.
  • +
+

The environment name can contain:

+
    +
  • letters
  • +
  • digits
  • +
  • spaces
  • +
  • -
  • +
  • _
  • +
  • /
  • +
  • $
  • +
  • {
  • +
  • }
  • +
+

Common names are qa, staging, and production, but you can use whatever +name works with your workflow.

+

Instead of defining the name of the environment right after the environment +keyword, it is also possible to define it as a separate value. For that, use +the name keyword under environment:

+
deploy to production:
+  stage: deploy
+  script: git push production HEAD:master
+  environment:
+    name: production
+

+environment:url +

+
+
+

Notes:

+
    +
  • Introduced in GitLab 8.11.
  • +
  • Before GitLab 8.11, the URL could be added only in GitLab's UI. The +recommended way now is to define it in .gitlab-ci.yml.
  • +
  • The url parameter can use any of the defined CI variables, +including predefined, secure variables and .gitlab-ci.yml variables. +You however cannot use variables defined under script.
  • +
+

This is an optional value that when set, it exposes buttons in various places +in GitLab which when clicked take you to the defined URL.

+

In the example below, if the job finishes successfully, it will create buttons +in the merge requests and in the environments/deployments pages which will point +to https://prod.example.com.

+
deploy to production:
+  stage: deploy
+  script: git push production HEAD:master
+  environment:
+    name: production
+    url: https://prod.example.com
+

+environment:on_stop +

+
+
+

Notes:

+
    +
  • +Introduced in GitLab 8.13.
  • +
  • Starting with GitLab 8.14, when you have an environment that has a stop action +defined, GitLab will automatically trigger a stop action when the associated +branch is deleted.
  • +
+

Closing (stoping) environments can be achieved with the on_stop keyword defined under +environment. It declares a different job that runs in order to close +the environment.

+

Read the environment:action section for an example.

+

+environment:action +

+
+

Introduced in GitLab 8.13.

+
+

The action keyword is to be used in conjunction with on_stop and is defined +in the job that is called to close the environment.

+

Take for instance:

+
review_app:
+  stage: deploy
+  script: make deploy-app
+  environment:
+    name: review
+    on_stop: stop_review_app
+
+stop_review_app:
+  stage: deploy
+  script: make delete-app
+  when: manual
+  environment:
+    name: review
+    action: stop
+

In the above example we set up the review_app job to deploy to the review +environment, and we also defined a new stop_review_app job under on_stop. +Once the review_app job is successfully finished, it will trigger the +stop_review_app job based on what is defined under when. In this case we +set it up to manual so it will need a manual action via +GitLab's web interface in order to run.

+

The stop_review_app job is required to have the following keywords defined:

+
    +
  • +when - reference +
  • +
  • environment:name
  • +
  • environment:action
  • +
  • +stage should be the same as the review_app in order for the environment +to stop automatically when the branch is deleted
  • +
+

+Dynamic environments

+
+
+

Notes:

+
    +
  • +Introduced in GitLab 8.12 and GitLab Runner 1.6.
  • +
  • The $CI_ENVIRONMENT_SLUG was introduced in GitLab 8.15.
  • +
  • The name and url parameters can use any of the defined CI variables, +including predefined, secure variables and .gitlab-ci.yml variables. +You however cannot use variables defined under script.
  • +
+

For example:

+
deploy as review app:
+  stage: deploy
+  script: make deploy
+  environment:
+    name: review/$CI_COMMIT_REF_NAME
+    url: https://$CI_ENVIRONMENT_SLUG.example.com/
+

The deploy as review app job will be marked as deployment to dynamically +create the review/$CI_COMMIT_REF_NAME environment, where $CI_COMMIT_REF_NAME +is an environment variable set by the Runner. The +$CI_ENVIRONMENT_SLUG variable is based on the environment name, but suitable +for inclusion in URLs. In this case, if the deploy as review app job was run +in a branch named pow, this environment would be accessible with an URL like +https://review-pow.example.com/.

+

This of course implies that the underlying server which hosts the application +is properly configured.

+

The common use case is to create dynamic environments for branches and use them +as Review Apps. You can see a simple example using Review Apps at +https://gitlab.com/gitlab-examples/review-apps-nginx/.

+

+cache +

+
+
+

Notes:

+
    +
  • Introduced in GitLab Runner v0.7.0.
  • +
  • +cache can be set globally and per-job.
  • +
  • From GitLab 9.0, caching is enabled and shared between pipelines and jobs +by default.
  • +
  • From GitLab 9.2, caches are restored before artifacts.
  • +
+

TIP: Learn more: +Read how caching works and find out some good practices in the +caching dependencies documentation.

+

cache is used to specify a list of files and directories which should be +cached between jobs. You can only use paths that are within the project +workspace.

+

If cache is defined outside the scope of jobs, it means it is set +globally and all jobs will use that definition.

+

+cache:paths +

+

Use the paths directive to choose which files or directories will be cached. +Wildcards can be used as well.

+

Cache all files in binaries that end in .apk and the .config file:

+
rspec:
+  script: test
+  cache:
+    paths:
+      - binaries/*.apk
+      - .config
+

Locally defined cache overrides globally defined options. The following rspec +job will cache only binaries/:

+
cache:
+  paths:
+    - my/files
+
+rspec:
+  script: test
+  cache:
+    key: rspec
+    paths:
+      - binaries/
+

Note that since cache is shared between jobs, if you're using different +paths for different jobs, you should also set a different cache:key +otherwise cache content can be overwritten.

+

+cache:key +

+
+

Introduced in GitLab Runner v1.0.0.

+
+

Since the cache is shared between jobs, if you're using different +paths for different jobs, you should also set a different cache:key +otherwise cache content can be overwritten.

+

The key directive allows you to define the affinity of caching between jobs, +allowing to have a single cache for all jobs, cache per-job, cache per-branch +or any other way that fits your workflow. This way, you can fine tune caching, +allowing you to cache data between different jobs or even different branches.

+

The cache:key variable can use any of the +predefined variables, and the default key, if not +set, is just literal default which means everything is shared between each +pipelines and jobs by default, starting from GitLab 9.0.

+

NOTE: Note: +The cache:key variable cannot contain the / character, or the equivalent +URI-encoded %2F; a value made only of dots (., %2E) is also forbidden.

+

For example, to enable per-branch caching:

+
cache:
+  key: "$CI_COMMIT_REF_SLUG"
+  paths:
+    - binaries/
+

If you use Windows Batch to run your shell scripts you need to replace +$ with %:

+
cache:
+  key: "%CI_COMMIT_REF_SLUG%"
+  paths:
+    - binaries/
+

+cache:untracked +

+

Set untracked: true to cache all files that are untracked in your Git +repository:

+
rspec:
+  script: test
+  cache:
+    untracked: true
+

Cache all Git untracked files and files in binaries:

+
rspec:
+  script: test
+  cache:
+    untracked: true
+    paths:
+      - binaries/
+

+cache:policy +

+
+

Introduced in GitLab 9.4.

+
+

The default behaviour of a caching job is to download the files at the start of +execution, and to re-upload them at the end. This allows any changes made by the +job to be persisted for future runs, and is known as the pull-push cache +policy.

+

If you know the job doesn't alter the cached files, you can skip the upload step +by setting policy: pull in the job specification. Typically, this would be +twinned with an ordinary cache job at an earlier stage to ensure the cache +is updated from time to time:

+
stages:
+  - setup
+  - test
+
+prepare:
+  stage: setup
+  cache:
+    key: gems
+    paths:
+      - vendor/bundle
+  script:
+    - bundle install --deployment
+
+rspec:
+  stage: test
+  cache:
+    key: gems
+    paths:
+      - vendor/bundle
+    policy: pull
+  script:
+    - bundle exec rspec ...
+

This helps to speed up job execution and reduce load on the cache server, +especially when you have a large number of cache-using jobs executing in +parallel.

+

Additionally, if you have a job that unconditionally recreates the cache without +reference to its previous contents, you can use policy: push in that job to +skip the download step.

+

+artifacts +

+
+
+

Notes:

+
    +
  • Introduced in GitLab Runner v0.7.0 for non-Windows platforms.
  • +
  • Windows support was added in GitLab Runner v.1.0.0.
  • +
  • From GitLab 9.2, caches are restored before artifacts.
  • +
  • Not all executors are supported.
  • +
  • Job artifacts are only collected for successful jobs by default.
  • +
+

artifacts is used to specify a list of files and directories which should be +attached to the job after success.

+

The artifacts will be sent to GitLab after the job finishes successfully and will +be available for download in the GitLab UI.

+

Read more about artifacts.

+

+artifacts:paths +

+

You can only use paths that are within the project workspace. To pass artifacts +between different jobs, see dependencies.

+

Send all files in binaries and .config:

+
artifacts:
+  paths:
+    - binaries/
+    - .config
+

To disable artifact passing, define the job with empty dependencies:

+
job:
+  stage: build
+  script: make build
+  dependencies: []
+

You may want to create artifacts only for tagged releases to avoid filling the +build server storage with temporary build artifacts.

+

Create artifacts only for tags (default-job will not create artifacts):

+
default-job:
+  script:
+    - mvn test -U
+  except:
+    - tags
+
+release-job:
+  script:
+    - mvn package -U
+  artifacts:
+    paths:
+      - target/*.war
+  only:
+    - tags
+

+artifacts:name +

+
+

Introduced in GitLab 8.6 and GitLab Runner v1.1.0.

+
+

The name directive allows you to define the name of the created artifacts +archive. That way, you can have a unique name for every archive which could be +useful when you'd like to download the archive from GitLab. The artifacts:name +variable can make use of any of the predefined variables. +The default name is artifacts, which becomes artifacts.zip when downloaded.

+

NOTE: Note: +If your branch-name contains forward slashes +(e.g. feature/my-feature) it is advised to use $CI_COMMIT_REF_SLUG +instead of $CI_COMMIT_REF_NAME for proper naming of the artifact.

+

To create an archive with a name of the current job:

+
job:
+  artifacts:
+    name: "$CI_JOB_NAME"
+    paths:
+      - binaries/
+

To create an archive with a name of the current branch or tag including only +the binaries directory:

+
job:
+   artifacts:
+     name: "$CI_COMMIT_REF_NAME"
+    paths:
+      - binaries/
+

To create an archive with a name of the current job and the current branch or +tag including only the binaries directory:

+
job:
+  artifacts:
+    name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
+    paths:
+      - binaries/
+

To create an archive with a name of the current stage and branch name:

+
job:
+  artifacts:
+    name: "$CI_JOB_STAGE-$CI_COMMIT_REF_NAME"
+    paths:
+      - binaries/
+
+

If you use Windows Batch to run your shell scripts you need to replace +$ with %:

+
job:
+  artifacts:
+    name: "%CI_JOB_STAGE%-%CI_COMMIT_REF_NAME%"
+    paths:
+      - binaries/
+

If you use Windows PowerShell to run your shell scripts you need to replace +$ with $env::

+
job:
+  artifacts:
+    name: "$env:CI_JOB_STAGE-$env:CI_COMMIT_REF_NAME"
+    paths:
+      - binaries/
+

+artifacts:untracked +

+

artifacts:untracked is used to add all Git untracked files as artifacts (along +to the paths defined in artifacts:paths).

+

NOTE: Note: +To exclude the folders/files which should not be a part of untracked just +add them to .gitignore.

+

Send all Git untracked files:

+
artifacts:
+  untracked: true
+

Send all Git untracked files and files in binaries:

+
artifacts:
+  untracked: true
+  paths:
+    - binaries/
+

+artifacts:when +

+
+

Introduced in GitLab 8.9 and GitLab Runner v1.3.0.

+
+

artifacts:when is used to upload artifacts on job failure or despite the +failure.

+

artifacts:when can be set to one of the following values:

+
    +
  1. +on_success - upload artifacts only when the job succeeds. This is the default.
  2. +
  3. +on_failure - upload artifacts only when the job fails.
  4. +
  5. +always - upload artifacts regardless of the job status.
  6. +
+

To upload artifacts only when job fails:

+
job:
+  artifacts:
+    when: on_failure
+

+artifacts:expire_in +

+
+

Introduced in GitLab 8.9 and GitLab Runner v1.3.0.

+
+

expire_in allows you to specify how long artifacts should live before they +expire and therefore deleted, counting from the time they are uploaded and +stored on GitLab. If the expiry time is not defined, it defaults to the +instance wide setting +(30 days by default, forever on GitLab.com).

+

You can use the Keep button on the job page to override expiration and +keep artifacts forever.

+

After their expiry, artifacts are deleted hourly by default (via a cron job), +and are not accessible anymore.

+

The value of expire_in is an elapsed time. Examples of parsable values:

+
    +
  • '3 mins 4 sec'
  • +
  • '2 hrs 20 min'
  • +
  • '2h20min'
  • +
  • '6 mos 1 day'
  • +
  • '47 yrs 6 mos and 4d'
  • +
  • '3 weeks and 2 days'
  • +
+

To expire artifacts 1 week after being uploaded:

+
job:
+  artifacts:
+    expire_in: 1 week
+

+dependencies +

+
+

Introduced in GitLab 8.6 and GitLab Runner v1.1.1.

+
+

This feature should be used in conjunction with artifacts and +allows you to define the artifacts to pass between different jobs.

+

Note that artifacts from all previous stages are passed by default.

+

To use this feature, define dependencies in context of the job and pass +a list of all previous jobs from which the artifacts should be downloaded. +You can only define jobs from stages that are executed before the current one. +An error will be shown if you define jobs from the current stage or next ones. +Defining an empty array will skip downloading any artifacts for that job. +The status of the previous job is not considered when using dependencies, so +if it failed or it is a manual job that was not run, no error occurs.

+
+

In the following example, we define two jobs with artifacts, build:osx and +build:linux. When the test:osx is executed, the artifacts from build:osx +will be downloaded and extracted in the context of the build. The same happens +for test:linux and artifacts from build:linux.

+

The job deploy will download artifacts from all previous jobs because of +the stage precedence:

+
build:osx:
+  stage: build
+  script: make build:osx
+  artifacts:
+    paths:
+      - binaries/
+
+build:linux:
+  stage: build
+  script: make build:linux
+  artifacts:
+    paths:
+      - binaries/
+
+test:osx:
+  stage: test
+  script: make test:osx
+  dependencies:
+    - build:osx
+
+test:linux:
+  stage: test
+  script: make test:linux
+  dependencies:
+    - build:linux
+
+deploy:
+  stage: deploy
+  script: make deploy
+

+When a dependent job will fail

+
+

Introduced in GitLab 10.3.

+
+

If the artifacts of the job that is set as a dependency have been +expired or +erased, then +the dependent job will fail.

+

NOTE: Note: +You can ask your administrator to +flip this switch +and bring back the old behavior.

+

+coverage +

+
+

Introduced in GitLab 8.17.

+
+

coverage allows you to configure how code coverage will be extracted from the +job output.

+

Regular expressions are the only valid kind of value expected here. So, using +surrounding / is mandatory in order to consistently and explicitly represent +a regular expression string. You must escape special characters if you want to +match them literally.

+

A simple example:

+
job1:
+  script: rspec
+  coverage: '/Code coverage: \d+\.\d+/'
+

+retry +

+
+

Introduced in GitLab 9.5.

+
+

retry allows you to configure how many times a job is going to be retried in +case of a failure.

+

When a job fails, and has retry configured it is going to be processed again +up to the amount of times specified by the retry keyword.

+

If retry is set to 2, and a job succeeds in a second run (first retry), it won't be retried +again. retry value has to be a positive integer, equal or larger than 0, but +lower or equal to 2 (two retries maximum, three runs in total).

+

A simple example:

+
test:
+  script: rspec
+  retry: 2
+

+variables +

+
+

Introduced in GitLab Runner v0.5.0.

+
+

NOTE: Note: +Integers (as well as strings) are legal both for variable's name and value. +Floats are not legal and cannot be used.

+

GitLab CI/CD allows you to define variables inside .gitlab-ci.yml that are +then passed in the job environment. They can be set globally and per-job. +When the variables keyword is used on a job level, it overrides the global +YAML variables and predefined ones.

+

They are stored in the Git repository and are meant to store non-sensitive +project configuration, for example:

+
variables:
+  DATABASE_URL: "postgres://postgres@postgres/my_database"
+

These variables can be later used in all executed commands and scripts. +The YAML-defined variables are also set to all created service containers, +thus allowing to fine tune them.

+

To turn off global defined variables in a specific job, define an empty hash:

+
job_name:
+  variables: {}
+

Except for the user defined variables, there are also the ones set up by the +Runner itself. +One example would be CI_COMMIT_REF_NAME which has the value of +the branch or tag name for which project is built. Apart from the variables +you can set in .gitlab-ci.yml, there are also the so called +Variables +which can be set in GitLab's UI.

+

Learn more about variables and their priority.

+

+Git strategy

+
+

Introduced in GitLab 8.9 as an experimental feature. May change or be removed +completely in future releases. GIT_STRATEGY=none requires GitLab Runner +v1.7+.

+
+

You can set the GIT_STRATEGY used for getting recent application code, either +globally or per-job in the variables section. If left +unspecified, the default from project settings will be used.

+

There are three possible values: clone, fetch, and none.

+

clone is the slowest option. It clones the repository from scratch for every +job, ensuring that the project workspace is always pristine.

+
variables:
+  GIT_STRATEGY: clone
+

fetch is faster as it re-uses the project workspace (falling back to clone +if it doesn't exist). git clean is used to undo any changes made by the last +job, and git fetch is used to retrieve commits made since the last job ran.

+
variables:
+  GIT_STRATEGY: fetch
+

none also re-uses the project workspace, but skips all Git operations +(including GitLab Runner's pre-clone script, if present). It is mostly useful +for jobs that operate exclusively on artifacts (e.g., deploy). Git repository +data may be present, but it is certain to be out of date, so you should only +rely on files brought into the project workspace from cache or artifacts.

+
variables:
+  GIT_STRATEGY: none
+

+Git submodule strategy

+
+

Requires GitLab Runner v1.10+.

+
+

The GIT_SUBMODULE_STRATEGY variable is used to control if / how Git +submodules are included when fetching the code before a build. You can set them +globally or per-job in the variables section.

+

There are three possible values: none, normal, and recursive:

+
    +
  • +

    none means that submodules will not be included when fetching the project +code. This is the default, which matches the pre-v1.10 behavior.

    +
  • +
  • +

    normal means that only the top-level submodules will be included. It is +equivalent to:

    +
    git submodule sync
    +git submodule update --init
    +
  • +
  • +

    recursive means that all submodules (including submodules of submodules) +will be included. It is equivalent to:

    +
    git submodule sync --recursive
    +git submodule update --init --recursive
    +
  • +
+

Note that for this feature to work correctly, the submodules must be configured +(in .gitmodules) with either:

+
    +
  • the HTTP(S) URL of a publicly-accessible repository, or
  • +
  • a relative path to another repository on the same GitLab server. See the +Git submodules documentation.
  • +
+

+Git checkout

+
+

Introduced in GitLab Runner 9.3

+
+

The GIT_CHECKOUT variable can be used when the GIT_STRATEGY is set to either +clone or fetch to specify whether a git checkout should be run. If not +specified, it defaults to true. You can set them globally or per-job in the +variables section.

+

If set to false, the Runner will:

+
    +
  • when doing fetch - update the repository and leave working copy on +the current revision,
  • +
  • when doing clone - clone the repository and leave working copy on the +default branch.
  • +
+

Having this setting set to true will mean that for both clone and fetch +strategies the Runner will checkout the working copy to a revision related +to the CI pipeline:

+
variables:
+  GIT_STRATEGY: clone
+  GIT_CHECKOUT: "false"
+script:
+  - git checkout master
+  - git merge $CI_BUILD_REF_NAME
+

+Job stages attempts

+
+

Introduced in GitLab, it requires GitLab Runner v1.9+.

+
+

You can set the number for attempts the running job will try to execute each +of the following stages:

+ + + + + + + + + + + + + + + + + + + + + +
VariableDescription
GET_SOURCES_ATTEMPTSNumber of attempts to fetch sources running a job
ARTIFACT_DOWNLOAD_ATTEMPTSNumber of attempts to download artifacts running a job
RESTORE_CACHE_ATTEMPTSNumber of attempts to restore the cache running a job
+

The default is one single attempt.

+

Example:

+
variables:
+  GET_SOURCES_ATTEMPTS: 3
+

You can set them globally or per-job in the variables section.

+

+Shallow cloning

+
+

Introduced in GitLab 8.9 as an experimental feature. May change in future +releases or be removed completely.

+
+

You can specify the depth of fetching and cloning using GIT_DEPTH. This allows +shallow cloning of the repository which can significantly speed up cloning for +repositories with a large number of commits or old, large binaries. The value is +passed to git fetch and git clone.

+
+

Note: +If you use a depth of 1 and have a queue of jobs or retry +jobs, jobs may fail.

+
+

Since Git fetching and cloning is based on a ref, such as a branch name, Runners +can't clone a specific commit SHA. If there are multiple jobs in the queue, or +you are retrying an old job, the commit to be tested needs to be within the +Git history that is cloned. Setting too small a value for GIT_DEPTH can make +it impossible to run these old commits. You will see unresolved reference in +job logs. You should then reconsider changing GIT_DEPTH to a higher value.

+

Jobs that rely on git describe may not work correctly when GIT_DEPTH is +set since only part of the Git history is present.

+

To fetch or clone only the last 3 commits:

+
variables:
+  GIT_DEPTH: "3"
+

You can set it globally or per-job in the variables section.

+

+Special YAML features

+

It's possible to use special YAML features like anchors (&), aliases (*) +and map merging (<<), which will allow you to greatly reduce the complexity +of .gitlab-ci.yml.

+

Read more about the various YAML features.

+

+Hidden keys (jobs)

+
+

Introduced in GitLab 8.6 and GitLab Runner v1.1.1.

+
+

If you want to temporarily 'disable' a job, rather than commenting out all the +lines where the job is defined:

+
#hidden_job:
+#  script:
+#    - run test
+

you can instead start its name with a dot (.) and it will not be processed by +GitLab CI. In the following example, .hidden_job will be ignored:

+
.hidden_job:
+  script:
+    - run test
+

Use this feature to ignore jobs, or use the +special YAML features and transform the hidden keys +into templates.

+

+Anchors

+
+

Introduced in GitLab 8.6 and GitLab Runner v1.1.1.

+
+

YAML has a handy feature called 'anchors', which lets you easily duplicate +content across your document. Anchors can be used to duplicate/inherit +properties, and is a perfect example to be used with hidden keys +to provide templates for your jobs.

+

The following example uses anchors and map merging. It will create two jobs, +test1 and test2, that will inherit the parameters of .job_template, each +having their own custom script defined:

+
.job_template: &job_definition  # Hidden key that defines an anchor named 'job_definition'
+  image: ruby:2.1
+  services:
+    - postgres
+    - redis
+
+test1:
+  <<: *job_definition           # Merge the contents of the 'job_definition' alias
+  script:
+    - test1 project
+
+test2:
+  <<: *job_definition           # Merge the contents of the 'job_definition' alias
+  script:
+    - test2 project
+

& sets up the name of the anchor (job_definition), << means "merge the +given hash into the current one", and * includes the named anchor +(job_definition again). The expanded version looks like this:

+
.job_template:
+  image: ruby:2.1
+  services:
+    - postgres
+    - redis
+
+test1:
+  image: ruby:2.1
+  services:
+    - postgres
+    - redis
+  script:
+    - test1 project
+
+test2:
+  image: ruby:2.1
+  services:
+    - postgres
+    - redis
+  script:
+    - test2 project
+

Let's see another one example. This time we will use anchors to define two sets +of services. This will create two jobs, test:postgres and test:mysql, that +will share the script directive defined in .job_template, and the services +directive defined in .postgres_services and .mysql_services respectively:

+
.job_template: &job_definition
+  script:
+    - test project
+
+.postgres_services:
+  services: &postgres_definition
+    - postgres
+    - ruby
+
+.mysql_services:
+  services: &mysql_definition
+    - mysql
+    - ruby
+
+test:postgres:
+  <<: *job_definition
+  services: *postgres_definition
+
+test:mysql:
+  <<: *job_definition
+  services: *mysql_definition
+

The expanded version looks like this:

+
.job_template:
+  script:
+    - test project
+
+.postgres_services:
+  services:
+    - postgres
+    - ruby
+
+.mysql_services:
+  services:
+    - mysql
+    - ruby
+
+test:postgres:
+  script:
+    - test project
+  services:
+    - postgres
+    - ruby
+
+test:mysql:
+  script:
+    - test project
+  services:
+    - mysql
+    - ruby
+

You can see that the hidden keys are conveniently used as templates.

+

+Triggers

+

Triggers can be used to force a rebuild of a specific branch, tag or commit, +with an API call.

+

Read more in the triggers documentation.

+

+Skipping jobs

+

If your commit message contains [ci skip] or [skip ci], using any +capitalization, the commit will be created but the pipeline will be skipped.

+

+Validate the .gitlab-ci.yml

+

Each instance of GitLab CI has an embedded debug tool called Lint, which validates the +content of your .gitlab-ci.yml files. You can find the Lint under the page ci/lint of your +project namespace (e.g, http://gitlab-example.com/gitlab-org/project-123/-/ci/lint)

+

+Using reserved keywords

+

If you get validation error when using specific values (e.g., true or false), +try to quote them, or change them to a different form (e.g., /bin/true).

+

+Examples

+

Visit the examples README to see a list of examples using GitLab +CI with various languages.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2315b1cb7269a8fcb51a7c04b0972442 b/docker/tanner/snare/dist/pages/1/2315b1cb7269a8fcb51a7c04b0972442 new file mode 100644 index 000000000..845e0ec34 Binary files /dev/null and b/docker/tanner/snare/dist/pages/1/2315b1cb7269a8fcb51a7c04b0972442 differ diff --git a/docker/tanner/snare/dist/pages/1/231671f2c7b81c58377b2392c32e8339 b/docker/tanner/snare/dist/pages/1/231671f2c7b81c58377b2392c32e8339 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/231671f2c7b81c58377b2392c32e8339 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2340367bd94e333e8f3a1c141df8c989 b/docker/tanner/snare/dist/pages/1/2340367bd94e333e8f3a1c141df8c989 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2340367bd94e333e8f3a1c141df8c989 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2372a0f0327562267e5588c388c9228f b/docker/tanner/snare/dist/pages/1/2372a0f0327562267e5588c388c9228f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2372a0f0327562267e5588c388c9228f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/239fca638e6b706f280b72599d752ee5 b/docker/tanner/snare/dist/pages/1/239fca638e6b706f280b72599d752ee5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/239fca638e6b706f280b72599d752ee5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/23a55c4ef1d8e736b4b58d68539d1083 b/docker/tanner/snare/dist/pages/1/23a55c4ef1d8e736b4b58d68539d1083 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/23a55c4ef1d8e736b4b58d68539d1083 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2420d86f5e9c3c4dcc4de9e552b8f6bd b/docker/tanner/snare/dist/pages/1/2420d86f5e9c3c4dcc4de9e552b8f6bd new file mode 100644 index 000000000..d892c5cdf --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2420d86f5e9c3c4dcc4de9e552b8f6bd @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/248666d5485452e84a99fa4eff82a846 b/docker/tanner/snare/dist/pages/1/248666d5485452e84a99fa4eff82a846 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/248666d5485452e84a99fa4eff82a846 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2486aafbaec3d0699fd34002156235c7 b/docker/tanner/snare/dist/pages/1/2486aafbaec3d0699fd34002156235c7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2486aafbaec3d0699fd34002156235c7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/255fc8eb79dbe2dd7768fe81ee59c653 b/docker/tanner/snare/dist/pages/1/255fc8eb79dbe2dd7768fe81ee59c653 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/255fc8eb79dbe2dd7768fe81ee59c653 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/25c1d6935b89ba6db9352cf93ddbecee b/docker/tanner/snare/dist/pages/1/25c1d6935b89ba6db9352cf93ddbecee new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/25c1d6935b89ba6db9352cf93ddbecee @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/25f18459bcefc0e2c70222e4cbe766dc b/docker/tanner/snare/dist/pages/1/25f18459bcefc0e2c70222e4cbe766dc new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/25f18459bcefc0e2c70222e4cbe766dc @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/25f673f689030a932904b9fc74de70db b/docker/tanner/snare/dist/pages/1/25f673f689030a932904b9fc74de70db new file mode 100644 index 000000000..432608076 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/25f673f689030a932904b9fc74de70db @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + +GitLab + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/26430722b5c97f2a8fe3ae4d80a5fb29 b/docker/tanner/snare/dist/pages/1/26430722b5c97f2a8fe3ae4d80a5fb29 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/26430722b5c97f2a8fe3ae4d80a5fb29 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/26473f4b7f68d1526b69d28421a07f62 b/docker/tanner/snare/dist/pages/1/26473f4b7f68d1526b69d28421a07f62 new file mode 100644 index 000000000..23e7e20f2 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/26473f4b7f68d1526b69d28421a07f62 @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + +Migrating from svn · Importing · Workflow · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

This document was moved to another location.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/26a4d5f1c69b6123185e22a3de993e5d b/docker/tanner/snare/dist/pages/1/26a4d5f1c69b6123185e22a3de993e5d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/26a4d5f1c69b6123185e22a3de993e5d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/26a6389705e871321faff7929a421ad9 b/docker/tanner/snare/dist/pages/1/26a6389705e871321faff7929a421ad9 new file mode 100644 index 000000000..68b6a55a5 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/26a6389705e871321faff7929a421ad9 @@ -0,0 +1,1159 @@ + + + + + + + + + + + + + + + + + + +Permissions · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Permissions

+

Users have different abilities depending on the access level they have in a +particular group or project. If a user is both in a group's project and the +project itself, the highest permission level is used.

+

On public and internal projects the Guest role is not enforced. All users will +be able to create issues, leave comments, and clone or download the project code.

+

When a member leaves the team all the assigned Issues and Merge Requests +will be unassigned automatically.

+

GitLab administrators receive all permissions.

+

To add or import a user, you can follow the +project members documentation.

+

+Principles behind permissions

+

See our product handbook on permissions

+

+Project members permissions

+

NOTE: Note: +In GitLab 11.0, the Master role was renamed to Maintainer.

+

The following table depicts the various user permission levels in a project.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ActionGuestReporterDeveloperMaintainerOwner
Create new issue
Create confidential issue
View confidential issues(✓)
Leave comments
Lock issue discussions
Lock merge request discussions
See a list of jobs
See a job log
Download and browse job artifacts
View wiki pages
Pull project code
Download project
Assign issues
Assign merge requests
Label issues and merge requests
Create code snippets
Manage issue tracker
Manage labels
See a commit status
See a container registry
See environments
See a list of merge requests
Manage related issues [STARTER] +
Lock issue discussions
Lock merge request discussions
Create new environments
Stop environments
Manage/Accept merge requests
Create new merge request
Create new branches
Push to non-protected branches
Force push to non-protected branches
Remove non-protected branches
Add tags
Write a wiki
Cancel and retry jobs
Create or update commit status
Update a container registry
Remove a container registry image
Create/edit/delete project milestones
Use environment terminals
Add new team members
Push to protected branches
Enable/disable branch protection
Turn on/off protected branch push for devs
Enable/disable tag protections
Rewrite/remove Git tags
Edit project
Add deploy keys to project
Configure project hooks
Manage Runners
Manage job triggers
Manage variables
Manage GitLab Pages
Manage GitLab Pages domains and certificates
Remove GitLab Pages
Manage clusters
Edit comments (posted by any user)
Switch visibility level
Transfer project to another namespace
Remove project
Delete issues
Remove pages
Force push to protected branches
Remove protected branches
View project Audit Events
+

+Project features permissions

+

+Wiki and issues

+

Project features like wiki and issues can be hidden from users depending on +which visibility level you select on project settings.

+
    +
  • Disabled: disabled for everyone
  • +
  • Only team members: only team members will see even if your project is public or internal
  • +
  • Everyone with access: everyone can see depending on your project visibility level
  • +
+

+Protected branches

+

To prevent people from messing with history or pushing code without +review, we've created protected branches. Read through the documentation on +protected branches +to learn more.

+

Additionally, you can allow or forbid users with Maintainer and/or +Developer permissions to push to a protected branch. Read through the documentation on +Allowed to Merge and Allowed to Push settings +to learn more.

+

+Cycle Analytics permissions

+

Find the current permissions on the Cycle Analytics dashboard on +the documentation on Cycle Analytics permissions.

+

+Issue Board permissions

+

Developers and users with higher permission level can use all +the functionality of the Issue Board, that is create/delete lists +and drag issues around. Read though the +documentation on Issue Boards permissions +to learn more.

+

+File Locking permissions [PREMIUM] +

+

The user that locks a file or directory is the only one that can edit and push their changes back to the repository where the locked objects are located.

+

Read through the documentation on permissions for File Locking to learn more.

+

+Confidential Issues permissions

+

Confidential issues can be accessed by reporters and higher permission levels, +as well as by guest users that create a confidential issue. To learn more, +read through the documentation on permissions and access to confidential issues.

+

+Group members permissions

+

NOTE: Note: +In GitLab 11.0, the Master role was renamed to Maintainer.

+

Any user can remove themselves from a group, unless they are the last Owner of +the group. The following table depicts the various user permission levels in a +group.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ActionGuestReporterDeveloperMaintainerOwner
Browse group
Edit group
Create subgroup
Create project in group
Manage group members
Remove group
Manage group labels
Create/edit/delete group milestones
View private group epic [ULTIMATE] +
View internal group epic [ULTIMATE] +
View public group epic [ULTIMATE] +
Create/edit group epic [ULTIMATE] +
Delete group epic [ULTIMATE] +
View group Audit Events
+

+Subgroup permissions

+

When you add a member to a subgroup, they inherit the membership and +permission level from the parent group. This model allows access to +nested groups if you have membership in one of its parents.

+

To learn more, read through the documentation on +subgroups memberships.

+

+External users permissions

+

In cases where it is desired that a user has access only to some internal or +private projects, there is the option of creating External Users. This +feature may be useful when for example a contractor is working on a given +project and should only have access to that project.

+

External users can only access projects to which they are explicitly granted +access, thus hiding all other internal or private ones from them. Access can be +granted by adding the user as member to the project or group.

+

They will, like usual users, receive a role in the project or group with all +the abilities that are mentioned in the table above. They cannot however create +groups or projects, and they have the same access as logged out users in all +other cases.

+

An administrator can flag a user as external through the API +or by checking the checkbox on the admin panel. As an administrator, navigate +to Admin > Users to create a new user or edit an existing one. There, you +will find the option to flag the user as external.

+

By default new users are not set as external users. This behavior can be changed +by an administrator under Admin > Application Settings.

+

+Auditor users [PREMIUM ONLY] +

+
+

Introduced in GitLab Premium 8.17.

+
+

Auditor users are given read-only access to all projects, groups, and other +resources on the GitLab instance.

+

An Auditor user should be able to access all projects and groups of a GitLab instance +with the permissions described on the documentation on auditor users permissions.

+

Read more about Auditor users.

+

+Project features

+

Project features like wiki and issues can be hidden from users depending on +which visibility level you select on project settings.

+
    +
  • Disabled: disabled for everyone
  • +
  • Only team members: only team members will see even if your project is public or internal
  • +
  • Everyone with access: everyone can see depending on your project visibility level
  • +
+

+GitLab CI/CD permissions

+

NOTE: Note: +In GitLab 11.0, the Master role was renamed to Maintainer.

+

GitLab CI/CD permissions rely on the role the user has in GitLab. There are four +permission levels in total:

+
    +
  • admin
  • +
  • maintainer
  • +
  • developer
  • +
  • guest/reporter
  • +
+

The admin user can perform any action on GitLab CI/CD in scope of the GitLab +instance and project. In addition, all admins can use the admin interface under +/admin/runners.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ActionGuest, ReporterDeveloperMaintainerAdmin
See commits and jobs
Retry or cancel job
Erase job artifacts and trace
Remove project
Create project
Change project configuration
Add specific runners
Add shared runners
See events in the system
Admin interface
+

+Job permissions

+

NOTE: Note: +In GitLab 11.0, the Master role was renamed to Maintainer.

+
+

Note: +GitLab 8.12 has a completely redesigned job permissions system. +Read all about the new model and its implications.

+
+

This table shows granted privileges for jobs triggered by specific types of +users:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ActionGuest, ReporterDeveloperMaintainerAdmin
Run CI job
Clone source and LFS from current project
Clone source and LFS from public projects
Clone source and LFS from internal projects
Clone source and LFS from private projects
Push source and LFS
Pull container images from current project
Pull container images from public projects
Pull container images from internal projects
Pull container images from private projects
Push container images to current project
Push container images to other projects
+

+New CI job permissions model

+

GitLab 8.12 has a completely redesigned job permissions system. To learn more, +read through the documentation on the new CI/CD permissions model.

+

+Running pipelines on protected branches

+

The permission to merge or push to protected branches is used to define if a user can +run CI/CD pipelines and execute actions on jobs that are related to those branches.

+

See Security on protected branches +for details about the pipelines security model.

+

+LDAP users permissions

+

Since GitLab 8.15, LDAP user permissions can now be manually overridden by an admin user. +Read through the documentation on LDAP users permissions to learn more.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/26de595044f9993743768c35f8fd0109 b/docker/tanner/snare/dist/pages/1/26de595044f9993743768c35f8fd0109 new file mode 100644 index 000000000..7f8385b84 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/26de595044f9993743768c35f8fd0109 @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + +Gitlab flow · Workflow · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

GitLab Flow

+

+Introduction to GitLab Flow

+

Version management with git makes branching and merging much easier than older versioning systems such as SVN. +This allows a wide variety of branching strategies and workflows. +Almost all of these are an improvement over the methods used before git. +But many organizations end up with a workflow that is not clearly defined, overly complex or not integrated with issue tracking systems. +Therefore we propose the GitLab flow as clearly defined set of best practices. +It combines feature driven development and feature branches with issue tracking.

+

Organizations coming to git from other version control systems frequently find it hard to develop an effective workflow. +This article describes the GitLab flow that integrates the git workflow with an issue tracking system. +It offers a simple, transparent and effective way to work with git.

+

Four stages (working copy, index, local repo, remote repo) and three steps between them

+

When converting to git you have to get used to the fact that there are three steps before a commit is shared with colleagues. +Most version control systems have only one step, committing from the working copy to a shared server. +In git you add files from the working copy to the staging area. After that you commit them to the local repo. +The third step is pushing to a shared remote repository. +After getting used to these three steps the branching model becomes the challenge.

+

Multiple long running branches and merging in all directions

+

Since many organizations new to git have no conventions how to work with it, it can quickly become a mess. +The biggest problem they run into is that many long running branches that each contain part of the changes are around. +People have a hard time figuring out which branch they should develop on or deploy to production. +Frequently the reaction to this problem is to adopt a standardized pattern such as git flow and GitHub flow. +We think there is still room for improvement and will detail a set of practices we call GitLab flow.

+

+Git flow and its problems

+

Git Flow timeline by Vincent Driessen, used with permission

+

Git flow was one of the first proposals to use git branches and it has gotten a lot of attention. +It advocates a master branch and a separate develop branch as well as supporting branches for features, releases and hotfixes. +The development happens on the develop branch, moves to a release branch and is finally merged into the master branch. +Git flow is a well defined standard but its complexity introduces two problems. +The first problem is that developers must use the develop branch and not master, master is reserved for code that is released to production. +It is a convention to call your default branch master and to mostly branch from and merge to this. +Since most tools automatically make the master branch the default one and display that one by default it is annoying to have to switch to another one. +The second problem of git flow is the complexity introduced by the hotfix and release branches. +These branches can be a good idea for some organizations but are overkill for the vast majority of them. +Nowadays most organizations practice continuous delivery which means that your default branch can be deployed. +This means that hotfix and release branches can be prevented including all the ceremony they introduce. +An example of this ceremony is the merging back of release branches. +Though specialized tools do exist to solve this, they require documentation and add complexity. +Frequently developers make a mistake and for example changes are only merged into master and not into the develop branch. +The root cause of these errors is that git flow is too complex for most of the use cases. +And doing releases doesn't automatically mean also doing hotfixes.

+

+GitHub flow as a simpler alternative

+

Master branch with feature branches merged in

+

In reaction to git flow a simpler alternative was detailed, GitHub flow. +This flow has only feature branches and a master branch. +This is very simple and clean, many organizations have adopted it with great success. +Atlassian recommends a similar strategy although they rebase feature branches. +Merging everything into the master branch and deploying often means you minimize the amount of code in 'inventory' which is in line with the lean and continuous delivery best practices. +But this flow still leaves a lot of questions unanswered regarding deployments, environments, releases and integrations with issues. +With GitLab flow we offer additional guidance for these questions.

+

+Production branch with GitLab flow

+

Master branch and production branch with arrow that indicate deployments

+

GitHub flow does assume you are able to deploy to production every time you merge a feature branch. +This is possible for e.g. SaaS applications, but there are many cases where this is not possible. +One would be a situation where you are not in control of the exact release moment, for example an iOS application that needs to pass App Store validation. +Another example is when you have deployment windows (workdays from 10am to 4pm when the operations team is at full capacity) but you also merge code at other times. +In these cases you can make a production branch that reflects the deployed code. +You can deploy a new version by merging in master to the production branch. +If you need to know what code is in production you can just checkout the production branch to see. +The approximate time of deployment is easily visible as the merge commit in the version control system. +This time is pretty accurate if you automatically deploy your production branch. +If you need a more exact time you can have your deployment script create a tag on each deployment. +This flow prevents the overhead of releasing, tagging and merging that is common to git flow.

+

+Environment branches with GitLab flow

+

Multiple branches with the code cascading from one to another

+

It might be a good idea to have an environment that is automatically updated to the master branch. +Only in this case, the name of this environment might differ from the branch name. +Suppose you have a staging environment, a pre-production environment and a production environment. +In this case the master branch is deployed on staging. When someone wants to deploy to pre-production they create a merge request from the master branch to the pre-production branch. +And going live with code happens by merging the pre-production branch into the production branch. +This workflow where commits only flow downstream ensures that everything has been tested on all environments. +If you need to cherry-pick a commit with a hotfix it is common to develop it on a feature branch and merge it into master with a merge request, do not delete the feature branch. +If master is good to go (it should be if you are practicing continuous delivery) you then merge it to the other branches. +If this is not possible because more manual testing is required you can send merge requests from the feature branch to the downstream branches.

+

+Release branches with GitLab flow

+

Master and multiple release branches that vary in length with cherry-picks from master

+

Only in case you need to release software to the outside world you need to work with release branches. +In this case, each branch contains a minor version (2-3-stable, 2-4-stable, etc.). +The stable branch uses master as a starting point and is created as late as possible. +By branching as late as possible you minimize the time you have to apply bug fixes to multiple branches. +After a release branch is announced, only serious bug fixes are included in the release branch. +If possible these bug fixes are first merged into master and then cherry-picked into the release branch. +This way you can't forget to cherry-pick them into master and encounter the same bug on subsequent releases. +This is called an 'upstream first' policy that is also practiced by Google and Red Hat. +Every time a bug-fix is included in a release branch the patch version is raised (to comply with Semantic Versioning) by setting a new tag. +Some projects also have a stable branch that points to the same commit as the latest released branch. +In this flow it is not common to have a production branch (or git flow master branch).

+

+Merge/pull requests with GitLab flow

+

Merge request with line comments

+

Merge or pull requests are created in a git management application and ask an assigned person to merge two branches. +Tools such as GitHub and Bitbucket choose the name pull request since the first manual action would be to pull the feature branch. +Tools such as GitLab and others choose the name merge request since that is the final action that is requested of the assignee. +In this article we'll refer to them as merge requests.

+

If you work on a feature branch for more than a few hours it is good to share the intermediate result with the rest of the team. +This can be done by creating a merge request without assigning it to anyone, instead you mention people in the description or a comment (/cc @mark @susan). +This means it is not ready to be merged but feedback is welcome. +Your team members can comment on the merge request in general or on specific lines with line comments. +The merge requests serves as a code review tool and no separate tools such as Gerrit and reviewboard should be needed. +If the review reveals shortcomings anyone can commit and push a fix. +Commonly the person to do this is the creator of the merge/pull request. +The diff in the merge/pull requests automatically updates when new commits are pushed on the branch.

+

When you feel comfortable with it to be merged you assign it to the person that knows most about the codebase you are changing and mention any other people you would like feedback from. +There is room for more feedback and after the assigned person feels comfortable with the result the branch is merged. +If the assigned person does not feel comfortable they can close the merge request without merging.

+

In GitLab it is common to protect the long-lived branches (e.g. the master branch) so that normal developers can't modify these protected branches. +So if you want to merge it into a protected branch you assign it to someone with maintainer authorizations.

+

+Issue tracking with GitLab flow

+

Merge request with the branch name 15-require-a-password-to-change-it and assignee field shown

+

GitLab flow is a way to make the relation between the code and the issue tracker more transparent.

+

Any significant change to the code should start with an issue where the goal is described. +Having a reason for every code change is important to inform everyone on the team and to help people keep the scope of a feature branch small. +In GitLab each change to the codebase starts with an issue in the issue tracking system. +If there is no issue yet it should be created first provided there is significant work involved (more than 1 hour). +For many organizations this will be natural since the issue will have to be estimated for the sprint. +Issue titles should describe the desired state of the system, e.g. "As an administrator I want to remove users without receiving an error" instead of "Admin can't remove users.".

+

When you are ready to code you start a branch for the issue from the master branch. +The name of this branch should start with the issue number, for example '15-require-a-password-to-change-it'.

+

When you are done or want to discuss the code you open a merge request. +This is an online place to discuss the change and review the code. +Opening a merge request is a manual action since you do not always want to merge a new branch you push, it could be a long-running environment or release branch. +If you open the merge request but do not assign it to anyone it is a 'Work In Progress' merge request. +These are used to discuss the proposed implementation but are not ready for inclusion in the master branch yet. +Pro tip: Start the title of the merge request with [WIP] or WIP: to prevent it from being merged before it's ready.

+

When the author thinks the code is ready the merge request is assigned to reviewer. +The reviewer presses the merge button when they think the code is ready for inclusion in the master branch. +In this case the code is merged and a merge commit is generated that makes this event easily visible later on. +Merge requests always create a merge commit even when the commit could be added without one. +This merge strategy is called 'no fast-forward' in git. +After the merge the feature branch is deleted since it is no longer needed, in GitLab this deletion is an option when merging.

+

Suppose that a branch is merged but a problem occurs and the issue is reopened. +In this case it is no problem to reuse the same branch name since it was deleted when the branch was merged. +At any time there is at most one branch for every issue. +It is possible that one feature branch solves more than one issue.

+

+Linking and closing issues from merge requests

+

Merge request showing the linked issues that will be closed

+

Linking to issues can happen by mentioning them in commit messages (fixes #14, closes #67, etc.) or in the merge request description. +GitLab then creates links to the mentioned issues and creates comments in the corresponding issues linking back to the merge request.

+

These issues are closed once code is merged into the default branch.

+

If you only want to make the reference without closing the issue you can also just mention it: "Duck typing is preferred. #12".

+

If you have an issue that spans across multiple repositories, the best thing is to create an issue for each repository and link all issues to a parent issue.

+

+Squashing commits with rebase

+

Vim screen showing the rebase view

+

With git you can use an interactive rebase (rebase -i) to squash multiple commits into one and reorder them. +In GitLab EE and .com you can also rebase before merge from the web interface. +This functionality is useful if you made a couple of commits for small changes during development and want to replace them with a single commit or if you want to make the order more logical. +However you should never rebase commits you have pushed to a remote server. +Somebody can have referred to the commits or cherry-picked them. +When you rebase you change the identifier (SHA-1) of the commit and this is confusing. +If you do that the same change will be known under multiple identifiers and this can cause much confusion. +If people already reviewed your code it will be hard for them to review only the improvements you made since then if you have rebased everything into one commit. +Another reasons not to rebase is that you lose authorship information, maybe someone created a merge request, another person pushed a commit on there to improve it and a third one merged it. +In this case rebasing all the commits into one prevent the other authors from being properly attributed and sharing part of the git blame.

+

People are encouraged to commit often and to frequently push to the remote repository so other people are aware what everyone is working on. +This will lead to many commits per change which makes the history harder to understand. +But the advantages of having stable identifiers outweigh this drawback. +And to understand a change in context one can always look at the merge commit that groups all the commits together when the code is merged into the master branch.

+

After you merge multiple commits from a feature branch into the master branch this is harder to undo. +If you had squashed all the commits into one you could have just reverted this commit but as we indicated you should not rebase commits after they are pushed. +Fortunately reverting a merge made some time ago can be done with git. +This however, requires having specific merge commits for the commits your want to revert. +If you revert a merge and you change your mind, revert the revert instead of merging again since git will not allow you to merge the code again otherwise.

+

Being able to revert a merge is a good reason always to create a merge commit when you merge manually with the --no-ff option. +Git management software will always create a merge commit when you accept a merge request.

+

+Do not order commits with rebase

+

List of sequential merge commits

+

With git you can also rebase your feature branch commits to order them after the commits on the master branch. +This prevents creating a merge commit when merging master into your feature branch and creates a nice linear history. +However, just like with squashing you should never rebase commits you have pushed to a remote server. +This makes it impossible to rebase work in progress that you already shared with your team which is something we recommend. +When using rebase to keep your feature branch updated you need to resolve similar conflicts again and again. +You can reuse recorded resolutions (rerere) sometimes, but without rebasing you only have to solve the conflicts one time and you’re set. +There has to be a better way to avoid many merge commits.

+

The way to prevent creating many merge commits is to not frequently merge master into the feature branch. +We'll discuss the three reasons to merge in master: leveraging code, merge conflicts, and long running branches. +If you need to leverage some code that was introduced in master after you created the feature branch you can sometimes solve this by just cherry-picking a commit. +If your feature branch has a merge conflict, creating a merge commit is a normal way of solving this. +You can prevent some merge conflicts by using gitattributes for files that can be in a random order. +For example in GitLab our changelog file is specified in .gitattributes as CHANGELOG.md merge=union so that there are fewer merge conflicts in it. +The last reason for creating merge commits is having long lived branches that you want to keep up to date with the latest state of the project. +Martin Fowler, in his article about feature branches talks about this Continuous Integration (CI). +At GitLab we are guilty of confusing CI with branch testing. Quoting Martin Fowler: "I've heard people say they are doing CI because they are running builds, perhaps using a CI server, on every branch with every commit. +That's continuous building, and a Good Thing, but there's no integration, so it's not CI.". +The solution to prevent many merge commits is to keep your feature branches short-lived, the vast majority should take less than one day of work. +If your feature branches commonly take more than a day of work, look into ways to create smaller units of work and/or use feature toggles. +As for the long running branches that take more than one day there are two strategies. +In a CI strategy you can merge in master at the start of the day to prevent painful merges at a later time. +In a synchronization point strategy you only merge in from well defined points in time, for example a tagged release. +This strategy is advocated by Linus Torvalds because the state of the code at these points is better known.

+

In conclusion, we can say that you should try to prevent merge commits, but not eliminate them. +Your codebase should be clean but your history should represent what actually happened. +Developing software happen in small messy steps and it is OK to have your history reflect this. +You can use tools to view the network graphs of commits and understand the messy history that created your code. +If you rebase code the history is incorrect, and there is no way for tools to remedy this because they can't deal with changing commit identifiers.

+

+Award emojis on issues and merge requests

+

Emoji bar in GitLab

+

It is common to voice approval or disapproval by using +1 or -1. In GitLab you +can use emojis to give a virtual high five on issues and merge requests.

+

+Pushing and removing branches

+

Remove checkbox for branch in merge requests

+

We recommend that people push their feature branches frequently, even when they are not ready for review yet. +By doing this you prevent team members from accidentally starting to work on the same issue. +Of course this situation should already be prevented by assigning someone to the issue in the issue tracking software. +However sometimes one of the two parties forgets to assign someone in the issue tracking software. +After a branch is merged it should be removed from the source control software. +In GitLab and similar systems this is an option when merging. +This ensures that the branch overview in the repository management software shows only work in progress. +This also ensures that when someone reopens the issue a new branch with the same name can be used without problem. +When you reopen an issue you need to create a new merge request.

+

+Committing often and with the right message

+

Good and bad commit message

+

We recommend to commit early and often. +Each time you have a functioning set of tests and code a commit can be made. +The advantage is that when an extension or refactor goes wrong it is easy to revert to a working version. +This is quite a change for programmers that used SVN before, they used to commit when their work was ready to share. +The trick is to use the merge/pull request with multiple commits when your work is ready to share. +The commit message should reflect your intention, not the contents of the commit. +The contents of the commit can be easily seen anyway, the question is why you did it. +An example of a good commit message is: "Combine templates to dry up the user views.". +Some words that are bad commit messages because they don't contain much information are: change, improve and refactor. +The word fix or fixes is also a red flag, unless it comes after the commit sentence and references an issue number. +To see more information about the formatting of commit messages please see this great blog post by Tim Pope.

+

+Testing before merging

+

Merge requests showing the test states, red, yellow and green

+

In old workflows the Continuous Integration (CI) server commonly ran tests on the master branch only. +Developers had to ensure their code did not break the master branch. +When using GitLab flow developers create their branches from this master branch so it is essential it is green. +Therefore each merge request must be tested before it is accepted. +CI software like Travis and GitLab CI show the build results right in the merge request itself to make this easy. +One drawback is that they are testing the feature branch itself and not the merged result. +What one can do to improve this is to test the merged result itself. +The problem is that the merge result changes every time something is merged into master. +Retesting on every commit to master is computationally expensive and means you are more frequently waiting for test results. +If there are no merge conflicts and the feature branches are short lived the risk is acceptable. +If there are merge conflicts you merge the master branch into the feature branch and the CI server will rerun the tests. +If you have long lived feature branches that last for more than a few days you should make your issues smaller.

+

+Working with feature branches

+

Shell output showing git pull output

+

When initiating a feature branch, always start with an up to date master to branch off from. +If you know beforehand that your work absolutely depends on another branch you can also branch from there. +If you need to merge in another branch after starting explain the reason in the merge commit. +If you have not pushed your commits to a shared location yet you can also rebase on master or another feature branch. +Do not merge in upstream if your code will work and merge cleanly without doing so, Linus even says that you should never merge in upstream at random points, only at major releases. +Merging only when needed prevents creating merge commits in your feature branch that later end up littering the master history.

+

+References

+ +
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/273bfb0dc7d8fd8470bb075db75e7f5f b/docker/tanner/snare/dist/pages/1/273bfb0dc7d8fd8470bb075db75e7f5f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/273bfb0dc7d8fd8470bb075db75e7f5f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/27bb3e729c31cb0684b7347bfcbdca1f b/docker/tanner/snare/dist/pages/1/27bb3e729c31cb0684b7347bfcbdca1f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/27bb3e729c31cb0684b7347bfcbdca1f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2809a19fb57cb68b1f5893f0a15c28f6 b/docker/tanner/snare/dist/pages/1/2809a19fb57cb68b1f5893f0a15c28f6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2809a19fb57cb68b1f5893f0a15c28f6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/288edad9ac59a50a9ab1f6e3124e8db4 b/docker/tanner/snare/dist/pages/1/288edad9ac59a50a9ab1f6e3124e8db4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/288edad9ac59a50a9ab1f6e3124e8db4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/28a9590362c6a85f93573da55313d3aa b/docker/tanner/snare/dist/pages/1/28a9590362c6a85f93573da55313d3aa new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/28a9590362c6a85f93573da55313d3aa @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/28ca609076ce44da9b2a084e118f380d b/docker/tanner/snare/dist/pages/1/28ca609076ce44da9b2a084e118f380d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/28ca609076ce44da9b2a084e118f380d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/28f657efc18030e342b1f73601dc9d25 b/docker/tanner/snare/dist/pages/1/28f657efc18030e342b1f73601dc9d25 new file mode 100644 index 000000000..1267c953e --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/28f657efc18030e342b1f73601dc9d25 @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + +Readme · Integration · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab Integration

+

GitLab integrates with multiple third-party services to allow external issue +trackers and external authentication.

+

See the documentation below for details on how to configure these services.

+
    +
  • +Akismet Configure Akismet to stop spam
  • +
  • +Auth0 OmniAuth Enable the Auth0 OmniAuth provider
  • +
  • +Bitbucket Import projects from Bitbucket.org and login to your GitLab instance with your +Bitbucket.org account
  • +
  • +CAS Configure GitLab to sign in using CAS
  • +
  • +External issue tracker Redmine, JIRA, etc.
  • +
  • +Gmail actions buttons Adds GitLab actions to messages
  • +
  • +JIRA Integrate with the JIRA issue tracker
  • +
  • +LDAP Set up sign in via LDAP
  • +
  • +OAuth2 provider OAuth2 application creation
  • +
  • +OmniAuth Sign in via Twitter, GitHub, GitLab.com, Google, Bitbucket, Facebook, Shibboleth, SAML, Crowd, Azure and Authentiq ID
  • +
  • +OpenID Connect Use GitLab as an identity provider
  • +
  • +PlantUML Configure PlantUML to use diagrams in AsciiDoc documents.
  • +
  • +reCAPTCHA Configure GitLab to use Google reCAPTCHA for new users
  • +
  • +SAML Configure GitLab as a SAML 2.0 Service Provider
  • +
  • +Trello Integrate Trello with GitLab
  • +
+
+

GitLab Enterprise Edition contains advanced Jenkins support.

+
+

+Project services

+

Integration with services such as Campfire, Flowdock, Gemnasium, HipChat, +Pivotal Tracker, and Slack are available in the form of a Project Service.

+

+SSL certificate errors

+

When trying to integrate GitLab with services that are using self-signed certificates, +it is very likely that SSL certificate errors will occur on different parts of the +application, most likely Sidekiq. There are 2 approaches you can take to solve this:

+
    +
  1. Add the root certificate to the trusted chain of the OS.
  2. +
  3. If using Omnibus, you can add the certificate to GitLab's trusted certificates.
  4. +
+

OS main trusted chain

+

This resource +has all the information you need to add a certificate to the main trusted chain.

+

This answer +at Super User also has relevant information.

+

Omnibus Trusted Chain

+

Install the self signed certificate or custom certificate authorities +in to GitLab Omnibus.

+

It is enough to concatenate the certificate to the main trusted certificate +however it may be overwritten during upgrades:

+
cat jira.pem >> /opt/gitlab/embedded/ssl/certs/cacert.pem
+

After that restart GitLab with:

+
sudo gitlab-ctl restart
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2908231ee0f8a25275c18d3813571dd2 b/docker/tanner/snare/dist/pages/1/2908231ee0f8a25275c18d3813571dd2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2908231ee0f8a25275c18d3813571dd2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/292ecc7e97d0ffeb81f26cd0ee7b22cc b/docker/tanner/snare/dist/pages/1/292ecc7e97d0ffeb81f26cd0ee7b22cc new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/292ecc7e97d0ffeb81f26cd0ee7b22cc @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/293aa294c6e6dc2bb766e809162f2b5b b/docker/tanner/snare/dist/pages/1/293aa294c6e6dc2bb766e809162f2b5b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/293aa294c6e6dc2bb766e809162f2b5b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/299b821d3e5c12ff7868f4413010eecb b/docker/tanner/snare/dist/pages/1/299b821d3e5c12ff7868f4413010eecb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/299b821d3e5c12ff7868f4413010eecb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2a06b3a2c78f1a5901a296b607602043 b/docker/tanner/snare/dist/pages/1/2a06b3a2c78f1a5901a296b607602043 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2a06b3a2c78f1a5901a296b607602043 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2a23bbe93f6242a38e13d67c9d96c079 b/docker/tanner/snare/dist/pages/1/2a23bbe93f6242a38e13d67c9d96c079 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2a23bbe93f6242a38e13d67c9d96c079 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2a3c8d8fb636a5b2ccc773ddc6059e33 b/docker/tanner/snare/dist/pages/1/2a3c8d8fb636a5b2ccc773ddc6059e33 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2a3c8d8fb636a5b2ccc773ddc6059e33 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2aca7a9dcc841341fdc12669667f8cb0 b/docker/tanner/snare/dist/pages/1/2aca7a9dcc841341fdc12669667f8cb0 new file mode 100644 index 000000000..fb531af0f --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2aca7a9dcc841341fdc12669667f8cb0 @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + +Index · Issues · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Issues

+

The GitLab Issue Tracker is an advanced and complete tool +for tracking the evolution of a new idea or the process +of solving a problem.

+

It allows you, your team, and your collaborators to share +and discuss proposals before and while implementing them.

+

GitLab Issues and the GitLab Issue Tracker are available in all +GitLab Products as +part of the GitLab Workflow.

+

+Use cases

+

Issues can have endless applications. Just to exemplify, these are +some cases for which creating issues are most used:

+
    +
  • Discussing the implementation of a new idea
  • +
  • Submitting feature proposals
  • +
  • Asking questions
  • +
  • Reporting bugs and malfunction
  • +
  • Obtaining support
  • +
  • Elaborating new code implementations
  • +
+

See also the blog post "Always start a discussion with an issue".

+

+Keep private things private

+

For instance, let's assume you have a public project but want to start a discussion on something +you don't want to be public. With Confidential Issues, +you can discuss private matters among the project members, and still keep +your project public, open to collaboration.

+

+Streamline collaboration

+

With Multiple Assignees for Issues, +available in GitLab Starter +you can streamline collaboration and allow shared responsibilities to be clearly displayed. +All assignees are shown across your workflows and receive notifications (as they +would as single assignees), simplifying communication and ownership.

+

+Consistent collaboration

+

Create issue templates to make collaboration consistent and +containing all information you need. For example, you can create a template +for feature proposals and another one for bug reports.

+

+Issue Tracker

+

The Issue Tracker is the collection of opened and closed issues created in a project. +It is available for all projects, from the moment the project is created.

+

Find the issue tracker by navigating to your Project's homepage > Issues.

+

+Issues per project

+

When you access your project's issues, GitLab will present them in a list, +and you can use the tabs available to quickly filter by open and closed issues.

+

Project issues list view

+

You can also search and filter the results more deeply with GitLab's search capacities.

+

+Issues per group

+

View issues in all projects in the group, including all projects of all descendant subgroups of the group. Navigate to Group > Issues to view these issues. This view also has the open and closed issues tabs.

+

Group Issues list view

+

+GitLab Issues Functionalities

+

The image bellow illustrates how an issue looks like:

+

Issue view

+

Learn more about it on the GitLab Issues Functionalities documentation.

+

+New issue

+

Read through the documentation on creating issues.

+

+Closing issues

+

Learn distinct ways to close issues in GitLab.

+

+Moving issues

+

Read through the documentation on moving issues.

+

+Deleting issues

+

Read through the documentation on deleting issues

+

+Create a merge request from an issue

+

Learn more about it on the GitLab Issues Functionalities documentation.

+

+Search for an issue

+

Learn how to find an issue by searching for and filtering them.

+

+Advanced features

+

+Confidential Issues

+

Whenever you want to keep the discussion presented in a +issue within your team only, you can make that +issue confidential. Even if your project +is public, that issue will be preserved. The browser will +respond with a 404 error whenever someone who is not a project +member with at least Reporter level tries to +access that issue's URL.

+

Learn more about them on the confidential issues documentation.

+

+Issue templates

+

Create templates for every new issue. They will be available from +the dropdown menu Choose a template when you create a new issue:

+

issue template

+

Learn more about them on the issue templates documentation.

+

+Crosslinking issues

+

Learn more about crosslinking issues and merge requests.

+

+Issue Board

+

The GitLab Issue Board is a way to +enhance your workflow by organizing and prioritizing issues in GitLab.

+

Issue board

+

Find GitLab Issue Boards by navigating to your Project's Dashboard > Issues > Board.

+

Read through the documentation for Issue Boards +to find out more about this feature.

+

With GitLab Starter, you can also +create various boards per project with Multiple Issue Boards.

+

+External Issue Tracker

+

Alternatively to GitLab's built-in Issue Tracker, you can also use an external +tracker such as Jira, Redmine, +or Bugzilla.

+

+Issue's API

+

Read through the API documentation.

+

+Bulk editing issues

+

Find out about bulk editing issues.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2ae3cc65663beee6d64ae96563ca07ef b/docker/tanner/snare/dist/pages/1/2ae3cc65663beee6d64ae96563ca07ef new file mode 100644 index 000000000..a5717c954 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2ae3cc65663beee6d64ae96563ca07ef @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2aeaa4a4f685105be30f7f7adee3dd4f b/docker/tanner/snare/dist/pages/1/2aeaa4a4f685105be30f7f7adee3dd4f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2aeaa4a4f685105be30f7f7adee3dd4f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2b25a9598b02942f7cdd57719251458f b/docker/tanner/snare/dist/pages/1/2b25a9598b02942f7cdd57719251458f new file mode 100644 index 000000000..c4393839f --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2b25a9598b02942f7cdd57719251458f @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + +Groups · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

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

Below you will find all the groups that are public.

+

You can easily contribute to them by requesting to join these groups.

+
+
+
No public groups
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2b37744f8255b86cd2cc85605bb185a7 b/docker/tanner/snare/dist/pages/1/2b37744f8255b86cd2cc85605bb185a7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2b37744f8255b86cd2cc85605bb185a7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2b408cae2e445bbef179ff3bc2d7f823 b/docker/tanner/snare/dist/pages/1/2b408cae2e445bbef179ff3bc2d7f823 new file mode 100644 index 000000000..320503252 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2b408cae2e445bbef179ff3bc2d7f823 @@ -0,0 +1,2 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[92],{655:function(e,t,n){"use strict";n.r(t);var r=n(0),a=n.n(r),i=n(7),c=n(33),u=function(){function e(e,t){for(var n=0;n + + + + + + + + + + + + + + + + + +Readme · Development · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab development guides

+

+Get started!

+ +

+Processes

+ +

+UX and frontend guides

+ +

+Backend guides

+ +

+Performance guides

+ +

+Databases guides

+

+Migrations

+ +

+Best practices

+ +

+Testing guides

+ +

+Documentation guides

+ +

+Internationalization (i18n) guides

+ +

+Build guides

+ +

+Compliance

+
    +
  • +Licensing for ensuring license compliance
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2beb02d80c0ec0d3ecaacb013114a7d5 b/docker/tanner/snare/dist/pages/1/2beb02d80c0ec0d3ecaacb013114a7d5 new file mode 100644 index 000000000..3b30e515d --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2beb02d80c0ec0d3ecaacb013114a7d5 @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + +Groups · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

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

Below you will find all the groups that are public.

+

You can easily contribute to them by requesting to join these groups.

+
+
+
No public groups
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2c293acf5c73e99b20bb91e1d3f54399 b/docker/tanner/snare/dist/pages/1/2c293acf5c73e99b20bb91e1d3f54399 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2c293acf5c73e99b20bb91e1d3f54399 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2c992026bf8de05bbf1b344dba77e980 b/docker/tanner/snare/dist/pages/1/2c992026bf8de05bbf1b344dba77e980 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2c992026bf8de05bbf1b344dba77e980 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2cbcb4a26173ef2101e845d10d20a596 b/docker/tanner/snare/dist/pages/1/2cbcb4a26173ef2101e845d10d20a596 new file mode 100644 index 000000000..f92f59e55 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2cbcb4a26173ef2101e845d10d20a596 @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + +Groups · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

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

Below you will find all the groups that are public.

+

You can easily contribute to them by requesting to join these groups.

+
+
+
No public groups
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2cec28a7c2c38a0edfa5229d6b866181 b/docker/tanner/snare/dist/pages/1/2cec28a7c2c38a0edfa5229d6b866181 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2cec28a7c2c38a0edfa5229d6b866181 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2d3767d72a7b3f480871622934572973 b/docker/tanner/snare/dist/pages/1/2d3767d72a7b3f480871622934572973 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2d3767d72a7b3f480871622934572973 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2d5d3908714a91d52486cf8febce1bab b/docker/tanner/snare/dist/pages/1/2d5d3908714a91d52486cf8febce1bab new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2d5d3908714a91d52486cf8febce1bab @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2e03f4a1605910daf15e4d99837d7660 b/docker/tanner/snare/dist/pages/1/2e03f4a1605910daf15e4d99837d7660 new file mode 100644 index 000000000..97970cf26 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2e03f4a1605910daf15e4d99837d7660 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2e14ab9a6de0179ed4dc5c60f52d4ac2 b/docker/tanner/snare/dist/pages/1/2e14ab9a6de0179ed4dc5c60f52d4ac2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2e14ab9a6de0179ed4dc5c60f52d4ac2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2eb836349fe4116692c6443a1eaaebfb b/docker/tanner/snare/dist/pages/1/2eb836349fe4116692c6443a1eaaebfb new file mode 100644 index 000000000..3f6df3860 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2eb836349fe4116692c6443a1eaaebfb @@ -0,0 +1,315 @@ + + + + + + + + + + + + + + + + + + +Import export · Settings · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Project import/export

+
+

Notes:

+
    +
  • +Introduced in GitLab 8.9.
  • +
  • Importing will not be possible if the import instance version differs from +that of the exporter.
  • +
  • For GitLab admins, please read through Project import/export administration.
  • +
  • For existing installations, the project import option has to be enabled in +application settings (/admin/application_settings) under 'Import sources'. +Ask your administrator if you don't see the GitLab export button when +creating a new project.
  • +
  • Starting with GitLab 10.0, administrators can disable the project export option +on the GitLab instance in application settings (/admin/application_settings) +under 'Visibility and Access Controls'.
  • +
  • You can find some useful raketasks if you are an administrator in the +import_export +raketask.
  • +
  • The exports are stored in a temporary shared directory and are deleted +every 24 hours by a specific worker.
  • +
  • Group members will get exported as project members, as long as the user has +maintainer or admin access to the group where the exported project lives. An admin +in the import side is required to map the users, based on email or username. +Otherwise, a supplementary comment is left to mention the original author and +the MRs, notes or issues will be owned by the importer.
  • +
  • Control project Import/Export with the API.
  • +
+
+

Existing projects running on any GitLab instance or GitLab.com can be exported +with all their related data and be moved into a new GitLab instance.

+

+Version history

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GitLab versionImport/Export version
11.1 to current0.2.4
10.80.2.3
10.40.2.2
10.30.2.1
10.00.2.0
9.4.00.1.8
9.2.00.1.7
8.17.00.1.6
8.13.00.1.5
8.12.00.1.4
8.10.30.1.3
8.10.00.1.2
8.9.50.1.1
8.9.00.1.0
+
+

The table reflects what GitLab version we updated the Import/Export version at. +For instance, 8.10.3 and 8.11 will have the same Import/Export version (0.1.3) +and the exports between them will be compatible.

+
+

+Exported contents

+

The following items will be exported:

+
    +
  • Project and wiki repositories
  • +
  • Project uploads
  • +
  • Project configuration including web hooks and services
  • +
  • Issues with comments, merge requests with diffs and comments, labels, milestones, snippets, +and other project entities
  • +
  • LFS objects
  • +
+

The following items will NOT be exported:

+
    +
  • Build traces and artifacts
  • +
  • Container registry images
  • +
  • CI variables
  • +
  • Any encrypted tokens
  • +
+

+Exporting a project and its data

+
    +
  1. +

    Go to the project settings page by clicking on Edit Project:

    +

    Project settings button

    +
  2. +
  3. +

    Scroll down to find the Export project button:

    +

    Export button

    +
  4. +
  5. +

    Once the export is generated, you should receive an e-mail with a link to +download the file:

    +

    Email download link

    +
  6. +
  7. +

    Alternatively, you can come back to the project settings and download the +file from there, or generate a new export. Once the file available, the page +should show the Download export button:

    +

    Download export

    +
  8. +
+

+Importing the project

+
    +
  1. +

    The new GitLab project import feature is at the far right of the import +options when creating a New Project. Make sure you are in the right namespace +and you have entered a project name. Click on GitLab export:

    +

    New project

    +
  2. +
  3. +

    You can see where the project will be imported to. You can now select file +exported previously:

    +

    Select file

    +
  4. +
  5. +

    Click on Import project to begin importing. Your newly imported project +page will appear soon.

    +
  6. +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2eef8abfcad1081fba63035adbd30926 b/docker/tanner/snare/dist/pages/1/2eef8abfcad1081fba63035adbd30926 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2eef8abfcad1081fba63035adbd30926 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2f1210b53f46ee6471b636833a21d11c b/docker/tanner/snare/dist/pages/1/2f1210b53f46ee6471b636833a21d11c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2f1210b53f46ee6471b636833a21d11c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2f1b30edefa74ebeec0100a523d98d49 b/docker/tanner/snare/dist/pages/1/2f1b30edefa74ebeec0100a523d98d49 new file mode 100644 index 000000000..6bd129c37 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2f1b30edefa74ebeec0100a523d98d49 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/2f1b388cf08b16e8b903db4834b8cd12 b/docker/tanner/snare/dist/pages/1/2f1b388cf08b16e8b903db4834b8cd12 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2f1b388cf08b16e8b903db4834b8cd12 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2f77f5ecc6e8e851ed318cb53ef62ed0 b/docker/tanner/snare/dist/pages/1/2f77f5ecc6e8e851ed318cb53ef62ed0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2f77f5ecc6e8e851ed318cb53ef62ed0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2f8826bd8998fa646268ed861d407f69 b/docker/tanner/snare/dist/pages/1/2f8826bd8998fa646268ed861d407f69 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2f8826bd8998fa646268ed861d407f69 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/2fe6963dac6fa9b09285e89d775adf48 b/docker/tanner/snare/dist/pages/1/2fe6963dac6fa9b09285e89d775adf48 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/2fe6963dac6fa9b09285e89d775adf48 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3001f2c5a84c0f679a2f9086a8fd3de3 b/docker/tanner/snare/dist/pages/1/3001f2c5a84c0f679a2f9086a8fd3de3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3001f2c5a84c0f679a2f9086a8fd3de3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3022f0f863bd67c9d062147dc5799ebb b/docker/tanner/snare/dist/pages/1/3022f0f863bd67c9d062147dc5799ebb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3022f0f863bd67c9d062147dc5799ebb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/304bd374c7a41cd8dd1beac362b56a3b b/docker/tanner/snare/dist/pages/1/304bd374c7a41cd8dd1beac362b56a3b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/304bd374c7a41cd8dd1beac362b56a3b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/304d1b8e7bdcd48f079d7a58b9bf9ac1 b/docker/tanner/snare/dist/pages/1/304d1b8e7bdcd48f079d7a58b9bf9ac1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/304d1b8e7bdcd48f079d7a58b9bf9ac1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/305389375b4a122b98b1fe8625974b04 b/docker/tanner/snare/dist/pages/1/305389375b4a122b98b1fe8625974b04 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/305389375b4a122b98b1fe8625974b04 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3093d2ecefe93a7f74afb053665806a2 b/docker/tanner/snare/dist/pages/1/3093d2ecefe93a7f74afb053665806a2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3093d2ecefe93a7f74afb053665806a2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/30a75494b88eb3367d0ed8560c38c96a b/docker/tanner/snare/dist/pages/1/30a75494b88eb3367d0ed8560c38c96a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/30a75494b88eb3367d0ed8560c38c96a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/31507a99d467258111af28ea1bb03758 b/docker/tanner/snare/dist/pages/1/31507a99d467258111af28ea1bb03758 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/31507a99d467258111af28ea1bb03758 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/315f3380df08c3534a330e714528673e b/docker/tanner/snare/dist/pages/1/315f3380df08c3534a330e714528673e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/315f3380df08c3534a330e714528673e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/32510c80c6c5567eba1ce98283a16362 b/docker/tanner/snare/dist/pages/1/32510c80c6c5567eba1ce98283a16362 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/32510c80c6c5567eba1ce98283a16362 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/329f619ff2359f632322bccb5293cabd b/docker/tanner/snare/dist/pages/1/329f619ff2359f632322bccb5293cabd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/329f619ff2359f632322bccb5293cabd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/32ab58594adab1fb5b2f366b688ca3a6 b/docker/tanner/snare/dist/pages/1/32ab58594adab1fb5b2f366b688ca3a6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/32ab58594adab1fb5b2f366b688ca3a6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/332d37a53a2bea8802a6bec746635ff2 b/docker/tanner/snare/dist/pages/1/332d37a53a2bea8802a6bec746635ff2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/332d37a53a2bea8802a6bec746635ff2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/33aa6735d76b9f5b6893b10e090cbe8f b/docker/tanner/snare/dist/pages/1/33aa6735d76b9f5b6893b10e090cbe8f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/33aa6735d76b9f5b6893b10e090cbe8f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/33dbb1fab3bac0c36d637f3b8dc4cf34 b/docker/tanner/snare/dist/pages/1/33dbb1fab3bac0c36d637f3b8dc4cf34 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/33dbb1fab3bac0c36d637f3b8dc4cf34 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/33fb8cc3e0881045fc9f67ceeac4db6b b/docker/tanner/snare/dist/pages/1/33fb8cc3e0881045fc9f67ceeac4db6b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/33fb8cc3e0881045fc9f67ceeac4db6b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/349e5de050ea6daf897b412e9af630c5 b/docker/tanner/snare/dist/pages/1/349e5de050ea6daf897b412e9af630c5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/349e5de050ea6daf897b412e9af630c5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/34d2c63f02db2b735427bc7bba48929b b/docker/tanner/snare/dist/pages/1/34d2c63f02db2b735427bc7bba48929b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/34d2c63f02db2b735427bc7bba48929b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/35a6367fc60c46fd3caa35accee39c9a b/docker/tanner/snare/dist/pages/1/35a6367fc60c46fd3caa35accee39c9a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/35a6367fc60c46fd3caa35accee39c9a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/35bc78135b152916707d2bbdd1f9b465 b/docker/tanner/snare/dist/pages/1/35bc78135b152916707d2bbdd1f9b465 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/35bc78135b152916707d2bbdd1f9b465 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/35d846166823e97cdba60b46431289b7 b/docker/tanner/snare/dist/pages/1/35d846166823e97cdba60b46431289b7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/35d846166823e97cdba60b46431289b7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/35dc7cc7063100ea5cc01fef10e6c4c1 b/docker/tanner/snare/dist/pages/1/35dc7cc7063100ea5cc01fef10e6c4c1 new file mode 100644 index 000000000..77498f2fd --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/35dc7cc7063100ea5cc01fef10e6c4c1 @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + +Trello power up · Integration · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Trello Power-Up

+

GitLab's Trello Power-Up enables you to seamlessly attach +GitLab merge requests to Trello cards.

+

GitLab Trello PowerUp - Trello card

+

+Configuring the Power-Up

+

In order to get started, you will need to configure your Power-Up.

+

In Trello:

+
    +
  1. Go to your Trello board
  2. +
  3. Select Power-Ups to see a listing of all the available Power-Ups
  4. +
  5. Look for a row that says GitLab and select the Enable button
  6. +
  7. Select the Settings (gear) icon
  8. +
  9. In the popup menu, select Authorize Account +
  10. +
+

In this popup, fill in your API URL and Personal Access Token. After that, you will be able to attach any merge request to any Trello card on your selected Trello board.

+

+What is my API URL?

+

Your API URL should be your GitLab instance URL with /api/v4 appended in the end of the URL. +For example, if your GitLab instance URL is https://gitlab.com, your API URL would be https://gitlab.com/api/v4. +If your instance's URL is https://example.com, your API URL will be https://example.com/api/v4.

+

configure GitLab Trello PowerUp in Trello

+

+What is my Personal Access Token?

+

Your GitLab's personal access token will enable your GitLab account to be accessed +from Trello.

+
+

Find it in GitLab by clicking on your avatar (upright corner), from which you access +your user Settings > Access Tokens.

+
+

Learn more about generating a personal access token in the +Personal Access Token Documentation. +Don't forget to check the API scope checkbox!

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/36789535d9ff2c2c545b8552596b716c b/docker/tanner/snare/dist/pages/1/36789535d9ff2c2c545b8552596b716c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/36789535d9ff2c2c545b8552596b716c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/36959afc8dde63b5643e4565da00c475 b/docker/tanner/snare/dist/pages/1/36959afc8dde63b5643e4565da00c475 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/36959afc8dde63b5643e4565da00c475 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/36a78d0c88a9e06a08212bc324a5e170 b/docker/tanner/snare/dist/pages/1/36a78d0c88a9e06a08212bc324a5e170 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/36a78d0c88a9e06a08212bc324a5e170 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/377cca9eca86a363860626e5d087f882 b/docker/tanner/snare/dist/pages/1/377cca9eca86a363860626e5d087f882 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/377cca9eca86a363860626e5d087f882 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/37f2ffa1e2fb6ce1ed7f14d41e1cdffe b/docker/tanner/snare/dist/pages/1/37f2ffa1e2fb6ce1ed7f14d41e1cdffe new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/37f2ffa1e2fb6ce1ed7f14d41e1cdffe @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/38112e8f3fff6e9916178262e3a9e87c b/docker/tanner/snare/dist/pages/1/38112e8f3fff6e9916178262e3a9e87c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/38112e8f3fff6e9916178262e3a9e87c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/384c482fb48a152651c6b3ed389414f1 b/docker/tanner/snare/dist/pages/1/384c482fb48a152651c6b3ed389414f1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/384c482fb48a152651c6b3ed389414f1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3946dc92dd4e5264d815d2224670c09c b/docker/tanner/snare/dist/pages/1/3946dc92dd4e5264d815d2224670c09c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3946dc92dd4e5264d815d2224670c09c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/39a367568b8db0bd4ce8d06634c9b5bd b/docker/tanner/snare/dist/pages/1/39a367568b8db0bd4ce8d06634c9b5bd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/39a367568b8db0bd4ce8d06634c9b5bd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/39a5093e32c2faea2c68f9bcc658451b b/docker/tanner/snare/dist/pages/1/39a5093e32c2faea2c68f9bcc658451b new file mode 100644 index 000000000..557438e19 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/39a5093e32c2faea2c68f9bcc658451b @@ -0,0 +1,90 @@ + + + + + +Something went wrong (500) + + + +GitLab Logo +

+ 500 +

+
+

Whoops, something went wrong on our end.

+
+

Try refreshing the page, or going back and attempting the action again.

+

Please contact your GitLab administrator if this problem persists.

+Go back +
+ + + diff --git a/docker/tanner/snare/dist/pages/1/39b937e70b4c16da68747619480c8764 b/docker/tanner/snare/dist/pages/1/39b937e70b4c16da68747619480c8764 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/39b937e70b4c16da68747619480c8764 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/39c992a1c2c2edf73e5444d4119a63e3 b/docker/tanner/snare/dist/pages/1/39c992a1c2c2edf73e5444d4119a63e3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/39c992a1c2c2edf73e5444d4119a63e3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/39d7cba014e79f6dc63dd5345db943e7 b/docker/tanner/snare/dist/pages/1/39d7cba014e79f6dc63dd5345db943e7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/39d7cba014e79f6dc63dd5345db943e7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/39fa5916fba5c575a27e00cb414a1bfb b/docker/tanner/snare/dist/pages/1/39fa5916fba5c575a27e00cb414a1bfb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/39fa5916fba5c575a27e00cb414a1bfb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3a106cf77a9e4163b8d2db238b634ff1 b/docker/tanner/snare/dist/pages/1/3a106cf77a9e4163b8d2db238b634ff1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3a106cf77a9e4163b8d2db238b634ff1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3a64aa9696bd5fcff7e17f0a9fd719d0 b/docker/tanner/snare/dist/pages/1/3a64aa9696bd5fcff7e17f0a9fd719d0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3a64aa9696bd5fcff7e17f0a9fd719d0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3a781c63c9e6c409f1cb4f9f0610d87e b/docker/tanner/snare/dist/pages/1/3a781c63c9e6c409f1cb4f9f0610d87e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3a781c63c9e6c409f1cb4f9f0610d87e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3aef8fc32d59b33620dd3f1e2ab8e18e b/docker/tanner/snare/dist/pages/1/3aef8fc32d59b33620dd3f1e2ab8e18e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3aef8fc32d59b33620dd3f1e2ab8e18e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3b22b824da41ad05222acc2d392130af b/docker/tanner/snare/dist/pages/1/3b22b824da41ad05222acc2d392130af new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3b22b824da41ad05222acc2d392130af @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3b2ebb985d2aa84267cfc42ff7bf2592 b/docker/tanner/snare/dist/pages/1/3b2ebb985d2aa84267cfc42ff7bf2592 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3b2ebb985d2aa84267cfc42ff7bf2592 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3b41af2d023ecb0d4f94f00ebb0775f0 b/docker/tanner/snare/dist/pages/1/3b41af2d023ecb0d4f94f00ebb0775f0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3b41af2d023ecb0d4f94f00ebb0775f0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3b7c7712c5818808c3cc33a34a2b69c9 b/docker/tanner/snare/dist/pages/1/3b7c7712c5818808c3cc33a34a2b69c9 new file mode 100644 index 000000000..2f4a5fe67 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3b7c7712c5818808c3cc33a34a2b69c9 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/3c1bde33346d894226c0a05cf92fae5a b/docker/tanner/snare/dist/pages/1/3c1bde33346d894226c0a05cf92fae5a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3c1bde33346d894226c0a05cf92fae5a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3ce4d9ef20bd2c18b85d9f4e16ac2f67 b/docker/tanner/snare/dist/pages/1/3ce4d9ef20bd2c18b85d9f4e16ac2f67 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3ce4d9ef20bd2c18b85d9f4e16ac2f67 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3cfa9ad6020648cb6431f7ee8f150b75 b/docker/tanner/snare/dist/pages/1/3cfa9ad6020648cb6431f7ee8f150b75 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3cfa9ad6020648cb6431f7ee8f150b75 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3d1ba6aabae611441a6a9d7f9e02584d b/docker/tanner/snare/dist/pages/1/3d1ba6aabae611441a6a9d7f9e02584d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3d1ba6aabae611441a6a9d7f9e02584d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3d1ff557eee05147677c4ad368f919f9 b/docker/tanner/snare/dist/pages/1/3d1ff557eee05147677c4ad368f919f9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3d1ff557eee05147677c4ad368f919f9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3d3faac16f61ec66b457d845fb9cbb0d b/docker/tanner/snare/dist/pages/1/3d3faac16f61ec66b457d845fb9cbb0d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3d3faac16f61ec66b457d845fb9cbb0d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3d5dc765d6026740491b1e2e590146ed b/docker/tanner/snare/dist/pages/1/3d5dc765d6026740491b1e2e590146ed new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3d5dc765d6026740491b1e2e590146ed @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3e3e2b27947512ccb003409cf7b1c778 b/docker/tanner/snare/dist/pages/1/3e3e2b27947512ccb003409cf7b1c778 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3e3e2b27947512ccb003409cf7b1c778 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3e4366f462ce6f436206c4e76a5198a3 b/docker/tanner/snare/dist/pages/1/3e4366f462ce6f436206c4e76a5198a3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3e4366f462ce6f436206c4e76a5198a3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3e5ffd54d76c25fac9aa27c5b22ca068 b/docker/tanner/snare/dist/pages/1/3e5ffd54d76c25fac9aa27c5b22ca068 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3e5ffd54d76c25fac9aa27c5b22ca068 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3e65a8338a6c5f33fd3ed1de7f683d70 b/docker/tanner/snare/dist/pages/1/3e65a8338a6c5f33fd3ed1de7f683d70 new file mode 100644 index 000000000..692fe3919 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3e65a8338a6c5f33fd3ed1de7f683d70 @@ -0,0 +1,615 @@ + + + + + + + + + + + + + + + + + + +Index · Clusters · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Connecting GitLab with a Kubernetes cluster

+
+

Introduced in GitLab 10.1.

+
+

Connect your project to Google Kubernetes Engine (GKE) or an existing Kubernetes +cluster in a few steps.

+

+Overview

+

With one or more Kubernetes clusters associated to your project, you can use +Review Apps, deploy your applications, run +your pipelines, use it with Auto DevOps, +and much more, all from within GitLab.

+

There are two options when adding a new cluster to your project; either associate +your account with Google Kubernetes Engine (GKE) so that you can create new +clusters from within GitLab, +or provide the credentials to an existing Kubernetes cluster.

+

+Adding and creating a new GKE cluster via GitLab

+

TIP: Tip: +Every new Google Cloud Platform (GCP) account receives $300 in credit upon sign up, +and in partnership with Google, GitLab is able to offer an additional $200 for new GCP accounts to get started with GitLab's +Google Kubernetes Engine Integration. All you have to do is follow this link and apply for credit.

+

NOTE: Note: +The Google authentication integration must +be enabled in GitLab at the instance level. If that's not the case, ask your +GitLab administrator to enable it. On GitLab.com, this is enabled.

+

+Requirements

+

Before creating your first cluster on Google Kubernetes Engine with GitLab's +integration, make sure the following requirements are met:

+ +

+Creating the cluster

+

If all of the above requirements are met, you can proceed to create and add a +new Kubernetes cluster to your project:

+
    +
  1. +

    Navigate to your project's Operations > Kubernetes page.

    +

    NOTE: Note: +You need Maintainer permissions and above to access the Kubernetes page.

    +
  2. +
  3. +

    Click on Add Kubernetes cluster.

    +
  4. +
  5. +

    Click on Create with Google Kubernetes Engine.

    +
  6. +
  7. +

    Connect your Google account if you haven't done already by clicking the +Sign in with Google button.

    +
  8. +
  9. +

    From there on, choose your cluster's settings:

    +
  10. +
+
    +
  • +Kubernetes cluster name - The name you wish to give the cluster.
  • +
  • +Environment scope - The associated environment to this cluster.
  • +
  • +Google Cloud Platform project - Choose the project you created in your GCP +console that will host the Kubernetes cluster. Learn more about +Google Cloud Platform projects.
  • +
  • +Zone - Choose the region zone +under which the cluster will be created.
  • +
  • +Number of nodes - Enter the number of nodes you wish the cluster to have.
  • +
  • +Machine type - The machine type +of the Virtual Machine instance that the cluster will be based on.
  • +
+
    +
  1. Finally, click the Create Kubernetes cluster button.
  2. +
+

After a couple of minutes, your cluster will be ready to go. You can now proceed +to install some pre-defined applications.

+

+Adding an existing Kubernetes cluster

+

To add an existing Kubernetes cluster to your project:

+
    +
  1. +

    Navigate to your project's Operations > Kubernetes page.

    +

    NOTE: Note: +You need Maintainer permissions and above to access the Kubernetes page.

    +
  2. +
  3. +

    Click on Add Kubernetes cluster.

    +
  4. +
  5. +

    Click on Add an existing Kubernetes cluster and fill in the details:

    +
      +
    • +Kubernetes cluster name (required) - The name you wish to give the cluster.
    • +
    • +Environment scope (required)- The +associated environment to this cluster.
    • +
    • +API URL (required) - +It's the URL that GitLab uses to access the Kubernetes API. Kubernetes +exposes several APIs, we want the "base" URL that is common to all of them, +e.g., https://kubernetes.example.com rather than https://kubernetes.example.com/api/v1.
    • +
    • +CA certificate (optional) - +If the API is using a self-signed TLS certificate, you'll also need to include +the ca.crt contents here.
    • +
    • +Token - +GitLab authenticates against Kubernetes using service tokens, which are +scoped to a particular namespace. If you don't have a service token yet, +you can follow the +Kubernetes documentation +to create one. You can also view or create service tokens in the +Kubernetes dashboard +(under Config > Secrets). The account that will issue the service token +must have admin privileges on the cluster. +
    • +
    • +Project namespace (optional) - You don't have to fill it in; by leaving +it blank, GitLab will create one for you. Also: +
        +
      • Each project should have a unique namespace.
      • +
      • The project namespace is not necessarily the namespace of the secret, if +you're using a secret with broader permissions, like the secret from default.
      • +
      • You should not use default as the project namespace.
      • +
      • If you or someone created a secret specifically for the project, usually +with limited permissions, the secret's namespace and project namespace may +be the same.
      • +
      +
    • +
    +
  6. +
  7. +

    Finally, click the Create Kubernetes cluster button.

    +
  8. +
+

After a couple of minutes, your cluster will be ready to go. You can now proceed +to install some pre-defined applications.

+

+Security implications

+

CAUTION: Important: +The whole cluster security is based on a model where developers +are trusted, so only trusted users should be allowed to control your clusters.

+

The default cluster configuration grants access to a wide set of +functionalities needed to successfully build and deploy a containerized +application. Bare in mind that the same credentials are used for all the +applications running on the cluster.

+

When GitLab creates the cluster, it enables and uses the legacy +Attribute-based access control (ABAC). +The newer RBAC +authorization will be supported in a +future release.

+

+Security of GitLab Runners

+

GitLab Runners have the privileged mode +enabled by default, which allows them to execute special commands and running +Docker in Docker. This functionality is needed to run some of the Auto DevOps +jobs. This implies the containers are running in privileged mode and you should, +therefore, be aware of some important details.

+

The privileged flag gives all capabilities to the running container, which in +turn can do almost everything that the host can do. Be aware of the +inherent security risk associated with performing docker run operations on +arbitrary images as they effectively have root access.

+

If you don't want to use GitLab Runner in privileged mode, first make sure that +you don't have it installed via the applications, and then use the +Runner's Helm chart to +install it manually.

+

+Installing applications

+

GitLab provides a one-click install for various applications which will be +added directly to your configured cluster. Those applications are needed for +Review Apps and deployments.

+

NOTE: Note: +The applications will be installed in a dedicated namespace called +gitlab-managed-apps. In case you have added an existing Kubernetes cluster +with Tiller already installed, you should be careful as GitLab cannot +detect it. By installing it via the applications will result into having it +twice, which can lead to confusion during deployments.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ApplicationGitLab versionDescription
Helm Tiller10.2+Helm is a package manager for Kubernetes and is required to install all the other applications. It is installed in its own pod inside the cluster which can run the helm CLI in a safe environment.
Ingress10.2+Ingress can provide load balancing, SSL termination, and name-based virtual hosting. It acts as a web proxy for your applications and is useful if you want to use Auto DevOps or deploy your own web apps.
Prometheus10.4+Prometheus is an open-source monitoring and alerting system useful to supervise your deployed applications.
GitLab Runner10.6+GitLab Runner is the open source project that is used to run your jobs and send the results back to GitLab. It is used in conjunction with GitLab CI/CD, the open-source continuous integration service included with GitLab that coordinates the jobs. When installing the GitLab Runner via the applications, it will run in privileged mode by default. Make sure you read the security implications before doing so.
JupyterHub11.0+ +JupyterHub is a multi-user service for managing notebooks across a team. Jupyter Notebooks provide a web-based interactive programming environment used for data analysis, visualization, and machine learning. Note: Authentication will be enabled for any user of the GitLab server via OAuth2. HTTPS will be supported in a future release.
+

+Getting the external IP address

+

NOTE: Note: +You need a load balancer installed in your cluster in order to obtain the +external IP address with the following procedure. It can be deployed using the +Ingress application.

+

In order to publish your web application, you first need to find the external IP +address associated to your load balancer.

+

+Let GitLab fetch the IP address

+
+

Introduced in GitLab 10.6.

+
+

If you installed the Ingress via the Applications, +you should see the Ingress IP address on this same page within a few minutes. +If you don't see this, GitLab might not be able to determine the IP address of +your ingress application in which case you should manually determine it.

+

+Manually determining the IP address

+

If the cluster is on GKE, click on the Google Kubernetes Engine link in the +Advanced settings, or go directly to the +Google Kubernetes Engine dashboard +and select the proper project and cluster. Then click on Connect and execute +the gcloud command in a local terminal or using the Cloud Shell.

+

If the cluster is not on GKE, follow the specific instructions for your +Kubernetes provider to configure kubectl with the right credentials.

+

If you installed the Ingress via the Applications, +run the following command:

+
kubectl get svc --namespace=gitlab-managed-apps ingress-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip} '
+

Otherwise, you can list the IP addresses of all load balancers:

+
kubectl get svc --all-namespaces -o jsonpath='{range.items[?(@.status.loadBalancer.ingress)]}{.status.loadBalancer.ingress[*].ip} '
+
+

Note: Some Kubernetes clusters return a hostname instead, like Amazon EKS. For these platforms, run:

+
kubectl get service ingress-nginx-ingress-controller -n gitlab-managed-apps -o jsonpath="{.status.loadBalancer.ingress[0].hostname}".
+
+

The output is the external IP address of your cluster. This information can then +be used to set up DNS entries and forwarding rules that allow external access to +your deployed applications.

+

+Using a static IP

+

By default, an ephemeral external IP address is associated to the cluster's load +balancer. If you associate the ephemeral IP with your DNS and the IP changes, +your apps will not be able to be reached, and you'd have to change the DNS +record again. In order to avoid that, you should change it into a static +reserved IP.

+

Read how to promote an ephemeral external IP address in GKE.

+

+Pointing your DNS at the cluster IP

+

Once you've set up the static IP, you should associate it to a wildcard DNS +record, in order to be able +to reach your apps. This heavily depends on your domain provider, but in case +you aren't sure, just create an A record with a wildcard host like +*.example.com..

+

+Setting the environment scope

+

NOTE: Note: +This is only available for GitLab Premium where you can add more than +one Kubernetes cluster.

+

When adding more than one Kubernetes clusters to your project, you need to +differentiate them with an environment scope. The environment scope associates +clusters and environments in an 1:1 relationship +similar to how the +environment-specific variables +work.

+

The default environment scope is *, which means all jobs, regardless of their +environment, will use that cluster. Each scope can only be used by a single +cluster in a project, and a validation error will occur if otherwise. +Also, jobs that don't have an environment keyword set will not be able to access any cluster.

+
+

For example, let's say the following Kubernetes clusters exist in a project:

+ + + + + + + + + + + + + + + + + + + + + +
ClusterEnvironment scope
Development*
Stagingstaging/*
Productionproduction/*
+

And the following environments are set in .gitlab-ci.yml:

+
stages:
+- test
+- deploy
+
+test:
+  stage: test
+  script: sh test
+
+deploy to staging:
+  stage: deploy
+  script: make deploy
+  environment:
+    name: staging/$CI_COMMIT_REF_NAME
+    url: https://staging.example.com/
+
+deploy to production:
+  stage: deploy
+  script: make deploy
+  environment:
+    name: production/$CI_COMMIT_REF_NAME
+    url: https://example.com/
+

The result will then be:

+
    +
  • The development cluster will be used for the "test" job.
  • +
  • The staging cluster will be used for the "deploy to staging" job.
  • +
  • The production cluster will be used for the "deploy to production" job.
  • +
+

+Multiple Kubernetes clusters

+
+

Introduced in GitLab Premium 10.3.

+
+

With GitLab Premium, you can associate more than one Kubernetes clusters to your +project. That way you can have different clusters for different environments, +like dev, staging, production, etc.

+

Simply add another cluster, like you did the first time, and make sure to +set an environment scope that will +differentiate the new cluster with the rest.

+

+Deployment variables

+

The Kubernetes cluster integration exposes the following +deployment variables in the +GitLab CI/CD build environment.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VariableDescription
KUBE_URLEqual to the API URL.
KUBE_TOKENThe Kubernetes token.
KUBE_NAMESPACEThe Kubernetes namespace is auto-generated if not specified. The default value is <project_name>-<project_id>. You can overwrite it to use different one if needed, otherwise the KUBE_NAMESPACE variable will receive the default value.
KUBE_CA_PEM_FILEOnly present if a custom CA bundle was specified. Path to a file containing PEM data.
KUBE_CA_PEM(deprecated) Only if a custom CA bundle was specified. Raw PEM data.
KUBECONFIGPath to a file containing kubeconfig for this deployment. CA bundle would be embedded if specified.
+

+Enabling or disabling the Kubernetes cluster integration

+

After you have successfully added your cluster information, you can enable the +Kubernetes cluster integration:

+
    +
  1. Click the "Enabled/Disabled" switch
  2. +
  3. Hit Save for the changes to take effect
  4. +
+

You can now start using your Kubernetes cluster for your deployments.

+

To disable the Kubernetes cluster integration, follow the same procedure.

+

+Removing the Kubernetes cluster integration

+

NOTE: Note: +You need Maintainer permissions and above to remove a Kubernetes cluster integration.

+

NOTE: Note: +When you remove a cluster, you only remove its relation to GitLab, not the +cluster itself. To remove the cluster, you can do so by visiting the GKE +dashboard or using kubectl.

+

To remove the Kubernetes cluster integration from your project, simply click on the +Remove integration button. You will then be able to follow the procedure +and add a Kubernetes cluster again.

+

+What you can get with the Kubernetes integration

+

Here's what you can do with GitLab if you enable the Kubernetes integration.

+

+Deploy Boards

+
+

Available in GitLab Premium.

+
+

GitLab's Deploy Boards offer a consolidated view of the current health and +status of each CI environment running on Kubernetes, +displaying the status of the pods in the deployment. Developers and other +teammates can view the progress and status of a rollout, pod by pod, in the +workflow they already use without any need to access Kubernetes.

+

> Read more about Deploy Boards

+

+Canary Deployments

+
+

Available in GitLab Premium.

+
+

Leverage Kubernetes' Canary deployments +and visualize your canary deployments right inside the Deploy Board, without +the need to leave GitLab.

+

> Read more about Canary Deployments

+

+Kubernetes monitoring

+

Automatically detect and monitor Kubernetes metrics. Automatic monitoring of +NGINX ingress is also supported.

+

> Read more about Kubernetes monitoring

+

+Auto DevOps

+

Auto DevOps automatically detects, builds, tests, deploys, and monitors your +applications.

+

To make full use of Auto DevOps(Auto Deploy, Auto Review Apps, and Auto Monitoring) +you will need the Kubernetes project integration enabled.

+

> Read more about Auto DevOps

+

+Web terminals

+

NOTE: Note: +Introduced in GitLab 8.15. You must be the project owner or have maintainer permissions +to use terminals. Support is limited to the first container in the +first pod of your environment.

+

When enabled, the Kubernetes service adds web terminal +support to your environments. This is based on the exec functionality found in +Docker and Kubernetes, so you get a new shell session within your existing +containers. To use this integration, you should deploy to Kubernetes using +the deployment variables above, ensuring any pods you create are labelled with +app=$CI_ENVIRONMENT_SLUG. GitLab will do the rest!

+

+Read more

+ +
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/3ea11d056919940c69187e6d1d590d59 b/docker/tanner/snare/dist/pages/1/3ea11d056919940c69187e6d1d590d59 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3ea11d056919940c69187e6d1d590d59 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3ec6bacf9a712e73ea29d107b0518483 b/docker/tanner/snare/dist/pages/1/3ec6bacf9a712e73ea29d107b0518483 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3ec6bacf9a712e73ea29d107b0518483 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3f29b167e9fbe0ad578f7f2d30cab63a b/docker/tanner/snare/dist/pages/1/3f29b167e9fbe0ad578f7f2d30cab63a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3f29b167e9fbe0ad578f7f2d30cab63a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3f7c927ce9d6b72f7c67422decc15ba5 b/docker/tanner/snare/dist/pages/1/3f7c927ce9d6b72f7c67422decc15ba5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3f7c927ce9d6b72f7c67422decc15ba5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/3fa2e2005b0d1c85c45762ce2bd2de1a b/docker/tanner/snare/dist/pages/1/3fa2e2005b0d1c85c45762ce2bd2de1a new file mode 100644 index 000000000..4e0dec521 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3fa2e2005b0d1c85c45762ce2bd2de1a @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/3fe98d1e31f250b3619c1fbd238a4695 b/docker/tanner/snare/dist/pages/1/3fe98d1e31f250b3619c1fbd238a4695 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/3fe98d1e31f250b3619c1fbd238a4695 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/405c15f8f7b63fb42ac64b3af213c0e6 b/docker/tanner/snare/dist/pages/1/405c15f8f7b63fb42ac64b3af213c0e6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/405c15f8f7b63fb42ac64b3af213c0e6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/40703b8e26740f52b6161477264f260e b/docker/tanner/snare/dist/pages/1/40703b8e26740f52b6161477264f260e new file mode 100644 index 000000000..c93dde57a --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/40703b8e26740f52b6161477264f260e @@ -0,0 +1,1077 @@ + + + + + + + + + + + + + + + + + + +Markdown · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Markdown

+

+GitLab Flavored Markdown (GFM)

+
+

Note: +Not all of the GitLab-specific extensions to Markdown that are described in +this document currently work on our documentation website.

+

For the best result, we encourage you to check this document out as rendered +by GitLab: markdown.md

+
+

GitLab uses (as of 11.1) the CommonMark Ruby Library for Markdown processing of all new issues, merge requests, comments, and other Markdown content in the GitLab system. Previous content, wiki pages and Markdown files (.md) in the repositories are still processed using the Redcarpet Ruby library.

+

Where there are significant differences, we will try to call them out in this document.

+

GitLab uses "GitLab Flavored Markdown" (GFM). It extends the standard Markdown in a few significant ways to add some useful functionality. It was inspired by GitHub Flavored Markdown.

+

You can use GFM in the following areas:

+
    +
  • comments
  • +
  • issues
  • +
  • merge requests
  • +
  • milestones
  • +
  • snippets (the snippet must be named with a .md extension)
  • +
  • wiki pages (currently only rendered by Redcarpet)
  • +
  • markdown documents inside the repository (currently only rendered by Redcarpet)
  • +
+

You can also use other rich text files in GitLab. You might have to install a +dependency to do so. Please see the github-markup gem readme for more information.

+

+Newlines

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#newlines

+
+

GFM honors the markdown specification in how paragraphs and line breaks are handled.

+

A paragraph is simply one or more consecutive lines of text, separated by one or more blank lines. +Line-breaks, or soft returns, are rendered if you end a line with two or more spaces:

+

Roses are red [followed by two or more spaces]
+Violets are blue

+
Sugar is sweet
+

Roses are red
+Violets are blue

+

Sugar is sweet

+

+Multiple underscores in words

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#multiple-underscores-in-words

+
+

It is not reasonable to italicize just part of a word, especially when you're dealing with code and names that often appear with multiple underscores. Therefore, GFM ignores multiple underscores in words:

+
perform_complicated_task
+
+do_this_and_do_that_and_another_thing
+

perform_complicated_task

+

do_this_and_do_that_and_another_thing

+

+URL auto-linking

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#url-auto-linking

+
+

GFM will autolink almost any URL you copy and paste into your text:

+
* https://www.google.com
+* https://google.com/
+* ftp://ftp.us.debian.org/debian/
+* smb://foo/bar/baz
+* irc://irc.freenode.net/gitlab
+* http://localhost:3000
+ +

+Multiline Blockquote

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#multiline-blockquote

+
+

On top of standard Markdown blockquotes, which require prepending > to quoted lines, +GFM supports multiline blockquotes fenced by >>>:

+
>>>
+If you paste a message from somewhere else
+
+that
+
+spans
+
+multiple lines,
+
+you can quote that without having to manually prepend `>` to every line!
+>>>
+
+

If you paste a message from somewhere else

+

that

+

spans

+

multiple lines,

+

you can quote that without having to manually prepend > to every line!

+
+

+Code and Syntax Highlighting

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#code-and-syntax-highlighting

+
+

GitLab uses the Rouge Ruby library for syntax highlighting. For a +list of supported languages visit the Rouge website.

+

Blocks of code are either fenced by lines with three back-ticks ```, +or are indented with four spaces. Only the fenced code blocks support syntax +highlighting:

+
Inline `code` has `back-ticks around` it.
+

Inline code has back-ticks around it.

+

Example:

+
```javascript
+var s = "JavaScript syntax highlighting";
+alert(s);
+```
+
+```python
+def function():
+    #indenting works just fine in the fenced code block
+    s = "Python syntax highlighting"
+    print s
+```
+
+```ruby
+require 'redcarpet'
+markdown = Redcarpet.new("Hello World!")
+puts markdown.to_html
+```
+
+```
+No language indicated, so no syntax highlighting.
+s = "There is no highlighting for this."
+But let's throw in a <b>tag</b>.
+```
+

becomes:

+
var s = "JavaScript syntax highlighting";
+alert(s);
+
def function():
+    #indenting works just fine in the fenced code block
+    s = "Python syntax highlighting"
+    print s
+
require 'redcarpet'
+markdown = Redcarpet.new("Hello World!")
+puts markdown.to_html
+
No language indicated, so no syntax highlighting.
+s = "There is no highlighting for this."
+But let's throw in a <b>tag</b>.
+

+Inline Diff

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#inline-diff

+
+

With inline diffs tags you can display additions or deletions .

+

The wrapping tags can be either curly braces or square brackets: additions or deletions .

+

Examples:

+
- {+ additions +}
+- [+ additions +]
+- {- deletions -}
+- [- deletions -]
+

However the wrapping tags cannot be mixed as such:

+
- {+ additions +]
+- [+ additions +}
+- {- deletions -]
+- [- deletions -}
+

+Emoji

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#emoji

+
+
Sometimes you want to :monkey: around a bit and add some :star2: to your :speech_balloon:. Well we have a gift for you:
+
+:zap: You can use emoji anywhere GFM is supported. :v:
+
+You can use it to point out a :bug: or warn about :speak_no_evil: patches. And if someone improves your really :snail: code, send them some :birthday:. People will :heart: you for that.
+
+If you are new to this, don't be :fearful:. You can easily join the emoji :family:. All you need to do is to look up one of the supported codes.
+
+Consult the [Emoji Cheat Sheet](https://www.emojicopy.com) for a list of all supported emoji codes. :thumbsup:
+

Sometimes you want to 🐒 around a bit and add some 🌟 to your 💬. Well we have a gift for you:

+

You can use emoji anywhere GFM is supported.

+

You can use it to point out a 🐛 or warn about 🙊 patches. And if someone improves your really 🐌 code, send them some 🎂. People will you for that.

+

If you are new to this, don't be 😨. You can easily join the emoji 👪. All you need to do is to look up one of the supported codes.

+

Consult the Emoji Cheat Sheet for a list of all supported emoji codes. 👍

+

+Special GitLab References

+

GFM recognizes special references.

+

You can easily reference e.g. an issue, a commit, a team member or even the whole team within a project.

+

GFM will turn that reference into a link so you can navigate between them easily.

+

GFM will recognize the following:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputreferences
@user_namespecific user
@group_namespecific group
@allentire team
#12345issue
!123merge request
$123snippet
~123label by ID
~bugone-word label by name
~"feature request"multi-word label by name
%123project milestone by ID
%v1.23one-word milestone by name
%"release candidate"multi-word milestone by name
9ba12248specific commit
9ba12248...b19a04f5commit range comparison
[README](doc/README)repository file references
[README](doc/README#L13)repository file line references
+

GFM also recognizes certain cross-project references:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputreferences
namespace/project#123issue
namespace/project!123merge request
namespace/project%123project milestone
namespace/project$123snippet
namespace/project@9ba12248specific commit
namespace/project@9ba12248...b19a04f5commit range comparison
namespace/project~"Some label"issues with given label
+

It also has a shorthand version to reference other projects from the same namespace:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputreferences
project#123issue
project!123merge request
project%123project milestone
project$123snippet
project@9ba12248specific commit
project@9ba12248...b19a04f5commit range comparison
project~"Some label"issues with given label
+

+Task Lists

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#task-lists

+
+

You can add task lists to issues, merge requests and comments. To create a task list, add a specially-formatted Markdown list, like so:

+
- [x] Completed task
+- [ ] Incomplete task
+    - [ ] Sub-task 1
+    - [x] Sub-task 2
+    - [ ] Sub-task 3
+
    +
  • + Completed task
  • +
  • + Incomplete task +
      +
    • + Sub-task 1
    • +
    • + Sub-task 2
    • +
    • + Sub-task 3
    • +
    +
  • +
+

Tasks formatted as ordered lists are supported as well:

+
1. [x] Completed task
+1. [ ] Incomplete task
+    1. [ ] Sub-task 1
+    1. [x] Sub-task 2
+
    +
  1. + Completed task
  2. +
  3. + Incomplete task +
      +
    1. + Sub-task 1
    2. +
    3. + Sub-task 2
    4. +
    +
  4. +
+

Task lists can only be created in descriptions, not in titles. Task item state can be managed by editing the description's Markdown or by toggling the rendered check boxes.

+

+Videos

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#videos

+
+

Image tags with a video extension are automatically converted to a video player.

+

The valid video extensions are .mp4, .m4v, .mov, .webm, and .ogv.

+
Here's a sample video:
+
+![Sample Video](img/markdown_video.mp4)
+

Here's a sample video:

+

+

+Math

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#math

+
+

It is possible to have math written with the LaTeX syntax rendered using KaTeX.

+

Math written inside $``$ will be rendered inline with the text.

+

Math written inside triple back quotes, with the language declared as math, will be rendered on a separate line.

+

Example:

+
This math is inline $`a^2+b^2=c^2`$.
+
+This is on a separate line
+```math
+a^2+b^2=c^2
+```
+

Becomes:

+

This math is inline a^2+b^2=c^2.

+

This is on a separate line

+
a^2+b^2=c^2
+

Be advised that KaTeX only supports a subset of LaTeX.

+
+

Note: +This also works for the asciidoctor :stem: latexmath. For details see the asciidoctor user manual.

+
+

+Colors

+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#colors

+
+

It is possible to have color written in HEX, RGB or HSL format rendered with a color indicator.

+

Color written inside backticks will be followed by a color "chip".

+

Examples:

+
`#F00`  
+`#F00A`  
+`#FF0000`  
+`#FF0000AA`  
+`RGB(0,255,0)`  
+`RGB(0%,100%,0%)`  
+`RGBA(0,255,0,0.7)`  
+`HSL(540,70%,50%)`  
+`HSLA(540,70%,50%,0.7)`
+

Become:

+

#F00
+#F00A
+#FF0000
+#FF0000AA
+RGB(0,255,0)
+RGB(0%,100%,0%)
+RGBA(0,255,0,0.7)
+HSL(540,70%,50%)
+HSLA(540,70%,50%,0.7)

+

+Supported formats:

+
    +
  • HEX: `#RGB[A]` or `#RRGGBB[AA]` +
  • +
  • RGB: `RGB[A](R, G, B[, A])` +
  • +
  • HSL: `HSL[A](H, S, L[, A])` +
  • +
+

+Mermaid

+
+

Introduced in +GitLab 10.3.

+
+
+

If this is not rendered correctly, see +https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/user/markdown.md#mermaid

+
+

It is possible to generate diagrams and flowcharts from text using Mermaid.

+

In order to generate a diagram or flowchart, you should write your text inside the mermaid block.

+

Example:

+
```mermaid
+graph TD;
+  A-->B;
+  A-->C;
+  B-->D;
+  C-->D;
+```
+

Becomes:

+
graph TD;
+  A-->B;
+  A-->C;
+  B-->D;
+  C-->D;
+

For details see the Mermaid official page.

+

+Standard Markdown

+

+Headers

+
# H1
+## H2
+### H3
+#### H4
+##### H5
+###### H6
+
+Alternatively, for H1 and H2, an underline-ish style:
+
+Alt-H1
+======
+
+Alt-H2
+------
+

+Header IDs and links

+

All Markdown-rendered headers automatically get IDs, except in comments.

+

On hover, a link to those IDs becomes visible to make it easier to copy the link to the header to give it to someone else.

+

The IDs are generated from the content of the header according to the following rules:

+
    +
  1. All text is converted to lowercase.
  2. +
  3. All non-word text (e.g., punctuation, HTML) is removed.
  4. +
  5. All spaces are converted to hyphens.
  6. +
  7. Two or more hyphens in a row are converted to one.
  8. +
  9. If a header with the same ID has already been generated, a unique +incrementing number is appended, starting at 1.
  10. +
+

For example:

+
# This header has spaces in it
+## This header has a :thumbsup: in it
+# This header has Unicode in it: 한글
+## This header has spaces in it
+### This header has spaces in it
+## This header has 3.5 in it (and parentheses)
+

Would generate the following link IDs:

+
    +
  1. this-header-has-spaces-in-it
  2. +
  3. this-header-has-a-in-it
  4. +
  5. this-header-has-unicode-in-it-한글
  6. +
  7. this-header-has-spaces-in-it
  8. +
  9. this-header-has-spaces-in-it-1
  10. +
  11. this-header-has-3-5-in-it-and-parentheses
  12. +
+

Note that the Emoji processing happens before the header IDs are generated, so the Emoji is converted to an image which then gets removed from the ID.

+

+Emphasis

+

Examples:

+
Emphasis, aka italics, with *asterisks* or _underscores_.
+
+Strong emphasis, aka bold, with **asterisks** or __underscores__.
+
+Combined emphasis with **asterisks and _underscores_**.
+
+Strikethrough uses two tildes. ~~Scratch this.~~
+

Become:

+

Emphasis, aka italics, with asterisks or underscores.

+

Strong emphasis, aka bold, with asterisks or underscores.

+

Combined emphasis with asterisks and underscores.

+

Strikethrough uses two tildes. Scratch this.

+

+Lists

+

Examples:

+
1. First ordered list item
+2. Another item
+   * Unordered sub-list.
+1. Actual numbers don't matter, just that it's a number
+   1. Ordered sub-list
+4. And another item.
+
+* Unordered list can use asterisks
+- Or minuses
++ Or pluses
+

Become:

+
    +
  1. First ordered list item
  2. +
  3. Another item +
      +
    • Unordered sub-list.
    • +
    +
  4. +
  5. Actual numbers don't matter, just that it's a number +
      +
    1. Ordered sub-list
    2. +
    +
  6. +
  7. And another item.
  8. +
+
    +
  • Unordered list can use asterisks
  • +
+
    +
  • Or minuses
  • +
+
    +
  • Or pluses
  • +
+

If a list item contains multiple paragraphs, +each subsequent paragraph should be indented to the same level as the start of the list item text (Redcarpet: paragraph should be indented with four spaces.)

+

Example:

+
1. First ordered list item
+
+   Second paragraph of first item.
+
+2. Another item
+

Becomes:

+
    +
  1. +

    First ordered list item

    +

    Paragraph of first item.

    +
  2. +
  3. +

    Another item

    +
  4. +
+

If the paragraph of the first item is not indented with the proper number of spaces, +the paragraph will appear outside the list, instead of properly indented under the list item.

+

Example:

+
1. First ordered list item
+
+  Paragraph of first item.
+
+2. Another item
+

Becomes:

+
    +
  1. First ordered list item
  2. +
+

Paragraph of first item.

+
    +
  1. Another item
  2. +
+

+Links

+

There are two ways to create links, inline-style and reference-style.

+
[I'm an inline-style link](https://www.google.com)
+
+[I'm a reference-style link][Arbitrary case-insensitive reference text]
+
+[I'm a relative reference to a repository file](LICENSE)
+
+[I am an absolute reference within the repository](/doc/user/markdown.md)
+
+[I link to the Milestones page](/../milestones)
+
+[You can use numbers for reference-style link definitions][1]
+
+Or leave it empty and use the [link text itself][]
+
+Some text to show that the reference links can follow later.
+
+[arbitrary case-insensitive reference text]: https://www.mozilla.org
+[1]: http://slashdot.org
+[link text itself]: https://www.reddit.com
+
+

Note: +Relative links do not allow referencing project files in a wiki page or wiki +page in a project file. The reason for this is that, in GitLab, wiki is always +a separate Git repository. For example, [I'm a reference-style link](style) +will point the link to wikis/style when the link is inside of a wiki markdown file.

+
+

+Images

+

Examples:

+
Here's our logo (hover to see the title text):
+
+Inline-style:
+![alt text](img/markdown_logo.png)
+
+Reference-style:
+![alt text1][logo]
+
+[logo]: img/markdown_logo.png
+

Become:

+

Here's our logo:

+

Inline-style:

+

alt text

+

Reference-style:

+

alt text

+

+Blockquotes

+

Examples:

+
> Blockquotes are very handy in email to emulate reply text.
+> This line is part of the same quote.
+
+Quote break.
+
+> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.
+

Become:

+
+

Blockquotes are very handy in email to emulate reply text. +This line is part of the same quote.

+
+

Quote break.

+
+

This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can put Markdown into a blockquote.

+
+

+Inline HTML

+

You can also use raw HTML in your Markdown, and it'll mostly work pretty well.

+

See the documentation for HTML::Pipeline's SanitizationFilter class for the list of allowed HTML tags and attributes. In addition to the default SanitizationFilter whitelist, GitLab allows span, abbr, details and summary elements.

+

Examples:

+
<dl>
+  <dt>Definition list</dt>
+  <dd>Is something people use sometimes.</dd>
+
+  <dt>Markdown in HTML</dt>
+  <dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
+</dl>
+

Become:

+
+
Definition list
+
Is something people use sometimes.
+
Markdown in HTML
+
Does *not* work **very** well. Use HTML tags.
+
+

+Details and Summary

+

Content can be collapsed using HTML's <details> and <summary> tags. This is especially useful for collapsing long logs so they take up less screen space.

+

+

+Click me to collapse/fold. +

These details will remain hidden until expanded.

+
PASTE LOGS HERE
+
+

+

Note: Markdown inside these tags is supported, as long as you have a blank link after the </summary> tag and before the </details> tag, as shown in the example. Redcarpet does not support Markdown inside these tags. You can work around this by using HTML, for example you can use <pre><code> tags instead of code fences.

+
<details>
+<summary>Click me to collapse/fold.</summary>
+
+These details _will_ remain **hidden** until expanded.
+
+    PASTE LOGS HERE
+
+</details>
+

+Horizontal Rule

+

Examples:

+
Three or more...
+
+---
+
+Hyphens
+
+***
+
+Asterisks
+
+___
+
+Underscores
+

Become:

+

Three or more...

+
+

Hyphens

+
+

Asterisks

+
+

Underscores

+

+Line Breaks

+

A good way to learn how line breaks work is to experiment and discover -- hit Enter once (i.e., insert one newline), then hit it twice (i.e., insert two newlines), see what happens. You'll soon learn to get what you want. The "Preview" tab is your friend.

+

Here are some things to try out:

+

Examples:

+
Here's a line for us to start with.
+
+This line is separated from the one above by two newlines, so it will be a *separate paragraph*.
+
+This line is also a separate paragraph, but...
+This line is only separated by a single newline, so it *does not break* and just follows the previous line in the *same paragraph*.
+
+This line is also a separate paragraph, and...  
+This line is *on its own line*, because the previous line ends with two spaces. (but still in the *same paragraph*)
+
+spaces.
+

Become:

+

Here's a line for us to start with.

+

This line is separated from the one above by two newlines, so it will be a separate paragraph.

+

This line is also a separate paragraph, but... +This line is only separated by a single newline, so it does not break and just follows the previous line in the same paragraph.

+

This line is also a separate paragraph, and...
+This line is on its own line, because the previous line ends with two spaces. (but still in the same paragraph)

+

spaces.

+

+Tables

+

Tables aren't part of the core Markdown spec, but they are part of GFM.

+

Example:

+
| header 1 | header 2 |
+| -------- | -------- |
+| cell 1   | cell 2   |
+| cell 3   | cell 4   |
+

Becomes:

+ + + + + + + + + + + + + + + + + +
header 1header 2
cell 1cell 2
cell 3cell 4
+

Note: The row of dashes between the table header and body must have at least three dashes in each column.

+

By including colons in the header row, you can align the text within that column.

+

Example:

+
| Left Aligned | Centered | Right Aligned | Left Aligned | Centered | Right Aligned |
+| :----------- | :------: | ------------: | :----------- | :------: | ------------: |
+| Cell 1       | Cell 2   | Cell 3        | Cell 4       | Cell 5   | Cell 6        |
+| Cell 7       | Cell 8   | Cell 9        | Cell 10      | Cell 11  | Cell 12       |
+

Becomes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Left AlignedCenteredRight AlignedLeft AlignedCenteredRight Aligned
Cell 1Cell 2Cell 3Cell 4Cell 5Cell 6
Cell 7Cell 8Cell 9Cell 10Cell 11Cell 12
+

+Footnotes

+

Example:

+
You can add footnotes to your text as follows.[^2]
+[^2]: This is my awesome footnote.
+

Becomes:

+

You can add footnotes to your text as follows.[1]

+

+Superscripts / Subscripts

+

CommonMark and GFM currently do not support the superscript syntax ( x^2 ) that Redcarpet does. You can use the standard HTML syntax for superscripts and subscripts.

+
The formula for water is H<sub>2</sub>O
+while the equation for the theory of relativity is E = mc<sup>2</sup>.
+

The formula for water is H2O while the equation for the theory of relativity is E = mc2.

+

+Wiki-specific Markdown

+

The following examples show how links inside wikis behave.

+

+Wiki - Direct page link

+

A link which just includes the slug for a page will point to that page, +at the base level of the wiki.

+

This snippet would link to a documentation page at the root of your wiki:

+
[Link to Documentation](documentation)
+

+Wiki - Direct file link

+

Links with a file extension point to that file, relative to the current page.

+

If this snippet was placed on a page at <your_wiki>/documentation/related, +it would link to <your_wiki>/documentation/file.md:

+
[Link to File](file.md)
+

+Wiki - Hierarchical link

+

A link can be constructed relative to the current wiki page using ./<page>, +../<page>, etc.

+
    +
  • +

    If this snippet was placed on a page at <your_wiki>/documentation/main, +it would link to <your_wiki>/documentation/related:

    +
    [Link to Related Page](./related)
    +
  • +
  • +

    If this snippet was placed on a page at <your_wiki>/documentation/related/content, +it would link to <your_wiki>/documentation/main:

    +
    [Link to Related Page](../main)
    +
  • +
  • +

    If this snippet was placed on a page at <your_wiki>/documentation/main, +it would link to <your_wiki>/documentation/related.md:

    +
    [Link to Related Page](./related.md)
    +
  • +
  • +

    If this snippet was placed on a page at <your_wiki>/documentation/related/content, +it would link to <your_wiki>/documentation/main.md:

    +
    [Link to Related Page](../main.md)
    +
  • +
+

+Wiki - Root link

+

A link starting with a / is relative to the wiki root.

+
    +
  • +

    This snippet links to <wiki_root>/documentation:

    +
    [Link to Related Page](/documentation)
    +
  • +
  • +

    This snippet links to <wiki_root>/miscellaneous.md:

    +
    [Link to Related Page](/miscellaneous.md)
    +
  • +
+

+References

+ +
    +
  1. +

    This is my awesome footnote.

    +
  2. +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/40ca4acc94554f22ee2f9218468be2f9 b/docker/tanner/snare/dist/pages/1/40ca4acc94554f22ee2f9218468be2f9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/40ca4acc94554f22ee2f9218468be2f9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/41918db889a19ce75d177b75981c8bda b/docker/tanner/snare/dist/pages/1/41918db889a19ce75d177b75981c8bda new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/41918db889a19ce75d177b75981c8bda @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/423823b11a2d661ed8d719d597e48c62 b/docker/tanner/snare/dist/pages/1/423823b11a2d661ed8d719d597e48c62 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/423823b11a2d661ed8d719d597e48c62 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4290b535ea2cee7a1bb59b7d423f998d b/docker/tanner/snare/dist/pages/1/4290b535ea2cee7a1bb59b7d423f998d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4290b535ea2cee7a1bb59b7d423f998d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/42cdb332ac9fa40b93291042108d1f13 b/docker/tanner/snare/dist/pages/1/42cdb332ac9fa40b93291042108d1f13 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/42cdb332ac9fa40b93291042108d1f13 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/43a0419043245b5d58e6d43a934acd32 b/docker/tanner/snare/dist/pages/1/43a0419043245b5d58e6d43a934acd32 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/43a0419043245b5d58e6d43a934acd32 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4405a63258c80e9b7aa7c4ae5a11fa9b b/docker/tanner/snare/dist/pages/1/4405a63258c80e9b7aa7c4ae5a11fa9b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4405a63258c80e9b7aa7c4ae5a11fa9b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4432a280127e34dd4a132f3d06dc3c95 b/docker/tanner/snare/dist/pages/1/4432a280127e34dd4a132f3d06dc3c95 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4432a280127e34dd4a132f3d06dc3c95 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/444260abbabb9f9f72c8bc7caa4cb95b b/docker/tanner/snare/dist/pages/1/444260abbabb9f9f72c8bc7caa4cb95b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/444260abbabb9f9f72c8bc7caa4cb95b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4445304586ebc1e774ae7ff36aa7f3a4 b/docker/tanner/snare/dist/pages/1/4445304586ebc1e774ae7ff36aa7f3a4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4445304586ebc1e774ae7ff36aa7f3a4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/447f0c9044c5c8c0510522f67e49fdf2 b/docker/tanner/snare/dist/pages/1/447f0c9044c5c8c0510522f67e49fdf2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/447f0c9044c5c8c0510522f67e49fdf2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/448bd67e52beb0a8e610fb384b55995d b/docker/tanner/snare/dist/pages/1/448bd67e52beb0a8e610fb384b55995d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/448bd67e52beb0a8e610fb384b55995d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/44996bfded0bf6d2491e2e7d7afcb552 b/docker/tanner/snare/dist/pages/1/44996bfded0bf6d2491e2e7d7afcb552 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/44996bfded0bf6d2491e2e7d7afcb552 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/44d68ced6245fe77efb329b4744f1c7d b/docker/tanner/snare/dist/pages/1/44d68ced6245fe77efb329b4744f1c7d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/44d68ced6245fe77efb329b4744f1c7d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/44f3aad90a58383fa5438d4181b53b9e b/docker/tanner/snare/dist/pages/1/44f3aad90a58383fa5438d4181b53b9e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/44f3aad90a58383fa5438d4181b53b9e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/45424a658807ff74e3adc91988a008a5 b/docker/tanner/snare/dist/pages/1/45424a658807ff74e3adc91988a008a5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/45424a658807ff74e3adc91988a008a5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/45764d76659de76ca08274085034fdca b/docker/tanner/snare/dist/pages/1/45764d76659de76ca08274085034fdca new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/45764d76659de76ca08274085034fdca @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/466c4a80126bc7af4e984ffcd9dd0b82 b/docker/tanner/snare/dist/pages/1/466c4a80126bc7af4e984ffcd9dd0b82 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/466c4a80126bc7af4e984ffcd9dd0b82 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4676d4bcd045fe96e318c171c011a2db b/docker/tanner/snare/dist/pages/1/4676d4bcd045fe96e318c171c011a2db new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4676d4bcd045fe96e318c171c011a2db @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4679427d013becc5b47e5a82db9de072 b/docker/tanner/snare/dist/pages/1/4679427d013becc5b47e5a82db9de072 new file mode 100644 index 000000000..9d3e6081c --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4679427d013becc5b47e5a82db9de072 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/468f546c0b61446a39f00d50790a8cd0 b/docker/tanner/snare/dist/pages/1/468f546c0b61446a39f00d50790a8cd0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/468f546c0b61446a39f00d50790a8cd0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/46ad007cd1831a6aa27ff367ac4222be b/docker/tanner/snare/dist/pages/1/46ad007cd1831a6aa27ff367ac4222be new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/46ad007cd1831a6aa27ff367ac4222be @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/47420ca678362929744f2a40ecdc6db6 b/docker/tanner/snare/dist/pages/1/47420ca678362929744f2a40ecdc6db6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/47420ca678362929744f2a40ecdc6db6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/476f150724bea51afdc8f9074255633b b/docker/tanner/snare/dist/pages/1/476f150724bea51afdc8f9074255633b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/476f150724bea51afdc8f9074255633b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/479ba9b3bd0f55628e838b3be6182345 b/docker/tanner/snare/dist/pages/1/479ba9b3bd0f55628e838b3be6182345 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/479ba9b3bd0f55628e838b3be6182345 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/483a7b0cdfd047926dbb2d3e9ef0b201 b/docker/tanner/snare/dist/pages/1/483a7b0cdfd047926dbb2d3e9ef0b201 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/483a7b0cdfd047926dbb2d3e9ef0b201 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/48fe2d27c951d7d64194dec9bf24f7b1 b/docker/tanner/snare/dist/pages/1/48fe2d27c951d7d64194dec9bf24f7b1 new file mode 100644 index 000000000..91defd00a --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/48fe2d27c951d7d64194dec9bf24f7b1 @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/493ae2ee33c154b29886cb7f1215a213 b/docker/tanner/snare/dist/pages/1/493ae2ee33c154b29886cb7f1215a213 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/493ae2ee33c154b29886cb7f1215a213 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/496d78732841f1eb51d6b2885bcc7aa7 b/docker/tanner/snare/dist/pages/1/496d78732841f1eb51d6b2885bcc7aa7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/496d78732841f1eb51d6b2885bcc7aa7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/49a3486c396c42c31181ec0b02410e03 b/docker/tanner/snare/dist/pages/1/49a3486c396c42c31181ec0b02410e03 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/49a3486c396c42c31181ec0b02410e03 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/49b541f6387bdebc4c050a98fb91a511 b/docker/tanner/snare/dist/pages/1/49b541f6387bdebc4c050a98fb91a511 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/49b541f6387bdebc4c050a98fb91a511 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4a1e03ccf840ca46ef1ce38249ade3ba b/docker/tanner/snare/dist/pages/1/4a1e03ccf840ca46ef1ce38249ade3ba new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4a1e03ccf840ca46ef1ce38249ade3ba @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4a2a6b3e84613f96102e9821b5606195 b/docker/tanner/snare/dist/pages/1/4a2a6b3e84613f96102e9821b5606195 new file mode 100644 index 000000000..04c801c92 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4a2a6b3e84613f96102e9821b5606195 @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/4ae9b992c7e9bd7a22fb8fda5a71262a b/docker/tanner/snare/dist/pages/1/4ae9b992c7e9bd7a22fb8fda5a71262a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4ae9b992c7e9bd7a22fb8fda5a71262a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4b15905dfa111b27e6c601421f028940 b/docker/tanner/snare/dist/pages/1/4b15905dfa111b27e6c601421f028940 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4b15905dfa111b27e6c601421f028940 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4b599364b2ff428aa77fed9a5d3f42cb b/docker/tanner/snare/dist/pages/1/4b599364b2ff428aa77fed9a5d3f42cb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4b599364b2ff428aa77fed9a5d3f42cb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4bda1678fa8a276d398ff799f9792e59 b/docker/tanner/snare/dist/pages/1/4bda1678fa8a276d398ff799f9792e59 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4bda1678fa8a276d398ff799f9792e59 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4c1ac215304925aabe43338c2b6cd4ed b/docker/tanner/snare/dist/pages/1/4c1ac215304925aabe43338c2b6cd4ed new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4c1ac215304925aabe43338c2b6cd4ed @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4c4c3763b53845adc8ce054b07b5fd92 b/docker/tanner/snare/dist/pages/1/4c4c3763b53845adc8ce054b07b5fd92 new file mode 100644 index 000000000..dfff2a88c --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4c4c3763b53845adc8ce054b07b5fd92 @@ -0,0 +1,553 @@ + + + + + + + + + + + + + + + + + + +Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab +Community Edition +
+

+

+GitLab is open source software to collaborate on code. +
+Manage git repositories with fine-grained access controls that keep your code secure. +
+Perform code reviews and enhance collaboration with merge requests. +
+Each project can also have an issue tracker and a wiki. +
+Used by more than 100,000 organizations, GitLab is the most popular solution to manage git repositories on-premises. +
+Read more about GitLab at about.gitlab.com. +

Check the current instance configuration

+

+
+
+
+
+

+GitLab Documentation

+

Welcome to GitLab, a Git-based fully featured +platform for software development!

+

GitLab offers the most scalable Git-based fully integrated platform for +software development, with flexible products and subscriptions. +To understand what features you have access to, check the GitLab subscriptions below.

+

Shortcuts to GitLab's most visited docs:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
General documentationGitLab CI/CD docs
User documentationGitLab CI/CD quick start guide
Administrator documentationGitLab CI/CD examples
Contributor documentationConfiguring .gitlab-ci.yml
Getting started with GitLabUsing Docker images
APIAuto DevOps
SSH authenticationKubernetes integration
GitLab PagesGitLab Container Registry
+

+Complete DevOps with GitLab

+

GitLab is the first single application for software development, security, +and operations that enables Concurrent DevOps, making the software lifecycle +three times faster and radically improving the speed of business. GitLab +provides solutions for all the stages of the DevOps lifecycle: +plan, create, verify, package, +release, configure, monitor.

+

DevOps Lifecycle

+

+Plan

+

Whether you use Waterfall, Agile, or Conversational Development, +GitLab streamlines your collaborative workflows. Visualize, prioritize, +coordinate, and track your progress your way with GitLab’s flexible project +management tools.

+ +

+Migrate and import your projects from other platforms

+ +

+Create

+

Consolidate source code into a single DVCS +that’s easily managed and controlled without disrupting your workflow. +GitLab’s git repositories come complete with branching tools and access +controls, providing a scalable, single source of truth for collaborating +on projects and code.

+

+Projects and groups

+ +

+Repositories

+

Manage your repositories from the UI (user interface):

+ +

+Merge Requests

+ +

+Integrations

+
    +
  • +Project Services: Integrate a project with external services, such as CI and chat.
  • +
  • +GitLab Integration: Integrate with multiple third-party services with GitLab to allow external issue trackers and external authentication.
  • +
  • +Trello Power-Up: Integrate with GitLab's Trello Power-Up
  • +
+

+Automation

+
    +
  • +API: Automate GitLab via a simple and powerful API.
  • +
  • +GitLab Webhooks: Let GitLab notify you when new code has been pushed to your project.
  • +
+

+Verify

+

Spot errors sooner, improve security and shorten feedback cycles with built-in +static code analysis, code testing, code quality, dependency checking and review +apps. Customize your approval workflow controls, automatically test the quality +of your code, and spin up a staging environment for every code change. GitLab +Continuous Integration is the most popular next generation testing system that +scales to run your tests faster.

+
    +
  • +GitLab CI/CD: Explore the features and capabilities of Continuous Integration, Continuous Delivery, and Continuous Deployment with GitLab.
  • +
  • +Review Apps: Preview changes to your app right from a merge request.
  • +
  • Pipeline Graphs
  • +
+

+Package

+

GitLab Container Registry gives you the enhanced security and access controls of +custom Docker images without 3rd party add-ons. Easily upload and download images +from GitLab CI/CD with full Git repository management integration.

+ +

+Release

+

Spend less time configuring your tools, and more time creating. Whether you’re +deploying to one server or thousands, build, test, and release your code +confidently and securely with GitLab’s built-in Continuous Delivery and Deployment.

+ +

+Configure

+

Automate your entire workflow from build to deploy and monitoring with GitLab +Auto Devops. Best practice templates get you started with minimal to zero +configuration. Then customize everything from buildpacks to CI/CD.

+ +

+Monitor

+

Measure how long it takes to go from planning to monitoring and ensure your +applications are always responsive and available. GitLab collects and displays +performance metrics for deployed apps using Prometheus so you can know in an +instant how code changes impact your production environment.

+
    +
  • +GitLab Prometheus: Configure the bundled Prometheus to collect various metrics from your GitLab instance.
  • +
  • +Prometheus project integration: Configure the Prometheus integration per project and monitor your CI/CD environments.
  • +
  • +Prometheus metrics: Let Prometheus collect metrics from various services, like Kubernetes, NGINX, NGINX ingress controller, HAProxy, and Amazon Cloud Watch.
  • +
  • +GitLab Performance Monitoring: Use InfluxDB and Grafana to monitor the performance of your GitLab instance (will be eventually replaced by Prometheus).
  • +
  • +Health check: GitLab provides liveness and readiness probes to indicate service health and reachability to required services.
  • +
  • +GitLab Cycle Analytics: Cycle Analytics measures the time it takes to go from an idea to production for each project you have.
  • +
+

+Getting started with GitLab

+ +

+User account

+
    +
  • +User account: Manage your account +
      +
    • +Authentication: Account security with two-factor authentication, setup your ssh keys and deploy keys for secure access to your projects.
    • +
    • +Profile settings: Manage your profile settings, two factor authentication and more.
    • +
    +
  • +
  • +User permissions: Learn what each role in a project (external/guest/reporter/developer/maintainer/owner) can do.
  • +
+

+Git and GitLab

+
    +
  • +Git: Getting started with Git, branching strategies, Git LFS, advanced use.
  • +
  • +Git cheatsheet: Download a PDF describing the most used Git operations.
  • +
  • +GitLab Flow: explore the best of Git with the GitLab Flow strategy.
  • +
+

+Administrator documentation

+

Administration documentation applies to admin users of GitLab +self-hosted instances.

+

Learn how to install, configure, update, upgrade, integrate, and maintain your own instance. +Regular users don't have access to GitLab administration tools and settings.

+

+Contributor documentation

+

GitLab Community Edition is open source +and GitLab Enterprise Edition is open-core. +Learn how to contribute to GitLab:

+ +

+GitLab subscriptions

+

You have two options to use GitLab:

+
    +
  • GitLab self-hosted: Install, administer, and maintain your own GitLab instance.
  • +
  • GitLab.com: GitLab's SaaS offering. You don't need to install anything to use GitLab.com, +you only need to sign up and start using GitLab +straight away.
  • +
+

+GitLab self-hosted

+

With GitLab self-hosted, you deploy your own GitLab instance on-premises or on a private cloud of your choice. GitLab self-hosted is available for free and with paid subscriptions: Core, Starter, Premium, and Ultimate.

+

Every feature available in Core is also available in Starter, Premium, and Ultimate. +Starter features are also available in Premium and Ultimate, and Premium features are also +available in Ultimate.

+

+GitLab.com

+

GitLab.com is hosted, managed, and administered by GitLab, Inc., with +free and paid subscriptions for individuals +and teams: Free, Bronze, Silver, and Gold.

+

GitLab.com subscriptions grants access +to the same features available in GitLab self-hosted, except +administration tools and settings:

+
    +
  • GitLab.com Free includes the same features available in Core
  • +
  • GitLab.com Bronze includes the same features available in GitLab Starter
  • +
  • GitLab.com Silver includes the same features available in GitLab Premium
  • +
  • GitLab.com Gold includes the same features available in GitLab Ultimate
  • +
+

For supporting the open source community and encouraging the development of +open source projects, GitLab grants access to Gold features +for all GitLab.com public projects, regardless of the subscription.

+

To know more about GitLab subscriptions and licensing, please refer to the +GitLab Product Marketing Handbook.

+
+
+
+
+
+Quick help +
+ +
+
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/4c6fddadab73fe107e48c01c966d47f6 b/docker/tanner/snare/dist/pages/1/4c6fddadab73fe107e48c01c966d47f6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4c6fddadab73fe107e48c01c966d47f6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4c89144147c703dc28319b803010780a b/docker/tanner/snare/dist/pages/1/4c89144147c703dc28319b803010780a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4c89144147c703dc28319b803010780a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4d2cce89292ef8fd07e7662323add5d1 b/docker/tanner/snare/dist/pages/1/4d2cce89292ef8fd07e7662323add5d1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4d2cce89292ef8fd07e7662323add5d1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4d45daea3ca28d4e3158f5522b7cf9cf b/docker/tanner/snare/dist/pages/1/4d45daea3ca28d4e3158f5522b7cf9cf new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4d45daea3ca28d4e3158f5522b7cf9cf @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4d4b5790ac40838f69439093c4ed9ce0 b/docker/tanner/snare/dist/pages/1/4d4b5790ac40838f69439093c4ed9ce0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4d4b5790ac40838f69439093c4ed9ce0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4d782acd665b7dfd0da1da4e3614ef86 b/docker/tanner/snare/dist/pages/1/4d782acd665b7dfd0da1da4e3614ef86 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4d782acd665b7dfd0da1da4e3614ef86 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4d7ec986c724ca77613fa555eb2be70c b/docker/tanner/snare/dist/pages/1/4d7ec986c724ca77613fa555eb2be70c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4d7ec986c724ca77613fa555eb2be70c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4d88bf63828a9e98a662e1e6ddf2a783 b/docker/tanner/snare/dist/pages/1/4d88bf63828a9e98a662e1e6ddf2a783 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4d88bf63828a9e98a662e1e6ddf2a783 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4dc3e349d4a23ab03ce02b996289cc83 b/docker/tanner/snare/dist/pages/1/4dc3e349d4a23ab03ce02b996289cc83 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4dc3e349d4a23ab03ce02b996289cc83 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4eaae92e242c391fec5c46ba005386d8 b/docker/tanner/snare/dist/pages/1/4eaae92e242c391fec5c46ba005386d8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4eaae92e242c391fec5c46ba005386d8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4ebfc9943603943dc549d4be9156201a b/docker/tanner/snare/dist/pages/1/4ebfc9943603943dc549d4be9156201a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4ebfc9943603943dc549d4be9156201a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4ecca4e0998d59ee080bb267bd8a2069 b/docker/tanner/snare/dist/pages/1/4ecca4e0998d59ee080bb267bd8a2069 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4ecca4e0998d59ee080bb267bd8a2069 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4ee2ca11fdf0136a25fb319315136a3e b/docker/tanner/snare/dist/pages/1/4ee2ca11fdf0136a25fb319315136a3e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4ee2ca11fdf0136a25fb319315136a3e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4f053c7d0b1020a2f50ae6e233277886 b/docker/tanner/snare/dist/pages/1/4f053c7d0b1020a2f50ae6e233277886 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4f053c7d0b1020a2f50ae6e233277886 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4f0b33d52d871eb283c42ae931d0f6b4 b/docker/tanner/snare/dist/pages/1/4f0b33d52d871eb283c42ae931d0f6b4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4f0b33d52d871eb283c42ae931d0f6b4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/4f71d20b001d0dbd356e1729fec2f364 b/docker/tanner/snare/dist/pages/1/4f71d20b001d0dbd356e1729fec2f364 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/4f71d20b001d0dbd356e1729fec2f364 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5026e5c5486e2f54255eef74c245e209 b/docker/tanner/snare/dist/pages/1/5026e5c5486e2f54255eef74c245e209 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5026e5c5486e2f54255eef74c245e209 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5027e69af10f16850509aae5b4e36442 b/docker/tanner/snare/dist/pages/1/5027e69af10f16850509aae5b4e36442 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5027e69af10f16850509aae5b4e36442 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/50386fbd9280c0005a95e3dc1638c21a b/docker/tanner/snare/dist/pages/1/50386fbd9280c0005a95e3dc1638c21a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/50386fbd9280c0005a95e3dc1638c21a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/506dedd9cd00b5b4093490b557cc90cc b/docker/tanner/snare/dist/pages/1/506dedd9cd00b5b4093490b557cc90cc new file mode 100644 index 000000000..ce3c0582f --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/506dedd9cd00b5b4093490b557cc90cc @@ -0,0 +1,2 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[207],{1043:function(t,e,n){"use strict";n.r(e);var i=n(224);document.addEventListener("DOMContentLoaded",function(){return new i.a})},1044:function(t,e,n){n(31),t.exports=n(1043)},180:function(t,e,n){"use strict";var i=n(0),r=n.n(i),s=n(3),o=n.n(s),l=n(5),u=function(){function t(t,e){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:"filter_groups";!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.filterForm=e,this.listFilterElement=n,this.listHolderElement=i,this.filterInputField=r,this.isBusy=!1}return u(t,[{key:"getFilterEndpoint",value:function(){return this.filterForm.getAttribute("action")+"?"+r()(this.filterForm).serialize()}},{key:"getPagePath",value:function(){return this.getFilterEndpoint()}},{key:"initSearch",value:function(){this.debounceFilter=o.a.debounce(this.onFilterInput.bind(this),500),this.unbindEvents(),this.bindEvents()}},{key:"onFilterInput",value:function(){var t={},e=r()(this.filterForm).find('[name="'+this.filterInputField+'"]').val();e&&(t[this.filterInputField]=e),this.filterResults(t),this.setDefaultFilterOption&&this.setDefaultFilterOption()}},{key:"bindEvents",value:function(){this.listFilterElement.addEventListener("input",this.debounceFilter)}},{key:"unbindEvents",value:function(){this.listFilterElement.removeEventListener("input",this.debounceFilter)}},{key:"filterResults",value:function(t){var e=this;return!this.isBusy&&(r()(this.listHolderElement).fadeTo(250,.5),this.isBusy=!0,l.a.get(this.getFilterEndpoint(),{params:t}).then(function(n){e.onFilterSuccess(n,t),e.onFilterComplete()}).catch(function(){return e.onFilterComplete()}))}},{key:"onFilterSuccess",value:function(t,e){t.data.html&&(this.listHolderElement.innerHTML=t.data.html);var n=this.getPagePath(e);return window.history.replaceState({page:n},document.title,n)}},{key:"onFilterComplete",value:function(){this.isBusy=!1,r()(this.listHolderElement).fadeTo(250,1)}}]),t}();e.a=a},224:function(t,e,n){"use strict";var i=n(180);e.a=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var e=document.querySelector("form#project-filter-form"),n=document.querySelector(".js-projects-list-filter"),r=document.querySelector(".js-projects-list-holder");e&&n&&r&&new i.a(e,n,r).initSearch()}}},[[1044,64,65]]]); +//# sourceMappingURL=pages.explore.projects.30bc9dd5.chunk.js.map \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/50997e2a2a0df4812463f40ee084fc3a b/docker/tanner/snare/dist/pages/1/50997e2a2a0df4812463f40ee084fc3a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/50997e2a2a0df4812463f40ee084fc3a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/51580043786d1d97bfc1c45716fbf317 b/docker/tanner/snare/dist/pages/1/51580043786d1d97bfc1c45716fbf317 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/51580043786d1d97bfc1c45716fbf317 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/515d2458282330b12fceb0c52197aae9 b/docker/tanner/snare/dist/pages/1/515d2458282330b12fceb0c52197aae9 new file mode 100644 index 000000000..73cdf3a9a --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/515d2458282330b12fceb0c52197aae9 @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + +Index · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Projects

+

In GitLab, you can create projects for hosting +your codebase, use it as an issue tracker, collaborate on code, and continuously +build, test, and deploy your app with built-in GitLab CI/CD.

+

Your projects can be available +publicly, internally, or privately, at your choice. GitLab does not limit +the number of private projects you create.

+

+Project's features

+

When you create a project in GitLab, you'll have access to a large number of +features:

+

Issues and merge requests:

+
    +
  • +Issue tracker: Discuss implementations with your team within issues +
      +
    • +Issue Boards: Organize and prioritize your workflow
    • +
    • +Multiple Issue Boards: Allow your teams to create their own workflows (Issue Boards) for the same project [STARTER] +
    • +
    +
  • +
  • +Repositories: Host your code in a fully +integrated platform +
      +
    • +Branches: use Git branching strategies to +collaborate on code
    • +
    • +Protected branches: Prevent collaborators +from messing with history or pushing code without review
    • +
    • +Protected tags: Control over who has +permission to create tags, and prevent accidental update or deletion
    • +
    • +Signing commits: use GPG to sign your commits
    • +
    • +Deploy tokens: Manage project-based deploy tokens that allow permanent access to the repository and Container Registry.
    • +
    +
  • +
  • +Merge Requests: Apply your branching +strategy and get reviewed by your team + +
  • +
  • +Labels: Organize issues and merge requests by labels
  • +
  • +Time Tracking: Track estimate time +and time spent on +the conclusion of an issue or merge request
  • +
  • +Milestones: Work towards a target date
  • +
  • +Description templates: Define context-specific +templates for issue and merge request description fields for your project
  • +
  • +Slash commands (quick actions): Textual shortcuts for +common actions on issues or merge requests
  • +
  • Web IDE
  • +
+

GitLab CI/CD:

+ +

Other features:

+
    +
  • +Wiki: Document your GitLab project in an integrated Wiki
  • +
  • +Snippets: Store, share and collaborate on code snippets
  • +
  • +Cycle Analytics: Review your development lifecycle
  • +
  • +Syntax highlighting: An alternative to customize +your code blocks, overriding GitLab's default choice of language
  • +
  • +Badges: Badges for the project overview
  • +
+

+Project's integrations

+

Integrate your project with Jira, Mattermost, +Kubernetes, Slack, and a lot more.

+

+New project

+

Learn how to create a new project in GitLab.

+

+Fork a project

+

You can fork a project in order to:

+
    +
  • Collaborate on code by forking a project and creating a merge request +from your fork to the upstream project
  • +
  • Fork a sample project to work on the top of that
  • +
+

+Project settings

+

Set the project's visibility level and the access levels to its various pages +and perform actions like archiving, renaming or transferring a project.

+

Read through the documentation on project settings.

+

+Import or export a project

+ +

+Project's members

+

Learn how to add members to your projects.

+

+Leave a project

+

Leave project will only display on the project's dashboard +when a project is part of a group (under a +group namespace). +If you choose to leave a project you will no longer be a project +member, therefore, unable to contribute.

+

+Redirects when changing repository paths

+

When a repository path changes, it is essential to smoothly transition from the +old location to the new one. GitLab provides two kinds of redirects: the web UI +and Git push/pull redirects.

+

Depending on the situation, different things apply.

+

When renaming a user, +changing a group path or renaming a repository:

+
    +
  • Existing web URLs for the namespace and anything under it (e.g., projects) will +redirect to the new URLs.
  • +
  • Starting with GitLab 10.3, existing Git remote URLs for projects under the +namespace will redirect to the new remote URL. Every time you push/pull to a +repository that has changed its location, a warning message to update +your remote will be displayed instead of rejecting your action. +This means that any automation scripts, or Git clients will continue to +work after a rename, making any transition a lot smoother.
  • +
  • The redirects will be available as long as the original path is not claimed by +another group, user or project.
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/51722ff5a84feeff3789d6598e93771f b/docker/tanner/snare/dist/pages/1/51722ff5a84feeff3789d6598e93771f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/51722ff5a84feeff3789d6598e93771f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/51816a837257136a99036040f43cefcd b/docker/tanner/snare/dist/pages/1/51816a837257136a99036040f43cefcd new file mode 100644 index 000000000..8b7a5db5b --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/51816a837257136a99036040f43cefcd @@ -0,0 +1,658 @@ + + + + + + + + + + + + + + + + + + +Readme · Api · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab API

+

Automate GitLab via a simple and powerful API. All definitions can be found +under /lib/api.

+

+Resources

+

Documentation for various API resources can be found separately in the +following locations:

+ +

+Road to GraphQL

+

Going forward, we will start on moving to +GraphQL and deprecate the use of +controller-specific endpoints. GraphQL has a number of benefits:

+
    +
  1. We avoid having to maintain two different APIs.
  2. +
  3. Callers of the API can request only what they need.
  4. +
  5. It is versioned by default.
  6. +
+

It will co-exist with the current v4 REST API. If we have a v5 API, this should +be a compatibility layer on top of GraphQL.

+

Although there were some patenting and licensing concerns with GraphQL, these +have been resolved to our satisfaction by the relicensing of the reference +implementations under MIT, and the use of the OWF license for the GraphQL +specification.

+

+Compatibility Guidelines

+

The HTTP API is versioned using a single number, the current one being 4. This +number symbolises the same as the major version number as described by +SemVer. This mean that backward incompatible changes +will require this version number to change. However, the minor version is +not explicit. This allows for a stable API endpoint, but also means new +features can be added to the API in the same version number.

+

New features and bug fixes are released in tandem with a new GitLab, and apart +from incidental patch and security releases, are released on the 22nd each +month. Backward incompatible changes (e.g. endpoints removal, parameters +removal etc.), as well as removal of entire API versions are done in tandem +with a major point release of GitLab itself. All deprecations and changes +between two versions should be listed in the documentation. For the changes +between v3 and v4; please read the v3 to v4 documentation

+

+Current status

+

Currently only API version v4 is available. Version v3 was removed in +GitLab 11.0.

+

+Basic usage

+

API requests should be prefixed with api and the API version. The API version +is defined in lib/api.rb. For example, the root of the v4 API +is at /api/v4.

+

Example of a valid API request using cURL:

+
curl "https://gitlab.example.com/api/v4/projects"
+

The API uses JSON to serialize data. You don't need to specify .json at the +end of an API URL.

+

+Authentication

+

Most API requests require authentication, or will only return public data when +authentication is not provided. For +those cases where it is not required, this will be mentioned in the documentation +for each individual endpoint. For example, the /projects/:id endpoint.

+

There are three ways to authenticate with the GitLab API:

+
    +
  1. OAuth2 tokens
  2. +
  3. Personal access tokens
  4. +
  5. Session cookie
  6. +
+

For admins who want to authenticate with the API as a specific user, or who want to build applications or scripts that do so, two options are available:

+
    +
  1. Impersonation tokens
  2. +
  3. Sudo
  4. +
+

If authentication information is invalid or omitted, an error message will be +returned with status code 401:

+
{
+  "message": "401 Unauthorized"
+}
+

+OAuth2 tokens

+

You can use an OAuth2 token to authenticate with the API by passing it in either the +access_token parameter or the Authorization header.

+

Example of using the OAuth2 token in a parameter:

+
curl https://gitlab.example.com/api/v4/projects?access_token=OAUTH-TOKEN
+

Example of using the OAuth2 token in a header:

+
curl --header "Authorization: Bearer OAUTH-TOKEN" https://gitlab.example.com/api/v4/projects
+

Read more about GitLab as an OAuth2 provider.

+

+Personal access tokens

+

You can use a personal access token to authenticate with the API by passing it in either the +private_token parameter or the Private-Token header.

+

Example of using the personal access token in a parameter:

+
curl https://gitlab.example.com/api/v4/projects?private_token=9koXpg98eAheJpvBs5tK
+

Example of using the personal access token in a header:

+
curl --header "Private-Token: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects
+

Read more about personal access tokens.

+

+Session cookie

+

When signing in to the main GitLab application, a _gitlab_session cookie is +set. The API will use this cookie for authentication if it is present, but using +the API to generate a new session cookie is currently not supported.

+

The primary user of this authentication method is the web frontend of GitLab itself, +which can use the API as the authenticated user to get a list of their projects, +for example, without needing to explicitly pass an access token.

+

+Impersonation tokens

+
+

Introduced in GitLab 9.0. Needs admin permissions.

+
+

Impersonation tokens are a type of personal access token +that can only be created by an admin for a specific user. They are a great fit +if you want to build applications or scripts that authenticate with the API as a specific user.

+

They are an alternative to directly using the user's password or one of their +personal access tokens, and to using the Sudo feature, since the user's (or admin's, in the case of Sudo) +password/token may not be known or may change over time.

+

For more information, refer to the +users API docs.

+

Impersonation tokens are used exactly like regular personal access tokens, and can be passed in either the +private_token parameter or the Private-Token header.

+

+Sudo

+
+

Needs admin permissions.

+
+

All API requests support performing an API call as if you were another user, +provided you are authenticated as an administrator with an OAuth or Personal Access Token that has the sudo scope.

+

You need to pass the sudo parameter either via query string or a header with an ID/username of +the user you want to perform the operation as. If passed as a header, the +header name must be Sudo.

+

If a non administrative access token is provided, an error message will +be returned with status code 403:

+
{
+  "message": "403 Forbidden - Must be admin to use sudo"
+}
+

If an access token without the sudo scope is provided, an error message will +be returned with status code 403:

+
{
+  "error": "insufficient_scope",
+  "error_description": "The request requires higher privileges than provided by the access token.",
+  "scope": "sudo"
+}
+

If the sudo user ID or username cannot be found, an error message will be +returned with status code 404:

+
{
+  "message": "404 User with ID or username '123' Not Found"
+}
+
+

Example of a valid API call and a request using cURL with sudo request, +providing a username:

+
GET /projects?private_token=9koXpg98eAheJpvBs5tK&sudo=username
+
curl --header "Private-Token: 9koXpg98eAheJpvBs5tK" --header "Sudo: username" "https://gitlab.example.com/api/v4/projects"
+

Example of a valid API call and a request using cURL with sudo request, +providing an ID:

+
GET /projects?private_token=9koXpg98eAheJpvBs5tK&sudo=23
+
curl --header "Private-Token: 9koXpg98eAheJpvBs5tK" --header "Sudo: 23" "https://gitlab.example.com/api/v4/projects"
+

+Status codes

+

The API is designed to return different status codes according to context and +action. This way, if a request results in an error, the caller is able to get +insight into what went wrong.

+

The following table gives an overview of how the API functions generally behave.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Request typeDescription
GETAccess one or more resources and return the result as JSON.
POSTReturn 201 Created if the resource is successfully created and return the newly created resource as JSON.
+GET / PUT +Return 200 OK if the resource is accessed or modified successfully. The (modified) result is returned as JSON.
DELETEReturns 204 No Content if the resource was deleted successfully.
+

The following table shows the possible return codes for API requests.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Return valuesDescription
200 OKThe GET, PUT or DELETE request was successful, the resource(s) itself is returned as JSON.
204 No ContentThe server has successfully fulfilled the request and that there is no additional content to send in the response payload body.
201 CreatedThe POST request was successful and the resource is returned as JSON.
304 Not ModifiedIndicates that the resource has not been modified since the last request.
400 Bad RequestA required attribute of the API request is missing, e.g., the title of an issue is not given.
401 UnauthorizedThe user is not authenticated, a valid user token is necessary.
403 ForbiddenThe request is not allowed, e.g., the user is not allowed to delete a project.
404 Not FoundA resource could not be accessed, e.g., an ID for a resource could not be found.
405 Method Not AllowedThe request is not supported.
409 ConflictA conflicting resource already exists, e.g., creating a project with a name that already exists.
412Indicates the request was denied. May happen if the If-Unmodified-Since header is provided when trying to delete a resource, which was modified in between.
422 UnprocessableThe entity could not be processed.
500 Server ErrorWhile handling the request something went wrong server-side.
+

+Pagination

+

Sometimes the returned result will span across many pages. When listing +resources you can pass the following parameters:

+ + + + + + + + + + + + + + + + + +
ParameterDescription
pagePage number (default: 1)
per_pageNumber of items to list per page (default: 20, max: 100)
+

In the example below, we list 50 namespaces per page.

+
curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/namespaces?per_page=50
+

+Pagination Link header

+

Link headers are sent back with each +response. They have rel set to prev/next/first/last and contain the relevant +URL. Please use these links instead of generating your own URLs.

+

In the cURL example below, we limit the output to 3 items per page (per_page=3) +and we request the second page (page=2) of comments of the issue +with ID 8 which belongs to the project with ID 8:

+
curl --head --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/8/issues/8/notes?per_page=3&page=2
+

The response will then be:

+
HTTP/1.1 200 OK
+Cache-Control: no-cache
+Content-Length: 1103
+Content-Type: application/json
+Date: Mon, 18 Jan 2016 09:43:18 GMT
+Link: <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=1&per_page=3>; rel="prev", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=3&per_page=3>; rel="next", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=1&per_page=3>; rel="first", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=3&per_page=3>; rel="last"
+Status: 200 OK
+Vary: Origin
+X-Next-Page: 3
+X-Page: 2
+X-Per-Page: 3
+X-Prev-Page: 1
+X-Request-Id: 732ad4ee-9870-4866-a199-a9db0cde3c86
+X-Runtime: 0.108688
+X-Total: 8
+X-Total-Pages: 3
+

+Other pagination headers

+

Additional pagination headers are also sent back.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HeaderDescription
X-TotalThe total number of items
X-Total-PagesThe total number of pages
X-Per-PageThe number of items per page
X-PageThe index of the current page (starting at 1)
X-Next-PageThe index of the next page
X-Prev-PageThe index of the previous page
+

+Namespaced path encoding

+

If using namespaced API calls, make sure that the NAMESPACE/PROJECT_NAME is +URL-encoded.

+

For example, / is represented by %2F:

+
GET /api/v4/projects/diaspora%2Fdiaspora
+

+Branches & tags name encoding

+

If your branch or tag contains a /, make sure the branch/tag name is +URL-encoded.

+

For example, / is represented by %2F:

+
GET /api/v4/projects/1/branches/my%2Fbranch/commits
+

+id vs iid +

+

When you work with the API, you may notice two similar fields in API entities: +id and iid. The main difference between them is scope.

+

For example, an issue might have id: 46 and iid: 5.

+ + + + + + + + + + + + + + + + + +
ParameterDescription
idIs unique across all issues and is used for any API call
iidIs unique only in scope of a single project. When you browse issues or merge requests with the Web UI, you see the iid +
+

That means that if you want to get an issue via the API you should use the id:

+
GET /projects/42/issues/:id
+

On the other hand, if you want to create a link to a web page you should use +the iid:

+
GET /projects/42/issues/:iid
+

+Data validation and error reporting

+

When working with the API you may encounter validation errors, in which case +the API will answer with an HTTP 400 status.

+

Such errors appear in two cases:

+
    +
  • A required attribute of the API request is missing, e.g., the title of an +issue is not given
  • +
  • An attribute did not pass the validation, e.g., user bio is too long
  • +
+

When an attribute is missing, you will get something like:

+
HTTP/1.1 400 Bad Request
+Content-Type: application/json
+{
+    "message":"400 (Bad request) \"title\" not given"
+}
+

When a validation error occurs, error messages will be different. They will +hold all details of validation errors:

+
HTTP/1.1 400 Bad Request
+Content-Type: application/json
+{
+    "message": {
+        "bio": [
+            "is too long (maximum is 255 characters)"
+        ]
+    }
+}
+

This makes error messages more machine-readable. The format can be described as +follows:

+
{
+    "message": {
+        "<property-name>": [
+            "<error-message>",
+            "<error-message>",
+            ...
+        ],
+        "<embed-entity>": {
+            "<property-name>": [
+                "<error-message>",
+                "<error-message>",
+                ...
+            ],
+        }
+    }
+}
+

+Unknown route

+

When you try to access an API URL that does not exist you will receive 404 Not Found.

+
HTTP/1.1 404 Not Found
+Content-Type: application/json
+{
+    "error": "404 Not Found"
+}
+

+Encoding + in ISO 8601 dates

+

If you need to include a + in a query parameter, you may need to use %2B instead due +a W3 recommendation that +causes a + to be interpreted as a space. For example, in an ISO 8601 date, you may want to pass +a time in Mountain Standard Time, such as:

+
2017-10-17T23:11:13.000+05:30
+

The correct encoding for the query parameter would be:

+
2017-10-17T23:11:13.000%2B05:30
+

+Clients

+

There are many unofficial GitLab API Clients for most of the popular +programming languages. Visit the GitLab website for a complete list.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/519412a92173093af69ccfc0a1f32342 b/docker/tanner/snare/dist/pages/1/519412a92173093af69ccfc0a1f32342 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/519412a92173093af69ccfc0a1f32342 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/51c04b1ff64fb248ef12a3120d917c07 b/docker/tanner/snare/dist/pages/1/51c04b1ff64fb248ef12a3120d917c07 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/51c04b1ff64fb248ef12a3120d917c07 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/51c5764f5efd37dc8573b5686f4537f7 b/docker/tanner/snare/dist/pages/1/51c5764f5efd37dc8573b5686f4537f7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/51c5764f5efd37dc8573b5686f4537f7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/51fabefd0eec1e3994834f3e2f90a087 b/docker/tanner/snare/dist/pages/1/51fabefd0eec1e3994834f3e2f90a087 new file mode 100644 index 000000000..506c70295 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/51fabefd0eec1e3994834f3e2f90a087 @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/521ce8954bf7f30fd6566688910a9e96 b/docker/tanner/snare/dist/pages/1/521ce8954bf7f30fd6566688910a9e96 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/521ce8954bf7f30fd6566688910a9e96 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/525af5bd6f90f426c7b6daa113573b0c b/docker/tanner/snare/dist/pages/1/525af5bd6f90f426c7b6daa113573b0c new file mode 100644 index 000000000..9784ca545 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/525af5bd6f90f426c7b6daa113573b0c @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/527563844c7a53d094694cc791622530 b/docker/tanner/snare/dist/pages/1/527563844c7a53d094694cc791622530 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/527563844c7a53d094694cc791622530 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/53046a35971a552277790ec6fab1039b b/docker/tanner/snare/dist/pages/1/53046a35971a552277790ec6fab1039b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/53046a35971a552277790ec6fab1039b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/531a7629a8df586f44f1c7dd1ac3420b b/docker/tanner/snare/dist/pages/1/531a7629a8df586f44f1c7dd1ac3420b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/531a7629a8df586f44f1c7dd1ac3420b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/538190d40d5bbb88db653a4eff5b3475 b/docker/tanner/snare/dist/pages/1/538190d40d5bbb88db653a4eff5b3475 new file mode 100644 index 000000000..8e1b19793 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/538190d40d5bbb88db653a4eff5b3475 @@ -0,0 +1,1047 @@ + + + + + + + + + + + + + + + + + + +Index · Autodevops · Topics · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Auto DevOps

+
+

Introduced in GitLab 10.0. Generally available on GitLab 11.0.

+
+

Auto DevOps automatically detects, builds, tests, deploys, and monitors your +applications.

+

+Overview

+

With Auto DevOps, the software development process becomes easier to set up +as every project can have a complete workflow from verification to monitoring +without needing to configure anything. Just push your code and GitLab takes +care of everything else. This makes it easier to start new projects and brings +consistency to how applications are set up throughout a company.

+

+Quick start

+

If you are using GitLab.com, see the quick start guide +for using Auto DevOps with GitLab.com and a Kubernetes cluster on Google Kubernetes +Engine.

+

+Comparison to application platforms and PaaS

+

Auto DevOps provides functionality described by others as an application +platform or as a Platform as a Service (PaaS). It takes inspiration from the +innovative work done by Heroku and goes beyond it +in a couple of ways:

+
    +
  1. Auto DevOps works with any Kubernetes cluster, you're not limited to running +on GitLab's infrastructure (note that many features also work without Kubernetes).
  2. +
  3. There is no additional cost (no markup on the infrastructure costs), and you +can use a self-hosted Kubernetes cluster or Containers as a Service on any +public cloud (for example Google Kubernetes Engine).
  4. +
  5. Auto DevOps has more features including security testing, performance testing, +and code quality testing.
  6. +
  7. It offers an incremental graduation path. If you need advanced customizations +you can start modifying the templates without having to start over on a +completely different platform.
  8. +
+

+Features

+

Comprised of a set of stages, Auto DevOps brings these best practices to your +project in a simple and automatic way:

+
    +
  1. Auto Build
  2. +
  3. Auto Test
  4. +
  5. +Auto Code Quality [STARTER] +
  6. +
  7. +Auto SAST (Static Application Security Testing) [ULTIMATE] +
  8. +
  9. +Auto Dependency Scanning [ULTIMATE] +
  10. +
  11. +Auto License Management [ULTIMATE] +
  12. +
  13. Auto Container Scanning
  14. +
  15. Auto Review Apps
  16. +
  17. +Auto DAST (Dynamic Application Security Testing) [ULTIMATE] +
  18. +
  19. Auto Deploy
  20. +
  21. +Auto Browser Performance Testing [PREMIUM] +
  22. +
  23. Auto Monitoring
  24. +
+

As Auto DevOps relies on many different components, it's good to have a basic +knowledge of the following:

+ +

Auto DevOps provides great defaults for all the stages; you can, however, +customize almost everything to your needs.

+

For an overview on the creation of Auto DevOps, read the blog post From 2/3 of the Self-Hosted Git Market, to the Next-Generation CI System, to Auto DevOps.

+

+Requirements

+

TIP: Tip: +For self-hosted installations, the easiest way to make use of Auto DevOps is to +install GitLab inside a Kubernetes cluster using the GitLab Omnibus Helm Chart +which automatically installs and configures everything you need!

+

To make full use of Auto DevOps, you will need:

+
    +
  1. +GitLab Runner (needed for all stages) - Your Runner needs to be +configured to be able to run Docker. Generally this means using the +Docker or Kubernetes +executor, with +privileged mode enabled. +The Runners do not need to be installed in the Kubernetes cluster, but the +Kubernetes executor is easy to use and is automatically autoscaling. +Docker-based Runners can be configured to autoscale as well, using Docker +Machine. Runners +should be registered as shared Runners +for the entire GitLab instance, or specific Runners +that are assigned to specific projects.
  2. +
  3. +Base domain (needed for Auto Review Apps and Auto Deploy) - You will need +a domain configured with wildcard DNS which is going to be used by all of your +Auto DevOps applications. Read the specifics.
  4. +
  5. +Kubernetes (needed for Auto Review Apps, Auto Deploy, and Auto Monitoring) - +To enable deployments, you will need Kubernetes 1.5+. You need a Kubernetes cluster +for the project, or a Kubernetes default service template +for the entire GitLab installation. +
      +
    1. +A load balancer - You can use NGINX ingress by deploying it to your +Kubernetes cluster using the +nginx-ingress +Helm chart.
    2. +
    3. +Wildcard TLS termination - You can deploy the +kube-lego +Helm chart to your Kubernetes cluster to automatically issue certificates +for your domains using Let's Encrypt.
    4. +
    +
  6. +
  7. +Prometheus (needed for Auto Monitoring) - To enable Auto Monitoring, you +will need Prometheus installed somewhere (inside or outside your cluster) and +configured to scrape your Kubernetes cluster. To get response metrics +(in addition to system metrics), you need to +configure Prometheus to monitor NGINX. +The Prometheus service +integration needs to be enabled for the project, or enabled as a +default service template +for the entire GitLab installation.
  8. +
+

NOTE: Note: +If you do not have Kubernetes or Prometheus installed, then Auto Review Apps, +Auto Deploy, and Auto Monitoring will be silently skipped.

+

+Auto DevOps base domain

+

The Auto DevOps base domain is required if you want to make use of Auto +Review Apps and Auto Deploy. It can be defined +in three places:

+
    +
  • either under the project's CI/CD settings while enabling Auto DevOps +
  • +
  • or in instance-wide settings in the admin area > Settings under the "Continuous Integration and Delivery" section
  • +
  • or at the project or group level as a variable: AUTO_DEVOPS_DOMAIN (required if you want to use multiple clusters)
  • +
+

A wildcard DNS A record matching the base domain(s) is required, for example, +given a base domain of example.com, you'd need a DNS entry like:

+
*.example.com   3600     A     1.2.3.4
+

In this case, example.com is the domain name under which the deployed apps will be served, +and 1.2.3.4 is the IP address of your load balancer; generally NGINX +(see requirements). How to set up the DNS record is beyond +the scope of this document; you should check with your DNS provider.

+

Alternatively you can use free public services like nip.io +which provide automatic wildcard DNS without any configuration. Just set the +Auto DevOps base domain to 1.2.3.4.nip.io.

+

Once set up, all requests will hit the load balancer, which in turn will route +them to the Kubernetes pods that run your application(s).

+

NOTE: Note: +If GitLab is installed using the GitLab Omnibus Helm Chart, there are two +options: provide a static IP, or have one assigned. For more information see the +relevant docs on the network prerequisites.

+

+Using multiple Kubernetes clusters [PREMIUM] +

+

When using Auto DevOps, you may want to deploy different environments to +different Kubernetes clusters. This is possible due to the 1:1 connection that +exists between them.

+

In the Auto DevOps template +(used behind the scenes by Auto DevOps), there are currently 3 defined environment names that you need to know:

+
    +
  • +review/ (every environment starting with review/)
  • +
  • staging
  • +
  • production
  • +
+

Those environments are tied to jobs that use Auto Deploy, so +except for the environment scope, they would also need to have a different +domain they would be deployed to. This is why you need to define a separate +AUTO_DEVOPS_DOMAIN variable for all the above +based on the environment.

+

The following table is an example of how the three different clusters would +be configured.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cluster nameCluster environment scope +AUTO_DEVOPS_DOMAIN variable valueVariable environment scopeNotes
reviewreview/*review.example.comreview/*The review cluster which will run all Review Apps. * is a wildcard, which means it will be used by every environment name starting with review/.
stagingstagingstaging.example.comstaging(Optional) The staging cluster which will run the deployments of the staging environments. You need to enable it first.
productionproductionexample.comproductionThe production cluster which will run the deployments of the production environment. You can use incremental rollouts.
+

To add a different cluster for each environment:

+
    +
  1. +

    Navigate to your project's Operations > Kubernetes and create the Kubernetes clusters +with their respective environment scope as described from the table above.

    +

    Auto DevOps multiple clusters

    +
  2. +
  3. +

    After the clusters are created, navigate to each one and install Helm Tiller +and Ingress.

    +
  4. +
  5. +

    Make sure you have configured your DNS with the +specified Auto DevOps domains.

    +
  6. +
  7. +

    Navigate to your project's Settings > CI/CD > Variables and add +the AUTO_DEVOPS_DOMAIN variables with their respective environment +scope.

    +

    Auto DevOps domain variables

    +
  8. +
+

Now that all is configured, you can test your setup by creating a merge request +and verifying that your app is deployed as a review app in the Kubernetes +cluster with the review/* environment scope. Similarly, you can check the +other environments.

+

+Enabling Auto DevOps

+

If you haven't done already, read the requirements to make +full use of Auto DevOps. If this is your fist time, we recommend you follow the +quick start guide.

+

To enable Auto DevOps to your project:

+
    +
  1. Check that your project doesn't have a .gitlab-ci.yml, or remove it otherwise
  2. +
  3. Go to your project's Settings > CI/CD > Auto DevOps +
  4. +
  5. Select "Enable Auto DevOps"
  6. +
  7. Optionally, but recommended, add in the base domain +that will be used by Kubernetes to deploy your application +and choose the deployment strategy +
  8. +
  9. Hit Save changes for the changes to take effect
  10. +
+

Once saved, an Auto DevOps pipeline will be triggered on the default branch.

+

NOTE: Note: +For GitLab versions 10.0 - 10.2, when enabling Auto DevOps, a pipeline needs to be +manually triggered either by pushing a new commit to the repository or by visiting +https://example.gitlab.com/<username>/<project>/pipelines/new and creating +a new pipeline for your default branch, generally master.

+

NOTE: Note: +If you are a GitLab Administrator, you can enable Auto DevOps instance wide +in Admin Area > Settings > Continuous Integration and Deployment. Doing that, +all the projects that haven't explicitly set an option will have Auto DevOps +enabled by default.

+

+Deployment strategy

+
+

Introduced in GitLab 11.0.

+
+

You can change the deployment strategy used by Auto DevOps by going to your +project's Settings > CI/CD > Auto DevOps.

+

The available options are:

+ +

+Stages of Auto DevOps

+

The following sections describe the stages of Auto DevOps. Read them carefully +to understand how each one works.

+

+Auto Build

+

Auto Build creates a build of the application in one of two ways:

+
    +
  • If there is a Dockerfile, it will use docker build to create a Docker image.
  • +
  • Otherwise, it will use Herokuish +and Heroku buildpacks +to automatically detect and build the application into a Docker image.
  • +
+

Either way, the resulting Docker image is automatically pushed to the +Container Registry and tagged with the commit SHA.

+

CAUTION: Important: +If you are also using Auto Review Apps and Auto Deploy and choose to provide +your own Dockerfile, make sure you expose your application to port +5000 as this is the port assumed by the default Helm chart.

+

+Auto Test

+

Auto Test automatically runs the appropriate tests for your application using +Herokuish and Heroku +buildpacks by analyzing +your project to detect the language and framework. Several languages and +frameworks are detected automatically, but if your language is not detected, +you may succeed with a custom buildpack. Check the +currently supported languages.

+

NOTE: Note: +Auto Test uses tests you already have in your application. If there are no +tests, it's up to you to add them.

+

+Auto Code Quality [STARTER] +

+

Auto Code Quality uses the +Code Quality image to run +static analysis and other code checks on the current code. The report is +created, and is uploaded as an artifact which you can later download and check +out.

+

In GitLab Starter, differences between the source and +target branches are also +shown in the merge request widget.

+

+Auto SAST [ULTIMATE] +

+
+

Introduced in GitLab Ultimate 10.3.

+
+

Static Application Security Testing (SAST) uses the +SAST Docker image to run static +analysis on the current code and checks for potential security issues. Once the +report is created, it's uploaded as an artifact which you can later download and +check out.

+

In GitLab Ultimate, any security warnings are also +shown in the merge request widget.

+

+Auto Dependency Scanning [ULTIMATE] +

+
+

Introduced in GitLab Ultimate 10.7.

+
+

Dependency Scanning uses the +Dependency Scanning Docker image +to run analysis on the project dependencies and checks for potential security issues. Once the +report is created, it's uploaded as an artifact which you can later download and +check out.

+

Any security warnings are also +shown in the merge request widget.

+

+Auto License Management [ULTIMATE] +

+
+

Introduced in GitLab Ultimate 11.0.

+
+

License Management uses the +License Management Docker image +to search the project dependencies for their license. Once the +report is created, it's uploaded as an artifact which you can later download and +check out.

+

Any licenses are also +shown in the merge request widget.

+

+Auto Container Scanning

+
+

Introduced in GitLab 10.4.

+
+

Vulnerability Static Analysis for containers uses +Clair to run static analysis on a +Docker image and checks for potential security issues. Once the report is +created, it's uploaded as an artifact which you can later download and +check out.

+

In GitLab Ultimate, any security warnings are also +shown in the merge request widget.

+

+Auto Review Apps

+

NOTE: Note: +This is an optional step, since many projects do not have a Kubernetes cluster +available. If the requirements are not met, the job will +silently be skipped.

+

CAUTION: Caution: +Your apps should not be manipulated outside of Helm (using Kubernetes directly.) +This can cause confusion with Helm not detecting the change, and subsequent +deploys with Auto DevOps can undo your changes. Also, if you change something +and want to undo it by deploying again, Helm may not detect that anything changed +in the first place, and thus not realize that it needs to re-apply the old config.

+

Review Apps are temporary application environments based on the +branch's code so developers, designers, QA, product managers, and other +reviewers can actually see and interact with code changes as part of the review +process. Auto Review Apps create a Review App for each branch.

+

The Review App will have a unique URL based on the project name, the branch +name, and a unique number, combined with the Auto DevOps base domain. For +example, user-project-branch-1234.example.com. A link to the Review App shows +up in the merge request widget for easy discovery. When the branch is deleted, +for example after the merge request is merged, the Review App will automatically +be deleted.

+

+Auto DAST [ULTIMATE] +

+
+

Introduced in GitLab Ultimate 10.4.

+
+

Dynamic Application Security Testing (DAST) uses the +popular open source tool OWASP ZAProxy +to perform an analysis on the current code and checks for potential security +issues. Once the report is created, it's uploaded as an artifact which you can +later download and check out.

+

In GitLab Ultimate, any security warnings are also +shown in the merge request widget.

+

+Auto Browser Performance Testing [PREMIUM] +

+
+

Introduced in GitLab Premium 10.4.

+
+

Auto Browser Performance Testing utilizes the Sitespeed.io container to measure the performance of a web page. A JSON report is created and uploaded as an artifact, which includes the overall performance score for each page. By default, the root page of Review and Production environments will be tested. If you would like to add additional URL's to test, simply add the paths to a file named .gitlab-urls.txt in the root directory, one per line. For example:

+
/
+/features
+/direction
+

In GitLab Premium, performance differences between the source +and target branches are shown in the merge request widget.

+

+Auto Deploy

+

NOTE: Note: +This is an optional step, since many projects do not have a Kubernetes cluster +available. If the requirements are not met, the job will +silently be skipped.

+

CAUTION: Caution: +Your apps should not be manipulated outside of Helm (using Kubernetes directly.) +This can cause confusion with Helm not detecting the change, and subsequent +deploys with Auto DevOps can undo your changes. Also, if you change something +and want to undo it by deploying again, Helm may not detect that anything changed +in the first place, and thus not realize that it needs to re-apply the old config.

+

After a branch or merge request is merged into the project's default branch (usually +master), Auto Deploy deploys the application to a production environment in +the Kubernetes cluster, with a namespace based on the project name and unique +project ID, for example project-4321.

+

Auto Deploy doesn't include deployments to staging or canary by default, but the +Auto DevOps template contains job definitions for these tasks if you want to +enable them.

+

You can make use of environment variables to automatically +scale your pod replicas.

+

It's important to note that when a project is deployed to a Kubernetes cluster, +it relies on a Docker image that has been pushed to the +GitLab Container Registry. Kubernetes +fetches this image and uses it to run the application. If the project is public, +the image can be accessed by Kubernetes without any authentication, allowing us +to have deployments more usable. If the project is private/internal, the +Registry requires credentials to pull the image. Currently, this is addressed +by providing CI_JOB_TOKEN as the password that can be used, but this token will +no longer be valid as soon as the deployment job finishes. This means that +Kubernetes can run the application, but in case it should be restarted or +executed somewhere else, it cannot be accessed again.

+
+

Introduced in GitLab 11.0.

+
+

For internal and private projects a GitLab Deploy Token +will be automatically created, when Auto DevOps is enabled and the Auto DevOps settings are saved. This Deploy Token +can be used for permanent access to the registry.

+

Note: Note +When the GitLab Deploy Token has been manually revoked, it won't be automatically created.

+

+Auto Monitoring

+

NOTE: Note: +Check the requirements for Auto Monitoring to make this stage +work.

+

Once your application is deployed, Auto Monitoring makes it possible to monitor +your application's server and response metrics right out of the box. Auto +Monitoring uses Prometheus to +get system metrics such as CPU and memory usage directly from +Kubernetes, +and response metrics such as HTTP error rates, latency, and throughput from the +NGINX server.

+

The metrics include:

+
    +
  • +Response Metrics: latency, throughput, error rate
  • +
  • +System Metrics: CPU utilization, memory utilization
  • +
+

If GitLab has been deployed using the GitLab Omnibus Helm Chart, no +configuration is required.

+

If you have installed GitLab using a different method, you need to:

+
    +
  1. +Deploy Prometheus into your Kubernetes cluster
  2. +
  3. If you would like response metrics, ensure you are running at least version +0.9.0 of NGINX Ingress and +enable Prometheus metrics.
  4. +
  5. Finally, annotate +the NGINX Ingress deployment to be scraped by Prometheus using +prometheus.io/scrape: "true" and prometheus.io/port: "10254".
  6. +
+

To view the metrics, open the +Monitoring dashboard for a deployed environment.

+

Auto Metrics

+

+Customizing

+

While Auto DevOps provides great defaults to get you started, you can customize +almost everything to fit your needs; from custom buildpacks, +to Dockerfiles, Helm charts, or +even copying the complete CI/CD configuration +into your project to enable staging and canary deployments, and more.

+

+Custom buildpacks

+

If the automatic buildpack detection fails for your project, or if you want to +use a custom buildpack, you can override the buildpack(s) using a project variable +or a .buildpacks file in your project:

+
    +
  • +Project variable - Create a project variable BUILDPACK_URL with the URL +of the buildpack to use.
  • +
  • +.buildpacks file - Add a file in your project's repo called .buildpacks +and add the URL of the buildpack to use on a line in the file. If you want to +use multiple buildpacks, you can enter them in, one on each line.
  • +
+

CAUTION: Caution: +Using multiple buildpacks isn't yet supported by Auto DevOps.

+

+Custom Dockerfile +

+

If your project has a Dockerfile in the root of the project repo, Auto DevOps +will build a Docker image based on the Dockerfile rather than using buildpacks. +This can be much faster and result in smaller images, especially if your +Dockerfile is based on Alpine.

+

+Custom Helm Chart

+

Auto DevOps uses Helm to deploy your application to Kubernetes. +You can override the Helm chart used by bundling up a chart into your project +repo or by specifying a project variable:

+
    +
  • +Bundled chart - If your project has a ./chart directory with a Chart.yaml +file in it, Auto DevOps will detect the chart and use it instead of the default +one. +This can be a great way to control exactly how your application is deployed.
  • +
  • +Project variable - Create a project variable +AUTO_DEVOPS_CHART with the URL of a custom chart to use.
  • +
+

+Customizing .gitlab-ci.yml +

+

If you want to modify the CI/CD pipeline used by Auto DevOps, you can copy the +Auto DevOps template into your project's repo and edit as you see fit.

+

Assuming that your project is new or it doesn't have a .gitlab-ci.yml file +present:

+
    +
  1. From your project home page, either click on the "Set up CI/CD" button, or click +on the plus button and (+), then "New file"
  2. +
  3. Pick .gitlab-ci.yml as the template type
  4. +
  5. Select "Auto-DevOps" from the template dropdown
  6. +
  7. Edit the template or add any jobs needed
  8. +
  9. Give an appropriate commit message and hit "Commit changes"
  10. +
+

TIP: Tip: The Auto DevOps template includes useful comments to help you +customize it. For example, if you want deployments to go to a staging environment +instead of directly to a production one, you can enable the staging job by +renaming .staging to staging. Then make sure to uncomment the when key of +the production job to turn it into a manual action instead of deploying +automatically.

+

+PostgreSQL database support

+

In order to support applications that require a database, +PostgreSQL is provisioned by default. The credentials to access +the database are preconfigured, but can be customized by setting the associated +variables. These credentials can be used for defining a +DATABASE_URL of the format:

+
postgres://user:password@postgres-host:postgres-port/postgres-database
+

+Environment variables

+

The following variables can be used for setting up the Auto DevOps domain, +providing a custom Helm chart, or scaling your application. PostgreSQL can be +also be customized, and you can easily use a custom buildpack.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VariableDescription
AUTO_DEVOPS_DOMAINThe Auto DevOps domain; by default set automatically by the Auto DevOps setting.
AUTO_DEVOPS_CHARTThe Helm Chart used to deploy your apps; defaults to the one provided by GitLab.
REPLICASThe number of replicas to deploy; defaults to 1.
PRODUCTION_REPLICASThe number of replicas to deploy in the production environment. This takes precedence over REPLICAS; defaults to 1.
CANARY_REPLICASThe number of canary replicas to deploy for Canary Deployments; defaults to 1
CANARY_PRODUCTION_REPLICASThe number of canary replicas to deploy for Canary Deployments in the production environment. This takes precedence over CANARY_REPLICAS; defaults to 1
POSTGRES_ENABLEDWhether PostgreSQL is enabled; defaults to "true". Set to false to disable the automatic deployment of PostgreSQL.
POSTGRES_USERThe PostgreSQL user; defaults to user. Set it to use a custom username.
POSTGRES_PASSWORDThe PostgreSQL password; defaults to testing-password. Set it to use a custom password.
POSTGRES_DBThe PostgreSQL database name; defaults to the value of $CI_ENVIRONMENT_SLUG. Set it to use a custom database name.
BUILDPACK_URLThe buildpack's full URL. It can point to either Git repositories or a tarball URL. For Git repositories, it is possible to point to a specific ref, for example https://github.com/heroku/heroku-buildpack-ruby.git#v142 +
SAST_CONFIDENCE_LEVELThe minimum confidence level of security issues you want to be reported; 1 for Low, 2 for Medium, 3 for High; defaults to 3.
DEP_SCAN_DISABLE_REMOTE_CHECKSWhether remote Dependency Scanning checks are disabled; defaults to "false". Set to "true" to disable checks that send data to GitLab central servers. Read more about remote checks.
STAGING_ENABLEDFrom GitLab 10.8, this variable can be used to define a deploy policy for staging and production environments.
CANARY_ENABLEDFrom GitLab 11.0, this variable can be used to define a deploy policy for canary environments.
INCREMENTAL_ROLLOUT_ENABLEDFrom GitLab 10.8, this variable can be used to enable an incremental rollout of your application for the production environment.
TEST_DISABLEDFrom GitLab 11.0, this variable can be used to disable the test job. If the variable is present, the job will not be created.
CODEQUALITY_DISABLEDFrom GitLab 11.0, this variable can be used to disable the codequality job. If the variable is present, the job will not be created.
SAST_DISABLEDFrom GitLab 11.0, this variable can be used to disable the sast job. If the variable is present, the job will not be created.
DEPENDENCY_SCANNING_DISABLEDFrom GitLab 11.0, this variable can be used to disable the dependency_scanning job. If the variable is present, the job will not be created.
CONTAINER_SCANNING_DISABLEDFrom GitLab 11.0, this variable can be used to disable the sast:container job. If the variable is present, the job will not be created.
REVIEW_DISABLEDFrom GitLab 11.0, this variable can be used to disable the review and the manual review:stop job. If the variable is present, these jobs will not be created.
DAST_DISABLEDFrom GitLab 11.0, this variable can be used to disable the dast job. If the variable is present, the job will not be created.
PERFORMANCE_DISABLEDFrom GitLab 11.0, this variable can be used to disable the performance job. If the variable is present, the job will not be created.
+

TIP: Tip: +Set up the replica variables using a +project variable +and scale your application by just redeploying it!

+

CAUTION: Caution: +You should not scale your application using Kubernetes directly. This can +cause confusion with Helm not detecting the change, and subsequent deploys with +Auto DevOps can undo your changes.

+

+Advanced replica variables setup

+

Apart from the two replica-related variables for production mentioned above, +you can also use others for different environments.

+

There's a very specific mapping between Kubernetes' label named track, +GitLab CI/CD environment names, and the replicas environment variable. +The general rule is: TRACK_ENV_REPLICAS. Where:

+
    +
  • +TRACK: The capitalized value of the track +Kubernetes label +in the Helm Chart app definition. If not set, it will not be taken into account +to the variable name.
  • +
  • +ENV: The capitalized environment name of the deploy job that is set in +.gitlab-ci.yml.
  • +
+

That way, you can define your own TRACK_ENV_REPLICAS variables with which +you will be able to scale the pod's replicas easily.

+

In the example below, the environment's name is qa and it deploys the track +foo which would result in looking for the FOO_QA_REPLICAS environment +variable:

+
QA testing:
+  stage: deploy
+  environment:
+    name: qa
+  script:
+  - deploy foo
+

The track foo being referenced would also need to be defined in the +application's Helm chart, like:

+
replicaCount: 1
+image:
+  repository: gitlab.example.com/group/project
+  tag: stable
+  pullPolicy: Always
+  secrets:
+    - name: gitlab-registry
+application:
+  track: foo
+  tier: web
+service:
+  enabled: true
+  name: web
+  type: ClusterIP
+  url: http://my.host.com/
+  externalPort: 5000
+  internalPort: 5000
+

+Deploy policy for staging and production environments

+
+

Introduced +in GitLab 10.8.

+
+

TIP: Tip: +You can also set this inside your project's settings.

+

The normal behavior of Auto DevOps is to use Continuous Deployment, pushing +automatically to the production environment every time a new pipeline is run +on the default branch. However, there are cases where you might want to use a +staging environment and deploy to production manually. For this scenario, the +STAGING_ENABLED environment variable was introduced.

+

If STAGING_ENABLED is defined in your project (e.g., set STAGING_ENABLED to +1 as a secret variable), then the application will be automatically deployed +to a staging environment, and a production_manual job will be created for +you when you're ready to manually deploy to production.

+

+Deploy policy for canary environments [PREMIUM] +

+
+

Introduced +in GitLab 11.0.

+
+

A canary environment can be used +before any changes are deployed to production.

+

If CANARY_ENABLED is defined in your project (e.g., set CANARY_ENABLED to +1 as a secret variable) then two manual jobs will be created:

+
    +
  • +canary which will deploy the application to the canary environment
  • +
  • +production_manual which is to be used by you when you're ready to manually +deploy to production.
  • +
+

+Incremental rollout to production [PREMIUM] +

+
+

Introduced in GitLab 10.8.

+
+

TIP: Tip: +You can also set this inside your project's settings.

+

When you have a new version of your app to deploy in production, you may want +to use an incremental rollout to replace just a few pods with the latest code. +This will allow you to first check how the app is behaving, and later manually +increasing the rollout up to 100%.

+

If INCREMENTAL_ROLLOUT_ENABLED is defined in your project (e.g., set +INCREMENTAL_ROLLOUT_ENABLED to 1 as a secret variable), then instead of the +standard production job, 4 different +manual jobs +will be created:

+
    +
  1. rollout 10%
  2. +
  3. rollout 25%
  4. +
  5. rollout 50%
  6. +
  7. rollout 100%
  8. +
+

The percentage is based on the REPLICAS variable and defines the number of +pods you want to have for your deployment. If you say 10, and then you run +the 10% rollout job, there will be 1 new pod + 9 old ones.

+

To start a job, click on the play icon next to the job's name. You are not +required to go from 10% to 100%, you can jump to whatever job you want. +You can also scale down by running a lower percentage job, just before hitting +100%. Once you get to 100%, you cannot scale down, and you'd have to roll +back by redeploying the old version using the +rollback button in the +environment page.

+

Below, you can see how the pipeline will look if the rollout or staging +variables are defined.

+
    +
  • +

    Without INCREMENTAL_ROLLOUT_ENABLED and without STAGING_ENABLED

    +

    Staging and rollout disabled

    +
  • +
  • +

    Without INCREMENTAL_ROLLOUT_ENABLED and with STAGING_ENABLED

    +

    Staging enabled

    +
  • +
  • +

    With INCREMENTAL_ROLLOUT_ENABLED and without STAGING_ENABLED

    +

    Rollout enabled

    +
  • +
  • +

    With INCREMENTAL_ROLLOUT_ENABLED and with STAGING_ENABLED

    +

    Rollout and staging enabled

    +
  • +
+

+Currently supported languages

+

NOTE: Note: +Not all buildpacks support Auto Test yet, as it's a relatively new +enhancement. All of Heroku's officially supported +languages +support it, and some third-party buildpacks as well e.g., Go, Node, Java, PHP, +Python, Ruby, Gradle, Scala, and Elixir all support Auto Test, but notably the +multi-buildpack does not.

+

As of GitLab 10.0, the supported buildpacks are:

+
- heroku-buildpack-multi     v1.0.0
+- heroku-buildpack-ruby      v168
+- heroku-buildpack-nodejs    v99
+- heroku-buildpack-clojure   v77
+- heroku-buildpack-python    v99
+- heroku-buildpack-java      v53
+- heroku-buildpack-gradle    v23
+- heroku-buildpack-scala     v78
+- heroku-buildpack-play      v26
+- heroku-buildpack-php       v122
+- heroku-buildpack-go        v72
+- heroku-buildpack-erlang    fa17af9
+- buildpack-nginx            v8
+

+Limitations

+

The following restrictions apply.

+

+Private project support

+

CAUTION: Caution: Private project support in Auto DevOps is experimental.

+

When a project has been marked as private, GitLab's Container +Registry requires authentication when downloading +containers. Auto DevOps will automatically provide the required authentication +information to Kubernetes, allowing temporary access to the registry. +Authentication credentials will be valid while the pipeline is running, allowing +for a successful initial deployment.

+

After the pipeline completes, Kubernetes will no longer be able to access the +Container Registry. Restarting a pod, scaling a service, or other actions which +require on-going access to the registry may fail. On-going secure access is +planned for a subsequent release.

+

+Troubleshooting

+
    +
  • Auto Build and Auto Test may fail in detecting your language/framework. There +may be no buildpack for your application, or your application may be missing the +key files the buildpack is looking for. For example, for ruby apps, you must +have a Gemfile to be properly detected, even though it is possible to write a +Ruby app without a Gemfile. Try specifying a custom +buildpack.
  • +
  • Auto Test may fail because of a mismatch between testing frameworks. In this +case, you may need to customize your .gitlab-ci.yml with your test commands.
  • +
+

+Disable the banner instance wide

+

If an administrator would like to disable the banners on an instance level, this +feature can be disabled either through the console:

+
sudo gitlab-rails console
+

Then run:

+
Feature.get(:auto_devops_banner_disabled).enable
+

Or through the HTTP API with an admin access token:

+
curl --data "value=true" --header "PRIVATE-TOKEN: personal_access_token" https://gitlab.example.com/api/v4/features/auto_devops_banner_disabled
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/54ce2605e398f3b7fb1848fe0ca171fa b/docker/tanner/snare/dist/pages/1/54ce2605e398f3b7fb1848fe0ca171fa new file mode 100644 index 000000000..35e5c49d9 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/54ce2605e398f3b7fb1848fe0ca171fa @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + +Work in progress merge requests · Merge requests · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+"Work In Progress" Merge Requests

+

To prevent merge requests from accidentally being accepted before they're +completely ready, GitLab blocks the "Accept" button for merge requests that +have been marked a Work In Progress.

+

Blocked Accept Button

+

To mark a merge request a Work In Progress, simply start its title with [WIP] +or WIP:. As an alternative, you're also able to do it by sending a commit +with its title starting with wip or WIP to the merge request's source branch.

+

Mark as WIP

+

To allow a Work In Progress merge request to be accepted again when it's ready, +simply remove the WIP prefix.

+

Unark as WIP

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/55165dcf8108a77dcb316a63d41e1e28 b/docker/tanner/snare/dist/pages/1/55165dcf8108a77dcb316a63d41e1e28 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/55165dcf8108a77dcb316a63d41e1e28 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/56157278c5d5b227e5ee024acdf9b390 b/docker/tanner/snare/dist/pages/1/56157278c5d5b227e5ee024acdf9b390 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/56157278c5d5b227e5ee024acdf9b390 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/56e91778d816621fb402aee733bf3586 b/docker/tanner/snare/dist/pages/1/56e91778d816621fb402aee733bf3586 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/56e91778d816621fb402aee733bf3586 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/580aa1efb28fe35edde24db916dee119 b/docker/tanner/snare/dist/pages/1/580aa1efb28fe35edde24db916dee119 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/580aa1efb28fe35edde24db916dee119 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5828d72f146efb9ae4e051a87b6b4d3b b/docker/tanner/snare/dist/pages/1/5828d72f146efb9ae4e051a87b6b4d3b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5828d72f146efb9ae4e051a87b6b4d3b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/582d9390ea593a5a27b965744e92c19a b/docker/tanner/snare/dist/pages/1/582d9390ea593a5a27b965744e92c19a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/582d9390ea593a5a27b965744e92c19a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/58893b65d46e486adf0d86fe0f8cbc66 b/docker/tanner/snare/dist/pages/1/58893b65d46e486adf0d86fe0f8cbc66 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/58893b65d46e486adf0d86fe0f8cbc66 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/58b2b4c629e953b3cbb9e57a6cf95d88 b/docker/tanner/snare/dist/pages/1/58b2b4c629e953b3cbb9e57a6cf95d88 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/58b2b4c629e953b3cbb9e57a6cf95d88 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/58b8b081d62db455afc28333cb39187c b/docker/tanner/snare/dist/pages/1/58b8b081d62db455afc28333cb39187c new file mode 100644 index 000000000..c17323d3a --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/58b8b081d62db455afc28333cb39187c @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + +Index · Milestones · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Milestones

+

+Overview

+

Milestones in GitLab are a way to track issues and merge requests created to achieve a broader goal in a certain period of time.

+

Milestones allow you to organize issues and merge requests into a cohesive group, with an optional start date and an optional due date.

+

+Project milestones and group milestones

+
    +
  • +Project milestones can be assigned to issues or merge requests in that project only.
  • +
  • +Group milestones can be assigned to any issue or merge request of any project in that group.
  • +
+

+Creating milestones

+
+

Note: +A permission level of Developer or higher is required to create milestones.

+
+

+New project milestone

+

To create a project milestone, navigate to Issues > Milestones in the project.

+

Click the New milestone button. Enter the title, an optional description, an optional start date, and an optional due date. Click Create milestone to create the milestone.

+

New project milestone

+

+New group milestone

+

To create a group milestone, follow similar steps from above to project milestones. Navigate to Issues > Milestones in the group and create it from there.

+

New group milestone

+

+Editing milestones

+
+

Note: +A permission level of Developer or higher is required to edit milestones.

+
+

You can update a milestone by navigating to Issues > Milestones in the project or group and clicking the Edit button.

+

You can delete a milestone by clicking the Delete button.

+

+Promoting project milestones to group milestones

+

If you are expanding from a few projects to a larger number of projects within the same group, you may want to share the same milestone among multiple projects in the same group. If you previously created a project milestone and now want to make it available for other milestones, you can promote it to a group milestone.

+

From the project milestone list page, you can promote a project milestone to a group milestone. This will merge all project milestones across all projects in this group with the same name into a single group milestones. All issues and merge requests that previously were assigned one of these project milestones will now be assigned the new group milestones. This action cannot be reversed and the changes are permanent.

+
+

Note: +Not all features on the project milestone view are available on the group milestone view. If you promote a project milestone to a group milestone, you will lose these features. See Milestone view to see which features are missing from the group milestone view.

+
+

Promote milestone

+

+Assigning milestones from the sidebar

+

Every issue and merge request can be assigned a milestone. The milestones are visible on every issue and merge request page, in the sidebar. They are also visible in the issue board. From the sidebar, you can assign or unassign a milestones to the object. You can also perform this as a quick action in a comment. As mentioned, for a given issue or merge request, both project milestones and group milestones can be selected and assigned to the object.

+

+Filtering issues and merge requests by milestone

+

+Filtering in list pages

+

From the project issue/merge request list pages and the group issue/merge request list pages, you can filter by both group milestones and project milestones.

+

+Filtering in issue boards

+

From project issue boards, you can filter by both group milestones and project milestones in the search and filter bar.

+

+Special milestone filters

+

When filtering by milestone, in addition to choosing a specific project milestone or group milestone, you can choose a special milestone filter.

+
    +
  • +No Milestone: Show issues or merge requests with no assigned milestone.
  • +
  • +Upcoming: Show issues or merge requests that have been assigned the open milestone that has the next upcoming due date (i.e. nearest due date in the future).
  • +
  • +Started: Show issues or merge requests that have an assigned milestone with a start date that is before today.
  • +
+

+Milestone view

+

Not all features in the project milestone view are available in the group milestone view. This table summarizes the differences:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureProject milestone viewGroup milestone view
Title an description
Issues assigned to milestone
Merge requests assigned to milestone
Participants and labels used
Percentage complete
Start date and due date
Total issue time spent
Total issue weight
+

The milestone view shows the title and description.

+

+Project milestone features

+

These features are only available for project milestones and not group milestones.

+
    +
  • Issues assigned to the milestone are displayed in three columns: Unstarted issues, ongoing issues, and completed issues.
  • +
  • Merge requests assigned to the milestone are displayed in four columns: Work in progress merge requests, waiting for merge, rejected, and closed.
  • +
  • Participants and labels that are used in issues and merge requests that have the milestone assigned are displayed.
  • +
+

+Milestone sidebar

+

The milestone sidebar on the milestone view shows the following:

+
    +
  • Percentage complete, which is calculated as number of closed issues plus number of closed/merged merge requests divided by total number issues and merge requests.
  • +
  • The start date and due date.
  • +
  • The total time spent on all issues that have the milestone assigned.
  • +
+

For project milestones only, the milestone sidebar shows the total issue weight of all issues that have the milestone assigned.

+

Project milestone page

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/58dee7b334fc0a7339a5f94928b76d7b b/docker/tanner/snare/dist/pages/1/58dee7b334fc0a7339a5f94928b76d7b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/58dee7b334fc0a7339a5f94928b76d7b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/58f00eb7616103df72c02f8f2a9414d2 b/docker/tanner/snare/dist/pages/1/58f00eb7616103df72c02f8f2a9414d2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/58f00eb7616103df72c02f8f2a9414d2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/590bcdaeabfbc3e1f07b5538663ab29f b/docker/tanner/snare/dist/pages/1/590bcdaeabfbc3e1f07b5538663ab29f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/590bcdaeabfbc3e1f07b5538663ab29f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/595f083d7dd001d2bcd724e5e0c9318b b/docker/tanner/snare/dist/pages/1/595f083d7dd001d2bcd724e5e0c9318b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/595f083d7dd001d2bcd724e5e0c9318b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/59c1ba9e1759b5be50e5b8fc0ed438e1 b/docker/tanner/snare/dist/pages/1/59c1ba9e1759b5be50e5b8fc0ed438e1 new file mode 100644 index 000000000..2c5950c82 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/59c1ba9e1759b5be50e5b8fc0ed438e1 @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + +Index · Prometheus · Monitoring · Administration · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab Prometheus

+
+

Notes:

+
+
    +
  • Prometheus and the various exporters listed in this page are bundled in the +Omnibus GitLab package. Check each exporter's documentation for the timeline +they got added. For installations from source you will have to install them +yourself. Over subsequent releases additional GitLab metrics will be captured.
  • +
  • Prometheus services are on by default with GitLab 9.0.
  • +
  • Prometheus and its exporters do not authenticate users, and will be available +to anyone who can access them.
  • +
+

Prometheus is a powerful time-series monitoring service, providing a flexible +platform for monitoring GitLab and other software products. +GitLab provides out of the box monitoring with Prometheus, providing easy +access to high quality time-series monitoring of GitLab services.

+

+Overview

+

Prometheus works by periodically connecting to data sources and collecting their +performance metrics via the various exporters. To view +and work with the monitoring data, you can either +connect directly to Prometheus or utilize a +dashboard tool like Grafana.

+

+Configuring Prometheus

+
+

Note: +For installations from source you'll have to install and configure it yourself.

+
+

Prometheus and it's exporters are on by default, starting with GitLab 9.0. +Prometheus will run as the gitlab-prometheus user and listen on +http://localhost:9090. By default Prometheus is only accessible from the GitLab server itself. +Each exporter will be automatically set up as a +monitoring target for Prometheus, unless individually disabled.

+

To disable Prometheus and all of its exporters, as well as any added in the future:

+
    +
  1. +

    Edit /etc/gitlab/gitlab.rb

    +
  2. +
  3. +

    Add or find and uncomment the following line, making sure it's set to false:

    +
    prometheus_monitoring['enable'] = false
    +
  4. +
  5. +

    Save the file and reconfigure GitLab for the changes to +take effect

    +
  6. +
+

+Changing the port and address Prometheus listens on

+
+

Note: +The following change was added in GitLab Omnibus 8.17. Although possible, +it's not recommended to change the port Prometheus listens +on as this might affect or conflict with other services running on the GitLab +server. Proceed at your own risk.

+
+

In order to access Prometheus from outside the GitLab server you will need to +set a FQDN or IP in prometheus['listen_address']. +To change the address/port that Prometheus listens on:

+
    +
  1. +

    Edit /etc/gitlab/gitlab.rb

    +
  2. +
  3. +

    Add or find and uncomment the following line:

    +
    prometheus['listen_address'] = 'localhost:9090'
    +

    Replace localhost:9090 with the address/port you want Prometheus to +listen on. If you would like to allow access to Prometheus to hosts other +than localhost, leave out the host, or use 0.0.0.0 to allow public access:

    +
    prometheus['listen_address'] = ':9090'
    +# or
    +prometheus['listen_address'] = '0.0.0.0:9090'
    +
  4. +
  5. +

    Save the file and reconfigure GitLab for the changes to +take effect

    +
  6. +
+

+Viewing performance metrics

+

You can visit http://localhost:9090 for the dashboard that Prometheus offers by default.

+
+

Note: +If SSL has been enabled on your GitLab instance, you may not be able to access +Prometheus on the same browser as GitLab if using the same FQDN due to HSTS. We plan to +provide access via GitLab, but in the interim there are +some workarounds: using a separate FQDN, using server IP, using a separate browser for Prometheus, resetting HSTS, or +having Nginx proxy it.

+
+

The performance data collected by Prometheus can be viewed directly in the +Prometheus console or through a compatible dashboard tool. +The Prometheus interface provides a flexible query language to work +with the collected data where you can visualize their output. +For a more fully featured dashboard, Grafana can be used and has +official support for Prometheus.

+

Sample Prometheus queries:

+
    +
  • +% Memory used: (1 - ((node_memory_MemFree + node_memory_Cached) / node_memory_MemTotal)) * 100 +
  • +
  • +% CPU load: 1 - rate(node_cpu{mode="idle"}[5m]) +
  • +
  • +Data transmitted: irate(node_network_transmit_bytes[5m]) +
  • +
  • +Data received: irate(node_network_receive_bytes[5m]) +
  • +
+

+Configuring Prometheus to monitor Kubernetes

+
+

Introduced in GitLab 9.0. +Pod monitoring introduced in GitLab 9.4.

+
+

If your GitLab server is running within Kubernetes, Prometheus will collect metrics from the Nodes and annotated Pods in the cluster, including performance data on each container. This is particularly helpful if your CI/CD environments run in the same cluster, as you can use the [Prometheus project integration][] to monitor them.

+

To disable the monitoring of Kubernetes:

+
    +
  1. +

    Edit /etc/gitlab/gitlab.rb

    +
  2. +
  3. +

    Add or find and uncomment the following line and set it to false:

    +
    prometheus['monitor_kubernetes'] = false
    +
  4. +
  5. +

    Save the file and reconfigure GitLab for the changes to +take effect

    +
  6. +
+

+GitLab Prometheus metrics

+
+

Introduced in GitLab 9.3.

+
+

GitLab monitors its own internal service metrics, and makes them available at the /-/metrics endpoint. Unlike other exporters, this endpoint requires authentication as it is available on the same URL and port as user traffic.

+

➔ Read more about the GitLab Metrics.

+

+Prometheus exporters

+

There are a number of libraries and servers which help in exporting existing +metrics from third-party systems as Prometheus metrics. This is useful for cases +where it is not feasible to instrument a given system with Prometheus metrics +directly (for example, HAProxy or Linux system stats). You can read more in the +Prometheus exporters and integrations upstream documentation.

+

While you can use any exporter you like with your GitLab installation, the +following ones documented here are bundled in the Omnibus GitLab packages +making it easy to configure and use.

+

+Node exporter

+

The node exporter allows you to measure various machine resources such as +memory, disk and CPU utilization.

+

➔ Read more about the node exporter.

+

+Redis exporter

+

The Redis exporter allows you to measure various Redis metrics.

+

➔ Read more about the Redis exporter.

+

+Postgres exporter

+

The Postgres exporter allows you to measure various PostgreSQL metrics.

+

➔ Read more about the Postgres exporter.

+

+GitLab monitor exporter

+

The GitLab monitor exporter allows you to measure various GitLab metrics, pulled from Redis and the database.

+

➔ Read more about the GitLab monitor exporter.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/59e1ebdd3fd2a24a556f7cc3037ca33b b/docker/tanner/snare/dist/pages/1/59e1ebdd3fd2a24a556f7cc3037ca33b new file mode 100644 index 000000000..0a27e3dd8 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/59e1ebdd3fd2a24a556f7cc3037ca33b @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/59f1c039d9a3e96be3c5baee5a87923a b/docker/tanner/snare/dist/pages/1/59f1c039d9a3e96be3c5baee5a87923a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/59f1c039d9a3e96be3c5baee5a87923a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5abc9c3adb22b7a6b3659ec7f55d0d3b b/docker/tanner/snare/dist/pages/1/5abc9c3adb22b7a6b3659ec7f55d0d3b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5abc9c3adb22b7a6b3659ec7f55d0d3b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5b296ec9bb333553ee6b4b6c44a3a258 b/docker/tanner/snare/dist/pages/1/5b296ec9bb333553ee6b4b6c44a3a258 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5b296ec9bb333553ee6b4b6c44a3a258 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5ba405b326c40541846ee83d24b0f2ca b/docker/tanner/snare/dist/pages/1/5ba405b326c40541846ee83d24b0f2ca new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5ba405b326c40541846ee83d24b0f2ca @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5c402e6a3235fa3fc2c469fda37b4e77 b/docker/tanner/snare/dist/pages/1/5c402e6a3235fa3fc2c469fda37b4e77 new file mode 100644 index 000000000..1f5187f99 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5c402e6a3235fa3fc2c469fda37b4e77 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/5d0b0b39b13e294f91db49057ac47833 b/docker/tanner/snare/dist/pages/1/5d0b0b39b13e294f91db49057ac47833 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5d0b0b39b13e294f91db49057ac47833 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5d2c035e14429107ce2cfdf02f7e6060 b/docker/tanner/snare/dist/pages/1/5d2c035e14429107ce2cfdf02f7e6060 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5d2c035e14429107ce2cfdf02f7e6060 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5d396f2f322ef6c741f145abdccea4e6 b/docker/tanner/snare/dist/pages/1/5d396f2f322ef6c741f145abdccea4e6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5d396f2f322ef6c741f145abdccea4e6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5d403cd553e5084ef34519b0720f30f0 b/docker/tanner/snare/dist/pages/1/5d403cd553e5084ef34519b0720f30f0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5d403cd553e5084ef34519b0720f30f0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5d6da3ddba86576a4ea1439823dd06f6 b/docker/tanner/snare/dist/pages/1/5d6da3ddba86576a4ea1439823dd06f6 new file mode 100644 index 000000000..a733d2c0f --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5d6da3ddba86576a4ea1439823dd06f6 @@ -0,0 +1,2 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[189],{1011:function(n,t,e){e(31),n.exports=e(674)},674:function(n,t,e){"use strict";e.r(t);var i=e(0),s=e.n(i);document.addEventListener("DOMContentLoaded",function(){if(s()("#user-content-gitlab-icons").length>0){var n=s()("#user-content-gitlab-icons"),t=s()('
ICONS
');s()(t).insertAfter(n.parent())}})}},[[1011,64,65]]]); +//# sourceMappingURL=pages.help.show.c42c0700.chunk.js.map \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5dc852a748874c3f54b82dea0b4abfc9 b/docker/tanner/snare/dist/pages/1/5dc852a748874c3f54b82dea0b4abfc9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5dc852a748874c3f54b82dea0b4abfc9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5dc9d7f9f1f98b99d8fa6f17716f8353 b/docker/tanner/snare/dist/pages/1/5dc9d7f9f1f98b99d8fa6f17716f8353 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5dc9d7f9f1f98b99d8fa6f17716f8353 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5dcacec8504d2e0e1e1c775f174d7551 b/docker/tanner/snare/dist/pages/1/5dcacec8504d2e0e1e1c775f174d7551 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5dcacec8504d2e0e1e1c775f174d7551 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5e021317c833150d09c6db71abf04b69 b/docker/tanner/snare/dist/pages/1/5e021317c833150d09c6db71abf04b69 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5e021317c833150d09c6db71abf04b69 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5e1e3e856852809b939a8ffca5003e20 b/docker/tanner/snare/dist/pages/1/5e1e3e856852809b939a8ffca5003e20 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5e1e3e856852809b939a8ffca5003e20 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5e465160fba8ae6f45ecfaf5fbfe0826 b/docker/tanner/snare/dist/pages/1/5e465160fba8ae6f45ecfaf5fbfe0826 new file mode 100644 index 000000000..ac0ae6bc9 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5e465160fba8ae6f45ecfaf5fbfe0826 @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/5e49961f25d7387ccf0e9443d8e8bfab b/docker/tanner/snare/dist/pages/1/5e49961f25d7387ccf0e9443d8e8bfab new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5e49961f25d7387ccf0e9443d8e8bfab @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5e646d5ee48fada9062e265ca39b808c b/docker/tanner/snare/dist/pages/1/5e646d5ee48fada9062e265ca39b808c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5e646d5ee48fada9062e265ca39b808c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5e9e665bd306045add277c8247fe0173 b/docker/tanner/snare/dist/pages/1/5e9e665bd306045add277c8247fe0173 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5e9e665bd306045add277c8247fe0173 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5ea748045c66a1e6fce7bb66aac0fe95 b/docker/tanner/snare/dist/pages/1/5ea748045c66a1e6fce7bb66aac0fe95 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5ea748045c66a1e6fce7bb66aac0fe95 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5eadfb916b9fe8fb3584ef4eb3a44fc2 b/docker/tanner/snare/dist/pages/1/5eadfb916b9fe8fb3584ef4eb3a44fc2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5eadfb916b9fe8fb3584ef4eb3a44fc2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5ed23db05442fe61094ccbdf599cc7ac b/docker/tanner/snare/dist/pages/1/5ed23db05442fe61094ccbdf599cc7ac new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5ed23db05442fe61094ccbdf599cc7ac @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5f54570b8f368b93890cbe67586de45a b/docker/tanner/snare/dist/pages/1/5f54570b8f368b93890cbe67586de45a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5f54570b8f368b93890cbe67586de45a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5f5ac2d39945bd1d7d66d8a7d82576af b/docker/tanner/snare/dist/pages/1/5f5ac2d39945bd1d7d66d8a7d82576af new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5f5ac2d39945bd1d7d66d8a7d82576af @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5f65a91be076901538a461e3268d4882 b/docker/tanner/snare/dist/pages/1/5f65a91be076901538a461e3268d4882 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5f65a91be076901538a461e3268d4882 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5fa7f8e9bafbe43011bda32ccb1c5e04 b/docker/tanner/snare/dist/pages/1/5fa7f8e9bafbe43011bda32ccb1c5e04 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5fa7f8e9bafbe43011bda32ccb1c5e04 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5fc54fd8956f0817e4cd0b7c919857e0 b/docker/tanner/snare/dist/pages/1/5fc54fd8956f0817e4cd0b7c919857e0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5fc54fd8956f0817e4cd0b7c919857e0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/5fc651595472c1c87ca0579a43d80417 b/docker/tanner/snare/dist/pages/1/5fc651595472c1c87ca0579a43d80417 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/5fc651595472c1c87ca0579a43d80417 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/60650eb79d0c83bd42a14e43b61be6aa b/docker/tanner/snare/dist/pages/1/60650eb79d0c83bd42a14e43b61be6aa new file mode 100644 index 000000000..f3802abe8 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/60650eb79d0c83bd42a14e43b61be6aa @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/608c21b506510ca2aed67952ec145ad0 b/docker/tanner/snare/dist/pages/1/608c21b506510ca2aed67952ec145ad0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/608c21b506510ca2aed67952ec145ad0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/60f15637304c93b685530da125288a2d b/docker/tanner/snare/dist/pages/1/60f15637304c93b685530da125288a2d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/60f15637304c93b685530da125288a2d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6170b1f53161c945672d8763da02d2b4 b/docker/tanner/snare/dist/pages/1/6170b1f53161c945672d8763da02d2b4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6170b1f53161c945672d8763da02d2b4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/61cb538a123986873730f9344144c2dc b/docker/tanner/snare/dist/pages/1/61cb538a123986873730f9344144c2dc new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/61cb538a123986873730f9344144c2dc @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/61f01ff40d75261951b595859b534937 b/docker/tanner/snare/dist/pages/1/61f01ff40d75261951b595859b534937 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/61f01ff40d75261951b595859b534937 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/620571f8a5a8c683bd98c7d2d8d9db28 b/docker/tanner/snare/dist/pages/1/620571f8a5a8c683bd98c7d2d8d9db28 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/620571f8a5a8c683bd98c7d2d8d9db28 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/63220e53698056c1e49cae18421723c5 b/docker/tanner/snare/dist/pages/1/63220e53698056c1e49cae18421723c5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/63220e53698056c1e49cae18421723c5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6398e813a7962e051812045f5ad2ca65 b/docker/tanner/snare/dist/pages/1/6398e813a7962e051812045f5ad2ca65 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6398e813a7962e051812045f5ad2ca65 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/63edf09e71994b822809b4606f53e222 b/docker/tanner/snare/dist/pages/1/63edf09e71994b822809b4606f53e222 new file mode 100644 index 000000000..83cb3d81d --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/63edf09e71994b822809b4606f53e222 @@ -0,0 +1,2 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[90],{512:function(e,t,n){"use strict";n.r(t);var a=n(337);document.addEventListener("DOMContentLoaded",a.a)},687:function(e,t,n){"use strict";n.r(t);var a=n(0),i=n.n(a),r=n(3),s=n.n(r),l=n(5),o=n(7),u=n(1),c=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},n=t.currentTabKey,a=void 0===n?"current_signin_tab":n,i=t.tabSelector,r=void 0===i?"ul.new-session-tabs":i;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.currentTabKey=a,this.tabSelector=r,this.isLocalStorageAvailable=d.a.isLocalStorageAccessSafe(),window.location.hash&&this.saveData(window.location.hash),this.bootstrap()}return f(e,[{key:"bootstrap",value:function(){var e=this,t=document.querySelectorAll(this.tabSelector);t.length>0&&t[0].addEventListener("click",function(t){if(t.target&&"A"===t.target.nodeName){var n=t.target.getAttribute("href");e.saveData(n)}}),this.showTab()}},{key:"showTab",value:function(){var e=this.readData();if(e){var t=document.querySelector(this.tabSelector+' a[href="'+e+'"]');if(t)t.click();else{var n=document.querySelector(this.tabSelector+" a");n&&n.click()}}}},{key:"saveData",value:function(e){if(this.isLocalStorageAvailable)return window.localStorage.setItem(this.currentTabKey,e)}},{key:"readData",value:function(){return this.isLocalStorageAvailable?window.localStorage.getItem(this.currentTabKey):null}}]),e}(),b=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.container=t.container||"",this.loginLinkSelector=".oauth-login"}return b(e,[{key:"bindEvents",value:function(){i()("#remember_me",this.container).on("click",this.toggleRememberMe)}},{key:"toggleRememberMe",value:function(e){var t=i()(e.target).is(":checked");i()(".oauth-login",this.container).each(function(e,n){var a=i()(n).attr("href");t?i()(n).attr("href",a+"?remember_me=1"):i()(n).attr("href",a.replace("?remember_me=1",""))})}}]),e}();document.addEventListener("DOMContentLoaded",function(){new v,new m,new g({container:i()(".omniauth-container")}).bindEvents()})},719:function(e,t,n){n(31),n(512),e.exports=n(687)}},[[719,64,65,72]]]); +//# sourceMappingURL=pages.sessions.new.6dbf9c97.chunk.js.map \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/641b32fdf50759025eb03b08099358ff b/docker/tanner/snare/dist/pages/1/641b32fdf50759025eb03b08099358ff new file mode 100644 index 000000000..114f81dfb --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/641b32fdf50759025eb03b08099358ff @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/651791600bedced4bfe19e6bfc799e2d b/docker/tanner/snare/dist/pages/1/651791600bedced4bfe19e6bfc799e2d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/651791600bedced4bfe19e6bfc799e2d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/65865356414c4e70dabe7a74693d3e86 b/docker/tanner/snare/dist/pages/1/65865356414c4e70dabe7a74693d3e86 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/65865356414c4e70dabe7a74693d3e86 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/65cfd25e95d895682ac43d7d39e82248 b/docker/tanner/snare/dist/pages/1/65cfd25e95d895682ac43d7d39e82248 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/65cfd25e95d895682ac43d7d39e82248 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/65f7cb64d82d5575687e0aac8c33e77d b/docker/tanner/snare/dist/pages/1/65f7cb64d82d5575687e0aac8c33e77d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/65f7cb64d82d5575687e0aac8c33e77d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/660b82a541ca97cd39433dbe3c392f52 b/docker/tanner/snare/dist/pages/1/660b82a541ca97cd39433dbe3c392f52 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/660b82a541ca97cd39433dbe3c392f52 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/668b66edc46fa80827f536323f0c3c37 b/docker/tanner/snare/dist/pages/1/668b66edc46fa80827f536323f0c3c37 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/668b66edc46fa80827f536323f0c3c37 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6696200232717964ba3f26cacd295396 b/docker/tanner/snare/dist/pages/1/6696200232717964ba3f26cacd295396 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6696200232717964ba3f26cacd295396 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/66a1bf1d1311310c6af7e2acc45c98bd b/docker/tanner/snare/dist/pages/1/66a1bf1d1311310c6af7e2acc45c98bd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/66a1bf1d1311310c6af7e2acc45c98bd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/66b1b84d048bb21abb10eaed0534f0af b/docker/tanner/snare/dist/pages/1/66b1b84d048bb21abb10eaed0534f0af new file mode 100644 index 000000000..69a035ee3 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/66b1b84d048bb21abb10eaed0534f0af @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/66ffc9824d0033ac909f1a63b7c40397 b/docker/tanner/snare/dist/pages/1/66ffc9824d0033ac909f1a63b7c40397 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/66ffc9824d0033ac909f1a63b7c40397 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/67209636667724283ba94357ea22275f b/docker/tanner/snare/dist/pages/1/67209636667724283ba94357ea22275f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/67209636667724283ba94357ea22275f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/680e0274b9d3b226e740934b8624100d b/docker/tanner/snare/dist/pages/1/680e0274b9d3b226e740934b8624100d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/680e0274b9d3b226e740934b8624100d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/683da3f0439f0611c7bebb9ae72fe769 b/docker/tanner/snare/dist/pages/1/683da3f0439f0611c7bebb9ae72fe769 new file mode 100644 index 000000000..5fddc7732 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/683da3f0439f0611c7bebb9ae72fe769 @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/6879959695abc68c50e82b2452efa0fb b/docker/tanner/snare/dist/pages/1/6879959695abc68c50e82b2452efa0fb new file mode 100644 index 000000000..42b342cc2 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6879959695abc68c50e82b2452efa0fb @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/68c2744d4869cf5cfbc8b5b274e42f58 b/docker/tanner/snare/dist/pages/1/68c2744d4869cf5cfbc8b5b274e42f58 new file mode 100644 index 000000000..136d1f967 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/68c2744d4869cf5cfbc8b5b274e42f58 @@ -0,0 +1,731 @@ + + + + + + + + + + + + + + + + + + +Using docker images · Docker · Ci · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Using Docker images

+

GitLab CI in conjunction with GitLab Runner can use +Docker Engine to test and build any application.

+

Docker is an open-source project that allows you to use predefined images to +run applications in independent "containers" that are run within a single Linux +instance. Docker Hub has a rich database of pre-built images that can be +used to test and build your applications.

+

Docker, when used with GitLab CI, runs each job in a separate and isolated +container using the predefined image that is set up in +.gitlab-ci.yml.

+

This makes it easier to have a simple and reproducible build environment that +can also run on your workstation. The added benefit is that you can test all +the commands that we will explore later from your shell, rather than having to +test them on a dedicated CI server.

+

+Register Docker Runner

+

To use GitLab Runner with Docker you need to register a new Runner +to use the docker executor.

+

A one-line example can be seen below:

+
sudo gitlab-runner register \
+  --url "https://gitlab.example.com/" \
+  --registration-token "PROJECT_REGISTRATION_TOKEN" \
+  --description "docker-ruby-2.1" \
+  --executor "docker" \
+  --docker-image ruby:2.1 \
+  --docker-postgres latest \
+  --docker-mysql latest
+

The registered runner will use the ruby:2.1 Docker image and will run two +services, postgres:latest and mysql:latest, both of which will be +accessible during the build process.

+

+What is an image

+

The image keyword is the name of the Docker image the Docker executor +will run to perform the CI tasks.

+

By default, the executor will only pull images from Docker Hub, +but this can be configured in the gitlab-runner/config.toml by setting +the Docker pull policy to allow using local images.

+

For more information about images and Docker Hub please read +the Docker Fundamentals documentation.

+

+What is a service

+

The services keyword defines just another Docker image that is run during +your job and is linked to the Docker image that the image keyword defines. +This allows you to access the service image during build time.

+

The service image can run any application, but the most common use case is to +run a database container, e.g., mysql. It's easier and faster to use an +existing image and run it as an additional container than install mysql every +time the project is built.

+

You are not limited to have only database services. You can add as many +services you need to .gitlab-ci.yml or manually modify config.toml. +Any image found at Docker Hub or your private Container Registry can be +used as a service.

+

You can see some widely used services examples in the relevant documentation of +CI services examples.

+

+How services are linked to the job

+

To better understand how the container linking works, read +Linking containers together.

+

To summarize, if you add mysql as service to your application, the image will +then be used to create a container that is linked to the job container.

+

The service container for MySQL will be accessible under the hostname mysql. +So, in order to access your database service you have to connect to the host +named mysql instead of a socket or localhost. Read more in accessing the +services.

+

+How the health check of services works

+

Services are designed to provide additional functionality which is network accessible. +It may be a database like MySQL, or Redis, and even docker:stable-dind which +allows you to use Docker in Docker. It can be practically anything that is +required for the CI/CD job to proceed and is accessed by network.

+

To make sure this works, the Runner:

+
    +
  1. checks which ports are exposed from the container by default
  2. +
  3. starts a special container that waits for these ports to be accessible
  4. +
+

When the second stage of the check fails, either because there is no opened port in the +service, or the service was not started properly before the timeout and the port is not +responding, it prints the warning: *** WARNING: Service XYZ probably didn't start properly.

+

In most cases it will affect the job, but there may be situations when the job +will still succeed even if that warning was printed. For example:

+
    +
  • The service was started a little after the warning was raised, and the job is +not using the linked service from the very beginning. In that case, when the +job needed to access the service, it may have been already there waiting for +connections.
  • +
  • The service container is not providing any networking service, but it's doing +something with the job's directory (all services have the job directory mounted +as a volume under /builds). In that case, the service will do its job, and +since the job is not trying to connect to it, it won't fail.
  • +
+

+What services are not for

+

As it was mentioned before, this feature is designed to provide network accessible +services. A database is the simplest example of such a service.

+

NOTE: Note: +The services feature is not designed to, and will not add any software from the +defined services image(s) to the job's container.

+

For example, if you have the following services defined in your job, the php, +node or go commands will not be available for your script, and thus +the job will fail:

+
job:
+  services:
+  - php:7
+  - node:latest
+  - golang:1.10
+  image: alpine:3.7
+  script:
+  - php -v
+  - node -v
+  - go version
+

If you need to have php, node and go available for your script, you should +either:

+
    +
  • choose an existing Docker image that contains all required tools, or
  • +
  • create your own Docker image, which will have all the required tools included +and use that in your job
  • +
+

+Accessing the services

+

Let's say that you need a Wordpress instance to test some API integration with +your application.

+

You can then use for example the tutum/wordpress image in your +.gitlab-ci.yml:

+
services:
+- tutum/wordpress:latest
+

If you don't specify a service alias, +when the job is run, tutum/wordpress will be started and you will have +access to it from your build container under two hostnames to choose from:

+
    +
  • tutum-wordpress
  • +
  • tutum__wordpress
  • +
+
+

Note: +Hostnames with underscores are not RFC valid and may cause problems in 3rd party +applications.

+
+

The default aliases for the service's hostname are created from its image name +following these rules:

+
    +
  • Everything after the colon (:) is stripped
  • +
  • Slash (/) is replaced with double underscores (__) and the primary alias +is created
  • +
  • Slash (/) is replaced with a single dash (-) and the secondary alias is +created (requires GitLab Runner v1.1.0 or higher)
  • +
+

To override the default behavior, you can +specify a service alias.

+

+Define image and services from .gitlab-ci.yml +

+

You can simply define an image that will be used for all jobs and a list of +services that you want to use during build time:

+
image: ruby:2.2
+
+services:
+  - postgres:9.3
+
+before_script:
+  - bundle install
+
+test:
+  script:
+  - bundle exec rake spec
+

It is also possible to define different images and services per job:

+
before_script:
+  - bundle install
+
+test:2.1:
+  image: ruby:2.1
+  services:
+  - postgres:9.3
+  script:
+  - bundle exec rake spec
+
+test:2.2:
+  image: ruby:2.2
+  services:
+  - postgres:9.4
+  script:
+  - bundle exec rake spec
+

Or you can pass some extended configuration options +for image and services:

+
image:
+  name: ruby:2.2
+  entrypoint: ["/bin/bash"]
+
+services:
+- name: my-postgres:9.4
+  alias: db-postgres
+  entrypoint: ["/usr/local/bin/db-postgres"]
+  command: ["start"]
+
+before_script:
+- bundle install
+
+test:
+  script:
+  - bundle exec rake spec
+

+Extended Docker configuration options

+
+

Introduced in GitLab and GitLab Runner 9.4.

+
+

When configuring the image or services entries, you can use a string or a map as +options:

+
    +
  • when using a string as an option, it must be the full name of the image to use +(including the Registry part if you want to download the image from a Registry +other than Docker Hub)
  • +
  • when using a map as an option, then it must contain at least the name +option, which is the same name of the image as used for the string setting
  • +
+

For example, the following two definitions are equal:

+
    +
  1. +

    Using a string as an option to image and services:

    +
    image: "registry.example.com/my/image:latest"
    +
    +services:
    +- postgresql:9.4
    +- redis:latest
    +
  2. +
  3. +

    Using a map as an option to image and services. The use of image:name is +required:

    +
    image:
    +  name: "registry.example.com/my/image:latest"
    +
    +services:
    +- name: postgresql:9.4
    +- name: redis:latest
    +
  4. +
+

+Available settings for image +

+
+

Introduced in GitLab and GitLab Runner 9.4.

+
+ + + + + + + + + + + + + + + + + + + + + + + +
SettingRequiredGitLab versionDescription
nameyes, when used with any other option9.4Full name of the image that should be used. It should contain the Registry part if needed.
entrypointno9.4Command or script that should be executed as the container's entrypoint. It will be translated to Docker's --entrypoint option while creating the container. The syntax is similar to Dockerfile's ENTRYPOINT directive, where each shell token is a separate string in the array.
+

+Available settings for services +

+
+

Introduced in GitLab and GitLab Runner 9.4.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SettingRequiredGitLab versionDescription
nameyes, when used with any other option9.4Full name of the image that should be used. It should contain the Registry part if needed.
entrypointno9.4Command or script that should be executed as the container's entrypoint. It will be translated to Docker's --entrypoint option while creating the container. The syntax is similar to Dockerfile's ENTRYPOINT directive, where each shell token is a separate string in the array.
commandno9.4Command or script that should be used as the container's command. It will be translated to arguments passed to Docker after the image's name. The syntax is similar to Dockerfile's CMD directive, where each shell token is a separate string in the array.
aliasno9.4Additional alias that can be used to access the service from the job's container. Read Accessing the services for more information.
+

+Starting multiple services from the same image

+
+

Introduced in GitLab and GitLab Runner 9.4. Read more about the extended +configuration options.

+
+

Before the new extended Docker configuration options, the following configuration +would not work properly:

+
services:
+- mysql:latest
+- mysql:latest
+

The Runner would start two containers using the mysql:latest image, but both +of them would be added to the job's container with the mysql alias based on +the default hostname naming. This would end with one +of the services not being accessible.

+

After the new extended Docker configuration options, the above example would +look like:

+
services:
+- name: mysql:latest
+  alias: mysql-1
+- name: mysql:latest
+  alias: mysql-2
+

The Runner will still start two containers using the mysql:latest image, +but now each of them will also be accessible with the alias configured +in .gitlab-ci.yml file.

+

+Setting a command for the service

+
+

Introduced in GitLab and GitLab Runner 9.4. Read more about the extended +configuration options.

+
+

Let's assume you have a super/sql:latest image with some SQL database +inside it and you would like to use it as a service for your job. Let's also +assume that this image doesn't start the database process while starting +the container and the user needs to manually use /usr/bin/super-sql run as +a command to start the database.

+

Before the new extended Docker configuration options, you would need to create +your own image based on the super/sql:latest image, add the default command, +and then use it in job's configuration, like:

+
# my-super-sql:latest image's Dockerfile
+
+FROM super/sql:latest
+CMD ["/usr/bin/super-sql", "run"]
+
# .gitlab-ci.yml
+
+services:
+- my-super-sql:latest
+

After the new extended Docker configuration options, you can now simply +set a command in .gitlab-ci.yml, like:

+
# .gitlab-ci.yml
+
+services:
+- name: super/sql:latest
+  command: ["/usr/bin/super-sql", "run"]
+

As you can see, the syntax of command is similar to Dockerfile's CMD.

+

+Overriding the entrypoint of an image

+
+

Introduced in GitLab and GitLab Runner 9.4. Read more about the extended +configuration options.

+
+

Before showing the available entrypoint override methods, let's describe shortly +how the Runner starts and uses a Docker image for the containers used in the +CI jobs:

+
    +
  1. The Runner starts a Docker container using the defined entrypoint (default +from Dockerfile that may be overridden in .gitlab-ci.yml)
  2. +
  3. The Runner attaches itself to a running container.
  4. +
  5. The Runner prepares a script (the combination of +before_script, +script, +and after_script).
  6. +
  7. The Runner sends the script to the container's shell STDIN and receives the +output.
  8. +
+

To override the entrypoint of a Docker image, the recommended solution is to +define an empty entrypoint in .gitlab-ci.yml, so the Runner doesn't start +a useless shell layer. However, that will not work for all Docker versions, and +you should check which one your Runner is using. Specifically:

+
    +
  • If Docker 17.06 or later is used, the entrypoint can be set to an empty value.
  • +
  • If Docker 17.03 or previous versions are used, the entrypoint can be set to +/bin/sh -c, /bin/bash -c or an equivalent shell available in the image.
  • +
+

The syntax of image:entrypoint is similar to Dockerfile's ENTRYPOINT.

+
+

Let's assume you have a super/sql:experimental image with some SQL database +inside it and you would like to use it as a base image for your job because you +want to execute some tests with this database binary. Let's also assume that +this image is configured with /usr/bin/super-sql run as an entrypoint. That +means that when starting the container without additional options, it will run +the database's process, while Runner expects that the image will have no +entrypoint or that the entrypoint is prepared to start a shell command.

+

With the extended Docker configuration options, instead of creating your +own image based on super/sql:experimental, setting the ENTRYPOINT +to a shell, and then using the new image in your CI job, you can now simply +define an entrypoint in .gitlab-ci.yml.

+

For Docker 17.06+:

+
image:
+  name: super/sql:experimental
+  entrypoint: [""]
+

For Docker =< 17.03:

+
image:
+  name: super/sql:experimental
+  entrypoint: ["/bin/sh", "-c"]
+

+Define image and services in config.toml +

+

Look for the [runners.docker] section:

+
[runners.docker]
+  image = "ruby:2.1"
+  services = ["mysql:latest", "postgres:latest"]
+

The image and services defined this way will be added to all job run by +that runner.

+

+Define an image from a private Container Registry

+
+

Notes:

+
+
    +
  • This feature requires GitLab Runner 1.8 or higher
  • +
  • For GitLab Runner versions >= 0.6, <1.8 there was a partial +support for using private registries, which required manual configuration +of credentials on runner's host. We recommend to upgrade your Runner to +at least version 1.8 if you want to use private registries.
  • +
  • If the repository is private you need to authenticate your GitLab Runner in the +registry. Learn more about how GitLab Runner works in this case.
  • +
+

As an example, let's assume that you want to use the registry.example.com/private/image:latest +image which is private and requires you to login into a private container registry.

+

Let's also assume that these are the login credentials:

+ + + + + + + + + + + + + + + + + + + + + +
KeyValue
registryregistry.example.com
usernamemy_username
passwordmy_password
+

To configure access for registry.example.com, follow these steps:

+
    +
  1. +

    Find what the value of DOCKER_AUTH_CONFIG should be. There are two ways to +accomplish this:

    +
      +
    • +

      First way - Do a docker login on your local machine:

      +
      docker login registry.example.com --username my_username --password my_password
      +

      Then copy the content of ~/.docker/config.json.

      +
    • +
    • +

      Second way - In some setups, it's possible that Docker client will use +the available system keystore to store the result of docker login. In +that case, it's impossible to read ~/.docker/config.json, so you will +need to prepare the required base64-encoded version of +${username}:${password} manually. Open a terminal and execute the +following command:

      +
      ```bash
      +echo -n "my_username:my_password" | base64
      +
      +# Example output to copy
      +bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=
      +```
      +
    • +
    +
  2. +
  3. +

    Create a variable DOCKER_AUTH_CONFIG with the content of the +Docker configuration file as the value:

    +
    {
    +    "auths": {
    +        "registry.example.com": {
    +            "auth": "bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ="
    +        }
    +    }
    +}
    +
  4. +
  5. +

    Optionally,if you followed the first way of finding the DOCKER_AUTH_CONFIG +value, do a docker logout on your computer if you don't need access to the +registry from it:

    +
    docker logout registry.example.com
    +
  6. +
  7. +

    You can now use any private image from registry.example.com defined in +image and/or services in your .gitlab-ci.yml file:

    +
    image: my.registry.tld:5000/namespace/image:tag
    +

    In the example above, GitLab Runner will look at my.registry.tld:5000 for the +image namespace/image:tag.

    +
  8. +
+

You can add configuration for as many registries as you want, adding more +registries to the "auths" hash as described above.

+

+Configuring services

+

Many services accept environment variables which allow you to easily change +database names or set account names depending on the environment.

+

GitLab Runner 0.5.0 and up passes all YAML-defined variables to the created +service containers.

+

For all possible configuration variables check the documentation of each image +provided in their corresponding Docker hub page.

+

Note: All variables will be passed to all services containers. It's not +designed to distinguish which variable should go where.

+

+PostgreSQL service example

+

See the specific documentation for +using PostgreSQL as a service.

+

+MySQL service example

+

See the specific documentation for +using MySQL as a service.

+

+How Docker integration works

+

Below is a high level overview of the steps performed by Docker during job +time.

+
    +
  1. Create any service container: mysql, postgresql, mongodb, redis.
  2. +
  3. Create cache container to store all volumes as defined in config.toml and +Dockerfile of build image (ruby:2.1 as in above example).
  4. +
  5. Create build container and link any service container to build container.
  6. +
  7. Start build container and send job script to the container.
  8. +
  9. Run job script.
  10. +
  11. Checkout code in: /builds/group-name/project-name/.
  12. +
  13. Run any step defined in .gitlab-ci.yml.
  14. +
  15. Check exit status of build script.
  16. +
  17. Remove build container and all created service containers.
  18. +
+

+How to debug a job locally

+

Note: The following commands are run without root privileges. You should be +able to run Docker with your regular user account.

+

First start with creating a file named build_script:

+
cat <<EOF > build_script
+git clone https://gitlab.com/gitlab-org/gitlab-runner.git /builds/gitlab-org/gitlab-runner
+cd /builds/gitlab-org/gitlab-runner
+make
+EOF
+

Here we use as an example the GitLab Runner repository which contains a +Makefile, so running make will execute the commands defined in the Makefile. +Your mileage may vary, so instead of make you could run the command which +is specific to your project.

+

Then create some service containers:

+
docker run -d --name service-mysql mysql:latest
+docker run -d --name service-postgres postgres:latest
+

This will create two service containers, named service-mysql and +service-postgres which use the latest MySQL and PostgreSQL images +respectively. They will both run in the background (-d).

+

Finally, create a build container by executing the build_script file we +created earlier:

+
docker run --name build -i --link=service-mysql:mysql --link=service-postgres:postgres ruby:2.1 /bin/bash < build_script
+

The above command will create a container named build that is spawned from +the ruby:2.1 image and has two services linked to it. The build_script is +piped using STDIN to the bash interpreter which in turn executes the +build_script in the build container.

+

When you finish testing and no longer need the containers, you can remove them +with:

+
docker rm -f -v build service-mysql service-postgres
+

This will forcefully (-f) remove the build container, the two service +containers as well as all volumes (-v) that were created with the container +creation.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/68fe3bed8503098dfa9136d58c7a1ec8 b/docker/tanner/snare/dist/pages/1/68fe3bed8503098dfa9136d58c7a1ec8 new file mode 100644 index 000000000..ec1aa8214 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/68fe3bed8503098dfa9136d58c7a1ec8 @@ -0,0 +1 @@ +.wiki h1,.wiki h2,.wiki h3,.wiki h4,.wiki h5,.wiki h6{margin-top:17px}.wiki h1{font-size:30px}.wiki h2{font-size:22px}.wiki h3{font-size:18px;font-weight:600}header,nav,nav.navbar-collapse,nav.navbar-collapse.collapse,.nav-sidebar,.profiler-results,.tree-ref-holder,.tree-holder .breadcrumb,.nav,.btn,ul.notes-form,.merge-request-ci-status .ci-status-link::after,.issuable-gutter-toggle,.gutter-toggle,.issuable-details .content-block-small,.edit-link,.note-action-button,.right-sidebar,.flash-container,#js-peek{display:none !important}pre{page-break-before:avoid;page-break-inside:auto}.page-gutter{padding-top:0;padding-left:0}.right-sidebar{top:0}a[href]::after{content:none !important} diff --git a/docker/tanner/snare/dist/pages/1/694faabed967b3562b3ea390fea8a79e b/docker/tanner/snare/dist/pages/1/694faabed967b3562b3ea390fea8a79e new file mode 100644 index 000000000..00d0b8e63 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/694faabed967b3562b3ea390fea8a79e @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/6954c68f5a65b9f184096f692b3fb73e b/docker/tanner/snare/dist/pages/1/6954c68f5a65b9f184096f692b3fb73e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6954c68f5a65b9f184096f692b3fb73e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/69c4f8ef6cd36d2275fcf0fdc20ba69d b/docker/tanner/snare/dist/pages/1/69c4f8ef6cd36d2275fcf0fdc20ba69d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/69c4f8ef6cd36d2275fcf0fdc20ba69d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/69ed49a347ba5d3c7f4b970a5b7c1921 b/docker/tanner/snare/dist/pages/1/69ed49a347ba5d3c7f4b970a5b7c1921 new file mode 100644 index 000000000..52c7ddfb4 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/69ed49a347ba5d3c7f4b970a5b7c1921 @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + +GitLab + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/6a178b939f8960f514ac0a4021d329e5 b/docker/tanner/snare/dist/pages/1/6a178b939f8960f514ac0a4021d329e5 new file mode 100644 index 000000000..12ea7c05f --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6a178b939f8960f514ac0a4021d329e5 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/6a1e9dfd75fd7b7e1bd96c01ed4302d8 b/docker/tanner/snare/dist/pages/1/6a1e9dfd75fd7b7e1bd96c01ed4302d8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6a1e9dfd75fd7b7e1bd96c01ed4302d8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6a69b626cbf31a271f24581f70aaf4e8 b/docker/tanner/snare/dist/pages/1/6a69b626cbf31a271f24581f70aaf4e8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6a69b626cbf31a271f24581f70aaf4e8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6a80023a00c831b25b8ef983943b027f b/docker/tanner/snare/dist/pages/1/6a80023a00c831b25b8ef983943b027f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6a80023a00c831b25b8ef983943b027f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6aaac7d49141ad97177294b42d2e0605 b/docker/tanner/snare/dist/pages/1/6aaac7d49141ad97177294b42d2e0605 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6aaac7d49141ad97177294b42d2e0605 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6b19bed8f4fb93f47f2e93f63658ce3a b/docker/tanner/snare/dist/pages/1/6b19bed8f4fb93f47f2e93f63658ce3a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6b19bed8f4fb93f47f2e93f63658ce3a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6c09a9201b7aec606b7a0ab754a2e129 b/docker/tanner/snare/dist/pages/1/6c09a9201b7aec606b7a0ab754a2e129 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6c09a9201b7aec606b7a0ab754a2e129 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6c24ff6951dc207f403145e05a4983e4 b/docker/tanner/snare/dist/pages/1/6c24ff6951dc207f403145e05a4983e4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6c24ff6951dc207f403145e05a4983e4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6c7732f317bc34120efcac8f1046ebcb b/docker/tanner/snare/dist/pages/1/6c7732f317bc34120efcac8f1046ebcb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6c7732f317bc34120efcac8f1046ebcb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6c8bd8b3136b724e040e12dd5a327d79 b/docker/tanner/snare/dist/pages/1/6c8bd8b3136b724e040e12dd5a327d79 new file mode 100644 index 000000000..7680b6205 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6c8bd8b3136b724e040e12dd5a327d79 @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + +Index · Git · Topics · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Git documentation

+

Git is a free and open source +distributed version control system designed to handle everything from small to +very large projects with speed and efficiency.

+

GitLab is a Git-based fully integrated platform for +software development. Besides Git's functionalities, GitLab has a lot of +powerful features to enhance your +workflow.

+

We've gathered some resources to help you to get the best from Git with GitLab.

+

+Getting started

+ +

Third-party references:

+ +

+Concepts

+ +

+Exploring Git

+ +

+Troubleshooting Git

+ +

+Branching strategies

+ +

Third-party references:

+ +

+Advanced use

+ +

+API

+ +

+Git LFS

+ +
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/6d587be498b63c46a0216fd9dc6a5f05 b/docker/tanner/snare/dist/pages/1/6d587be498b63c46a0216fd9dc6a5f05 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6d587be498b63c46a0216fd9dc6a5f05 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6d5d685627634885ea0a2053326a39e0 b/docker/tanner/snare/dist/pages/1/6d5d685627634885ea0a2053326a39e0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6d5d685627634885ea0a2053326a39e0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6d862968e7da2528dab3fbf40a8118bf b/docker/tanner/snare/dist/pages/1/6d862968e7da2528dab3fbf40a8118bf new file mode 100644 index 000000000..56db786a2 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6d862968e7da2528dab3fbf40a8118bf @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + +Index · Performance · Monitoring · Administration · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab Performance Monitoring

+

GitLab comes with its own application performance measuring system as of GitLab +8.4, simply called "GitLab Performance Monitoring". GitLab Performance Monitoring is available in both the +Community and Enterprise editions.

+

Apart from this introduction, you are advised to read through the following +documents in order to understand and properly configure GitLab Performance Monitoring:

+ +
+

Note: +Omnibus GitLab 8.16 includes Prometheus as an additional tool to collect +metrics. It will eventually replace InfluxDB when their metrics collection is +on par. Read more in the Prometheus documentation.

+
+

+Introduction to GitLab Performance Monitoring

+

GitLab Performance Monitoring makes it possible to measure a wide variety of statistics +including (but not limited to):

+
    +
  • The time it took to complete a transaction (a web request or Sidekiq job).
  • +
  • The time spent in running SQL queries and rendering HAML views.
  • +
  • The time spent executing (instrumented) Ruby methods.
  • +
  • Ruby object allocations, and retained objects in particular.
  • +
  • System statistics such as the process' memory usage and open file descriptors.
  • +
  • Ruby garbage collection statistics.
  • +
+

Metrics data is written to InfluxDB over UDP. Stored +data can be visualized using Grafana or any other application that +supports reading data from InfluxDB. Alternatively data can be queried using the +InfluxDB CLI.

+

+Metric Types

+

Two types of metrics are collected:

+
    +
  1. Transaction specific metrics.
  2. +
  3. Sampled metrics, collected at a certain interval in a separate thread.
  4. +
+

+Transaction Metrics

+

Transaction metrics are metrics that can be associated with a single +transaction. This includes statistics such as the transaction duration, timings +of any executed SQL queries, time spent rendering HAML views, etc. These metrics +are collected for every Rack request and Sidekiq job processed.

+

+Sampled Metrics

+

Sampled metrics are metrics that can't be associated with a single transaction. +Examples include garbage collection statistics and retained Ruby objects. These +metrics are collected at a regular interval. This interval is made up out of two +parts:

+
    +
  1. A user defined interval.
  2. +
  3. A randomly generated offset added on top of the interval, the same offset +can't be used twice in a row.
  4. +
+

The actual interval can be anywhere between a half of the defined interval and a +half above the interval. For example, for a user defined interval of 15 seconds +the actual interval can be anywhere between 7.5 and 22.5. The interval is +re-generated for every sampling run instead of being generated once and re-used +for the duration of the process' lifetime.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/6e837598dd6a182cdc982ce9b5ba280f b/docker/tanner/snare/dist/pages/1/6e837598dd6a182cdc982ce9b5ba280f new file mode 100644 index 000000000..5316d51f4 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6e837598dd6a182cdc982ce9b5ba280f @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + +Index · Settings · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Project settings

+

NOTE: Note: +Only project Maintainers and Admin users have the permissions to access a project +settings.

+

You can adjust your project settings by navigating +to your project's homepage and clicking Settings.

+

+General settings

+

Under a project's general settings you can find everything concerning the +functionality of a project.

+

+General project settings

+

Adjust your project's name, description, avatar, default branch, and tags:

+

general project settings

+

+Sharing and permissions

+

Set up your project's access, visibility, and enable Container Registry for your projects:

+

projects sharing permissions

+

+Issue settings

+

Add an issue description template to your project, so that every new issue will start with a custom template.

+

+Merge request settings

+

Set up your project's merge request settings:

+ +

project's merge request settings

+

+Service Desk

+

Enable Service Desk for your project to offer customer support. Service Desk is available in GitLab Premium.

+

+Export project

+

Learn how to export a project in GitLab.

+

+Advanced settings

+

Here you can run housekeeping, archive, rename, transfer, or remove a project.

+

+Archiving a project

+

NOTE: Note: +Only project Owners and Admin users have the permissions to archive a project.

+

Archiving a project makes it read-only for all users and indicates that it is +no longer actively maintained. Projects that have been archived can also be +unarchived.

+

When a project is archived, the repository, issues, merge requests and all +other features are read-only. Archived projects are also hidden +in project listings.

+

To archive a project:

+
    +
  1. Navigate to your project's Settings > General > Advanced settings.
  2. +
  3. In the Archive project section, click the Archive project button.
  4. +
  5. Confirm the action when asked to.
  6. +
+

+Renaming a repository

+

NOTE: Note: +Only project Maintainers and Admin users have the permissions to rename a +repository. Not to be confused with a project's name where it can also be +changed from the general project settings.

+

A project's repository name defines its URL (the one you use to access the +project via a browser) and its place on the file disk where GitLab is installed.

+

To rename a repository:

+
    +
  1. Navigate to your project's Settings > General > Advanced settings.
  2. +
  3. Under "Rename repository", change the "Path" to your liking.
  4. +
  5. Hit Rename project.
  6. +
+

Remember that this can have unintended side effects since everyone with the +old URL will not be able to push or pull. Read more about what happens with the +redirects when renaming repositories.

+

+Transferring an existing project into another namespace

+

NOTE: Note: +Only project Owners and Admin users have the permissions to transfer a project.

+

You can transfer an existing project into a group if:

+
    +
  1. you have at least Maintainer permissions to that group
  2. +
  3. you are an Owner of the project.
  4. +
+

Similarly, if you are an owner of a group, you can transfer any of its projects +under your own user.

+

To transfer a project:

+
    +
  1. Navigate to your project's Settings > General > Advanced settings.
  2. +
  3. Under "Transfer project", choose the namespace you want to transfer the +project to.
  4. +
  5. Confirm the transfer by typing the project's path as instructed.
  6. +
+

Once done, you will be taken to the new project's namespace. At this point, +read what happens with the +redirects from the old project to the new one.

+

NOTE: Note: +GitLab administrators can use the admin interface to move any project to any +namespace if needed.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/6ed33740fbb3a1eb44a5edc191cc735d b/docker/tanner/snare/dist/pages/1/6ed33740fbb3a1eb44a5edc191cc735d new file mode 100644 index 000000000..5d3b70cba --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6ed33740fbb3a1eb44a5edc191cc735d @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + +Index · Search · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Search through GitLab

+

+Issues and merge requests

+

To search through issues and merge requests in multiple projects, you can use the left-sidebar.

+

Click the menu bar, then Issues or Merge Requests, which work in the same way, +therefore, the following notes are valid for both.

+

The number displayed on their right represents the number of issues and merge requests assigned to you.

+

menu bar - issues and MRs assigned to you

+

When you click Issues, you'll see the opened issues assigned to you straight away:

+

Issues assigned to you

+

You can filter them by Author, Assignee, Milestone, and Labels, +searching through Open, Closed, and All issues.

+

Of course, you can combine all filters together.

+

+Issues and MRs assigned to you or created by you

+

You'll find a shortcut to issues and merge requests create by you or assigned to you +on the search field on the top-right of your screen:

+

shortcut to your issues and mrs

+

+Issues and merge requests per project

+

If you want to search for issues present in a specific project, navigate to +a project's Issues tab, and click on the field Search or filter results.... It will +display a dropdown menu, from which you can add filters per author, assignee, milestone, +label, weight, and 'my-reaction' (based on your emoji votes). When done, press Enter on your keyboard to filter the issues.

+

filter issues in a project

+

The same process is valid for merge requests. Navigate to your project's Merge Requests tab, +and click Search or filter results.... Merge requests can be filtered by author, assignee, +milestone, and label.

+

+Searching for specific terms

+

You can filter issues and merge requests by specific terms included in titles or descriptions.

+
    +
  • Syntax +
      +
    • Searches look for all the words in a query, in any order. E.g.: searching +issues for display bug will return all issues matching both those words, in any order.
    • +
    • To find the exact term, use double quotes: "display bug" +
    • +
    +
  • +
  • Limitation +
      +
    • For performance reasons, terms shorter than 3 chars are ignored. E.g.: searching +issues for included in titles is same as included titles +
    • +
    +
  • +
+

filter issues by specific terms

+

+Issues and merge requests per group

+

Similar to Issues and merge requests per project, you can also search for issues +within a group. Navigate to a group's Issues tab and query search results in +the same way as you do for projects.

+

filter issues in a group

+

The same process is valid for merge requests. Navigate to your project's Merge Requests tab.

+

+Search history

+

You can view recent searches by clicking on the little arrow-clock icon, which is to the left of the search input. Click the search entry to run that search again. This feature is available for issues and merge requests. Searches are stored locally in your browser.

+

search history

+

+Removing search filters

+

Individual filters can be removed by clicking on the filter's (x) button or backspacing. The entire search filter can be cleared by clicking on the search box's (x) button.

+

+Shortcut

+

You'll also find a shortcut on the search field on the top-right of the project's dashboard to +quickly access issues and merge requests created or assigned to you within that project:

+

search per project - shortcut

+

+Todos

+

Your todos can be searched by "to do" and "done". +You can filter them per project, +author, type, and action. Also, you can sort them by +Label priority, +Last created and Oldest created.

+

+Projects

+

You can search through your projects from the left menu, by clicking the menu bar, then Projects. +On the field Filter by name, type the project or group name you want to find, and GitLab +will filter them for you as you type.

+

You can also look for the projects you starred (Starred projects), and Explore all +public and internal projects available in GitLab.com, from which you can filter by visibility, +through Trending, best rated with Most starts, or All of them.

+

You can also sort them by Name, Last created, Oldest created, Last updated, +Oldest updated, Owner, and choose to hide or show archived projects:

+

sort projects

+

+Groups

+

Similarly to projects search, you can search through your groups from +the left menu, by clicking the menu bar, then Groups.

+

On the field Filter by name, type the group name you want to find, and GitLab +will filter them for you as you type.

+

You can also Explore all public and internal groups available in GitLab.com, +and sort them by Last created, Oldest created, Last updated, or Oldest updated.

+

+Issue Boards

+

From an Issue Board, you can filter issues by Author, Assignee, Milestone, and Labels. +You can also filter them by name (issue title), from the field Filter by name, which is loaded as you type.

+

When you want to search for issues to add to lists present in your Issue Board, click +the button Add issues on the top-right of your screen, opening a modal window from which +you'll be able to, besides filtering them by Name, Author, Assignee, Milestone, +and Labels, select multiple issues to add to a list of your choice:

+

search and select issues to add to board

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/6fb39b28598e1dfab66c95999b46cbef b/docker/tanner/snare/dist/pages/1/6fb39b28598e1dfab66c95999b46cbef new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6fb39b28598e1dfab66c95999b46cbef @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6fcd826d4c1362764a295dac50b0e779 b/docker/tanner/snare/dist/pages/1/6fcd826d4c1362764a295dac50b0e779 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6fcd826d4c1362764a295dac50b0e779 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/6fe373fc1383537697582aab757044da b/docker/tanner/snare/dist/pages/1/6fe373fc1383537697582aab757044da new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/6fe373fc1383537697582aab757044da @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/700ceb5ffbce844865602a86b7d36da1 b/docker/tanner/snare/dist/pages/1/700ceb5ffbce844865602a86b7d36da1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/700ceb5ffbce844865602a86b7d36da1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7092af6cda8c29bb8d8666522e97e9e2 b/docker/tanner/snare/dist/pages/1/7092af6cda8c29bb8d8666522e97e9e2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7092af6cda8c29bb8d8666522e97e9e2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/709d1a3f8e18b60f13111549220bd60a b/docker/tanner/snare/dist/pages/1/709d1a3f8e18b60f13111549220bd60a new file mode 100644 index 000000000..f78c0affa --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/709d1a3f8e18b60f13111549220bd60a @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/70f42cfd36b8aa812e16c3066f8be340 b/docker/tanner/snare/dist/pages/1/70f42cfd36b8aa812e16c3066f8be340 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/70f42cfd36b8aa812e16c3066f8be340 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/71131b95d35f45a000265e8c315131bb b/docker/tanner/snare/dist/pages/1/71131b95d35f45a000265e8c315131bb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/71131b95d35f45a000265e8c315131bb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/711417243fa13ad0c84f09c080c6c945 b/docker/tanner/snare/dist/pages/1/711417243fa13ad0c84f09c080c6c945 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/711417243fa13ad0c84f09c080c6c945 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7122f0f5590e3cb1c9ce0859fbd6c6cd b/docker/tanner/snare/dist/pages/1/7122f0f5590e3cb1c9ce0859fbd6c6cd new file mode 100644 index 000000000..a25f0b2f8 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7122f0f5590e3cb1c9ce0859fbd6c6cd @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/7145faf07433bd7e98ea6d86f3b81d20 b/docker/tanner/snare/dist/pages/1/7145faf07433bd7e98ea6d86f3b81d20 new file mode 100644 index 000000000..5bf88f9a0 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7145faf07433bd7e98ea6d86f3b81d20 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/722cf8946e1aad3a99d4fdc307a84924 b/docker/tanner/snare/dist/pages/1/722cf8946e1aad3a99d4fdc307a84924 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/722cf8946e1aad3a99d4fdc307a84924 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/72dddc0eb341b3c2e4200a93476a2848 b/docker/tanner/snare/dist/pages/1/72dddc0eb341b3c2e4200a93476a2848 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/72dddc0eb341b3c2e4200a93476a2848 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/73509d4d41331f04674e8643ce587234 b/docker/tanner/snare/dist/pages/1/73509d4d41331f04674e8643ce587234 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/73509d4d41331f04674e8643ce587234 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/739779958ef7b4930fa0c764246ae7f6 b/docker/tanner/snare/dist/pages/1/739779958ef7b4930fa0c764246ae7f6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/739779958ef7b4930fa0c764246ae7f6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/73bee30ec79366b0a29b46f79fd6be50 b/docker/tanner/snare/dist/pages/1/73bee30ec79366b0a29b46f79fd6be50 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/73bee30ec79366b0a29b46f79fd6be50 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/748458c06c72cb131fbacba2eac061e8 b/docker/tanner/snare/dist/pages/1/748458c06c72cb131fbacba2eac061e8 new file mode 100644 index 000000000..ca58b89b1 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/748458c06c72cb131fbacba2eac061e8 @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + +Snippets · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+
+
    +
  • +
    Nothing here.
    +
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/74c862a462f8886814ab746f34f39ae6 b/docker/tanner/snare/dist/pages/1/74c862a462f8886814ab746f34f39ae6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/74c862a462f8886814ab746f34f39ae6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/757fefd9ff867bd8cfa8dec9e7c92560 b/docker/tanner/snare/dist/pages/1/757fefd9ff867bd8cfa8dec9e7c92560 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/757fefd9ff867bd8cfa8dec9e7c92560 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7581681477cdc17ef4a0bd2673ec56f9 b/docker/tanner/snare/dist/pages/1/7581681477cdc17ef4a0bd2673ec56f9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7581681477cdc17ef4a0bd2673ec56f9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/75a81dda9a90bf119880b897713113c3 b/docker/tanner/snare/dist/pages/1/75a81dda9a90bf119880b897713113c3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/75a81dda9a90bf119880b897713113c3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/75f33406b5ed3f6c2d078d61f9b89a94 b/docker/tanner/snare/dist/pages/1/75f33406b5ed3f6c2d078d61f9b89a94 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/75f33406b5ed3f6c2d078d61f9b89a94 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/761f6b69deeb73db9e3a349986ce535f b/docker/tanner/snare/dist/pages/1/761f6b69deeb73db9e3a349986ce535f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/761f6b69deeb73db9e3a349986ce535f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7673efe2e388fe03329f75d55c855776 b/docker/tanner/snare/dist/pages/1/7673efe2e388fe03329f75d55c855776 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7673efe2e388fe03329f75d55c855776 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/771f2536b6e9e74ee33e84d6d7d9e5eb b/docker/tanner/snare/dist/pages/1/771f2536b6e9e74ee33e84d6d7d9e5eb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/771f2536b6e9e74ee33e84d6d7d9e5eb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/773fa490ae278efcfddda13e60228a3d b/docker/tanner/snare/dist/pages/1/773fa490ae278efcfddda13e60228a3d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/773fa490ae278efcfddda13e60228a3d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/77c170f592c19148c57557d90e9dbad6 b/docker/tanner/snare/dist/pages/1/77c170f592c19148c57557d90e9dbad6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/77c170f592c19148c57557d90e9dbad6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/78379ebe795324d4320750e5c96c0e95 b/docker/tanner/snare/dist/pages/1/78379ebe795324d4320750e5c96c0e95 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/78379ebe795324d4320750e5c96c0e95 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/78648a1fa794db2762d19f1a0a5c8851 b/docker/tanner/snare/dist/pages/1/78648a1fa794db2762d19f1a0a5c8851 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/78648a1fa794db2762d19f1a0a5c8851 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7866ab4a8ea83a94d29f4dc9ee63e85d b/docker/tanner/snare/dist/pages/1/7866ab4a8ea83a94d29f4dc9ee63e85d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7866ab4a8ea83a94d29f4dc9ee63e85d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/78be0a980ad7431f92574cd6193824df b/docker/tanner/snare/dist/pages/1/78be0a980ad7431f92574cd6193824df new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/78be0a980ad7431f92574cd6193824df @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/78ff55ae42df93f65a06840b52050a86 b/docker/tanner/snare/dist/pages/1/78ff55ae42df93f65a06840b52050a86 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/78ff55ae42df93f65a06840b52050a86 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/794c12aee30c7d10fa8d9edbd677b007 b/docker/tanner/snare/dist/pages/1/794c12aee30c7d10fa8d9edbd677b007 new file mode 100644 index 000000000..dd912ea7f --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/794c12aee30c7d10fa8d9edbd677b007 @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + +Index · Authentication · Topics · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docker/tanner/snare/dist/pages/1/79543f32360f209cef5880d53cede0ce b/docker/tanner/snare/dist/pages/1/79543f32360f209cef5880d53cede0ce new file mode 100644 index 000000000..3f99f3d2e --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/79543f32360f209cef5880d53cede0ce @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/79576718520713be10b8211f0ce73d7d b/docker/tanner/snare/dist/pages/1/79576718520713be10b8211f0ce73d7d new file mode 100644 index 000000000..b23ba0c4e --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/79576718520713be10b8211f0ce73d7d @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/79b5f9294878ba19dc20c6c67de92bea b/docker/tanner/snare/dist/pages/1/79b5f9294878ba19dc20c6c67de92bea new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/79b5f9294878ba19dc20c6c67de92bea @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7aaa6c1a397f32644a99ad3bee9b3a31 b/docker/tanner/snare/dist/pages/1/7aaa6c1a397f32644a99ad3bee9b3a31 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7aaa6c1a397f32644a99ad3bee9b3a31 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7ae012b8ef01bfb6ce8133d863adcce4 b/docker/tanner/snare/dist/pages/1/7ae012b8ef01bfb6ce8133d863adcce4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7ae012b8ef01bfb6ce8133d863adcce4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7b1ccf5750f2780e65e99b4fc0ad643c b/docker/tanner/snare/dist/pages/1/7b1ccf5750f2780e65e99b4fc0ad643c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7b1ccf5750f2780e65e99b4fc0ad643c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7b9b1e442bb6d37291ee56a390ee958b b/docker/tanner/snare/dist/pages/1/7b9b1e442bb6d37291ee56a390ee958b new file mode 100644 index 000000000..8d0e2262b --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7b9b1e442bb6d37291ee56a390ee958b @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/7bb673a932a49d6a489394451a7df792 b/docker/tanner/snare/dist/pages/1/7bb673a932a49d6a489394451a7df792 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7bb673a932a49d6a489394451a7df792 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7bd306bef6eba642bc747b6d2d70defb b/docker/tanner/snare/dist/pages/1/7bd306bef6eba642bc747b6d2d70defb new file mode 100644 index 000000000..39f96243b --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7bd306bef6eba642bc747b6d2d70defb @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + +Quick actions · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab quick actions

+

Quick actions are textual shortcuts for common actions on issues or merge +requests that are usually done by clicking buttons or dropdowns in GitLab's UI. +You can enter these commands while creating a new issue or merge request, and +in comments. Each command should be on a separate line in order to be properly +detected and executed. The commands are removed from the issue, merge request or +comment body before it is saved and will not be visible to anyone else.

+

Below is a list of all of the available commands and descriptions about what they +do.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommandAction
/closeClose the issue or merge request
/reopenReopen the issue or merge request
/mergeMerge (when pipeline succeeds)
/title <New title>Change title
/assign @usernameAssign
/unassignRemove assignee
/milestone %milestoneSet milestone
/remove_milestoneRemove milestone
/label ~foo ~"bar baz"Add label(s)
/unlabel ~foo ~"bar baz"Remove all or specific label(s)
/relabel ~foo ~"bar baz"Replace all label(s)
/todoAdd a todo
/doneMark todo as done
/subscribeSubscribe
/unsubscribeUnsubscribe
/due <in 2 days | this Friday | December 31st>Set due date
/remove_due_dateRemove due date
/wipToggle the Work In Progress status
/estimate <1w 3d 2h 14m>Set time estimate
/remove_estimateRemove estimated time
/spend <time(1h 30m | -1h 5m)> <date(YYYY-MM-DD)>Add or subtract spent time; optionally, specify the date that time was spent on
/remove_time_spentRemove time spent
/target_branch <Branch Name>Set target branch for current merge request
/award :emoji:Toggle award for :emoji:
/board_move ~columnMove issue to column on the board
/duplicate #issueCloses this issue and marks it as a duplicate of another issue
/move path/to/projectMoves issue to another project
/tableflipAppend the comment with (╯°□°)╯︵ ┻━┻ +
/shrugAppend the comment with ¯\_(ツ)_/¯ +
/copy_metadata #issue | !merge_requestCopy labels and milestone from other issue or merge request
/confidentialMakes the issue confidential
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/7c215b4f601d294eb86370969589b2de b/docker/tanner/snare/dist/pages/1/7c215b4f601d294eb86370969589b2de new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7c215b4f601d294eb86370969589b2de @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7c688c71cec54a46941dacff7d73a951 b/docker/tanner/snare/dist/pages/1/7c688c71cec54a46941dacff7d73a951 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7c688c71cec54a46941dacff7d73a951 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7cba52c19d500e8bd2804dd42cbb7cac b/docker/tanner/snare/dist/pages/1/7cba52c19d500e8bd2804dd42cbb7cac new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7cba52c19d500e8bd2804dd42cbb7cac @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7d10fc4b3f34fcbb00303f91c8e7a54d b/docker/tanner/snare/dist/pages/1/7d10fc4b3f34fcbb00303f91c8e7a54d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7d10fc4b3f34fcbb00303f91c8e7a54d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7d116c68d2bf65b42f6660506b6efdc0 b/docker/tanner/snare/dist/pages/1/7d116c68d2bf65b42f6660506b6efdc0 new file mode 100644 index 000000000..b2093d015 Binary files /dev/null and b/docker/tanner/snare/dist/pages/1/7d116c68d2bf65b42f6660506b6efdc0 differ diff --git a/docker/tanner/snare/dist/pages/1/7d7bab58e561a841e7846fef92e8233d b/docker/tanner/snare/dist/pages/1/7d7bab58e561a841e7846fef92e8233d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7d7bab58e561a841e7846fef92e8233d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7d86a897181889317e4d621e66ab99e3 b/docker/tanner/snare/dist/pages/1/7d86a897181889317e4d621e66ab99e3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7d86a897181889317e4d621e66ab99e3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7dd38183ffa0f5daf9bcf4abdf9d7d6e b/docker/tanner/snare/dist/pages/1/7dd38183ffa0f5daf9bcf4abdf9d7d6e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7dd38183ffa0f5daf9bcf4abdf9d7d6e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7e851c4e91beced9485a252701d09a45 b/docker/tanner/snare/dist/pages/1/7e851c4e91beced9485a252701d09a45 new file mode 100644 index 000000000..d4ed5e1a7 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7e851c4e91beced9485a252701d09a45 @@ -0,0 +1,2 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[208],{1045:function(e,n,t){t(31),e.exports=t(682)},682:function(e,n,t){"use strict";t.r(n);var i=t(180);var s=function e(){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e);var n=document.querySelector("form#group-filter-form"),t=document.querySelector(".js-groups-list-filter"),s=document.querySelector(".js-groups-list-holder");n&&t&&s&&new i.a(n,t,s).initSearch()},r=t(38),o=t.n(r),a=function(){function e(e,n){for(var t=0;t + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/7fdaeb7d0ff50a96244becd477d5d064 b/docker/tanner/snare/dist/pages/1/7fdaeb7d0ff50a96244becd477d5d064 new file mode 100644 index 000000000..920d272c5 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7fdaeb7d0ff50a96244becd477d5d064 @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + +Mattermost slash commands · Integrations · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Mattermost slash commands

+
+

Introduced in GitLab 8.14

+
+

Mattermost commands give users an extra interface to perform common operations +from the chat environment. This allows one to, for example, create an issue as +soon as the idea was discussed in Mattermost.

+

+Prerequisites

+

Mattermost 3.4 and up is required.

+

If you have the Omnibus GitLab package installed, Mattermost is already bundled +in it. All you have to do is configure it. Read more in the +Omnibus GitLab Mattermost documentation.

+

+Automated Configuration

+

If Mattermost is installed on the same server as GitLab, the configuration process can be +done for you by GitLab.

+

Go to the Mattermost Slash Command service on your project and click the 'Add to Mattermost' button.

+

+Manual Configuration

+

The configuration consists of two parts. First you need to enable the slash +commands in Mattermost and then enable the service in GitLab.

+

+Step 1. Enable custom slash commands in Mattermost

+

This step is only required when using a source install, omnibus installs will be +preconfigured with the right settings.

+

The first thing to do in Mattermost is to enable custom slash commands from +the administrator console.

+
    +
  1. +

    Log in with an account that has admin privileges and navigate to the system +console.

    +

    Mattermost go to console

    +
    +
  2. +
  3. +

    Click Custom integrations and set Enable Custom Slash Commands, +Enable custom integrations to override usernames, and Override +custom integrations to override profile picture icons to true

    +

    Mattermost console

    +
    +
  4. +
  5. +

    Click Save at the bottom to save the changes.

    +
  6. +
+

+Step 2. Open the Mattermost slash commands service in GitLab

+
    +
  1. +

    Open a new tab for GitLab, go to your project's +Integrations page +and select the Mattermost command service to configure it. +A screen will appear with all the values you need to copy in Mattermost as +described in the next step. Leave the window open.

    +
    +

    Note: +GitLab will propose some values for the Mattermost settings. The only one +required to copy-paste as-is is the Request URL, all the others are just +suggestions.

    +
    +

    Mattermost setup instructions

    +
    +
  2. +
  3. +

    Proceed to the next step and create a slash command in Mattermost with the +above values.

    +
  4. +
+

+Step 3. Create a new custom slash command in Mattermost

+

Now that you have enabled custom slash commands in Mattermost and opened +the Mattermost slash commands service in GitLab, it's time to copy these values +in a new slash command.

+
    +
  1. +

    Back to Mattermost, under your team page settings, you should see the +Integrations option.

    +

    Mattermost team integrations

    +
    +
  2. +
  3. +

    Go to the Slash Commands integration and add a new one by clicking the +Add Slash Command button.

    +

    Mattermost add command

    +
    +
  4. +
  5. +

    Fill in the options for the custom command as described in +step 2.

    +
    +

    Note: +If you plan on connecting multiple projects, pick a slash command trigger +word that relates to your projects such as /gitlab-project-name or even +just /project-name. Only use /gitlab if you will only connect a single +project to your Mattermost team.

    +
    +

    Mattermost add command configuration

    +
  6. +
  7. +

    After you setup all the values, copy the token (we will use it below) and +click Done.

    +

    Mattermost slash command token

    +
  8. +
+

+Step 4. Copy the Mattermost token into the Mattermost slash command service

+
    +
  1. +

    In GitLab, paste the Mattermost token you copied in the previous step and +check the Active checkbox.

    +

    Mattermost copy token to GitLab

    +
  2. +
  3. +

    Click Save changes for the changes to take effect.

    +
  4. +
+
+

You are now set to start using slash commands in Mattermost that talk to the +GitLab project you configured.

+

+Authorizing Mattermost to interact with GitLab

+

The first time a user will interact with the newly created slash commands, +Mattermost will trigger an authorization process.

+

Mattermost bot authorize

+

This will connect your Mattermost user with your GitLab user. You can +see all authorized chat accounts in your profile's page under Chat.

+

When the authorization process is complete, you can start interacting with +GitLab using the Mattermost commands.

+

+Available slash commands

+

The available slash commands are:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
CommandDescriptionExample
/<trigger> issue new <title> ⇧ Shift+↵ Enter <description>Create a new issue in the project that <trigger> is tied to. <description> is optional./gitlab issue new We need to change the homepage
/<trigger> issue show <issue-number>Show the issue with ID <issue-number> from the project that <trigger> is tied to./gitlab issue show 42
/<trigger> deploy <environment> to <environment>Start the CI job that deploys from one environment to another, for example staging to production. CI/CD must be properly configured./gitlab deploy staging to production
+

To see a list of available commands to interact with GitLab, type the +trigger word followed by help. Example: /gitlab help

+

Mattermost bot available commands

+

+Permissions

+

The permissions to run the available commands derive from +the permissions you have on the project.

+

+Further reading

+ +
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/7fe4a1285469380522b45d18c26de3d8 b/docker/tanner/snare/dist/pages/1/7fe4a1285469380522b45d18c26de3d8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7fe4a1285469380522b45d18c26de3d8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/7ff9eaf1c3741f398055e4f36ccbb7ee b/docker/tanner/snare/dist/pages/1/7ff9eaf1c3741f398055e4f36ccbb7ee new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/7ff9eaf1c3741f398055e4f36ccbb7ee @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8090eacde5c06a84d25d285992513bbf b/docker/tanner/snare/dist/pages/1/8090eacde5c06a84d25d285992513bbf new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8090eacde5c06a84d25d285992513bbf @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/80ce607a5b2bf9fc250b4c6f83294583 b/docker/tanner/snare/dist/pages/1/80ce607a5b2bf9fc250b4c6f83294583 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/80ce607a5b2bf9fc250b4c6f83294583 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/80d26353edf3fd60eca1945e4baa2de4 b/docker/tanner/snare/dist/pages/1/80d26353edf3fd60eca1945e4baa2de4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/80d26353edf3fd60eca1945e4baa2de4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/80f33d89cede7301b23609353f199359 b/docker/tanner/snare/dist/pages/1/80f33d89cede7301b23609353f199359 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/80f33d89cede7301b23609353f199359 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/816b7fc27586d7c309d6e3100848b386 b/docker/tanner/snare/dist/pages/1/816b7fc27586d7c309d6e3100848b386 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/816b7fc27586d7c309d6e3100848b386 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/816fb186092a119a15b51e7167e4cdbb b/docker/tanner/snare/dist/pages/1/816fb186092a119a15b51e7167e4cdbb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/816fb186092a119a15b51e7167e4cdbb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/81a9d96561846719d8215a353d61df73 b/docker/tanner/snare/dist/pages/1/81a9d96561846719d8215a353d61df73 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/81a9d96561846719d8215a353d61df73 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/81bd816359b0e304a56a4a5b55b637f4 b/docker/tanner/snare/dist/pages/1/81bd816359b0e304a56a4a5b55b637f4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/81bd816359b0e304a56a4a5b55b637f4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/81c5705e6676bc03acb905c1d347ab1e b/docker/tanner/snare/dist/pages/1/81c5705e6676bc03acb905c1d347ab1e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/81c5705e6676bc03acb905c1d347ab1e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/81d6902707c7c78da15a2c5ea7c5dc3d b/docker/tanner/snare/dist/pages/1/81d6902707c7c78da15a2c5ea7c5dc3d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/81d6902707c7c78da15a2c5ea7c5dc3d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/822d249e88417164b332d883dd37fd7e b/docker/tanner/snare/dist/pages/1/822d249e88417164b332d883dd37fd7e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/822d249e88417164b332d883dd37fd7e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/826639e04249550e94604b6451e18ae1 b/docker/tanner/snare/dist/pages/1/826639e04249550e94604b6451e18ae1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/826639e04249550e94604b6451e18ae1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/826da5f6ef29427f0d6e6ead3cdfce7f b/docker/tanner/snare/dist/pages/1/826da5f6ef29427f0d6e6ead3cdfce7f new file mode 100644 index 000000000..4da1a0f76 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/826da5f6ef29427f0d6e6ead3cdfce7f @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/832c5d1304f500e6212fbfc65d06effc b/docker/tanner/snare/dist/pages/1/832c5d1304f500e6212fbfc65d06effc new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/832c5d1304f500e6212fbfc65d06effc @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8360fe0e1f33f965f905bf5256695082 b/docker/tanner/snare/dist/pages/1/8360fe0e1f33f965f905bf5256695082 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8360fe0e1f33f965f905bf5256695082 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/83b507def74bb10950678feffc5557da b/docker/tanner/snare/dist/pages/1/83b507def74bb10950678feffc5557da new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/83b507def74bb10950678feffc5557da @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8423a576d0f5c37f8d2b9db759aea7a3 b/docker/tanner/snare/dist/pages/1/8423a576d0f5c37f8d2b9db759aea7a3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8423a576d0f5c37f8d2b9db759aea7a3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8443a514e201e71f0c1be4892e92ef5b b/docker/tanner/snare/dist/pages/1/8443a514e201e71f0c1be4892e92ef5b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8443a514e201e71f0c1be4892e92ef5b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8452f75b4f00d055c117c64d3facdfa7 b/docker/tanner/snare/dist/pages/1/8452f75b4f00d055c117c64d3facdfa7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8452f75b4f00d055c117c64d3facdfa7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/84bb8b9ff2ad1c7afd2ede8dcbb80970 b/docker/tanner/snare/dist/pages/1/84bb8b9ff2ad1c7afd2ede8dcbb80970 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/84bb8b9ff2ad1c7afd2ede8dcbb80970 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/84d089f093bb512afbb15908e47923f2 b/docker/tanner/snare/dist/pages/1/84d089f093bb512afbb15908e47923f2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/84d089f093bb512afbb15908e47923f2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/852c13e01021c8689866588c9ab46337 b/docker/tanner/snare/dist/pages/1/852c13e01021c8689866588c9ab46337 new file mode 100644 index 000000000..4f079d8b6 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/852c13e01021c8689866588c9ab46337 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/8580b99b7c7fa8bf51fac9eaaa078eb2 b/docker/tanner/snare/dist/pages/1/8580b99b7c7fa8bf51fac9eaaa078eb2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8580b99b7c7fa8bf51fac9eaaa078eb2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/85a770b317e6f9b69955de5083a8596f b/docker/tanner/snare/dist/pages/1/85a770b317e6f9b69955de5083a8596f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/85a770b317e6f9b69955de5083a8596f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/871431dc40b79c8b7f6334269bf7b7f8 b/docker/tanner/snare/dist/pages/1/871431dc40b79c8b7f6334269bf7b7f8 new file mode 100644 index 000000000..995630dee --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/871431dc40b79c8b7f6334269bf7b7f8 @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + +Prometheus · Integrations · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Prometheus integration

+
+

Introduced in GitLab 9.0.

+
+

GitLab offers powerful integration with Prometheus for monitoring key metrics of your apps, directly within GitLab. +Metrics for each environment are retrieved from Prometheus, and then displayed +within the GitLab interface.

+

Environment Dashboard

+

There are two ways to setup Prometheus integration, depending on where your apps are running:

+ +

Once enabled, GitLab will automatically detect metrics from known services in the metric library.

+

+Enabling Prometheus Integration

+

+Managed Prometheus on Kubernetes

+
+

Note: Introduced in GitLab 10.5

+
+

GitLab can seamlessly deploy and manage Prometheus on a connected Kubernetes cluster, making monitoring of your apps easy.

+

+Requirements

+ +

+Getting started

+

Once you have a connected Kubernetes cluster with Helm installed, deploying a managed Prometheus is as easy as a single click.

+
    +
  1. Go to the Operations > Kubernetes page, to view your connected clusters
  2. +
  3. Select the cluster you would like to deploy Prometheus to
  4. +
  5. Click the Install button to deploy Prometheus to the cluster
  6. +
+

Managed Prometheus Deploy

+

+About managed Prometheus deployments

+

Prometheus is deployed into the gitlab-managed-apps namespace, using the official Helm chart. Prometheus is only accessible within the cluster, with GitLab communicating through the Kubernetes API.

+

The Prometheus server will automatically detect and monitor nodes, pods, and endpoints. To configure a resource to be monitored by Prometheus, simply set the following Kubernetes annotations:

+
    +
  • +prometheus.io/scrape to true to enable monitoring of the resource.
  • +
  • +prometheus.io/port to define the port of the metrics endpoint.
  • +
  • +prometheus.io/path to define the path of the metrics endpoint. Defaults to /metrics.
  • +
+

CPU and Memory consumption is monitored, but requires naming conventions in order to determine the environment. If you are using Auto DevOps, this is handled automatically.

+

The NGINX Ingress that is deployed by GitLab to clusters, is automatically annotated for monitoring providing key response metrics: latency, throughput, and error rates.

+

+Manual configuration of Prometheus

+

+Requirements

+

Integration with Prometheus requires the following:

+
    +
  1. GitLab 9.0 or higher
  2. +
  3. Prometheus must be configured to collect one of the supported metrics +
  4. +
  5. Each metric must be have a label to indicate the environment
  6. +
  7. GitLab must have network connectivity to the Prometheus server
  8. +
+

+Getting started

+

Installing and configuring Prometheus to monitor applications is fairly straight forward.

+
    +
  1. Install Prometheus
  2. +
  3. Set up one of the supported monitoring targets +
  4. +
  5. Configure the Prometheus server to collect their metrics +
  6. +
+

+Configuration in GitLab

+

The actual configuration of Prometheus integration within GitLab is very simple. +All you will need is the DNS or IP address of the Prometheus server you'd like +to integrate with.

+
    +
  1. Navigate to the Integrations page +
  2. +
  3. Click the Prometheus service
  4. +
  5. Provide the base URL of the your server, for example http://prometheus.example.com/. +The Test Settings button can be used to confirm connectivity from GitLab +to the Prometheus server.
  6. +
+

Configure Prometheus Service

+

+Monitoring CI/CD Environments

+

Once configured, GitLab will attempt to retrieve performance metrics for any +environment which has had a successful deployment.

+

GitLab will automatically scan the Prometheus server for metrics from known serves like Kubernetes and NGINX, and attempt to identify individual environment. The supported metrics and scan process is detailed in our Prometheus Metric Library documentation.

+

You can view the performance dashboard for an environment by clicking on the monitoring button.

+

+Determining the performance impact of a merge

+
+

Introduced in GitLab 9.2. +GitLab 9.3 added the numeric comparison of the 30 minute averages. +Requires Kubernetes metrics

+
+

Developers can view the performance impact of their changes within the merge +request workflow. When a source branch has been deployed to an environment, a sparkline and numeric comparison of the average memory consumption will appear. On the sparkline, a dot +indicates when the current changes were deployed, with up to 30 minutes of +performance data displayed before and after. The comparison shows the difference between the 30 minute average before and after the deployment. This information is updated after +each commit has been deployed.

+

Once merged and the target branch has been redeployed, the metrics will switch +to show the new environments this revision has been deployed to.

+

Performance data will be available for the duration it is persisted on the +Prometheus server.

+

Merge Request with Performance Impact

+

+Troubleshooting

+

If the "No data found" screen continues to appear, it could be due to:

+
    +
  • No successful deployments have occurred to this environment.
  • +
  • Prometheus does not have performance data for this environment, or the metrics +are not labeled correctly. To test this, connect to the Prometheus server and +run a query, replacing $CI_ENVIRONMENT_SLUG +with the name of your environment.
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/8779b29786ea1525faf3b21d2c03cd2c b/docker/tanner/snare/dist/pages/1/8779b29786ea1525faf3b21d2c03cd2c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8779b29786ea1525faf3b21d2c03cd2c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8787b9b5d03d4f248b0616d72c982365 b/docker/tanner/snare/dist/pages/1/8787b9b5d03d4f248b0616d72c982365 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8787b9b5d03d4f248b0616d72c982365 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/87b0f2b50524262fe345974c71a1d96c b/docker/tanner/snare/dist/pages/1/87b0f2b50524262fe345974c71a1d96c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/87b0f2b50524262fe345974c71a1d96c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/87c96f601b7a90fd4d9847347b99777b b/docker/tanner/snare/dist/pages/1/87c96f601b7a90fd4d9847347b99777b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/87c96f601b7a90fd4d9847347b99777b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/883c6966b8b08f3a40bc05813a3eb00f b/docker/tanner/snare/dist/pages/1/883c6966b8b08f3a40bc05813a3eb00f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/883c6966b8b08f3a40bc05813a3eb00f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/88aedfe53dc2a5eb44fbe3744f60fa80 b/docker/tanner/snare/dist/pages/1/88aedfe53dc2a5eb44fbe3744f60fa80 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/88aedfe53dc2a5eb44fbe3744f60fa80 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/88cb3f8405915aa6ddbd22ef3d3cce3e b/docker/tanner/snare/dist/pages/1/88cb3f8405915aa6ddbd22ef3d3cce3e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/88cb3f8405915aa6ddbd22ef3d3cce3e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/88d55ef2e2191e8000c64806e1653f5c b/docker/tanner/snare/dist/pages/1/88d55ef2e2191e8000c64806e1653f5c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/88d55ef2e2191e8000c64806e1653f5c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/89ce22ba2a929783733657a359a0de38 b/docker/tanner/snare/dist/pages/1/89ce22ba2a929783733657a359a0de38 new file mode 100644 index 000000000..029338f29 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/89ce22ba2a929783733657a359a0de38 @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + +Description templates · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Description templates

+
+

Introduced in GitLab 8.11.

+
+

Description templates allow you to define context-specific templates for issue +and merge request description fields for your project.

+

+Overview

+

By using the description templates, users that create a new issue or merge +request can select a description template to help them communicate with other +contributors effectively.

+

Every GitLab project can define its own set of description templates as they +are added to the root directory of a GitLab project's repository.

+

Description templates must be written in Markdown and stored +in your project's repository under a directory named .gitlab. Only the +templates of the default branch will be taken into account.

+

+Creating issue templates

+

Create a new Markdown (.md) file inside the .gitlab/issue_templates/ +directory in your repository. Commit and push to your default branch.

+

+Creating merge request templates

+

Similarly to issue templates, create a new Markdown (.md) file inside the +.gitlab/merge_request_templates/ directory in your repository. Commit and +push to your default branch.

+

+Using the templates

+

Let's take for example that you've created the file .gitlab/issue_templates/Bug.md. +This will enable the Bug dropdown option when creating or editing issues. When +Bug is selected, the content from the Bug.md template file will be copied +to the issue description field. The 'Reset template' button will discard any +changes you made after picking the template and return it to its initial status.

+

Description templates

+

+Description template example

+

We make use of Description Templates for Issues and Merge Requests within the GitLab Community Edition project. Please refer to the .gitlab folder for some examples.

+
+

Tip: +It is possible to use quick actions within description templates to quickly add labels, assignees, and milestones. The quick actions will only be executed if the user submitting the Issue or Merge Request has the permissions perform the relevant actions.

+
+

Here is an example for a Bug report template:

+
Summary
+
+(Summarize the bug encountered concisely)
+
+
+Steps to reproduce
+
+(How one can reproduce the issue - this is very important)
+
+
+Example Project
+
+(If possible, please create an example project here on GitLab.com that exhibits the problematic behaviour, and link to it here in the bug report)
+
+(If you are using an older version of GitLab, this will also determine whether the bug has been fixed in a more recent version)
+
+
+What is the current bug behavior?
+
+(What actually happens)
+
+
+What is the expected correct behavior?
+
+(What you should see instead)
+
+
+Relevant logs and/or screenshots
+
+(Paste any relevant logs - please use code blocks (```) to format console output,
+logs, and code as it's very hard to read otherwise.)
+
+
+Possible fixes
+
+(If you can, link to the line of code that might be responsible for the problem)
+
+/label ~bug ~reproduced ~needs-investigation
+/cc @project-manager
+/assign @qa-tester
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/8a66d3d043f60810dddd15f158c3420b b/docker/tanner/snare/dist/pages/1/8a66d3d043f60810dddd15f158c3420b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8a66d3d043f60810dddd15f158c3420b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8a7bdcd439bd9f622f461428bac7154a b/docker/tanner/snare/dist/pages/1/8a7bdcd439bd9f622f461428bac7154a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8a7bdcd439bd9f622f461428bac7154a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8ad1034a0bebfa3b5f7b6c7e1c443ac0 b/docker/tanner/snare/dist/pages/1/8ad1034a0bebfa3b5f7b6c7e1c443ac0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8ad1034a0bebfa3b5f7b6c7e1c443ac0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8addb1f5cb07a7b775d87bb40e729716 b/docker/tanner/snare/dist/pages/1/8addb1f5cb07a7b775d87bb40e729716 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8addb1f5cb07a7b775d87bb40e729716 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8ae33c47ad452f9ec4b3ac9554b371db b/docker/tanner/snare/dist/pages/1/8ae33c47ad452f9ec4b3ac9554b371db new file mode 100644 index 000000000..a7c3a12a3 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8ae33c47ad452f9ec4b3ac9554b371db @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/8b0f2618f69e2b7eea338257a627412d b/docker/tanner/snare/dist/pages/1/8b0f2618f69e2b7eea338257a627412d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8b0f2618f69e2b7eea338257a627412d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8b10afb85efb331460ad80fbf3528e41 b/docker/tanner/snare/dist/pages/1/8b10afb85efb331460ad80fbf3528e41 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8b10afb85efb331460ad80fbf3528e41 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8b838982fc0f2ec4837274ac41ccab6d b/docker/tanner/snare/dist/pages/1/8b838982fc0f2ec4837274ac41ccab6d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8b838982fc0f2ec4837274ac41ccab6d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8c87fb9ab8fd0284ca1ced712ecdec40 b/docker/tanner/snare/dist/pages/1/8c87fb9ab8fd0284ca1ced712ecdec40 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8c87fb9ab8fd0284ca1ced712ecdec40 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8ca6d490766990471a6658d4b8a30529 b/docker/tanner/snare/dist/pages/1/8ca6d490766990471a6658d4b8a30529 new file mode 100644 index 000000000..b367c28ed --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8ca6d490766990471a6658d4b8a30529 @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + +Container registry · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab Container Registry

+
+

Notes: +Introduced in GitLab 8.8.

+
+
    +
  • Docker Registry manifest v1 support was added in GitLab 8.9 to support Docker +versions earlier than 1.10.
  • +
  • This document is about the user guide. To learn how to enable GitLab Container +Registry across your GitLab instance, visit the +administrator documentation.
  • +
  • Starting from GitLab 8.12, if you have 2FA enabled in your account, you need +to pass a personal access token instead of your password in order to +login to GitLab's Container Registry.
  • +
  • Multiple level image names support was added in GitLab 9.1
  • +
+

With the Docker Container Registry integrated into GitLab, every project can +have its own space to store its Docker images.

+

You can read more about Docker Registry at https://docs.docker.com/registry/introduction/.

+

+Enable the Container Registry for your project

+

NOTE: Note: +If you cannot find the Container Registry entry under your project's settings, +that means that it is not enabled in your GitLab instance. Ask your administrator +to enable it.

+
    +
  1. First, ask your system administrator to enable GitLab Container Registry +following the administration documentation. +If you are using GitLab.com, this is enabled by default so you can start using +the Registry immediately. Currently there is a soft (10GB) size restriction for +registry on GitLab.com, as part of the repository size limit.
  2. +
  3. Go to your project's General settings +and enable the Container Registry feature on your project. For new +projects this might be enabled by default. For existing projects +(prior GitLab 8.8), you will have to explicitly enable it.
  4. +
  5. Hit Save changes for the changes to take effect. You should now be able +to see the Registry link in the sidebar.
  6. +
+

Container Registry

+

+Build and push images

+
+

Notes:

+
+
    +
  • Moving or renaming existing container registry repositories is not supported +once you have pushed images because the images are signed, and the +signature includes the repository name.
  • +
  • To move or rename a repository with a container registry you will have to +delete all existing images.
  • +
+

If you visit the Registry link under your project's menu, you can see the +explicit instructions to login to the Container Registry using your GitLab +credentials.

+

For example if the Registry's URL is registry.example.com, the you should be +able to login with:

+
docker login registry.example.com
+

Building and publishing images should be a straightforward process. Just make +sure that you are using the Registry URL with the namespace and project name +that is hosted on GitLab:

+
docker build -t registry.example.com/group/project/image .
+docker push registry.example.com/group/project/image
+

Your image will be named after the following scheme:

+
<registry URL>/<namespace>/<project>/<image>
+

GitLab supports up to three levels of image repository names.

+

Following examples of image tags are valid:

+
registry.example.com/group/project:some-tag
+registry.example.com/group/project/image:latest
+registry.example.com/group/project/my/image:rc1
+

+Use images from GitLab Container Registry

+

To download and run a container from images hosted in GitLab Container Registry, +use docker run:

+
docker run [options] registry.example.com/group/project/image [arguments]
+

For more information on running Docker containers, visit the +Docker documentation.

+

+Control Container Registry from within GitLab

+

GitLab offers a simple Container Registry management panel. Go to your project +and click Registry in the project menu.

+

This view will show you all tags in your project and will easily allow you to +delete them.

+

+Build and push images using GitLab CI

+
+

Note: +This feature requires GitLab 8.8 and GitLab Runner 1.2.

+
+

Make sure that your GitLab Runner is configured to allow building Docker images by +following the Using Docker Build +and Using the GitLab Container Registry documentation.

+

+Using with private projects

+
+

Personal Access tokens were introduced in GitLab 9.3. +Project Deploy Tokens were introduced in GitLab 10.7

+
+

If a project is private, credentials will need to be provided for authorization. +The preferred way to do this, is either by using a personal access tokens or a project deploy token. +The minimal scope needed for both of them is read_registry.

+

Example of using a personal access token:

+
docker login registry.example.com -u <your_username> -p <your_access_token>
+

+Troubleshooting the GitLab Container Registry

+

+Basic Troubleshooting

+
    +
  1. +

    Check to make sure that the system clock on your Docker client and GitLab server have +been synchronized (e.g. via NTP).

    +
  2. +
  3. +

    If you are using an S3-backed Registry, double check that the IAM +permissions and the S3 credentials (including region) are correct. See the +sample IAM policy +for more details.

    +
  4. +
  5. +

    Check the Registry logs (e.g. /var/log/gitlab/registry/current) and the GitLab production logs +for errors (e.g. /var/log/gitlab/gitlab-rails/production.log). You may be able to find clues +there.

    +
  6. +
+

+Enable the registry debug server

+

The optional debug server can be enabled by setting the registry debug address +in your gitlab.rb configuration.

+
registry['debug_addr'] = "localhost:5001"
+

After adding the setting, reconfigure GitLab to apply the change.

+

Use curl to request debug output from the debug server:

+
curl localhost:5001/debug/health
+curl localhost:5001/debug/vars
+

+Advanced Troubleshooting

+
+

NOTE: The following section is only recommended for experts.

+
+

Sometimes it's not obvious what is wrong, and you may need to dive deeper into +the communication between the Docker client and the Registry to find out +what's wrong. We will use a concrete example in the past to illustrate how to +diagnose a problem with the S3 setup.

+

+Unexpected 403 error during push

+

A user attempted to enable an S3-backed Registry. The docker login step went +fine. However, when pushing an image, the output showed:

+
The push refers to a repository [s3-testing.myregistry.com:4567/root/docker-test/docker-image]
+dc5e59c14160: Pushing [==================================================>] 14.85 kB
+03c20c1a019a: Pushing [==================================================>] 2.048 kB
+a08f14ef632e: Pushing [==================================================>] 2.048 kB
+228950524c88: Pushing 2.048 kB
+6a8ecde4cc03: Pushing [==>                                                ] 9.901 MB/205.7 MB
+5f70bf18a086: Pushing 1.024 kB
+737f40e80b7f: Waiting
+82b57dbc5385: Waiting
+19429b698a22: Waiting
+9436069b92a3: Waiting
+error parsing HTTP 403 response body: unexpected end of JSON input: ""
+

This error is ambiguous, as it's not clear whether the 403 is coming from the +GitLab Rails application, the Docker Registry, or something else. In this +case, since we know that since the login succeeded, we probably need to look +at the communication between the client and the Registry.

+

The REST API between the Docker client and Registry is described +here. Normally, one would just +use Wireshark or tcpdump to capture the traffic and see where things went +wrong. However, since all communication between Docker clients and servers +are done over HTTPS, it's a bit difficult to decrypt the traffic quickly even +if you know the private key. What can we do instead?

+

One way would be to disable HTTPS by setting up an insecure +Registry. This could introduce a +security hole and is only recommended for local testing. If you have a +production system and can't or don't want to do this, there is another way: +use mitmproxy, which stands for Man-in-the-Middle Proxy.

+

+mitmproxy

+

mitmproxy allows you to place a proxy between your +client and server to inspect all traffic. One wrinkle is that your system +needs to trust the mitmproxy SSL certificates for this to work.

+

The following installation instructions assume you are running Ubuntu:

+
    +
  1. +

    Install mitmproxy (see http://docs.mitmproxy.org/en/stable/install.html)

    +
  2. +
  3. +

    Run mitmproxy --port 9000 to generate its certificates. +Enter CTRL-C to quit.

    +
  4. +
  5. +

    Install the certificate from ~/.mitmproxy to your system:

    +
    sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy-ca-cert.crt
    +sudo update-ca-certificates
    +
  6. +
+

If successful, the output should indicate that a certificate was added:

+
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done.
+Running hooks in /etc/ca-certificates/update.d....done.
+

To verify that the certificates are properly installed, run:

+
mitmproxy --port 9000
+

This will run mitmproxy on port 9000. In another window, run:

+
curl --proxy http://localhost:9000 https://httpbin.org/status/200
+

If everything is setup correctly, you will see information on the mitmproxy window and +no errors from the curl commands.

+

+Running the Docker daemon with a proxy

+

For Docker to connect through a proxy, you must start the Docker daemon with the +proper environment variables. The easiest way is to shutdown Docker (e.g. sudo initctl stop docker) +and then run Docker by hand. As root, run:

+
export HTTP_PROXY="http://localhost:9000"
+export HTTPS_PROXY="https://localhost:9000"
+docker daemon --debug
+

This will launch the Docker daemon and proxy all connections through mitmproxy.

+

+Running the Docker client

+

Now that we have mitmproxy and Docker running, we can attempt to login and push +a container image. You may need to run as root to do this. For example:

+
docker login s3-testing.myregistry.com:4567
+docker push s3-testing.myregistry.com:4567/root/docker-test/docker-image
+

In the example above, we see the following trace on the mitmproxy window:

+

mitmproxy output from Docker

+

The above image shows:

+
    +
  • The initial PUT requests went through fine with a 201 status code.
  • +
  • The 201 redirected the client to the S3 bucket.
  • +
  • The HEAD request to the AWS bucket reported a 403 Unauthorized.
  • +
+

What does this mean? This strongly suggests that the S3 user does not have the right +permissions to perform a HEAD request. +The solution: check the IAM permissions again. +Once the right permissions were set, the error will go away.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/8cb15fbed57606ddbefde182387e9341 b/docker/tanner/snare/dist/pages/1/8cb15fbed57606ddbefde182387e9341 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8cb15fbed57606ddbefde182387e9341 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8d2469bc097e22c79489a704935258d5 b/docker/tanner/snare/dist/pages/1/8d2469bc097e22c79489a704935258d5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8d2469bc097e22c79489a704935258d5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8d83dce54f42252f37b9cff5f6e4ec92 b/docker/tanner/snare/dist/pages/1/8d83dce54f42252f37b9cff5f6e4ec92 new file mode 100644 index 000000000..5f443da8e --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8d83dce54f42252f37b9cff5f6e4ec92 @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + +Groups · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

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

Below you will find all the groups that are public.

+

You can easily contribute to them by requesting to join these groups.

+
+
+
No public groups
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/8dbd3a19b1fc9753880bf572f900a778 b/docker/tanner/snare/dist/pages/1/8dbd3a19b1fc9753880bf572f900a778 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8dbd3a19b1fc9753880bf572f900a778 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8def9394580efa1c0cbfa84f9c72265a b/docker/tanner/snare/dist/pages/1/8def9394580efa1c0cbfa84f9c72265a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8def9394580efa1c0cbfa84f9c72265a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8e37b2e74e7121e39d6f6e08b6c32b94 b/docker/tanner/snare/dist/pages/1/8e37b2e74e7121e39d6f6e08b6c32b94 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8e37b2e74e7121e39d6f6e08b6c32b94 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8e6bdc15136f30470d9690f8f5283af3 b/docker/tanner/snare/dist/pages/1/8e6bdc15136f30470d9690f8f5283af3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8e6bdc15136f30470d9690f8f5283af3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8e75ebfd9c22c4d922f9723af6dde882 b/docker/tanner/snare/dist/pages/1/8e75ebfd9c22c4d922f9723af6dde882 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8e75ebfd9c22c4d922f9723af6dde882 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8f37388e48743f0a239d500e2280d1ca b/docker/tanner/snare/dist/pages/1/8f37388e48743f0a239d500e2280d1ca new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8f37388e48743f0a239d500e2280d1ca @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8f3d37b85c7d3cfcbcd23f6a091844ca b/docker/tanner/snare/dist/pages/1/8f3d37b85c7d3cfcbcd23f6a091844ca new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8f3d37b85c7d3cfcbcd23f6a091844ca @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8f44c53427a6ea426ade32ec4b2e7fb3 b/docker/tanner/snare/dist/pages/1/8f44c53427a6ea426ade32ec4b2e7fb3 new file mode 100644 index 000000000..10810d353 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8f44c53427a6ea426ade32ec4b2e7fb3 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/8f84792627c9bbf608586b4dcec38341 b/docker/tanner/snare/dist/pages/1/8f84792627c9bbf608586b4dcec38341 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8f84792627c9bbf608586b4dcec38341 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8fad8f06af87856adeac4a11f052eef1 b/docker/tanner/snare/dist/pages/1/8fad8f06af87856adeac4a11f052eef1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8fad8f06af87856adeac4a11f052eef1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8fc8c5d1faa03e3ba6005c9e6c006082 b/docker/tanner/snare/dist/pages/1/8fc8c5d1faa03e3ba6005c9e6c006082 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8fc8c5d1faa03e3ba6005c9e6c006082 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/8fcfdc23511dd43f9adaf6e27e86f966 b/docker/tanner/snare/dist/pages/1/8fcfdc23511dd43f9adaf6e27e86f966 new file mode 100644 index 000000000..37132df45 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/8fcfdc23511dd43f9adaf6e27e86f966 @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + +Index · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+User documentation

+

Welcome to GitLab! We're glad to have you here!

+

As a GitLab user you'll have access to all the features +your subscription +includes, except GitLab administrator +settings, unless you have admin privileges to install, configure, +and upgrade your GitLab instance.

+

For GitLab.com, admin privileges are restricted to the GitLab team.

+

If you run your own GitLab instance and are looking for the administration settings, +please refer to the administration +documentation.

+

+Overview

+

GitLab is a fully integrated software development platform that enables you +and your team to work cohesively, faster, transparently, and effectively, +since the discussion of a new idea until taking that idea to production all +the way through, from within the same platform.

+

Please check this page for an overview on GitLab's features.

+

+Concepts

+

For an overview on concepts involved when developing code on GitLab, +read the articles on:

+ +

+Use cases

+

GitLab is a Git-based platform that integrates a great number of essential tools for software development and deployment, and project management:

+ +

With GitLab Enterprise Edition, you can also:

+ +

You can also integrate GitLab with numerous third-party applications, such as Mattermost, Microsoft Teams, HipChat, Trello, Slack, Bamboo CI, JIRA, and a lot more.

+

+Projects

+

In GitLab, you can create projects for numerous reasons, such as, host +your code, use it as an issue tracker, collaborate on code, and continuously +build, test, and deploy your app with built-in GitLab CI/CD. Or, you can do +it all at once, from one single project.

+
    +
  • +Repositories: Host your codebase in +repositories with version control and as part of a fully integrated platform.
  • +
  • +Issues: Explore the best of GitLab Issues' features.
  • +
  • +Merge Requests: Collaborate on code, +reviews, live preview changes per branch, and request approvals with Merge Requests.
  • +
  • +Milestones: Work on multiple issues and merge +requests towards the same target date with Milestones.
  • +
+

+GitLab CI/CD

+

Use built-in GitLab CI/CD to test, build, and deploy your applications +directly from GitLab. No third-party integrations needed.

+
    +
  • +GitLab Auto Deploy: Deploy your application out-of-the-box with GitLab Auto Deploy.
  • +
  • +Review Apps: Live-preview the changes introduced by a merge request with Review Apps.
  • +
  • +GitLab Pages: Publish your static site directly from +GitLab with Gitlab Pages. You can build, test, and deploy any Static Site Generator with Pages.
  • +
  • +GitLab Container Registry: Build and deploy Docker +images with Container Registry.
  • +
+

+Account

+

There is a lot you can customize and configure +to enjoy the best of GitLab.

+
    +
  • +Settings: Manage your user settings to change your personal info, +personal access tokens, authorized applications, etc.
  • +
  • +Authentication: Read through the authentication +methods available in GitLab.
  • +
  • +Permissions: Learn the different set of permissions levels for each +user type (guest, reporter, developer, maintainer, owner).
  • +
  • +Feature highlight: Learn more about the little blue dots +around the app that explain certain features
  • +
+

+Groups

+

With GitLab Groups you can assemble related projects together +and grant members access to several projects at once.

+

Groups can also be nested in subgroups.

+

+Discussions

+

In GitLab, you can comment and mention collaborators in issues, +merge requests, code snippets, and commits.

+

When performing inline reviews to implementations +to your codebase through merge requests you can +gather feedback through resolvable discussions.

+

+GitLab Flavored Markdown (GFM)

+

Read through the GFM documentation to learn how to apply +the best of GitLab Flavored Markdown in your discussions, comments, +issues and merge requests descriptions, and everywhere else GMF is +supported.

+

+Todos

+

Never forget to reply to your collaborators. GitLab Todos +are a tool for working faster and more effectively with your team, +by listing all user or group mentions, as well as issues and merge +requests you're assigned to.

+

+Search

+

Search and filter through groups, projects, issues, merge requests, files, code, and more.

+

+Snippets

+

Snippets are code blocks that you want to store in GitLab, from which +you have quick access to. You can also gather feedback on them through +discussions.

+

+Integrations

+

Integrate GitLab with your preferred tool, +such as Trello, JIRA, etc.

+

+Webhooks

+

Configure webhooks to listen for +specific events like pushes, issues or merge requests. GitLab will send a +POST request with data to the webhook URL.

+

+API

+

Automate GitLab via API.

+

+Git and GitLab

+

Learn what is Git and its best practices.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/908ddb362d8b7f2a263da8aae82af9b7 b/docker/tanner/snare/dist/pages/1/908ddb362d8b7f2a263da8aae82af9b7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/908ddb362d8b7f2a263da8aae82af9b7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/90b037486f7843b7175255fb4255a8c0 b/docker/tanner/snare/dist/pages/1/90b037486f7843b7175255fb4255a8c0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/90b037486f7843b7175255fb4255a8c0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9110f44e50df5640bedd43a457ba1224 b/docker/tanner/snare/dist/pages/1/9110f44e50df5640bedd43a457ba1224 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9110f44e50df5640bedd43a457ba1224 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/91a121d37d70f491b02e0861455e6998 b/docker/tanner/snare/dist/pages/1/91a121d37d70f491b02e0861455e6998 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/91a121d37d70f491b02e0861455e6998 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/92054b1abcb8c3fdbcc88d56630a1b95 b/docker/tanner/snare/dist/pages/1/92054b1abcb8c3fdbcc88d56630a1b95 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/92054b1abcb8c3fdbcc88d56630a1b95 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/940350b0793bcd688e2a9e32ce20c557 b/docker/tanner/snare/dist/pages/1/940350b0793bcd688e2a9e32ce20c557 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/940350b0793bcd688e2a9e32ce20c557 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/94508c14d69683adab62b67a199c1122 b/docker/tanner/snare/dist/pages/1/94508c14d69683adab62b67a199c1122 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/94508c14d69683adab62b67a199c1122 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/94db2f6e857e73f3e1c9f98af85506ea b/docker/tanner/snare/dist/pages/1/94db2f6e857e73f3e1c9f98af85506ea new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/94db2f6e857e73f3e1c9f98af85506ea @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/950ce13523f48507da059802ea94d909 b/docker/tanner/snare/dist/pages/1/950ce13523f48507da059802ea94d909 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/950ce13523f48507da059802ea94d909 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9538d09598c4b26767d761ce6af0c4ff b/docker/tanner/snare/dist/pages/1/9538d09598c4b26767d761ce6af0c4ff new file mode 100644 index 000000000..46fa64e37 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9538d09598c4b26767d761ce6af0c4ff @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + +Index · Group · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Groups

+

With GitLab Groups you can assemble related projects together +and grant members access to several projects at once.

+

Groups can also be nested in subgroups.

+

Find your groups by expanding the left menu and clicking Groups:

+

GitLab Groups

+

The Groups page displays all groups you are a member of, how many projects it holds, +how many members it has, the group visibility, and, if you have enough permissions, +a link to the group settings. By clicking the last button you can leave that group.

+

+Use cases

+

You can create groups for numerous reasons. To name a few:

+
    +
  • Organize related projects under the same namespace, add members to that +group and grant access to all their projects at once
  • +
  • Create a group, include members of your team, and make it easier to +@mention all the team at once in issues and merge requests +
      +
    • Create a group for your company members, and create subgroups +for each individual team. Let's say you create a group called company-team, and among others, +you created subgroups in this group for each individual team backend-team, +frontend-team, and production-team: +1. When you start a new implementation from an issue, you add a comment: +"@company-team, let's do it! @company-team/backend-team you're good to go!" +1. When your backend team needs help from frontend, they add a comment: +"@company-team/frontend-team could you help us here please?" +1. When the frontend team completes their implementation, they comment: +"@company-team/backend-team, it's done! Let's ship it @company-team/production-team!" +
    • +
    +
  • +
+

+Namespaces

+

In GitLab, a namespace is a unique name to be used as a user name, a group name, or a subgroup name.

+
    +
  • http://gitlab.example.com/username
  • +
  • http://gitlab.example.com/groupname
  • +
  • http://gitlab.example.com/groupname/subgroup_name
  • +
+

For example, consider a user named Alex:

+
    +
  1. Alex creates an account on GitLab.com with the username alex; +their profile will be accessed under https://gitlab.example.com/alex +
  2. +
  3. Alex creates a group for their team with the groupname alex-team; +the group and its projects will be accessed under https://gitlab.example.com/alex-team +
  4. +
  5. Alex creates a subgroup of alex-team with the subgroup name marketing; +this subgroup and its projects will be accessed under https://gitlab.example.com/alex-team/marketing +
  6. +
+

By doing so:

+
    +
  • Any team member mentions Alex with @alex +
  • +
  • Alex mentions everyone from their team with @alex-team +
  • +
  • Alex mentions only the marketing team with @alex-team/marketing +
  • +
+

+Issues and merge requests within a group

+

Issues and merge requests are part of projects. For a given group, view all the +issues and merge requests across all the projects in that group, +together in a single list view.

+

+Create a new group

+
+

Notes:

+
+
    +
  • For a list of words that are not allowed to be used as group names see the +reserved names.
  • +
+

You can create a group in GitLab from:

+
    +
  1. +

    The Groups page: expand the left menu, click Groups, and click the green button New group:

    +

    new group from groups page

    +
  2. +
  3. +

    Elsewhere: expand the plus sign button on the top navbar and choose New group:

    +

    new group from elsewhere

    +
  4. +
+

Add the following information:

+

new group info

+
    +
  1. Set the Group path which will be the namespace under which your projects +will be hosted (path can contain only letters, digits, underscores, dashes +and dots; it cannot start with dashes or end in dot).
  2. +
  3. The Group name will populate with the path. Optionally, you can change +it. This is the name that will display in the group views.
  4. +
  5. Optionally, you can add a description so that others can briefly understand +what this group is about.
  6. +
  7. Optionally, choose an avatar for your project.
  8. +
  9. Choose the visibility level.
  10. +
+

+Add users to a group

+

Add members to a group by navigating to the group's dashboard, and clicking Members:

+

add members to group

+

Select the permission level and add the new member. You can also set the expiring +date for that user, from which they will no longer have access to your group.

+

One of the benefits of putting multiple projects in one group is that you can +give a user to access to all projects in the group with one action.

+

Consider we have a group with two projects:

+
    +
  • On the Group Members page we can now add a new user to the group.
  • +
  • Now because this user is a Developer member of the group, he automatically +gets Developer access to all projects within that group.
  • +
+

If necessary, you can increase the access level of an individual user for a specific project, +by adding them again as a new member to the project with the new permission levels.

+

+Request access to a group

+

As a group owner you can enable or disable non members to request access to +your group. Go to the group settings and click on Allow users to request access.

+

As a user, you can request to be a member of a group. Go to the group you'd +like to be a member of, and click the Request Access button on the right +side of your screen.

+

Request access button

+
+

Group owners and maintainers will be notified of your request and will be able to approve or +decline it on the members page.

+

Manage access requests

+
+

If you change your mind before your request is approved, just click the +Withdraw Access Request button.

+

Withdraw access request button

+

+Add projects to a group

+

There are two different ways to add a new project to a group:

+
    +
  • +

    Select a group and then click on the New project button.

    +

    New project

    +

    You can then continue on creating a project.

    +
  • +
  • +

    While you are creating a project, select a group namespace +you've already created from the dropdown menu.

    +

    Select group

    +
  • +
+

+Transfer projects into groups

+

Learn how to transfer a project into a group.

+

+Sharing a project with a group

+

You can share your projects with a group +and give your group members access to the project all at once.

+

Alternatively, you can lock the sharing with group feature.

+

+Manage group memberships via LDAP

+

In GitLab Enterprise Edition it is possible to manage GitLab group memberships using LDAP groups. +See the GitLab Enterprise Edition documentation for more information.

+

+Transfer groups to another group

+

From 10.5 there are two different ways to transfer a group:

+
    +
  • Either by transferring a group into another group (making it a subgroup of that group).
  • +
  • Or by converting a subgroup into a root group (a group with no parent).
  • +
+

Please make sure to understand that:

+
    +
  • Changing a group's parent can have unintended side effects. See Redirects when changing repository paths +
  • +
  • You can only transfer the group to a group you manage.
  • +
  • You will need to update your local repositories to point to the new location.
  • +
  • If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility.
  • +
+

+Group settings

+

Once you have created a group, you can manage its settings by navigating to +the group's dashboard, and clicking Settings.

+

group settings

+

+General settings

+

Besides giving you the option to edit any settings you've previously +set when creating the group, you can also +access further configurations for your group.

+

+Changing a group's path

+

Changing a group's path can have unintended side effects. Read +how redirects will behave +before proceeding.

+

If you are vacating the path so it can be claimed by another group or user, +you may need to rename the group name as well since both names and paths must +be unique.

+

To change your group path:

+
    +
  1. Navigate to your group's Settings > General.
  2. +
  3. Enter a new name under "Group path".
  4. +
  5. Hit Save group.
  6. +
+

CAUTION: Caution: +It is currently not possible to rename a namespace if it contains a +project with Container Registry tags, +because the project cannot be moved.

+

TIP: TIP: +If you want to retain ownership over the original namespace and +protect the URL redirects, then instead of changing a group's path or renaming a +username, you can create a new group and transfer projects to it.

+

+Enforce 2FA to group members

+

Add a security layer to your group by +enforcing two-factor authentication (2FA) +to all group members.

+

+Share with group lock

+

Prevent projects in a group from sharing +a project with another group. +This allows for tighter control over project access.

+

For example, consider you have two distinct teams (Group A and Group B) +working together in a project. +To inherit the group membership, you share the project between the +two groups A and B. Share with group lock prevents any project within +the group from being shared with another group. By doing so, you +guarantee only the right group members have access to that projects.

+

To enable this feature, navigate to the group settings page. Select +Share with group lock and Save the group.

+

Checkbox for share with group lock

+

+Member Lock [STARTER] +

+

With Member Lock it is possible to lock membership in project to the +level of members in group.

+

Learn more about Member Lock.

+

+Advanced settings

+
    +
  • +Projects: view all projects within that group, add members to each project, +access each project's settings, and remove any project from the same screen.
  • +
  • +Webhooks: configure webhooks to your group.
  • +
  • +Push rules: configure push rules to your group. [STARTER] +
  • +
  • +Audit Events: view Audit Events +for the group. [STARTER ONLY] +
  • +
  • +Pipelines quota: keep track of the pipeline quota for the group
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/9599fca86adefac155ea7679c3312a26 b/docker/tanner/snare/dist/pages/1/9599fca86adefac155ea7679c3312a26 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9599fca86adefac155ea7679c3312a26 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/95db9db19b7f50351243563d6670f97e b/docker/tanner/snare/dist/pages/1/95db9db19b7f50351243563d6670f97e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/95db9db19b7f50351243563d6670f97e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/964902d86132d6fa8a24f8eec574200d b/docker/tanner/snare/dist/pages/1/964902d86132d6fa8a24f8eec574200d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/964902d86132d6fa8a24f8eec574200d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/969ff2c314d3b4826e65468f8e448577 b/docker/tanner/snare/dist/pages/1/969ff2c314d3b4826e65468f8e448577 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/969ff2c314d3b4826e65468f8e448577 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/96a820096099c47dbdeff13965f1f2ee b/docker/tanner/snare/dist/pages/1/96a820096099c47dbdeff13965f1f2ee new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/96a820096099c47dbdeff13965f1f2ee @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/96be17f960432cbb2b231f026cc6cf35 b/docker/tanner/snare/dist/pages/1/96be17f960432cbb2b231f026cc6cf35 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/96be17f960432cbb2b231f026cc6cf35 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/96d9e1c2e3305bf2f813a83eafae937f b/docker/tanner/snare/dist/pages/1/96d9e1c2e3305bf2f813a83eafae937f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/96d9e1c2e3305bf2f813a83eafae937f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/97975585f53f942ec861294e219803e5 b/docker/tanner/snare/dist/pages/1/97975585f53f942ec861294e219803e5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/97975585f53f942ec861294e219803e5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/97bbc60a2d2f1ef04cd64302a24b3548 b/docker/tanner/snare/dist/pages/1/97bbc60a2d2f1ef04cd64302a24b3548 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/97bbc60a2d2f1ef04cd64302a24b3548 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/98bf0f278ce3bf4ac5904de0a3de60a5 b/docker/tanner/snare/dist/pages/1/98bf0f278ce3bf4ac5904de0a3de60a5 new file mode 100644 index 000000000..95e9ae7a7 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/98bf0f278ce3bf4ac5904de0a3de60a5 @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/98dd0a59e462fb42679df4c796d62fd1 b/docker/tanner/snare/dist/pages/1/98dd0a59e462fb42679df4c796d62fd1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/98dd0a59e462fb42679df4c796d62fd1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/98f5ef95d499fe383039cf1d0197fd09 b/docker/tanner/snare/dist/pages/1/98f5ef95d499fe383039cf1d0197fd09 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/98f5ef95d499fe383039cf1d0197fd09 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/98fca36cc484f895234870d4580ffaf1 b/docker/tanner/snare/dist/pages/1/98fca36cc484f895234870d4580ffaf1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/98fca36cc484f895234870d4580ffaf1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/995ae609eea2cf293662f68ece0d1f6e b/docker/tanner/snare/dist/pages/1/995ae609eea2cf293662f68ece0d1f6e new file mode 100644 index 000000000..fed26590e --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/995ae609eea2cf293662f68ece0d1f6e @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + +Groups · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

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

Below you will find all the groups that are public.

+

You can easily contribute to them by requesting to join these groups.

+
+
+
No public groups
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/99df2309983380035158ac6a85e96dc7 b/docker/tanner/snare/dist/pages/1/99df2309983380035158ac6a85e96dc7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/99df2309983380035158ac6a85e96dc7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9a21fb8b085bef57d8ec40bb1c30c61e b/docker/tanner/snare/dist/pages/1/9a21fb8b085bef57d8ec40bb1c30c61e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9a21fb8b085bef57d8ec40bb1c30c61e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9ac28a9c71654c6df250bc720c201c23 b/docker/tanner/snare/dist/pages/1/9ac28a9c71654c6df250bc720c201c23 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9ac28a9c71654c6df250bc720c201c23 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9ad00771fd4e9825ed74482a027ff6ff b/docker/tanner/snare/dist/pages/1/9ad00771fd4e9825ed74482a027ff6ff new file mode 100644 index 000000000..ed6d5d5c8 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9ad00771fd4e9825ed74482a027ff6ff @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + +Index · Pages · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab Pages

+

With GitLab Pages it's easy to publish your project website. GitLab Pages is a hosting service for static websites, at no additional cost.

+

+Getting Started

+

Create a project from scratch +to get you started quickly, or, +alternatively, start from an existing project as follows:

+
    +
  • +
      +
    1. +Fork an example project: +by forking a project, you create a copy of the codebase you're forking from to start from a template instead of starting from scratch.
    2. +
    +
  • +
  • +
      +
    1. Change a file to trigger a GitLab CI/CD pipeline: GitLab CI/CD will build and deploy your site to GitLab Pages.
    2. +
    +
  • +
  • +
      +
    1. Visit your project's Settings > Pages to see your website link, and click on it. Bam! Your website is live! :)
    2. +
    +
  • +
+

Further steps (optional):

+
    +
  • +
      +
    1. Remove the fork relationship +(You don't need the relationship unless you intent to contribute back to the example project you forked from).
    2. +
    +
  • +
  • +
      +
    1. Make it a user/group website +
    2. +
    +
  • +
+

Watch a video with the steps above: https://www.youtube.com/watch?v=TWqh9MtT4Bg

+

Advanced options:

+ +

+How Does It Work?

+

With GitLab Pages you can create static websites +for your GitLab projects, groups, or user accounts.

+

It supports plain static content, such as HTML, and all static site generators (SSGs), such as Jekyll, Middleman, Hexo, Hugo, and Pelican.

+

Connect as many custom domains as you like and bring your own TLS certificate +to secure them.

+

Your files live in a project repository on GitLab. +GitLab CI picks up those files and makes them available at, typically, +https://<username>.gitlab.io/<projectname>. Please read through the docs on +GitLab Pages domains for more info.

+

+Explore GitLab Pages

+

Read the following tutorials to know more about:

+ +

Blog posts series about Static Site Generators (SSGs):

+ +

Blog posts for securing GitLab Pages custom domains with SSL/TLS certificates:

+ +

+Advanced use

+ +

+Admin GitLab Pages for CE and EE

+

Enable and configure GitLab Pages on your own instance (GitLab Community Edition and Enterprise Editions) with +the admin guide.

+

Watch the video: https://www.youtube.com/watch?v=dD8c7WNcc6s

+

+More information about GitLab Pages

+ +
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/9ae72c92c5819e4ac4b71715b9d8ba4c b/docker/tanner/snare/dist/pages/1/9ae72c92c5819e4ac4b71715b9d8ba4c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9ae72c92c5819e4ac4b71715b9d8ba4c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9b2ec9d7e8b0fb3ede03f23e4fe941f9 b/docker/tanner/snare/dist/pages/1/9b2ec9d7e8b0fb3ede03f23e4fe941f9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9b2ec9d7e8b0fb3ede03f23e4fe941f9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9b82ccd364ea43b826ca400d5a396aad b/docker/tanner/snare/dist/pages/1/9b82ccd364ea43b826ca400d5a396aad new file mode 100644 index 000000000..46b3cc1a7 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9b82ccd364ea43b826ca400d5a396aad @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/9b8b21dabad73abe5e8951b771055a48 b/docker/tanner/snare/dist/pages/1/9b8b21dabad73abe5e8951b771055a48 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9b8b21dabad73abe5e8951b771055a48 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9c964aaf0b3293795e2ea4c6a66c7751 b/docker/tanner/snare/dist/pages/1/9c964aaf0b3293795e2ea4c6a66c7751 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9c964aaf0b3293795e2ea4c6a66c7751 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9d56b0642187759375d072269b16cfef b/docker/tanner/snare/dist/pages/1/9d56b0642187759375d072269b16cfef new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9d56b0642187759375d072269b16cfef @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9d8861ccda5de013cf52ea6cd4bd0089 b/docker/tanner/snare/dist/pages/1/9d8861ccda5de013cf52ea6cd4bd0089 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9d8861ccda5de013cf52ea6cd4bd0089 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9dbcda931e373e3dc25444f24e3cafcc b/docker/tanner/snare/dist/pages/1/9dbcda931e373e3dc25444f24e3cafcc new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9dbcda931e373e3dc25444f24e3cafcc @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9e0a6452e08546fe3a3d5ff0b2509c75 b/docker/tanner/snare/dist/pages/1/9e0a6452e08546fe3a3d5ff0b2509c75 new file mode 100644 index 000000000..6cd27e273 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9e0a6452e08546fe3a3d5ff0b2509c75 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/9e10fc4bc274f4676fcd072d7c4715ea b/docker/tanner/snare/dist/pages/1/9e10fc4bc274f4676fcd072d7c4715ea new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9e10fc4bc274f4676fcd072d7c4715ea @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9e55cb5b1482a43d85c29c228f4d1791 b/docker/tanner/snare/dist/pages/1/9e55cb5b1482a43d85c29c228f4d1791 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9e55cb5b1482a43d85c29c228f4d1791 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9e74034a9d1c1abc78f1b142283ac401 b/docker/tanner/snare/dist/pages/1/9e74034a9d1c1abc78f1b142283ac401 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9e74034a9d1c1abc78f1b142283ac401 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9ee6eedbdbd04f5446487cff5bca51ad b/docker/tanner/snare/dist/pages/1/9ee6eedbdbd04f5446487cff5bca51ad new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9ee6eedbdbd04f5446487cff5bca51ad @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9f01707800e927d72d5ac76dc20b14d4 b/docker/tanner/snare/dist/pages/1/9f01707800e927d72d5ac76dc20b14d4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9f01707800e927d72d5ac76dc20b14d4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9f5945c40af65c8572a9773795fe32fc b/docker/tanner/snare/dist/pages/1/9f5945c40af65c8572a9773795fe32fc new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9f5945c40af65c8572a9773795fe32fc @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/9f95de92cb9c6041e6c24f6d6fd286f8 b/docker/tanner/snare/dist/pages/1/9f95de92cb9c6041e6c24f6d6fd286f8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/9f95de92cb9c6041e6c24f6d6fd286f8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a072cb8f6380c2a51a9cea9060a8cd48 b/docker/tanner/snare/dist/pages/1/a072cb8f6380c2a51a9cea9060a8cd48 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a072cb8f6380c2a51a9cea9060a8cd48 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a083818ff6898e852ca58b26212646e7 b/docker/tanner/snare/dist/pages/1/a083818ff6898e852ca58b26212646e7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a083818ff6898e852ca58b26212646e7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a17bd519f4207c59e85a9c33f34b39de b/docker/tanner/snare/dist/pages/1/a17bd519f4207c59e85a9c33f34b39de new file mode 100644 index 000000000..01ed856b3 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a17bd519f4207c59e85a9c33f34b39de @@ -0,0 +1,403 @@ + + + + + + + + + + + + + + + + + + +Index · Administration · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Administrator documentation [CORE ONLY] +

+

Learn how to administer your GitLab instance (Community Edition and +Enterprise Edition). +Regular users don't have access to GitLab administration tools and settings.

+

GitLab has two product distributions: the open source +GitLab Community Edition (CE), +and the open core GitLab Enterprise Edition (EE), +available through different subscriptions.

+

You can install GitLab CE or GitLab EE, +but the features you'll have access to depend on the subscription you choose +(Core, Starter, Premium, or Ultimate). GitLab Community Edition installations +only have access to Core features.

+

GitLab.com is administered by GitLab, Inc., therefore, only GitLab team members have +access to its admin configurations. If you're a GitLab.com user, please check the +user documentation.

+

+Installing and maintaining GitLab

+

Learn how to install, configure, update, and maintain your GitLab instance.

+

+Installing GitLab

+ +

+Configuring GitLab

+ +

+Customizing GitLab's appearance

+
    +
  • +Header logo: Change the logo on all pages and email headers.
  • +
  • +Favicon: Change the default favicon to your own logo.
  • +
  • +Branded login page: Customize the login page with your own logo, title, and description.
  • +
  • +Welcome message: Add a custom welcome message to the sign-in page.
  • +
  • +"New Project" page: Customize the text to be displayed on the page that opens whenever your users create a new project.
  • +
+

+Maintaining GitLab

+
    +
  • +Raketasks: Perform various tasks for maintenance, backups, automatic webhooks setup, etc. + +
  • +
  • +Operations: Keeping GitLab up and running (clean up Redis sessions, moving repositories, Sidekiq Job throttling, Sidekiq MemoryKiller, Unicorn).
  • +
  • +Restart GitLab: Learn how to restart GitLab and its components.
  • +
+

+Updating GitLab

+ +

+Upgrading or downgrading GitLab

+ +

+GitLab platform integrations

+
    +
  • +Mattermost: Integrate with Mattermost, an open source, private cloud workplace for web messaging.
  • +
  • +PlantUML: Create simple diagrams in AsciiDoc and Markdown documents +created in snippets, wikis, and repos.
  • +
  • +Web terminals: Provide terminal access to your applications deployed to Kubernetes from within GitLab's CI/CD environments.
  • +
+

+User settings and permissions

+ +

+Project settings

+ +

+Repository settings

+ +

+Continuous Integration settings

+ +

+Git configuration options

+ +

+Monitoring GitLab

+ +

+Performance Monitoring

+ +

+Troubleshooting

+ +
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/a1f4de0b70f4f2ee282ef73fb7f10fef b/docker/tanner/snare/dist/pages/1/a1f4de0b70f4f2ee282ef73fb7f10fef new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a1f4de0b70f4f2ee282ef73fb7f10fef @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a238f826bad0f20cd0d70d267c3d8793 b/docker/tanner/snare/dist/pages/1/a238f826bad0f20cd0d70d267c3d8793 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a238f826bad0f20cd0d70d267c3d8793 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a25f33b3fc3b5691a470a1973339a119 b/docker/tanner/snare/dist/pages/1/a25f33b3fc3b5691a470a1973339a119 new file mode 100644 index 000000000..0616be46d Binary files /dev/null and b/docker/tanner/snare/dist/pages/1/a25f33b3fc3b5691a470a1973339a119 differ diff --git a/docker/tanner/snare/dist/pages/1/a2c8ca2478cc4e33f7b9239f6db1af3c b/docker/tanner/snare/dist/pages/1/a2c8ca2478cc4e33f7b9239f6db1af3c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a2c8ca2478cc4e33f7b9239f6db1af3c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a3387cb0287729b796772788a564805e b/docker/tanner/snare/dist/pages/1/a3387cb0287729b796772788a564805e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a3387cb0287729b796772788a564805e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a341e035be482f423607f06170b0482f b/docker/tanner/snare/dist/pages/1/a341e035be482f423607f06170b0482f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a341e035be482f423607f06170b0482f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a34f46f6fae1a5ebbb8f5b4ff499783f b/docker/tanner/snare/dist/pages/1/a34f46f6fae1a5ebbb8f5b4ff499783f new file mode 100644 index 000000000..27d6982f1 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a34f46f6fae1a5ebbb8f5b4ff499783f @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + +Readme · Quick start · Ci · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Getting started with GitLab CI/CD

+
+

Note: Starting from version 8.0, GitLab Continuous Integration (CI) +is fully integrated into GitLab itself and is enabled by default on all +projects.

+
+

GitLab offers a continuous integration service. If you +add a .gitlab-ci.yml file to the root directory of your repository, +and configure your GitLab project to use a Runner, then each commit or +push, triggers your CI pipeline.

+

The .gitlab-ci.yml file tells the GitLab runner what to do. By default it runs +a pipeline with three stages: build, test, and deploy. You don't need to +use all three stages; stages with no jobs are simply ignored.

+

If everything runs OK (no non-zero return values), you'll get a nice green +checkmark associated with the commit. This makes it +easy to see whether a commit caused any of the tests to fail before +you even look at the code.

+

Most projects use GitLab's CI service to run the test suite so that +developers get immediate feedback if they broke something.

+

There's a growing trend to use continuous delivery and continuous deployment to +automatically deploy tested code to staging and production environments.

+

So in brief, the steps needed to have a working CI can be summed up to:

+
    +
  1. Add .gitlab-ci.yml to the root directory of your repository
  2. +
  3. Configure a Runner
  4. +
+

From there on, on every push to your Git repository, the Runner will +automagically start the pipeline and the pipeline will appear under the +project's Pipelines page.

+
+

This guide assumes that you:

+
    +
  • have a working GitLab instance of version 8.0+r or are using +GitLab.com +
  • +
  • have a project in GitLab that you would like to use CI for
  • +
+

Let's break it down to pieces and work on solving the GitLab CI puzzle.

+

+Creating a .gitlab-ci.yml file

+

Before you create .gitlab-ci.yml let's first explain in brief what this is +all about.

+

+What is .gitlab-ci.yml +

+

The .gitlab-ci.yml file is where you configure what CI does with your project. +It lives in the root of your repository.

+

On any push to your repository, GitLab will look for the .gitlab-ci.yml +file and start jobs on Runners according to the contents of the file, +for that commit.

+

Because .gitlab-ci.yml is in the repository and is version controlled, old +versions still build successfully, forks can easily make use of CI, branches can +have different pipelines and jobs, and you have a single source of truth for CI. +You can read more about the reasons why we are using .gitlab-ci.yml in our +blog about it.

+

+Creating a simple .gitlab-ci.yml file

+
+

Note: +.gitlab-ci.yml is a YAML file +so you have to pay extra attention to indentation. Always use spaces, not tabs.

+
+

You need to create a file named .gitlab-ci.yml in the root directory of your +repository. Below is an example for a Ruby on Rails project.

+
before_script:
+  - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
+  - ruby -v
+  - which ruby
+  - gem install bundler --no-ri --no-rdoc
+  - bundle install --jobs $(nproc)  "${FLAGS[@]}"
+
+rspec:
+  script:
+    - bundle exec rspec
+
+rubocop:
+  script:
+    - bundle exec rubocop
+

This is the simplest possible configuration that will work for most Ruby +applications:

+
    +
  1. Define two jobs rspec and rubocop (the names are arbitrary) with +different commands to be executed.
  2. +
  3. Before every job, the commands defined by before_script are executed.
  4. +
+

The .gitlab-ci.yml file defines sets of jobs with constraints of how and when +they should be run. The jobs are defined as top-level elements with a name (in +our case rspec and rubocop) and always have to contain the script keyword. +Jobs are used to create jobs, which are then picked by +Runners and executed within the environment of the Runner.

+

What is important is that each job is run independently from each other.

+

If you want to check whether the .gitlab-ci.yml of your project is valid, there is a +Lint tool under the page /ci/lint of your project namespace. You can also find +a "CI Lint" button to go to this page under CI/CD ➔ Pipelines and +Pipelines ➔ Jobs in your project.

+

For more information and a complete .gitlab-ci.yml syntax, please read +the reference documentation on .gitlab-ci.yml.

+

+Push .gitlab-ci.yml to GitLab

+

Once you've created .gitlab-ci.yml, you should add it to your Git repository +and push it to GitLab.

+
git add .gitlab-ci.yml
+git commit -m "Add .gitlab-ci.yml"
+git push origin master
+

Now if you go to the Pipelines page you will see that the pipeline is +pending.

+

NOTE: Note: +If you have a mirrored repository where GitLab pulls from, +you may need to enable pipeline triggering in your project's +Settings > Repository > Pull from a remote repository > Trigger pipelines for mirror updates.

+

You can also go to the Commits page and notice the little pause icon next +to the commit SHA.

+

New commit pending

+

Clicking on it you will be directed to the jobs page for that specific commit.

+

Single commit jobs page

+

Notice that there is a pending job which is named after what we wrote in +.gitlab-ci.yml. "stuck" indicates that there is no Runner configured +yet for this job.

+

The next step is to configure a Runner so that it picks the pending jobs.

+

+Configuring a Runner

+

In GitLab, Runners run the jobs that you define in .gitlab-ci.yml. A Runner +can be a virtual machine, a VPS, a bare-metal machine, a docker container or +even a cluster of containers. GitLab and the Runners communicate through an API, +so the only requirement is that the Runner's machine has network access to the +GitLab server.

+

A Runner can be specific to a certain project or serve multiple projects in +GitLab. If it serves all projects it's called a Shared Runner.

+

Find more information about different Runners in the +Runners documentation.

+

You can find whether any Runners are assigned to your project by going to +Settings ➔ CI/CD. Setting up a Runner is easy and straightforward. The +official Runner supported by GitLab is written in Go and its documentation +can be found at https://docs.gitlab.com/runner/.

+

In order to have a functional Runner you need to follow two steps:

+
    +
  1. Install it
  2. +
  3. Configure it
  4. +
+

Follow the links above to set up your own Runner or use a Shared Runner as +described in the next section.

+

Once the Runner has been set up, you should see it on the Runners page of your +project, following Settings ➔ CI/CD.

+

Activated runners

+

+Shared Runners

+

If you use GitLab.com you can use the Shared Runners +provided by GitLab Inc.

+

These are special virtual machines that run on GitLab's infrastructure and can +build any project.

+

To enable the Shared Runners you have to go to your project's +Settings ➔ CI/CD and click Enable shared runners.

+

Read more on Shared Runners.

+

+Seeing the status of your pipeline and jobs

+

After configuring the Runner successfully, you should see the status of your +last commit change from pending to either running, success or failed.

+

You can view all pipelines by going to the Pipelines page in your project.

+

Commit status

+

Or you can view all jobs, by going to the Pipelines ➔ Jobs page.

+

Commit status

+

By clicking on a job's status, you will be able to see the log of that job. +This is important to diagnose why a job failed or acted differently than +you expected.

+

Build log

+

You are also able to view the status of any commit in the various pages in +GitLab, such as Commits and Merge requests.

+

+Examples

+

Visit the examples README to see a list of examples using GitLab +CI with various languages.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/a3a1e52ce6760c558c0733880bbd7470 b/docker/tanner/snare/dist/pages/1/a3a1e52ce6760c558c0733880bbd7470 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a3a1e52ce6760c558c0733880bbd7470 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a535c05091383a06bb805772d3659366 b/docker/tanner/snare/dist/pages/1/a535c05091383a06bb805772d3659366 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a535c05091383a06bb805772d3659366 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a570985fcf650222411e60e2770c46d3 b/docker/tanner/snare/dist/pages/1/a570985fcf650222411e60e2770c46d3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a570985fcf650222411e60e2770c46d3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a6201bdde2948fddb735420d385b28c3 b/docker/tanner/snare/dist/pages/1/a6201bdde2948fddb735420d385b28c3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a6201bdde2948fddb735420d385b28c3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a654952e18a95f193671140b444163e4 b/docker/tanner/snare/dist/pages/1/a654952e18a95f193671140b444163e4 new file mode 100644 index 000000000..fec3d6284 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a654952e18a95f193671140b444163e4 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/a6ce42dd1a21ed84572003f680aba1d8 b/docker/tanner/snare/dist/pages/1/a6ce42dd1a21ed84572003f680aba1d8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a6ce42dd1a21ed84572003f680aba1d8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a6d381dfb94b810ecbc3a0e7a43e7352 b/docker/tanner/snare/dist/pages/1/a6d381dfb94b810ecbc3a0e7a43e7352 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a6d381dfb94b810ecbc3a0e7a43e7352 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a756b58cc0cffd2fb7c0a90b0917f5e9 b/docker/tanner/snare/dist/pages/1/a756b58cc0cffd2fb7c0a90b0917f5e9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a756b58cc0cffd2fb7c0a90b0917f5e9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a7576ac888aad6bee8c2d0a97eee3986 b/docker/tanner/snare/dist/pages/1/a7576ac888aad6bee8c2d0a97eee3986 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a7576ac888aad6bee8c2d0a97eee3986 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a83cd80ace656cf67032eefe418a9995 b/docker/tanner/snare/dist/pages/1/a83cd80ace656cf67032eefe418a9995 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a83cd80ace656cf67032eefe418a9995 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/a93c7da994eef6a69a92a89c9bbda1cd b/docker/tanner/snare/dist/pages/1/a93c7da994eef6a69a92a89c9bbda1cd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/a93c7da994eef6a69a92a89c9bbda1cd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/aa105aedc921bc57ddc82bd7c17d7623 b/docker/tanner/snare/dist/pages/1/aa105aedc921bc57ddc82bd7c17d7623 new file mode 100644 index 000000000..7b74db96d --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/aa105aedc921bc57ddc82bd7c17d7623 @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + +Readme · Workflow · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docker/tanner/snare/dist/pages/1/aa169203406aa0b5cb2adaf7fb4649ca b/docker/tanner/snare/dist/pages/1/aa169203406aa0b5cb2adaf7fb4649ca new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/aa169203406aa0b5cb2adaf7fb4649ca @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/aa1f406684ac7332d7c7511e2c66d3d4 b/docker/tanner/snare/dist/pages/1/aa1f406684ac7332d7c7511e2c66d3d4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/aa1f406684ac7332d7c7511e2c66d3d4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/aa723b5869bfa414d5908247d99d44de b/docker/tanner/snare/dist/pages/1/aa723b5869bfa414d5908247d99d44de new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/aa723b5869bfa414d5908247d99d44de @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/aa7f80c84d0db812e3a0ad533b6b50bd b/docker/tanner/snare/dist/pages/1/aa7f80c84d0db812e3a0ad533b6b50bd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/aa7f80c84d0db812e3a0ad533b6b50bd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/abd46b75244b80b8114c693caa70eafd b/docker/tanner/snare/dist/pages/1/abd46b75244b80b8114c693caa70eafd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/abd46b75244b80b8114c693caa70eafd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ac31f2ff30d30483bc36fdf15b09f9a7 b/docker/tanner/snare/dist/pages/1/ac31f2ff30d30483bc36fdf15b09f9a7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ac31f2ff30d30483bc36fdf15b09f9a7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ac777509a45c67de93c97b8d26d2f27b b/docker/tanner/snare/dist/pages/1/ac777509a45c67de93c97b8d26d2f27b new file mode 100644 index 000000000..d11c7a85b --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ac777509a45c67de93c97b8d26d2f27b @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/aced9c9e0b8e02ad2f63fe6ca0fe51a2 b/docker/tanner/snare/dist/pages/1/aced9c9e0b8e02ad2f63fe6ca0fe51a2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/aced9c9e0b8e02ad2f63fe6ca0fe51a2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ad66fd159987d4685b864166361d521a b/docker/tanner/snare/dist/pages/1/ad66fd159987d4685b864166361d521a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ad66fd159987d4685b864166361d521a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ada08312efe7599634f25a32390f5ae9 b/docker/tanner/snare/dist/pages/1/ada08312efe7599634f25a32390f5ae9 new file mode 100644 index 000000000..165e44c02 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ada08312efe7599634f25a32390f5ae9 @@ -0,0 +1,585 @@ + + + + + + + + + + + + + + + + + + +Issue board · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Issue Boards

+
+

Introduced in GitLab 8.11.

+
+

The GitLab Issue Board is a software project management tool used to plan, +organize, and visualize a workflow for a feature or product release. +It can be used as a Kanban or a Scrum board.

+

GitLab Issue Board

+

+Overview

+

The Issue Board builds on GitLab's existing +issue tracking functionality and +leverages the power of labels by utilizing them as lists of the scrum board.

+

With the Issue Board you can have a different view of your issues while +maintaining the same filtering and sorting abilities you see across the +issue tracker. An Issue Board is based on its project's label structure, therefore, it +applies the same descriptive labels to indicate placement on the board, keeping +consistency throughout the entire development lifecycle.

+

An Issue Board shows you what issues your team is working on, who is assigned to each, +and where in the workflow those issues are.

+

You create issues, host code, perform reviews, build, test, +and deploy from one single platform. Issue Boards help you to visualize +and manage the entire process in GitLab.

+

With Multiple Issue Boards, available +only in GitLab Enterprise Edition, +you go even further, as you can not only keep yourself and your project +organized from a broader perspective with one Issue Board per project, +but also allow your team members to organize their own workflow by creating +multiple Issue Boards within the same project.

+

For a visual overview, see our Issue Board feature page +on about.gitlab.com or our video introduction to Issue Boards.

+

+Use cases

+

There are many ways to use GitLab Issue Boards tailored to your own preferred workflow. +Here are some common use cases for Issue Boards.

+

+Use cases for a single Issue Board

+

GitLab Workflow allows you to discuss proposals in issues, categorize them +with labels, and from there organize and prioritize them with Issue Boards.

+

For example, let's consider this simplified development workflow:

+
    +
  1. You have a repository hosting your app's codebase +and your team actively contributing to code
  2. +
  3. Your backend team starts working a new +implementation, gathers feedback and approval, and pass it over to frontend +
  4. +
  5. When frontend is complete, the new feature is deployed to staging to be tested
  6. +
  7. When successful, it is deployed to production +
  8. +
+

If we have the labels "backend", "frontend", "staging", and +"production", and an Issue Board with a list for each, we can:

+
    +
  • Visualize the entire flow of implementations since the +beginning of the development lifecycle until deployed to production
  • +
  • Prioritize the issues in a list by moving them vertically
  • +
  • Move issues between lists to organize them according to the labels you've set
  • +
  • Add multiple issues to lists in the board by selecting one or more existing issues
  • +
+

issue card moving

+

+Use cases for Multiple Issue Boards

+

With Multiple Issue Boards, available only in +GitLab Enterprise Edition, +each team can have their own board to organize their workflow individually.

+

+Scrum team

+

With multiple Issue Boards, each team has one board. Now you can move issues through each +part of the process. For instance: To Do, Doing, and Done.

+

+Organization of topics

+

Create lists to order things by topic and quickly change them between topics or groups, +such as between UX, Frontend, and Backend. The changes will be reflected across boards, +as changing lists will update the label accordingly.

+

+Advanced team handover

+

For example, suppose we have a UX team with an Issue Board that contains:

+
    +
  • To Do
  • +
  • Doing
  • +
  • Frontend
  • +
+

When done with something, they move the card to Frontend. The Frontend team's board looks like:

+
    +
  • Frontend
  • +
  • Doing
  • +
  • Done
  • +
+

Cards finished by the UX team will automatically appear in the Frontend column when they're ready for them.

+

NOTE: Note: +For a broader use case, please see the blog post +GitLab Workflow, an Overview. +For a real use case example, you can read why +Codepen decided to adopt Issue Boards +to improve their workflow with multiple boards.

+

+Quick assignments

+

Create lists for each of your team members and quickly drag-and-drop issues onto each team member.

+

+Permissions

+

Developers and up can use all the functionality of the +Issue Board, that is, create or delete lists and drag issues from one list to another.

+

+Issue Board terminology

+
    +
  • +Issue Board - Each board represents a unique view for your issues. It can have multiple lists with each list consisting of issues represented by cards.
  • +
  • +List - A column on the issue board that displays issues matching certain attributes. In addition to the default lists of 'Backlog' and 'Closed' issue, each additional list will show issues matching your chosen label or assignee. +
      +
    • +Label list: a list based on a label. It shows all opened issues with that label.
    • +
    • +Assignee list: a list which includes all issues assigned to a user.
    • +
    • +Backlog (default): shows all open issues that do not belong to one of the other lists. Always appears as the leftmost list.
    • +
    • +Closed (default): shows all closed issues. Always appears as the rightmost list.
    • +
    +
  • +
  • +Card - A box in the list that represents an individual issue. The information you can see on a card consists of the issue number, the issue title, the assignee, and the labels associated with the issue. You can drag cards from one list to another to change their label or assignee from that of the source list to that of the destination list.
  • +
+

+Actions you can take on an Issue Board

+
    +
  • +Create a new list.
  • +
  • +Delete an existing list.
  • +
  • Drag issues between lists.
  • +
  • Re-order issues in lists.
  • +
  • Drag and reorder the lists themselves.
  • +
  • Change issue labels on-the-fly while dragging issues between lists.
  • +
  • Close an issue if you drag it to the Done list.
  • +
  • Create a new list from a non-existing label by creating the label on-the-fly +within the Issue Board.
  • +
  • +Filter issues that appear across your Issue Board.
  • +
+

If you are not able to perform one or more of the things above, make sure you +have the right permissions.

+

+First time using the Issue Board

+

The first time you navigate to your Issue Board, you will be presented with +a default list (Done) and a welcoming message that gives +you two options. You can either create a predefined set of labels and create +their corresponding lists to the Issue Board or opt-out and use your own lists.

+

Issue Board welcome message

+

If you choose to use and create the predefined lists, they will appear as empty +because the labels associated to them will not exist up until that moment, +which means the system has no way of populating them automatically. That's of +course if the predefined labels don't already exist. If any of them does exist, +the list will be created and filled with the issues that have that label.

+

+Creating a new list

+

Create a new list by clicking on the Add list button at the upper +right corner of the Issue Board.

+

Issue Board welcome message

+

Simply choose the label or user to create the list from. The new list will be inserted +at the end of the lists, before Done. Moving and reordering lists is as +easy as dragging them around.

+

To create a list for a label that doesn't yet exist, simply create the label by +choosing Create new label. The label will be created on-the-fly and it will +be immediately added to the dropdown. You can now choose it to create a list.

+

+Deleting a list

+

To delete a list from the Issue Board use the small trash icon that is present +in the list's heading. A confirmation dialog will appear for you to confirm.

+

Deleting a list doesn't have any effect in issues and labels, it's just the +list view that is removed. You can always add it back later if you need.

+

+Adding issues to a list

+

You can add issues to a list by clicking the Add issues button that is +present in the upper right corner of the Issue Board. This will open up a modal +window where you can see all the issues that do not belong to any list.

+

Select one or more issues by clicking on the cards and then click Add issues +to add them to the selected list. You can limit the issues you want to add to +the list by filtering by author, assignee, milestone and label.

+

Bulk adding issues to lists

+

+Removing an issue from a list

+

Removing an issue from a list can be done by clicking on the issue card and then +clicking the Remove from board button in the sidebar. Under the hood, the +respective label is removed, and as such it's also removed from the list and the +board itself.

+

Remove issue from list

+

+Issue ordering in a list

+

When visiting a board, issues appear ordered in any list. You are able to change +that order simply by dragging and dropping the issues. The changed order will be saved +to the system so that anybody who visits the same board later will see the reordering, +with some exceptions.

+

The first time a given issue appears in any board (i.e. the first time a user +loads a board containing that issue), it will be ordered with +respect to other issues in that list according to Priority order.

+

At that point, that issue will be assigned a relative order value by the system +representing its relative order with respect to the other issues in the list. Any time +you drag-and-drop reorder that issue, its relative order value will change accordingly.

+

Also, any time that issue appears in any board when it is loaded by a user, +the updated relative order value will be used for the ordering. (It's only the first +time an issue appears that it takes from the Priority order mentioned above.) This means that +if issue A is drag-and-drop reordered to be above issue B by any user in +a given board inside your GitLab instance, any time those two issues are subsequently +loaded in any board in the same instance (could be a different project board or a different group board, for example), +that ordering will be maintained.

+

+Filtering issues

+

You should be able to use the filters on top of your Issue Board to show only +the results you want. This is similar to the filtering used in the issue tracker +since the metadata from the issues and labels are re-used in the Issue Board.

+

You can filter by author, assignee, milestone and label.

+

+Creating workflows

+

By reordering your lists, you can create workflows. As lists in Issue Boards are +based on labels, it works out of the box with your existing issues. So if you've +already labeled things with 'Backend' and 'Frontend', the issue will appear in +the lists as you create them. In addition, this means you can easily move +something between lists by changing a label.

+

A typical workflow of using the Issue Board would be:

+
    +
  1. You have created and prioritized +labels so that you can easily categorize your issues.
  2. +
  3. You have a bunch of issues (ideally labeled).
  4. +
  5. You visit the Issue Board and start creating lists to +create a workflow.
  6. +
  7. You move issues around in lists so that your team knows who should be working +on what issue.
  8. +
  9. When the work by one team is done, the issue can be dragged to the next list +so someone else can pick up.
  10. +
  11. When the issue is finally resolved, the issue is moved to the Done list +and gets automatically closed.
  12. +
+

For instance you can create a list based on the label of 'Frontend' and one for +'Backend'. A designer can start working on an issue by adding it to the +'Frontend' list. That way, everyone knows that this issue is now being +worked on by the designers. Then, once they're done, all they have to do is +drag it over to the next list, 'Backend', where a backend developer can +eventually pick it up. Once they’re done, they move it to Done, to close the +issue.

+

This process can be seen clearly when visiting an issue since with every move +to another list the label changes and a system not is recorded.

+

Issue Board system notes

+

+Multiple Issue Boards [STARTER] +

+
+

Introduced in GitLab Enterprise Edition 8.13.

+
+

Multiple Issue Boards, as the name suggests, allow for more than one Issue Board +for a given project or group. This is great for large projects with more than one team +or in situations where a repository is used to host the code of multiple +products.

+

Clicking on the current board name in the upper left corner will reveal a +menu from where you can create another Issue Board and rename or delete the +existing one.

+

NOTE: Note: +The Multiple Issue Boards feature is available for +projects in GitLab Starter Edition and for groups in GitLab Premium Edition.

+

Multiple Issue Boards

+

+Configurable Issue Boards [STARTER] +

+
+

Introduced in GitLab Starter Edition 10.2.

+
+

An Issue Board can be associated with GitLab Milestone, +Labels, Assignee and Weight +which will automatically filter the Board issues according to these fields. +This allows you to create unique boards according to your team's need.

+

Create scoped board

+

You can define the scope of your board when creating it or by clicking on the "Edit board" button. Once a milestone, assignee or weight is assigned to an Issue Board, you will no longer be able to filter +through these in the search bar. In order to do that, you need to remove the desired scope (e.g. milestone, assignee or weight) from the Issue Board.

+

Edit board configuration

+

If you don't have editing permission in a board, you're still able to see the configuration by clicking on "View scope".

+

Viewing board configuration

+

+Focus mode [STARTER] +

+
+

Introduced in GitLab Starter 9.1.

+
+

Click the button at the top right to toggle focus mode on and off. In focus mode, the navigation UI is hidden, allowing you to focus on issues in the board.

+

Board focus mode

+

+Group Issue Boards [PREMIUM] +

+
+

Introduced in GitLab Premium 10.0.

+
+

Accessible at the group navigation level, a group issue board offers the same features as a project-level board, +but it can display issues from all projects in that +group and its descendant subgroups. Similarly, you can only filter by group labels for these +boards. When updating milestones and labels for an issue through the sidebar update mechanism, again only +group-level objects are available.

+

NOTE: Note: +Multiple group issue boards were originally introduced in GitLab 10.0 Premium and +one group issue board per group was made available in GitLab 10.6 Core.

+

Group issue board

+

+Assignee lists [PREMIUM] +

+
+

Introduced in GitLab 11.0 Premium.

+
+

Like a regular list that shows all issues that have the list label, you can add +an assignee list that shows all issues assigned to the given user. +You can have a board with both label lists and assignee lists. To add an +assignee list:

+
    +
  1. Click Add list.
  2. +
  3. Select the Assignee list tab.
  4. +
  5. Search and click on the user you want to add as an assignee.
  6. +
+

Now that the assignee list is added, you can assign or unassign issues to that user +by dragging issues to and/or from an assignee list. +To remove an assignee list, just as with a label list, click the trash icon.

+

Assignee lists

+

+Dragging issues between lists

+

When dragging issues between lists, different behavior occurs depending on the source list and the target list.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
To BacklogTo ClosedTo label B listTo assignee Bob list
From Backlog-Issue closed +B added +Bob assigned
From ClosedIssue reopened-Issue reopened
B added
Issue reopened
Bob assigned
From label A list +A removedIssue closed +A removed
B added
+Bob assigned
From assignee Alice list +Alice unassignedIssue closed +B added +Alice unassigned
Bob assigned
+

+Features per tier

+

Different issue board features are available in different GitLab tiers, as shown in the following table:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TierNumber of Project Issue BoardsNumber of Group Issue BoardsConfigurable Project Issue BoardsConfigurable Group Issue BoardsAssignee Lists
Core11NoNoNo
StarterMultiple1YesNoNo
PremiumMultipleMultipleYesYesYes
UltimateMultipleMultipleYesYesYes
+

+Tips

+

A few things to remember:

+
    +
  • Moving an issue between lists removes the label from the list it came from +and adds the label from the list it goes to.
  • +
  • An issue can exist in multiple lists if it has more than one label.
  • +
  • Lists are populated with issues automatically if the issues are labeled.
  • +
  • Clicking on the issue title inside a card will take you to that issue.
  • +
  • Clicking on a label inside a card will quickly filter the entire Issue Board +and show only the issues from all lists that have that label.
  • +
  • For performance and visibility reasons, each list shows the first 20 issues +by default. If you have more than 20 issues start scrolling down and the next +20 will appear.
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/addf879a4aac3bdc8025b39c2a7c1b0c b/docker/tanner/snare/dist/pages/1/addf879a4aac3bdc8025b39c2a7c1b0c new file mode 100644 index 000000000..180f7700b --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/addf879a4aac3bdc8025b39c2a7c1b0c @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/ade4438d5128fd7dbb699c338a190eba b/docker/tanner/snare/dist/pages/1/ade4438d5128fd7dbb699c338a190eba new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ade4438d5128fd7dbb699c338a190eba @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ade767cac522c7adb1fe5d56aa029cf3 b/docker/tanner/snare/dist/pages/1/ade767cac522c7adb1fe5d56aa029cf3 new file mode 100644 index 000000000..381c9f0b8 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ade767cac522c7adb1fe5d56aa029cf3 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/ae196610f4180f269cb7de7bed711d01 b/docker/tanner/snare/dist/pages/1/ae196610f4180f269cb7de7bed711d01 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ae196610f4180f269cb7de7bed711d01 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ae64505298966f4b2e75d01368388c01 b/docker/tanner/snare/dist/pages/1/ae64505298966f4b2e75d01368388c01 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ae64505298966f4b2e75d01368388c01 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/aeabfffeeefc3d6e12b12c9e64cff2e8 b/docker/tanner/snare/dist/pages/1/aeabfffeeefc3d6e12b12c9e64cff2e8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/aeabfffeeefc3d6e12b12c9e64cff2e8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/af3f14382360317bdf493b840a26602b b/docker/tanner/snare/dist/pages/1/af3f14382360317bdf493b840a26602b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/af3f14382360317bdf493b840a26602b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/af5fdd22b702bd650c67f78412102347 b/docker/tanner/snare/dist/pages/1/af5fdd22b702bd650c67f78412102347 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/af5fdd22b702bd650c67f78412102347 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/af8c6e71d0cef58240be61958fe91032 b/docker/tanner/snare/dist/pages/1/af8c6e71d0cef58240be61958fe91032 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/af8c6e71d0cef58240be61958fe91032 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/afa4d0d33f4655369d0bc019209711c0 b/docker/tanner/snare/dist/pages/1/afa4d0d33f4655369d0bc019209711c0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/afa4d0d33f4655369d0bc019209711c0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/afc904e15cdef30125f58f3edf33c73d b/docker/tanner/snare/dist/pages/1/afc904e15cdef30125f58f3edf33c73d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/afc904e15cdef30125f58f3edf33c73d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/afd765dde2959352f5dabc7b86bf46b2 b/docker/tanner/snare/dist/pages/1/afd765dde2959352f5dabc7b86bf46b2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/afd765dde2959352f5dabc7b86bf46b2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b05d0f1ac37842c20cdb3118a518639b b/docker/tanner/snare/dist/pages/1/b05d0f1ac37842c20cdb3118a518639b new file mode 100644 index 000000000..40996d310 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b05d0f1ac37842c20cdb3118a518639b @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/b12a53ea51ef61f56fc824255bf251c0 b/docker/tanner/snare/dist/pages/1/b12a53ea51ef61f56fc824255bf251c0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b12a53ea51ef61f56fc824255bf251c0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b2076d21e934046a64c07bb15702a79d b/docker/tanner/snare/dist/pages/1/b2076d21e934046a64c07bb15702a79d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b2076d21e934046a64c07bb15702a79d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b214751591482973b2840c4e30f1e0c1 b/docker/tanner/snare/dist/pages/1/b214751591482973b2840c4e30f1e0c1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b214751591482973b2840c4e30f1e0c1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b2395d0933e064b0982792a46cc5c08c b/docker/tanner/snare/dist/pages/1/b2395d0933e064b0982792a46cc5c08c new file mode 100644 index 000000000..dbf4d5709 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b2395d0933e064b0982792a46cc5c08c @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + +Readme · Ci · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab Continuous Integration (GitLab CI/CD)

+

Pipeline graph

+

The benefits of Continuous Integration are huge when automation plays an +integral part of your workflow. GitLab comes with built-in Continuous +Integration, Continuous Deployment, and Continuous Delivery support +to build, test, and deploy your application.

+

Here's some info we've gathered to get you started.

+

+Getting started

+

The first steps towards your GitLab CI/CD journey.

+ +

+Introduction to GitLab CI/CD

+ +

+Why GitLab CI/CD?

+ +

+Exploring GitLab CI/CD

+ +

+Advanced use

+

Once you get familiar with the basics of GitLab CI/CD, it's time to dive in and +learn how to leverage its potential even more.

+ +

+GitLab CI/CD for Docker

+

Leverage the power of Docker to run your CI pipelines.

+ +

+Review Apps

+ +

+Auto DevOps

+
    +
  • +Auto DevOps: Auto DevOps automatically detects, builds, tests, deploys, and monitors your applications.
  • +
+

+GitLab CI for GitLab Pages

+

See the documentation on GitLab Pages.

+

+Examples

+

Check the GitLab CI/CD examples for a collection of tutorials and guides on setting up your CI/CD pipeline for various programming languages, frameworks, +and operating systems.

+

+Integrations

+ +

+Special configuration (GitLab admin)

+

As a GitLab administrator, you can change the default behavior of GitLab CI/CD in +your whole GitLab instance as well as in each project.

+ +

+Breaking changes

+ +
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/b25e8fc7a11f712b6955ed87c115f79c b/docker/tanner/snare/dist/pages/1/b25e8fc7a11f712b6955ed87c115f79c new file mode 100644 index 000000000..5b90a3a03 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b25e8fc7a11f712b6955ed87c115f79c @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/b271ae9f3f44db3325b5e796007fb6cd b/docker/tanner/snare/dist/pages/1/b271ae9f3f44db3325b5e796007fb6cd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b271ae9f3f44db3325b5e796007fb6cd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b2ad54c19ecff210fa6307848f6ac488 b/docker/tanner/snare/dist/pages/1/b2ad54c19ecff210fa6307848f6ac488 new file mode 100644 index 000000000..32fad1696 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b2ad54c19ecff210fa6307848f6ac488 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/b2f1bf9de15834653d3b9bcb783dbcaa b/docker/tanner/snare/dist/pages/1/b2f1bf9de15834653d3b9bcb783dbcaa new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b2f1bf9de15834653d3b9bcb783dbcaa @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b35e865bed05d48e918057c9004d24ec b/docker/tanner/snare/dist/pages/1/b35e865bed05d48e918057c9004d24ec new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b35e865bed05d48e918057c9004d24ec @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b3bacce3d3316b0d164538a930bb6d6e b/docker/tanner/snare/dist/pages/1/b3bacce3d3316b0d164538a930bb6d6e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b3bacce3d3316b0d164538a930bb6d6e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b3f98ee509353d5ce3080210352e9f61 b/docker/tanner/snare/dist/pages/1/b3f98ee509353d5ce3080210352e9f61 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b3f98ee509353d5ce3080210352e9f61 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b40e6523fca4c7082acc1daeb5c3f306 b/docker/tanner/snare/dist/pages/1/b40e6523fca4c7082acc1daeb5c3f306 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b40e6523fca4c7082acc1daeb5c3f306 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b4a87a79ea433664dbb68bfcf2d56f39 b/docker/tanner/snare/dist/pages/1/b4a87a79ea433664dbb68bfcf2d56f39 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b4a87a79ea433664dbb68bfcf2d56f39 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b4d750f5a4a64efdfcf7a9a7a77f24a1 b/docker/tanner/snare/dist/pages/1/b4d750f5a4a64efdfcf7a9a7a77f24a1 new file mode 100644 index 000000000..6e91ea64b --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b4d750f5a4a64efdfcf7a9a7a77f24a1 @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Slack slash commands · Integrations · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Slack slash commands

+
+

Introduced in GitLab 8.15

+
+

Slack slash commands allow you to control GitLab and view content right inside Slack, without having to leave it. This requires configurations in both Slack and GitLab.

+
+

Note: GitLab can also send events (e.g. issue created) to Slack as notifications. This is the separately configured Slack Notifications Service.

+
+

+Configuration

+
    +
  1. Slack slash commands are scoped to a project. Navigate to the Integrations page in your project's settings, i.e. Project > Settings > Integrations.
  2. +
  3. Select the Slack slash commands project service to configure it. This page contains required information to complete the configuration in Slack. Leave this browser tab open.
  4. +
  5. Open a new browser tab and sign in to your Slack team. Start a new Slash Commands integration.
  6. +
  7. Enter a trigger term. We suggest you use the project name. Click Add Slash Command Integration.
  8. +
  9. Complete the rest of the fields in the Slack configuration page using information from the GitLab browser tab. In particular, the URL needs to be copied and pasted. Click Save Integration to complete the configuration in Slack.
  10. +
  11. While still on the Slack configuration page, copy the token. Go back to the GitLab browser tab and paste in the token.
  12. +
  13. Check the Active checkbox and click Save changes to complete the configuration in GitLab.
  14. +
+

Slack setup instructions

+

+Usage

+

You can now use the Slack slash commands.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/b508b12d7aec3b4904bfa2faac7ce595 b/docker/tanner/snare/dist/pages/1/b508b12d7aec3b4904bfa2faac7ce595 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b508b12d7aec3b4904bfa2faac7ce595 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b5198f0f891ab7540d1b1f4cbaee2b43 b/docker/tanner/snare/dist/pages/1/b5198f0f891ab7540d1b1f4cbaee2b43 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b5198f0f891ab7540d1b1f4cbaee2b43 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b522fe877e656a2be713fd5fd45d46ba b/docker/tanner/snare/dist/pages/1/b522fe877e656a2be713fd5fd45d46ba new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b522fe877e656a2be713fd5fd45d46ba @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b554a3bf701ab11a90016528e47151f3 b/docker/tanner/snare/dist/pages/1/b554a3bf701ab11a90016528e47151f3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b554a3bf701ab11a90016528e47151f3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b5bc226a451eea77fe9d2ba846b0df4b b/docker/tanner/snare/dist/pages/1/b5bc226a451eea77fe9d2ba846b0df4b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b5bc226a451eea77fe9d2ba846b0df4b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b5cb15cee54dc4f20ea1f67ce8ff3100 b/docker/tanner/snare/dist/pages/1/b5cb15cee54dc4f20ea1f67ce8ff3100 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b5cb15cee54dc4f20ea1f67ce8ff3100 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b5d634dd79d14bcd91e3f0e1e435b67e b/docker/tanner/snare/dist/pages/1/b5d634dd79d14bcd91e3f0e1e435b67e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b5d634dd79d14bcd91e3f0e1e435b67e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b626467473f0c29416ab200f0a8567d5 b/docker/tanner/snare/dist/pages/1/b626467473f0c29416ab200f0a8567d5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b626467473f0c29416ab200f0a8567d5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b640c667eb664b6ea4382ea4e0dae7d5 b/docker/tanner/snare/dist/pages/1/b640c667eb664b6ea4382ea4e0dae7d5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b640c667eb664b6ea4382ea4e0dae7d5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b649ad9f6e856050dc7bef2ffe46ab45 b/docker/tanner/snare/dist/pages/1/b649ad9f6e856050dc7bef2ffe46ab45 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b649ad9f6e856050dc7bef2ffe46ab45 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b65700346c64c66e9c91ff4a1dfbeaf0 b/docker/tanner/snare/dist/pages/1/b65700346c64c66e9c91ff4a1dfbeaf0 new file mode 100644 index 000000000..4c4465705 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b65700346c64c66e9c91ff4a1dfbeaf0 @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + +Index · Wiki · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Wiki

+

A separate system for documentation called Wiki, is built right into each +GitLab project. It is enabled by default on all new projects and you can find +it under Wiki in your project.

+

Wikis are very convenient if you don't want to keep your documentation in your +repository, but you do want to keep it in the same project where your code +resides.

+

You can create Wiki pages in the web interface or +locally using Git since every Wiki is +a separate Git repository.

+
+

Note: +A permission level of Guest is needed to view a Wiki and +Developer is needed to create and edit Wiki pages.

+
+

+First time creating the Home page

+

The first time you visit a Wiki, you will be directed to create the Home page. +The Home page is necessary to be created since it serves as the landing page +when viewing a Wiki. You only have to fill in the Content section and click +Create page. You can always edit it later, so go ahead and write a welcome +message.

+

New home page

+

+Creating a new wiki page

+

Create a new page by clicking the New page button that can be found +in all wiki pages. You will be asked to fill in the page name from which GitLab +will create the path to the page. You can specify a full path for the new file +and any missing directories will be created automatically.

+

New page modal

+

Once you enter the page name, it's time to fill in its content. GitLab wikis +support Markdown, RDoc and AsciiDoc. For Markdown based pages, all the +Markdown features are supported and for links there is +some wiki specific behavior.

+
+

Note: +The wiki is based on a Git repository and contains only text files. Uploading +files via the web interface will upload them in GitLab itself, and they will +not be available if you clone the wiki repo locally.

+
+

In the web interface the commit message is optional, but the GitLab Wiki is +based on Git and needs a commit message, so one will be created for you if you +do not enter one.

+

When you're ready, click the Create page and the new page will be created.

+

New page

+

+Editing a wiki page

+

To edit a page, simply click on the Edit button. From there on, you can +change its content. When done, click Save changes for the changes to take +effect.

+

+Deleting a wiki page

+

You can find the Delete button only when editing a page. Click on it and +confirm you want the page to be deleted.

+

+Moving a wiki page

+

You can move a wiki page from one directory to another by specifying the full +path in the wiki page title in the edit form.

+

Moving a page

+

After moving a page

+

In order to move a wiki page to the root directory, the wiki page title must +be preceded by the slash (/) character.

+

+Viewing a list of all created wiki pages

+

Every wiki has a sidebar from which a short list of the created pages can be +found. The list is ordered alphabetically.

+

Wiki sidebar

+

If you have many pages, not all will be listed in the sidebar. Click on +More pages to see all of them.

+

+Viewing the history of a wiki page

+

The changes of a wiki page over time are recorded in the wiki's Git repository, +and you can view them by clicking the Page history button.

+

From the history page you can see the revision of the page (Git commit SHA), its +author, the commit message, when it was last updated and the page markup format. +To see how a previous version of the page looked like, click on a revision +number.

+

Wiki page history

+

+Adding and editing wiki pages locally

+

Since wikis are based on Git repositories, you can clone them locally and edit +them like you would do with every other Git repository.

+

On the right sidebar, click on Clone repository and follow the on-screen +instructions.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/b6763735b202c23956a970eda255f486 b/docker/tanner/snare/dist/pages/1/b6763735b202c23956a970eda255f486 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b6763735b202c23956a970eda255f486 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b6daf92cc59159d97392d763850f3624 b/docker/tanner/snare/dist/pages/1/b6daf92cc59159d97392d763850f3624 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b6daf92cc59159d97392d763850f3624 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b7323e16b6808c48c3d9ee4124eb6b83 b/docker/tanner/snare/dist/pages/1/b7323e16b6808c48c3d9ee4124eb6b83 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b7323e16b6808c48c3d9ee4124eb6b83 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b74faf85b315d0f2b469d1fa8ca52250 b/docker/tanner/snare/dist/pages/1/b74faf85b315d0f2b469d1fa8ca52250 new file mode 100644 index 000000000..62e01af5b --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b74faf85b315d0f2b469d1fa8ca52250 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/b7b9febb01789dcf65ef7127b4f76aaa b/docker/tanner/snare/dist/pages/1/b7b9febb01789dcf65ef7127b4f76aaa new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b7b9febb01789dcf65ef7127b4f76aaa @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b82789af46cca8ed6ee12034d05d95ab b/docker/tanner/snare/dist/pages/1/b82789af46cca8ed6ee12034d05d95ab new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b82789af46cca8ed6ee12034d05d95ab @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b85462513bf151d3936a83eeda8de713 b/docker/tanner/snare/dist/pages/1/b85462513bf151d3936a83eeda8de713 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b85462513bf151d3936a83eeda8de713 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b86d8db7d7e22fdeb32a4515c062a5de b/docker/tanner/snare/dist/pages/1/b86d8db7d7e22fdeb32a4515c062a5de new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b86d8db7d7e22fdeb32a4515c062a5de @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b88c8b02aed8a6c0c62aa35e06bb6f23 b/docker/tanner/snare/dist/pages/1/b88c8b02aed8a6c0c62aa35e06bb6f23 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b88c8b02aed8a6c0c62aa35e06bb6f23 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b8b9934cf00d6600d43ce05a56567fcb b/docker/tanner/snare/dist/pages/1/b8b9934cf00d6600d43ce05a56567fcb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b8b9934cf00d6600d43ce05a56567fcb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b8f18291054802ea7aad3b1ec6b5f01d b/docker/tanner/snare/dist/pages/1/b8f18291054802ea7aad3b1ec6b5f01d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b8f18291054802ea7aad3b1ec6b5f01d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b90b0a2b5ded3bf8e573f3c340274d14 b/docker/tanner/snare/dist/pages/1/b90b0a2b5ded3bf8e573f3c340274d14 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b90b0a2b5ded3bf8e573f3c340274d14 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b93c7aaf1c5fd5da788ef0a370fa97e2 b/docker/tanner/snare/dist/pages/1/b93c7aaf1c5fd5da788ef0a370fa97e2 new file mode 100644 index 000000000..56e0a9c74 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b93c7aaf1c5fd5da788ef0a370fa97e2 @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + +Create-project · Gitlab-basics · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+How to create a project in GitLab

+
+

Notes:

+
+
    +
  • For a list of words that are not allowed to be used as project names see the +reserved names.
  • +
+
    +
  1. +

    In your dashboard, click the green New project button or use the plus +icon in the upper right corner of the navigation bar.

    +

    Create a project

    +
  2. +
  3. +

    This opens the New project page.

    +

    Project information

    +
  4. +
  5. +

    Choose if you want start a blank project, or with one of the predefined +Project Templates: +this will kickstart your repository code and CI automatically. +Otherwise, if you have a project in a different repository, you can import it by +clicking on the Import project tab, provided this is enabled in +your GitLab instance. Ask your administrator if not.

    +
  6. +
  7. +

    Provide the following information:

    +
      +
    • Enter the name of your project in the Project name field. You can't use +special characters, but you can use spaces, hyphens, underscores or even +emoji.
    • +
    • The Project description (optional) field enables you to enter a +description for your project's dashboard, which will help others +understand what your project is about. Though it's not required, it's a good +idea to fill this in.
    • +
    • Changing the Visibility Level modifies the project's +viewing and access rights for users.
    • +
    • Selecting the Initialize repository with a README option creates a +README so that the Git repository is initialized, has a default branch and +can be cloned.
    • +
    +
  8. +
  9. +

    Click Create project.

    +
  10. +
+

+Push to create a new project

+
+

Introduced in GitLab 10.5.

+
+

When you create a new repo locally, instead of going to GitLab to manually +create a new project and then push the repo, you can directly push it to +GitLab to create the new project, all without leaving your terminal. If you have access to that +namespace, we will automatically create a new project under that GitLab namespace with its +visibility set to Private by default (you can later change it in the project's settings).

+

This can be done by using either SSH or HTTP:

+
## Git push using SSH
+git push --set-upstream git@gitlab.example.com:namespace/nonexistent-project.git master
+
+## Git push using HTTP
+git push --set-upstream https://gitlab.example.com/namespace/nonexistent-project.git master
+

Once the push finishes successfully, a remote message will indicate +the command to set the remote and the URL to the new project:

+
remote:
+remote: The private project namespace/nonexistent-project was created.
+remote:
+remote: To configure the remote, run:
+remote:   git remote add origin https://gitlab.example.com/namespace/nonexistent-project.git
+remote:
+remote: To view the project, visit:
+remote:   https://gitlab.example.com/namespace/nonexistent-project
+remote:
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/b967c6e67a882e11f8656a24cb968ab5 b/docker/tanner/snare/dist/pages/1/b967c6e67a882e11f8656a24cb968ab5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b967c6e67a882e11f8656a24cb968ab5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b96aa24965b30e13fa999afb1412ed73 b/docker/tanner/snare/dist/pages/1/b96aa24965b30e13fa999afb1412ed73 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b96aa24965b30e13fa999afb1412ed73 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/b99ab31b44a16489331cc6fbc2e8397a b/docker/tanner/snare/dist/pages/1/b99ab31b44a16489331cc6fbc2e8397a new file mode 100644 index 000000000..cbd0899e2 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b99ab31b44a16489331cc6fbc2e8397a @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/b9b294f682a6368d698497e228a66f12 b/docker/tanner/snare/dist/pages/1/b9b294f682a6368d698497e228a66f12 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/b9b294f682a6368d698497e228a66f12 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ba337f76a7c59b766c6e03dfebb5e9af b/docker/tanner/snare/dist/pages/1/ba337f76a7c59b766c6e03dfebb5e9af new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ba337f76a7c59b766c6e03dfebb5e9af @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/baa03b0fd30eeda4dc96aecf9f0139da b/docker/tanner/snare/dist/pages/1/baa03b0fd30eeda4dc96aecf9f0139da new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/baa03b0fd30eeda4dc96aecf9f0139da @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/bacfa45149ffbe8dbff34609bf56d748 b/docker/tanner/snare/dist/pages/1/bacfa45149ffbe8dbff34609bf56d748 new file mode 100644 index 000000000..6ddb34e10 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/bacfa45149ffbe8dbff34609bf56d748 @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/bb175fee31cf4b51ae6f47a39a961808 b/docker/tanner/snare/dist/pages/1/bb175fee31cf4b51ae6f47a39a961808 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/bb175fee31cf4b51ae6f47a39a961808 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/bb2ccc55f54780dc396a2fcea3bc097a b/docker/tanner/snare/dist/pages/1/bb2ccc55f54780dc396a2fcea3bc097a new file mode 100644 index 000000000..ced9fcc17 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/bb2ccc55f54780dc396a2fcea3bc097a @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Index · Import · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Migrating projects to a GitLab instance

+
    +
  1. From Bitbucket.org
  2. +
  3. From ClearCase
  4. +
  5. From CVS
  6. +
  7. From FogBugz
  8. +
  9. From GitHub.com or GitHub Enterprise
  10. +
  11. From GitLab.com
  12. +
  13. From Gitea
  14. +
  15. From Perforce
  16. +
  17. From SVN
  18. +
  19. From TFS
  20. +
  21. From repo by URL
  22. +
+

In addition to the specific migration documentation above, you can import any +Git repository via HTTP from the New Project page. Be aware that if the +repository is too large the import can timeout.

+

+Migrating from self-hosted GitLab to GitLab.com

+

You can copy your repos by changing the remote and pushing to the new server, +but issues and merge requests can't be imported.

+

If you want to retain all metadata like issues and merge requests, you can use +the import/export feature.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/bb4540f8b8d95d7230dc0102969c1d87 b/docker/tanner/snare/dist/pages/1/bb4540f8b8d95d7230dc0102969c1d87 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/bb4540f8b8d95d7230dc0102969c1d87 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/bb61a77d1f40afaff6295dc05f01281e b/docker/tanner/snare/dist/pages/1/bb61a77d1f40afaff6295dc05f01281e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/bb61a77d1f40afaff6295dc05f01281e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/bb84096ca80f89986756001777a07d6f b/docker/tanner/snare/dist/pages/1/bb84096ca80f89986756001777a07d6f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/bb84096ca80f89986756001777a07d6f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/bba60baa9b92a68d1e782b2336df7766 b/docker/tanner/snare/dist/pages/1/bba60baa9b92a68d1e782b2336df7766 new file mode 100644 index 000000000..2c76001e6 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/bba60baa9b92a68d1e782b2336df7766 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/bbf6a17e6918435d46af3e3223c13324 b/docker/tanner/snare/dist/pages/1/bbf6a17e6918435d46af3e3223c13324 new file mode 100644 index 000000000..29c0ae7bb --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/bbf6a17e6918435d46af3e3223c13324 @@ -0,0 +1,2 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[72],{337:function(e,t,r){"use strict";var n=r(0),o=r.n(n),s=r(3),i=r.n(s),a=r(440),u=r(439),c=function(){function e(e,t){for(var r=0;r=0||e.indexOf("OPR")>=0}function o(e){var t=function(e){return e.indexOf("Chrom")>=0&&!n(e)}(e)&&function(e){var t=e.match(/Chrom(?:e|ium)\/([0-9]+)\./);return!!t&&parseInt(t[1],10)}(e)>=41,r=n(e)&&function(e){var t=e.match(/OPR[^0-9]*([0-9]+)[^0-9]+/);return!!t&&parseInt(t[1],10)}(e)>=40,o=e.indexOf("droid")>=0||e.indexOf("CriOS")>=0||/\b(iPad|iPhone|iPod)(?=;)/.test(e);return(t||r)&&!o}function s(){return window.u2f?Promise.resolve(window.u2f):o("undefined"!=typeof navigator?navigator.userAgent:"")||gon&&gon.test_env?Promise.resolve().then(r.t.bind(null,515,7)).then(function(){return window.u2f}):Promise.reject()}r.d(t,"a",function(){return s})},515:function(e,t,r){"use strict";(function(e){var t,r=r||{};r.EXTENSION_ID="kmendfapggjehodndflmmgagdbamhnfd",r.MessageTypes={U2F_REGISTER_REQUEST:"u2f_register_request",U2F_REGISTER_RESPONSE:"u2f_register_response",U2F_SIGN_REQUEST:"u2f_sign_request",U2F_SIGN_RESPONSE:"u2f_sign_response",U2F_GET_API_VERSION_REQUEST:"u2f_get_api_version_request",U2F_GET_API_VERSION_RESPONSE:"u2f_get_api_version_response"},r.ErrorCodes={OK:0,OTHER_ERROR:1,BAD_REQUEST:2,CONFIGURATION_UNSUPPORTED:3,DEVICE_INELIGIBLE:4,TIMEOUT:5},r.U2fRequest,r.U2fResponse,r.Error,r.Transport,r.Transports,r.SignRequest,r.SignResponse,r.RegisterRequest,r.RegisterResponse,r.RegisteredKey,r.GetJsApiVersionResponse,r.getMessagePort=function(e){if("undefined"!=typeof chrome&&chrome.runtime){var t={type:r.MessageTypes.U2F_SIGN_REQUEST,signRequests:[]};chrome.runtime.sendMessage(r.EXTENSION_ID,t,function(){chrome.runtime.lastError?r.getIframePort_(e):r.getChromeRuntimePort_(e)})}else r.isAndroidChrome_()?r.getAuthenticatorPort_(e):r.isIosChrome_()?r.getIosPort_(e):r.getIframePort_(e)},r.isAndroidChrome_=function(){var e=navigator.userAgent;return-1!=e.indexOf("Chrome")&&-1!=e.indexOf("Android")},r.isIosChrome_=function(){return e.inArray(navigator.platform,["iPhone","iPad","iPod"])>-1},r.getChromeRuntimePort_=function(e){var t=chrome.runtime.connect(r.EXTENSION_ID,{includeTlsChannelId:!0});setTimeout(function(){e(new r.WrappedChromeRuntimePort_(t))},0)},r.getAuthenticatorPort_=function(e){setTimeout(function(){e(new r.WrappedAuthenticatorPort_)},0)},r.getIosPort_=function(e){setTimeout(function(){e(new r.WrappedIosPort_)},0)},r.WrappedChromeRuntimePort_=function(e){this.port_=e},r.formatSignRequest_=function(e,n,o,s,i){if(void 0===t||t<1.1){for(var a=[],u=0;u + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/c1d95f4813b970fe738fd6f2c9c28c66 b/docker/tanner/snare/dist/pages/1/c1d95f4813b970fe738fd6f2c9c28c66 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c1d95f4813b970fe738fd6f2c9c28c66 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c218fd714cb7f5a97a636e72adbc32e8 b/docker/tanner/snare/dist/pages/1/c218fd714cb7f5a97a636e72adbc32e8 new file mode 100644 index 000000000..f4800be11 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c218fd714cb7f5a97a636e72adbc32e8 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/c22899b46d47a606ce5b6a893d06f470 b/docker/tanner/snare/dist/pages/1/c22899b46d47a606ce5b6a893d06f470 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c22899b46d47a606ce5b6a893d06f470 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c2289c88978b7fb51d3e87d35d8a4fcb b/docker/tanner/snare/dist/pages/1/c2289c88978b7fb51d3e87d35d8a4fcb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c2289c88978b7fb51d3e87d35d8a4fcb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c25f93bb2905802f2dc9df8043dff947 b/docker/tanner/snare/dist/pages/1/c25f93bb2905802f2dc9df8043dff947 new file mode 100644 index 000000000..626351d48 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c25f93bb2905802f2dc9df8043dff947 @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/c2abac2d825a450ce5744652f3c59713 b/docker/tanner/snare/dist/pages/1/c2abac2d825a450ce5744652f3c59713 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c2abac2d825a450ce5744652f3c59713 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c2e8042749934a2596e3e7136a4cd4d7 b/docker/tanner/snare/dist/pages/1/c2e8042749934a2596e3e7136a4cd4d7 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c2e8042749934a2596e3e7136a4cd4d7 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c31b42e4cc7d903f5b4cb9886e694006 b/docker/tanner/snare/dist/pages/1/c31b42e4cc7d903f5b4cb9886e694006 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c31b42e4cc7d903f5b4cb9886e694006 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c33406bc75399aedc17717746fd2ee12 b/docker/tanner/snare/dist/pages/1/c33406bc75399aedc17717746fd2ee12 new file mode 100644 index 000000000..fab44fb08 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c33406bc75399aedc17717746fd2ee12 @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + +Fork-project · Gitlab-basics · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+How to fork a project

+

A fork is a copy of an original repository that you can put in another namespace +where you can experiment and apply changes that you can later decide if +publishing or not, without affecting your original project.

+

It takes just a few steps to fork a project in GitLab.

+
    +
  1. +

    Go to a project's dashboard under the Project tab and click on the +Fork button.

    +

    Click on Fork button

    +
  2. +
  3. +

    You will be asked where to fork the repository. Click on the user or group +to where you'd like to add the forked project.

    +

    Choose namespace

    +
  4. +
  5. +

    After a few moments, depending on the repository's size, the forking will +complete.

    +
  6. +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/c384d5ee0c6d0a46953e254266923e56 b/docker/tanner/snare/dist/pages/1/c384d5ee0c6d0a46953e254266923e56 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c384d5ee0c6d0a46953e254266923e56 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c3cc06ca02741cd3dc80e4d2abbbf45d b/docker/tanner/snare/dist/pages/1/c3cc06ca02741cd3dc80e4d2abbbf45d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c3cc06ca02741cd3dc80e4d2abbbf45d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c421006720f9bdb4eefcb97dc5878d02 b/docker/tanner/snare/dist/pages/1/c421006720f9bdb4eefcb97dc5878d02 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c421006720f9bdb4eefcb97dc5878d02 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c52e2a899cdd01b9d46afb1cbd9be45d b/docker/tanner/snare/dist/pages/1/c52e2a899cdd01b9d46afb1cbd9be45d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c52e2a899cdd01b9d46afb1cbd9be45d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c542e09d374c9ad31890ac79dee65514 b/docker/tanner/snare/dist/pages/1/c542e09d374c9ad31890ac79dee65514 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c542e09d374c9ad31890ac79dee65514 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c57053ec64eaf0962f2a293a93a502f4 b/docker/tanner/snare/dist/pages/1/c57053ec64eaf0962f2a293a93a502f4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c57053ec64eaf0962f2a293a93a502f4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c585a36076acb83c59002f5d2ef620b8 b/docker/tanner/snare/dist/pages/1/c585a36076acb83c59002f5d2ef620b8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c585a36076acb83c59002f5d2ef620b8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c5c5446f28a85ef5b51b6cd3d1155c7c b/docker/tanner/snare/dist/pages/1/c5c5446f28a85ef5b51b6cd3d1155c7c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c5c5446f28a85ef5b51b6cd3d1155c7c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c5dbfe64fcc9f87127e42ad82d4cdcc6 b/docker/tanner/snare/dist/pages/1/c5dbfe64fcc9f87127e42ad82d4cdcc6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c5dbfe64fcc9f87127e42ad82d4cdcc6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c5ec91a74c9c7cbd620e74095bce8785 b/docker/tanner/snare/dist/pages/1/c5ec91a74c9c7cbd620e74095bce8785 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c5ec91a74c9c7cbd620e74095bce8785 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c5fc2cd3f3b8b5a9583d2fd900084b6d b/docker/tanner/snare/dist/pages/1/c5fc2cd3f3b8b5a9583d2fd900084b6d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c5fc2cd3f3b8b5a9583d2fd900084b6d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c634668b70621fcb5cf1e085fefccfb4 b/docker/tanner/snare/dist/pages/1/c634668b70621fcb5cf1e085fefccfb4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c634668b70621fcb5cf1e085fefccfb4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c65d0c5acf822e713d8cb812e844aef4 b/docker/tanner/snare/dist/pages/1/c65d0c5acf822e713d8cb812e844aef4 new file mode 100644 index 000000000..ce241e048 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c65d0c5acf822e713d8cb812e844aef4 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/c694dd65d02cd33eb5d79380dc4d3364 b/docker/tanner/snare/dist/pages/1/c694dd65d02cd33eb5d79380dc4d3364 new file mode 100644 index 000000000..f4e19b670 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c694dd65d02cd33eb5d79380dc4d3364 @@ -0,0 +1,26 @@ + + + + Slice 1 + Created with Sketch. + + + + + diff --git a/docker/tanner/snare/dist/pages/1/c6e72775b4c25043228d03805a14c95a b/docker/tanner/snare/dist/pages/1/c6e72775b4c25043228d03805a14c95a new file mode 100644 index 000000000..7345fc35e --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c6e72775b4c25043228d03805a14c95a @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + +Index · Web ide · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Web IDE

+
+

Introduced in GitLab Ultimate 10.4. +Brought to GitLab Core in 10.7.

+
+

The Web IDE makes it faster and easier to contribute changes to your projects +by providing an advanced editor with commit staging.

+

+Open the Web IDE

+

The Web IDE can be opened when viewing a file, from the repository file list, +and from merge requests.

+

Open Web IDE

+

+File finder

+
+

Introduced in GitLab Core 10.8.

+
+

The file finder allows you to quickly open files in the current branch by +searching. The file finder is launched using the keyboard shortcut Command-p, +Control-p, or t (when editor is not in focus). Type the filename or +file path fragments to start seeing results.

+

+Stage and commit changes

+

After making your changes, click the Commit button in the bottom left to +review the list of changed files. Click on each file to review the changes and +click the tick icon to stage the file.

+

Once you have staged some changes, you can add a commit message and commit the +staged changes. Unstaged changes will not be commited.

+

Commit changes

+

+Reviewing changes

+

Before you commit your changes, you can compare them with the previous commit +by switching to the review mode or selecting the file from the staged files +list.

+

An additional review mode is available when you open a merge request, which +shows you a preview of the merge request diff if you commit your changes.

+

+View CI job logs

+
+

Introduced in GitLab Core 11.0.

+
+

The Web IDE can be used to quickly fix failing tests by opening the branch or +merge request in the Web IDE and opening the logs of the failed job. The status +of all jobs for the most recent pipeline and job traces for the current commit +can be accessed by clicking the Pipelines button in the top right.

+

The pipeline status is also shown at all times in the status bar in the bottom +left.

+

+Switching merge requests

+
+

Introduced in GitLab Core 11.0.

+
+

Switching between your authored and assigned merge requests can be done without +leaving the Web IDE. Click the project name in the top left to open a list of +merge requests. You will need to commit or discard all your changes before +switching to a different merge request.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/c6fc3b0d82e5a83f8ab68c691feb874f b/docker/tanner/snare/dist/pages/1/c6fc3b0d82e5a83f8ab68c691feb874f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c6fc3b0d82e5a83f8ab68c691feb874f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c7f445bc951d6e0b99c0d6e6198a4565 b/docker/tanner/snare/dist/pages/1/c7f445bc951d6e0b99c0d6e6198a4565 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c7f445bc951d6e0b99c0d6e6198a4565 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c85461e27bc7d0b2167c15b99d3dd002 b/docker/tanner/snare/dist/pages/1/c85461e27bc7d0b2167c15b99d3dd002 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c85461e27bc7d0b2167c15b99d3dd002 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c8de33d0c6556512c2799cde59645881 b/docker/tanner/snare/dist/pages/1/c8de33d0c6556512c2799cde59645881 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c8de33d0c6556512c2799cde59645881 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c95ddee085e9040b4e7137566168a382 b/docker/tanner/snare/dist/pages/1/c95ddee085e9040b4e7137566168a382 new file mode 100644 index 000000000..6c51fbb77 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c95ddee085e9040b4e7137566168a382 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/c9a8846a84895b183044bd63ece638fa b/docker/tanner/snare/dist/pages/1/c9a8846a84895b183044bd63ece638fa new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c9a8846a84895b183044bd63ece638fa @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/c9f820c6218f10fd0d360c3f29dfcfd3 b/docker/tanner/snare/dist/pages/1/c9f820c6218f10fd0d360c3f29dfcfd3 new file mode 100644 index 000000000..26dc72b32 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/c9f820c6218f10fd0d360c3f29dfcfd3 @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/ca0987b34b512c42c5730ad507064d48 b/docker/tanner/snare/dist/pages/1/ca0987b34b512c42c5730ad507064d48 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ca0987b34b512c42c5730ad507064d48 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cadb096c3d0ed627da843c5d5bea4ceb b/docker/tanner/snare/dist/pages/1/cadb096c3d0ed627da843c5d5bea4ceb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cadb096c3d0ed627da843c5d5bea4ceb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cae2202c857920713167fc83e3f033e3 b/docker/tanner/snare/dist/pages/1/cae2202c857920713167fc83e3f033e3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cae2202c857920713167fc83e3f033e3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/caf122f7a482793342ba91f6a3faf3c4 b/docker/tanner/snare/dist/pages/1/caf122f7a482793342ba91f6a3faf3c4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/caf122f7a482793342ba91f6a3faf3c4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cb3a9daf167f61d7e77174e0aace7b0e b/docker/tanner/snare/dist/pages/1/cb3a9daf167f61d7e77174e0aace7b0e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cb3a9daf167f61d7e77174e0aace7b0e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cb72cce5814922ffde99fa3940c98637 b/docker/tanner/snare/dist/pages/1/cb72cce5814922ffde99fa3940c98637 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cb72cce5814922ffde99fa3940c98637 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cc55e4012dad172cb4146084ac5aae47 b/docker/tanner/snare/dist/pages/1/cc55e4012dad172cb4146084ac5aae47 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cc55e4012dad172cb4146084ac5aae47 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cc63de0af5261f2a4f0c53780722b1a9 b/docker/tanner/snare/dist/pages/1/cc63de0af5261f2a4f0c53780722b1a9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cc63de0af5261f2a4f0c53780722b1a9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cd3613fcea7fb27654b85d5b4a8b3fe1 b/docker/tanner/snare/dist/pages/1/cd3613fcea7fb27654b85d5b4a8b3fe1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cd3613fcea7fb27654b85d5b4a8b3fe1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cd74db63736df6f38f3243b74130f92f b/docker/tanner/snare/dist/pages/1/cd74db63736df6f38f3243b74130f92f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cd74db63736df6f38f3243b74130f92f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cda1584b905428ffaf769d4d0e713121 b/docker/tanner/snare/dist/pages/1/cda1584b905428ffaf769d4d0e713121 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cda1584b905428ffaf769d4d0e713121 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ce3a330585b58be374f26b4d03c0cfbf b/docker/tanner/snare/dist/pages/1/ce3a330585b58be374f26b4d03c0cfbf new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ce3a330585b58be374f26b4d03c0cfbf @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ce4c157a3cb9ac5a9ec4e1c9d9218ef2 b/docker/tanner/snare/dist/pages/1/ce4c157a3cb9ac5a9ec4e1c9d9218ef2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ce4c157a3cb9ac5a9ec4e1c9d9218ef2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ce719148121e638d5ba4d2317c6d8732 b/docker/tanner/snare/dist/pages/1/ce719148121e638d5ba4d2317c6d8732 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ce719148121e638d5ba4d2317c6d8732 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cea7134212a40c0dcae90d9e56ceba7c b/docker/tanner/snare/dist/pages/1/cea7134212a40c0dcae90d9e56ceba7c new file mode 100644 index 000000000..4bc35dd45 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cea7134212a40c0dcae90d9e56ceba7c @@ -0,0 +1,151 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[65],[function(e,t,n){var r; +/*! + * jQuery JavaScript Library v3.3.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2018-01-20T17:24Z + */ +/*! + * jQuery JavaScript Library v3.3.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2018-01-20T17:24Z + */ +!function(t,n){"use strict";"object"==typeof e&&"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,function(n,i){"use strict";var o=[],a=n.document,s=Object.getPrototypeOf,u=o.slice,l=o.concat,c=o.push,f=o.indexOf,d={},h=d.toString,p=d.hasOwnProperty,m=p.toString,v=m.call(Object),g={},y=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},b=function(e){return null!=e&&e===e.window},w={type:!0,src:!0,noModule:!0};function E(e,t,n){var r,i=(t=t||a).createElement("script");if(i.text=e,n)for(r in w)n[r]&&(i[r]=n[r]);t.head.appendChild(i).parentNode.removeChild(i)}function _(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?d[h.call(e)]||"object":typeof e}var C=function(e,t){return new C.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function k(e){var t=!!e&&"length"in e&&e.length,n=_(e);return!y(e)&&!b(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}C.fn=C.prototype={jquery:"3.3.1",constructor:C,length:0,toArray:function(){return u.call(this)},get:function(e){return null==e?u.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=C.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return C.each(this,e)},map:function(e){return this.pushStack(C.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(u.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|"+M+")"+M+"*"),W=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(q),K=new RegExp("^"+F+"$"),z={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),TAG:new RegExp("^("+F+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+N+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,X=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,J=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){d()},ie=ye(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{D.apply(O=L.call(E.childNodes),E.childNodes),O[E.childNodes.length].nodeType}catch(e){D={apply:O.length?function(e,t){I.apply(e,L.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,p,g,y=t&&t.ownerDocument,_=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==_&&9!==_&&11!==_)return r;if(!i&&((t?t.ownerDocument||t:E)!==h&&d(t),t=t||h,m)){if(11!==_&&(f=X.exec(e)))if(o=f[1]){if(9===_){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(y&&(l=y.getElementById(o))&&b(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return D.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return D.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!x[e+" "]&&(!v||!v.test(e))){if(1!==_)y=t,g=e;else if("object"!==t.nodeName.toLowerCase()){for((c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=w),s=(p=a(e)).length;s--;)p[s]="#"+c+" "+ge(p[s]);g=p.join(","),y=J.test(e)&&me(t.parentNode)||t}if(g)try{return D.apply(r,y.querySelectorAll(g)),r}catch(e){}finally{c===w&&t.removeAttribute("id")}}}return u(e.replace($,"$1"),t,r,i)}function ae(){var e=[];return function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}}function se(e){return e[w]=!0,e}function ue(e){var t=h.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){for(var n=e.split("|"),i=n.length;i--;)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function de(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function he(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function pe(e){return se(function(t){return t=+t,se(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function me(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},d=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:E;return a!==h&&9===a.nodeType&&a.documentElement?(p=(h=a).documentElement,m=!o(h),E!==h&&(i=h.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(h.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Y.test(h.getElementsByClassName),n.getById=ue(function(e){return p.appendChild(e).id=w,!h.getElementsByName||!h.getElementsByName(w).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},g=[],v=[],(n.qsa=Y.test(h.querySelectorAll))&&(ue(function(e){p.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+N+")"),e.querySelectorAll("[id~="+w+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+w+"+*").length||v.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=h.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(n.matchesSelector=Y.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),g.push("!=",q)}),v=v.length&&new RegExp(v.join("|")),g=g.length&&new RegExp(g.join("|")),t=Y.test(p.compareDocumentPosition),b=t||Y.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},S=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===h||e.ownerDocument===E&&b(E,e)?-1:t===h||t.ownerDocument===E&&b(E,t)?1:c?P(c,e)-P(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===h?-1:t===h?1:i?-1:o?1:c?P(c,e)-P(c,t):0;if(i===o)return ce(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?ce(a[r],s[r]):a[r]===E?-1:s[r]===E?1:0},h):h},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==h&&d(e),t=t.replace(W,"='$1']"),n.matchesSelector&&m&&!x[t+" "]&&(!g||!g.test(t))&&(!v||!v.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,h,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==h&&d(e),b(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==h&&d(e);var i=r.attrHandle[t.toLowerCase()],o=i&&A.call(r.attrHandle,t.toLowerCase())?i(e,t,!m):void 0;return void 0!==o?o:n.attributes||!m?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(S),f){for(;t=e[o++];)t===e[o]&&(i=r.push(o));for(;i--;)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:z,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return z.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=T[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&T(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(H," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,d,h,p,m=o!==a?"nextSibling":"previousSibling",v=t.parentNode,g=s&&t.nodeName.toLowerCase(),y=!u&&!s,b=!1;if(v){if(o){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===g:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?v.firstChild:v.lastChild],a&&y){for(b=(h=(l=(c=(f=(d=v)[w]||(d[w]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===_&&l[1])&&l[2],d=h&&v.childNodes[h];d=++h&&d&&d[m]||(b=h=0)||p.pop();)if(1===d.nodeType&&++b&&d===t){c[e]=[_,h,b];break}}else if(y&&(b=h=(l=(c=(f=(d=t)[w]||(d[w]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===_&&l[1]),!1===b)for(;(d=++h&&d&&d[m]||(b=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==g:1!==d.nodeType)||!++b||(y&&((c=(f=d[w]||(d[w]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]=[_,b]),d!==t)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[w]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){for(var r,o=i(e,t),a=o.length;a--;)e[r=P(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace($,"$1"));return r[w]?se(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return K.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:he(!1),disabled:he(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:pe(function(){return[0]}),last:pe(function(e,t){return[t-1]}),eq:pe(function(e,t,n){return[n<0?n+t:n]}),even:pe(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:pe(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s-1&&(o[l]=!(a[l]=f))}}else g=we(g===a?g.splice(p,g.length):g),i?i(null,a,g,u):D.apply(a,g)})}function _e(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=ye(function(e){return e===t},s,!0),f=ye(function(e){return P(t,e)>-1},s,!0),d=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&be(d),u>1&&ge(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace($,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,p,v,g=0,y="0",b=o&&[],w=[],E=l,C=o||i&&r.find.TAG("*",c),T=_+=null==E?1:Math.random()||.1,k=C.length;for(c&&(l=a===h||a||c);y!==k&&null!=(f=C[y]);y++){if(i&&f){for(p=0,a||f.ownerDocument===h||(d(f),s=!m);v=e[p++];)if(v(f,a||h,s)){u.push(f);break}c&&(_=T)}n&&((f=!v&&f)&&g--,o&&b.push(f))}if(g+=y,n&&y!==g){for(p=0;v=t[p++];)v(b,w,a,s);if(o){if(g>0)for(;y--;)b[y]||w[y]||(w[y]=j.call(u));w=we(w)}D.apply(u,w),c&&!o&&w.length>0&&g+t.length>1&&oe.uniqueSort(u)}return c&&(_=T,l=E),b};return n?se(o):o}(o,i))).selector=e}return s},u=oe.select=function(e,t,n,i){var o,u,l,c,f,d="function"==typeof e&&e,h=!i&&a(e=d.selector||e);if(n=n||[],1===h.length){if((u=h[0]=h[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&m&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;d&&(t=t.parentNode),e=e.slice(u.shift().value.length)}for(o=z.needsContext.test(e)?0:u.length;o--&&(l=u[o],!r.relative[c=l.type]);)if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),J.test(u[0].type)&&me(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ge(u)))return D.apply(n,i),n;break}}return(d||s(e,h))(i,t,!m,n,!t||J.test(e)&&me(t.parentNode)||t),n},n.sortStable=w.split("").sort(S).join("")===w,n.detectDuplicates=!!f,d(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(h.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(N,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(n);C.find=x,C.expr=x.selectors,C.expr[":"]=C.expr.pseudos,C.uniqueSort=C.unique=x.uniqueSort,C.text=x.getText,C.isXMLDoc=x.isXML,C.contains=x.contains,C.escapeSelector=x.escape;var S=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&C(e).is(n))break;r.push(e)}return r},A=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},O=C.expr.match.needsContext;function j(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var I=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,t,n){return y(t)?C.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?C.grep(e,function(e){return e===t!==n}):"string"!=typeof t?C.grep(e,function(e){return f.call(t,e)>-1!==n}):C.filter(t,e,n)}C.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?C.find.matchesSelector(r,e)?[r]:[]:C.find.matches(e,C.grep(t,function(e){return 1===e.nodeType}))},C.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(C(e).filter(function(){for(t=0;t1?C.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&O.test(e)?C(e):e||[],!1).length}});var L,P=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(C.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:P.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:a,!0)),I.test(r[1])&&C.isPlainObject(t))for(r in t)y(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=a.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(C):C.makeArray(e,this)}).prototype=C.fn,L=C(a);var N=/^(?:parents|prev(?:Until|All))/,M={children:!0,contents:!0,next:!0,prev:!0};function F(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.fn.extend({has:function(e){var t=C(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&C.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?C.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?f.call(C(e),this[0]):f.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(C.uniqueSort(C.merge(this.get(),C(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),C.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return S(e,"parentNode")},parentsUntil:function(e,t,n){return S(e,"parentNode",n)},next:function(e){return F(e,"nextSibling")},prev:function(e){return F(e,"previousSibling")},nextAll:function(e){return S(e,"nextSibling")},prevAll:function(e){return S(e,"previousSibling")},nextUntil:function(e,t,n){return S(e,"nextSibling",n)},prevUntil:function(e,t,n){return S(e,"previousSibling",n)},siblings:function(e){return A((e.parentNode||{}).firstChild,e)},children:function(e){return A(e.firstChild)},contents:function(e){return j(e,"iframe")?e.contentDocument:(j(e,"template")&&(e=e.content||e),C.merge([],e.childNodes))}},function(e,t){C.fn[e]=function(n,r){var i=C.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=C.filter(r,i)),this.length>1&&(M[e]||C.uniqueSort(i),N.test(e)&&i.reverse()),this.pushStack(i)}});var R=/[^\x20\t\r\n\f]+/g;function q(e){return e}function H(e){throw e}function $(e,t,n,r){var i;try{e&&y(i=e.promise)?i.call(e).done(t).fail(n):e&&y(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}C.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return C.each(e.match(R)||[],function(e,n){t[n]=!0}),t}(e):C.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1)for(n=a.shift();++s-1;)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?C.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},C.extend({Deferred:function(e){var t=[["notify","progress",C.Callbacks("memory"),C.Callbacks("memory"),2],["resolve","done",C.Callbacks("once memory"),C.Callbacks("once memory"),0,"resolved"],["reject","fail",C.Callbacks("once memory"),C.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return C.Deferred(function(n){C.each(t,function(t,r){var i=y(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&y(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(e,r,i){var o=0;function a(e,t,r,i){return function(){var s=this,u=arguments,l=function(){var n,l;if(!(e=o&&(r!==H&&(s=void 0,u=[n]),t.rejectWith(s,u))}};e?c():(C.Deferred.getStackHook&&(c.stackTrace=C.Deferred.getStackHook()),n.setTimeout(c))}}return C.Deferred(function(n){t[0][3].add(a(0,n,y(i)?i:q,n.notifyWith)),t[1][3].add(a(0,n,y(e)?e:q)),t[2][3].add(a(0,n,y(r)?r:H))}).promise()},promise:function(e){return null!=e?C.extend(e,i):i}},o={};return C.each(t,function(e,n){var a=n[2],s=n[5];i[n[1]]=a.add,s&&a.add(function(){r=s},t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),a.add(n[3].fire),o[n[0]]=function(){return o[n[0]+"With"](this===o?void 0:this,arguments),this},o[n[0]+"With"]=a.fireWith}),i.promise(o),e&&e.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=u.call(arguments),o=C.Deferred(),a=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?u.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&($(e,o.done(a(n)).resolve,o.reject,!t),"pending"===o.state()||y(i[n]&&i[n].then)))return o.then();for(;n--;)$(i[n],a(n),o.reject);return o.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;C.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&B.test(e.name)&&n.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},C.readyException=function(e){n.setTimeout(function(){throw e})};var U=C.Deferred();function W(){a.removeEventListener("DOMContentLoaded",W),n.removeEventListener("load",W),C.ready()}C.fn.ready=function(e){return U.then(e).catch(function(e){C.readyException(e)}),this},C.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--C.readyWait:C.isReady)||(C.isReady=!0,!0!==e&&--C.readyWait>0||U.resolveWith(a,[C]))}}),C.ready.then=U.then,"complete"===a.readyState||"loading"!==a.readyState&&!a.documentElement.doScroll?n.setTimeout(C.ready):(a.addEventListener("DOMContentLoaded",W),n.addEventListener("load",W));var V=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===_(n))for(s in i=!0,n)V(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,y(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(C(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){Z.remove(this,e)})}}),C.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,C.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=C.queue(e,t),r=n.length,i=n.shift(),o=C._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){C.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:C.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),C.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,pe=/^$|^module$|\/(?:java|ecma)script/i,me={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&j(e,t)?C.merge([e],n):n}function ge(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=C.contains(o.ownerDocument,o),a=ve(f.appendChild(o),"script"),l&&ge(a),n)for(c=0;o=a[c++];)pe.test(o.type||"")&&n.push(o);return f}ye=a.createDocumentFragment().appendChild(a.createElement("div")),(be=a.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),ye.appendChild(be),g.checkClone=ye.cloneNode(!0).cloneNode(!0).lastChild.checked,ye.innerHTML="",g.noCloneChecked=!!ye.cloneNode(!0).lastChild.defaultValue;var _e=a.documentElement,Ce=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ke=/^([^.]*)(?:\.(.+)|)/;function xe(){return!0}function Se(){return!1}function Ae(){try{return a.activeElement}catch(e){}}function Oe(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Oe(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return C().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=C.guid++)),e.each(function(){C.event.add(this,t,i,r,n)})}C.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,h,p,m,v=J.get(e);if(v)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&C.find.matchesSelector(_e,i),n.guid||(n.guid=C.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(t){return void 0!==C&&C.event.triggered!==t.type?C.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(R)||[""]).length;l--;)h=m=(s=ke.exec(t[l])||[])[1],p=(s[2]||"").split(".").sort(),h&&(f=C.event.special[h]||{},h=(i?f.delegateType:f.bindType)||h,f=C.event.special[h]||{},c=C.extend({type:h,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&C.expr.match.needsContext.test(i),namespace:p.join(".")},o),(d=u[h])||((d=u[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,p,a)||e.addEventListener&&e.addEventListener(h,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,c):d.push(c),C.event.global[h]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,h,p,m,v=J.hasData(e)&&J.get(e);if(v&&(u=v.events)){for(l=(t=(t||"").match(R)||[""]).length;l--;)if(h=m=(s=ke.exec(t[l])||[])[1],p=(s[2]||"").split(".").sort(),h){for(f=C.event.special[h]||{},d=u[h=(r?f.delegateType:f.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)c=d[o],!i&&m!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,v.handle)||C.removeEvent(e,h,v.handle),delete u[h])}else for(h in u)C.event.remove(e,h+t[l],n,r,!0);C.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=C.event.fix(e),u=new Array(arguments.length),l=(J.get(this,"events")||{})[s.type]||[],c=C.event.special[s.type]||{};for(u[0]=s,t=1;t=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:C.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ie=/\s*$/g;function Pe(e,t){return j(e,"table")&&j(11!==t.nodeType?t:t.firstChild,"tr")&&C(e).children("tbody")[0]||e}function Ne(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Me(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n1&&"string"==typeof p&&!g.checkClone&&De.test(p))return e.each(function(i){var o=e.eq(i);m&&(t[0]=p.call(this,i,o.html())),Re(o,t,n,r)});if(d&&(o=(i=Ee(t,e[0].ownerDocument,!1,e,r)).firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=(a=C.map(ve(i,"script"),Ne)).length;f")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=C.contains(e.ownerDocument,e);if(!(g.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||C.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r0&&ge(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=C.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?C.event.remove(n,r):C.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),C.fn.extend({detach:function(e){return qe(this,e,!0)},remove:function(e){return qe(this,e)},text:function(e){return V(this,function(e){return void 0===e?C.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Pe(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Pe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(C.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return C.clone(this,e,t)})},html:function(e){return V(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ie.test(e)&&!me[(he.exec(e)||["",""])[1].toLowerCase()]){e=C.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Ue(e,t,r),o="border-box"===C.css(e,"boxSizing",!1,r),a=o;if(He.test(i)){if(!n)return i;i="auto"}return a=a&&(g.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===C.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}C.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ue(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=Q(t),u=Ke.test(t),l=e.style;if(u||(t=Xe(s)),a=C.cssHooks[t]||C.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n==n&&("number"===o&&(n+=i&&i[3]||(C.cssNumber[s]?"":"px")),g.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=Q(t);return Ke.test(t)||(t=Xe(s)),(a=C.cssHooks[t]||C.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ue(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),C.each(["height","width"],function(e,t){C.cssHooks[t]={get:function(e,n,r){if(n)return!Ve.test(C.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,ze,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===C.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&g.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=C.css(e,t)),Je(0,n,s)}}}),C.cssHooks.marginLeft=We(g.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ue(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),C.each({margin:"",padding:"",border:"Width"},function(e,t){C.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(C.cssHooks[e+t].set=Je)}),C.fn.extend({css:function(e,t){return V(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}}),C.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||C.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(C.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=C.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=C.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){C.fx.step[e.prop]?C.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[C.cssProps[e.prop]]&&!C.cssHooks[e.prop]?e.elem[e.prop]=e.now:C.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},C.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},C.fx=tt.prototype.init,C.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===a.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(at):n.setTimeout(at,C.fx.interval),C.fx.tick())}function st(){return n.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(ct.tweeners[t]||[]).concat(ct.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){C.removeAttr(this,e)})}}),C.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?C.prop(e,t,n):(1===o&&C.isXMLDoc(e)||(i=C.attrHooks[t.toLowerCase()]||(C.expr.match.bool.test(t)?ft:void 0)),void 0!==n?null===n?void C.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=C.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!g.radioValue&&"radio"===t&&j(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),ft={set:function(e,t,n){return!1===t?C.removeAttr(e,n):e.setAttribute(n,n),n}},C.each(C.expr.match.bool.source.match(/\w+/g),function(e,t){var n=dt[t]||C.find.attr;dt[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=dt[a],dt[a]=i,i=null!=n(e,t,r)?a:null,dt[a]=o),i}});var ht=/^(?:input|select|textarea|button)$/i,pt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function gt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}C.fn.extend({prop:function(e,t){return V(this,C.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[C.propFix[e]||e]})}}),C.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&C.isXMLDoc(e)||(t=C.propFix[t]||t,i=C.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=C.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||pt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(C.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),C.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){C.propFix[this.toLowerCase()]=this}),C.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(y(e))return this.each(function(t){C(this).addClass(e.call(this,t,vt(this)))});if((t=gt(e)).length)for(;n=this[u++];)if(i=vt(n),r=1===n.nodeType&&" "+mt(i)+" "){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(y(e))return this.each(function(t){C(this).removeClass(e.call(this,t,vt(this)))});if(!arguments.length)return this.attr("class","");if((t=gt(e)).length)for(;n=this[u++];)if(i=vt(n),r=1===n.nodeType&&" "+mt(i)+" "){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):y(e)?this.each(function(n){C(this).toggleClass(e.call(this,n,vt(this),t),t)}):this.each(function(){var t,i,o,a;if(r)for(i=0,o=C(this),a=gt(e);t=a[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||((t=vt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+mt(vt(n))+" ").indexOf(t)>-1)return!0;return!1}});var yt=/\r/g;C.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=y(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,C(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=C.map(i,function(e){return null==e?"":e+""})),(t=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))})):i?(t=C.valHooks[i.type]||C.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(yt,""):null==n?"":n:void 0}}),C.extend({valHooks:{option:{get:function(e){var t=C.find.attr(e,"value");return null!=t?t:mt(C.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),C.each(["radio","checkbox"],function(){C.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=C.inArray(C(e).val(),t)>-1}},g.checkOn||(C.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),g.focusin="onfocusin"in n;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};C.extend(C.event,{trigger:function(e,t,r,i){var o,s,u,l,c,f,d,h,m=[r||a],v=p.call(e,"type")?e.type:e,g=p.call(e,"namespace")?e.namespace.split("."):[];if(s=h=u=r=r||a,3!==r.nodeType&&8!==r.nodeType&&!bt.test(v+C.event.triggered)&&(v.indexOf(".")>-1&&(v=(g=v.split(".")).shift(),g.sort()),c=v.indexOf(":")<0&&"on"+v,(e=e[C.expando]?e:new C.Event(v,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=g.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:C.makeArray(t,[e]),d=C.event.special[v]||{},i||!d.trigger||!1!==d.trigger.apply(r,t))){if(!i&&!d.noBubble&&!b(r)){for(l=d.delegateType||v,bt.test(l+v)||(s=s.parentNode);s;s=s.parentNode)m.push(s),u=s;u===(r.ownerDocument||a)&&m.push(u.defaultView||u.parentWindow||n)}for(o=0;(s=m[o++])&&!e.isPropagationStopped();)h=s,e.type=o>1?l:d.bindType||v,(f=(J.get(s,"events")||{})[e.type]&&J.get(s,"handle"))&&f.apply(s,t),(f=c&&s[c])&&f.apply&&Y(s)&&(e.result=f.apply(s,t),!1===e.result&&e.preventDefault());return e.type=v,i||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(m.pop(),t)||!Y(r)||c&&y(r[v])&&!b(r)&&((u=r[c])&&(r[c]=null),C.event.triggered=v,e.isPropagationStopped()&&h.addEventListener(v,wt),r[v](),e.isPropagationStopped()&&h.removeEventListener(v,wt),C.event.triggered=void 0,u&&(r[c]=u)),e.result}},simulate:function(e,t,n){var r=C.extend(new C.Event,n,{type:e,isSimulated:!0});C.event.trigger(r,null,t)}}),C.fn.extend({trigger:function(e,t){return this.each(function(){C.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return C.event.trigger(e,t,n,!0)}}),g.focusin||C.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){C.event.simulate(t,e.target,C.event.fix(e))};C.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Et=n.location,_t=Date.now(),Ct=/\?/;C.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||C.error("Invalid XML: "+e),t};var Tt=/\[\]$/,kt=/\r?\n/g,xt=/^(?:submit|button|image|reset|file)$/i,St=/^(?:input|select|textarea|keygen)/i;function At(e,t,n,r){var i;if(Array.isArray(t))C.each(t,function(t,i){n||Tt.test(e)?r(e,i):At(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==_(t))r(e,t);else for(i in t)At(e+"["+i+"]",t[i],n,r)}C.param=function(e,t){var n,r=[],i=function(e,t){var n=y(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!C.isPlainObject(e))C.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},C.fn.extend({serialize:function(){return C.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=C.prop(this,"elements");return e?C.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!C(this).is(":disabled")&&St.test(this.nodeName)&&!xt.test(e)&&(this.checked||!de.test(e))}).map(function(e,t){var n=C(this).val();return null==n?null:Array.isArray(n)?C.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Ot=/%20/g,jt=/#.*$/,It=/([?&])_=[^&]*/,Dt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Pt=/^\/\//,Nt={},Mt={},Ft="*/".concat("*"),Rt=a.createElement("a");function qt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(R)||[];if(y(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Ht(e,t,n,r){var i={},o=e===Mt;function a(s){var u;return i[s]=!0,C.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function $t(e,t){var n,r,i=C.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&C.extend(!0,e,r),e}Rt.href=Et.href,C.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ft,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":C.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,C.ajaxSettings),t):$t(C.ajaxSettings,e)},ajaxPrefilter:qt(Nt),ajaxTransport:qt(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,i,o,s,u,l,c,f,d,h,p=C.ajaxSetup({},t),m=p.context||p,v=p.context&&(m.nodeType||m.jquery)?C(m):C.event,g=C.Deferred(),y=C.Callbacks("once memory"),b=p.statusCode||{},w={},E={},_="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s)for(s={};t=Dt.exec(o);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?o:null},setRequestHeader:function(e,t){return null==c&&(e=E[e.toLowerCase()]=E[e.toLowerCase()]||e,w[e]=t),this},overrideMimeType:function(e){return null==c&&(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)T.always(e[T.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||_;return r&&r.abort(t),k(0,t),this}};if(g.promise(T),p.url=((e||p.url||Et.href)+"").replace(Pt,Et.protocol+"//"),p.type=t.method||t.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(R)||[""],null==p.crossDomain){l=a.createElement("a");try{l.href=p.url,l.href=l.href,p.crossDomain=Rt.protocol+"//"+Rt.host!=l.protocol+"//"+l.host}catch(e){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=C.param(p.data,p.traditional)),Ht(Nt,p,t,T),c)return T;for(d in(f=C.event&&p.global)&&0==C.active++&&C.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Lt.test(p.type),i=p.url.replace(jt,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(Ot,"+")):(h=p.url.slice(i.length),p.data&&(p.processData||"string"==typeof p.data)&&(i+=(Ct.test(i)?"&":"?")+p.data,delete p.data),!1===p.cache&&(i=i.replace(It,"$1"),h=(Ct.test(i)?"&":"?")+"_="+_t+++h),p.url=i+h),p.ifModified&&(C.lastModified[i]&&T.setRequestHeader("If-Modified-Since",C.lastModified[i]),C.etag[i]&&T.setRequestHeader("If-None-Match",C.etag[i])),(p.data&&p.hasContent&&!1!==p.contentType||t.contentType)&&T.setRequestHeader("Content-Type",p.contentType),T.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Ft+"; q=0.01":""):p.accepts["*"]),p.headers)T.setRequestHeader(d,p.headers[d]);if(p.beforeSend&&(!1===p.beforeSend.call(m,T,p)||c))return T.abort();if(_="abort",y.add(p.complete),T.done(p.success),T.fail(p.error),r=Ht(Mt,p,t,T)){if(T.readyState=1,f&&v.trigger("ajaxSend",[T,p]),c)return T;p.async&&p.timeout>0&&(u=n.setTimeout(function(){T.abort("timeout")},p.timeout));try{c=!1,r.send(w,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(e,t,a,s){var l,d,h,w,E,_=t;c||(c=!0,u&&n.clearTimeout(u),r=void 0,o=s||"",T.readyState=e>0?4:0,l=e>=200&&e<300||304===e,a&&(w=function(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(p,T,a)),w=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(p,w,T,l),l?(p.ifModified&&((E=T.getResponseHeader("Last-Modified"))&&(C.lastModified[i]=E),(E=T.getResponseHeader("etag"))&&(C.etag[i]=E)),204===e||"HEAD"===p.type?_="nocontent":304===e?_="notmodified":(_=w.state,d=w.data,l=!(h=w.error))):(h=_,!e&&_||(_="error",e<0&&(e=0))),T.status=e,T.statusText=(t||_)+"",l?g.resolveWith(m,[d,_,T]):g.rejectWith(m,[T,_,h]),T.statusCode(b),b=void 0,f&&v.trigger(l?"ajaxSuccess":"ajaxError",[T,p,l?d:h]),y.fireWith(m,[T,_]),f&&(v.trigger("ajaxComplete",[T,p]),--C.active||C.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return C.get(e,t,n,"json")},getScript:function(e,t){return C.get(e,void 0,t,"script")}}),C.each(["get","post"],function(e,t){C[t]=function(e,n,r,i){return y(n)&&(i=i||r,r=n,n=void 0),C.ajax(C.extend({url:e,type:t,dataType:i,data:n,success:r},C.isPlainObject(e)&&e))}}),C._evalUrl=function(e){return C.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},C.fn.extend({wrapAll:function(e){var t;return this[0]&&(y(e)&&(e=e.call(this[0])),t=C(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return y(e)?this.each(function(t){C(this).wrapInner(e.call(this,t))}):this.each(function(){var t=C(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=y(e);return this.each(function(n){C(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){C(this).replaceWith(this.childNodes)}),this}}),C.expr.pseudos.hidden=function(e){return!C.expr.pseudos.visible(e)},C.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},C.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},Ut=C.ajaxSettings.xhr();g.cors=!!Ut&&"withCredentials"in Ut,g.ajax=Ut=!!Ut,C.ajaxTransport(function(e){var t,r;if(g.cors||Ut&&!e.crossDomain)return{send:function(i,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];for(a in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)s.setRequestHeader(a,i[a]);t=function(e){return function(){t&&(t=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Bt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),r=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout(function(){t&&r()})},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),C.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),C.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return C.globalEval(e),e}}}),C.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),C.ajaxTransport("script",function(e){var t,n;if(e.crossDomain)return{send:function(r,i){t=C(" + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Public access

+

GitLab allows you to change your projects' visibility in order be accessed +publicly or internally.

+

Projects with either of these visibility levels will be listed in the +public access directory (/public under your GitLab instance). +Here is the GitLab.com example.

+

Internal projects will only be available to authenticated users.

+

+Visibility of projects

+

+Public projects

+

Public projects can be cloned without any authentication.

+

They will also be listed on the public access directory (/public).

+

Any logged in user will have Guest +permissions on the repository.

+

+Internal projects

+

Internal projects can be cloned by any logged in user.

+

They will also be listed on the public access directory (/public) for logged +in users.

+

Any logged in user will have Guest permissions +on the repository.

+

+How to change project visibility

+
    +
  1. Go to your project's Settings +
  2. +
  3. Change "Visibility Level" to either Public, Internal or Private
  4. +
+

+Visibility of groups

+
+

Note: +Starting with GitLab 8.6, the group visibility has changed and can be +configured the same way as projects. In previous versions, a group's page was +always visible to all users.

+
+

Like with projects, the visibility of a group can be set to dictate whether +anonymous users, all signed in users, or only explicit group members can view +it. The restriction for visibility levels on the application setting level also +applies to groups, so if that's set to internal, the explore page will be empty +for anonymous users. The group page now has a visibility level icon.

+

+Visibility of users

+

The public page of a user, located at /username, is always visible whether +you are logged in or not.

+

When visiting the public page of a user, you can only see the projects which +you are privileged to.

+

If the public level is restricted, user profiles are only visible to logged in users.

+

+Restricting the use of public or internal projects

+

In the Admin area under Settings (/admin/application_settings), you can +restrict the use of visibility levels for users when they create a project or a +snippet:

+

Restrict visibility levels

+

This is useful to prevent people exposing their repositories to public +by accident. The restricted visibility settings do not apply to admin users.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/cfb49e0ac968f6d0aa11a1aa950f1bfd b/docker/tanner/snare/dist/pages/1/cfb49e0ac968f6d0aa11a1aa950f1bfd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cfb49e0ac968f6d0aa11a1aa950f1bfd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/cffd2ae8b0cebde93a5fe06d851d8340 b/docker/tanner/snare/dist/pages/1/cffd2ae8b0cebde93a5fe06d851d8340 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/cffd2ae8b0cebde93a5fe06d851d8340 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d02afc636cf1cdb1ad0cf9e1df343432 b/docker/tanner/snare/dist/pages/1/d02afc636cf1cdb1ad0cf9e1df343432 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d02afc636cf1cdb1ad0cf9e1df343432 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d070dd0cf0ada5154fae236d1fd9bd8d b/docker/tanner/snare/dist/pages/1/d070dd0cf0ada5154fae236d1fd9bd8d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d070dd0cf0ada5154fae236d1fd9bd8d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d0d4d16bd25fa9075b4d1a16b00b3806 b/docker/tanner/snare/dist/pages/1/d0d4d16bd25fa9075b4d1a16b00b3806 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d0d4d16bd25fa9075b4d1a16b00b3806 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d0e99f0221a9539cc9cd113b553b3572 b/docker/tanner/snare/dist/pages/1/d0e99f0221a9539cc9cd113b553b3572 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d0e99f0221a9539cc9cd113b553b3572 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d1546d731a9f30cc80127d57142a482b b/docker/tanner/snare/dist/pages/1/d1546d731a9f30cc80127d57142a482b new file mode 100644 index 000000000..54b60a23f --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d1546d731a9f30cc80127d57142a482b @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/d16ab042f455187250bdc4acbb265aa1 b/docker/tanner/snare/dist/pages/1/d16ab042f455187250bdc4acbb265aa1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d16ab042f455187250bdc4acbb265aa1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d19fa492c38adb8c99b1c5e3f97e9000 b/docker/tanner/snare/dist/pages/1/d19fa492c38adb8c99b1c5e3f97e9000 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d19fa492c38adb8c99b1c5e3f97e9000 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d1b7793157ed80ca172aaa878cc18304 b/docker/tanner/snare/dist/pages/1/d1b7793157ed80ca172aaa878cc18304 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d1b7793157ed80ca172aaa878cc18304 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d1d18f83a31e11a4899ae3956ca78835 b/docker/tanner/snare/dist/pages/1/d1d18f83a31e11a4899ae3956ca78835 new file mode 100644 index 000000000..877746311 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d1d18f83a31e11a4899ae3956ca78835 @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + +Project services · Integrations · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Project services

+

Project services allow you to integrate GitLab with other applications. They +are a bit like plugins in that they allow a lot of freedom in adding +functionality to GitLab.

+

+Accessing the project services

+

You can find the available services under your project's +Settings ➔ Integrations page.

+

There are more than 20 services to integrate with. Click on the one that you +want to configure.

+

Project services list

+

Below, you will find a list of the currently supported ones accompanied with +comprehensive documentation.

+

+Services

+

Click on the service links to see further configuration instructions and details.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ServiceDescription
AsanaAsana - Teamwork without email
AssemblaProject Management Software (Source Commits Endpoint)
Atlassian Bamboo CIA continuous integration and build server
BuildkiteContinuous integration and deployments
BugzillaBugzilla issue tracker
CampfireSimple web-based real-time group chat
Custom Issue TrackerCustom issue tracker
Drone CIContinuous Integration platform built on Docker, written in Go
Emails on pushEmail the commits and diff of each push to a list of recipients
External WikiReplaces the link to the internal wiki with a link to an external wiki
FlowdockFlowdock is a collaboration web app for technical teams
Gemnasium (Has been deprecated in GitLab 11.0) +Gemnasium monitors your project dependencies and alerts you about updates and security vulnerabilities
HipChatPrivate group chat and IM
Irker (IRC gateway)Send IRC messages, on update, to a list of recipients through an Irker gateway
JIRAJIRA issue tracker
JetBrains TeamCity CIA continuous integration and build server
Mattermost slash commandsMattermost chat and ChatOps slash commands
Mattermost NotificationsReceive event notifications in Mattermost
Microsoft teamsReceive notifications for actions that happen on GitLab into a room on Microsoft Teams using Office 365 Connectors
PackagistUpdate your project on Packagist, the main Composer repository
Pipelines emailsEmail the pipeline status to a list of recipients
Slack NotificationsSend GitLab events (e.g. issue created) to Slack as notifications
Slack slash commandsUse slash commands in Slack to control GitLab
PivotalTrackerProject Management Software (Source Commits Endpoint)
PrometheusMonitor the performance of your deployed apps
PushoverPushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop
RedmineRedmine issue tracker
+

+Services templates

+

Services templates is a way to set some predefined values in the Service of +your liking which will then be pre-filled on each project's Service.

+

Read more about Services templates in this document.

+

+Contributing to project services

+

Because GitLab is open source we can ship with the code and tests for all +plugins. This allows the community to keep the plugins up to date so that they +always work in newer GitLab versions.

+

For an overview of what projects services are available, please see the +project_services source directory.

+

Contributions are welcome!

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/d2385f0b2d8685d7a5a1875bf0ceb066 b/docker/tanner/snare/dist/pages/1/d2385f0b2d8685d7a5a1875bf0ceb066 new file mode 100644 index 000000000..c82d5d347 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d2385f0b2d8685d7a5a1875bf0ceb066 @@ -0,0 +1,790 @@ + + + + + + + + + + + + + + + + + + +Environments · Ci · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Introduction to environments and deployments

+
+

Introduced in GitLab 8.9.

+
+

During the development of software, there can be many stages until it's ready +for public consumption. You sure want to first test your code and then deploy it +in a testing or staging environment before you release it to the public. That +way you can prevent bugs not only in your software, but in the deployment +process as well.

+

GitLab CI is capable of not only testing or building your projects, but also +deploying them in your infrastructure, with the added benefit of giving you a +way to track your deployments. In other words, you can always know what is +currently being deployed or has been deployed on your servers.

+

+Overview

+

With environments, you can control the Continuous Deployment of your software +all within GitLab. All you need to do is define them in your project's +.gitlab-ci.yml as we will explore below. GitLab provides a full +history of your deployments per every environment.

+

Environments are like tags for your CI jobs, describing where code gets deployed. +Deployments are created when jobs deploy versions of code to environments, +so every environment can have one or more deployments. GitLab keeps track of +your deployments, so you always know what is currently being deployed on your +servers. If you have a deployment service such as Kubernetes +enabled for your project, you can use it to assist with your deployments, and +can even access a web terminal for your environment from within GitLab!

+

To better understand how environments and deployments work, let's consider an +example. We assume that you have already created a project in GitLab and set up +a Runner. The example will cover the following:

+
    +
  • We are developing an application
  • +
  • We want to run tests and build our app on all branches
  • +
  • Our default branch is master +
  • +
  • We deploy the app only when a pipeline on master branch is run
  • +
+

Let's see how it all ties together.

+

+Defining environments

+

Let's consider the following .gitlab-ci.yml example:

+
stages:
+  - test
+  - build
+  - deploy
+
+test:
+  stage: test
+  script: echo "Running tests"
+
+build:
+  stage: build
+  script: echo "Building the app"
+
+deploy_staging:
+  stage: deploy
+  script:
+    - echo "Deploy to staging server"
+  environment:
+    name: staging
+    url: https://staging.example.com
+  only:
+  - master
+

We have defined 3 stages:

+
    +
  • test
  • +
  • build
  • +
  • deploy
  • +
+

The jobs assigned to these stages will run in this order. If a job fails, then +the jobs that are assigned to the next stage won't run, rendering the pipeline +as failed. In our case, the test job will run first, then the build and +lastly the deploy_staging. With this, we ensure that first the tests pass, +then our app is able to be built successfully, and lastly we deploy to the +staging server.

+

The environment keyword is just a hint for GitLab that this job actually +deploys to this environment's name. It can also have a url which, as we +will later see, is exposed in various places within GitLab. Each time a job that +has an environment specified and succeeds, a deployment is recorded, remembering +the Git SHA and environment name.

+
+

Note: +Starting with GitLab 8.15, the environment name is exposed to the Runner in +two forms: $CI_ENVIRONMENT_NAME, and $CI_ENVIRONMENT_SLUG. The first is +the name given in .gitlab-ci.yml (with any variables expanded), while the +second is a "cleaned-up" version of the name, suitable for use in URLs, DNS, +etc.

+
+
+

Note: +Starting with GitLab 9.3, the environment URL is exposed to the Runner via +$CI_ENVIRONMENT_URL. The URL would be expanded from .gitlab-ci.yml, or if +the URL was not defined there, the external URL from the environment would be +used.

+
+

To sum up, with the above .gitlab-ci.yml we have achieved that:

+
    +
  • All branches will run the test and build jobs.
  • +
  • The deploy_staging job will run only on the master +branch which means all merge requests that are created from branches don't +get to deploy to the staging server
  • +
  • When a merge request is merged, all jobs will run and the deploy_staging +in particular will deploy our code to a staging server while the deployment +will be recorded in an environment named staging.
  • +
+

Let's now see how that information is exposed within GitLab.

+

+Viewing the current status of an environment

+

The environment list under your project's Operations > Environments, is +where you can find information of the last deployment status of an environment.

+

Here's how the Environments page looks so far.

+

Environment view

+

There's a bunch of information there, specifically you can see:

+
    +
  • The environment's name with a link to its deployments
  • +
  • The last deployment ID number and who performed it
  • +
  • The job ID of the last deployment with its respective job name
  • +
  • The commit information of the last deployment such as who committed, to what +branch and the Git SHA of the commit
  • +
  • The exact time the last deployment was performed
  • +
  • A button that takes you to the URL that you have defined under the +environment keyword in .gitlab-ci.yml +
  • +
  • A button that re-deploys the latest deployment, meaning it runs the job +defined by the environment name for that specific commit
  • +
+
+

Notes:

+
+
    +
  • While you can create environments manually in the web interface, we recommend +that you define your environments in .gitlab-ci.yml first. They will +be automatically created for you after the first deploy.
  • +
  • The environments page can only be viewed by Reporters and above. For more +information on the permissions, see the permissions documentation.
  • +
  • Only deploys that happen after your .gitlab-ci.yml is properly configured +will show up in the "Environment" and "Last deployment" lists.
  • +
+

The information shown in the Environments page is limited to the latest +deployments, but as you may have guessed an environment can have multiple +deployments.

+

+Viewing the deployment history of an environment

+

GitLab keeps track of your deployments, so you always know what is currently +being deployed on your servers. That way you can have the full history of your +deployments per every environment right in your browser. Clicking on an +environment will show the history of its deployments. Assuming you have deployed +multiple times already, here's how a specific environment's page looks like.

+

Deployments

+

We can see the same information as when in the Environments page, but this time +all deployments are shown. As you may have noticed, apart from the Re-deploy +button there are now Rollback buttons for each deployment. Let's see how +that works.

+

+Rolling back changes

+

You can't control everything, so sometimes things go wrong. When that unfortunate +time comes GitLab has you covered. Simply by clicking the Rollback button +that can be found in the deployments page +(Operations > Environments > environment name) you can relaunch the +job with the commit associated with it.

+
+

Note: +Bear in mind that your mileage will vary and it's entirely up to how you define +the deployment process in the job's script whether the rollback succeeds or not. +GitLab CI is just following orders.

+
+

Thankfully that was the staging server that we had to rollback, and since we +learn from our mistakes, we decided to not make the same again when we deploy +to the production server. Enter manual actions for deployments.

+

+Manually deploying to environments

+

Turning a job from running automatically to a manual action is as simple as +adding when: manual to it. To expand on our previous example, let's add +another job that this time deploys our app to a production server and is +tracked by a production environment. The .gitlab-ci.yml looks like this +so far:

+
stages:
+  - test
+  - build
+  - deploy
+
+test:
+  stage: test
+  script: echo "Running tests"
+
+build:
+  stage: build
+  script: echo "Building the app"
+
+deploy_staging:
+  stage: deploy
+  script:
+    - echo "Deploy to staging server"
+  environment:
+    name: staging
+    url: https://staging.example.com
+  only:
+  - master
+
+deploy_prod:
+  stage: deploy
+  script:
+    - echo "Deploy to production server"
+  environment:
+    name: production
+    url: https://example.com
+  when: manual
+  only:
+  - master
+

The when: manual action exposes a play button in GitLab's UI and the +deploy_prod job will only be triggered if and when we click that play button. +You can find it in the pipeline, job, environment, and deployment views.

+ + + + + + + + + + + + + + + + + + + +
PipelinesSingle pipelineEnvironmentsDeploymentsjobs
Pipelines manual actionPipelines manual actionEnvironments manual actionDeployments manual actionBuilds manual action
+

Clicking on the play button in either of these places will trigger the +deploy_prod job, and the deployment will be recorded under a new +environment named production.

+
+

Note: +Remember that if your environment's name is production (all lowercase), then +it will get recorded in Cycle Analytics. +Double the benefit!

+
+

+Dynamic environments

+

As the name suggests, it is possible to create environments on the fly by just +declaring their names dynamically in .gitlab-ci.yml. Dynamic environments is +the basis of Review apps.

+

NOTE: Note: +The name and url parameters can use most of the CI/CD variables, +including predefined, +project/group ones and +.gitlab-ci.yml variables. You however cannot use variables +defined under script or on the Runner's side. There are also other variables that +are unsupported in the context of environment:name. You can read more about +where variables can be used.

+

GitLab Runner exposes various environment variables when a job runs, +and as such, you can use them as environment names. Let's add another job in +our example which will deploy to all branches except master:

+
deploy_review:
+  stage: deploy
+  script:
+    - echo "Deploy a review app"
+  environment:
+    name: review/$CI_COMMIT_REF_NAME
+    url: https://$CI_ENVIRONMENT_SLUG.example.com
+  only:
+    - branches
+  except:
+    - master
+

Let's break it down in pieces. The job's name is deploy_review and it runs +on the deploy stage. The script at this point is fictional, you'd have to +use your own based on your deployment. Then, we set the environment with the +environment:name being review/$CI_COMMIT_REF_NAME. Now that's an interesting +one. Since the environment name can contain slashes (/), we can +use this pattern to distinguish between dynamic environments and the regular +ones.

+

So, the first part is review, followed by a / and then $CI_COMMIT_REF_NAME +which takes the value of the branch name. Since $CI_COMMIT_REF_NAME itself may +also contain /, or other characters that would be invalid in a domain name or +URL, we use $CI_ENVIRONMENT_SLUG in the environment:url so that the +environment can get a specific and distinct URL for each branch. In this case, +given a $CI_COMMIT_REF_NAME of 100-Do-The-Thing, the URL will be something +like https://100-do-the-4f99a2.example.com. Again, the way you set up +the web server to serve these requests is based on your setup.

+

You could also use $CI_COMMIT_REF_SLUG in environment:url, e.g.: +https://$CI_COMMIT_REF_SLUG.example.com. We use $CI_ENVIRONMENT_SLUG +here because it is guaranteed to be unique, but if you're using a workflow like +GitLab Flow, collisions are very unlikely, and you may prefer +environment names to be more closely based on the branch name - the example +above would give you an URL like https://100-do-the-thing.example.com

+

Last but not least, we tell the job to run only on branches +except master.

+
+

Note: +You are not bound to use the same prefix or only slashes in the dynamic +environments' names (/), but as we will see later, this will enable the +grouping similar environments feature.

+
+

The whole .gitlab-ci.yml looks like this so far:

+
stages:
+  - test
+  - build
+  - deploy
+
+test:
+  stage: test
+  script: echo "Running tests"
+
+build:
+  stage: build
+  script: echo "Building the app"
+
+deploy_review:
+  stage: deploy
+  script:
+    - echo "Deploy a review app"
+  environment:
+    name: review/$CI_COMMIT_REF_NAME
+    url: https://$CI_ENVIRONMENT_SLUG.example.com
+  only:
+    - branches
+  except:
+    - master
+
+deploy_staging:
+  stage: deploy
+  script:
+    - echo "Deploy to staging server"
+  environment:
+    name: staging
+    url: https://staging.example.com
+  only:
+  - master
+
+deploy_prod:
+  stage: deploy
+  script:
+    - echo "Deploy to production server"
+  environment:
+    name: production
+    url: https://example.com
+  when: manual
+  only:
+  - master
+

A more realistic example would include copying files to a location where a +webserver (NGINX) could then read and serve. The example below will copy the +public directory to /srv/nginx/$CI_COMMIT_REF_SLUG/public:

+
review_app:
+  stage: deploy
+  script:
+    - rsync -av --delete public /srv/nginx/$CI_COMMIT_REF_SLUG
+  environment:
+    name: review/$CI_COMMIT_REF_NAME
+    url: https://$CI_COMMIT_REF_SLUG.example.com
+

It is assumed that the user has already setup NGINX and GitLab Runner in the +server this job will run on.

+
+

Note: +Be sure to check out the limitations section for some edge +cases regarding naming of your branches and Review Apps.

+
+
+

The development workflow would now be:

+
    +
  • Developer creates a branch locally
  • +
  • Developer makes changes, commits and pushes the branch to GitLab
  • +
  • Developer creates a merge request
  • +
+

Behind the scenes:

+
    +
  • GitLab Runner picks up the changes and starts running the jobs
  • +
  • The jobs run sequentially as defined in stages +
      +
    • First, the tests pass
    • +
    • Then, the job begins and successfully also passes
    • +
    • Lastly, the app is deployed to an environment with a name specific to the +branch
    • +
    +
  • +
+

So now, every branch gets its own environment and is deployed to its own place +with the added benefit of having a history of deployments +and also being able to rollback changes if needed. +Let's briefly see where URL that's defined in the environments is exposed.

+

+Making use of the environment URL

+

The environment URL is exposed in a few +places within GitLab.

+ + + + + + + + + + + + + + + +
In a merge request widget as a linkIn the Environments view as a buttonIn the Deployments view as a button
Environment URL in merge requestEnvironment URL in environmentsEnvironment URL in deployments
+

If a merge request is eventually merged to the default branch (in our case +master) and that branch also deploys to an environment (in our case staging +and/or production) you can see this information in the merge request itself.

+

Environment URLs in merge request

+

+Go directly from source files to public pages on the environment

+
+

Introduced in GitLab 8.17.

+
+

To go one step further, we can specify a Route Map to get GitLab to show us "View on [environment URL]" buttons to go directly from a file to that file's representation on the deployed website. It will be exposed in a few places:

+ + + + + + + + + + + + + +
In the diff for a merge request, comparison or commitIn the file view
"View on env" button in merge request diff"View on env" button in file view
+

To get this to work, you need to tell GitLab how the paths of files in your repository map to paths of pages on your website, using a Route Map.

+

A Route Map is a file inside the repository at .gitlab/route-map.yml, which contains a YAML array that maps source paths (in the repository) to public paths (on the website).

+

This is an example of a route map for Middleman static websites like http://about.gitlab.com:

+
# Team data
+- source: 'data/team.yml' # data/team.yml
+  public: 'team/' # team/
+
+# Blogposts
+- source: /source\/posts\/([0-9]{4})-([0-9]{2})-([0-9]{2})-(.+?)\..*/ # source/posts/2017-01-30-around-the-world-in-6-releases.html.md.erb
+  public: '\1/\2/\3/\4/' # 2017/01/30/around-the-world-in-6-releases/
+
+# HTML files
+- source: /source\/(.+?\.html).*/ # source/index.html.haml
+  public: '\1' # index.html
+
+# Other files
+- source: /source\/(.*)/ # source/images/blogimages/around-the-world-in-6-releases-cover.png
+  public: '\1' # images/blogimages/around-the-world-in-6-releases-cover.png
+

Mappings are defined as entries in the root YAML array, and are identified by a - prefix. Within an entry, we have a hash map with two keys:

+
    +
  • +source +
      +
    • a string, starting and ending with ', for an exact match
    • +
    • a regular expression, starting and ending with /, for a pattern match +
        +
      • The regular expression needs to match the entire source path - ^ and $ anchors are implied.
      • +
      • Can include capture groups denoted by () that can be referred to in the public path.
      • +
      • Slashes (/) can, but don't have to, be escaped as \/.
      • +
      • Literal periods (.) should be escaped as \..
      • +
      +
    • +
    +
  • +
  • +public +
      +
    • a string, starting and ending with '. +
        +
      • Can include \N expressions to refer to capture groups in the source regular expression in order of their occurrence, starting with \1.
      • +
      +
    • +
    +
  • +
+

The public path for a source path is determined by finding the first source expression that matches it, and returning the corresponding public path, replacing the \N expressions with the values of the () capture groups if appropriate.

+

In the example above, the fact that mappings are evaluated in order of their definition is used to ensure that source/index.html.haml will match /source\/(.+?\.html).*/ instead of /source\/(.*)/, and will result in a public path of index.html, instead of index.html.haml.

+
+

We now have a full development cycle, where our app is tested, built, deployed +as a Review app, deployed to a staging server once the merge request is merged, +and finally manually deployed to the production server. What we just described +is a single workflow, but imagine tens of developers working on a project +at the same time. They each push to their branches, and dynamic environments are +created all the time. In that case, we probably need to do some clean up. Read +next how environments can be stopped.

+

+Stopping an environment

+

By stopping an environment, you are effectively terminating its recording of the +deployments that happen in it.

+

A branch is associated with an environment when the CI pipeline that is created +for this branch, was recently deployed to this environment. You can think of +the CI pipeline as the glue between the branch and the environment: +branch ➔ CI pipeline ➔ environment.

+

There is a special case where environments can be manually stopped. That can +happen if you provide another job for that matter. The syntax is a little +tricky since a job calls another job to do the job.

+

Consider the following example where the deploy_review calls the stop_review +to clean up and stop the environment:

+
deploy_review:
+  stage: deploy
+  script:
+    - echo "Deploy a review app"
+  environment:
+    name: review/$CI_COMMIT_REF_NAME
+    url: https://$CI_ENVIRONMENT_SLUG.example.com
+    on_stop: stop_review
+  only:
+    - branches
+  except:
+    - master
+
+stop_review:
+  stage: deploy
+  variables:
+    GIT_STRATEGY: none
+  script:
+    - echo "Remove review app"
+  when: manual
+  environment:
+    name: review/$CI_COMMIT_REF_NAME
+    action: stop
+

Setting the GIT_STRATEGY to none is necessary on the +stop_review job so that the GitLab Runner won't try to checkout the code +after the branch is deleted.

+
+

Note: +Starting with GitLab 8.14, dynamic environments will be stopped automatically +when their associated branch is deleted.

+
+

When you have an environment that has a stop action defined (typically when +the environment describes a review app), GitLab will automatically trigger a +stop action when the associated branch is deleted. The stop_review job must +be in the same stage as the deploy_review one in order for the environment +to automatically stop.

+

You can read more in the .gitlab-ci.yml reference.

+

+Grouping similar environments

+
+

Introduced in GitLab 8.14.

+
+

As we've seen in the dynamic environments, you can +prepend their name with a word, then followed by a / and finally the branch +name which is automatically defined by the CI_COMMIT_REF_NAME variable.

+

In short, environments that are named like type/foo are presented under a +group named type.

+

In our minimal example, we name the environments review/$CI_COMMIT_REF_NAME +where $CI_COMMIT_REF_NAME is the branch name:

+
deploy_review:
+  stage: deploy
+  script:
+    - echo "Deploy a review app"
+  environment:
+    name: review/$CI_COMMIT_REF_NAME
+

In that case, if you visit the Environments page, and provided the branches +exist, you should see something like:

+

Environment groups

+

+Monitoring environments

+
+

Notes:

+
+
    +
  • For the monitoring dashboard to appear, you need to: + +
  • +
  • With GitLab 9.2, all deployments to an environment are shown directly on the +monitoring dashboard
  • +
+

If you have enabled Prometheus for monitoring system and response metrics, you can monitor the performance behavior of your app running in each environment.

+

Once configured, GitLab will attempt to retrieve supported performance metrics for any +environment which has had a successful deployment. If monitoring data was +successfully retrieved, a Monitoring button will appear for each environment.

+

Environment Detail with Metrics

+

Clicking on the Monitoring button will display a new page, showing up to the last +8 hours of performance data. It may take a minute or two for data to appear +after initial deployment.

+

All deployments to an environment are shown directly on the monitoring dashboard +which allows easy correlation between any changes in performance and a new +version of the app, all without leaving GitLab.

+

Monitoring dashboard

+

+Web terminals

+
+

Note: +Web terminals were added in GitLab 8.15 and are only available to project +maintainers and owners.

+
+

If you deploy to your environments with the help of a deployment service (e.g., +the Kubernetes integration), GitLab can open +a terminal session to your environment! This is a very powerful feature that +allows you to debug issues without leaving the comfort of your web browser. To +enable it, just follow the instructions given in the service integration +documentation.

+

Once enabled, your environments will gain a "terminal" button:

+

Terminal button on environment index

+

You can also access the terminal button from the page for a specific environment:

+

Terminal button for an environment

+

Wherever you find it, clicking the button will take you to a separate page to +establish the terminal session:

+

Terminal page

+

This works just like any other terminal - you'll be in the container created +by your deployment, so you can run shell commands and get responses in real +time, check the logs, try out configuration or code tweaks, etc. You can open +multiple terminals to the same environment - they each get their own shell +session - and even a multiplexer like screen or tmux!

+
+

Note: +Container-based deployments often lack basic tools (like an editor), and may +be stopped or restarted at any time. If this happens, you will lose all your +changes! Treat this as a debugging tool, not a comprehensive online IDE.

+
+
+

While this is fine for deploying to some stable environments like staging or +production, what happens for branches? So far we haven't defined anything +regarding deployments for branches other than master. Dynamic environments +will help us achieve that.

+

+Checkout deployments locally

+

Since 8.13, a reference in the git repository is saved for each deployment, so +knowing the state of your current environments is only a git fetch away.

+

In your git config, append the [remote "<your-remote>"] block with an extra +fetch line:

+
fetch = +refs/environments/*:refs/remotes/origin/environments/*
+

+Limitations

+
    +
  1. You are limited to use only the CI predefined variables in the +environment: name. If you try to re-use variables defined inside script +as part of the environment name, it will not work.
  2. +
+

+Further reading

+

Below are some links you may find interesting:

+ +
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/d250769c9957a9a448e609ed291af2d5 b/docker/tanner/snare/dist/pages/1/d250769c9957a9a448e609ed291af2d5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d250769c9957a9a448e609ed291af2d5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d298cdd9bf3ca98ae4cabe427bdb9bd8 b/docker/tanner/snare/dist/pages/1/d298cdd9bf3ca98ae4cabe427bdb9bd8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d298cdd9bf3ca98ae4cabe427bdb9bd8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d30ece8a1156b6675af16eb9e46db64d b/docker/tanner/snare/dist/pages/1/d30ece8a1156b6675af16eb9e46db64d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d30ece8a1156b6675af16eb9e46db64d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d36909b17a0c445213749b77d95f7931 b/docker/tanner/snare/dist/pages/1/d36909b17a0c445213749b77d95f7931 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d36909b17a0c445213749b77d95f7931 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d36ee017a80aa4b03bf613e6d9f6c902 b/docker/tanner/snare/dist/pages/1/d36ee017a80aa4b03bf613e6d9f6c902 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d36ee017a80aa4b03bf613e6d9f6c902 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d36ee5bac8c0e820610320538a294b9f b/docker/tanner/snare/dist/pages/1/d36ee5bac8c0e820610320538a294b9f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d36ee5bac8c0e820610320538a294b9f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d39ba6aa8958cf3a96570e9f61f5a85a b/docker/tanner/snare/dist/pages/1/d39ba6aa8958cf3a96570e9f61f5a85a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d39ba6aa8958cf3a96570e9f61f5a85a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d40bf60f1248c495a35c5a1e85f60628 b/docker/tanner/snare/dist/pages/1/d40bf60f1248c495a35c5a1e85f60628 new file mode 100644 index 000000000..83fa6d4e5 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d40bf60f1248c495a35c5a1e85f60628 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/d467a09c005644e8a6e927fce8d4d026 b/docker/tanner/snare/dist/pages/1/d467a09c005644e8a6e927fce8d4d026 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d467a09c005644e8a6e927fce8d4d026 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d4a5a131f814e0c21071e95d715fff84 b/docker/tanner/snare/dist/pages/1/d4a5a131f814e0c21071e95d715fff84 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d4a5a131f814e0c21071e95d715fff84 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d4a754a1247635a82a18f060d887d8e3 b/docker/tanner/snare/dist/pages/1/d4a754a1247635a82a18f060d887d8e3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d4a754a1247635a82a18f060d887d8e3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d4bd896cb52e4a0468b549cf8efad6ec b/docker/tanner/snare/dist/pages/1/d4bd896cb52e4a0468b549cf8efad6ec new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d4bd896cb52e4a0468b549cf8efad6ec @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d53bbc5b7f4cf23d7bcefee7910ce9c5 b/docker/tanner/snare/dist/pages/1/d53bbc5b7f4cf23d7bcefee7910ce9c5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d53bbc5b7f4cf23d7bcefee7910ce9c5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d5c212e2e710b16b21dd5d33cee2bd89 b/docker/tanner/snare/dist/pages/1/d5c212e2e710b16b21dd5d33cee2bd89 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d5c212e2e710b16b21dd5d33cee2bd89 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d5f805739b39245c65eeef12858b32d9 b/docker/tanner/snare/dist/pages/1/d5f805739b39245c65eeef12858b32d9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d5f805739b39245c65eeef12858b32d9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d6839c096b7df09823d85c5f423ab10d b/docker/tanner/snare/dist/pages/1/d6839c096b7df09823d85c5f423ab10d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d6839c096b7df09823d85c5f423ab10d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d69af2676416edb16b35a3d04d2fb4a0 b/docker/tanner/snare/dist/pages/1/d69af2676416edb16b35a3d04d2fb4a0 new file mode 100644 index 000000000..f885c2ae5 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d69af2676416edb16b35a3d04d2fb4a0 @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + +Snippets · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Snippets

+

With GitLab Snippets you can store and share bits of code and text with other users.

+

GitLab Snippet

+

There are 2 types of snippets, personal snippets and project snippets.

+

+Personal snippets

+

Personal snippets are not related to any project and can be created completely +independently. There are 3 visibility levels that can be set, public, internal +and private. See Public access for more information.

+

+Project snippets

+

Project snippets are always related to a specific project. +See Project's features for more information.

+

+Discover snippets

+

There are two main ways of how you can discover snippets in GitLab.

+

For exploring all snippets that are visible to you, you can go to the Snippets +dashboard of your GitLab instance via the top navigation. For GitLab.com you can +find it here. This navigates you to an +overview that shows snippets you created and allows you to explore all snippets.

+

If you want to discover snippets that belong to a specific project, you can navigate +to the Snippets page via the left side navigation on the project page.

+

+Snippet comments

+
+

Introduced in GitLab 9.2.

+
+

With GitLab Snippets you engage in a conversation about that piece of code, +facilitating the collaboration among users.

+

+Downloading snippets

+

You can download the raw content of a snippet.

+

By default snippets will be downloaded with Linux-style line endings (LF). If +you want to preserve the original line endings you need to add a parameter line_ending=raw +(e.g., https://gitlab.com/snippets/SNIPPET_ID/raw?line_ending=raw). In case a +snippet was created using the GitLab web interface the original line ending is Windows-like (CRLF).

+

+Embedded snippets

+
+

Introduced in GitLab 10.8.

+
+

Public snippets can not only be shared, but also embedded on any website. This +allows to reuse a GitLab snippet in multiple places and any change to the source +is automatically reflected in the embedded snippet.

+

To embed a snippet, first make sure that:

+
    +
  • The project is public (if it's a project snippet)
  • +
  • The snippet is public
  • +
  • In Project > Settings > Permissions, the snippets permissions are +set to Everyone with access +
  • +
+

Once the above conditions are met, the "Embed" section will appear in your snippet +where you can simply click on the "Copy to clipboard" button. This copies a one-line +script that you can add to any website or blog post.

+

Here's how an example code looks like:

+
<script src="https://gitlab.com/namespace/project/snippets/SNIPPET_ID.js"></script>
+

Here's how an embedded snippet looks like:

+

Embedded snippets are displayed with a header that shows the file name if defined, +the snippet size, a link to GitLab, and the actual snippet content. Actions in +the header allow users to see the snippet in raw format and download it.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/d73c8abfcfd2b2ce7b9a6960a19e3336 b/docker/tanner/snare/dist/pages/1/d73c8abfcfd2b2ce7b9a6960a19e3336 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d73c8abfcfd2b2ce7b9a6960a19e3336 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d7b0aee642cf80b299095cc04daac0eb b/docker/tanner/snare/dist/pages/1/d7b0aee642cf80b299095cc04daac0eb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d7b0aee642cf80b299095cc04daac0eb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d7b4404c4db7555e35e0a2d79af5d5d3 b/docker/tanner/snare/dist/pages/1/d7b4404c4db7555e35e0a2d79af5d5d3 new file mode 100644 index 000000000..66c8eeca1 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d7b4404c4db7555e35e0a2d79af5d5d3 @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + +Health check · Monitoring · Admin area · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Health Check

+
+

Notes:

+
+ +

GitLab provides liveness and readiness probes to indicate service health and +reachability to required services. These probes report on the status of the +database connection, Redis connection, and access to the filesystem. These +endpoints can be provided to schedulers like Kubernetes to hold +traffic until the system is ready or restart the container as needed.

+

+IP whitelist

+

To access monitoring resources, the client IP needs to be included in a whitelist.

+

Read how to add IPs to a whitelist for the monitoring endpoints.

+

+Using the endpoint

+

With default whitelist settings, the probes can be accessed from localhost:

+
    +
  • http://localhost/-/readiness
  • +
  • http://localhost/-/liveness
  • +
+

which will then provide a report of system health in JSON format.

+

Readiness example output:

+
{
+   "queues_check" : {
+      "status" : "ok"
+   },
+   "redis_check" : {
+      "status" : "ok"
+   },
+   "shared_state_check" : {
+      "status" : "ok"
+   },
+   "db_check" : {
+      "status" : "ok"
+   },
+   "cache_check" : {
+      "status" : "ok"
+   }
+}
+

Liveness example output:

+
{
+   "cache_check" : {
+      "status" : "ok"
+   },
+   "db_check" : {
+      "status" : "ok"
+   },
+   "redis_check" : {
+      "status" : "ok"
+   },
+   "queues_check" : {
+      "status" : "ok"
+   },
+   "shared_state_check" : {
+      "status" : "ok"
+   }
+}
+

+Status

+

On failure, the endpoint will return a 500 HTTP status code. On success, the endpoint +will return a valid successful HTTP status code, and a success message.

+

+Access token (Deprecated)

+
+

Note: +Access token has been deprecated in GitLab 9.4 +in favor of IP whitelist

+
+

An access token needs to be provided while accessing the probe endpoints. The current +accepted token can be found under the Admin area ➔ Monitoring ➔ Health check +(admin/health_check) page of your GitLab instance.

+

access token

+

The access token can be passed as a URL parameter:

+
https://gitlab.example.com/-/readiness?token=ACCESS_TOKEN
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/d7c7752f6b8638163f49adc96e13aa78 b/docker/tanner/snare/dist/pages/1/d7c7752f6b8638163f49adc96e13aa78 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d7c7752f6b8638163f49adc96e13aa78 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d7fd456ddfab95455c6fc071d84fd06e b/docker/tanner/snare/dist/pages/1/d7fd456ddfab95455c6fc071d84fd06e new file mode 100644 index 000000000..73c15da22 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d7fd456ddfab95455c6fc071d84fd06e @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + +Index · Merge requests · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Merge requests

+

Merge requests allow you to exchange changes you made to source code and +collaborate with other people on the same project.

+

Merge request view

+

+Overview

+

A Merge Request (MR) is the basis of GitLab as a code collaboration +and version control platform. +Is it simple as the name implies: a request to merge one branch into another.

+

With GitLab merge requests, you can:

+ +

With GitLab Enterprise Edition, you can also:

+ +

+Use cases

+

A. Consider you are a software developer working in a team:

+
    +
  1. You checkout a new branch, and submit your changes through a merge request
  2. +
  3. You gather feedback from your team
  4. +
  5. You work on the implementation optimizing code with Code Quality reports [STARTER] +
  6. +
  7. You build and test your changes with GitLab CI/CD
  8. +
  9. You request the approval from your manager
  10. +
  11. Your manager pushes a commit with his final review, approves the merge request, and set it to merge when pipeline succeeds (Merge Request Approvals are available in GitLab Starter)
  12. +
  13. Your changes get deployed to production with manual actions for GitLab CI/CD
  14. +
  15. Your implementations were successfully shipped to your customer
  16. +
+

B. Consider you're a web developer writing a webpage for your company's:

+
    +
  1. You checkout a new branch, and submit a new page through a merge request
  2. +
  3. You gather feedback from your reviewers
  4. +
  5. Your changes are previewed with Review Apps +
  6. +
  7. You request your web designers for their implementation
  8. +
  9. You request the approval from your manager [STARTER] +
  10. +
  11. Once approved, your merge request is squashed and merged, and deployed to staging with GitLab Pages +
  12. +
  13. Your production team cherry picks the merge commit into production
  14. +
+

+Merge requests per project

+

View all the merge requests within a project by navigating to Project > Merge Requests.

+

When you access your project's merge requests, GitLab will present them in a list, +and you can use the tabs available to quickly filter by open and closed. You can also search and filter the results.

+

Project merge requests list view

+

+Merge requests per group

+

View merge requests in all projects in the group, including all projects of all descendant subgroups of the group. Navigate to Group > Merge Requests to view these merge requests. This view also has the open and closed merge requests tabs.

+

You can search and filter the results from here.

+

Group Issues list view

+

+Removing the source branch

+

When creating a merge request, select the "Remove source branch when merge +request accepted" option and the source branch will be removed when the merge +request is merged.

+

This option is also visible in an existing merge request next to the merge +request button and can be selected/deselected before merging. It's only visible +to users with Maintainer permissions in the source project.

+

If the user viewing the merge request does not have the correct permissions to +remove the source branch and the source branch is set for removal, the merge +request widget will show the "Removes source branch" text.

+

Remove source branch status

+

+Authorization for merge requests

+

There are two main ways to have a merge request flow with GitLab:

+
    +
  1. Working with protected branches in a single repository
  2. +
  3. Working with forks of an authoritative project
  4. +
+

Learn more about the authorization for merge requests.

+

+Cherry-pick changes

+

Cherry-pick any commit in the UI by simply clicking the Cherry-pick button +in a merged merge requests or a commit.

+

Learn more about cherry-picking changes.

+

+Semi-linear history merge requests

+

A merge commit is created for every merge, but the branch is only merged if +a fast-forward merge is possible. This ensures that if the merge request build +succeeded, the target branch build will also succeed after merging.

+

Navigate to a project's settings, select the Merge commit with semi-linear +history option under Merge Requests: Merge method and save your changes.

+

+Fast-forward merge requests

+

If you prefer a linear Git history and a way to accept merge requests without +creating merge commits, you can configure this on a per-project basis.

+

Read more about fast-forward merge requests.

+

+Merge when pipeline succeeds

+

When reviewing a merge request that looks ready to merge but still has one or +more CI jobs running, you can set it to be merged automatically when CI +pipeline succeeds. This way, you don't have to wait for the pipeline to finish +and remember to merge the request manually.

+

Learn more about merging when pipeline succeeds.

+

+Resolve discussion comments in merge requests reviews

+

Keep track of the progress during a code review with resolving comments. +Resolving comments prevents you from forgetting to address feedback and lets +you hide discussions that are no longer relevant.

+

Read more about resolving discussion comments in merge requests reviews.

+

+Resolve conflicts

+

When a merge request has conflicts, GitLab may provide the option to resolve +those conflicts in the GitLab UI.

+

Learn more about resolving merge conflicts in the UI.

+

+Create new merge requests by email

+

This feature needs incoming email +to be configured by a GitLab administrator to be available for CE/EE users, and +it's available on GitLab.com.

+

You can create a new merge request by sending an email to a user-specific email +address. The address can be obtained on the merge requests page by clicking on +a Email a new merge request to this project button. The subject will be +used as the source branch name for the new merge request and the target branch +will be the default branch for the project. The message body (if not empty) +will be used as the merge request description. You need +"Reply by email" enabled to use +this feature. If it's not enabled to your instance, you may ask your GitLab +administrator to do so.

+

Create new merge requests by email

+

+Find the merge request that introduced a change

+
+

Note: this feature was implemented in GitLab 10.5.

+
+

When viewing the commit details page, GitLab will link to the merge request (or +merge requests, if it's in more than one) containing that commit.

+

This only applies to commits that are in the most recent version of a merge +request - if a commit was in a merge request, then rebased out of that merge +request, they will not be linked.

+

Read more about merge request versions

+

+Revert changes

+

GitLab implements Git's powerful feature to revert any commit with introducing +a Revert button in merge requests and commit details.

+

Learn more about reverting changes in the UI

+

+Merge requests versions

+

Every time you push to a branch that is tied to a merge request, a new version +of merge request diff is created. When you visit a merge request that contains +more than one pushes, you can select and compare the versions of those merge +request diffs.

+

Read more about merge request versions

+

+Work In Progress merge requests

+

To prevent merge requests from accidentally being accepted before they're +completely ready, GitLab blocks the "Accept" button for merge requests that +have been marked as a Work In Progress.

+

Learn more about settings a merge request as "Work In Progress".

+

+Merge request diff file navigation

+

The diff view has a persistent dropdown for file navigation. As you scroll through +diffs with a large number of files and/or many changes in those files, you can +easily jump to any changed file through the dropdown navigation.

+

Merge request diff file navigation

+

+Ignore whitespace changes in Merge Request diff view

+

If you click the Hide whitespace changes button, you can see the diff +without whitespace changes (if there are any). This is also working when on a +specific commit page.

+

MR diff

+
+

Tip: +You can append ?w=1 while on the diffs page of a merge request to ignore any +whitespace changes.

+
+

+Live preview with Review Apps

+

If you configured Review Apps for your project, +you can preview the changes submitted to a feature-branch through a merge request +in a per-branch basis. No need to checkout the branch, install and preview locally; +all your changes will be available to preview by anyone with the Review Apps link.

+

Read more about Review Apps.

+

+Bulk editing merge requests

+

Find out about bulk editing merge requests.

+

+Tips

+

Here are some tips that will help you be more efficient with merge requests in +the command line.

+
+

Note: +This section might move in its own document in the future.

+
+

+Checkout merge requests locally

+

A merge request contains all the history from a repository, plus the additional +commits added to the branch associated with the merge request. Here's a few +tricks to checkout a merge request locally.

+

Please note that you can checkout a merge request locally even if the source +project is a fork (even a private fork) of the target project.

+

+Checkout locally by adding a git alias

+

Add the following alias to your ~/.gitconfig:

+
[alias]
+    mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' -
+

Now you can check out a particular merge request from any repository and any +remote. For example, to check out the merge request with ID 5 as shown in GitLab +from the upstream remote, do:

+
git mr upstream 5
+

This will fetch the merge request into a local mr-upstream-5 branch and check +it out.

+

+Checkout locally by modifying .git/config for a given repository

+

Locate the section for your GitLab remote in the .git/config file. It looks +like this:

+
[remote "origin"]
+  url = https://gitlab.com/gitlab-org/gitlab-ce.git
+  fetch = +refs/heads/*:refs/remotes/origin/*
+

You can open the file with:

+
git config -e
+

Now add the following line to the above section:

+
fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
+

In the end, it should look like this:

+
[remote "origin"]
+  url = https://gitlab.com/gitlab-org/gitlab-ce.git
+  fetch = +refs/heads/*:refs/remotes/origin/*
+  fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
+

Now you can fetch all the merge requests:

+
git fetch origin
+
+...
+From https://gitlab.com/gitlab-org/gitlab-ce.git
+ * [new ref]         refs/merge-requests/1/head -> origin/merge-requests/1
+ * [new ref]         refs/merge-requests/2/head -> origin/merge-requests/2
+...
+

And to check out a particular merge request:

+
git checkout origin/merge-requests/1
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/d8160b05c1c54fc6e0fee231b5ad404d b/docker/tanner/snare/dist/pages/1/d8160b05c1c54fc6e0fee231b5ad404d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d8160b05c1c54fc6e0fee231b5ad404d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d908df4eb4d8a12cb2dc574cd5c278b0 b/docker/tanner/snare/dist/pages/1/d908df4eb4d8a12cb2dc574cd5c278b0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d908df4eb4d8a12cb2dc574cd5c278b0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d9258e4750c8c42660d2d0826c43465d b/docker/tanner/snare/dist/pages/1/d9258e4750c8c42660d2d0826c43465d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d9258e4750c8c42660d2d0826c43465d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d974eee372c82b33448b63de6492e291 b/docker/tanner/snare/dist/pages/1/d974eee372c82b33448b63de6492e291 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d974eee372c82b33448b63de6492e291 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d9c86f196a6d627e1a02d3916f87770f b/docker/tanner/snare/dist/pages/1/d9c86f196a6d627e1a02d3916f87770f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d9c86f196a6d627e1a02d3916f87770f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/d9f09b89f78b863a1b20e06ce9d6ba21 b/docker/tanner/snare/dist/pages/1/d9f09b89f78b863a1b20e06ce9d6ba21 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/d9f09b89f78b863a1b20e06ce9d6ba21 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/da3fbbfeb375b05afaea68a0c8064d72 b/docker/tanner/snare/dist/pages/1/da3fbbfeb375b05afaea68a0c8064d72 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/da3fbbfeb375b05afaea68a0c8064d72 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/daa46086e723bb57ddefdf269b54bc94 b/docker/tanner/snare/dist/pages/1/daa46086e723bb57ddefdf269b54bc94 new file mode 100644 index 000000000..cb9906fef --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/daa46086e723bb57ddefdf269b54bc94 @@ -0,0 +1,392 @@ + + + + + + + + + + + + + + + + + + +Index · Gpg signed commits · Repository · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Signing commits with GPG

+

NOTE: Note: +The term GPG is used for all OpenPGP/PGP/GPG related material and +implementations.

+
+
    +
  • +Introduced in GitLab 9.5.
  • +
  • Subkeys support was added in GitLab 10.1.
  • +
+
+

GitLab can show whether a commit is verified or not when signed with a GPG key. +All you need to do is upload the public GPG key in your profile settings.

+

GPG verified tags are not supported yet.

+

+Getting started with GPG

+

Here are a few guides to get you started with GPG:

+ +

+How GitLab handles GPG

+

GitLab uses its own keyring to verify the GPG signature. It does not access any +public key server.

+

In order to have a commit verified on GitLab the corresponding public key needs +to be uploaded to GitLab. For a signature to be verified three conditions need +to be met:

+
    +
  1. The public key needs to be added your GitLab account
  2. +
  3. One of the emails in the GPG key matches a verified email address you use in GitLab
  4. +
  5. The committer's email matches the verified email from the gpg key
  6. +
+

+Generating a GPG key

+
+

Notes:

+
+
    +
  • If your Operating System has gpg2 installed, replace gpg with gpg2 in +the following commands.
  • +
  • If Git is using gpg and you get errors like secret key not available or +gpg: signing failed: secret key not available, run the following command to +change to gpg2: +
    git config --global gpg.program gpg2
    +
  • +
+

If you don't already have a GPG key, the following steps will help you get +started:

+
    +
  1. +

    Install GPG for your operating system

    +
  2. +
  3. +

    Generate the private/public key pair with the following command:

    +
    gpg --full-gen-key
    +

    This will spawn a series of questions.

    +
  4. +
  5. +

    The first question is which algorithm can be used. Select the kind you want +or press Enter to choose the default (RSA and RSA):

    +
    Please select what kind of key you want:
    +   (1) RSA and RSA (default)
    +   (2) DSA and Elgamal
    +   (3) DSA (sign only)
    +   (4) RSA (sign only)
    +Your selection? 1
    +
  6. +
  7. +

    The next question is key length. We recommend to choose the highest value +which is 4096:

    +
    RSA keys may be between 1024 and 4096 bits long.
    +What keysize do you want? (2048) 4096
    +Requested keysize is 4096 bits
    +
  8. +
  9. +

    Next, you need to specify the validity period of your key. This is something +subjective, and you can use the default value which is to never expire:

    +
    Please specify how long the key should be valid.
    +         0 = key does not expire
    +      <n>  = key expires in n days
    +      <n>w = key expires in n weeks
    +      <n>m = key expires in n months
    +      <n>y = key expires in n years
    +Key is valid for? (0) 0
    +Key does not expire at all
    +
  10. +
  11. +

    Confirm that the answers you gave were correct by typing y:

    +
    Is this correct? (y/N) y
    +
  12. +
  13. +

    Enter you real name, the email address to be associated with this key (should +match a verified email address you use in GitLab) and an optional comment +(press Enter to skip):

    +
    GnuPG needs to construct a user ID to identify your key.
    +
    +Real name: Mr. Robot
    +Email address: mr@robot.sh
    +Comment:
    +You selected this USER-ID:
    +    "Mr. Robot <mr@robot.sh>"
    +
    +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
    +
  14. +
  15. +

    Pick a strong password when asked and type it twice to confirm.

    +
  16. +
  17. +

    Use the following command to list the private GPG key you just created:

    +
    gpg --list-secret-keys --keyid-format LONG mr@robot.sh
    +

    Replace mr@robot.sh with the email address you entered above.

    +
  18. +
  19. +

    Copy the GPG key ID that starts with sec. In the following example, that's +30F2B65B9246B6CA:

    +
    sec   rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
    +      D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
    +uid                   [ultimate] Mr. Robot <mr@robot.sh>
    +ssb   rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
    +
  20. +
  21. +

    Export the public key of that ID (replace your key ID from the previous step):

    +
    gpg --armor --export 30F2B65B9246B6CA
    +
  22. +
  23. +

    Finally, copy the public key and add it in your profile settings

    +
  24. +
+

+Adding a GPG key to your account

+
+

Note: +Once you add a key, you cannot edit it, only remove it. In case the paste +didn't work, you'll have to remove the offending key and re-add it.

+
+

You can add a GPG key in your profile's settings:

+
    +
  1. +

    On the upper right corner, click on your avatar and go to your Settings.

    +

    Settings dropdown

    +
  2. +
  3. +

    Navigate to the GPG keys tab and paste your public key in the 'Key' +box.

    +

    Paste GPG public key

    +
  4. +
  5. +

    Finally, click on Add key to add it to GitLab. You will be able to see +its fingerprint, the corresponding email address and creation date.

    +

    GPG key single page

    +
  6. +
+

+Associating your GPG key with Git

+

After you have created your GPG key and added it to +your account, it's time to tell Git which +key to use.

+
    +
  1. +

    Use the following command to list the private GPG key you just created:

    +
    gpg --list-secret-keys --keyid-format LONG mr@robot.sh
    +

    Replace mr@robot.sh with the email address you entered above.

    +
  2. +
  3. +

    Copy the GPG key ID that starts with sec. In the following example, that's +30F2B65B9246B6CA:

    +
    sec   rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
    +      D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
    +uid                   [ultimate] Mr. Robot <mr@robot.sh>
    +ssb   rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
    +
  4. +
  5. +

    Tell Git to use that key to sign the commits:

    +
    git config --global user.signingkey 30F2B65B9246B6CA
    +

    Replace 30F2B65B9246B6CA with your GPG key ID.

    +
  6. +
+

+Signing commits

+

After you have created your GPG key and added it to +your account, you can start signing your +commits:

+
    +
  1. +

    Commit like you used to, the only difference is the addition of the -S flag:

    +
    git commit -S -m "My commit msg"
    +
  2. +
  3. +

    Enter the passphrase of your GPG key when asked.

    +
  4. +
  5. +

    Push to GitLab and check that your commits are verified.

    +
  6. +
+

If you don't want to type the -S flag every time you commit, you can tell Git +to sign your commits automatically:

+
git config --global commit.gpgsign true
+

+Verifying commits

+
    +
  1. +

    Within a project or merge request, navigate to +the Commits tab. Signed commits will show a badge containing either +"Verified" or "Unverified", depending on the verification status of the GPG +signature.

    +

    Signed and unsigned commits

    +
  2. +
  3. +

    By clicking on the GPG badge, details of the signature are displayed.

    +

    Signed commit with verified signature

    +

    Signed commit with verified signature

    +
  4. +
+

+Revoking a GPG key

+

Revoking a key unverifies already signed commits. Commits that were +verified by using this key will change to an unverified state. Future commits +will also stay unverified once you revoke this key. This action should be used +in case your key has been compromised.

+

To revoke a GPG key:

+
    +
  1. On the upper right corner, click on your avatar and go to your Settings.
  2. +
  3. Navigate to the GPG keys tab.
  4. +
  5. Click on Revoke besides the GPG key you want to delete.
  6. +
+

+Removing a GPG key

+

Removing a key does not unverify already signed commits. Commits that were +verified by using this key will stay verified. Only unpushed commits will stay +unverified once you remove this key. To unverify already signed commits, you need +to revoke the associated GPG key from your account.

+

To remove a GPG key from your account:

+
    +
  1. On the upper right corner, click on your avatar and go to your Settings.
  2. +
  3. Navigate to the GPG keys tab.
  4. +
  5. Click on the trash icon besides the GPG key you want to delete.
  6. +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/daa6e088a0a31f9d99ca966756b0d143 b/docker/tanner/snare/dist/pages/1/daa6e088a0a31f9d99ca966756b0d143 new file mode 100644 index 000000000..766e15a44 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/daa6e088a0a31f9d99ca966756b0d143 @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + +Labels · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Labels

+

+Overview

+

Labels allow you to categorize issues or merge requests using descriptive titles like bug, feature request, or docs. Each label also has a customizable color. They allow you to quickly and dynamically filter and manage issues or merge requests you care about, and are visible throughout GitLab in most places where issues and merge requests are located.

+

+Project labels and group labels

+

In GitLab, you can create project and group labels:

+
    +
  • +Project labels can be assigned to issues or merge requests in that project only.
  • +
  • +Group labels can be assigned to any issue or merge request of any project in that group or any subgroups of the group.
  • +
+

+Creating labels

+
+

Note: +A permission level of Developer or higher is required to create labels.

+
+

+New project label

+

To create a project label, navigate to Issues > Labels in the project.

+

Click the New label button. Enter the title, an optional description, and the background color. Click Create label to create the label.

+

If a project has no labels, you can generate a default set of project labels from its empty label list page:

+

Labels generate default

+

GitLab will add the following default labels to the project:

+

Labels default

+

+New group label

+

To create a group label, follow similar steps from above to project labels. Navigate to Issues > Labels in the group and create it from there.

+

Group labels appear in every label list page of the group's child projects.

+

Labels list

+

+New project label from sidebar

+

From the sidebar of an issue or a merge request, you can create a create a new project label inline immediately, instead of navigating to the project label list page.

+

Labels inline

+

+Editing labels

+

NOTE: Note: +A permission level of Developer or higher is required to edit labels.

+

You can update a label by navigating to Issues > Labels in the project or group and clicking the pencil icon.

+

You can delete a label by clicking the trash icon.

+

+Promoting project labels to group labels

+

If you are expanding from a few projects to a larger number of projects within the same group, you may want to share the same label among multiple projects in the same group. If you previously created a project label and now want to make it available for other projects, you can promote it to a group label.

+

From the project label list page, you can promote a project label to a group label. This will merge all project labels across all projects in this group with the same name into a single group label. All issues and merge requests that previously were assigned one of these project labels will now be assigned the new group label. This action cannot be reversed and the changes are permanent.

+

Labels promotion

+

+Assigning labels from the sidebar

+

Every issue and merge request can be assigned any number of labels. The labels are visible on every issue and merge request page, in the sidebar. They are also visible in the issue board. From the sidebar, you can assign or unassign a label to the object (i.e. label or unlabel it). You can also perform this as a quick action in a comment.

+ + + + + + + + + + + + + +
View labels in sidebarAssign labels from sidebar
Labels sidebarLabels sidebar assign
+

+Filtering issues and merge requests by label

+

+Filtering in list pages

+

From the project issue list page and the project merge request list page, you can filter by both group (including subgroup ancestors) labels and project labels.

+

From the group issue list page and the group merge request list page, you can filter by both group labels (including subgroup ancestors and subgroup descendants) and project labels.

+

Labels group issues

+

+Filtering in issue boards

+ +

+Subscribing to labels

+

From the project label list page and the group label list page, you can subscribe to notifications of a given label, to alert you that that label has been assigned to an issue or merge request.

+

Labels subscriptions

+

+Label priority

+
+

Notes:

+
    +
  • Introduced in GitLab 8.9.
  • +
  • Priority sorting is based on the highest priority label only. This discussion considers changing this.
  • +
+
+

Labels can have relative priorities, which are used in the "Label priority" and "Priority" sort orders of the issue and merge request list pages.

+

From the project label list page, star a label to indicate that it has a priority. Drag starred labels up and down to change their priority. Higher means higher priority. Prioritization happens at the project level, only on the project label list page, and not on the group label list page. However, both project and group labels can be prioritized on the project label list page since both types are displayed on the project label list page.

+

Labels prioritized

+

On the project and group issue and merge request list pages, you can sort by Label priority and Priority, which account for objects (issues and merge requests) that have prioritized labels assigned to them.

+

If you sort by Label priority, GitLab considers this sort comparison order:

+
    +
  • Object with a higher priority prioritized label.
  • +
  • Object without a prioritized label.
  • +
+

Ties are broken arbitrarily. (Note that we only consider the highest prioritized label in an object, and not any of the lower prioritized labels. This discussion considers changing this.)

+

Labels sort label priority

+

If you sort by Priority, GitLab considers this sort comparison order:

+
    +
  • Object's assigned milestone's due date is sooner, provided the object has a milestone and the milestone has a due date. If this isn't the case, consider the object having a due date in the infinite future.
  • +
  • Object with a higher priority prioritized label.
  • +
  • Object without a prioritized label.
  • +
+

Ties are broken arbitrarily.

+

Labels sort priority

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/dab08757e7635a1a2333a728c5f65422 b/docker/tanner/snare/dist/pages/1/dab08757e7635a1a2333a728c5f65422 new file mode 100644 index 000000000..d3235d110 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/dab08757e7635a1a2333a728c5f65422 @@ -0,0 +1,412 @@ + + + + + + + + + + + + + + + + + + +Index · Discussions · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Discussions

+

The ability to contribute conversationally is offered throughout GitLab.

+

You can leave a comment in the following places:

+
    +
  • issues
  • +
  • merge requests
  • +
  • snippets
  • +
  • commits
  • +
  • commit diffs
  • +
+

The comment area supports Markdown and quick actions. One can edit their +own comment at any time, and anyone with Maintainer access level or +higher can also edit a comment made by someone else.

+

You could also reply to the notification email in order to reply to a comment, +provided that Reply by email is configured by your GitLab admin. This also +supports Markdown and quick actions as if replied from the web.

+

Apart from the standard comments, you also have the option to create a comment +in the form of a resolvable or threaded discussion.

+

+Resolvable discussions

+
+

Notes:

+
+
    +
  • The main feature was introduced in GitLab 8.11.
  • +
  • Resolvable discussions can be added only to merge request diffs.
  • +
+

Discussion resolution helps keep track of progress during planning or code review. +Resolving comments prevents you from forgetting to address feedback and lets you +hide discussions that are no longer relevant.

+

"A discussion between two people on a piece of code"

+

Comments and discussions can be resolved by anyone with at least Developer +access to the project or the author of the merge request.

+

+Commit discussions in the context of a merge request

+
+

Introduced in GitLab 10.3.

+
+

For reviewers with commit-based workflow, it may be useful to add discussions to +specific commit diffs in the context of a merge request. These discussions will +persist through a commit ID change when:

+
    +
  • force-pushing after a rebase
  • +
  • amending a commit
  • +
+

To create a commit diff discussion:

+
    +
  1. +

    Navigate to the merge request Commits tab. A list of commits that +constitute the merge request will be shown.

    +

    Merge request commits tab

    +
  2. +
  3. +

    Navigate to a specific commit, click on the Changes tab (where you +will only be presented diffs from the selected commit), and leave a comment.

    +

    Commit diff discussion in merge request context

    +
  4. +
  5. +

    Any discussions created this way will be shown in the merge request's +Discussions tab and are resolvable.

    +

    Merge request Discussions tab

    +
  6. +
+

Discussions created this way will only appear in the original merge request +and not when navigating to that commit under your project's +Repository > Commits page.

+

TIP: Tip: +When a link of a commit reference is found in a discussion inside a merge +request, it will be automatically converted to a link in the context of the +current merge request.

+

+Jumping between unresolved discussions

+

When a merge request has a large number of comments it can be difficult to track +what remains unresolved. You can jump between unresolved discussions with the +Jump button next to the Reply field on a discussion.

+

You can also jump to the first unresolved discussion from the button next to the +resolved discussions tracker.

+

"3/4 discussions resolved"

+

+Marking a comment or discussion as resolved

+

You can mark a discussion as resolved by clicking the Resolve discussion +button at the bottom of the discussion.

+

"Resolve discussion" button

+

Alternatively, you can mark each comment as resolved individually.

+

"Resolve comment" button

+

+Move all unresolved discussions in a merge request to an issue

+
+

Introduced in GitLab 9.1

+
+

To continue all open discussions from a merge request in a new issue, click the +Resolve all discussions in new issue button.

+

Open new issue for all unresolved discussions

+

Alternatively, when your project only accepts merge requests when all discussions +are resolved, +there will be an open an issue to resolve them later link in the merge +request widget.

+

Link in merge request widget

+

This will prepare an issue with its content referring to the merge request and +the unresolved discussions.

+

Issue mentioning discussions in a merge request

+

Hitting Submit issue will cause all discussions to be marked as resolved and +add a note referring to the newly created issue.

+

Mark discussions as resolved notice

+

You can now proceed to merge the merge request from the UI.

+

+Moving a single discussion to a new issue

+
+

Introduced in GitLab 9.1

+
+

To create a new issue for a single discussion, you can use the Resolve this +discussion in a new issue button.

+

Create issue for discussion

+

This will direct you to a new issue prefilled with the content of the +discussion, similar to the issues created for delegating multiple +discussions at once. Saving the issue will mark the discussion as resolved and +add a note to the merge request discussion referencing the new issue.

+

New issue for a single discussion

+

+Only allow merge requests to be merged if all discussions are resolved

+
+

Introduced in GitLab 8.14.

+
+

You can prevent merge requests from being merged until all discussions are +resolved.

+

Navigate to your project's settings page, select the +Only allow merge requests to be merged if all discussions are resolved check +box and hit Save for the changes to take effect.

+

Only allow merge if all the discussions are resolved settings

+

From now on, you will not be able to merge from the UI until all discussions +are resolved.

+

Only allow merge if all the discussions are resolved message

+

+Automatically resolve merge request diff discussions when they become outdated

+
+

Introduced in GitLab 10.0.

+
+

You can automatically resolve merge request diff discussions on lines modified +with a new push.

+

Navigate to your project's settings page, select the Automatically resolve +merge request diffs discussions on lines changed with a push check box and hit +Save for the changes to take effect.

+

Automatically resolve merge request diff discussions when they become outdated

+

From now on, any discussions on a diff will be resolved by default if a push +makes that diff section outdated. Discussions on lines that don't change and +top-level resolvable discussions are not automatically resolved.

+

+Commit discussions

+

You can add comments and discussion threads to a particular commit under your +project's Repository > Commits.

+

CAUTION: Attention: +Discussions created this way will be lost if the commit ID changes after a +force push.

+

+Threaded discussions

+
+

Introduced in GitLab 9.1.

+
+

While resolvable discussions are only available to merge request diffs, +discussions can also be added without a diff. You can start a specific +discussion which will look like a thread, on issues, commits, snippets, and +merge requests.

+

To start a threaded discussion, click on the Comment button toggle dropdown, +select Start discussion and click Start discussion when you're ready to +post the comment.

+

Comment type toggle

+

This will post a comment with a single thread to allow you to discuss specific +comments in greater detail.

+

Discussion comment

+

+Image discussions

+
+

Introduced in GitLab 10.1.

+
+

Sometimes a discussion is revolved around an image. With image discussions, +you can easily target a specific coordinate of an image and start a discussion +around it. Image discussions are available in merge requests and commit detail views.

+

To start an image discussion, hover your mouse over the image. Your mouse pointer +should convert into an icon, indicating that the image is available for commenting. +Simply click anywhere on the image to create a new discussion.

+

Start image discussion

+

After you click on the image, a comment form will be displayed that would be the start +of your discussion. Once you save your comment, you will see a new badge displayed on +top of your image. This badge represents your discussion.

+
+

Note: +This discussion badge is typically associated with a number that is only used as a visual +reference for each discussion. In the merge request discussion tab, +this badge will be indicated with a comment icon since each discussion will render a new +image section.

+
+

Image discussions also work on diffs that replace an existing image. In this diff view +mode, you can toggle the different view modes and still see the discussion point badges.

+ + + + + + + + + + + + + + + +
2-upSwipeOnion Skin
2-up viewswipe viewonion skin view
+

Image discussions also work well with resolvable discussions. Resolved discussions +on diffs (not on the merge request discussion tab) will appear collapsed on page +load and will have a corresponding badge counter to match the counter on the image.

+

Image resolved discussion

+

+Lock discussions

+
+

Introduced in GitLab 10.1.

+
+

For large projects with many contributors, it may be useful to stop discussions +in issues or merge requests in these scenarios:

+
    +
  • The project maintainer has already resolved the discussion and it is not helpful +for continued feedback. The project maintainer has already directed new conversation +to newer issues or merge requests.
  • +
  • The people participating in the discussion are trolling, abusive, or otherwise +being unproductive.
  • +
+

In these cases, a user with Maintainer permissions or higher in the project can lock (and unlock) +an issue or a merge request, using the "Lock" section in the sidebar:

+ + + + + + + + + + + + + +
UnlockLock
Turn off discussion lockTurn on discussion lock
+

System notes indicate locking and unlocking.

+

Discussion lock system notes

+

In a locked issue or merge request, only team members can add new comments and +edit existing comments. Non-team members are restricted from adding or editing comments.

+ + + + + + + + + + + + + +
Team memberNon-team member
Comment form memberComment form non-member
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/db89a9bba20744d2f445cce884960d93 b/docker/tanner/snare/dist/pages/1/db89a9bba20744d2f445cce884960d93 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/db89a9bba20744d2f445cce884960d93 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/dc2e8acf3016937f9df6d6d67c507566 b/docker/tanner/snare/dist/pages/1/dc2e8acf3016937f9df6d6d67c507566 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/dc2e8acf3016937f9df6d6d67c507566 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/dc59ec71965b223d4330cbb463cd9c36 b/docker/tanner/snare/dist/pages/1/dc59ec71965b223d4330cbb463cd9c36 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/dc59ec71965b223d4330cbb463cd9c36 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/dc6794353ad395995e6223f826326dac b/docker/tanner/snare/dist/pages/1/dc6794353ad395995e6223f826326dac new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/dc6794353ad395995e6223f826326dac @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/dc6fb4f53fafbd7ad0654918246d816f b/docker/tanner/snare/dist/pages/1/dc6fb4f53fafbd7ad0654918246d816f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/dc6fb4f53fafbd7ad0654918246d816f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/dcdef5beb5cafc09623b1d5217d03f39 b/docker/tanner/snare/dist/pages/1/dcdef5beb5cafc09623b1d5217d03f39 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/dcdef5beb5cafc09623b1d5217d03f39 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ddbf0f95f64dc80d5a051ef03c966c7c b/docker/tanner/snare/dist/pages/1/ddbf0f95f64dc80d5a051ef03c966c7c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ddbf0f95f64dc80d5a051ef03c966c7c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/de12723e6a8c7a5c20b9d18b7f36e8e8 b/docker/tanner/snare/dist/pages/1/de12723e6a8c7a5c20b9d18b7f36e8e8 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/de12723e6a8c7a5c20b9d18b7f36e8e8 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/deb807e7f62501f71aebdfd1c817a449 b/docker/tanner/snare/dist/pages/1/deb807e7f62501f71aebdfd1c817a449 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/deb807e7f62501f71aebdfd1c817a449 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/debd2a1889058901a1f13d6a70c484bf b/docker/tanner/snare/dist/pages/1/debd2a1889058901a1f13d6a70c484bf new file mode 100644 index 000000000..ee77d5f62 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/debd2a1889058901a1f13d6a70c484bf @@ -0,0 +1,1227 @@ + + + + + + + + + + + + + + + + + + +Webhooks · Integrations · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Webhooks

+
+

Note: +Starting from GitLab 8.5:

+
+
    +
  • the repository key is deprecated in favor of the project key
  • +
  • the project.ssh_url key is deprecated in favor of the project.git_ssh_url key
  • +
  • the project.http_url key is deprecated in favor of the project.git_http_url key
  • +
+
+

Note: +Starting from GitLab 11.1, the logs of web hooks are automatically removed after +one month.

+
+

Project webhooks allow you to trigger a URL if for example new code is pushed or +a new issue is created. You can configure webhooks to listen for specific events +like pushes, issues or merge requests. GitLab will send a POST request with data +to the webhook URL.

+

Webhooks can be used to update an external issue tracker, trigger CI jobs, +update a backup mirror, or even deploy to your production server.

+

Navigate to the webhooks page by going to your project's +Settings ➔ Integrations.

+

+Webhook endpoint tips

+

If you are writing your own endpoint (web server) that will receive +GitLab webhooks keep in mind the following things:

+
    +
  • Your endpoint should send its HTTP response as fast as possible. If +you wait too long, GitLab may decide the hook failed and retry it.
  • +
  • Your endpoint should ALWAYS return a valid HTTP response. If you do +not do this then GitLab will think the hook failed and retry it. +Most HTTP libraries take care of this for you automatically but if +you are writing a low-level hook this is important to remember.
  • +
  • GitLab ignores the HTTP status code returned by your endpoint.
  • +
+

+Secret token

+

If you specify a secret token, it will be sent with the hook request in the +X-Gitlab-Token HTTP header. Your webhook endpoint can check that to verify +that the request is legitimate.

+

+SSL verification

+

By default, the SSL certificate of the webhook endpoint is verified based on +an internal list of Certificate Authorities, which means the certificate cannot +be self-signed.

+

You can turn this off in the webhook settings in your GitLab projects.

+

SSL Verification

+

+Events

+

Below are described the supported events.

+

+Push events

+

Triggered when you push to the repository except when pushing tags.

+
+

Note: When more than 20 commits are pushed at once, the commits web hook +attribute will only contain the first 20 for performance reasons. Loading +detailed commit data is expensive. Note that despite only 20 commits being +present in the commits attribute, the total_commits_count attribute will +contain the actual total.

+
+

Request header:

+
X-Gitlab-Event: Push Hook
+

Request body:

+
{
+  "object_kind": "push",
+  "before": "95790bf891e76fee5e1747ab589903a6a1f80f22",
+  "after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
+  "ref": "refs/heads/master",
+  "checkout_sha": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
+  "user_id": 4,
+  "user_name": "John Smith",
+  "user_username": "jsmith",
+  "user_email": "john@example.com",
+  "user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
+  "project_id": 15,
+  "project":{
+    "id": 15,
+    "name":"Diaspora",
+    "description":"",
+    "web_url":"http://example.com/mike/diaspora",
+    "avatar_url":null,
+    "git_ssh_url":"git@example.com:mike/diaspora.git",
+    "git_http_url":"http://example.com/mike/diaspora.git",
+    "namespace":"Mike",
+    "visibility_level":0,
+    "path_with_namespace":"mike/diaspora",
+    "default_branch":"master",
+    "homepage":"http://example.com/mike/diaspora",
+    "url":"git@example.com:mike/diaspora.git",
+    "ssh_url":"git@example.com:mike/diaspora.git",
+    "http_url":"http://example.com/mike/diaspora.git"
+  },
+  "repository":{
+    "name": "Diaspora",
+    "url": "git@example.com:mike/diaspora.git",
+    "description": "",
+    "homepage": "http://example.com/mike/diaspora",
+    "git_http_url":"http://example.com/mike/diaspora.git",
+    "git_ssh_url":"git@example.com:mike/diaspora.git",
+    "visibility_level":0
+  },
+  "commits": [
+    {
+      "id": "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
+      "message": "Update Catalan translation to e38cb41.",
+      "timestamp": "2011-12-12T14:27:31+02:00",
+      "url": "http://example.com/mike/diaspora/commit/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
+      "author": {
+        "name": "Jordi Mallach",
+        "email": "jordi@softcatala.org"
+      },
+      "added": ["CHANGELOG"],
+      "modified": ["app/controller/application.rb"],
+      "removed": []
+    },
+    {
+      "id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
+      "message": "fixed readme",
+      "timestamp": "2012-01-03T23:36:29+02:00",
+      "url": "http://example.com/mike/diaspora/commit/da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
+      "author": {
+        "name": "GitLab dev user",
+        "email": "gitlabdev@dv6700.(none)"
+      },
+      "added": ["CHANGELOG"],
+      "modified": ["app/controller/application.rb"],
+      "removed": []
+    }
+  ],
+  "total_commits_count": 4
+}
+

+Tag events

+

Triggered when you create (or delete) tags to the repository.

+

Request header:

+
X-Gitlab-Event: Tag Push Hook
+

Request body:

+
{
+  "object_kind": "tag_push",
+  "before": "0000000000000000000000000000000000000000",
+  "after": "82b3d5ae55f7080f1e6022629cdb57bfae7cccc7",
+  "ref": "refs/tags/v1.0.0",
+  "checkout_sha": "82b3d5ae55f7080f1e6022629cdb57bfae7cccc7",
+  "user_id": 1,
+  "user_name": "John Smith",
+  "user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
+  "project_id": 1,
+  "project":{
+    "id": 1,
+    "name":"Example",
+    "description":"",
+    "web_url":"http://example.com/jsmith/example",
+    "avatar_url":null,
+    "git_ssh_url":"git@example.com:jsmith/example.git",
+    "git_http_url":"http://example.com/jsmith/example.git",
+    "namespace":"Jsmith",
+    "visibility_level":0,
+    "path_with_namespace":"jsmith/example",
+    "default_branch":"master",
+    "homepage":"http://example.com/jsmith/example",
+    "url":"git@example.com:jsmith/example.git",
+    "ssh_url":"git@example.com:jsmith/example.git",
+    "http_url":"http://example.com/jsmith/example.git"
+  },
+  "repository":{
+    "name": "Example",
+    "url": "ssh://git@example.com/jsmith/example.git",
+    "description": "",
+    "homepage": "http://example.com/jsmith/example",
+    "git_http_url":"http://example.com/jsmith/example.git",
+    "git_ssh_url":"git@example.com:jsmith/example.git",
+    "visibility_level":0
+  },
+  "commits": [],
+  "total_commits_count": 0
+}
+

+Issues events

+

Triggered when a new issue is created or an existing issue was updated/closed/reopened.

+

Request header:

+
X-Gitlab-Event: Issue Hook
+

Request body:

+
{
+  "object_kind": "issue",
+  "user": {
+    "name": "Administrator",
+    "username": "root",
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+  },
+  "project": {
+    "id": 1,
+    "name":"Gitlab Test",
+    "description":"Aut reprehenderit ut est.",
+    "web_url":"http://example.com/gitlabhq/gitlab-test",
+    "avatar_url":null,
+    "git_ssh_url":"git@example.com:gitlabhq/gitlab-test.git",
+    "git_http_url":"http://example.com/gitlabhq/gitlab-test.git",
+    "namespace":"GitlabHQ",
+    "visibility_level":20,
+    "path_with_namespace":"gitlabhq/gitlab-test",
+    "default_branch":"master",
+    "homepage":"http://example.com/gitlabhq/gitlab-test",
+    "url":"http://example.com/gitlabhq/gitlab-test.git",
+    "ssh_url":"git@example.com:gitlabhq/gitlab-test.git",
+    "http_url":"http://example.com/gitlabhq/gitlab-test.git"
+  },
+  "repository": {
+    "name": "Gitlab Test",
+    "url": "http://example.com/gitlabhq/gitlab-test.git",
+    "description": "Aut reprehenderit ut est.",
+    "homepage": "http://example.com/gitlabhq/gitlab-test"
+  },
+  "object_attributes": {
+    "id": 301,
+    "title": "New API: create/update/delete file",
+    "assignee_ids": [51],
+    "assignee_id": 51,
+    "author_id": 51,
+    "project_id": 14,
+    "created_at": "2013-12-03T17:15:43Z",
+    "updated_at": "2013-12-03T17:15:43Z",
+    "position": 0,
+    "branch_name": null,
+    "description": "Create new API for manipulations with repository",
+    "milestone_id": null,
+    "state": "opened",
+    "iid": 23,
+    "url": "http://example.com/diaspora/issues/23",
+    "action": "open"
+  },
+  "assignees": [{
+    "name": "User1",
+    "username": "user1",
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+  }],
+  "assignee": {
+    "name": "User1",
+    "username": "user1",
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+  },
+  "labels": [{
+    "id": 206,
+    "title": "API",
+    "color": "#ffffff",
+    "project_id": 14,
+    "created_at": "2013-12-03T17:15:43Z",
+    "updated_at": "2013-12-03T17:15:43Z",
+    "template": false,
+    "description": "API related issues",
+    "type": "ProjectLabel",
+    "group_id": 41
+  }],
+  "changes": {
+    "updated_by_id": [null, 1],
+    "updated_at": ["2017-09-15 16:50:55 UTC", "2017-09-15 16:52:00 UTC"],
+    "labels": {
+      "previous": [{
+        "id": 206,
+        "title": "API",
+        "color": "#ffffff",
+        "project_id": 14,
+        "created_at": "2013-12-03T17:15:43Z",
+        "updated_at": "2013-12-03T17:15:43Z",
+        "template": false,
+        "description": "API related issues",
+        "type": "ProjectLabel",
+        "group_id": 41
+      }],
+      "current": [{
+        "id": 205,
+        "title": "Platform",
+        "color": "#123123",
+        "project_id": 14,
+        "created_at": "2013-12-03T17:15:43Z",
+        "updated_at": "2013-12-03T17:15:43Z",
+        "template": false,
+        "description": "Platform related issues",
+        "type": "ProjectLabel",
+        "group_id": 41
+      }]
+    }
+  }
+}
+

Note: assignee and assignee_id keys are deprecated and now show the first assignee only.

+

+Comment events

+

Triggered when a new comment is made on commits, merge requests, issues, and code snippets. +The note data will be stored in object_attributes (e.g. note, noteable_type). The +payload will also include information about the target of the comment. For example, +a comment on an issue will include the specific issue information under the issue key. +Valid target types:

+
    +
  1. commit
  2. +
  3. merge_request
  4. +
  5. issue
  6. +
  7. snippet
  8. +
+

+Comment on commit

+

Request header:

+
X-Gitlab-Event: Note Hook
+

Request body:

+
{
+  "object_kind": "note",
+  "user": {
+    "name": "Administrator",
+    "username": "root",
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+  },
+  "project_id": 5,
+  "project":{
+    "id": 5,
+    "name":"Gitlab Test",
+    "description":"Aut reprehenderit ut est.",
+    "web_url":"http://example.com/gitlabhq/gitlab-test",
+    "avatar_url":null,
+    "git_ssh_url":"git@example.com:gitlabhq/gitlab-test.git",
+    "git_http_url":"http://example.com/gitlabhq/gitlab-test.git",
+    "namespace":"GitlabHQ",
+    "visibility_level":20,
+    "path_with_namespace":"gitlabhq/gitlab-test",
+    "default_branch":"master",
+    "homepage":"http://example.com/gitlabhq/gitlab-test",
+    "url":"http://example.com/gitlabhq/gitlab-test.git",
+    "ssh_url":"git@example.com:gitlabhq/gitlab-test.git",
+    "http_url":"http://example.com/gitlabhq/gitlab-test.git"
+  },
+  "repository":{
+    "name": "Gitlab Test",
+    "url": "http://example.com/gitlab-org/gitlab-test.git",
+    "description": "Aut reprehenderit ut est.",
+    "homepage": "http://example.com/gitlab-org/gitlab-test"
+  },
+  "object_attributes": {
+    "id": 1243,
+    "note": "This is a commit comment. How does this work?",
+    "noteable_type": "Commit",
+    "author_id": 1,
+    "created_at": "2015-05-17 18:08:09 UTC",
+    "updated_at": "2015-05-17 18:08:09 UTC",
+    "project_id": 5,
+    "attachment":null,
+    "line_code": "bec9703f7a456cd2b4ab5fb3220ae016e3e394e3_0_1",
+    "commit_id": "cfe32cf61b73a0d5e9f13e774abde7ff789b1660",
+    "noteable_id": null,
+    "system": false,
+    "st_diff": {
+      "diff": "--- /dev/null\n+++ b/six\n@@ -0,0 +1 @@\n+Subproject commit 409f37c4f05865e4fb208c771485f211a22c4c2d\n",
+      "new_path": "six",
+      "old_path": "six",
+      "a_mode": "0",
+      "b_mode": "160000",
+      "new_file": true,
+      "renamed_file": false,
+      "deleted_file": false
+    },
+    "url": "http://example.com/gitlab-org/gitlab-test/commit/cfe32cf61b73a0d5e9f13e774abde7ff789b1660#note_1243"
+  },
+  "commit": {
+    "id": "cfe32cf61b73a0d5e9f13e774abde7ff789b1660",
+    "message": "Add submodule\n\nSigned-off-by: Dmitriy Zaporozhets \u003cdmitriy.zaporozhets@gmail.com\u003e\n",
+    "timestamp": "2014-02-27T10:06:20+02:00",
+    "url": "http://example.com/gitlab-org/gitlab-test/commit/cfe32cf61b73a0d5e9f13e774abde7ff789b1660",
+    "author": {
+      "name": "Dmitriy Zaporozhets",
+      "email": "dmitriy.zaporozhets@gmail.com"
+    }
+  }
+}
+

+Comment on merge request

+

Request header:

+
X-Gitlab-Event: Note Hook
+

Request body:

+
{
+  "object_kind": "note",
+  "user": {
+    "name": "Administrator",
+    "username": "root",
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+  },
+  "project_id": 5,
+  "project":{
+    "id": 5,
+    "name":"Gitlab Test",
+    "description":"Aut reprehenderit ut est.",
+    "web_url":"http://example.com/gitlab-org/gitlab-test",
+    "avatar_url":null,
+    "git_ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+    "git_http_url":"http://example.com/gitlab-org/gitlab-test.git",
+    "namespace":"Gitlab Org",
+    "visibility_level":10,
+    "path_with_namespace":"gitlab-org/gitlab-test",
+    "default_branch":"master",
+    "homepage":"http://example.com/gitlab-org/gitlab-test",
+    "url":"http://example.com/gitlab-org/gitlab-test.git",
+    "ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+    "http_url":"http://example.com/gitlab-org/gitlab-test.git"
+  },
+  "repository":{
+    "name": "Gitlab Test",
+    "url": "http://localhost/gitlab-org/gitlab-test.git",
+    "description": "Aut reprehenderit ut est.",
+    "homepage": "http://example.com/gitlab-org/gitlab-test"
+  },
+  "object_attributes": {
+    "id": 1244,
+    "note": "This MR needs work.",
+    "noteable_type": "MergeRequest",
+    "author_id": 1,
+    "created_at": "2015-05-17 18:21:36 UTC",
+    "updated_at": "2015-05-17 18:21:36 UTC",
+    "project_id": 5,
+    "attachment": null,
+    "line_code": null,
+    "commit_id": "",
+    "noteable_id": 7,
+    "system": false,
+    "st_diff": null,
+    "url": "http://example.com/gitlab-org/gitlab-test/merge_requests/1#note_1244"
+  },
+  "merge_request": {
+    "id": 7,
+    "target_branch": "markdown",
+    "source_branch": "master",
+    "source_project_id": 5,
+    "author_id": 8,
+    "assignee_id": 28,
+    "title": "Tempora et eos debitis quae laborum et.",
+    "created_at": "2015-03-01 20:12:53 UTC",
+    "updated_at": "2015-03-21 18:27:27 UTC",
+    "milestone_id": 11,
+    "state": "opened",
+    "merge_status": "cannot_be_merged",
+    "target_project_id": 5,
+    "iid": 1,
+    "description": "Et voluptas corrupti assumenda temporibus. Architecto cum animi eveniet amet asperiores. Vitae numquam voluptate est natus sit et ad id.",
+    "position": 0,
+    "source":{
+      "name":"Gitlab Test",
+      "description":"Aut reprehenderit ut est.",
+      "web_url":"http://example.com/gitlab-org/gitlab-test",
+      "avatar_url":null,
+      "git_ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+      "git_http_url":"http://example.com/gitlab-org/gitlab-test.git",
+      "namespace":"Gitlab Org",
+      "visibility_level":10,
+      "path_with_namespace":"gitlab-org/gitlab-test",
+      "default_branch":"master",
+      "homepage":"http://example.com/gitlab-org/gitlab-test",
+      "url":"http://example.com/gitlab-org/gitlab-test.git",
+      "ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+      "http_url":"http://example.com/gitlab-org/gitlab-test.git"
+    },
+    "target": {
+      "name":"Gitlab Test",
+      "description":"Aut reprehenderit ut est.",
+      "web_url":"http://example.com/gitlab-org/gitlab-test",
+      "avatar_url":null,
+      "git_ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+      "git_http_url":"http://example.com/gitlab-org/gitlab-test.git",
+      "namespace":"Gitlab Org",
+      "visibility_level":10,
+      "path_with_namespace":"gitlab-org/gitlab-test",
+      "default_branch":"master",
+      "homepage":"http://example.com/gitlab-org/gitlab-test",
+      "url":"http://example.com/gitlab-org/gitlab-test.git",
+      "ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+      "http_url":"http://example.com/gitlab-org/gitlab-test.git"
+    },
+    "last_commit": {
+      "id": "562e173be03b8ff2efb05345d12df18815438a4b",
+      "message": "Merge branch 'another-branch' into 'master'\n\nCheck in this test\n",
+      "timestamp": "2015-04-08T21: 00:25-07:00",
+      "url": "http://example.com/gitlab-org/gitlab-test/commit/562e173be03b8ff2efb05345d12df18815438a4b",
+      "author": {
+        "name": "John Smith",
+        "email": "john@example.com"
+      }
+    },
+    "work_in_progress": false,
+    "assignee": {
+      "name": "User1",
+      "username": "user1",
+      "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+    }
+  }
+}
+

+Comment on issue

+

Request header:

+
X-Gitlab-Event: Note Hook
+

Request body:

+
{
+  "object_kind": "note",
+  "user": {
+    "name": "Administrator",
+    "username": "root",
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+  },
+  "project_id": 5,
+  "project":{
+    "id": 5,
+    "name":"Gitlab Test",
+    "description":"Aut reprehenderit ut est.",
+    "web_url":"http://example.com/gitlab-org/gitlab-test",
+    "avatar_url":null,
+    "git_ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+    "git_http_url":"http://example.com/gitlab-org/gitlab-test.git",
+    "namespace":"Gitlab Org",
+    "visibility_level":10,
+    "path_with_namespace":"gitlab-org/gitlab-test",
+    "default_branch":"master",
+    "homepage":"http://example.com/gitlab-org/gitlab-test",
+    "url":"http://example.com/gitlab-org/gitlab-test.git",
+    "ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+    "http_url":"http://example.com/gitlab-org/gitlab-test.git"
+  },
+  "repository":{
+    "name":"diaspora",
+    "url":"git@example.com:mike/diaspora.git",
+    "description":"",
+    "homepage":"http://example.com/mike/diaspora"
+  },
+  "object_attributes": {
+    "id": 1241,
+    "note": "Hello world",
+    "noteable_type": "Issue",
+    "author_id": 1,
+    "created_at": "2015-05-17 17:06:40 UTC",
+    "updated_at": "2015-05-17 17:06:40 UTC",
+    "project_id": 5,
+    "attachment": null,
+    "line_code": null,
+    "commit_id": "",
+    "noteable_id": 92,
+    "system": false,
+    "st_diff": null,
+    "url": "http://example.com/gitlab-org/gitlab-test/issues/17#note_1241"
+  },
+  "issue": {
+    "id": 92,
+    "title": "test",
+    "assignee_ids": [],
+    "assignee_id": null,
+    "author_id": 1,
+    "project_id": 5,
+    "created_at": "2015-04-12 14:53:17 UTC",
+    "updated_at": "2015-04-26 08:28:42 UTC",
+    "position": 0,
+    "branch_name": null,
+    "description": "test",
+    "milestone_id": null,
+    "state": "closed",
+    "iid": 17
+  }
+}
+

Note: assignee_id field is deprecated and now shows the first assignee only.

+

+Comment on code snippet

+

Request header:

+
X-Gitlab-Event: Note Hook
+

Request body:

+
{
+  "object_kind": "note",
+  "user": {
+    "name": "Administrator",
+    "username": "root",
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+  },
+  "project_id": 5,
+  "project":{
+    "id": 5,
+    "name":"Gitlab Test",
+    "description":"Aut reprehenderit ut est.",
+    "web_url":"http://example.com/gitlab-org/gitlab-test",
+    "avatar_url":null,
+    "git_ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+    "git_http_url":"http://example.com/gitlab-org/gitlab-test.git",
+    "namespace":"Gitlab Org",
+    "visibility_level":10,
+    "path_with_namespace":"gitlab-org/gitlab-test",
+    "default_branch":"master",
+    "homepage":"http://example.com/gitlab-org/gitlab-test",
+    "url":"http://example.com/gitlab-org/gitlab-test.git",
+    "ssh_url":"git@example.com:gitlab-org/gitlab-test.git",
+    "http_url":"http://example.com/gitlab-org/gitlab-test.git"
+  },
+  "repository":{
+    "name":"Gitlab Test",
+    "url":"http://example.com/gitlab-org/gitlab-test.git",
+    "description":"Aut reprehenderit ut est.",
+    "homepage":"http://example.com/gitlab-org/gitlab-test"
+  },
+  "object_attributes": {
+    "id": 1245,
+    "note": "Is this snippet doing what it's supposed to be doing?",
+    "noteable_type": "Snippet",
+    "author_id": 1,
+    "created_at": "2015-05-17 18:35:50 UTC",
+    "updated_at": "2015-05-17 18:35:50 UTC",
+    "project_id": 5,
+    "attachment": null,
+    "line_code": null,
+    "commit_id": "",
+    "noteable_id": 53,
+    "system": false,
+    "st_diff": null,
+    "url": "http://example.com/gitlab-org/gitlab-test/snippets/53#note_1245"
+  },
+  "snippet": {
+    "id": 53,
+    "title": "test",
+    "content": "puts 'Hello world'",
+    "author_id": 1,
+    "project_id": 5,
+    "created_at": "2015-04-09 02:40:38 UTC",
+    "updated_at": "2015-04-09 02:40:38 UTC",
+    "file_name": "test.rb",
+    "expires_at": null,
+    "type": "ProjectSnippet",
+    "visibility_level": 0
+  }
+}
+

+Merge request events

+

Triggered when a new merge request is created, an existing merge request was updated/merged/closed or a commit is added in the source branch.

+

Request header:

+
X-Gitlab-Event: Merge Request Hook
+

Request body:

+
{
+  "object_kind": "merge_request",
+  "user": {
+    "name": "Administrator",
+    "username": "root",
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+  },
+  "project": {
+    "id": 1,
+    "name":"Gitlab Test",
+    "description":"Aut reprehenderit ut est.",
+    "web_url":"http://example.com/gitlabhq/gitlab-test",
+    "avatar_url":null,
+    "git_ssh_url":"git@example.com:gitlabhq/gitlab-test.git",
+    "git_http_url":"http://example.com/gitlabhq/gitlab-test.git",
+    "namespace":"GitlabHQ",
+    "visibility_level":20,
+    "path_with_namespace":"gitlabhq/gitlab-test",
+    "default_branch":"master",
+    "homepage":"http://example.com/gitlabhq/gitlab-test",
+    "url":"http://example.com/gitlabhq/gitlab-test.git",
+    "ssh_url":"git@example.com:gitlabhq/gitlab-test.git",
+    "http_url":"http://example.com/gitlabhq/gitlab-test.git"
+  },
+  "repository": {
+    "name": "Gitlab Test",
+    "url": "http://example.com/gitlabhq/gitlab-test.git",
+    "description": "Aut reprehenderit ut est.",
+    "homepage": "http://example.com/gitlabhq/gitlab-test"
+  },
+  "object_attributes": {
+    "id": 99,
+    "target_branch": "master",
+    "source_branch": "ms-viewport",
+    "source_project_id": 14,
+    "author_id": 51,
+    "assignee_id": 6,
+    "title": "MS-Viewport",
+    "created_at": "2013-12-03T17:23:34Z",
+    "updated_at": "2013-12-03T17:23:34Z",
+    "milestone_id": null,
+    "state": "opened",
+    "merge_status": "unchecked",
+    "target_project_id": 14,
+    "iid": 1,
+    "description": "",
+    "source": {
+      "name":"Awesome Project",
+      "description":"Aut reprehenderit ut est.",
+      "web_url":"http://example.com/awesome_space/awesome_project",
+      "avatar_url":null,
+      "git_ssh_url":"git@example.com:awesome_space/awesome_project.git",
+      "git_http_url":"http://example.com/awesome_space/awesome_project.git",
+      "namespace":"Awesome Space",
+      "visibility_level":20,
+      "path_with_namespace":"awesome_space/awesome_project",
+      "default_branch":"master",
+      "homepage":"http://example.com/awesome_space/awesome_project",
+      "url":"http://example.com/awesome_space/awesome_project.git",
+      "ssh_url":"git@example.com:awesome_space/awesome_project.git",
+      "http_url":"http://example.com/awesome_space/awesome_project.git"
+    },
+    "target": {
+      "name":"Awesome Project",
+      "description":"Aut reprehenderit ut est.",
+      "web_url":"http://example.com/awesome_space/awesome_project",
+      "avatar_url":null,
+      "git_ssh_url":"git@example.com:awesome_space/awesome_project.git",
+      "git_http_url":"http://example.com/awesome_space/awesome_project.git",
+      "namespace":"Awesome Space",
+      "visibility_level":20,
+      "path_with_namespace":"awesome_space/awesome_project",
+      "default_branch":"master",
+      "homepage":"http://example.com/awesome_space/awesome_project",
+      "url":"http://example.com/awesome_space/awesome_project.git",
+      "ssh_url":"git@example.com:awesome_space/awesome_project.git",
+      "http_url":"http://example.com/awesome_space/awesome_project.git"
+    },
+    "last_commit": {
+      "id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
+      "message": "fixed readme",
+      "timestamp": "2012-01-03T23:36:29+02:00",
+      "url": "http://example.com/awesome_space/awesome_project/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
+      "author": {
+        "name": "GitLab dev user",
+        "email": "gitlabdev@dv6700.(none)"
+      }
+    },
+    "work_in_progress": false,
+    "url": "http://example.com/diaspora/merge_requests/1",
+    "action": "open",
+    "assignee": {
+      "name": "User1",
+      "username": "user1",
+      "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
+    }
+  },
+  "labels": [{
+    "id": 206,
+    "title": "API",
+    "color": "#ffffff",
+    "project_id": 14,
+    "created_at": "2013-12-03T17:15:43Z",
+    "updated_at": "2013-12-03T17:15:43Z",
+    "template": false,
+    "description": "API related issues",
+    "type": "ProjectLabel",
+    "group_id": 41
+  }],
+  "changes": {
+    "updated_by_id": [null, 1],
+    "updated_at": ["2017-09-15 16:50:55 UTC", "2017-09-15 16:52:00 UTC"],
+    "labels": {
+      "previous": [{
+        "id": 206,
+        "title": "API",
+        "color": "#ffffff",
+        "project_id": 14,
+        "created_at": "2013-12-03T17:15:43Z",
+        "updated_at": "2013-12-03T17:15:43Z",
+        "template": false,
+        "description": "API related issues",
+        "type": "ProjectLabel",
+        "group_id": 41
+      }],
+      "current": [{
+        "id": 205,
+        "title": "Platform",
+        "color": "#123123",
+        "project_id": 14,
+        "created_at": "2013-12-03T17:15:43Z",
+        "updated_at": "2013-12-03T17:15:43Z",
+        "template": false,
+        "description": "Platform related issues",
+        "type": "ProjectLabel",
+        "group_id": 41
+      }]
+    }
+  }
+}
+

+Wiki Page events

+

Triggered when a wiki page is created, updated or deleted.

+

Request Header:

+
X-Gitlab-Event: Wiki Page Hook
+

Request Body:

+
{
+  "object_kind": "wiki_page",
+  "user": {
+    "name": "Administrator",
+    "username": "root",
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon"
+  },
+  "project": {
+    "id": 1,
+    "name": "awesome-project",
+    "description": "This is awesome",
+    "web_url": "http://example.com/root/awesome-project",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:root/awesome-project.git",
+    "git_http_url": "http://example.com/root/awesome-project.git",
+    "namespace": "root",
+    "visibility_level": 0,
+    "path_with_namespace": "root/awesome-project",
+    "default_branch": "master",
+    "homepage": "http://example.com/root/awesome-project",
+    "url": "git@example.com:root/awesome-project.git",
+    "ssh_url": "git@example.com:root/awesome-project.git",
+    "http_url": "http://example.com/root/awesome-project.git"
+  },
+  "wiki": {
+    "web_url": "http://example.com/root/awesome-project/wikis/home",
+    "git_ssh_url": "git@example.com:root/awesome-project.wiki.git",
+    "git_http_url": "http://example.com/root/awesome-project.wiki.git",
+    "path_with_namespace": "root/awesome-project.wiki",
+    "default_branch": "master"
+  },
+  "object_attributes": {
+    "title": "Awesome",
+    "content": "awesome content goes here",
+    "format": "markdown",
+    "message": "adding an awesome page to the wiki",
+    "slug": "awesome",
+    "url": "http://example.com/root/awesome-project/wikis/awesome",
+    "action": "create"
+  }
+}
+

+Pipeline events

+

Triggered on status change of Pipeline.

+

Request Header:

+
X-Gitlab-Event: Pipeline Hook
+

Request Body:

+
{
+   "object_kind": "pipeline",
+   "object_attributes":{
+      "id": 31,
+      "ref": "master",
+      "tag": false,
+      "sha": "bcbb5ec396a2c0f828686f14fac9b80b780504f2",
+      "before_sha": "bcbb5ec396a2c0f828686f14fac9b80b780504f2",
+      "status": "success",
+      "stages":[
+         "build",
+         "test",
+         "deploy"
+      ],
+      "created_at": "2016-08-12 15:23:28 UTC",
+      "finished_at": "2016-08-12 15:26:29 UTC",
+      "duration": 63
+   },
+   "user":{
+      "name": "Administrator",
+      "username": "root",
+      "avatar_url": "http://www.gravatar.com/avatar/e32bd13e2add097461cb96824b7a829c?s=80\u0026d=identicon"
+   },
+   "project":{
+      "id": 1,
+      "name": "Gitlab Test",
+      "description": "Atque in sunt eos similique dolores voluptatem.",
+      "web_url": "http://192.168.64.1:3005/gitlab-org/gitlab-test",
+      "avatar_url": null,
+      "git_ssh_url": "git@192.168.64.1:gitlab-org/gitlab-test.git",
+      "git_http_url": "http://192.168.64.1:3005/gitlab-org/gitlab-test.git",
+      "namespace": "Gitlab Org",
+      "visibility_level": 20,
+      "path_with_namespace": "gitlab-org/gitlab-test",
+      "default_branch": "master"
+   },
+   "commit":{
+      "id": "bcbb5ec396a2c0f828686f14fac9b80b780504f2",
+      "message": "test\n",
+      "timestamp": "2016-08-12T17:23:21+02:00",
+      "url": "http://example.com/gitlab-org/gitlab-test/commit/bcbb5ec396a2c0f828686f14fac9b80b780504f2",
+      "author":{
+         "name": "User",
+         "email": "user@gitlab.com"
+      }
+   },
+   "builds":[
+      {
+         "id": 380,
+         "stage": "deploy",
+         "name": "production",
+         "status": "skipped",
+         "created_at": "2016-08-12 15:23:28 UTC",
+         "started_at": null,
+         "finished_at": null,
+         "when": "manual",
+         "manual": true,
+         "user":{
+            "name": "Administrator",
+            "username": "root",
+            "avatar_url": "http://www.gravatar.com/avatar/e32bd13e2add097461cb96824b7a829c?s=80\u0026d=identicon"
+         },
+         "runner": null,
+         "artifacts_file":{
+            "filename": null,
+            "size": null
+         }
+      },
+      {
+         "id": 377,
+         "stage": "test",
+         "name": "test-image",
+         "status": "success",
+         "created_at": "2016-08-12 15:23:28 UTC",
+         "started_at": "2016-08-12 15:26:12 UTC",
+         "finished_at": null,
+         "when": "on_success",
+         "manual": false,
+         "user":{
+            "name": "Administrator",
+            "username": "root",
+            "avatar_url": "http://www.gravatar.com/avatar/e32bd13e2add097461cb96824b7a829c?s=80\u0026d=identicon"
+         },
+         "runner": null,
+         "artifacts_file":{
+            "filename": null,
+            "size": null
+         }
+      },
+      {
+         "id": 378,
+         "stage": "test",
+         "name": "test-build",
+         "status": "success",
+         "created_at": "2016-08-12 15:23:28 UTC",
+         "started_at": "2016-08-12 15:26:12 UTC",
+         "finished_at": "2016-08-12 15:26:29 UTC",
+         "when": "on_success",
+         "manual": false,
+         "user":{
+            "name": "Administrator",
+            "username": "root",
+            "avatar_url": "http://www.gravatar.com/avatar/e32bd13e2add097461cb96824b7a829c?s=80\u0026d=identicon"
+         },
+         "runner": null,
+         "artifacts_file":{
+            "filename": null,
+            "size": null
+         }
+      },
+      {
+         "id": 376,
+         "stage": "build",
+         "name": "build-image",
+         "status": "success",
+         "created_at": "2016-08-12 15:23:28 UTC",
+         "started_at": "2016-08-12 15:24:56 UTC",
+         "finished_at": "2016-08-12 15:25:26 UTC",
+         "when": "on_success",
+         "manual": false,
+         "user":{
+            "name": "Administrator",
+            "username": "root",
+            "avatar_url": "http://www.gravatar.com/avatar/e32bd13e2add097461cb96824b7a829c?s=80\u0026d=identicon"
+         },
+         "runner": null,
+         "artifacts_file":{
+            "filename": null,
+            "size": null
+         }
+      },
+      {
+         "id": 379,
+         "stage": "deploy",
+         "name": "staging",
+         "status": "created",
+         "created_at": "2016-08-12 15:23:28 UTC",
+         "started_at": null,
+         "finished_at": null,
+         "when": "on_success",
+         "manual": false,
+         "user":{
+            "name": "Administrator",
+            "username": "root",
+            "avatar_url": "http://www.gravatar.com/avatar/e32bd13e2add097461cb96824b7a829c?s=80\u0026d=identicon"
+         },
+         "runner": null,
+         "artifacts_file":{
+            "filename": null,
+            "size": null
+         }
+      }
+   ]
+}
+

+Build events

+

Triggered on status change of a Build.

+

Request Header:

+
X-Gitlab-Event: Build Hook
+

Request Body:

+
{
+  "object_kind": "build",
+  "ref": "gitlab-script-trigger",
+  "tag": false,
+  "before_sha": "2293ada6b400935a1378653304eaf6221e0fdb8f",
+  "sha": "2293ada6b400935a1378653304eaf6221e0fdb8f",
+  "build_id": 1977,
+  "build_name": "test",
+  "build_stage": "test",
+  "build_status": "created",
+  "build_started_at": null,
+  "build_finished_at": null,
+  "build_duration": null,
+  "build_allow_failure": false,
+  "project_id": 380,
+  "project_name": "gitlab-org/gitlab-test",
+  "user": {
+    "id": 3,
+    "name": "User",
+    "email": "user@gitlab.com"
+  },
+  "commit": {
+    "id": 2366,
+    "sha": "2293ada6b400935a1378653304eaf6221e0fdb8f",
+    "message": "test\n",
+    "author_name": "User",
+    "author_email": "user@gitlab.com",
+    "status": "created",
+    "duration": null,
+    "started_at": null,
+    "finished_at": null
+  },
+  "repository": {
+    "name": "gitlab_test",
+    "git_ssh_url": "git@192.168.64.1:gitlab-org/gitlab-test.git",
+    "description": "Atque in sunt eos similique dolores voluptatem.",
+    "homepage": "http://192.168.64.1:3005/gitlab-org/gitlab-test",
+    "git_ssh_url": "git@192.168.64.1:gitlab-org/gitlab-test.git",
+    "git_http_url": "http://192.168.64.1:3005/gitlab-org/gitlab-test.git",
+    "visibility_level": 20
+  }
+}
+

+Testing webhooks

+

You can trigger the webhook manually. Sample data from the project will be used.Sample data will take from the project.

+
+

For example: for triggering Push Events your project should have at least one commit.

+
+

Webhook testing

+

+Troubleshoot webhooks

+

Gitlab stores each perform of the webhook. +You can find records for last 2 days in "Recent Deliveries" section on the edit page of each webhook.

+

Recent deliveries

+

In this section you can see HTTP status code (green for 200-299 codes, red for the others, internal error for failed deliveries ), triggered event, a time when the event was called, elapsed time of the request.

+

If you need more information about execution, you can click View details link. +On this page, you can see data that GitLab sends (request headers and body) and data that it received (response headers and body).

+

From this page, you can repeat delivery with the same data by clicking Resend Request button.

+
+

Note: If URL or secret token of the webhook were updated, data will be delivered to the new address.

+
+

+Receiving duplicate or multiple web hook requests triggered by one event

+

When GitLab sends a webhook it expects a response in 10 seconds (set default value). If it does not receive one, it'll retry the webhook. +If the endpoint doesn't send its HTTP response within those 10 seconds, GitLab may decide the hook failed and retry it.

+

If you are receiving multiple requests, you can try increasing the default value to wait for the HTTP response after sending the webhook +by uncommenting or adding the following setting to your /etc/gitlab/gitlab.rb:

+
gitlab_rails['webhook_timeout'] = 10
+

+Example webhook receiver

+

If you want to see GitLab's webhooks in action for testing purposes you can use +a simple echo script running in a console session. For the following script to +work you need to have Ruby installed.

+

Save the following file as print_http_body.rb:

+
require 'webrick'
+
+server = WEBrick::HTTPServer.new(:Port => ARGV.first)
+server.mount_proc '/' do |req, res|
+  puts req.body
+end
+
+trap 'INT' do
+  server.shutdown
+end
+server.start
+

Pick an unused port (e.g. 8000) and start the script: ruby print_http_body.rb 8000. Then add your server as a webhook receiver in GitLab as +http://my.host:8000/.

+

When you press 'Test' in GitLab, you should see something like this in the +console:

+
{"before":"077a85dd266e6f3573ef7e9ef8ce3343ad659c4e","after":"95cd4a99e93bc4bbabacfa2cd10e6725b1403c60",<SNIP>}
+example.com - - [14/May/2014:07:45:26 EDT] "POST / HTTP/1.1" 200 0
+- -> /
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/decd3d4fa4a19afbb92094649141d7e0 b/docker/tanner/snare/dist/pages/1/decd3d4fa4a19afbb92094649141d7e0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/decd3d4fa4a19afbb92094649141d7e0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/df9480008586cacc7484f2202078473e b/docker/tanner/snare/dist/pages/1/df9480008586cacc7484f2202078473e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/df9480008586cacc7484f2202078473e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e02a5c399f42179cb60df768590ae8a0 b/docker/tanner/snare/dist/pages/1/e02a5c399f42179cb60df768590ae8a0 new file mode 100644 index 000000000..4c59e04db --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e02a5c399f42179cb60df768590ae8a0 @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + +Index · Profile · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+User account

+

When signed into their GitLab account, users can customize their +experience according to the best approach to their cases.

+

+Signing in

+

There are several ways to sign into your GitLab account. +See the authentication topic for more details.

+

+User profile

+

Your profile is available from the up-right corner menu bar (user's avatar) > Profile, +or from https://example.gitlab.com/username.

+

On your profile page, you will see the following information:

+
    +
  • Personal information
  • +
  • Activity stream: see your activity streamline and the history of your contributions
  • +
  • Groups: groups you're a member of
  • +
  • Contributed projects: projects you contributed to
  • +
  • Personal projects: your personal projects (respecting the project's visibility level)
  • +
  • Snippets: your personal code snippets +
  • +
+

+Profile settings

+

You can edit your account settings by navigating from the up-right corner menu bar +(user's avatar) > Settings, or visiting https://example.gitlab.com/profile.

+

From there, you can:

+ +

+Changing your username

+

Your username is a unique namespace +related to your user ID. Changing it can have unintended side effects, read +how redirects will behave +before proceeding.

+

To change your username:

+
    +
  1. Navigate to your profile's Settings > Account.
  2. +
  3. Enter a new username under "Change username".
  4. +
  5. Hit Update username.
  6. +
+

CAUTION: Caution: +It is currently not possible to change your username if it contains a +project with Container Registry tags, +because the project cannot be moved.

+

TIP: Tip: +If you want to retain ownership over the original namespace and +protect the URL redirects, then instead of changing a group's path or renaming a +username, you can create a new group and transfer projects to it. +Alternatively, you can follow this detailed procedure from the GitLab Team Handbook +which also covers the case where you have projects hosted with +GitLab Pages.

+

+Troubleshooting

+

+Why do I keep getting signed out?

+

When signing in to the main GitLab application, a _gitlab_session cookie is +set. _gitlab_session is cleared client-side when you close your browser +and expires after "Application settings -> Session duration (minutes)"/session_expire_delay +(defaults to 10080 minutes = 7 days).

+

When signing in to the main GitLab application, you can also check the +"Remember me" option which sets the remember_user_token +cookie (via devise). +remember_user_token expires after +config/initializers/devise.rb -> config.remember_for (defaults to 2 weeks).

+

When the _gitlab_session expires or isn't available, GitLab uses the remember_user_token +to get you a new _gitlab_session and keep you signed in through browser restarts.

+

After your remember_user_token expires and your _gitlab_session is cleared/expired, +you will be asked to sign in again to verify your identity (which is for security reasons).

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/e053d368136b65c84c77410d3f838c1c b/docker/tanner/snare/dist/pages/1/e053d368136b65c84c77410d3f838c1c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e053d368136b65c84c77410d3f838c1c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e0d8cc7faadbeaaad4a5bff86735bff5 b/docker/tanner/snare/dist/pages/1/e0d8cc7faadbeaaad4a5bff86735bff5 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e0d8cc7faadbeaaad4a5bff86735bff5 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e12a500874c603ac9f1fc0b0ff0fbf29 b/docker/tanner/snare/dist/pages/1/e12a500874c603ac9f1fc0b0ff0fbf29 new file mode 100644 index 000000000..3d2fcee6c --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e12a500874c603ac9f1fc0b0ff0fbf29 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/e130400a3a29226be1f67ee77f314e44 b/docker/tanner/snare/dist/pages/1/e130400a3a29226be1f67ee77f314e44 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e130400a3a29226be1f67ee77f314e44 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e15a3a23d9737386114b79215c06d98e b/docker/tanner/snare/dist/pages/1/e15a3a23d9737386114b79215c06d98e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e15a3a23d9737386114b79215c06d98e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e24d86d1d1d87023868ceadf56114bd9 b/docker/tanner/snare/dist/pages/1/e24d86d1d1d87023868ceadf56114bd9 new file mode 100644 index 000000000..d6af40713 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e24d86d1d1d87023868ceadf56114bd9 @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + +Readme · Legal · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Legal

+

Please read through the GitLab License Agreement.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/e292cfa271fc1493006b6857e6315866 b/docker/tanner/snare/dist/pages/1/e292cfa271fc1493006b6857e6315866 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e292cfa271fc1493006b6857e6315866 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e2a666ebecc3f0870a889cea6e13307d b/docker/tanner/snare/dist/pages/1/e2a666ebecc3f0870a889cea6e13307d new file mode 100644 index 000000000..90cb35f2e --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e2a666ebecc3f0870a889cea6e13307d @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + +Groups · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

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

Below you will find all the groups that are public.

+

You can easily contribute to them by requesting to join these groups.

+
+
+
No public groups
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/e2b578e84743d798b53f058035ce24b3 b/docker/tanner/snare/dist/pages/1/e2b578e84743d798b53f058035ce24b3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e2b578e84743d798b53f058035ce24b3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e2e938d34fd0b8decb74a2daa4084426 b/docker/tanner/snare/dist/pages/1/e2e938d34fd0b8decb74a2daa4084426 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e2e938d34fd0b8decb74a2daa4084426 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e2f08e671a0acd2195a933e87cc492e6 b/docker/tanner/snare/dist/pages/1/e2f08e671a0acd2195a933e87cc492e6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e2f08e671a0acd2195a933e87cc492e6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e2fb5fc64b77a3c35e794d100cd149fe b/docker/tanner/snare/dist/pages/1/e2fb5fc64b77a3c35e794d100cd149fe new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e2fb5fc64b77a3c35e794d100cd149fe @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e327668591f99fd2bddb8cd3b8a29e90 b/docker/tanner/snare/dist/pages/1/e327668591f99fd2bddb8cd3b8a29e90 new file mode 100644 index 000000000..196a050d0 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e327668591f99fd2bddb8cd3b8a29e90 @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/e32a310a7b6e8e568faecfed2f8b5adc b/docker/tanner/snare/dist/pages/1/e32a310a7b6e8e568faecfed2f8b5adc new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e32a310a7b6e8e568faecfed2f8b5adc @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e3402bb117529214a153ddaa53669455 b/docker/tanner/snare/dist/pages/1/e3402bb117529214a153ddaa53669455 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e3402bb117529214a153ddaa53669455 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e3e8b67631f2fd7b5c4864fc1f73b4c0 b/docker/tanner/snare/dist/pages/1/e3e8b67631f2fd7b5c4864fc1f73b4c0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e3e8b67631f2fd7b5c4864fc1f73b4c0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e46575c56103dcc59912e7e6bd5af1dd b/docker/tanner/snare/dist/pages/1/e46575c56103dcc59912e7e6bd5af1dd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e46575c56103dcc59912e7e6bd5af1dd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e4700221f51c9eca76bee1277d86e5a0 b/docker/tanner/snare/dist/pages/1/e4700221f51c9eca76bee1277d86e5a0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e4700221f51c9eca76bee1277d86e5a0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e4d0b5f02282a09c62e848328952d4e0 b/docker/tanner/snare/dist/pages/1/e4d0b5f02282a09c62e848328952d4e0 new file mode 100644 index 000000000..a33be72c7 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e4d0b5f02282a09c62e848328952d4e0 @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + +Schedules · Pipelines · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Pipeline Schedules

+
+

Notes:

+
+ +

Pipeline schedules can be used to run a pipeline at specific intervals, for example every +month on the 22nd for a certain branch.

+

+Using Pipeline schedules

+

In order to schedule a pipeline:

+
    +
  1. Navigate to your project's CI / CD ➔ Schedules and click the +New Schedule button.
  2. +
  3. Fill in the form
  4. +
  5. Hit Save pipeline schedule for the changes to take effect.
  6. +
+

New Schedule Form

+
+

Attention: +The pipelines won't be executed precisely, because schedules are handled by +Sidekiq, which runs according to its interval. +See advanced admin configuration for more +information.

+
+

In the Schedules index page you can see a list of the pipelines that are +scheduled to run. The next run is automatically calculated by the server GitLab +is installed on.

+

Schedules list

+

+Running a scheduled pipeline manually

+
+

Introduced in GitLab 10.4.

+
+

To trigger a pipeline schedule manually, click the "Play" button:

+

Play Pipeline Schedule

+

This will schedule a background job to run the pipeline schedule. A flash +message will provide a link to the CI/CD Pipeline index page.

+

To help avoid abuse, users are rate limited to triggering a pipeline once per +minute.

+

+Making use of scheduled pipeline variables

+
+

Introduced in GitLab 9.4.

+
+

You can pass any number of arbitrary variables and they will be available in +GitLab CI so that they can be used in your .gitlab-ci.yml file.

+

Scheduled pipeline variables

+

+Using only and except

+

To configure that a job can be executed only when the pipeline has been +scheduled (or the opposite), you can use +only and except configuration keywords.

+
job:on-schedule:
+  only:
+    - schedules
+  script:
+    - make world
+
+job:
+  except:
+    - schedules
+  script:
+    - make build
+

+Taking ownership

+

Pipelines are executed as a user, who owns a schedule. This influences what +projects and other resources the pipeline has access to. If a user does not own +a pipeline, you can take ownership by clicking the Take ownership button. +The next time a pipeline is scheduled, your credentials will be used.

+

Schedules list

+
+

Note: +When the owner of the schedule doesn't have the ability to create pipelines +anymore, due to e.g., being blocked or removed from the project, or lacking +the permission to run on protected branches or tags. When this happened, the +schedule is deactivated. Another user can take ownership and activate it, so +the schedule can be run again.

+
+

+Advanced admin configuration

+

The pipelines won't be executed precisely, because schedules are handled by +Sidekiq, which runs according to its interval. For example, if you set a +schedule to create a pipeline every minute (* * * * *) and the Sidekiq worker +runs on 00:00 and 12:00 every day (0 */12 * * *), only 2 pipelines will be +created per day. To change the Sidekiq worker's frequency, you have to edit the +pipeline_schedule_worker_cron value in your gitlab.rb and restart GitLab. +For GitLab.com, you can check the dedicated settings page. If you +don't have admin access to the server, ask your administrator.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/e5a0f3bc8e79a5ddba1dd530664f153a b/docker/tanner/snare/dist/pages/1/e5a0f3bc8e79a5ddba1dd530664f153a new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e5a0f3bc8e79a5ddba1dd530664f153a @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e5e74c5f3324758f828b04729ba368cf b/docker/tanner/snare/dist/pages/1/e5e74c5f3324758f828b04729ba368cf new file mode 100644 index 000000000..f1c4b5c69 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e5e74c5f3324758f828b04729ba368cf @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/e5f7869e0d297def3d34be08df0eb31c b/docker/tanner/snare/dist/pages/1/e5f7869e0d297def3d34be08df0eb31c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e5f7869e0d297def3d34be08df0eb31c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e5f850dce83440a4de7752fec90738cb b/docker/tanner/snare/dist/pages/1/e5f850dce83440a4de7752fec90738cb new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e5f850dce83440a4de7752fec90738cb @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e6ebf3f4caacd8b1fab1772aa577f664 b/docker/tanner/snare/dist/pages/1/e6ebf3f4caacd8b1fab1772aa577f664 new file mode 100644 index 000000000..2cfff5763 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e6ebf3f4caacd8b1fab1772aa577f664 @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + +Instance Configuration · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

Instance Configuration

+

+In this page you will find information about the settings that are used in your current instance. +

+

+Table of contents +

+

+

+SSH host keys fingerprints +

+

+Below are the fingerprints for the current instance SSH host keys. +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
AlgorithmMD5SHA256
ECDSA +06:2f:c7:54:b8:89:2e:22:de:4a:0c:ce:53:6c:7b:dc + +e2a20fad26eebff66c77b2b238733ce4bc879ce0a85f8cd550fcbf0b70277df2 +
ED25519 +bd:17:fe:04:d0:45:f0:ec:de:d4:8c:cf:a8:a1:82:5a + +35baca0b4d8fcfc8b61942ef8ad628415cbca46e31af187f39715f0743ed7f34 +
RSA +5b:47:54:c1:05:71:d8:98:7d:95:e1:29:4a:0d:83:f5 + +e69f32a7d8e63e1f36acad8bdb08e46b287b65beb0cc37ea3902476f2801b66d +
+
+

+GitLab Pages +

+

+Below are the settings for +Gitlab Pages. + +

+
+ + + + + + + + + + + + + + + + + + + + + +
Setting172.20.254.127
Domain Name +example.com +
IP Address +93.184.216.34 +
Port +80 +
+
+
+

+The maximum size of your Pages site is regulated by the artifacts maximum +size which is part of GitLab CI. + +

+

+GitLab CI +

+

+Below are the current settings regarding +GitLab CI. + +

+
+ + + + + + + + + + + + + + + +
Setting172.20.254.127Default
Artifacts maximum size100 MB100 MB
+
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/e6fd317f6a3fe9b42c7d46b8eb46a627 b/docker/tanner/snare/dist/pages/1/e6fd317f6a3fe9b42c7d46b8eb46a627 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e6fd317f6a3fe9b42c7d46b8eb46a627 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e7a37d24d6ed71a4b4b84316233a2e3c b/docker/tanner/snare/dist/pages/1/e7a37d24d6ed71a4b4b84316233a2e3c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e7a37d24d6ed71a4b4b84316233a2e3c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e7c6947370d0708ced8fb2756c1233a4 b/docker/tanner/snare/dist/pages/1/e7c6947370d0708ced8fb2756c1233a4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e7c6947370d0708ced8fb2756c1233a4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e7dd98d7b1e93294fb556216d27e5247 b/docker/tanner/snare/dist/pages/1/e7dd98d7b1e93294fb556216d27e5247 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e7dd98d7b1e93294fb556216d27e5247 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e84fae9388094564e53c934e51b5aab0 b/docker/tanner/snare/dist/pages/1/e84fae9388094564e53c934e51b5aab0 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e84fae9388094564e53c934e51b5aab0 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e89dc10b197ce65f2d938df5bb3e1c79 b/docker/tanner/snare/dist/pages/1/e89dc10b197ce65f2d938df5bb3e1c79 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e89dc10b197ce65f2d938df5bb3e1c79 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/e94e6495d1179d674587761fa4edd19e b/docker/tanner/snare/dist/pages/1/e94e6495d1179d674587761fa4edd19e new file mode 100644 index 000000000..be915ace5 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e94e6495d1179d674587761fa4edd19e @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/e98dcb044b6bec51f8e909404c9a8e09 b/docker/tanner/snare/dist/pages/1/e98dcb044b6bec51f8e909404c9a8e09 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/e98dcb044b6bec51f8e909404c9a8e09 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ea12cc3f2cf3924d3478991062f978ea b/docker/tanner/snare/dist/pages/1/ea12cc3f2cf3924d3478991062f978ea new file mode 100644 index 000000000..bbe265be3 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ea12cc3f2cf3924d3478991062f978ea @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/ea47120004af61f1c7db4cc5d28560b9 b/docker/tanner/snare/dist/pages/1/ea47120004af61f1c7db4cc5d28560b9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ea47120004af61f1c7db4cc5d28560b9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/eacc62ee127a34b03e3a692f838fed6b b/docker/tanner/snare/dist/pages/1/eacc62ee127a34b03e3a692f838fed6b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/eacc62ee127a34b03e3a692f838fed6b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/eb362d18ab273ca7d08e61cb62a81f9e b/docker/tanner/snare/dist/pages/1/eb362d18ab273ca7d08e61cb62a81f9e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/eb362d18ab273ca7d08e61cb62a81f9e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/eb675fa53868a5e4e80361366eb98e92 b/docker/tanner/snare/dist/pages/1/eb675fa53868a5e4e80361366eb98e92 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/eb675fa53868a5e4e80361366eb98e92 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ec859478246e309d2664077b7944cd85 b/docker/tanner/snare/dist/pages/1/ec859478246e309d2664077b7944cd85 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ec859478246e309d2664077b7944cd85 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ec900496c475ccdefb801c9739fc8a27 b/docker/tanner/snare/dist/pages/1/ec900496c475ccdefb801c9739fc8a27 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ec900496c475ccdefb801c9739fc8a27 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/eca467826570121b9e2a692583a5f256 b/docker/tanner/snare/dist/pages/1/eca467826570121b9e2a692583a5f256 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/eca467826570121b9e2a692583a5f256 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ecf5000965ce5f14c264c4d74db9e4ff b/docker/tanner/snare/dist/pages/1/ecf5000965ce5f14c264c4d74db9e4ff new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ecf5000965ce5f14c264c4d74db9e4ff @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ed08718d697889221dd3ec9d4323ec39 b/docker/tanner/snare/dist/pages/1/ed08718d697889221dd3ec9d4323ec39 new file mode 100644 index 000000000..56f01b684 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ed08718d697889221dd3ec9d4323ec39 @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + +Snippets · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+
+
    +
  • +
    Nothing here.
    +
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/edf64fe22b89913bf6cfaabcda4a5392 b/docker/tanner/snare/dist/pages/1/edf64fe22b89913bf6cfaabcda4a5392 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/edf64fe22b89913bf6cfaabcda4a5392 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ee1fd9114d7ae4518ccca007164d1d5e b/docker/tanner/snare/dist/pages/1/ee1fd9114d7ae4518ccca007164d1d5e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ee1fd9114d7ae4518ccca007164d1d5e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/eea645d47f2710e31c12a19cf41476ae b/docker/tanner/snare/dist/pages/1/eea645d47f2710e31c12a19cf41476ae new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/eea645d47f2710e31c12a19cf41476ae @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/eea676c77a9fbaf1270bb45b2821a126 b/docker/tanner/snare/dist/pages/1/eea676c77a9fbaf1270bb45b2821a126 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/eea676c77a9fbaf1270bb45b2821a126 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/eee301ddeaae3d8fcf4f5a309fd54936 b/docker/tanner/snare/dist/pages/1/eee301ddeaae3d8fcf4f5a309fd54936 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/eee301ddeaae3d8fcf4f5a309fd54936 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ef6c9be2ceb298039d4478d7a2c8f16e b/docker/tanner/snare/dist/pages/1/ef6c9be2ceb298039d4478d7a2c8f16e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ef6c9be2ceb298039d4478d7a2c8f16e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/efaf4065f993aeb2fda107599240495c b/docker/tanner/snare/dist/pages/1/efaf4065f993aeb2fda107599240495c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/efaf4065f993aeb2fda107599240495c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f09af6c900397ea11a14f0e5762d426c b/docker/tanner/snare/dist/pages/1/f09af6c900397ea11a14f0e5762d426c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f09af6c900397ea11a14f0e5762d426c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f17e65e68f86c8bb973cae5856974cd4 b/docker/tanner/snare/dist/pages/1/f17e65e68f86c8bb973cae5856974cd4 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f17e65e68f86c8bb973cae5856974cd4 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f188c51a7618907d150b836ef6c16858 b/docker/tanner/snare/dist/pages/1/f188c51a7618907d150b836ef6c16858 new file mode 100644 index 000000000..a4c3c9ac4 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f188c51a7618907d150b836ef6c16858 @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/f1c1da72934b831ec4c67f9a8a9d805d b/docker/tanner/snare/dist/pages/1/f1c1da72934b831ec4c67f9a8a9d805d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f1c1da72934b831ec4c67f9a8a9d805d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f1d117198259f9e5aa4a54213903068f b/docker/tanner/snare/dist/pages/1/f1d117198259f9e5aa4a54213903068f new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f1d117198259f9e5aa4a54213903068f @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f2ab453439542da660886979072546ed b/docker/tanner/snare/dist/pages/1/f2ab453439542da660886979072546ed new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f2ab453439542da660886979072546ed @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f2d29a156e411a5f44eeb15fa77adf98 b/docker/tanner/snare/dist/pages/1/f2d29a156e411a5f44eeb15fa77adf98 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f2d29a156e411a5f44eeb15fa77adf98 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f2fc1da64df836643aced59cd9802c55 b/docker/tanner/snare/dist/pages/1/f2fc1da64df836643aced59cd9802c55 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f2fc1da64df836643aced59cd9802c55 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f398ac5cdc2994ff7e93bd59055784c9 b/docker/tanner/snare/dist/pages/1/f398ac5cdc2994ff7e93bd59055784c9 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f398ac5cdc2994ff7e93bd59055784c9 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f3c19237fed852e3503e0c0fe682fd33 b/docker/tanner/snare/dist/pages/1/f3c19237fed852e3503e0c0fe682fd33 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f3c19237fed852e3503e0c0fe682fd33 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f3e77436ab29b5b636ed11b9ae724e63 b/docker/tanner/snare/dist/pages/1/f3e77436ab29b5b636ed11b9ae724e63 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f3e77436ab29b5b636ed11b9ae724e63 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f3fc6e4522278a232da6f28c11066fe6 b/docker/tanner/snare/dist/pages/1/f3fc6e4522278a232da6f28c11066fe6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f3fc6e4522278a232da6f28c11066fe6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f44c99ce229e9b3130ea8216a502b193 b/docker/tanner/snare/dist/pages/1/f44c99ce229e9b3130ea8216a502b193 new file mode 100644 index 000000000..4b0fe069a --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f44c99ce229e9b3130ea8216a502b193 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/f45997945eff3edcdec2aca9fb049759 b/docker/tanner/snare/dist/pages/1/f45997945eff3edcdec2aca9fb049759 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f45997945eff3edcdec2aca9fb049759 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f4a8320e5c08b80903242dbe1a374931 b/docker/tanner/snare/dist/pages/1/f4a8320e5c08b80903242dbe1a374931 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f4a8320e5c08b80903242dbe1a374931 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f4c3fbd3c3c870a5a0ce91d5530c060b b/docker/tanner/snare/dist/pages/1/f4c3fbd3c3c870a5a0ce91d5530c060b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f4c3fbd3c3c870a5a0ce91d5530c060b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f4cc057b05f2c0ede8974476cfd3e0dd b/docker/tanner/snare/dist/pages/1/f4cc057b05f2c0ede8974476cfd3e0dd new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f4cc057b05f2c0ede8974476cfd3e0dd @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f4ec84536621028d2587e9d2e4df5463 b/docker/tanner/snare/dist/pages/1/f4ec84536621028d2587e9d2e4df5463 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f4ec84536621028d2587e9d2e4df5463 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f51fc8c27fccbdc2a5bb1024938713c3 b/docker/tanner/snare/dist/pages/1/f51fc8c27fccbdc2a5bb1024938713c3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f51fc8c27fccbdc2a5bb1024938713c3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f5b7ee527b5bdbc1c4528746a0416c39 b/docker/tanner/snare/dist/pages/1/f5b7ee527b5bdbc1c4528746a0416c39 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f5b7ee527b5bdbc1c4528746a0416c39 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f5bb2f13cf9cae81835cba270eda1eb1 b/docker/tanner/snare/dist/pages/1/f5bb2f13cf9cae81835cba270eda1eb1 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f5bb2f13cf9cae81835cba270eda1eb1 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f5fb2368ea9df250ed67734f2c60b899 b/docker/tanner/snare/dist/pages/1/f5fb2368ea9df250ed67734f2c60b899 new file mode 100644 index 000000000..cb413b999 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f5fb2368ea9df250ed67734f2c60b899 @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + +GitLab + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/f617431cccd0d9c49a95bb8106681502 b/docker/tanner/snare/dist/pages/1/f617431cccd0d9c49a95bb8106681502 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f617431cccd0d9c49a95bb8106681502 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f6452c8c30d1feabfc5dbd57071703ab b/docker/tanner/snare/dist/pages/1/f6452c8c30d1feabfc5dbd57071703ab new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f6452c8c30d1feabfc5dbd57071703ab @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f69c9c500d97c3de9ad118236303f6f3 b/docker/tanner/snare/dist/pages/1/f69c9c500d97c3de9ad118236303f6f3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f69c9c500d97c3de9ad118236303f6f3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f6ea83288ecf61fb2764b10478d95ff2 b/docker/tanner/snare/dist/pages/1/f6ea83288ecf61fb2764b10478d95ff2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f6ea83288ecf61fb2764b10478d95ff2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f7219f5fe057f814133ffcdde643fe14 b/docker/tanner/snare/dist/pages/1/f7219f5fe057f814133ffcdde643fe14 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f7219f5fe057f814133ffcdde643fe14 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f7857afb26f841c24cd84d196fd0bea6 b/docker/tanner/snare/dist/pages/1/f7857afb26f841c24cd84d196fd0bea6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f7857afb26f841c24cd84d196fd0bea6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f7a135db44be5c2adb44db4f3939581a b/docker/tanner/snare/dist/pages/1/f7a135db44be5c2adb44db4f3939581a new file mode 100644 index 000000000..b17cdea2f --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f7a135db44be5c2adb44db4f3939581a @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + +Readme · Gitlab-basics · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+ +
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/f7b3838685adbf51015cb2604a289796 b/docker/tanner/snare/dist/pages/1/f7b3838685adbf51015cb2604a289796 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f7b3838685adbf51015cb2604a289796 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f827c9d143a90d758dbd881d1c0a4d98 b/docker/tanner/snare/dist/pages/1/f827c9d143a90d758dbd881d1c0a4d98 new file mode 100644 index 000000000..2d36776dd --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f827c9d143a90d758dbd881d1c0a4d98 @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + +Index · Subgroups · Group · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Subgroups

+
+

Notes:

+
+ +

With subgroups (aka nested groups or hierarchical groups) you can have +up to 20 levels of nested groups, which among other things can help you to:

+
    +
  • +Separate internal / external organizations. Since every group +can have its own visibility level, you are able to host groups for different +purposes under the same umbrella.
  • +
  • +Organize large projects. For large projects, subgroups makes it +potentially easier to separate permissions on parts of the source code.
  • +
  • +Make it easier to manage people and control visibility. Give people +different permissions depending on their group membership.
  • +
+

+Database Requirements

+

Nested groups are only supported when you use PostgreSQL. Supporting nested +groups on MySQL in an efficient way is not possible due to MySQL's limitations. +See the following links for more information:

+ +

+Overview

+

A group can have many subgroups inside it, and at the same time a group can have +only 1 parent group. It resembles a directory behavior or a nested items list:

+
    +
  • Group 1 +
      +
    • Group 1.1
    • +
    • Group 1.2 +
        +
      • Group 1.2.1
      • +
      • Group 1.2.2 +
          +
        • Group 1.2.2.1
        • +
        +
      • +
      +
    • +
    +
  • +
+

In a real world example, imagine maintaining a GNU/Linux distribution with the +first group being the name of the distro and subsequent groups split like:

+
    +
  • Organization Group - GNU/Linux distro +
      +
    • Category Subgroup - Packages +
        +
      • (project) Package01
      • +
      • (project) Package02
      • +
      +
    • +
    • Category Subgroup - Software +
        +
      • (project) Core
      • +
      • (project) CLI
      • +
      • (project) Android app
      • +
      • (project) iOS app
      • +
      +
    • +
    • Category Subgroup - Infra tools +
        +
      • (project) Ansible playbooks
      • +
      +
    • +
    +
  • +
+

Another example of GitLab as a company would be the following:

+
    +
  • Organization Group - GitLab +
      +
    • Category Subgroup - Marketing +
        +
      • (project) Design
      • +
      • (project) General
      • +
      +
    • +
    • Category Subgroup - Software +
        +
      • (project) GitLab CE
      • +
      • (project) GitLab EE
      • +
      • (project) Omnibus GitLab
      • +
      • (project) GitLab Runner
      • +
      • (project) GitLab Pages daemon
      • +
      +
    • +
    • Category Subgroup - Infra tools +
        +
      • (project) Chef cookbooks
      • +
      +
    • +
    • Category Subgroup - Executive team
    • +
    +
  • +
+
+

The maximum nested groups a group can have, including the first one in the +hierarchy, is 21.

+

Things like transferring or importing a project inside nested groups, work like +when performing these actions the traditional way with the group/project +structure.

+

+Creating a subgroup

+
+

Notes:

+
+
    +
  • You need to be an Owner of a group in order to be able to create +a subgroup. For more information check the permissions table.
  • +
  • For a list of words that are not allowed to be used as group names see the +reserved names.
  • +
  • Users can always create subgroups if they are explicitly added as an Owner to +a parent group even if group creation is disabled by an administrator in their +settings.
  • +
+

To create a subgroup:

+
    +
  1. +

    In the group's dashboard expand the New project split button, select +New subgroup and click the New subgroup button.

    +

    Subgroups page

    +
  2. +
  3. +

    Create a new group like you would normally do. Notice that the parent group +namespace is fixed under Group path. The visibility level can differ from +the parent group.

    +

    Subgroups page

    +
  4. +
  5. +

    Click the Create group button and you will be taken to the new group's +dashboard page.

    +
  6. +
+

Follow the same process to create any subsequent groups.

+

+Membership

+

When you add a member to a subgroup, they inherit the membership and permission +level from the parent group. This model allows access to nested groups if you +have membership in one of its parents.

+

The group permissions for a member can be changed only by Owners and only on +the Members page of the group the member was added.

+

You can tell if a member has inherited the permissions from a parent group by +looking at the group's Members page.

+

Group members page

+

From the image above, we can deduct the following things:

+
    +
  • There are 5 members that have access to the group four +
  • +
  • User0 is a Reporter and has inherited their permissions from group one +which is above the hierarchy of group four +
  • +
  • User1 is a Developer and has inherited their permissions from group +one/two which is above the hierarchy of group four +
  • +
  • User2 is a Developer and has inherited their permissions from group +one/two/three which is above the hierarchy of group four +
  • +
  • For User3 there is no indication of a parent group, therefore they belong to +group four, the one we're inspecting
  • +
  • Administrator is the Owner and member of all subgroups and for that reason, +same as User3, there is no indication of an ancestor group
  • +
+

+Overriding the ancestor group membership

+
+

Note: +You need to be an Owner of a group in order to be able to add members to it.

+
+

To override a user's membership of an ancestor group (the first group they were +added to), simply add the user in the new subgroup again, but with different +permissions.

+

For example, if User0 was first added to group group-1/group-1-1 with Developer +permissions, then they will inherit those permissions in every other subgroup +of group-1/group-1-1. To give them Maintainer access to group-1/group-1-1/group1-1-1, +you would add them again in that group as Maintainer. Removing them from that group, +the permissions will fallback to those of the ancestor group.

+

+Mentioning subgroups

+

Mentioning groups (@group) in issues, commits and merge requests, would +notify all members of that group. Now with subgroups, there is a more granular +support if you want to split your group's structure. Mentioning works as before +and you can choose the group of people to be notified.

+

Mentioning subgroups

+

+Limitations

+

Here's a list of what you can't do with subgroups:

+
    +
  • +GitLab Pages are not currently working for +projects hosted under a subgroup. That means that only projects hosted under +the first parent group will work.
  • +
  • Group level labels don't work in subgroups / sub projects
  • +
  • It is not possible to share a project with a group that's an ancestor of +the group the project is in. That means you can only share as you walk down +the hierarchy. For example, group/subgroup01/project cannot be shared +with group, but can be shared with group/subgroup02 or +group/subgroup01/subgroup03.
  • +
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/f8792e9730cfe820cb359dd9a550b808 b/docker/tanner/snare/dist/pages/1/f8792e9730cfe820cb359dd9a550b808 new file mode 100644 index 000000000..f7a55f2a5 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f8792e9730cfe820cb359dd9a550b808 @@ -0,0 +1,2 @@ +!function(e){function r(r){for(var n,f,c=r[0],i=r[1],d=r[2],s=0,b=[];s + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + diff --git a/docker/tanner/snare/dist/pages/1/f96bdb567f927b1d8012debeeaa5f2ca b/docker/tanner/snare/dist/pages/1/f96bdb567f927b1d8012debeeaa5f2ca new file mode 100644 index 000000000..6021380fb --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f96bdb567f927b1d8012debeeaa5f2ca @@ -0,0 +1,716 @@ + + + + + + + + + + + + + + + + + + +Index · Documentation · Development · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+GitLab Documentation guidelines

+
    +
  • +General Documentation: written by the developers responsible by creating features. Should be submitted in the same merge request containing code. Feature proposals (by GitLab contributors) should also be accompanied by its respective documentation. They can be later improved by PMs and Technical Writers.
  • +
  • +Technical Articles: written by any GitLab Team member, GitLab contributors, or Community Writers.
  • +
  • +Indexes per topic: initially prepared by the Technical Writing Team, and kept up-to-date by developers and PMs in the same merge request containing code. They gather all resources for that topic in a single page (user and admin documentation, articles, and third-party docs).
  • +
+

+Contributing to docs

+

Whenever a feature is changed, updated, introduced, or deprecated, the merge +request introducing these changes must be accompanied by the documentation +(either updating existing ones or creating new ones). This is also valid when +changes are introduced to the UI.

+

The one responsible for writing the first piece of documentation is the developer who +wrote the code. It's the job of the Product Manager to ensure all features are +shipped with its docs, whether is a small or big change. At the pace GitLab evolves, +this is the only way to keep the docs up-to-date. If you have any questions about it, +ask a Technical Writer. Otherwise, when your content is ready, assign one of +them to review it for you.

+

We use the monthly release blog post as a changelog checklist to ensure everything +is documented.

+

Whenever you submit a merge request for the documentation, use the documentation MR description template.

+

Please check the documentation workflow before getting started.

+

+Documentation structure

+
    +
  • Overview and use cases: what it is, why it is necessary, why one would use it
  • +
  • Requirements: what do we need to get started
  • +
  • Tutorial: how to set it up, how to use it
  • +
+

Always link a new document from its topic-related index, otherwise, it will +not be included it in the documentation site search.

+

Note: to be extended.

+

+Feature overview and use cases

+

Every major feature (regardless if present in GitLab Community or Enterprise editions) +should present, at the beginning of the document, two main sections: overview and +use cases. Every GitLab EE-only feature should also contain these sections.

+

Overview: as the name suggests, the goal here is to provide an overview of the feature. +Describe what is it, what it does, why it is important/cool/nice-to-have, +what problem it solves, and what you can do with this feature that you couldn't +do before.

+

Use cases: provide at least two, ideally three, use cases for every major feature. +You should answer this question: what can you do with this feature/change? Use cases +are examples of how this feature or change can be used in real life.

+

Examples:

+ +

Note that if you don't have anything to add between the doc title (<h1>) and +the header ## Overview, you can omit the header, but keep the content of the +overview there.

+
+

Overview and use cases are required to every Enterprise Edition feature, +and for every major feature present in Community Edition.

+
+

+Markdown and styles

+

Currently GitLab docs use Redcarpet as markdown engine, but there's an open discussion for implementing Kramdown in the near future.

+

All the docs follow the documentation style guidelines.

+

+Documentation directory structure

+

The documentation is structured based on the GitLab UI structure itself, +separated by user, +administrator, and contributor.

+

In order to have a solid site structure for our documentation, +all docs should be linked. Every new document should be cross-linked to its related documentation, and linked from its topic-related index, when existent.

+

The directories /workflow/, /gitlab-basics/, /university/, and /articles/ have +been deprecated and the majority their docs have been moved to their correct location +in small iterations. Please don't create new docs in these folders.

+

+Location and naming documents

+

The documentation hierarchy can be vastly improved by providing a better layout +and organization of directories.

+

Having a structured document layout, we will be able to have meaningful URLs +like docs.gitlab.com/user/project/merge_requests/index.html. With this pattern, +you can immediately tell that you are navigating a user related documentation +and is about the project and its merge requests.

+

Do not create summaries of similar types of content (e.g. an index of all articles, videos, etc.), +rather organize content by its subject (e.g. everything related to CI goes together) +and cross-link between any related content.

+

The table below shows what kind of documentation goes where.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DirectoryWhat belongs here
doc/user/User related documentation. Anything that can be done within the GitLab UI goes here including /admin.
doc/administration/Documentation that requires the user to have access to the server where GitLab is installed. The admin settings that can be accessed via GitLab's interface go under doc/user/admin_area/.
doc/api/API related documentation.
doc/development/Documentation related to the development of GitLab. Any styleguides should go here.
doc/legal/Legal documents about contributing to GitLab.
doc/install/Probably the most visited directory, since installation.md is there. Ideally this should go under doc/administration/, but it's best to leave it as-is in order to avoid confusion (still debated though).
doc/update/Same with doc/install/. Should be under administration/, but this is a well known location, better leave as-is, at least for now.
doc/topics/Indexes per Topic (doc/topics/topic-name/index.md): all resources for that topic (user and admin documentation, articles, and third-party docs)
+
+

General rules:

+
    +
  1. The correct naming and location of a new document, is a combination +of the relative URL of the document in question and the GitLab Map design +that is used for UX purposes (source, image).
  2. +
  3. When creating a new document and it has more than one word in its name, +make sure to use underscores instead of spaces or dashes (-). For example, +a proper naming would be import_projects_from_github.md. The same rule +applies to images.
  4. +
  5. Start a new directory with an index.md file.
  6. +
  7. There are four main directories, user, administration, api and development.
  8. +
  9. The doc/user/ directory has five main subdirectories: project/, group/, +profile/, dashboard/ and admin_area/. +
      +
    1. +doc/user/project/ should contain all project related documentation.
    2. +
    3. +doc/user/group/ should contain all group related documentation.
    4. +
    5. +doc/user/profile/ should contain all profile related documentation. +Every page you would navigate under /profile should have its own document, +i.e. account.md, applications.md, emails.md, etc.
    6. +
    7. +doc/user/dashboard/ should contain all dashboard related documentation.
    8. +
    9. +doc/user/admin_area/ should contain all admin related documentation +describing what can be achieved by accessing GitLab's admin interface +(not to be confused with doc/administration where server access is +required). +
        +
      1. Every category under /admin/application_settings should have its +own document located at doc/user/admin_area/settings/. For example, +the Visibility and Access Controls category should have a document +located at doc/user/admin_area/settings/visibility_and_access_controls.md.
      2. +
      +
    10. +
    +
  10. +
  11. The doc/topics/ directory holds topic-related technical content. Create +doc/topics/topic-name/subtopic-name/index.md when subtopics become necessary. +General user- and admin- related documentation, should be placed accordingly.
  12. +
+

If you are unsure where a document should live, you can ping @axil or @marcia in your +merge request.

+

+Changing document location

+

Changing a document's location is not to be taken lightly. Remember that the +documentation is available to all installations under help/ and not only to +GitLab.com or http://docs.gitlab.com. Make sure this is discussed with the +Documentation team beforehand.

+

If you indeed need to change a document's location, do NOT remove the old +document, but rather replace all of its contents with a new line:

+
This document was moved to [another location](path/to/new_doc.md).
+

where path/to/new_doc.md is the relative path to the root directory doc/.

+
+

For example, if you were to move doc/workflow/lfs/lfs_administration.md to +doc/administration/lfs.md, then the steps would be:

+
    +
  1. +

    Copy doc/workflow/lfs/lfs_administration.md to doc/administration/lfs.md

    +
  2. +
  3. +

    Replace the contents of doc/workflow/lfs/lfs_administration.md with:

    +
    This document was moved to [another location](../../administration/lfs.md).
    +
  4. +
  5. +

    Find and replace any occurrences of the old location with the new one. +A quick way to find them is to use git grep. First go to the root directory +where you cloned the gitlab-ce repository and then do:

    +
    git grep -n "workflow/lfs/lfs_administration"
    +git grep -n "lfs/lfs_administration"
    +
  6. +
+

NOTE: Note: +If the document being moved has any Disqus comments on it, there are extra steps +to follow documented just below.

+

Things to note:

+
    +
  • Since we also use inline documentation, except for the documentation itself, +the document might also be referenced in the views of GitLab (app/) which will +render when visiting /help, and sometimes in the testing suite (spec/).
  • +
  • The above git grep command will search recursively in the directory you run +it in for workflow/lfs/lfs_administration and lfs/lfs_administration +and will print the file and the line where this file is mentioned. +You may ask why the two greps. Since we use relative paths to link to +documentation, sometimes it might be useful to search a path deeper.
  • +
  • The *.md extension is not used when a document is linked to GitLab's +built-in help page, that's why we omit it in git grep.
  • +
  • Use the checklist on the documentation MR description template.
  • +
+

+Alternative redirection method

+

Alternatively to the method described above, you can simply replace the content +of the old file with a frontmatter containing a redirect link:

+
---
+redirect_to: '../path/to/file/README.md'
+---
+

It supports both full and relative URLs, e.g. https://docs.gitlab.com/ee/path/to/file.html, ../path/to/file.html, path/to/file.md. Note that any *.md paths will be compiled to *.html.

+

+Redirections for pages with Disqus comments

+

If the documentation page being relocated already has any Disqus comments, +we need to preserve the Disqus thread.

+

Disqus uses an identifier per page, and for docs.gitlab.com, the page identifier +is configured to be the page URL. Therefore, when we change the document location, +we need to preserve the old URL as the same Disqus identifier.

+

To do that, add to the frontmatter the variable redirect_from, +using the old URL as value. For example, let's say I moved the document +available under https://docs.gitlab.com/my-old-location/README.html to a new location, +https://docs.gitlab.com/my-new-location/index.html.

+

Into the new document frontmatter add the following:

+
---
+redirect_from: 'https://docs.gitlab.com/my-old-location/README.html'
+---
+

Note: it is necessary to include the file name in the redirect_from URL, +even if it's index.html or README.html.

+

+Testing

+

We treat documentation as code, thus have implemented some testing. +Currently, the following tests are in place:

+
    +
  1. +docs lint: Check that all internal (relative) links work correctly and +that all cURL examples in API docs use the full switches. It's recommended +to check locally before pushing to GitLab by executing the command +bundle exec nanoc check internal_links on your local +gitlab-docs directory.
  2. +
  3. +ee_compat_check (runs on CE only): +When you submit a merge request to GitLab Community Edition (CE), +there is this additional job that runs against Enterprise Edition (EE) +and checks if your changes can apply cleanly to the EE codebase. +If that job fails, read the instructions in the job log for what to do next. +As CE is merged into EE once a day, it's important to avoid merge conflicts. +Submitting an EE-equivalent merge request cherry-picking all commits from CE to EE is +essential to avoid them.
  4. +
+

+Branch naming

+

If your contribution contains only documentation changes, you can speed up +the CI process by following some branch naming conventions. You have three +choices:

+ + + + + + + + + + + + + + + + + + + + + +
Branch nameValid example
Starting with docs/ +docs/update-api-issues
Starting with docs- +docs-update-api-issues
Ending in -docs +123-update-api-issues-docs
+

If your branch name matches any of the above, it will run only the docs +tests. If it doesn't, the whole test suite will run (including docs).

+

+Merge requests for GitLab documentation

+

Before getting started, make sure you read the introductory section +"contributing to docs" above and the +tech writing workflow +for GitLab Team members.

+ +

NOTE: Note: +If the release version you want to add the documentation to has already been +frozen or released, use the label Pick into X.Y to get it merged into +the correct release. Avoid picking into a past release as much as you can, as +it increases the work of the release managers.

+

+Cherry-picking from CE to EE

+

As we have the master branch of CE merged into EE once a day, it's common to +run into merge conflicts. To avoid them, we test for merge conflicts against EE +with the ee-compat-check job, and use the following method of creating equivalent +branches for CE and EE.

+

Follow this method for cherry-picking from CE to EE, with a few adjustments:

+
    +
  • Create the CE branch starting with docs-, +e.g.: git checkout -b docs-example +
  • +
  • Create the EE-equivalent branch ending with -ee, e.g., +git checkout -b docs-example-ee +
  • +
  • Once all the jobs are passing in CE and EE, and you've addressed the +feedback from your own team, assign the CE MR to a technical writer for review
  • +
  • When both MRs are ready, the EE merge request will be merged first, and the +CE-equivalent will be merged next.
  • +
  • Note that the review will occur only in the CE MR, as the EE MR +contains the same commits as the CE MR.
  • +
  • If you have a few more changes that apply to the EE-version only, you can submit +a couple more commits to the EE branch, but ask the reviewer to review the EE merge request +additionally to the CE MR. If there are many EE-only changes though, start a new MR +to EE only.
  • +
+

+Previewing the changes live

+

NOTE: Note: +To preview your changes to documentation locally, follow this +development guide.

+

The live preview is currently enabled for the following projects:

+ +

If your branch contains only documentation changes, you can use +special branch names to avoid long running pipelines.

+

For docs-only changes, the review app is run automatically. +For all other branches, you can use the manual review-docs-deploy-manual job +in your merge request. You will need at least Maintainer permissions to be able +to run it. In the mini pipeline graph, you should see an >> icon. Clicking on it will +reveal the review-docs-deploy-manual job. Hit the play button for the job to start.

+

Manual trigger a docs build

+

NOTE: Note: +You will need to push a branch to those repositories, it doesn't work for forks.

+

The review-docs-deploy* job will:

+
    +
  1. Create a new branch in the gitlab-docs +project named after the scheme: $DOCS_GITLAB_REPO_SUFFIX-$CI_ENVIRONMENT_SLUG, +where DOCS_GITLAB_REPO_SUFFIX is the suffix for each product, e.g, ce for +CE, etc.
  2. +
  3. Trigger a cross project pipeline and build the docs site with your changes
  4. +
+

After a few minutes, the Review App will be deployed and you will be able to +preview the changes. The docs URL can be found in two places:

+
    +
  • In the merge request widget
  • +
  • In the output of the review-docs-deploy* job, which also includes the +triggered pipeline so that you can investigate whether something went wrong
  • +
+

In case the Review App URL returns 404, follow these steps to debug:

+
    +
  1. +Did you follow the URL from the merge request widget? If yes, then check if +the link is the same as the one in the job output.
  2. +
  3. +Did you follow the URL from the job output? If yes, then it means that +either the site is not yet deployed or something went wrong with the remote +pipeline. Give it a few minutes and it should appear online, otherwise you +can check the status of the remote pipeline from the link in the job output. +If the pipeline failed or got stuck, drop a line in the #docs chat channel.
  4. +
+

TIP: Tip: +Someone that has no merge rights to the CE/EE projects (think of forks from +contributors) will not be able to run the manual job. In that case, you can +ask someone from the GitLab team who has the permissions to do that for you.

+

NOTE: Note: +Make sure that you always delete the branch of the merge request you were +working on. If you don't, the remote docs branch won't be removed either, +and the server where the Review Apps are hosted will eventually be out of +disk space.

+

+Technical aspects

+

If you want to know the hot details, here's what's really happening:

+
    +
  1. You manually run the review-docs-deploy job in a CE/EE merge request.
  2. +
  3. The job runs the scripts/trigger-build-docs +script with the deploy flag, which in turn: +
      +
    1. Takes your branch name and applies the following: +
        +
      • The slug of the branch name is used to avoid special characters since +ultimately this will be used by NGINX.
      • +
      • The preview- prefix is added to avoid conflicts if there's a remote branch +with the same name that you created in the merge request.
      • +
      • The final branch name is truncated to 42 characters to avoid filesystem +limitations with long branch names (> 63 chars).
      • +
      +
    2. +
    3. The remote branch is then created if it doesn't exist (meaning you can +re-run the manual job as many times as you want and this step will be skipped).
    4. +
    5. A new cross-project pipeline is triggered in the docs project.
    6. +
    7. The preview URL is shown both at the job output and in the merge request +widget. You also get the link to the remote pipeline.
    8. +
    +
  4. +
  5. In the docs project, the pipeline is created and it +skips the test jobs +to lower the build time.
  6. +
  7. Once the docs site is built, the HTML files are uploaded as artifacts.
  8. +
  9. A specific Runner tied only to the docs project, runs the Review App job +that downloads the artifacts and uses rsync to transfer the files over +to a location where NGINX serves them.
  10. +
+

The following GitLab features are used among others:

+ +

+GitLab /help +

+

Every GitLab instance includes the documentation, which is available from /help +(http://my-instance.com/help), e.g., https://gitlab.com/help.

+

When you're building a new feature, you may need to link the documentation +from GitLab, the application. This is normally done in files inside the +app/views/ directory with the help of the help_page_path helper method.

+

In its simplest form, the HAML code to generate a link to the /help page is:

+
= link_to 'Help page', help_page_path('user/permissions')
+

The help_page_path contains the path to the document you want to link to with +the following conventions:

+
    +
  • it is relative to the doc/ directory in the GitLab repository
  • +
  • the .md extension must be omitted
  • +
  • it must not end with a slash (/)
  • +
+

Below are some special cases where should be used depending on the context. +You can combine one or more of the following:

+
    +
  1. +

    Linking to an anchor link. Use anchor as part of the help_page_path +method:

    +
    = link_to 'Help page', help_page_path('user/permissions', anchor: 'anchor-link')
    +
  2. +
  3. +

    Opening links in a new tab. This should be the default behavior:

    +
    = link_to 'Help page', help_page_path('user/permissions'), target: '_blank'
    +
  4. +
  5. +

    Linking to a circle icon. Usually used in settings where a long +description cannot be used, like near checkboxes. You can basically use +any font awesome icon, but prefer the question-circle:

    +
    = link_to icon('question-circle'), help_page_path('user/permissions')
    +
  6. +
  7. +

    Using a button link. Useful in places where text would be out of context +with the rest of the page layout:

    +
    = link_to 'Help page', help_page_path('user/permissions'),  class: 'btn btn-info'
    +
  8. +
  9. +

    Using links inline of some text.

    +
    Description to #{link_to 'Help page', help_page_path('user/permissions')}.
    +
  10. +
  11. +

    Adding a period at the end of the sentence. Useful when you don't want +the period to be part of the link:

    +
    = succeed '.' do
    +  Learn more in the
    +  = link_to 'Help page', help_page_path('user/permissions')
    +
  12. +
+

+General Documentation vs Technical Articles

+

+General documentation

+

General documentation is categorized by User, Admin, and Contributor, and describe what that feature is, what it does, and its available settings.

+

+Technical Articles

+

Technical articles replace technical content that once lived in the GitLab Blog, where they got out-of-date and weren't easily found.

+

They are topic-related documentation, written with an user-friendly approach and language, aiming to provide the community with guidance on specific processes to achieve certain objectives.

+

A technical article guides users and/or admins to achieve certain objectives (within guides and tutorials), or provide an overview of that particular topic or feature (within technical overviews). It can also describe the use, implementation, or integration of third-party tools with GitLab.

+

They should be placed in a new directory named /article-title/index.md under a topic-related folder, and their images should be placed in /article-title/img/. For example, a new article on GitLab Pages should be placed in doc/user/project/pages/article-title/ and a new article on GitLab CI/CD should be placed in doc/ci/examples/article-title/.

+

+Types of Technical Articles

+
    +
  • +User guides: technical content to guide regular users from point A to point B
  • +
  • +Admin guides: technical content to guide administrators of GitLab instances from point A to point B
  • +
  • +Technical Overviews: technical content describing features, solutions, and third-party integrations
  • +
  • +Tutorials: technical content provided step-by-step on how to do things, or how to reach very specific objectives
  • +
+

+Understanding guides, tutorials, and technical overviews

+

Suppose there's a process to go from point A to point B in 5 steps: (A) 1 > 2 > 3 > 4 > 5 (B).

+

A guide can be understood as a description of certain processes to achieve a particular objective. A guide brings you from A to B describing the characteristics of that process, but not necessarily going over each step. It can mention, for example, steps 2 and 3, but does not necessarily explain how to accomplish them.

+ +

A tutorial requires a clear step-by-step guidance to achieve a singular objective. It brings you from A to B, describing precisely all the necessary steps involved in that process, showing each of the 5 steps to go from A to B. +It does not only describes steps 2 and 3, but also shows you how to accomplish them.

+ +

A technical overview is a description of what a certain feature is, and what it does, but does not walk +through the process of how to use it systematically.

+ +

+Special format

+

Every Technical Article contains a frontmatter at the beginning of the doc +with the following information:

+
    +
  • +Type of article (user guide, admin guide, technical overview, tutorial)
  • +
  • +Knowledge level expected from the reader to be able to follow through (beginner, intermediate, advanced)
  • +
  • +Author's name and GitLab.com handle +
  • +
  • +Publication date (ISO format YYYY-MM-DD)
  • +
+

For example:

+
---
+author: John Doe
+author_gitlab: johnDoe
+level: beginner
+article_type: user guide
+date: 2017-02-01
+---
+

+Technical Articles - Writing Method

+

Use the writing method defined by the Technical Writing team.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/f991451c843192eef54337ebad23e3b2 b/docker/tanner/snare/dist/pages/1/f991451c843192eef54337ebad23e3b2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f991451c843192eef54337ebad23e3b2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f9aa06d9b4fa882557e29988504d8e1b b/docker/tanner/snare/dist/pages/1/f9aa06d9b4fa882557e29988504d8e1b new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f9aa06d9b4fa882557e29988504d8e1b @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/f9e90d0808e63a5efec4f58037e43844 b/docker/tanner/snare/dist/pages/1/f9e90d0808e63a5efec4f58037e43844 new file mode 100644 index 000000000..feb59b395 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/f9e90d0808e63a5efec4f58037e43844 @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/fa5cd1ea9c2cb77fb5a0da716a88b87e b/docker/tanner/snare/dist/pages/1/fa5cd1ea9c2cb77fb5a0da716a88b87e new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fa5cd1ea9c2cb77fb5a0da716a88b87e @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fa836ad2b3941f226b854e6ec9fa5c8d b/docker/tanner/snare/dist/pages/1/fa836ad2b3941f226b854e6ec9fa5c8d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fa836ad2b3941f226b854e6ec9fa5c8d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/faa15010031b19b3b1195e56bd1c80b3 b/docker/tanner/snare/dist/pages/1/faa15010031b19b3b1195e56bd1c80b3 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/faa15010031b19b3b1195e56bd1c80b3 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fab4e7570c04b0e648cc4f0cbc6b114d b/docker/tanner/snare/dist/pages/1/fab4e7570c04b0e648cc4f0cbc6b114d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fab4e7570c04b0e648cc4f0cbc6b114d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fb51ceabe778b277fbee3b7ca1ac7840 b/docker/tanner/snare/dist/pages/1/fb51ceabe778b277fbee3b7ca1ac7840 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fb51ceabe778b277fbee3b7ca1ac7840 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fb5dec7c2d66bae2ee2316c9e1a5eaaf b/docker/tanner/snare/dist/pages/1/fb5dec7c2d66bae2ee2316c9e1a5eaaf new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fb5dec7c2d66bae2ee2316c9e1a5eaaf @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fb7be2dca0c7e148a5ee978bb1100ba6 b/docker/tanner/snare/dist/pages/1/fb7be2dca0c7e148a5ee978bb1100ba6 new file mode 100644 index 000000000..438654e0d Binary files /dev/null and b/docker/tanner/snare/dist/pages/1/fb7be2dca0c7e148a5ee978bb1100ba6 differ diff --git a/docker/tanner/snare/dist/pages/1/fbfab89a4deac61a72b44c7ec99cc660 b/docker/tanner/snare/dist/pages/1/fbfab89a4deac61a72b44c7ec99cc660 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fbfab89a4deac61a72b44c7ec99cc660 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fc71101fc9dd2697af9ca1b7639ebae6 b/docker/tanner/snare/dist/pages/1/fc71101fc9dd2697af9ca1b7639ebae6 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fc71101fc9dd2697af9ca1b7639ebae6 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fc9e96a4bdef126ed38c8a43eb5bf3fa b/docker/tanner/snare/dist/pages/1/fc9e96a4bdef126ed38c8a43eb5bf3fa new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fc9e96a4bdef126ed38c8a43eb5bf3fa @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fccdab8ceabe2482dacf8838a3395dd0 b/docker/tanner/snare/dist/pages/1/fccdab8ceabe2482dacf8838a3395dd0 new file mode 100644 index 000000000..9064919ab --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fccdab8ceabe2482dacf8838a3395dd0 @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + +Projects · Explore · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Explore GitLab +

+

+Discover projects, groups and snippets. Share your projects with others +

+
+
+ +
+
No projects found
+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/fd8a2e498117ab240d4265d46e7c0cf2 b/docker/tanner/snare/dist/pages/1/fd8a2e498117ab240d4265d46e7c0cf2 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fd8a2e498117ab240d4265d46e7c0cf2 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fe0205a67d655fb1a00d49ab6fd1bc2c b/docker/tanner/snare/dist/pages/1/fe0205a67d655fb1a00d49ab6fd1bc2c new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fe0205a67d655fb1a00d49ab6fd1bc2c @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fe184c384511327c2894bdf2e2295a97 b/docker/tanner/snare/dist/pages/1/fe184c384511327c2894bdf2e2295a97 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fe184c384511327c2894bdf2e2295a97 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fe1c2f4a5f05d2ff81284ce770bb5e37 b/docker/tanner/snare/dist/pages/1/fe1c2f4a5f05d2ff81284ce770bb5e37 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fe1c2f4a5f05d2ff81284ce770bb5e37 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fe4fe5788ba8df351904cae64fd5c641 b/docker/tanner/snare/dist/pages/1/fe4fe5788ba8df351904cae64fd5c641 new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fe4fe5788ba8df351904cae64fd5c641 @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/fed01959bc47bcc3889272784b1082ba b/docker/tanner/snare/dist/pages/1/fed01959bc47bcc3889272784b1082ba new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/fed01959bc47bcc3889272784b1082ba @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ff38c61eb0751d58016c476a33b3f84d b/docker/tanner/snare/dist/pages/1/ff38c61eb0751d58016c476a33b3f84d new file mode 100644 index 000000000..b7556f030 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ff38c61eb0751d58016c476a33b3f84d @@ -0,0 +1 @@ +You need to sign in or sign up before continuing. \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/1/ff994403ef702d3115826f7d46a9b635 b/docker/tanner/snare/dist/pages/1/ff994403ef702d3115826f7d46a9b635 new file mode 100644 index 000000000..5f0272ef1 --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/ff994403ef702d3115826f7d46a9b635 @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + +Index · Branches · Repository · Project · User · Help · GitLab + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+

+Branches

+

Read through GiLab's branching documentation:

+ +

See also:

+ +

+Default branch

+

When you create a new project, GitLab sets master as the default +branch for your project. You can choose another branch to be your project's +default under your project's Settings > General.

+

The default branch is the branch affected by the +issue closing pattern, +which means that an issue will be closed when a merge request is merged to +the default branch.

+

The default branch is also protected against accidental deletion. Read through +the documentation on protected branches +to learn more.

+

+Delete merged branches

+
+

Introduced in GitLab 8.14.

+
+

Delete merged branches

+

This feature allows merged branches to be deleted in bulk. Only branches that +have been merged and are not protected will be deleted as part of +this operation.

+

It's particularly useful to clean up old branches that were not deleted +automatically when a merge request was merged.

+
+
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/1/meta.json b/docker/tanner/snare/dist/pages/1/meta.json new file mode 100644 index 000000000..7c14eda1a --- /dev/null +++ b/docker/tanner/snare/dist/pages/1/meta.json @@ -0,0 +1 @@ +{"/index.html": {"hash": "d1546d731a9f30cc80127d57142a482b", "content_type": "text/html"}, "/status_404": {"hash": "bacfa45149ffbe8dbff34609bf56d748", "content_type": "text/html"}, "/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png": {"hash": "2315b1cb7269a8fcb51a7c04b0972442", "content_type": "image/png"}, "/assets/application-266f2bfa52ff531258d13c702895a14fd5994ca591fa2df7338da00ab18c99ac.css": {"hash": "00d592432e2993bcbfc1ead475b80d9d", "content_type": "text/css"}, "/assets/print-c8ff536271f8974b8a9a5f75c0ca25d2b8c1dceb4cff3c01d1603862a0bdcbfc.css": {"hash": "68fe3bed8503098dfa9136d58c7a1ec8", "content_type": "text/css"}, "/assets/touch-icon-iphone-5a9cee0e8a51212e70b90c87c12f382c428870c0ff67d1eb034d884b78d2dae7.png": {"hash": "19e0d97e0557c2ef205d82c7b239fd06", "content_type": "image/png"}, "/assets/touch-icon-ipad-a6eec6aeb9da138e507593b464fdac213047e49d3093fc30e90d9a995df83ba3.png": {"hash": "7d116c68d2bf65b42f6660506b6efdc0", "content_type": "image/png"}, "/assets/touch-icon-iphone-retina-72e2aadf86513a56e050e7f0f2355deaa19cc17ed97bbe5147847f2748e5a3e3.png": {"hash": "fb7be2dca0c7e148a5ee978bb1100ba6", "content_type": "image/png"}, "/assets/touch-icon-ipad-retina-8ebe416f5313483d9c1bc772b5bbe03ecad52a54eba443e5215a22caed2a16a2.png": {"hash": "1fcfcff657a08aafa7c881dca99328f2", "content_type": "image/png"}, "/assets/logo-d36b5212042cebc89b96df4bf6ac24e43db316143e89926c0db839ff694d2de4.svg": {"hash": "c694dd65d02cd33eb5d79380dc4d3364", "content_type": "image/svg+xml"}, "/users/password/new": {"hash": "25f673f689030a932904b9fc74de70db", "content_type": "text/html"}, "/users/confirmation/new": {"hash": "69ed49a347ba5d3c7f4b970a5b7c1921", "content_type": "text/html"}, "/explore": {"hash": "48fe2d27c951d7d64194dec9bf24f7b1", "content_type": "text/html"}, "/help": {"hash": "4c4c3763b53845adc8ce054b07b5fd92", "content_type": "text/html"}, "/assets/webpack/runtime.9fcb75d4.bundle.js": {"hash": "f8792e9730cfe820cb359dd9a550b808", "content_type": "application/javascript"}, "/assets/webpack/main.a66b6c66.chunk.js": {"hash": "cea7134212a40c0dcae90d9e56ceba7c", "content_type": "application/javascript"}, "/assets/webpack/commons~pages.ldap.omniauth_callbacks~pages.omniauth_callbacks~pages.sessions~pages.sessions.new.432e20dc.chunk.js": {"hash": "bbf6a17e6918435d46af3e3223c13324", "content_type": "application/javascript"}, "/assets/webpack/pages.sessions.new.6dbf9c97.chunk.js": {"hash": "63edf09e71994b822809b4606f53e222", "content_type": "application/javascript"}, "/users/sign_in": {"hash": "60650eb79d0c83bd42a14e43b61be6aa", "content_type": "text/html"}, "/users": {"hash": "06bdcf95aafda840b1d04322636de293", "content_type": "text/html"}, "/select2-d6b5d8d83dbc18fb8d77c8761d331cd9e5123c9684950bab0406e98a24ac5ae8.png": {"hash": "b86d8db7d7e22fdeb32a4515c062a5de", "content_type": "image/png"}, "/select2-spinner-f6ecff617ec2ba7f559e6f535cad9b70a3f91120737535dab4d4548a6c83576c.gif": {"hash": "15a6d8fec0f54792ceb66287cf389963", "content_type": "image/gif"}, "/select2x2-6fe28d687dc0ed4d96016238c608ba1e7198c9c9accfa0b360b78018b9fb9bc2.png": {"hash": "d0d4d16bd25fa9075b4d1a16b00b3806", "content_type": "image/png"}, "/icon_anchor-297aa9b0225eff3d6d0da74ce042a0ed5575b92aa66b7109a5e060a795b42e36.svg": {"hash": "fa5cd1ea9c2cb77fb5a0da716a88b87e", "content_type": "image/svg+xml"}, "/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot": {"hash": "7f0c4c77f48594f57210bd9168147594", "content_type": "#"}, "/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot#iefix": {"hash": "b7b9febb01789dcf65ef7127b4f76aaa", "content_type": "#"}, "/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2": {"hash": "7673efe2e388fe03329f75d55c855776", "content_type": "#"}, "/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff": {"hash": "94508c14d69683adab62b67a199c1122", "content_type": "#"}, "/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf": {"hash": "f69c9c500d97c3de9ad118236303f6f3", "content_type": "#"}, "/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg#fontawesomeregular": {"hash": "d1b7793157ed80ca172aaa878cc18304", "content_type": "image/svg+xml"}, "/swipemode_sprites-522fecbb380f3edfa9b09006e88a51fbcb5c26d95dba87d2e09a363a863cd4e4.gif": {"hash": "f09af6c900397ea11a14f0e5762d426c", "content_type": "image/gif"}, "/onion_skin_sprites-5c13bf92d3d6bdf19bba75b00fee5b492a43bec51bf78a01ba158b0ad099a48b.gif": {"hash": "0387afa39c9866c59711c9e7f42a59da", "content_type": "image/gif"}, "/illustrations/image_comment_light_cursor-edc3791b5c9f6694585af95d66f7b252be97436a13d32f9d427a5ca38848bd78.svg": {"hash": "156a42933289f94a4f5b7c0fe9d10d69", "content_type": "image/svg+xml"}, "/users/sign_in?redirect_to_referer=yes": {"hash": "c1ca617a01449e6e2d1de825d1856b6a", "content_type": "text/html"}, "/assets/webpack/default.ec9039fb.chunk.js": {"hash": "087cd36c419f7d5f8d94b10750b976ff", "content_type": "application/javascript"}, "/users/password": {"hash": "79543f32360f209cef5880d53cede0ce", "content_type": "text/html"}, "/users/confirmation": {"hash": "f5fb2368ea9df250ed67734f2c60b899", "content_type": "text/html"}, "/explore/groups": {"hash": "8d83dce54f42252f37b9cff5f6e4ec92", "content_type": "text/html"}, "/explore/snippets": {"hash": "ed08718d697889221dd3ec9d4323ec39", "content_type": "text/html"}, "/search": {"hash": "18fc53a52a033fe75f7d0542124ca8c0", "content_type": "text/html"}, "/explore/projects/trending": {"hash": "f188c51a7618907d150b836ef6c16858", "content_type": "text/html"}, "/explore/projects/starred": {"hash": "b99ab31b44a16489331cc6fbc2e8397a", "content_type": "text/html"}, "/explore/projects": {"hash": "fccdab8ceabe2482dacf8838a3395dd0", "content_type": "text/html"}, "/explore?sort=latest_activity_desc": {"hash": "1fd4867afa2c9c1b7af78cc44f509f8d", "content_type": "text/html"}, "/explore?sort=name_asc": {"hash": "709d1a3f8e18b60f13111549220bd60a", "content_type": "text/html"}, "/explore?sort=latest_activity_asc": {"hash": "6879959695abc68c50e82b2452efa0fb", "content_type": "text/html"}, "/explore?sort=created_asc": {"hash": "ea12cc3f2cf3924d3478991062f978ea", "content_type": "text/html"}, "/explore?sort=created_desc": {"hash": "ac777509a45c67de93c97b8d26d2f27b", "content_type": "text/html"}, "/explore?archived=true&sort=latest_activity_desc": {"hash": "b2ad54c19ecff210fa6307848f6ac488", "content_type": "text/html"}, "/explore?archived=only&sort=latest_activity_desc": {"hash": "7b9b1e442bb6d37291ee56a390ee958b", "content_type": "text/html"}, "/assets/webpack/pages.explore.projects.30bc9dd5.chunk.js": {"hash": "506dedd9cd00b5b4093490b557cc90cc", "content_type": "application/javascript"}, "/help/instance_configuration": {"hash": "e6ebf3f4caacd8b1fab1772aa577f664", "content_type": "text/html"}, "/help/user/index.md": {"hash": "8fcfdc23511dd43f9adaf6e27e86f966", "content_type": "text/html"}, "/help/ci/quick_start/README.md": {"hash": "a34f46f6fae1a5ebbb8f5b4ff499783f", "content_type": "text/html"}, "/help/administration/index.md": {"hash": "a17bd519f4207c59e85a9c33f34b39de", "content_type": "text/html"}, "/help/ci/examples/README.md": {"hash": "108c203b5d890188161e233409cb5d51", "content_type": "text/html"}, "/help/ci/yaml/README.md": {"hash": "22ecc586122e05fcc71eede347b79b00", "content_type": "text/html"}, "/help/ci/docker/using_docker_images.md": {"hash": "68c2744d4869cf5cfbc8b5b274e42f58", "content_type": "text/html"}, "/help/api/README.md": {"hash": "51816a837257136a99036040f43cefcd", "content_type": "text/html"}, "/help/topics/autodevops/index.md": {"hash": "538190d40d5bbb88db653a4eff5b3475", "content_type": "text/html"}, "/help/ssh/README.md": {"hash": "21807653fb38034544225fc60bf95b26", "content_type": "text/html"}, "/help/user/project/clusters/index.md": {"hash": "3e65a8338a6c5f33fd3ed1de7f683d70", "content_type": "text/html"}, "/help/user/project/pages/index.md": {"hash": "9ad00771fd4e9825ed74482a027ff6ff", "content_type": "text/html"}, "/help/user/project/container_registry.md": {"hash": "8ca6d490766990471a6658d4b8a30529", "content_type": "text/html"}, "/help/img/devops_lifecycle.png": {"hash": "a25f33b3fc3b5691a470a1973339a119", "content_type": "image/png"}, "/help/user/project/integrations/mattermost_slash_commands.md": {"hash": "7fdaeb7d0ff50a96244becd477d5d064", "content_type": "text/html"}, "/help/user/project/integrations/slack_slash_commands.md": {"hash": "b4d750f5a4a64efdfcf7a9a7a77f24a1", "content_type": "text/html"}, "/help/user/discussions/index.md": {"hash": "dab08757e7635a1a2333a728c5f65422", "content_type": "text/html"}, "/help/user/project/issues/index.md": {"hash": "2aca7a9dcc841341fdc12669667f8cb0", "content_type": "text/html"}, "/help/user/project/issue_board.md": {"hash": "ada08312efe7599634f25a32390f5ae9", "content_type": "text/html"}, "/help/user/project/description_templates.md": {"hash": "89ce22ba2a929783733657a359a0de38", "content_type": "text/html"}, "/help/user/project/labels.md": {"hash": "daa6e088a0a31f9d99ca966756b0d143", "content_type": "text/html"}, "/help/user/project/milestones/index.md": {"hash": "58b8b081d62db455afc28333cb39187c", "content_type": "text/html"}, "/help/workflow/todos.md": {"hash": "15fe9a87e936b55c29de254c21c6b0f4", "content_type": "text/html"}, "/help/user/project/quick_actions.md": {"hash": "7bd306bef6eba642bc747b6d2d70defb", "content_type": "text/html"}, "/help/user/project/import/index.md": {"hash": "bb2ccc55f54780dc396a2fcea3bc097a", "content_type": "text/html"}, "/help/workflow/importing/migrating_from_svn.md": {"hash": "26473f4b7f68d1526b69d28421a07f62", "content_type": "text/html"}, "/help/user/project/index.md": {"hash": "515d2458282330b12fceb0c52197aae9", "content_type": "text/html"}, "/help/user/project/settings/index.md": {"hash": "6e837598dd6a182cdc982ce9b5ba280f", "content_type": "text/html"}, "/help/gitlab-basics/create-project.md": {"hash": "b93c7aaf1c5fd5da788ef0a370fa97e2", "content_type": "text/html"}, "/help/gitlab-basics/fork-project.md": {"hash": "c33406bc75399aedc17717746fd2ee12", "content_type": "text/html"}, "/help/user/project/settings/import_export.md": {"hash": "2eb836349fe4116692c6443a1eaaebfb", "content_type": "text/html"}, "/help/public_access/public_access.md": {"hash": "cfa5b019415cfbd4877421972a4e246f", "content_type": "text/html"}, "/help/user/group/index.md": {"hash": "9538d09598c4b26767d761ce6af0c4ff", "content_type": "text/html"}, "/help/user/group/subgroups/index.md": {"hash": "f827c9d143a90d758dbd881d1c0a4d98", "content_type": "text/html"}, "/help/user/search/index.md": {"hash": "6ed33740fbb3a1eb44a5edc191cc735d", "content_type": "text/html"}, "/help/user/snippets.md": {"hash": "d69af2676416edb16b35a3d04d2fb4a0", "content_type": "text/html"}, "/help/user/project/wiki/index.md": {"hash": "b65700346c64c66e9c91ff4a1dfbeaf0", "content_type": "text/html"}, "/help/user/project/web_ide/index.md": {"hash": "c6e72775b4c25043228d03805a14c95a", "content_type": "text/html"}, "/help/user/project/repository/index.md": {"hash": "14bd55db10fc365e476ce978ae2b3179", "content_type": "text/html"}, "/help/user/project/repository/branches/index.md": {"hash": "ff994403ef702d3115826f7d46a9b635", "content_type": "text/html"}, "/help/user/project/repository/gpg_signed_commits/index.md": {"hash": "daa46086e723bb57ddefdf269b54bc94", "content_type": "text/html"}, "/help/user/project/merge_requests/index.md": {"hash": "d7fd456ddfab95455c6fc071d84fd06e", "content_type": "text/html"}, "/help/user/project/merge_requests/work_in_progress_merge_requests.md": {"hash": "54ce2605e398f3b7fb1848fe0ca171fa", "content_type": "text/html"}, "/help/user/project/merge_requests/cherry_pick_changes.md": {"hash": "1dbb00ace86d906f0fa6945fce940835", "content_type": "text/html"}, "/help/user/project/integrations/project_services.md": {"hash": "d1d18f83a31e11a4899ae3956ca78835", "content_type": "text/html"}, "/help/integration/README.md": {"hash": "28f657efc18030e342b1f73601dc9d25", "content_type": "text/html"}, "/help/integration/trello_power_up.md": {"hash": "35dc7cc7063100ea5cc01fef10e6c4c1", "content_type": "text/html"}, "/help/user/project/integrations/webhooks.md": {"hash": "debd2a1889058901a1f13d6a70c484bf", "content_type": "text/html"}, "/help/ci/README.md": {"hash": "b2395d0933e064b0982792a46cc5c08c", "content_type": "text/html"}, "/help/ci/review_apps/index.md": {"hash": "0829a1bb151a668b07a7965e1bdd1225", "content_type": "text/html"}, "/help/ci/environments.md": {"hash": "d2385f0b2d8685d7a5a1875bf0ceb066", "content_type": "text/html"}, "/help/user/project/pipelines/schedules.md": {"hash": "e4d0b5f02282a09c62e848328952d4e0", "content_type": "text/html"}, "/help/administration/monitoring/prometheus/index.md": {"hash": "59c1ba9e1759b5be50e5b8fc0ed438e1", "content_type": "text/html"}, "/help/user/project/integrations/prometheus.md": {"hash": "871431dc40b79c8b7f6334269bf7b7f8", "content_type": "text/html"}, "/help/user/project/integrations/prometheus_library/metrics.md": {"hash": "1654049e108edbaa799711f5f99df50c", "content_type": "text/html"}, "/help/administration/monitoring/performance/index.md": {"hash": "6d862968e7da2528dab3fbf40a8118bf", "content_type": "text/html"}, "/help/user/admin_area/monitoring/health_check.md": {"hash": "d7b4404c4db7555e35e0a2d79af5d5d3", "content_type": "text/html"}, "/user/project/cycle_analytics.md": {"hash": "8b0f2618f69e2b7eea338257a627412d", "content_type": "text/html"}, "/help/gitlab-basics/README.md": {"hash": "f7a135db44be5c2adb44db4f3939581a", "content_type": "text/html"}, "/help/workflow/README.md": {"hash": "aa105aedc921bc57ddc82bd7c17d7623", "content_type": "text/html"}, "/help/user/markdown.md": {"hash": "40703b8e26740f52b6161477264f260e", "content_type": "text/html"}, "/help/user/profile/index.md": {"hash": "e02a5c399f42179cb60df768590ae8a0", "content_type": "text/html"}, "/help/topics/authentication/index.md": {"hash": "794c12aee30c7d10fa8d9edbd677b007", "content_type": "text/html"}, "/help/user/permissions.md": {"hash": "26a6389705e871321faff7929a421ad9", "content_type": "text/html"}, "/help/topics/git/index.md": {"hash": "6c8bd8b3136b724e040e12dd5a327d79", "content_type": "text/html"}, "/help/workflow/gitlab_flow.md": {"hash": "26de595044f9993743768c35f8fd0109", "content_type": "text/html"}, "/help/development/README.md": {"hash": "2bce9ce54b39febe2037c2392912c308", "content_type": "text/html"}, "/help/legal/README.md": {"hash": "e24d86d1d1d87023868ceadf56114bd9", "content_type": "text/html"}, "/help/development/documentation/index.md": {"hash": "f96bdb567f927b1d8012debeeaa5f2ca", "content_type": "text/html"}, "/assets/webpack/pages.help.index.5a091206.chunk.js": {"hash": "bda6084b42eb43e25754644e1cc976b1", "content_type": "application/javascript"}, "/explore/groups?sort=name_asc": {"hash": "995ae609eea2cf293662f68ece0d1f6e", "content_type": "text/html"}, "/explore/groups?sort=name_desc": {"hash": "0d9865a319530fb6aeb2c0b71a77c90b", "content_type": "text/html"}, "/explore/groups?sort=created_desc": {"hash": "0b5b7d2dbaa3af9473aab0fafc3b1c62", "content_type": "text/html"}, "/explore/groups?sort=created_asc": {"hash": "2beb02d80c0ec0d3ecaacb013114a7d5", "content_type": "text/html"}, "/explore/groups?sort=updated_desc": {"hash": "e2a666ebecc3f0870a889cea6e13307d", "content_type": "text/html"}, "/explore/groups?sort=updated_asc": {"hash": "2cbcb4a26173ef2101e845d10d20a596", "content_type": "text/html"}, "/assets/webpack/commons~pages.dashboard.groups.index~pages.explore.groups~pages.groups.show.70112f9d.chunk.js": {"hash": "104550d288a2e1dd9d6e19db868ab574", "content_type": "application/javascript"}, "/assets/webpack/pages.explore.groups.0ecf263a.chunk.js": {"hash": "7e851c4e91beced9485a252701d09a45", "content_type": "application/javascript"}, "/assets/webpack/pages.search.show.c3d5fcbd.chunk.js": {"hash": "2b408cae2e445bbef179ff3bc2d7f823", "content_type": "application/javascript"}, "/explore/projects/trending?sort=latest_activity_desc": {"hash": "1d79efde74645b601a94f669e86ed22f", "content_type": "text/html"}, "/explore/projects/trending?sort=name_asc": {"hash": "4a2a6b3e84613f96102e9821b5606195", "content_type": "text/html"}, "/explore/projects/trending?sort=latest_activity_asc": {"hash": "683da3f0439f0611c7bebb9ae72fe769", "content_type": "text/html"}, "/explore/projects/trending?sort=created_asc": {"hash": "e94e6495d1179d674587761fa4edd19e", "content_type": "text/html"}, "/explore/projects/trending?sort=created_desc": {"hash": "826da5f6ef29427f0d6e6ead3cdfce7f", "content_type": "text/html"}, "/explore/projects/trending?archived=true&sort=latest_activity_desc": {"hash": "b25e8fc7a11f712b6955ed87c115f79c", "content_type": "text/html"}, "/explore/projects/trending?archived=only&sort=latest_activity_desc": {"hash": "e12a500874c603ac9f1fc0b0ff0fbf29", "content_type": "text/html"}, "/explore/projects/starred?sort=latest_activity_desc": {"hash": "e327668591f99fd2bddb8cd3b8a29e90", "content_type": "text/html"}, "/explore/projects/starred?sort=name_asc": {"hash": "694faabed967b3562b3ea390fea8a79e", "content_type": "text/html"}, "/explore/projects/starred?sort=latest_activity_asc": {"hash": "59e1ebdd3fd2a24a556f7cc3037ca33b", "content_type": "text/html"}, "/explore/projects/starred?sort=created_asc": {"hash": "c9f820c6218f10fd0d360c3f29dfcfd3", "content_type": "text/html"}, "/explore/projects/starred?sort=created_desc": {"hash": "2ae3cc65663beee6d64ae96563ca07ef", "content_type": "text/html"}, "/explore/projects/starred?archived=true&sort=latest_activity_desc": {"hash": "8f44c53427a6ea426ade32ec4b2e7fb3", "content_type": "text/html"}, "/explore/projects/starred?archived=only&sort=latest_activity_desc": {"hash": "a654952e18a95f193671140b444163e4", "content_type": "text/html"}, "/explore/projects?sort=latest_activity_desc": {"hash": "2420d86f5e9c3c4dcc4de9e552b8f6bd", "content_type": "text/html"}, "/explore/projects?sort=name_asc": {"hash": "51fabefd0eec1e3994834f3e2f90a087", "content_type": "text/html"}, "/explore/projects?sort=latest_activity_asc": {"hash": "8ae33c47ad452f9ec4b3ac9554b371db", "content_type": "text/html"}, "/explore/projects?sort=created_asc": {"hash": "1fe77324607a683bf0fb03993e2d6fd9", "content_type": "text/html"}, "/explore/projects?sort=created_desc": {"hash": "98bf0f278ce3bf4ac5904de0a3de60a5", "content_type": "text/html"}, "/explore/projects?archived=true&sort=latest_activity_desc": {"hash": "f44c99ce229e9b3130ea8216a502b193", "content_type": "text/html"}, "/explore/projects?archived=only&sort=latest_activity_desc": {"hash": "852c13e01021c8689866588c9ab46337", "content_type": "text/html"}, "/explore?archived=true&sort=name_asc": {"hash": "4679427d013becc5b47e5a82db9de072", "content_type": "text/html"}, "/explore?archived=only&sort=name_asc": {"hash": "641b32fdf50759025eb03b08099358ff", "content_type": "text/html"}, "/explore?archived=true&sort=latest_activity_asc": {"hash": "7145faf07433bd7e98ea6d86f3b81d20", "content_type": "text/html"}, "/explore?archived=only&sort=latest_activity_asc": {"hash": "b05d0f1ac37842c20cdb3118a518639b", "content_type": "text/html"}, "/explore?archived=true&sort=created_asc": {"hash": "ade767cac522c7adb1fe5d56aa029cf3", "content_type": "text/html"}, "/explore?archived=only&sort=created_asc": {"hash": "66b1b84d048bb21abb10eaed0534f0af", "content_type": "text/html"}, "/explore?archived=true&sort=created_desc": {"hash": "019c274aece89aad026feaaa5b6087cc", "content_type": "text/html"}, "/explore?archived=only&sort=created_desc": {"hash": "f9e90d0808e63a5efec4f58037e43844", "content_type": "text/html"}, "/project/merge_requests/index.md": {"hash": "444260abbabb9f9f72c8bc7caa4cb95b", "content_type": "text/html"}, "/ci/review_apps/index.md": {"hash": "caf122f7a482793342ba91f6a3faf3c4", "content_type": "text/html"}, "/ci/README.md": {"hash": "14b6f894dcd7813382ae9003c123ed06", "content_type": "text/html"}, "/project/pages/index.md": {"hash": "1f90d6405b4a38844af825a628bbc695", "content_type": "text/html"}, "/project/container_registry.md": {"hash": "4676d4bcd045fe96e318c171c011a2db", "content_type": "text/html"}, "/project/cycle_analytics.md": {"hash": "c585a36076acb83c59002f5d2ef620b8", "content_type": "text/html"}, "/project/integrations/project_services.md": {"hash": "ecf5000965ce5f14c264c4d74db9e4ff", "content_type": "text/html"}, "/project/index.md": {"hash": "09b3069d0d774a009c5abbb87f943b89", "content_type": "text/html"}, "/project/repository/index.md": {"hash": "35a6367fc60c46fd3caa35accee39c9a", "content_type": "text/html"}, "/project/issues/index.md": {"hash": "b96aa24965b30e13fa999afb1412ed73", "content_type": "text/html"}, "/project/milestones/index.md": {"hash": "c0a19c86ea094d2591e44c512ea861b6", "content_type": "text/html"}, "/ci/autodeploy/index.md": {"hash": "4eaae92e242c391fec5c46ba005386d8", "content_type": "text/html"}, "/profile/index.md": {"hash": "cffd2ae8b0cebde93a5fe06d851d8340", "content_type": "text/html"}, "/topics/authentication/index.md": {"hash": "7866ab4a8ea83a94d29f4dc9ee63e85d", "content_type": "text/html"}, "/permissions.md": {"hash": "292ecc7e97d0ffeb81f26cd0ee7b22cc", "content_type": "text/html"}, "/feature_highlight.md": {"hash": "d7c7752f6b8638163f49adc96e13aa78", "content_type": "text/html"}, "/group/index.md": {"hash": "5dcacec8504d2e0e1e1c775f174d7551", "content_type": "text/html"}, "/group/subgroups/index.md": {"hash": "f8bdd1f525a8550e0b6f538a05e97155", "content_type": "text/html"}, "/markdown.md": {"hash": "4b15905dfa111b27e6c601421f028940", "content_type": "text/html"}, "/workflow/todos.md": {"hash": "5ba405b326c40541846ee83d24b0f2ca", "content_type": "text/html"}, "/search/index.md": {"hash": "9dbcda931e373e3dc25444f24e3cafcc", "content_type": "text/html"}, "/snippets.md": {"hash": "748458c06c72cb131fbacba2eac061e8", "content_type": "text/html"}, "/integration/README.md": {"hash": "9b2ec9d7e8b0fb3ede03f23e4fe941f9", "content_type": "text/html"}, "/project/integrations/webhooks.md": {"hash": "58dee7b334fc0a7339a5f94928b76d7b", "content_type": "text/html"}, "/api/README.md": {"hash": "448bd67e52beb0a8e610fb384b55995d", "content_type": "text/html"}, "/topics/git/index.md": {"hash": "e7a37d24d6ed71a4b4b84316233a2e3c", "content_type": "text/html"}, "/assets/webpack/pages.help.show.c42c0700.chunk.js": {"hash": "5d6da3ddba86576a4ea1439823dd06f6", "content_type": "application/javascript"}, "/enable_or_disable_ci.md": {"hash": "50997e2a2a0df4812463f40ee084fc3a", "content_type": "text/html"}, "/yaml/README.md": {"hash": "1b712c35ae98a0de967264e203c86b83", "content_type": "text/html"}, "/runners/README.md": {"hash": "8e37b2e74e7121e39d6f6e08b6c32b94", "content_type": "text/html"}, "/pipelines.md": {"hash": "4d4b5790ac40838f69439093c4ed9ce0", "content_type": "text/html"}, "/img/new_commit.png": {"hash": "28ca609076ce44da9b2a084e118f380d", "content_type": "image/png"}, "/img/single_commit_status_pending.png": {"hash": "eacc62ee127a34b03e3a692f838fed6b", "content_type": "image/png"}, "/img/runners_activated.png": {"hash": "53046a35971a552277790ec6fab1039b", "content_type": "image/png"}, "/img/pipelines_status.png": {"hash": "0da2569d074237a72ebf904f57ed5aa2", "content_type": "image/png"}, "/img/builds_status.png": {"hash": "70f42cfd36b8aa812e16c3066f8be340", "content_type": "image/png"}, "/img/build_log.png": {"hash": "45424a658807ff74e3adc91988a008a5", "content_type": "image/png"}, "/examples/README.md": {"hash": "e4700221f51c9eca76bee1277d86e5a0", "content_type": "text/html"}, "/user/index.html": {"hash": "525af5bd6f90f426c7b6daa113573b0c", "content_type": "text/html"}, "/install/README.md": {"hash": "fc9e96a4bdef126ed38c8a43eb5bf3fa", "content_type": "text/html"}, "/high_availability/README.md": {"hash": "668b66edc46fa80827f536323f0c3c37", "content_type": "text/html"}, "/university/high-availability/aws/README.md": {"hash": "fb5dec7c2d66bae2ee2316c9e1a5eaaf", "content_type": "text/html"}, "/workflow/timezone.md": {"hash": "2fe6963dac6fa9b09285e89d775adf48", "content_type": "text/html"}, "/system_hooks/system_hooks.md": {"hash": "305389375b4a122b98b1fe8625974b04", "content_type": "text/html"}, "/security/README.md": {"hash": "ec859478246e309d2664077b7944cd85", "content_type": "text/html"}, "/user/admin_area/settings/usage_statistics.md": {"hash": "ec900496c475ccdefb801c9739fc8a27", "content_type": "text/html"}, "/polling.md": {"hash": "d6839c096b7df09823d85c5f423ab10d", "content_type": "text/html"}, "/pages/index.md": {"hash": "4ee2ca11fdf0136a25fb319315136a3e", "content_type": "text/html"}, "/pages/source.md": {"hash": "c2e8042749934a2596e3e7136a4cd4d7", "content_type": "text/html"}, "/environment_variables.md": {"hash": "fe184c384511327c2894bdf2e2295a97", "content_type": "text/html"}, "/plugins.md": {"hash": "05965e062fe06d6f46d77ed7e5de64a7", "content_type": "text/html"}, "/user/admin_area/settings/terms.md": {"hash": "df9480008586cacc7484f2202078473e", "content_type": "text/html"}, "/user/admin_area/settings/third_party_offers.md": {"hash": "660b82a541ca97cd39433dbe3c392f52", "content_type": "text/html"}, "/customization/branded_page_and_email_header.md": {"hash": "22908655dffe630ec9c15e47437d3e92", "content_type": "text/html"}, "/customization/favicon.md": {"hash": "97bbc60a2d2f1ef04cd64302a24b3548", "content_type": "text/html"}, "/customization/branded_login_page.md": {"hash": "8addb1f5cb07a7b775d87bb40e729716", "content_type": "text/html"}, "/customization/welcome_message.md": {"hash": "6c7732f317bc34120efcac8f1046ebcb", "content_type": "text/html"}, "/customization/new_project_page.md": {"hash": "ce719148121e638d5ba4d2317c6d8732", "content_type": "text/html"}, "/raketasks/README.md": {"hash": "98dd0a59e462fb42679df4c796d62fd1", "content_type": "text/html"}, "/raketasks/backup_restore.md": {"hash": "7faf6d77f340ad0aaf69956561ef226e", "content_type": "text/html"}, "/operations/index.md": {"hash": "bc3422a7d4deeeefc5e0e47b84ed2a17", "content_type": "text/html"}, "/restart_gitlab.md": {"hash": "288edad9ac59a50a9ab1f6e3124e8db4", "content_type": "text/html"}, "/policy/maintenance.md": {"hash": "ad66fd159987d4685b864166361d521a", "content_type": "text/html"}, "/update/README.md": {"hash": "eee301ddeaae3d8fcf4f5a309fd54936", "content_type": "text/html"}, "/migrate_ci_to_ce/README.md": {"hash": "fab4e7570c04b0e648cc4f0cbc6b114d", "content_type": "text/html"}, "/downgrade_ee_to_ce/README.md": {"hash": "3a64aa9696bd5fcff7e17f0a9fd719d0", "content_type": "text/html"}, "/integration/plantuml.md": {"hash": "2809a19fb57cb68b1f5893f0a15c28f6", "content_type": "text/html"}, "/integration/terminal.md": {"hash": "bc1b6e566f140fc486d582d2eb5757f0", "content_type": "text/html"}, "/customization/libravatar.md": {"hash": "2908231ee0f8a25275c18d3813571dd2", "content_type": "text/html"}, "/user/admin_area/settings/sign_up_restrictions.md": {"hash": "60f15637304c93b685530da125288a2d", "content_type": "text/html"}, "/incoming_email.md": {"hash": "d5f805739b39245c65eeef12858b32d9", "content_type": "text/html"}, "/reply_by_email.md": {"hash": "680e0274b9d3b226e740934b8624100d", "content_type": "text/html"}, "/reply_by_email_postfix_setup.md": {"hash": "bc2a9dd9360f70bbb60b5607fcb0b68a", "content_type": "text/html"}, "/user/admin_area/user_cohorts.md": {"hash": "5e9e665bd306045add277c8247fe0173", "content_type": "text/html"}, "/container_registry.md": {"hash": "c8de33d0c6556512c2799cde59645881", "content_type": "text/html"}, "/issue_closing_pattern.md": {"hash": "816b7fc27586d7c309d6e3100848b386", "content_type": "text/html"}, "/gitaly/index.md": {"hash": "1b35ff83d764df93085db67c8c506472", "content_type": "text/html"}, "/user/admin_area/labels.html": {"hash": "3fa2e2005b0d1c85c45762ce2bd2de1a", "content_type": "text/html"}, "/repository_checks.md": {"hash": "de12723e6a8c7a5c20b9d18b7f36e8e8", "content_type": "text/html"}, "/repository_storage_paths.md": {"hash": "6a80023a00c831b25b8ef983943b027f", "content_type": "text/html"}, "/raketasks/storage.md": {"hash": "299b821d3e5c12ff7868f4413010eecb", "content_type": "text/html"}, "/user/admin_area/settings/continuous_integration.md": {"hash": "25c1d6935b89ba6db9352cf93ddbecee", "content_type": "text/html"}, "/job_artifacts.md": {"hash": "eca467826570121b9e2a692583a5f256", "content_type": "text/html"}, "/job_traces.md": {"hash": "aced9c9e0b8e02ad2f63fe6ca0fe51a2", "content_type": "text/html"}, "/custom_hooks.md": {"hash": "dc6794353ad395995e6223f826326dac", "content_type": "text/html"}, "/workflow/lfs/lfs_administration.md": {"hash": "1f27448c5dcfbf19bdc3d90c9fd7a6a3", "content_type": "text/html"}, "/housekeeping.md": {"hash": "4445304586ebc1e774ae7ff36aa7f3a4", "content_type": "text/html"}, "/monitoring/index.md": {"hash": "d298cdd9bf3ca98ae4cabe427bdb9bd8", "content_type": "text/html"}, "/user/admin_area/monitoring/health_check.md": {"hash": "c5ec91a74c9c7cbd620e74095bce8785", "content_type": "text/html"}, "/monitoring/ip_whitelist.md": {"hash": "8787b9b5d03d4f248b0616d72c982365", "content_type": "text/html"}, "/monitoring/github_imports.md": {"hash": "ade4438d5128fd7dbb699c338a190eba", "content_type": "text/html"}, "/user/admin_area/monitoring/convdev.md": {"hash": "28a9590362c6a85f93573da55313d3aa", "content_type": "text/html"}, "/monitoring/performance/index.md": {"hash": "757fefd9ff867bd8cfa8dec9e7c92560", "content_type": "text/html"}, "/monitoring/performance/gitlab_configuration.md": {"hash": "71131b95d35f45a000265e8c315131bb", "content_type": "text/html"}, "/monitoring/performance/influxdb_configuration.md": {"hash": "6a1e9dfd75fd7b7e1bd96c01ed4302d8", "content_type": "text/html"}, "/monitoring/performance/influxdb_schema.md": {"hash": "3d1ff557eee05147677c4ad368f919f9", "content_type": "text/html"}, "/monitoring/prometheus/index.md": {"hash": "b967c6e67a882e11f8656a24cb968ab5", "content_type": "text/html"}, "/monitoring/performance/grafana_configuration.md": {"hash": "2d5d3908714a91d52486cf8febce1bab", "content_type": "text/html"}, "/monitoring/performance/request_profiling.md": {"hash": "5f65a91be076901538a461e3268d4882", "content_type": "text/html"}, "/monitoring/performance/performance_bar.md": {"hash": "a341e035be482f423607f06170b0482f", "content_type": "text/html"}, "/troubleshooting/debug.md": {"hash": "b6763735b202c23956a970eda255f486", "content_type": "text/html"}, "/logs.md": {"hash": "d53bbc5b7f4cf23d7bcefee7910ce9c5", "content_type": "text/html"}, "/troubleshooting/sidekiq.md": {"hash": "c040213a71d6f9dfe7705b3b5215c393", "content_type": "text/html"}, "/php.md": {"hash": "e292cfa271fc1493006b6857e6315866", "content_type": "text/html"}, "/deployment/composer-npm-deploy.md": {"hash": "964902d86132d6fa8a24f8eec574200d", "content_type": "text/html"}, "/laravel_with_gitlab_and_envoy/index.md": {"hash": "cc55e4012dad172cb4146084ac5aae47", "content_type": "text/html"}, "/test-and-deploy-ruby-application-to-heroku.md": {"hash": "2f8826bd8998fa646268ed861d407f69", "content_type": "text/html"}, "/test-and-deploy-python-application-to-heroku.md": {"hash": "31507a99d467258111af28ea1bb03758", "content_type": "text/html"}, "/deploy_spring_boot_to_cloud_foundry/index.md": {"hash": "012cb9c338cf9385a250da877cc28e72", "content_type": "text/html"}, "/test-scala-application.md": {"hash": "02698ddf87d2e6ea2a063d23bb50db3c", "content_type": "text/html"}, "/test-clojure-application.md": {"hash": "a93c7da994eef6a69a92a89c9bbda1cd", "content_type": "text/html"}, "/test_phoenix_app_with_gitlab_ci_cd/index.md": {"hash": "7aaa6c1a397f32644a99ad3bee9b3a31", "content_type": "text/html"}, "/artifactory_and_gitlab/index.md": {"hash": "02a886a822ea2bad0b5ea5e4e1a34216", "content_type": "text/html"}, "/devops_and_game_dev_with_gitlab_ci_cd/index.md": {"hash": "b2f1bf9de15834653d3b9bcb783dbcaa", "content_type": "text/html"}, "/deployment/README.md": {"hash": "0830040e9f0542487c3e44376631a37c", "content_type": "text/html"}, "/code_quality.md": {"hash": "8443a514e201e71f0c1be4892e92ef5b", "content_type": "text/html"}, "/container_scanning.md": {"hash": "883c6966b8b08f3a40bc05813a3eb00f", "content_type": "text/html"}, "/dast.md": {"hash": "f4ec84536621028d2587e9d2e4df5463", "content_type": "text/html"}, "/browser_performance.md": {"hash": "950ce13523f48507da059802ea94d909", "content_type": "text/html"}, "/review_apps/index.html": {"hash": "1eb545323434144b5dcd3e8f138d3071", "content_type": "text/html"}, "/user/project/pages/index.md": {"hash": "d36ee017a80aa4b03bf613e6d9f6c902", "content_type": "text/html"}, "/quick_start/README.md": {"hash": "3b22b824da41ad05222acc2d392130af", "content_type": "text/html"}, "/docker/README.md": {"hash": "248666d5485452e84a99fa4eff82a846", "content_type": "text/html"}, "/user/project/pipelines/schedules.md": {"hash": "aa169203406aa0b5cb2adaf7fb4649ca", "content_type": "text/html"}, "/user/project/protected_branches.md": {"hash": "2a23bbe93f6242a38e13d67c9d96c079", "content_type": "text/html"}, "/environments.md": {"hash": "5fa7f8e9bafbe43011bda32ccb1c5e04", "content_type": "text/html"}, "/variables/README.md": {"hash": "b5cb15cee54dc4f20ea1f67ce8ff3100", "content_type": "text/html"}, "/caching/index.md": {"hash": "26a4d5f1c69b6123185e22a3de993e5d", "content_type": "text/html"}, "/user/project/pipelines/job_artifacts.md": {"hash": "27bb3e729c31cb0684b7347bfcbdca1f", "content_type": "text/html"}, "/git_submodules.md": {"hash": "9599fca86adefac155ea7679c3312a26", "content_type": "text/html"}, "/triggers/README.md": {"hash": "8ad1034a0bebfa3b5f7b6c7e1c443ac0", "content_type": "text/html"}, "/services/README.md": {"hash": "eea676c77a9fbaf1270bb45b2821a126", "content_type": "text/html"}, "/services/postgres.md": {"hash": "81c5705e6676bc03acb905c1d347ab1e", "content_type": "text/html"}, "/services/mysql.md": {"hash": "d39ba6aa8958cf3a96570e9f61f5a85a", "content_type": "text/html"}, "/award_emoji.md": {"hash": "304d1b8e7bdcd48f079d7a58b9bf9ac1", "content_type": "text/html"}, "/branches.md": {"hash": "b8b9934cf00d6600d43ce05a56567fcb", "content_type": "text/html"}, "/broadcast_messages.md": {"hash": "c52e2a899cdd01b9d46afb1cbd9be45d", "content_type": "text/html"}, "/project_level_variables.md": {"hash": "65cfd25e95d895682ac43d7d39e82248", "content_type": "text/html"}, "/group_level_variables.md": {"hash": "8c87fb9ab8fd0284ca1ced712ecdec40", "content_type": "text/html"}, "/commits.md": {"hash": "527563844c7a53d094694cc791622530", "content_type": "text/html"}, "/custom_attributes.md": {"hash": "e89dc10b197ce65f2d938df5bb3e1c79", "content_type": "text/html"}, "/deployments.md": {"hash": "7092af6cda8c29bb8d8666522e97e9e2", "content_type": "text/html"}, "/deploy_keys.md": {"hash": "0791dde4b9014d475973e547dd51ebd7", "content_type": "text/html"}, "/events.md": {"hash": "4ae9b992c7e9bd7a22fb8fda5a71262a", "content_type": "text/html"}, "/features.md": {"hash": "106c9129a21541f2a245739b91b8561a", "content_type": "text/html"}, "/templates/gitignores.md": {"hash": "8f84792627c9bbf608586b4dcec38341", "content_type": "text/html"}, "/templates/gitlab_ci_ymls.md": {"hash": "a756b58cc0cffd2fb7c0a90b0917f5e9", "content_type": "text/html"}, "/groups.md": {"hash": "2b25a9598b02942f7cdd57719251458f", "content_type": "text/html"}, "/access_requests.md": {"hash": "f1c1da72934b831ec4c67f9a8a9d805d", "content_type": "text/html"}, "/group_badges.md": {"hash": "f5bb2f13cf9cae81835cba270eda1eb1", "content_type": "text/html"}, "/members.md": {"hash": "a083818ff6898e852ca58b26212646e7", "content_type": "text/html"}, "/issues.md": {"hash": "7cba52c19d500e8bd2804dd42cbb7cac", "content_type": "text/html"}, "/boards.md": {"hash": "0d851a0aca487ab359bb7d92911c59c5", "content_type": "text/html"}, "/group_boards.md": {"hash": "42cdb332ac9fa40b93291042108d1f13", "content_type": "text/html"}, "/jobs.md": {"hash": "1998bccee83c89a29c8d841d98d61785", "content_type": "text/html"}, "/keys.md": {"hash": "f7219f5fe057f814133ffcdde643fe14", "content_type": "text/html"}, "/labels.md": {"hash": "99df2309983380035158ac6a85e96dc7", "content_type": "text/html"}, "/merge_requests.md": {"hash": "c5dbfe64fcc9f87127e42ad82d4cdcc6", "content_type": "text/html"}, "/milestones.md": {"hash": "02f9e53aee54691cebf2945503d894a5", "content_type": "text/html"}, "/group_milestones.md": {"hash": "e5a0f3bc8e79a5ddba1dd530664f153a", "content_type": "text/html"}, "/namespaces.md": {"hash": "1ca0aae40a4ae2b93333cf832cbd6b4b", "content_type": "text/html"}, "/notes.md": {"hash": "efaf4065f993aeb2fda107599240495c", "content_type": "text/html"}, "/discussions.md": {"hash": "c634668b70621fcb5cf1e085fefccfb4", "content_type": "text/html"}, "/notification_settings.md": {"hash": "0d137704b199027b037be0ac05d46ea7", "content_type": "text/html"}, "/templates/licenses.md": {"hash": "dc59ec71965b223d4330cbb463cd9c36", "content_type": "text/html"}, "/pages_domains.md": {"hash": "1f9c7ebe2b8c969bddf2cdd2f28cce38", "content_type": "text/html"}, "/pipeline_triggers.md": {"hash": "6aaac7d49141ad97177294b42d2e0605", "content_type": "text/html"}, "/pipeline_schedules.md": {"hash": "2a06b3a2c78f1a5901a296b607602043", "content_type": "text/html"}, "/projects.md": {"hash": "c25f93bb2905802f2dc9df8043dff947", "content_type": "text/html"}, "/project_badges.md": {"hash": "b6daf92cc59159d97392d763850f3624", "content_type": "text/html"}, "/project_import_export.md": {"hash": "7b1ccf5750f2780e65e99b4fc0ad643c", "content_type": "text/html"}, "/project_snippets.md": {"hash": "582d9390ea593a5a27b965744e92c19a", "content_type": "text/html"}, "/protected_branches.md": {"hash": "e7c6947370d0708ced8fb2756c1233a4", "content_type": "text/html"}, "/repositories.md": {"hash": "0dd7f22007ac6af10084cc9dd66cfca1", "content_type": "text/html"}, "/repository_files.md": {"hash": "d9258e4750c8c42660d2d0826c43465d", "content_type": "text/html"}, "/runners.md": {"hash": "75a81dda9a90bf119880b897713113c3", "content_type": "text/html"}, "/search.md": {"hash": "39a5093e32c2faea2c68f9bcc658451b", "content_type": "text/html"}, "/services.md": {"hash": "f45997945eff3edcdec2aca9fb049759", "content_type": "text/html"}, "/settings.md": {"hash": "4d7ec986c724ca77613fa555eb2be70c", "content_type": "text/html"}, "/sidekiq_metrics.md": {"hash": "9e10fc4bc274f4676fcd072d7c4715ea", "content_type": "text/html"}, "/system_hooks.md": {"hash": "decd3d4fa4a19afbb92094649141d7e0", "content_type": "text/html"}, "/tags.md": {"hash": "fb51ceabe778b277fbee3b7ca1ac7840", "content_type": "text/html"}, "/todos.md": {"hash": "6fcd826d4c1362764a295dac50b0e779", "content_type": "text/html"}, "/users.md": {"hash": "d070dd0cf0ada5154fae236d1fd9bd8d", "content_type": "text/html"}, "/lint.md": {"hash": "466c4a80126bc7af4e984ffcd9dd0b82", "content_type": "text/html"}, "/v3_to_v4.md": {"hash": "1b05da38a0144f86d751234ccef04f78", "content_type": "text/html"}, "/version.md": {"hash": "e84fae9388094564e53c934e51b5aab0", "content_type": "text/html"}, "/wikis.md": {"hash": "da3fbbfeb375b05afaea68a0c8064d72", "content_type": "text/html"}, "/oauth2.md": {"hash": "c3cc06ca02741cd3dc80e4d2abbbf45d", "content_type": "text/html"}, "/user/profile/personal_access_tokens.md": {"hash": "58f00eb7616103df72c02f8f2a9414d2", "content_type": "text/html"}, "/quick_start_guide.md": {"hash": "423823b11a2d661ed8d719d597e48c62", "content_type": "text/html"}, "/install/kubernetes/gitlab_omnibus.md": {"hash": "7f9b780c352f89093f3c105ad848d9da", "content_type": "text/html"}, "/user/project/clusters/index.md": {"hash": "43a0419043245b5d58e6d43a934acd32", "content_type": "text/html"}, "/user/project/integrations/services_templates.md": {"hash": "0fef0e33b5bb9cd87559fb7728a235d4", "content_type": "text/html"}, "/user/project/integrations/prometheus.md": {"hash": "00cad2882b6f6ddfbb13644b48a49cd1", "content_type": "text/html"}, "/img/autodevops_multiple_clusters.png": {"hash": "b271ae9f3f44db3325b5e796007fb6cd", "content_type": "image/png"}, "/img/autodevops_domain_variables.png": {"hash": "3d5dc765d6026740491b1e2e590146ed", "content_type": "image/png"}, "/user/project/container_registry.md": {"hash": "afa4d0d33f4655369d0bc019209711c0", "content_type": "text/html"}, "/user/project/integrations/prometheus_library/kubernetes.md": {"hash": "c384d5ee0c6d0a46953e254266923e56", "content_type": "text/html"}, "/user/project/integrations/prometheus_library/nginx_ingress.md": {"hash": "7f5e5e224edb992bfdf3d18fd2eee623", "content_type": "text/html"}, "/img/auto_monitoring.png": {"hash": "1243e49abbe9ff6de374327c7b20f469", "content_type": "image/png"}, "/img/rollout_staging_disabled.png": {"hash": "d250769c9957a9a448e609ed291af2d5", "content_type": "image/png"}, "/img/staging_enabled.png": {"hash": "d974eee372c82b33448b63de6492e291", "content_type": "image/png"}, "/img/rollout_enabled.png": {"hash": "8fad8f06af87856adeac4a11f052eef1", "content_type": "image/png"}, "/img/rollout_staging_enabled.png": {"hash": "85a770b317e6f9b69955de5083a8596f", "content_type": "image/png"}, "/topics/autodevops/index.md": {"hash": "3cfa9ad6020648cb6431f7ee8f150b75", "content_type": "text/html"}, "/integration/google.md": {"hash": "3946dc92dd4e5264d815d2224670c09c", "content_type": "text/html"}, "/install/kubernetes/gitlab_runner_chart.md": {"hash": "447f0c9044c5c8c0510522f67e49fdf2", "content_type": "text/html"}, "/ci/environments.md": {"hash": "1a8a21db83fc108098efb66bd88d4d1a", "content_type": "text/html"}, "/ci/yaml/README.md": {"hash": "30a75494b88eb3367d0ed8560c38c96a", "content_type": "text/html"}, "/integrations/prometheus_library/nginx.md": {"hash": "bf9ca084f0aba25f35f002ccd622c0bf", "content_type": "text/html"}, "/integrations/prometheus_library/kubernetes.md": {"hash": "053d951e5241370b977a7ad35974d048", "content_type": "text/html"}, "/eks_and_gitlab/index.md": {"hash": "2cec28a7c2c38a0edfa5229d6b866181", "content_type": "text/html"}, "/repository/index.md": {"hash": "fe1c2f4a5f05d2ff81284ce770bb5e37", "content_type": "text/html"}, "/getting_started_part_one.md": {"hash": "6b19bed8f4fb93f47f2e93f63658ce3a", "content_type": "text/html"}, "/getting_started_part_two.md": {"hash": "eb675fa53868a5e4e80361366eb98e92", "content_type": "text/html"}, "/getting_started_part_three.md": {"hash": "b3bacce3d3316b0d164538a930bb6d6e", "content_type": "text/html"}, "/getting_started_part_four.md": {"hash": "f7857afb26f841c24cd84d196fd0bea6", "content_type": "text/html"}, "/introduction.md": {"hash": "8452f75b4f00d055c117c64d3facdfa7", "content_type": "text/html"}, "/administration/pages/index.md": {"hash": "51c04b1ff64fb248ef12a3120d917c07", "content_type": "text/html"}, "/administration/container_registry.md": {"hash": "8423a576d0f5c37f8d2b9db759aea7a3", "content_type": "text/html"}, "/profile/personal_access_tokens.md": {"hash": "2486aafbaec3d0699fd34002156235c7", "content_type": "text/html"}, "/img/container_registry.png": {"hash": "0f7fa70712b3499e628f64c2c24c7048", "content_type": "image/png"}, "/ci/docker/using_docker_build.md": {"hash": "39c992a1c2c2edf73e5444d4119a63e3", "content_type": "text/html"}, "/project/deploy_tokens/index.md": {"hash": "ef6c9be2ceb298039d4478d7a2c8f16e", "content_type": "text/html"}, "/img/mitmproxy-docker.png": {"hash": "94db2f6e857e73f3e1c9f98af85506ea", "content_type": "image/png"}, "/img/mattermost_goto_console.png": {"hash": "5828d72f146efb9ae4e051a87b6b4d3b", "content_type": "image/png"}, "/img/mattermost_console_integrations.png": {"hash": "107fd6a8580af43920daee0771b88187", "content_type": "image/png"}, "/img/mattermost_config_help.png": {"hash": "cda1584b905428ffaf769d4d0e713121", "content_type": "image/png"}, "/img/mattermost_team_integrations.png": {"hash": "377cca9eca86a363860626e5d087f882", "content_type": "image/png"}, "/img/mattermost_add_slash_command.png": {"hash": "cae2202c857920713167fc83e3f033e3", "content_type": "image/png"}, "/img/mattermost_slash_command_configuration.png": {"hash": "1285e4ef5f038f6da41e2989124f2af6", "content_type": "image/png"}, "/img/mattermost_slash_command_token.png": {"hash": "dcdef5beb5cafc09623b1d5217d03f39", "content_type": "image/png"}, "/img/mattermost_gitlab_token.png": {"hash": "f4a8320e5c08b80903242dbe1a374931", "content_type": "image/png"}, "/img/mattermost_bot_auth.png": {"hash": "98fca36cc484f895234870d4580ffaf1", "content_type": "image/png"}, "/img/mattermost_bot_available_commands.png": {"hash": "81d6902707c7c78da15a2c5ea7c5dc3d", "content_type": "image/png"}, "/slack.md": {"hash": "0d9c9593cce81d8f2a81816b0140907c", "content_type": "text/html"}, "/img/slack_setup.png": {"hash": "66ffc9824d0033ac909f1a63b7c40397", "content_type": "image/png"}, "/integration/slash_commands.md": {"hash": "f51fc8c27fccbdc2a5bb1024938713c3", "content_type": "text/html"}, "/project/quick_actions.md": {"hash": "137dc0760ead6468eed3a51ff2a0d290", "content_type": "text/html"}, "/administration/reply_by_email.md": {"hash": "3e3e2b27947512ccb003409cf7b1c778", "content_type": "text/html"}, "/img/discussion_view.png": {"hash": "3fe98d1e31f250b3619c1fbd238a4695", "content_type": "image/png"}, "/img/merge_request_commits_tab.png": {"hash": "2c992026bf8de05bbf1b344dba77e980", "content_type": "image/png"}, "/img/commit_comment_mr_context.png": {"hash": "739779958ef7b4930fa0c764246ae7f6", "content_type": "image/png"}, "/img/commit_comment_mr_discussions_tab.png": {"hash": "2340367bd94e333e8f3a1c141df8c989", "content_type": "image/png"}, "/img/discussions_resolved.png": {"hash": "d9c86f196a6d627e1a02d3916f87770f", "content_type": "image/png"}, "/img/resolve_discussion_button.png": {"hash": "1bb64356b580abe3d3cc323c024eed7a", "content_type": "image/png"}, "/img/resolve_comment_button.png": {"hash": "51722ff5a84feeff3789d6598e93771f", "content_type": "image/png"}, "/img/btn_new_issue_for_all_discussions.png": {"hash": "36a78d0c88a9e06a08212bc324a5e170", "content_type": "image/png"}, "/img/resolve_discussion_open_issue.png": {"hash": "92054b1abcb8c3fdbcc88d56630a1b95", "content_type": "image/png"}, "/img/preview_issue_for_discussions.png": {"hash": "4432a280127e34dd4a132f3d06dc3c95", "content_type": "image/png"}, "/img/resolve_discussion_issue_notice.png": {"hash": "239fca638e6b706f280b72599d752ee5", "content_type": "image/png"}, "/img/new_issue_for_discussion.png": {"hash": "940350b0793bcd688e2a9e32ce20c557", "content_type": "image/png"}, "/img/preview_issue_for_discussion.png": {"hash": "33fb8cc3e0881045fc9f67ceeac4db6b", "content_type": "image/png"}, "/img/only_allow_merge_if_all_discussions_are_resolved.png": {"hash": "595f083d7dd001d2bcd724e5e0c9318b", "content_type": "image/png"}, "/img/only_allow_merge_if_all_discussions_are_resolved_msg.png": {"hash": "5abc9c3adb22b7a6b3659ec7f55d0d3b", "content_type": "image/png"}, "/img/automatically_resolve_outdated_discussions.png": {"hash": "0aabf264aa8fed2f1c3746f1d179c651", "content_type": "image/png"}, "/img/comment_type_toggle.gif": {"hash": "07ff3147dc614b37e8a04469ba02ba63", "content_type": "image/gif"}, "/img/discussion_comment.png": {"hash": "f3c19237fed852e3503e0c0fe682fd33", "content_type": "image/png"}, "/img/start_image_discussion.gif": {"hash": "e32a310a7b6e8e568faecfed2f8b5adc", "content_type": "image/gif"}, "/img/two_up_view.png": {"hash": "13072692a6624a32a09e446f7fa1b320", "content_type": "image/png"}, "/img/swipe_view.png": {"hash": "51c5764f5efd37dc8573b5686f4537f7", "content_type": "image/png"}, "/img/onion_skin_view.png": {"hash": "cd74db63736df6f38f3243b74130f92f", "content_type": "image/png"}, "/img/image_resolved_discussion.png": {"hash": "90b037486f7843b7175255fb4255a8c0", "content_type": "image/png"}, "/img/turn_off_lock.png": {"hash": "4290b535ea2cee7a1bb59b7d423f998d", "content_type": "image/png"}, "/img/turn_on_lock.png": {"hash": "1823043df2ee58b2cee77f6d1e13f701", "content_type": "image/png"}, "/img/discussion_lock_system_notes.png": {"hash": "75f33406b5ed3f6c2d078d61f9b89a94", "content_type": "image/png"}, "/img/lock_form_member.png": {"hash": "01509acdbd55efb87dc9ef9b2f7334a7", "content_type": "image/png"}, "/img/lock_form_non_member.png": {"hash": "49a3486c396c42c31181ec0b02410e03", "content_type": "image/png"}, "/img/project_issues_list_view.png": {"hash": "d16ab042f455187250bdc4acbb265aa1", "content_type": "image/png"}, "/img/group_issues_list_view.png": {"hash": "590bcdaeabfbc3e1f07b5538663ab29f", "content_type": "image/png"}, "/img/issues_main_view.png": {"hash": "d73c8abfcfd2b2ce7b9a6960a19e3336", "content_type": "image/png"}, "/issues_functionalities.md": {"hash": "c5fc2cd3f3b8b5a9583d2fd900084b6d", "content_type": "text/html"}, "/create_new_issue.md": {"hash": "6954c68f5a65b9f184096f692b3fb73e", "content_type": "text/html"}, "/closing_issues.md": {"hash": "3e4366f462ce6f436206c4e76a5198a3", "content_type": "text/html"}, "/moving_issues.md": {"hash": "04d372e3bec9cc01a18f6b739fbadaf0", "content_type": "text/html"}, "/deleting_issues.md": {"hash": "20139e722022ac5f9da572684f37894e", "content_type": "text/html"}, "/confidential_issues.md": {"hash": "d4bd896cb52e4a0468b549cf8efad6ec", "content_type": "text/html"}, "/img/issue_template.png": {"hash": "ce4c157a3cb9ac5a9ec4e1c9d9218ef2", "content_type": "image/png"}, "/crosslinking_issues.md": {"hash": "19d340e6c240b14e8f7c5c77287992ba", "content_type": "text/html"}, "/img/issue_board.png": {"hash": "8fc8c5d1faa03e3ba6005c9e6c006082", "content_type": "image/png"}, "/issue_board.md": {"hash": "9ae72c92c5819e4ac4b71715b9d8ba4c", "content_type": "text/html"}, "/integration/external-issue-tracker.md": {"hash": "d9f09b89f78b863a1b20e06ce9d6ba21", "content_type": "text/html"}, "/api/issues.md": {"hash": "3e5ffd54d76c25fac9aa27c5b22ca068", "content_type": "text/html"}, "/project/bulk_editing.md": {"hash": "c7f445bc951d6e0b99c0d6e6198a4565", "content_type": "text/html"}, "/img/issue_board_move_issue_card_list.png": {"hash": "50386fbd9280c0005a95e3dc1638c21a", "content_type": "image/png"}, "/img/issue_board_welcome_message.png": {"hash": "c542e09d374c9ad31890ac79dee65514", "content_type": "image/png"}, "/img/issue_board_add_list.png": {"hash": "e15a3a23d9737386114b79215c06d98e", "content_type": "image/png"}, "/img/issue_boards_add_issues_modal.png": {"hash": "3093d2ecefe93a7f74afb053665806a2", "content_type": "image/png"}, "/img/issue_boards_remove_issue.png": {"hash": "9f95de92cb9c6041e6c24f6d6fd286f8", "content_type": "image/png"}, "/img/issue_board_system_notes.png": {"hash": "b35e865bed05d48e918057c9004d24ec", "content_type": "image/png"}, "/img/issue_boards_multiple.png": {"hash": "d36ee5bac8c0e820610320538a294b9f", "content_type": "image/png"}, "/img/issue_board_creation.png": {"hash": "3d1ba6aabae611441a6a9d7f9e02584d", "content_type": "image/png"}, "/img/issue_board_edit_button.png": {"hash": "620571f8a5a8c683bd98c7d2d8d9db28", "content_type": "image/png"}, "/img/issue_board_view_scope.png": {"hash": "5e021317c833150d09c6db71abf04b69", "content_type": "image/png"}, "/img/issue_board_focus_mode.gif": {"hash": "255fc8eb79dbe2dd7768fe81ee59c653", "content_type": "image/gif"}, "/img/group_issue_board.png": {"hash": "aeabfffeeefc3d6e12b12c9e64cff2e8", "content_type": "image/png"}, "/img/issue_board_assignee_lists.png": {"hash": "afd765dde2959352f5dabc7b86bf46b2", "content_type": "image/png"}, "/img/description_templates.png": {"hash": "9d8861ccda5de013cf52ea6cd4bd0089", "content_type": "image/png"}, "/quick_actions.md": {"hash": "0a2b827d2f0d1835c2ce0962de5bb886", "content_type": "text/html"}, "/img/labels_generate_default.png": {"hash": "3ea11d056919940c69187e6d1d590d59", "content_type": "image/png"}, "/img/labels_default.png": {"hash": "0e3d418e0243ef904ee17110e5732992", "content_type": "image/png"}, "/img/labels_list.png": {"hash": "b214751591482973b2840c4e30f1e0c1", "content_type": "image/png"}, "/img/new_label_from_sidebar.gif": {"hash": "5026e5c5486e2f54255eef74c245e209", "content_type": "image/gif"}, "/img/labels_promotion.png": {"hash": "e2e938d34fd0b8decb74a2daa4084426", "content_type": "image/png"}, "/img/labels_sidebar.png": {"hash": "84d089f093bb512afbb15908e47923f2", "content_type": "image/png"}, "/img/labels_sidebar_assign.png": {"hash": "8cb15fbed57606ddbefde182387e9341", "content_type": "image/png"}, "/img/labels_group_issues.png": {"hash": "3aef8fc32d59b33620dd3f1e2ab8e18e", "content_type": "image/png"}, "/workflow/notifications.md": {"hash": "2f77f5ecc6e8e851ed318cb53ef62ed0", "content_type": "text/html"}, "/img/labels_subscriptions.png": {"hash": "13c67b1ca69f6711a3b87f474e904e6a", "content_type": "image/png"}, "/img/labels_prioritized.png": {"hash": "2b37744f8255b86cd2cc85605bb185a7", "content_type": "image/png"}, "/img/labels_sort_label_priority.png": {"hash": "9ac28a9c71654c6df250bc720c201c23", "content_type": "image/png"}, "/milestones/index.md": {"hash": "293aa294c6e6dc2bb766e809162f2b5b", "content_type": "text/html"}, "/img/labels_sort_priority.png": {"hash": "493ae2ee33c154b29886cb7f1215a213", "content_type": "image/png"}, "/img/milestones_new_project_milestone.png": {"hash": "651791600bedced4bfe19e6bfc799e2d", "content_type": "image/png"}, "/img/milestones_new_group_milestone.png": {"hash": "bcf5babd9ed787804cd8cbcf86ec1d15", "content_type": "image/png"}, "/img/milestones_promote_milestone.png": {"hash": "2372a0f0327562267e5588c388c9228f", "content_type": "image/png"}, "/img/milestones_project_milestone_page.png": {"hash": "84bb8b9ff2ad1c7afd2ede8dcbb80970", "content_type": "image/png"}, "/img/todos_index.png": {"hash": "87c96f601b7a90fd4d9847347b99777b", "content_type": "image/png"}, "/img/todos_icon.png": {"hash": "32ab58594adab1fb5b2f366b688ca3a6", "content_type": "image/png"}, "/img/todos_add_todo_sidebar.png": {"hash": "f9223fa4e8e98988496dfd6b59170e80", "content_type": "image/png"}, "/img/todo_list_item.png": {"hash": "1778b73e0156b467ffe3cfb070cd774e", "content_type": "image/png"}, "/img/todos_mark_done_sidebar.png": {"hash": "5e49961f25d7387ccf0e9443d8e8bfab", "content_type": "image/png"}, "/bitbucket.md": {"hash": "35bc78135b152916707d2bbdd1f9b465", "content_type": "text/html"}, "/clearcase.md": {"hash": "f2fc1da64df836643aced59cd9802c55", "content_type": "text/html"}, "/cvs.md": {"hash": "7581681477cdc17ef4a0bd2673ec56f9", "content_type": "text/html"}, "/fogbugz.md": {"hash": "5d2c035e14429107ce2cfdf02f7e6060", "content_type": "text/html"}, "/github.md": {"hash": "e2f08e671a0acd2195a933e87cc492e6", "content_type": "text/html"}, "/gitlab_com.md": {"hash": "f17e65e68f86c8bb973cae5856974cd4", "content_type": "text/html"}, "/gitea.md": {"hash": "d908df4eb4d8a12cb2dc574cd5c278b0", "content_type": "text/html"}, "/perforce.md": {"hash": "8a66d3d043f60810dddd15f158c3420b", "content_type": "text/html"}, "/svn.md": {"hash": "7c215b4f601d294eb86370969589b2de", "content_type": "text/html"}, "/tfs.md": {"hash": "2211b83ba6eaf7ba73f0b32c195ee9ef", "content_type": "text/html"}, "/repo_by_url.md": {"hash": "88cb3f8405915aa6ddbd22ef3d3cce3e", "content_type": "text/html"}, "/settings/import_export.md": {"hash": "bb84096ca80f89986756001777a07d6f", "content_type": "text/html"}, "/user/project/import/svn.md": {"hash": "1e75b9d20f6277188019e9eb2cf72628", "content_type": "text/html"}, "/public_access/public_access.md": {"hash": "aa1f406684ac7332d7c7511e2c66d3d4", "content_type": "text/html"}, "/issues/index.md": {"hash": "80f33d89cede7301b23609353f199359", "content_type": "text/html"}, "/repository/branches/index.md": {"hash": "8e75ebfd9c22c4d922f9723af6dde882", "content_type": "text/html"}, "/protected_tags.md": {"hash": "7d86a897181889317e4d621e66ab99e3", "content_type": "text/html"}, "/gpg_signed_commits/index.md": {"hash": "4c6fddadab73fe107e48c01c966d47f6", "content_type": "text/html"}, "/deploy_tokens/index.md": {"hash": "46ad007cd1831a6aa27ff367ac4222be", "content_type": "text/html"}, "/merge_requests/index.md": {"hash": "4c1ac215304925aabe43338c2b6cd4ed", "content_type": "text/html"}, "/merge_requests/resolve_conflicts.md": {"hash": "2e14ab9a6de0179ed4dc5c60f52d4ac2", "content_type": "text/html"}, "/workflow/time_tracking.md": {"hash": "b626467473f0c29416ab200f0a8567d5", "content_type": "text/html"}, "/description_templates.md": {"hash": "f4cc057b05f2c0ede8974476cfd3e0dd", "content_type": "text/html"}, "/web_ide/index.md": {"hash": "3a781c63c9e6c409f1cb4f9f0610d87e", "content_type": "text/html"}, "/ci/enable_or_disable_ci.md": {"hash": "2b4819b3d3f3efb412e9c18cc226514d", "content_type": "text/html"}, "/pipelines/schedules.md": {"hash": "8580b99b7c7fa8bf51fac9eaaa078eb2", "content_type": "text/html"}, "/pipelines/job_artifacts.md": {"hash": "15f648c459cf4d5dd3e91eb0e429bcd1", "content_type": "text/html"}, "/pipelines/settings.md": {"hash": "6d587be498b63c46a0216fd9dc6a5f05", "content_type": "text/html"}, "/clusters/index.md": {"hash": "deb807e7f62501f71aebdfd1c817a449", "content_type": "text/html"}, "/wiki/index.md": {"hash": "f1d117198259f9e5aa4a54213903068f", "content_type": "text/html"}, "/cycle_analytics.md": {"hash": "bd6394a20de65ace74edc1784097269b", "content_type": "text/html"}, "/highlighting.md": {"hash": "dc2e8acf3016937f9df6d6d67c507566", "content_type": "text/html"}, "/badges.md": {"hash": "bca68c7f09afdfaf0393b1efdef731dd", "content_type": "text/html"}, "/integrations/index.md": {"hash": "56157278c5d5b227e5ee024acdf9b390", "content_type": "text/html"}, "/gitlab-basics/create-project.md": {"hash": "5b296ec9bb333553ee6b4b6c44a3a258", "content_type": "text/html"}, "/gitlab-basics/fork-project.md": {"hash": "87b0f2b50524262fe345974c71a1d96c", "content_type": "text/html"}, "/settings/index.md": {"hash": "e98dcb044b6bec51f8e909404c9a8e09", "content_type": "text/html"}, "/import/index.md": {"hash": "bc26ba0a4f4bb36461f048a96a92839e", "content_type": "text/html"}, "/import/github.md": {"hash": "b90b0a2b5ded3bf8e573f3c340274d14", "content_type": "text/html"}, "/import/bitbucket.md": {"hash": "ae64505298966f4b2e75d01368388c01", "content_type": "text/html"}, "/import/gitea.md": {"hash": "4c89144147c703dc28319b803010780a", "content_type": "text/html"}, "/import/fogbugz.md": {"hash": "34d2c63f02db2b735427bc7bba48929b", "content_type": "text/html"}, "/members/index.md": {"hash": "773fa490ae278efcfddda13e60228a3d", "content_type": "text/html"}, "/index.md": {"hash": "bf31dfcf48053c7761da0a91ee052411", "content_type": "text/html"}, "/img/general_settings.png": {"hash": "5dc852a748874c3f54b82dea0b4abfc9", "content_type": "image/png"}, "/img/sharing_and_permissions_settings.png": {"hash": "88d55ef2e2191e8000c64806e1653f5c", "content_type": "image/png"}, "/merge_requests/fast_forward_merge.html": {"hash": "0eb6917fdf4358b2c616a27db38f0030", "content_type": "text/html"}, "/merge_requests/merge_when_pipeline_succeeds.md": {"hash": "e5f7869e0d297def3d34be08df0eb31c", "content_type": "text/html"}, "/img/merge_requests_settings.png": {"hash": "1debed0b4cc0df93dc6ec456f247fbf1", "content_type": "image/png"}, "/user/reserved_names.md": {"hash": "56e91778d816621fb402aee733bf3586", "content_type": "text/html"}, "/img/create_new_project_button.png": {"hash": "468f546c0b61446a39f00d50790a8cd0", "content_type": "image/png"}, "/img/create_new_project_info.png": {"hash": "329f619ff2359f632322bccb5293cabd", "content_type": "image/png"}, "/workflow/importing/README.md": {"hash": "4d45daea3ca28d4e3158f5522b7cf9cf", "content_type": "text/html"}, "/img/fork_new.png": {"hash": "b8f18291054802ea7aad3b1ec6b5f01d", "content_type": "image/png"}, "/img/fork_choose_namespace.png": {"hash": "bcb4813f342c315c7207242cc4e98b8a", "content_type": "image/png"}, "/administration/raketasks/project_import_export.md": {"hash": "b9b294f682a6368d698497e228a66f12", "content_type": "text/html"}, "/development/shared_files.md": {"hash": "7ff9eaf1c3741f398055e4f36ccbb7ee", "content_type": "text/html"}, "/api/project_import_export.md": {"hash": "fe4fe5788ba8df351904cae64fd5c641", "content_type": "text/html"}, "/img/settings_edit_button.png": {"hash": "3b2ebb985d2aa84267cfc42ff7bf2592", "content_type": "image/png"}, "/img/import_export_export_button.png": {"hash": "49b541f6387bdebc4c050a98fb91a511", "content_type": "image/png"}, "/img/import_export_mail_link.png": {"hash": "af5fdd22b702bd650c67f78412102347", "content_type": "image/png"}, "/img/import_export_download_export.png": {"hash": "a570985fcf650222411e60e2770c46d3", "content_type": "image/png"}, "/img/import_export_new_project.png": {"hash": "44996bfded0bf6d2491e2e7d7afcb552", "content_type": "image/png"}, "/img/import_export_select_file.png": {"hash": "826639e04249550e94604b6451e18ae1", "content_type": "image/png"}, "/user/permissions.md": {"hash": "15204cfaa6e4c2b6ef719ff0a83a4923", "content_type": "text/html"}, "/img/restrict_visibility_levels.png": {"hash": "78648a1fa794db2762d19f1a0a5c8851", "content_type": "image/png"}, "/subgroups/index.md": {"hash": "00f67112fd3ca016fce1a69f39adbfaf", "content_type": "text/html"}, "/img/groups.png": {"hash": "38112e8f3fff6e9916178262e3a9e87c", "content_type": "image/png"}, "/reserved_names.md": {"hash": "9e74034a9d1c1abc78f1b142283ac401", "content_type": "text/html"}, "/img/new_group_from_groups.png": {"hash": "6c24ff6951dc207f403145e05a4983e4", "content_type": "image/png"}, "/img/new_group_from_other_pages.png": {"hash": "8e6bdc15136f30470d9690f8f5283af3", "content_type": "image/png"}, "/img/create_new_group_info.png": {"hash": "ca0987b34b512c42c5730ad507064d48", "content_type": "image/png"}, "/img/add_new_members.png": {"hash": "3a106cf77a9e4163b8d2db238b634ff1", "content_type": "image/png"}, "/img/request_access_button.png": {"hash": "81a9d96561846719d8215a353d61df73", "content_type": "image/png"}, "/img/access_requests_management.png": {"hash": "8dbd3a19b1fc9753880bf572f900a778", "content_type": "image/png"}, "/img/withdraw_access_request_button.png": {"hash": "b508b12d7aec3b4904bfa2faac7ce595", "content_type": "image/png"}, "/img/create_new_project_from_group.png": {"hash": "67209636667724283ba94357ea22275f", "content_type": "image/png"}, "/img/select_group_dropdown.png": {"hash": "fa836ad2b3941f226b854e6ec9fa5c8d", "content_type": "image/png"}, "/project/members/share_project_with_groups.md": {"hash": "af8c6e71d0cef58240be61958fe91032", "content_type": "text/html"}, "/integration/ldap.md": {"hash": "722cf8946e1aad3a99d4fdc307a84924", "content_type": "text/html"}, "/img/group_settings.png": {"hash": "771f2536b6e9e74ee33e84d6d7d9e5eb", "content_type": "image/png"}, "/img/share_with_group_lock.png": {"hash": "16bf9e04345baaa908bf0dabc135c235", "content_type": "image/png"}, "/admin_area/settings/continuous_integration.md": {"hash": "5f54570b8f368b93890cbe67586de45a", "content_type": "text/html"}, "/img/create_subgroup_button.png": {"hash": "44d68ced6245fe77efb329b4744f1c7d", "content_type": "image/png"}, "/img/create_new_group.png": {"hash": "2f1210b53f46ee6471b636833a21d11c", "content_type": "image/png"}, "/img/group_members.png": {"hash": "16f3679fce5753826b92d6ff813ad49c", "content_type": "image/png"}, "/img/mention_subgroups.png": {"hash": "be8b5bb501e6aec739baffd54a34d03d", "content_type": "image/png"}, "/img/left_menu_bar.png": {"hash": "b88c8b02aed8a6c0c62aa35e06bb6f23", "content_type": "image/png"}, "/img/issues_assigned_to_you.png": {"hash": "011b5c581cfdb9edd9cb1d007fd9361c", "content_type": "image/png"}, "/img/issues_mrs_shortcut.png": {"hash": "cd3613fcea7fb27654b85d5b4a8b3fe1", "content_type": "image/png"}, "/img/issue_search_filter.png": {"hash": "ba337f76a7c59b766c6e03dfebb5e9af", "content_type": "image/png"}, "/img/issue_search_by_term.png": {"hash": "23a55c4ef1d8e736b4b58d68539d1083", "content_type": "image/png"}, "/img/group_issues_filter.png": {"hash": "d4a754a1247635a82a18f060d887d8e3", "content_type": "image/png"}, "/img/search_history.gif": {"hash": "fd8a2e498117ab240d4265d46e7c0cf2", "content_type": "image/gif"}, "/img/project_search.png": {"hash": "af3f14382360317bdf493b840a26602b", "content_type": "image/png"}, "/img/sort_projects.png": {"hash": "78ff55ae42df93f65a06840b52050a86", "content_type": "image/png"}, "/user/project/issue_board.md": {"hash": "a2c8ca2478cc4e33f7b9239f6db1af3c", "content_type": "text/html"}, "/img/search_issues_board.png": {"hash": "59f1c039d9a3e96be3c5baee5a87923a", "content_type": "image/png"}, "/img/gitlab_snippet.png": {"hash": "d0e99f0221a9539cc9cd113b553b3572", "content_type": "image/png"}, "/img/wiki_create_home_page.png": {"hash": "332d37a53a2bea8802a6bec746635ff2", "content_type": "image/png"}, "/img/wiki_create_new_page_modal.png": {"hash": "761f6b69deeb73db9e3a349986ce535f", "content_type": "image/png"}, "/img/wiki_create_new_page.png": {"hash": "5d403cd553e5084ef34519b0720f30f0", "content_type": "image/png"}, "/img/wiki_move_page_1.png": {"hash": "d02afc636cf1cdb1ad0cf9e1df343432", "content_type": "image/png"}, "/img/wiki_move_page_2.png": {"hash": "bef9740f7e890bf22ca876a7f5c87ece", "content_type": "image/png"}, "/img/wiki_sidebar.png": {"hash": "39a367568b8db0bd4ce8d06634c9b5bd", "content_type": "image/png"}, "/img/wiki_page_history.png": {"hash": "18d17453530d169dda7b89234a3d43e2", "content_type": "image/png"}, "/img/open_web_ide.png": {"hash": "608c21b506510ca2aed67952ec145ad0", "content_type": "image/png"}, "/img/commit_changes.png": {"hash": "69c4f8ef6cd36d2275fcf0fdc20ba69d", "content_type": "image/png"}, "/gitlab-basics/start-using-git.md": {"hash": "cadb096c3d0ed627da843c5d5bea4ceb", "content_type": "text/html"}, "/ssh/README.md": {"hash": "18fcae1cdf3382a7a78f769410c41f69", "content_type": "text/html"}, "/ci/quick_start/README.md": {"hash": "0a71e7af1b30c76f433f86ec4d272a74", "content_type": "text/html"}, "/web_editor.md": {"hash": "44f3aad90a58383fa5438d4181b53b9e", "content_type": "text/html"}, "/gitlab-basics/command-line-commands.md": {"hash": "d30ece8a1156b6675af16eb9e46db64d", "content_type": "text/html"}, "/workflow/file_finder.md": {"hash": "1c6927c37ca51ff44d1f34311be68bc6", "content_type": "text/html"}, "/img/jupyter_notebook.png": {"hash": "fed01959bc47bcc3889272784b1082ba", "content_type": "image/png"}, "/branches/index.md": {"hash": "4405a63258c80e9b7aa7c4ae5a11fa9b", "content_type": "text/html"}, "/discussions/index.md": {"hash": "79b5f9294878ba19dc20c6c67de92bea", "content_type": "text/html"}, "/university/training/gitlab_flow.md": {"hash": "b640c667eb664b6ea4382ea4e0dae7d5", "content_type": "text/html"}, "/reducing_the_repo_size_using_git.md": {"hash": "7ed015eca7ab55df4d5270491434be38", "content_type": "text/html"}, "/img/contributors_graph.png": {"hash": "f2ab453439542da660886979072546ed", "content_type": "image/png"}, "/img/repo_graph.png": {"hash": "c31b42e4cc7d903f5b4cb9886e694006", "content_type": "image/png"}, "/img/compare_branches.png": {"hash": "36789535d9ff2c2c545b8552596b716c", "content_type": "image/png"}, "/api/repositories.md": {"hash": "822d249e88417164b332d883dd37fd7e", "content_type": "text/html"}, "/issues/automatic_issue_closing.md": {"hash": "3022f0f863bd67c9d062147dc5799ebb", "content_type": "text/html"}, "/img/delete_merged_branches.png": {"hash": "eb362d18ab273ca7d08e61cb62a81f9e", "content_type": "image/png"}, "/profile/img/profile_settings_dropdown.png": {"hash": "c1938599c8356232184e17f6bd7c42f4", "content_type": "image/png"}, "/img/profile_settings_gpg_keys_paste_pub.png": {"hash": "a7576ac888aad6bee8c2d0a97eee3986", "content_type": "image/png"}, "/img/profile_settings_gpg_keys_single_key.png": {"hash": "1f01c27984d416769f13f9f244350242", "content_type": "image/png"}, "/img/project_signed_and_unsigned_commits.png": {"hash": "1f52f956256b965314f03b85c2afbd61", "content_type": "image/png"}, "/img/project_signed_commit_verified_signature.png": {"hash": "089138e877bd49e0ccf8bda19e18519e", "content_type": "image/png"}, "/img/project_signed_commit_unverified_signature.png": {"hash": "96be17f960432cbb2b231f026cc6cf35", "content_type": "image/png"}, "/img/merge_request.png": {"hash": "017c53ddded64bf3a9c4770c8a54ea3b", "content_type": "image/png"}, "/project/labels.md": {"hash": "7d10fc4b3f34fcbb00303f91c8e7a54d", "content_type": "text/html"}, "/allow_collaboration.md": {"hash": "ddbf0f95f64dc80d5a051ef03c966c7c", "content_type": "text/html"}, "/squash_and_merge.md": {"hash": "a3a1e52ce6760c558c0733880bbd7470", "content_type": "text/html"}, "/img/project_merge_requests_list_view.png": {"hash": "5ea748045c66a1e6fce7bb66aac0fe95", "content_type": "image/png"}, "/img/group_merge_requests_list_view.png": {"hash": "f398ac5cdc2994ff7e93bd59055784c9", "content_type": "image/png"}, "/img/remove_source_branch_status.png": {"hash": "abd46b75244b80b8114c693caa70eafd", "content_type": "image/png"}, "/authorization_for_merge_requests.md": {"hash": "65865356414c4e70dabe7a74693d3e86", "content_type": "text/html"}, "/cherry_pick_changes.md": {"hash": "b2076d21e934046a64c07bb15702a79d", "content_type": "text/html"}, "/fast_forward_merge.md": {"hash": "6d5d685627634885ea0a2053326a39e0", "content_type": "text/html"}, "/merge_when_pipeline_succeeds.md": {"hash": "ea47120004af61f1c7db4cc5d28560b9", "content_type": "text/html"}, "/resolve_conflicts.md": {"hash": "969ff2c314d3b4826e65468f8e448577", "content_type": "text/html"}, "/administration/incoming_email.md": {"hash": "a6ce42dd1a21ed84572003f680aba1d8", "content_type": "text/html"}, "/img/create_from_email.png": {"hash": "476f150724bea51afdc8f9074255633b", "content_type": "image/png"}, "/versions.md": {"hash": "b649ad9f6e856050dc7bef2ffe46ab45", "content_type": "text/html"}, "/revert_changes.md": {"hash": "a3387cb0287729b796772788a564805e", "content_type": "text/html"}, "/work_in_progress_merge_requests.md": {"hash": "f6ea83288ecf61fb2764b10478d95ff2", "content_type": "text/html"}, "/img/merge_request_diff_file_navigation.png": {"hash": "d36909b17a0c445213749b77d95f7931", "content_type": "image/png"}, "/img/merge_request_diff.png": {"hash": "0959c107d9e955107db9eba58e6e6dbc", "content_type": "image/png"}, "/img/wip_blocked_accept_button.png": {"hash": "908ddb362d8b7f2a263da8aae82af9b7", "content_type": "image/png"}, "/img/wip_mark_as_wip.png": {"hash": "47420ca678362929744f2a40ecdc6db6", "content_type": "image/png"}, "/img/wip_unmark_as_wip.png": {"hash": "40ca4acc94554f22ee2f9218468be2f9", "content_type": "image/png"}, "/img/cherry_pick_changes_mr.png": {"hash": "a6201bdde2948fddb735420d385b28c3", "content_type": "image/png"}, "/img/cherry_pick_changes_commit.png": {"hash": "c2abac2d825a450ce5744652f3c59713", "content_type": "image/png"}, "/img/project_services.png": {"hash": "1ea89b7cdcf5f4b786514c9bb7397148", "content_type": "image/png"}, "/bamboo.md": {"hash": "531a7629a8df586f44f1c7dd1ac3420b", "content_type": "text/html"}, "/bugzilla.md": {"hash": "2f1b388cf08b16e8b903db4834b8cd12", "content_type": "text/html"}, "/emails_on_push.md": {"hash": "61f01ff40d75261951b595859b534937", "content_type": "text/html"}, "/hipchat.md": {"hash": "d19fa492c38adb8c99b1c5e3f97e9000", "content_type": "text/html"}, "/irker.md": {"hash": "9a21fb8b085bef57d8ec40bb1c30c61e", "content_type": "text/html"}, "/jira.md": {"hash": "6170b1f53161c945672d8763da02d2b4", "content_type": "text/html"}, "/mattermost_slash_commands.md": {"hash": "39d7cba014e79f6dc63dd5345db943e7", "content_type": "text/html"}, "/mattermost.md": {"hash": "1299b0df2d99addaac4b4a464823c201", "content_type": "text/html"}, "/microsoft_teams.md": {"hash": "1103a5db6f8a9e32930cc9e5d391ca0f", "content_type": "text/html"}, "/slack_slash_commands.md": {"hash": "39b937e70b4c16da68747619480c8764", "content_type": "text/html"}, "/prometheus.md": {"hash": "144303eac4e31b53fb4391f95cbc9d23", "content_type": "text/html"}, "/redmine.md": {"hash": "7d7bab58e561a841e7846fef92e8233d", "content_type": "text/html"}, "/services_templates.md": {"hash": "72dddc0eb341b3c2e4200a93476a2848", "content_type": "text/html"}, "/akismet.md": {"hash": "0bd0799e885da5c532d5941265964b6a", "content_type": "text/html"}, "/auth0.md": {"hash": "3c1bde33346d894226c0a05cf92fae5a", "content_type": "text/html"}, "/cas.md": {"hash": "80d26353edf3fd60eca1945e4baa2de4", "content_type": "text/html"}, "/external-issue-tracker.md": {"hash": "832c5d1304f500e6212fbfc65d06effc", "content_type": "text/html"}, "/gmail_action_buttons_for_gitlab.md": {"hash": "1db59a49e26239c20dbd7f207e6f58cf", "content_type": "text/html"}, "/user/project/integrations/jira.md": {"hash": "a83cd80ace656cf67032eefe418a9995", "content_type": "text/html"}, "/ldap.md": {"hash": "cf5f71b586d957555d29c58b934aecf1", "content_type": "text/html"}, "/oauth_provider.md": {"hash": "3001f2c5a84c0f679a2f9086a8fd3de3", "content_type": "text/html"}, "/omniauth.md": {"hash": "f4c3fbd3c3c870a5a0ce91d5530c060b", "content_type": "text/html"}, "/openid_connect_provider.md": {"hash": "e0d8cc7faadbeaaad4a5bff86735bff5", "content_type": "text/html"}, "/administration/integration/plantuml.md": {"hash": "8f37388e48743f0a239d500e2280d1ca", "content_type": "text/html"}, "/recaptcha.md": {"hash": "32510c80c6c5567eba1ce98283a16362", "content_type": "text/html"}, "/saml.md": {"hash": "81bd816359b0e304a56a4a5b55b637f4", "content_type": "text/html"}, "/trello_power_up.md": {"hash": "6fe373fc1383537697582aab757044da", "content_type": "text/html"}, "/user/project/integrations/project_services.md": {"hash": "816fb186092a119a15b51e7167e4cdbb", "content_type": "text/html"}, "/img/trello_card_with_gitlab_powerup.png": {"hash": "88aedfe53dc2a5eb44fbe3744f60fa80", "content_type": "image/png"}, "/img/enable_trello_powerup.png": {"hash": "496d78732841f1eb51d6b2885bcc7aa7", "content_type": "image/png"}, "/img/webhooks_ssl.png": {"hash": "bcdb655ee8bf537699a4015a129256a0", "content_type": "image/png"}, "/img/webhook_testing.png": {"hash": "78be0a980ad7431f92574cd6193824df", "content_type": "image/png"}, "/img/webhook_logs.png": {"hash": "d4a5a131f814e0c21071e95d715fff84", "content_type": "image/png"}, "/img/cicd_pipeline_infograph.png": {"hash": "3ec6bacf9a712e73ea29d107b0518483", "content_type": "image/png"}, "/variables/where_variables_can_be_used.md": {"hash": "fbfab89a4deac61a72b44c7ec99cc660", "content_type": "text/html"}, "/ssh_keys/README.md": {"hash": "4d2cce89292ef8fd07e7662323add5d1", "content_type": "text/html"}, "/docker/using_docker_images.md": {"hash": "06763407e336fa9722f67c157a27264b", "content_type": "text/html"}, "/docker/using_docker_build.md": {"hash": "0be00381b878add6daaa96559ba82c2b", "content_type": "text/html"}, "/review_apps/index.md": {"hash": "aa723b5869bfa414d5908247d99d44de", "content_type": "text/html"}, "/user/project/pipelines/settings.md": {"hash": "9f01707800e927d72d5ac76dc20b14d4", "content_type": "text/html"}, "/user/project/new_ci_build_permissions_model.md": {"hash": "5027e69af10f16850509aae5b4e36442", "content_type": "text/html"}, "/user/project/merge_requests.md": {"hash": "5eadfb916b9fe8fb3584ef4eb3a44fc2", "content_type": "text/html"}, "/img/review_apps_preview_in_mr.png": {"hash": "3ce4d9ef20bd2c18b85d9f4e16ac2f67", "content_type": "image/png"}, "/img/environments_available.png": {"hash": "6a69b626cbf31a271f24581f70aaf4e8", "content_type": "image/png"}, "/img/deployments_view.png": {"hash": "b40e6523fca4c7082acc1daeb5c3f306", "content_type": "image/png"}, "/img/environments_manual_action_pipelines.png": {"hash": "91a121d37d70f491b02e0861455e6998", "content_type": "image/png"}, "/img/environments_manual_action_single_pipeline.png": {"hash": "faa15010031b19b3b1195e56bd1c80b3", "content_type": "image/png"}, "/img/environments_manual_action_environments.png": {"hash": "4ecca4e0998d59ee080bb267bd8a2069", "content_type": "image/png"}, "/img/environments_manual_action_deployments.png": {"hash": "11fa617f3ddae677bc0c2ae741df1ca5", "content_type": "image/png"}, "/img/environments_manual_action_jobs.png": {"hash": "711417243fa13ad0c84f09c080c6c945", "content_type": "image/png"}, "/workflow/gitlab_flow.md": {"hash": "0e1c492395abea57e150bee6b234b373", "content_type": "text/html"}, "/img/environments_mr_review_app.png": {"hash": "20d31d169a67bb598b26636f1c058500", "content_type": "image/png"}, "/img/environments_link_url_mr.png": {"hash": "e2fb5fc64b77a3c35e794d100cd149fe", "content_type": "image/png"}, "/img/view_on_env_mr.png": {"hash": "3d3faac16f61ec66b457d845fb9cbb0d", "content_type": "image/png"}, "/img/view_on_env_blob.png": {"hash": "c22899b46d47a606ce5b6a893d06f470", "content_type": "image/png"}, "/img/environments_dynamic_groups.png": {"hash": "f617431cccd0d9c49a95bb8106681502", "content_type": "image/png"}, "/user/project/integrations/prometheus_library/metrics.md": {"hash": "3f29b167e9fbe0ad578f7f2d30cab63a", "content_type": "text/html"}, "/img/environments_monitoring.png": {"hash": "155ac1fcb757538f4e66013992530c5a", "content_type": "image/png"}, "/img/environments_terminal_button_on_index.png": {"hash": "4d88bf63828a9e98a662e1e6ddf2a783", "content_type": "image/png"}, "/img/environments_terminal_button_on_show.png": {"hash": "4f71d20b001d0dbd356e1729fec2f364", "content_type": "image/png"}, "/img/environments_terminal_page.png": {"hash": "cb3a9daf167f61d7e77174e0aace7b0e", "content_type": "image/png"}, "/img/pipeline_schedules_new_form.png": {"hash": "5fc54fd8956f0817e4cd0b7c919857e0", "content_type": "image/png"}, "/img/pipeline_schedules_list.png": {"hash": "1853315820888bc2461c99e4fbce89ba", "content_type": "image/png"}, "/img/pipeline_schedule_play.png": {"hash": "5e646d5ee48fada9062e265ca39b808c", "content_type": "image/png"}, "/img/pipeline_schedule_variables.png": {"hash": "61cb538a123986873730f9344144c2dc", "content_type": "image/png"}, "/img/pipeline_schedules_ownership.png": {"hash": "8f3d37b85c7d3cfcbcd23f6a091844ca", "content_type": "image/png"}, "/gitlab_metrics.md": {"hash": "6fb39b28598e1dfab66c95999b46cbef", "content_type": "text/html"}, "/node_exporter.md": {"hash": "33dbb1fab3bac0c36d637f3b8dc4cf34", "content_type": "text/html"}, "/redis_exporter.md": {"hash": "6c09a9201b7aec606b7a0ab754a2e129", "content_type": "text/html"}, "/postgres_exporter.md": {"hash": "273bfb0dc7d8fd8470bb075db75e7f5f", "content_type": "text/html"}, "/gitlab_monitor_exporter.md": {"hash": "3b41af2d023ecb0d4f94f00ebb0775f0", "content_type": "text/html"}, "/img/prometheus_dashboard.png": {"hash": "8090eacde5c06a84d25d285992513bbf", "content_type": "image/png"}, "/img/prometheus_deploy.png": {"hash": "f9aa06d9b4fa882557e29988504d8e1b", "content_type": "image/png"}, "/topics/autodevops/": {"hash": "f955bbf802810251a7ceea7938c8e41f", "content_type": "text/html"}, "/prometheus_library/metrics.md": {"hash": "41918db889a19ce75d177b75981c8bda", "content_type": "text/html"}, "/img/prometheus_service_configuration.png": {"hash": "4bda1678fa8a276d398ff799f9792e59", "content_type": "image/png"}, "/prometheus_library/metrics.html": {"hash": "5e465160fba8ae6f45ecfaf5fbfe0826", "content_type": "text/html"}, "/prometheus_library/kubernetes.md": {"hash": "ae196610f4180f269cb7de7bed711d01", "content_type": "text/html"}, "/img/merge_request_performance.png": {"hash": "afc904e15cdef30125f58f3edf33c73d", "content_type": "image/png"}, "/kubernetes.md": {"hash": "bb61a77d1f40afaff6295dc05f01281e", "content_type": "text/html"}, "/nginx.md": {"hash": "9d56b0642187759375d072269b16cfef", "content_type": "text/html"}, "/nginx_ingress.md": {"hash": "7c688c71cec54a46941dacff7d73a951", "content_type": "text/html"}, "/haproxy.md": {"hash": "06b541ee853edfe3d82893fe8fbe33e9", "content_type": "text/html"}, "/cloudwatch.md": {"hash": "26430722b5c97f2a8fe3ae4d80a5fb29", "content_type": "text/html"}, "/gitlab_configuration.md": {"hash": "8d2469bc097e22c79489a704935258d5", "content_type": "text/html"}, "/influxdb_configuration.md": {"hash": "b5bc226a451eea77fe9d2ba846b0df4b", "content_type": "text/html"}, "/influxdb_schema.md": {"hash": "baa03b0fd30eeda4dc96aecf9f0139da", "content_type": "text/html"}, "/grafana_configuration.md": {"hash": "9ee6eedbdbd04f5446487cff5bca51ad", "content_type": "text/html"}, "/performance_bar.md": {"hash": "b3f98ee509353d5ce3080210352e9f61", "content_type": "text/html"}, "/request_profiling.md": {"hash": "483a7b0cdfd047926dbb2d3e9ef0b201", "content_type": "text/html"}, "/prometheus/index.md": {"hash": "16e6aec69957fc595257f5e62fcf6217", "content_type": "text/html"}, "/administration/monitoring/ip_whitelist.md": {"hash": "700ceb5ffbce844865602a86b7d36da1", "content_type": "text/html"}, "/img/health_check_token.png": {"hash": "6696200232717964ba3f26cacd295396", "content_type": "image/png"}, "/command-line-commands.md": {"hash": "9110f44e50df5640bedd43a457ba1224", "content_type": "text/html"}, "/start-using-git.md": {"hash": "f2d29a156e411a5f44eeb15fa77adf98", "content_type": "text/html"}, "/create-your-ssh-keys.md": {"hash": "5ed23db05442fe61094ccbdf599cc7ac", "content_type": "text/html"}, "/create-project.md": {"hash": "b85462513bf151d3936a83eeda8de713", "content_type": "text/html"}, "/create-branch.md": {"hash": "98f5ef95d499fe383039cf1d0197fd09", "content_type": "text/html"}, "/fork-project.md": {"hash": "0d60c45f1c902e8608b68b2dc3ee5566", "content_type": "text/html"}, "/add-file.md": {"hash": "2c293acf5c73e99b20bb91e1d3f54399", "content_type": "text/html"}, "/add-image.md": {"hash": "fc71101fc9dd2697af9ca1b7639ebae6", "content_type": "text/html"}, "/user/project/issues/create_new_issue.md": {"hash": "78379ebe795324d4320750e5c96c0e95", "content_type": "text/html"}, "/add-merge-request.md": {"hash": "8b838982fc0f2ec4837274ac41ccab6d", "content_type": "text/html"}, "/user/project/issues/automatic_issue_closing.md": {"hash": "315f3380df08c3534a330e714528673e", "content_type": "text/html"}, "/timezone.md": {"hash": "4d782acd665b7dfd0da1da4e3614ef86", "content_type": "text/html"}, "/user/project/description_templates.md": {"hash": "2eef8abfcad1081fba63035adbd30926", "content_type": "text/html"}, "/workflow.md": {"hash": "83b507def74bb10950678feffc5557da", "content_type": "text/html"}, "/gitlab_flow.md": {"hash": "eea645d47f2710e31c12a19cf41476ae", "content_type": "text/html"}, "/user/group/index.md": {"hash": "73509d4d41331f04674e8643ce587234", "content_type": "text/html"}, "/user/project/issues/confidential_issues.md": {"hash": "0a8115109f5f9dd52e234312242a0534", "content_type": "text/html"}, "/user/project/issues/due_dates.md": {"hash": "c85461e27bc7d0b2167c15b99d3dd002", "content_type": "text/html"}, "/shortcuts.md": {"hash": "9b8b21dabad73abe5e8951b771055a48", "content_type": "text/html"}, "/file_finder.md": {"hash": "bf7b3e85a612cf6417d1744e4cb5e95d", "content_type": "text/html"}, "/user/project/labels.md": {"hash": "58893b65d46e486adf0d86fe0f8cbc66", "content_type": "text/html"}, "/notifications.md": {"hash": "cb72cce5814922ffde99fa3940c98637", "content_type": "text/html"}, "/user/project/index.md": {"hash": "b5198f0f891ab7540d1b1f4cbaee2b43", "content_type": "text/html"}, "/forking_workflow.md": {"hash": "4ebfc9943603943dc549d4be9156201a", "content_type": "text/html"}, "/user/project/members/index.md": {"hash": "a1f4de0b70f4f2ee282ef73fb7f10fef", "content_type": "text/html"}, "/user/project/protected_tags.md": {"hash": "e7dd98d7b1e93294fb556216d27e5247", "content_type": "text/html"}, "/user/project/quick_actions.md": {"hash": "f5b7ee527b5bdbc1c4528746a0416c39", "content_type": "text/html"}, "/user/project/members/share_project_with_groups.md": {"hash": "0a12c2dd302604475cf5083a60961363", "content_type": "text/html"}, "/time_tracking.md": {"hash": "c5c5446f28a85ef5b51b6cd3d1155c7c", "content_type": "text/html"}, "/user/project/repository/web_editor.md": {"hash": "8b10afb85efb331460ad80fbf3528e41", "content_type": "text/html"}, "/releases.md": {"hash": "25f18459bcefc0e2c70222e4cbe766dc", "content_type": "text/html"}, "/user/project/milestones/index.md": {"hash": "74c862a462f8886814ab746f34f39ae6", "content_type": "text/html"}, "/user/project/merge_requests/index.md": {"hash": "95db9db19b7f50351243563d6670f97e", "content_type": "text/html"}, "/user/project/merge_requests/authorization_for_merge_requests.md": {"hash": "d467a09c005644e8a6e927fce8d4d026", "content_type": "text/html"}, "/user/project/merge_requests/cherry_pick_changes.md": {"hash": "e3402bb117529214a153ddaa53669455", "content_type": "text/html"}, "/user/project/merge_requests/merge_when_pipeline_succeeds.md": {"hash": "4b599364b2ff428aa77fed9a5d3f42cb", "content_type": "text/html"}, "/user/discussions/index.md": {"hash": "f3e77436ab29b5b636ed11b9ae724e63", "content_type": "text/html"}, "/user/project/merge_requests/resolve_conflicts.md": {"hash": "96d9e1c2e3305bf2f813a83eafae937f", "content_type": "text/html"}, "/user/project/merge_requests/revert_changes.md": {"hash": "580aa1efb28fe35edde24db916dee119", "content_type": "text/html"}, "/user/project/merge_requests/versions.md": {"hash": "4dc3e349d4a23ab03ce02b996289cc83", "content_type": "text/html"}, "/user/project/merge_requests/work_in_progress_merge_requests.md": {"hash": "137116ddd315658ef349be49b2ed093d", "content_type": "text/html"}, "/user/project/merge_requests/fast_forward_merge.md": {"hash": "35d846166823e97cdba60b46431289b7", "content_type": "text/html"}, "/lfs/manage_large_binaries_with_git_lfs.md": {"hash": "a238f826bad0f20cd0d70d267c3d8793", "content_type": "text/html"}, "/importing/README.md": {"hash": "63220e53698056c1e49cae18421723c5", "content_type": "text/html"}, "/user/snippets.md": {"hash": "b7323e16b6808c48c3d9ee4124eb6b83", "content_type": "text/html"}, "/user/group/subgroups/index.md": {"hash": "e46575c56103dcc59912e7e6bd5af1dd", "content_type": "text/html"}, "/img/markdown_video.mp4": {"hash": "5d396f2f322ef6c741f145abdccea4e6", "content_type": "video/mp4"}, "/img/markdown_logo.png": {"hash": "1ca3a8eb7bf1af3cf6102586957eb4a1", "content_type": "image/png"}, "/account/two_factor_authentication.md": {"hash": "b522fe877e656a2be713fd5fd45d46ba", "content_type": "text/html"}, "/account/delete_account.md": {"hash": "7bb673a932a49d6a489394451a7df792", "content_type": "text/html"}, "/personal_access_tokens.md": {"hash": "37f2ffa1e2fb6ce1ed7f14d41e1cdffe", "content_type": "text/html"}, "/active_sessions.md": {"hash": "aa7f80c84d0db812e3a0ad533b6b50bd", "content_type": "text/html"}, "/integration/openid_connect_provider.md": {"hash": "8360fe0e1f33f965f905bf5256695082", "content_type": "text/html"}, "/administration/auth/ldap.md": {"hash": "dc6fb4f53fafbd7ad0654918246d816f", "content_type": "text/html"}, "/administration/auth/how_to_configure_ldap_gitlab_ce/index.md": {"hash": "349e5de050ea6daf897b412e9af630c5", "content_type": "text/html"}, "/integration/omniauth.md": {"hash": "08e2cc48524d0939bad668ef373a3d1a", "content_type": "text/html"}, "/administration/auth/crowd.md": {"hash": "e3e8b67631f2fd7b5c4864fc1f73b4c0", "content_type": "text/html"}, "/integration/cas.md": {"hash": "9c964aaf0b3293795e2ea4c6a66c7751", "content_type": "text/html"}, "/integration/saml.md": {"hash": "521ce8954bf7f30fd6566688910a9e96", "content_type": "text/html"}, "/administration/auth/okta.md": {"hash": "5fc651595472c1c87ca0579a43d80417", "content_type": "text/html"}, "/project/protected_branches.md": {"hash": "39fa5916fba5c575a27e00cb414a1bfb", "content_type": "text/html"}, "/api/users.md": {"hash": "7ae012b8ef01bfb6ce8133d863adcce4", "content_type": "text/html"}, "/project/new_ci_build_permissions_model.md": {"hash": "bee025c56ff09d68e954e89362a404db", "content_type": "text/html"}, "/how_to_install_git/index.md": {"hash": "e6fd317f6a3fe9b42c7d46b8eb46a627", "content_type": "text/html"}, "/numerous_undo_possibilities_in_git/index.md": {"hash": "9f5945c40af65c8572a9773795fe32fc", "content_type": "text/html"}, "/troubleshooting_git.md": {"hash": "384c482fb48a152651c6b3ed389414f1", "content_type": "text/html"}, "/administration/custom_hooks.md": {"hash": "a6d381dfb94b810ecbc3a0e7a43e7352", "content_type": "text/html"}, "/user/project/git_attributes.md": {"hash": "bfcd605e73d9713ebc0b7121abe1e8ad", "content_type": "text/html"}, "/api/templates/gitignores.md": {"hash": "b4a87a79ea433664dbb68bfcf2d56f39", "content_type": "text/html"}, "/workflow/lfs/manage_large_binaries_with_git_lfs.md": {"hash": "80ce607a5b2bf9fc250b4c6f83294583", "content_type": "text/html"}, "/gitlab_flow.png": {"hash": "77c170f592c19148c57557d90e9dbad6", "content_type": "image/png"}, "/four_stages.png": {"hash": "2a3c8d8fb636a5b2ccc773ddc6059e33", "content_type": "image/png"}, "/messy_flow.png": {"hash": "96a820096099c47dbdeff13965f1f2ee", "content_type": "image/png"}, "/gitdashflow.png": {"hash": "c6fc3b0d82e5a83f8ab68c691feb874f", "content_type": "image/png"}, "/github_flow.png": {"hash": "a535c05091383a06bb805772d3659366", "content_type": "image/png"}, "/production_branch.png": {"hash": "ac31f2ff30d30483bc36fdf15b09f9a7", "content_type": "image/png"}, "/environment_branches.png": {"hash": "6398e813a7962e051812045f5ad2ca65", "content_type": "image/png"}, "/release_branches.png": {"hash": "b82789af46cca8ed6ee12034d05d95ab", "content_type": "image/png"}, "/mr_inline_comments.png": {"hash": "ff38c61eb0751d58016c476a33b3f84d", "content_type": "image/png"}, "/merge_request.png": {"hash": "c57053ec64eaf0962f2a293a93a502f4", "content_type": "image/png"}, "/close_issue_mr.png": {"hash": "0eef41f66d4bf6efc14c0fa57ae7a743", "content_type": "image/png"}, "/rebase.png": {"hash": "fe0205a67d655fb1a00d49ab6fd1bc2c", "content_type": "image/png"}, "/merge_commits.png": {"hash": "e130400a3a29226be1f67ee77f314e44", "content_type": "image/png"}, "/award_emoji.png": {"hash": "01aff4a7b42952aeaf53f6ce3a7195e9", "content_type": "image/png"}, "/remove_checkbox.png": {"hash": "9e55cb5b1482a43d85c29c228f4d1791", "content_type": "image/png"}, "/good_commit.png": {"hash": "ee1fd9114d7ae4518ccca007164d1d5e", "content_type": "image/png"}, "/ci_mr.png": {"hash": "479ba9b3bd0f55628e838b3be6182345", "content_type": "image/png"}, "/git_pull.png": {"hash": "e053d368136b65c84c77410d3f838c1c", "content_type": "image/png"}, "/architecture.md": {"hash": "bf451d3b59cddf82ddc3849805a1a24e", "content_type": "text/html"}, "/rake_tasks.md": {"hash": "0cd9805cf5a0285bc1a438d4211f0543", "content_type": "text/html"}, "/changelog.md": {"hash": "2aeaa4a4f685105be30f7f7adee3dd4f", "content_type": "text/html"}, "/code_review.md": {"hash": "8a7bdcd439bd9f622f461428bac7154a", "content_type": "text/html"}, "/automatic_ce_ee_merge.md": {"hash": "f6452c8c30d1feabfc5dbd57071703ab", "content_type": "text/html"}, "/ee_features.md": {"hash": "ce3a330585b58be374f26b4d03c0cfbf", "content_type": "text/html"}, "/ux_guide/index.md": {"hash": "0eb89f448c4ffce7afd32ed8138a825f", "content_type": "text/html"}, "/fe_guide/index.md": {"hash": "b554a3bf701ab11a90016528e47151f3", "content_type": "text/html"}, "/fe_guide/emojis.md": {"hash": "bb4540f8b8d95d7230dc0102969c1d87", "content_type": "text/html"}, "/utilities.md": {"hash": "c2289c88978b7fb51d3e87d35d8a4fcb", "content_type": "text/html"}, "/api_styleguide.md": {"hash": "e5f850dce83440a4de7752fec90738cb", "content_type": "text/html"}, "/api_graphql_styleguide.md": {"hash": "55165dcf8108a77dcb316a63d41e1e28", "content_type": "text/html"}, "/api/graphql/index.md": {"hash": "c0f64e7b08990e18d1c337b6bee0337e", "content_type": "text/html"}, "/sidekiq_style_guide.md": {"hash": "5f5ac2d39945bd1d7d66d8a7d82576af", "content_type": "text/html"}, "/gitaly.md": {"hash": "db89a9bba20744d2f445cce884960d93", "content_type": "text/html"}, "/feature_flags.md": {"hash": "b12a53ea51ef61f56fc824255bf251c0", "content_type": "text/html"}, "/emails.md": {"hash": "c9a8846a84895b183044bd63ece638fa", "content_type": "text/html"}, "/shell_commands.md": {"hash": "b5d634dd79d14bcd91e3f0e1e435b67e", "content_type": "text/html"}, "/gemfile.md": {"hash": "cfb49e0ac968f6d0aa11a1aa950f1bfd", "content_type": "text/html"}, "/sidekiq_debugging.md": {"hash": "c1d95f4813b970fe738fd6f2c9c28c66", "content_type": "text/html"}, "/gotchas.md": {"hash": "5dc9d7f9f1f98b99d8fa6f17716f8353", "content_type": "text/html"}, "/module_with_instance_variables.md": {"hash": "d8160b05c1c54fc6e0fee231b5ad404d", "content_type": "text/html"}, "/db_dump.md": {"hash": "edf64fe22b89913bf6cfaabcda4a5392", "content_type": "text/html"}, "/github_importer.md": {"hash": "0f2599f5b881c328a5f73c72f0336950", "content_type": "text/html"}, "/diffs.md": {"hash": "a072cb8f6380c2a51a9cea9060a8cd48", "content_type": "text/html"}, "/instrumentation.md": {"hash": "97975585f53f942ec861294e219803e5", "content_type": "text/html"}, "/performance.md": {"hash": "3f7c927ce9d6b72f7c67422decc15ba5", "content_type": "text/html"}, "/merge_request_performance_guidelines.md": {"hash": "e2b578e84743d798b53f058035ce24b3", "content_type": "text/html"}, "/what_requires_downtime.md": {"hash": "304bd374c7a41cd8dd1beac362b56a3b", "content_type": "text/html"}, "/sql.md": {"hash": "58b2b4c629e953b3cbb9e57a6cf95d88", "content_type": "text/html"}, "/migration_style_guide.md": {"hash": "65f7cb64d82d5575687e0aac8c33e77d", "content_type": "text/html"}, "/post_deployment_migrations.md": {"hash": "33aa6735d76b9f5b6893b10e090cbe8f", "content_type": "text/html"}, "/background_migrations.md": {"hash": "66a1bf1d1311310c6af7e2acc45c98bd", "content_type": "text/html"}, "/swapping_tables.md": {"hash": "c421006720f9bdb4eefcb97dc5878d02", "content_type": "text/html"}, "/database_merge_request_checklist.md": {"hash": "45764d76659de76ca08274085034fdca", "content_type": "text/html"}, "/adding_database_indexes.md": {"hash": "8779b29786ea1525faf3b21d2c03cd2c", "content_type": "text/html"}, "/foreign_keys.md": {"hash": "2d3767d72a7b3f480871622934572973", "content_type": "text/html"}, "/single_table_inheritance.md": {"hash": "4f0b33d52d871eb283c42ae931d0f6b4", "content_type": "text/html"}, "/polymorphic_associations.md": {"hash": "f991451c843192eef54337ebad23e3b2", "content_type": "text/html"}, "/serializing_data.md": {"hash": "231671f2c7b81c58377b2392c32e8339", "content_type": "text/html"}, "/hash_indexes.md": {"hash": "f3fc6e4522278a232da6f28c11066fe6", "content_type": "text/html"}, "/sha1_as_binary.md": {"hash": "bb175fee31cf4b51ae6f47a39a961808", "content_type": "text/html"}, "/iterating_tables_in_batches.md": {"hash": "d7b0aee642cf80b299095cc04daac0eb", "content_type": "text/html"}, "/ordering_table_columns.md": {"hash": "51580043786d1d97bfc1c45716fbf317", "content_type": "text/html"}, "/verifying_database_capabilities.md": {"hash": "5d0b0b39b13e294f91db49057ac47833", "content_type": "text/html"}, "/database_debugging.md": {"hash": "cc63de0af5261f2a4f0c53780722b1a9", "content_type": "text/html"}, "/query_count_limits.md": {"hash": "05a9920e221a266973f6dd48580ae0a7", "content_type": "text/html"}, "/testing_guide/index.md": {"hash": "7dd38183ffa0f5daf9bcf4abdf9d7d6e", "content_type": "text/html"}, "/testing_guide/frontend_testing.md": {"hash": "405c15f8f7b63fb42ac64b3af213c0e6", "content_type": "text/html"}, "/documentation/index.md": {"hash": "5e1e3e856852809b939a8ffca5003e20", "content_type": "text/html"}, "/documentation/styleguide.md": {"hash": "8def9394580efa1c0cbfa84f9c72265a", "content_type": "text/html"}, "/user/markdown.md": {"hash": "f7b3838685adbf51015cb2604a289796", "content_type": "text/html"}, "/i18n/index.md": {"hash": "d5c212e2e710b16b21dd5d33cee2bd89", "content_type": "text/html"}, "/i18n/externalization.md": {"hash": "7fe4a1285469380522b45d18c26de3d8", "content_type": "text/html"}, "/i18n/translation.md": {"hash": "73bee30ec79366b0a29b46f79fd6be50", "content_type": "text/html"}, "/build_test_package.md": {"hash": "05d82da5a58ef214b762f6c4b0b6c022", "content_type": "text/html"}, "/licensing.md": {"hash": "12f62627d82ad070e2512730259cd21d", "content_type": "text/html"}, "/styleguide.md": {"hash": "4a1e03ccf840ca46ef1ce38249ade3ba", "content_type": "text/html"}, "/img/manual_build_docs.png": {"hash": "36959afc8dde63b5643e4565da00c475", "content_type": "image/png"}, "/user/project/pages/getting_started_part_one.md": {"hash": "519412a92173093af69ccfc0a1f32342", "content_type": "text/html"}, "/user/project/pages/getting_started_part_four.md": {"hash": "4f053c7d0b1020a2f50ae6e233277886", "content_type": "text/html"}, "/explore/projects/trending?archived=true&sort=name_asc": {"hash": "1f9c660b797d469030a125ad835fc326", "content_type": "text/html"}, "/explore/projects/trending?archived=only&sort=name_asc": {"hash": "d40bf60f1248c495a35c5a1e85f60628", "content_type": "text/html"}, "/explore/projects/trending?archived=true&sort=latest_activity_asc": {"hash": "addf879a4aac3bdc8025b39c2a7c1b0c", "content_type": "text/html"}, "/explore/projects/trending?archived=only&sort=latest_activity_asc": {"hash": "0c639cc600d500396a248cf450597bfc", "content_type": "text/html"}, "/explore/projects/trending?archived=true&sort=created_asc": {"hash": "2e03f4a1605910daf15e4d99837d7660", "content_type": "text/html"}, "/explore/projects/trending?archived=only&sort=created_asc": {"hash": "9b82ccd364ea43b826ca400d5a396aad", "content_type": "text/html"}, "/explore/projects/trending?archived=true&sort=created_desc": {"hash": "22d30940c25d1181d17c6026ebcaa250", "content_type": "text/html"}, "/explore/projects/trending?archived=only&sort=created_desc": {"hash": "c95ddee085e9040b4e7137566168a382", "content_type": "text/html"}, "/explore/projects/starred?archived=true&sort=name_asc": {"hash": "10054ff552c59663fadbd319f4db72cd", "content_type": "text/html"}, "/explore/projects/starred?archived=only&sort=name_asc": {"hash": "06656293aa319ac5a6d0bd74962ff3e9", "content_type": "text/html"}, "/explore/projects/starred?archived=true&sort=latest_activity_asc": {"hash": "0e9c390470f58a1ea4f7960fd55a245b", "content_type": "text/html"}, "/explore/projects/starred?archived=only&sort=latest_activity_asc": {"hash": "c218fd714cb7f5a97a636e72adbc32e8", "content_type": "text/html"}, "/explore/projects/starred?archived=true&sort=created_asc": {"hash": "79576718520713be10b8211f0ce73d7d", "content_type": "text/html"}, "/explore/projects/starred?archived=only&sort=created_asc": {"hash": "3b7c7712c5818808c3cc33a34a2b69c9", "content_type": "text/html"}, "/explore/projects/starred?archived=true&sort=created_desc": {"hash": "b74faf85b315d0f2b469d1fa8ca52250", "content_type": "text/html"}, "/explore/projects/starred?archived=only&sort=created_desc": {"hash": "c65d0c5acf822e713d8cb812e844aef4", "content_type": "text/html"}, "/explore/projects?archived=true&sort=name_asc": {"hash": "9e0a6452e08546fe3a3d5ff0b2509c75", "content_type": "text/html"}, "/explore/projects?archived=only&sort=name_asc": {"hash": "bba60baa9b92a68d1e782b2336df7766", "content_type": "text/html"}, "/explore/projects?archived=true&sort=latest_activity_asc": {"hash": "5c402e6a3235fa3fc2c469fda37b4e77", "content_type": "text/html"}, "/explore/projects?archived=only&sort=latest_activity_asc": {"hash": "7122f0f5590e3cb1c9ce0859fbd6c6cd", "content_type": "text/html"}, "/explore/projects?archived=true&sort=created_asc": {"hash": "6a178b939f8960f514ac0a4021d329e5", "content_type": "text/html"}, "/explore/projects?archived=only&sort=created_asc": {"hash": "7fb37c7b5a81813a750cc744d5ac58ff", "content_type": "text/html"}, "/explore/projects?archived=true&sort=created_desc": {"hash": "2f1b30edefa74ebeec0100a523d98d49", "content_type": "text/html"}, "/explore/projects?archived=only&sort=created_desc": {"hash": "e5e74c5f3324758f828b04729ba368cf", "content_type": "text/html"}} \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/10/05be4ebeaad09d0cc3d205dbddad1b07 b/docker/tanner/snare/dist/pages/10/05be4ebeaad09d0cc3d205dbddad1b07 new file mode 100644 index 000000000..5b8a48a65 --- /dev/null +++ b/docker/tanner/snare/dist/pages/10/05be4ebeaad09d0cc3d205dbddad1b07 @@ -0,0 +1,4 @@ +var mod_pagespeed_ERKm2E4T_i = "(function(){var isIe=/(trident|msie)/i.test(navigator.userAgent);if(isIe&&document.getElementById&&window.addEventListener){window.addEventListener('hashchange',function(){var id=location.hash.substring(1),element;if(!(/^[A-z0-9_-]+$/.test(id))){return;}element=document.getElementById(id);if(element){if(!(/^(?:a|select|input|button|textarea)$/i.test(element.tagName))){element.tabIndex=-1;}element.focus();}},false);}})();"; +var mod_pagespeed_OczzLSUZbI = "(function($){var $body=$('body'),$customHeader=$body.find('.custom-header'),$branding=$customHeader.find('.site-branding'),$navigation=$body.find('.navigation-top'),$navWrap=$navigation.find('.wrap'),$navMenuItem=$navigation.find('.menu-item'),$menuToggle=$navigation.find('.menu-toggle'),$menuScrollDown=$body.find('.menu-scroll-down'),$sidebar=$body.find('#secondary'),$entryContent=$body.find('.entry-content'),$formatQuote=$body.find('.format-quote blockquote'),isFrontPage=$body.hasClass('twentyseventeen-front-page')||$body.hasClass('home blog'),navigationFixedClass='site-navigation-fixed',navigationHeight,navigationOuterHeight,navPadding,navMenuItemHeight,idealNavHeight,navIsNotTooTall,headerOffset,menuTop=0,resizeTimer;$('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], [contenteditable]','.site-content-contain').filter(':visible').focus(function(){if($navigation.hasClass('site-navigation-fixed')){var windowScrollTop=$(window).scrollTop(),fixedNavHeight=$navigation.height(),itemScrollTop=$(this).offset().top,offsetDiff=itemScrollTop-windowScrollTop;if($('#wpadminbar').length){offsetDiff-=$('#wpadminbar').height();}if(offsetDiff=headerOffset){$navigation.addClass(navigationFixedClass);}else{$navigation.removeClass(navigationFixedClass);}}else{$navigation.removeClass(navigationFixedClass);}}}function adjustHeaderHeight(){if('none'===$menuToggle.css('display')){if(isFrontPage){$branding.css('margin-bottom',navigationOuterHeight);}else{$customHeader.css('margin-bottom',navigationOuterHeight);}}else{$customHeader.css('margin-bottom','0');$branding.css('margin-bottom','0');}}function setQuotesIcon(){$(twentyseventeenScreenReaderText.quote).prependTo($formatQuote);}function belowEntryMetaClass(param){var sidebarPos,sidebarPosBottom;if(!$body.hasClass('has-sidebar')||($body.hasClass('search')||$body.hasClass('single-attachment')||$body.hasClass('error404')||$body.hasClass('twentyseventeen-front-page'))){return;}sidebarPos=$sidebar.offset();sidebarPosBottom=sidebarPos.top+($sidebar.height()+28);$entryContent.find(param).each(function(){var $element=$(this),elementPos=$element.offset(),elementPosTop=elementPos.top;if(elementPosTop>sidebarPosBottom){$element.addClass('below-entry-meta');}else{$element.removeClass('below-entry-meta');}});}function supportsInlineSVG(){var div=document.createElement('div');div.innerHTML='';return'http://www.w3.org/2000/svg'===('undefined'!==typeof SVGRect&&div.firstChild&&div.firstChild.namespaceURI);}function checkiOS(){return/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;}function supportsFixedBackground(){var el=document.createElement('div'),isSupported;try{if(!('backgroundAttachment'in el.style)||checkiOS()){return false;}el.style.backgroundAttachment='fixed';isSupported=('fixed'===el.style.backgroundAttachment);return isSupported;}catch(e){return false;}}$(document).ready(function(){if($navigation.length){setNavProps();adjustScrollClass();}if($menuScrollDown.length){if($('body').hasClass('admin-bar')){menuTop-=32;}if($('body').hasClass('blog')){menuTop-=30;}if(!$navigation.length){navigationOuterHeight=0;}$menuScrollDown.click(function(e){e.preventDefault();$(window).scrollTo('#primary',{duration:600,offset:{top:menuTop-navigationOuterHeight}});});}adjustHeaderHeight();setQuotesIcon();if(true===supportsInlineSVG()){document.documentElement.className=document.documentElement.className.replace(/(\\s*)no-svg(\\s*)/,'$1svg$2');}if(true===supportsFixedBackground()){document.documentElement.className+=' background-fixed';}});if($navigation.length){$(window).on('scroll',function(){adjustScrollClass();adjustHeaderHeight();});$(window).resize(function(){setNavProps();setTimeout(adjustScrollClass,500);});}$(window).resize(function(){clearTimeout(resizeTimer);resizeTimer=setTimeout(function(){belowEntryMetaClass('blockquote.alignleft, blockquote.alignright');},300);setTimeout(adjustHeaderHeight,1000);});$(document).on('wp-custom-header-video-loaded',function(){$body.addClass('has-header-video');});})(jQuery);"; +var mod_pagespeed_9YE48b0kQs = ";(function(factory){'use strict';if(typeof define==='function'&&define.amd){define(['jquery'],factory);}else if(typeof module!=='undefined'&&module.exports){module.exports=factory(require('jquery'));}else{factory(jQuery);}})(function($){'use strict';var $scrollTo=$.scrollTo=function(target,duration,settings){return $(window).scrollTo(target,duration,settings);};$scrollTo.defaults={axis:'xy',duration:0,limit:true};function isWin(elem){return!elem.nodeName||$.inArray(elem.nodeName.toLowerCase(),['iframe','#document','html','body'])!==-1;}$.fn.scrollTo=function(target,duration,settings){if(typeof duration==='object'){settings=duration;duration=0;}if(typeof settings==='function'){settings={onAfter:settings};}if(target==='max'){target=9e9;}settings=$.extend({},$scrollTo.defaults,settings);duration=duration||settings.duration;var queue=settings.queue&&settings.axis.length>1;if(queue){duration/=2;}settings.offset=both(settings.offset);settings.over=both(settings.over);return this.each(function(){if(target===null){return;}var win=isWin(this),elem=win?this.contentWindow||window:this,$elem=$(elem),targ=target,attr={},toff;switch(typeof targ){case'number':case'string':if(/^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$/.test(targ)){targ=both(targ);break;}targ=win?$(targ):$(targ,elem);case'object':if(targ.length===0){return;}if(targ.is||targ.style){toff=(targ=$(targ)).offset();}}var offset=$.isFunction(settings.offset)&&settings.offset(elem,targ)||settings.offset;$.each(settings.axis.split(''),function(i,axis){var Pos=axis==='x'?'Left':'Top',pos=Pos.toLowerCase(),key='scroll'+Pos,prev=$elem[key](),max=$scrollTo.max(elem,axis);if(toff){attr[key]=toff[pos]+(win?0:prev-$elem.offset()[pos]);if(settings.margin){attr[key]-=parseInt(targ.css('margin'+Pos),10)||0;attr[key]-=parseInt(targ.css('border'+Pos+'Width'),10)||0;}attr[key]+=offset[pos]||0;if(settings.over[pos]){attr[key]+=targ[axis==='x'?'width':'height']()*settings.over[pos];}}else{var val=targ[pos];attr[key]=val.slice&&val.slice(-1)==='%'?parseFloat(val)/100*max:val;}if(settings.limit&&/^\\d+$/.test(attr[key])){attr[key]=attr[key]<=0?0:Math.min(attr[key],max);}if(!i&&settings.axis.length>1){if(prev===attr[key]){attr={};}else if(queue){animate(settings.onAfterFirst);attr={};}}});animate(settings.onAfter);function animate(callback){var opts=$.extend({},settings,{queue:true,duration:duration,complete:callback&&function(){callback.call(elem,targ,settings);}});$elem.animate(attr,opts);}});};$scrollTo.max=function(elem,axis){var Dim=axis==='x'?'Width':'Height',scroll='scroll'+Dim;if(!isWin(elem)){return elem[scroll]-$(elem)[Dim.toLowerCase()]();}var size='client'+Dim,doc=elem.ownerDocument||elem.document,html=doc.documentElement,body=doc.body;return Math.max(html[scroll],body[scroll])-Math.min(html[size],body[size]);};function both(val){return $.isFunction(val)||$.isPlainObject(val)?val:{top:val,left:val};}$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(t){return $(t.elem)[t.prop]();},set:function(t){var curr=this.get(t);if(t.options.interrupt&&t._last&&t._last!==curr){return $(t.elem).stop();}var next=Math.round(t.now);if(curr!==next){$(t.elem)[t.prop](next);t._last=this.get(t);}}};return $scrollTo;});"; +var mod_pagespeed_ie6DdS4kwK = "!function(a,b){\"use strict\";function c(){if(!e){e=!0;var a,c,d,f,g=-1!==navigator.appVersion.indexOf(\"MSIE 10\"),h=!!navigator.userAgent.match(/Trident.*rv:11\\./),i=b.querySelectorAll(\"iframe.wp-embedded-content\");for(c=0;c1e3)g=1e3;else if(~~g<200)g=200;f.height=g}if(\"link\"===d.message)if(h=b.createElement(\"a\"),i=b.createElement(\"a\"),h.href=f.getAttribute(\"src\"),i.href=d.value,i.host===h.host)if(b.activeElement===f)a.top.location.href=d.value}else;}},d)a.addEventListener(\"message\",a.wp.receiveEmbedMessage,!1),b.addEventListener(\"DOMContentLoaded\",c,!1),a.addEventListener(\"load\",c,!1)}(window,document);"; diff --git a/docker/tanner/snare/dist/pages/10/05ca95b39531c391d241a6338920265e b/docker/tanner/snare/dist/pages/10/05ca95b39531c391d241a6338920265e new file mode 100644 index 000000000..97799deab --- /dev/null +++ b/docker/tanner/snare/dist/pages/10/05ca95b39531c391d241a6338920265e @@ -0,0 +1,269 @@ + + + + + + + + +user – user's Blog! + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+
+
+

Hello world!

+
+

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

+
+
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docker/tanner/snare/dist/pages/10/08a3142340f639ec86f6fafca2b90c05 b/docker/tanner/snare/dist/pages/10/08a3142340f639ec86f6fafca2b90c05 new file mode 100644 index 000000000..81880ec26 --- /dev/null +++ b/docker/tanner/snare/dist/pages/10/08a3142340f639ec86f6fafca2b90c05 @@ -0,0 +1 @@ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n(" +
+
+
    +
  1. Foxes are red ↩︎

    +
  2. +
  3. Dogs are usually not red ↩︎

    +
  4. +
+
+ + + +
+
+ + +
+

Ghost

+

You can delete this user to remove all the welcome posts

+
+
+
+Read More +
+
+ + + + +
+ + +
Advanced Markdown tips
+
+
Share this + + +
+ + + + + + +
+ +
+ +
+
+
+ + + + + + + diff --git a/docker/tanner/snare/dist/pages/8/13e355a722feefde6af35e1176fd5c2b b/docker/tanner/snare/dist/pages/8/13e355a722feefde6af35e1176fd5c2b new file mode 100644 index 000000000..84b8aa5d3 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/13e355a722feefde6af35e1176fd5c2b @@ -0,0 +1,112 @@ + + + + + +Managing Ghost users + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+

Managing Ghost users

+ +
+
+ +
+
+

Ghost has a number of different user roles for your team

+

Authors

+

The base user level in Ghost is an author. Authors can write posts, edit their own posts, and publish their own posts. Authors are trusted users. If you don't trust users to be allowed to publish their own posts, you shouldn't invite them to Ghost admin.

+

Editors

+

Editors are the 2nd user level in Ghost. Editors can do everything that an Author can do, but they can also edit and publish the posts of others - as well as their own. Editors can also invite new authors to the site.

+

Administrators

+

The top user level in Ghost is Administrator. Again, administrators can do everything that Authors and Editors can do, but they can also edit all site settings and data, not just content. Additionally, administrators have full access to invite, manage or remove any other user of the site.

+

The Owner

+

There is only ever one owner of a Ghost site. The owner is a special user which has all the same permissions as an Administrator, but with two exceptions: The Owner can never be deleted. And in some circumstances the owner will have access to additional special settings if applicable — for example, billing details, if using Ghost(Pro).

+
+

It's a good idea to ask all of your users to fill out their user profiles, including bio and social links. These will populate rich structured data for posts and generally create more opportunities for themes to fully populate their design.

+
+
+
+
+ + + diff --git a/docker/tanner/snare/dist/pages/8/16ec9d027895bf83ac1181429a038d33 b/docker/tanner/snare/dist/pages/8/16ec9d027895bf83ac1181429a038d33 new file mode 100644 index 000000000..19623f7f6 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/16ec9d027895bf83ac1181429a038d33 @@ -0,0 +1,511 @@ +self.AMP_CONFIG={"allow-doc-opt-in":["amp-date-picker","amp-next-page","ampdoc-shell","disable-amp-story-desktop","disable-faster-amp-list","inabox-rov","inline-styles","url-replacement-v2"],"allow-url-opt-in":["pump-early-frame"],"canary":0,"expAdsenseA4A":0.01,"a4aProfilingRate":0.01,"ad-type-custom":1,"amp-access-iframe":1,"amp-apester-media":1,"amp-ima-video":1,"amp-playbuzz":1,"amp-story-navigation-performance":0,"chunked-amp":1,"amp-auto-ads":1,"amp-auto-ads-adsense-holdout":0.1,"version-locking":1,"as-use-attr-for-format":0.01,"a4aFastFetchDoubleclickLaunched":0,"a4aFastFetchAdSenseLaunched":0,"pump-early-frame":1,"3p-use-ampcontext":1,"amp-live-list-sorting":1,"amp-sidebar toolbar":1,"svg-in-mustache":0,"disable-faster-amp-list":1,"amp-consent":1,"amp-img-native-srcset":1,"amp-story-v1":1,"expAdsenseUnconditionedCanonical":0,"expAdsenseCanonical":0,"font-display-swap":1,"amp-date-picker":1,"url-replacement-v2":0,"inline-styles":1,"v":"011533253141109","type":"production"};/*AMP_CONFIG*/var global=self;self.AMP=self.AMP||[];try{(function(_){ +var f;function aa(a,b){function c(){}c.prototype=b.prototype;a.prototype=new c;a.prototype.constructor=a;for(var d in b)if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(b,d);e&&Object.defineProperty(a,d,e)}else a[d]=b[d]}var ca=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a}(this);function da(a,b){b=void 0===b?"":b;try{return decodeURIComponent(a)}catch(c){return b}};var ia=/(?:^[#?]?|&)([^=&]+)(?:=([^&]*))?/g;function p(a){var b=Object.create(null);if(!a)return b;for(var c;c=ia.exec(a);){var d=da(c[1],c[1]),e=c[2]?da(c[2],c[2]):"";b[d]=e}return b};var ja="";function r(a){var b=a||self,c;if(b.AMP_MODE)c=b.AMP_MODE;else{c=b;var d=p(c.location.originalHash||c.location.hash),e=p(c.location.search);ja||(ja=c.AMP_CONFIG&&c.AMP_CONFIG.v?c.AMP_CONFIG.v:"011533253141109");c=b.AMP_MODE={localDev:!1,development:!("1"!=d.development&&!c.AMP_DEV_MODE),examiner:"2"==d.development,filter:d.filter,geoOverride:d["amp-geo"],minified:!0,lite:void 0!=e.amp_lite,test:!1,log:d.log,version:"1533253141109",rtvVersion:ja}}return c};var ka=Object.prototype.toString;function la(a){return Array.isArray(a)}function ma(a){return"[object Object]"===ka.call(a)}function na(a){return"number"===typeof a&&isFinite(a)};function qa(a){return 0<=a.indexOf("\u200b\u200b\u200b")}var ra=void 0;function sa(a){ra=a}function ta(a,b,c){this.win=a;this.Lg=b;this.Mg=this.win.console&&this.win.console.log&&"0"!=r().log?this.Lg({localDev:!1,development:r(void 0).development,filter:r(void 0).filter,minified:!0,lite:r(void 0).lite,test:!1,log:r(void 0).log,version:r(void 0).version,rtvVersion:r(void 0).rtvVersion}):0;this.Hc=c||""}function ua(a){return void 0!==ra?ra:a.Mg} +function va(a,b,c){if(0!=ua(a)){var d=a.win.console.log;"ERROR"==b?d=a.win.console.error||d:"INFO"==b?d=a.win.console.info||d:"WARN"==b&&(d=a.win.console.warn||d);d.apply(a.win.console,c)}}f=ta.prototype;f.isEnabled=function(){return 0!=ua(this)};f.fine=function(a,b){4<=ua(this)&&va(this,"FINE",Array.prototype.slice.call(arguments,1))};f.info=function(a,b){3<=ua(this)&&va(this,"INFO",Array.prototype.slice.call(arguments,1))}; +f.warn=function(a,b){2<=ua(this)&&va(this,"WARN",Array.prototype.slice.call(arguments,1))};f.Ka=function(a,b){if(1<=ua(this))va(this,"ERROR",Array.prototype.slice.call(arguments,1));else{var c=wa.apply(null,Array.prototype.slice.call(arguments,1));za(this,c);return c}};f.error=function(a,b){var c=this.Ka.apply(this,arguments);c&&(c.name=a||c.name,self.reportError(c))};f.expectedError=function(a,b){var c=this.Ka.apply(this,arguments);c&&(c.expected=!0,self.reportError(c))}; +f.createError=function(a){var b=wa.apply(null,arguments);za(this,b);return b};f.createExpectedError=function(a){var b=wa.apply(null,arguments);za(this,b);b.expected=!0;return b}; +f.assert=function(a,b,c){var d;if(!a){var e=(b||"Assertion failed").split("%s"),g=e.shift(),h=g,k=[];""!=g&&k.push(g);for(g=2;ga.length?!1:0==a.lastIndexOf(b,0)};var Ja=self.AMP_CONFIG||{},Ka={thirdParty:Ja.thirdPartyUrl||"https://3p.ampproject.net",thirdPartyFrameHost:Ja.thirdPartyFrameHost||"ampproject.net",thirdPartyFrameRegex:("string"==typeof Ja.thirdPartyFrameRegex?new RegExp(Ja.thirdPartyFrameRegex):Ja.thirdPartyFrameRegex)||/^d-\d+\.ampproject\.net$/,cdn:Ja.cdnUrl||"https://cdn.ampproject.org",cdnProxyRegex:("string"==typeof Ja.cdnProxyRegex?new RegExp(Ja.cdnProxyRegex):Ja.cdnProxyRegex)||/^https:\/\/([a-zA-Z0-9_-]+\.)?cdn\.ampproject\.org$/,localhostRegex:/^https?:\/\/localhost(:\d+)?$/, +errorReporting:Ja.errorReportingUrl||"https://amp-error-reporting.appspot.com/r",localDev:Ja.localDev||!1},La={urls:Ka};function Ma(a){this.ng=a;this.Tc=this.T=0;this.Wa=Object.create(null)}Ma.prototype.has=function(a){return!!this.Wa[a]};Ma.prototype.get=function(a){var b=this.Wa[a];if(b)return b.access=++this.Tc,b.payload};Ma.prototype.put=function(a,b){this.has(a)||this.T++;this.Wa[a]={payload:b,access:this.Tc};if(!(this.T<=this.ng)){E().warn("lru-cache","Trimming LRU cache");a=this.Wa;var c=this.Tc+1,d,e;for(e in a){var g=a[e].access;g=d&&(b[c]=Math.random()oa.call(Hb,a)&&Hb.push(a)),d&&(c=a[b+xa])&&c.call(a))}function z(){}function B(a,c,d){d=d&&d[Ib]||"";var e=c.prototype,g=Ed(e),h=c.observedAttributes||Fd,k={prototype:g};Ac(g,Gb,{value:function(){if(Bc)Bc=!1;else if(!this[Jb]){this[Jb]=!0;new c(this);e[Gb]&&e[Gb].call(this);var a=Kb[Cc.get(c)];(!eb||1>0),ga="addEventListener",fa="attached",xa="Callback",pa="detached",Ib="extends",Fa="attributeChanged"+xa,Ej=fa+xa,Mf="connected"+xa,Nf="disconnected"+xa,Gb="created"+xa,Fj=pa+xa,wc="ADDITION",Id="MODIFICATION",Ad="REMOVAL",Ra="DOMAttrModified",Kf="DOMContentLoaded",Dj="DOMSubtreeModified",Fb="<",vc="=",Hj=/^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,Ij="ANNOTATION-XML COLOR-PROFILE FONT-FACE FONT-FACE-SRC FONT-FACE-URI FONT-FACE-FORMAT FONT-FACE-NAME MISSING-GLYPH".split(" "), +Qa=[],Eb=[],ea="",db=F.documentElement,oa=Qa.indexOf||function(a){for(var b=this.length;b--&&this[b]!==a;);return b},Jd=V.prototype,Kd=Jd.hasOwnProperty,Dc=Jd.isPrototypeOf,gb=V.defineProperty,Fd=[],Ld=V.getOwnPropertyDescriptor,Qf=V.getOwnPropertyNames,Jj=V.getPrototypeOf,Rf=V.setPrototypeOf,Sf=!!V.__proto__,Gj=!1,Jb="__dreCEv1",ya=a.customElements,eb="force"!==c&&!!(ya&&ya.define&&ya.get&&ya.whenDefined),Tf=V.create||V,Kj=a.Map||function(){var a=[],b=[],c;return{get:function(c){return b[oa.call(a, +c)]},set:function(d,e){c=oa.call(a,d);0>c?b[a.push(d)-1]=e:b[c]=e}}},Of=a.Promise||function(a){function b(a){for(d=!0;c.length;)c.shift()(a)}var c=[],d=!1,e={"catch":function(){return e},then:function(a){c.push(a);d&&setTimeout(b,1);return e}};a(b);return e},Bc=!1,Kb=Tf(null),fb=Tf(null),Cc=new Kj,Ed=V.create||function uc(a){return a?(uc.prototype=a,new uc):this},Bj=Rf||(Sf?function(a,b){a.__proto__=b;return a}:Qf&&Ld?function(){function a(a,b){for(var c,d=Qf(b),e=0,g=d.length;ee))return e}}function Sd(a,b){var c=a.performance&&a.performance.navigation;if(c&&void 0!==c[b])return c[b]}function Td(a){this.ampdoc=a;this.Nb=this.Ob=void 0;this.ha=Object.create(null);this.xd=!1;Ud(this)}f=Td.prototype;f.ec=function(){this.initialize();this.xd=!0};f.initialize=function(){}; +f.get=function(a){this.xd||this.ec();return this.ha[a]};f.set=function(a,b){this.ha[a]=this.ha[a]||{sync:void 0,async:void 0};this.ha[a].sync=b;this.Nb=this.Ob=void 0;return this};f.setAsync=function(a,b){this.ha[a]=this.ha[a]||{sync:void 0,async:void 0};this.ha[a].async=b;this.Nb=this.Ob=void 0;return this};f.setBoth=function(a,b,c){return this.set(a,b).setAsync(a,c)}; +f.getExpr=function(a,b,c){var d=this;this.xd||this.ec();var e=a?Object.keys(a):null;if(e&&0\n \n '];Pe.raw=['\n \n \n ']; +var Qe={NODISPLAY:"nodisplay",FIXED:"fixed",FIXED_HEIGHT:"fixed-height",RESPONSIVE:"responsive",CONTAINER:"container",FILL:"fill",FLEX_ITEM:"flex-item",FLUID:"fluid",INTRINSIC:"intrinsic"},Re={"AMP-PIXEL":{width:"0px",height:"0px"},"AMP-ANALYTICS":{width:"1px",height:"1px"},"AMP-AUDIO":null,"AMP-SOCIAL-SHARE":{width:"60px",height:"44px"}},Se={"AMP-ANIM":!0,"AMP-BRIGHTCOVE":!0,"AMP-GOOGLE-DOCUMENT-EMBED":!0,"AMP-EMBED":!0,"AMP-FACEBOOK":!0,"AMP-FACEBOOK-COMMENTS":!0,"AMP-FACEBOOK-LIKE":!0,"AMP-FACEBOOK-PAGE":!0, +"AMP-IFRAME":!0,"AMP-IMG":!0,"AMP-INSTAGRAM":!0,"AMP-LIST":!0,"AMP-OOYALA-PLAYER":!0,"AMP-PINTEREST":!0,"AMP-PLAYBUZZ":!0,"AMP-VIDEO":!0,"AMP-YOUTUBE":!0};function Te(a){for(var b in Qe)if(Qe[b]==a)return Qe[b]}function Ue(a){return"fixed"==a||"fixed-height"==a||"responsive"==a||"fill"==a||"flex-item"==a||"fluid"==a||"intrinsic"==a}function Ve(a){if("number"==typeof a)return a+"px";if(a&&/^\d+(\.\d+)?(px|em|rem|vh|vw|vmin|vmax|cm|mm|q|in|pc|pt)?$/.test(a))return/^\d+(\.\d+)?$/.test(a)?a+"px":a} +function We(a){C().assert(/^\d+(\.\d+)?(px|em|rem|vh|vw|vmin|vmax|cm|mm|q|in|pc|pt)$/.test(a),"Invalid length value: %s",a);return a}function Xe(a){C().assert(/^\d+(\.\d+)?(px|em|rem|vh|vw|vmin|vmax|%)$/.test(a),"Invalid length or percent value: %s",a);return a}function Ye(a){We(a);var b=C().assert(a.match(/[a-z]+/i),"Failed to read units from %s",a);return b[0]}function Ze(a){a=parseFloat(a);return na(a)?a:void 0}function $e(a){U(a,"display","none");a.classList.add("i-amphtml-display")};function af(a){return"undefined"!==typeof TextEncoder?(new TextEncoder("utf-8")).encode(a):bf(unescape(encodeURIComponent(a)))}function bf(a){for(var b=new Uint8Array(a.length),c=0;c'];ig.raw=['\n
'];function jg(a){this.A=a;this.nc=this.mc=this.Tb=this.Xb=0;this.Pb=null;this.xa=nc(a);this.Db=this.Be=this.Ce=null;kg(this)}jg.prototype.onScheduled=function(){lg(this)&&null==this.Pb&&(this.Pb=this.A.Date.now())}; +jg.prototype.onRun=function(){if(lg(this)&&null!=this.Pb){var a=this.A.Date.now()-this.Pb;this.Pb=null;this.Tb++;16a.Tb} +function kg(a){lg(a)&&mg(a.A)&&(a.Db=new a.A.PerformanceObserver(function(b){for(var c=b.getEntries(),d=0;db&&(b=10);var c=Date.now()+b;return!this.isPending()||-10>c-this.Wd?(this.cancel(),this.Wd=c,this.qa=this.R.delay(this.hg,b),!0):!1};og.prototype.yc=function(){this.qa=-1;this.Wd=0;this.Oa=!0;this.Ag();this.Oa=!1}; +og.prototype.cancel=function(){this.isPending()&&(this.R.cancel(this.qa),this.qa=-1)};function pg(){this.C=[]}pg.prototype.peek=function(){var a=this.C.length;return a?this.C[a-1].item:null};pg.prototype.enqueue=function(a,b){if(isNaN(b))throw Error("Priority must not be NaN.");for(var c=b,d=-1,e=0,g=this.C.length;e<=g;){d=Math.floor((e+g)/2);if(d===this.C.length)break;if(this.C[d].priority=c)g=d-1;else break}this.C.splice(d,0,{item:a,priority:b})};pg.prototype.dequeue=function(){return this.C.length?this.C.pop().item:null}; +ca.Object.defineProperties(pg.prototype,{length:{configurable:!0,enumerable:!0,get:function(){return this.C.length}}});var qg=/nochunking=1/.test(self.location.hash),rg=Promise.resolve();function sg(a,b){qg?rg.then(b):(P(a,"chunk",tg),fc(a,"chunk").runForStartup(b))}function ug(a){this.state="not_run";this.kd=a}function vg(a,b){if("run"!=a.state){a.state="run";try{a.kd(b)}catch(c){throw a.vf(c),c;}}}ug.prototype.Dh=function(){return this.kd.displayName||this.kd.name};ug.prototype.vf=function(){};ug.prototype.ef=function(){return!1};ug.prototype.Vf=function(){return!0}; +function wg(a,b,c){ug.call(this,a);var d=this;this.A=b;this.h=null;c.then(function(a){d.h=a;d.h.isVisible()&&vg(d,null);d.h.onVisibilityChanged(function(){d.h.isVisible()&&vg(d,null)})})}aa(wg,ug);wg.prototype.vf=function(){re(self.document)};wg.prototype.ef=function(){return this.h?this.h.isVisible():this.A.document.hidden?!1:!/visibilityState=(hidden|prerender)/.test(this.A.location.hash)};wg.prototype.Vf=function(){return!!this.h}; +function tg(a){var b=this;this.A=a.win;this.I=new pg;this.Ee=this.Ve.bind(this);this.xh=pc(a,"viewer");this.A.addEventListener("message",function(a){"amp-macro-task"==a.data&&b.Ve(null)})}tg.prototype.run=function(a,b){var c=new ug(a);xg(this,c,b)};tg.prototype.runForStartup=function(a){a=new wg(a,this.A,this.xh);xg(this,a,Number.POSITIVE_INFINITY)};function xg(a,b,c){a.I.enqueue(b,c);rg.then(function(){a.Pa()})} +function yg(a,b){for(var c=a.I.peek();c&&"not_run"!==c.state;)a.I.dequeue(),c=a.I.peek();c&&b&&a.I.dequeue();return c}tg.prototype.Ve=function(a){var b=this,c=yg(this,!0);if(!c)return!1;vg(c,a);rg.then(function(){b.Pa()});return!0};function zg(a){rg.then(function(){a.Ee(null)})}tg.prototype.Pa=function(){var a=yg(this);a&&(a.ef()?zg(this):a.Vf()&&this.A.requestIdleCallback?Ag(this.A,this.Ee):this.A.postMessage("amp-macro-task","*"))}; +function Ag(a,b){var c=15,d=2E3;function e(h){if(h.timeRemaining()=k||h.didTimeout?b(h):a.requestIdleCallback(e,{timeout:k})}else b(h)}var g=Date.now();a.requestIdleCallback(e,{timeout:d})};function Bg(a){return!!a&&"function"==typeof a.getFormData};var Cg={PRERENDER:"prerender",VISIBLE:"visible",HIDDEN:"hidden",PAUSED:"paused",INACTIVE:"inactive"};var Dg=/^(https?:\/\/)((www[0-9]*|web|ftp|wap|home|mobile|amp|m)\.)+/i,Eg=[/(^|\.)google\.(com?|[a-z]{2}|com?\.[a-z]{2}|cat)$/],Fg=[/^t.co$/]; +function Gg(a,b){var c=this;this.ampdoc=a;this.win=a.win;this.yb=fd(this.win);this.qb=Q(this.win,"documentState");this.na=!0;this.$d=!1;this.Xf=this.Qc="visible";this.Fa=1;this.Qd=G();this.pc=G();this.If=new Y;this.Vb=new Y;this.Le=new Y;this.qc=this.gb=null;this.hb=[];this.L={};this.vb={};this.ne=this.se=this.Sd=this.lf=this.Da=this.vc=this.uc=null;var d=new N;this.Ah=d.promise;this.Bh=d.resolve;b?Object.assign(this.L,b):(this.win.name&&0==this.win.name.indexOf("__AMP__")&&Hg(this.win.name.substring(7), +this.L),this.win.location.hash&&(Hg(this.win.location.hash,this.vb),Object.assign(this.L,this.vb)));this.na=!parseInt(this.L.off,10);this.$d=!(!parseInt(this.L.history,10)&&!this.$d);Ig(this,this.L.visibilityState);this.Fa=parseInt(this.L.prerenderSize,10)||this.Fa;var e=!1;if(!this.yb)var g=p(this.win.location.search),e="1"===g.amp_gsa&&I(g.amp_js_v||"","a");this.fc=e;this.Hd=!this.yb&&"1"==this.L.webview;this.hc=!(!(this.yb&&!this.win.AMP_TEST_IFRAME&&(this.L.origin||this.L.visibilityState||-1!= +this.win.location.search.indexOf("amp_js_v"))||this.Hd||this.fc)&&a.isSingleDoc());a=K(this.ampdoc.win.location.href);this.Jg=jb(a);this.md=this.isVisible();this.qb.onVisibilityChanged(this.Df.bind(this));var h=new N;this.Sd=h.resolve;this.Rd=this.hc?R(this.win).timeoutPromise(2E4,h.promise).catch(function(a){throw Jg(a);}):null;this.qf=this.hc?this.Rd.catch(function(a){xe(Jg(a))}):null;var k,l;this.hc?!this.win.location.ancestorOrigins||this.Hd||this.fc?(a=new N,l=a.promise,this.ne=a.resolve):(k= +0=a.J.length)return{type:ih,index:a.sd};var d=a.J.charAt(c);if(-1!=" \t\n\r\f\v\u00a0\u2028\u2029".indexOf(d)){for(c++;c=a.J.length)return{type:ih,index:c};d=a.J.charAt(c)}if(b&&(qh(d)||"."==d&&c+1=l){g=d;break}}if(-1==g)return{type:0,index:c};a=a.J.substring(c,g+1);c=g;return{type:mh,value:a,index:c}}for(g=c+1;g=a};function rh(a,b){this.win=a;this.Ec=null;b&&(this.Ec=new sh(a));this.sa=null}f=rh.prototype;f.isSingleDoc=function(){return!!this.Ec};f.hasAmpDocShell=function(){return!!this.sa}; +f.getAmpDoc=function(a){if(this.Ec)return this.Ec;if(L(this.win,"ampdoc-shell")&&a===this.win.document){if(this.sa)return this.sa;throw E().createError("Ampdoc for shell has not been installed");}for(var b=a;b;){if(b.D)return b.D;var c=Ic(b,this.win);if(c)b=c;else{b=Tg(b);if(!b){if(this.sa)return this.sa;break}if(c=b.__AMPDOC)return c;b=b.host}}throw E().createError("No ampdoc found for",a);};f.installShadowDoc=function(a,b){a=new th(this.win,a,b);return b.__AMPDOC=a}; +f.installShellShadowDoc=function(){var a=this;this.sa=new uh(this.win);this.win.document.__AMPDOC=this.sa;lf(this.win.document).then(function(b){a.sa.setBody(b.body);a.sa.setReady()});return this.sa};function vh(a){this.win=a;this.P=new ff;this.Se=[]}f=vh.prototype;f.isSingleDoc=function(){return null};f.getWin=function(){return this.win};f.signals=function(){return this.P};f.declaresExtension=function(a){return-1!=this.Se.indexOf(a)};f.declareExtension=function(a){this.declaresExtension(a)||this.Se.push(a)}; +f.getRootNode=function(){return null};f.getHeadNode=function(){};f.isBodyAvailable=function(){return!1};f.getBody=function(){return null};f.whenBodyAvailable=function(){return null};f.isReady=function(){return null};f.whenReady=function(){return null};f.getUrl=function(){return null};f.getElementById=function(a){return this.getRootNode().getElementById(a)};f.contains=function(a){return this.getRootNode().contains(a)}; +function sh(a){vh.call(this,a);var b=this;this.Wc=this.win.document.body?Promise.resolve(this.win.document.body):Pc(this.win.document).then(function(){return b.getBody()});this.ee=lf(this.win.document)}aa(sh,vh);f=sh.prototype;f.isSingleDoc=function(){return!0};f.getRootNode=function(){return this.win.document};f.getUrl=function(){return this.win.location.href};f.getHeadNode=function(){return this.win.document.head};f.isBodyAvailable=function(){return!!this.win.document.body};f.getBody=function(){return this.win.document.body}; +f.whenBodyAvailable=function(){return this.Wc};f.isReady=function(){return gf(this.win.document)};f.whenReady=function(){return this.ee};function th(a,b,c){vh.call(this,a);this.pe=b;this.Kf=c;this.Yc=null;var d=new N;this.Wc=d.promise;this.De=d.resolve;this.Cf=!1;var e=new N;this.ee=e.promise;this.Bf=e.resolve}aa(th,vh);f=th.prototype;f.isSingleDoc=function(){return!1};f.getRootNode=function(){return this.Kf};f.getUrl=function(){return this.pe};f.getHeadNode=function(){return this.Kf}; +f.isBodyAvailable=function(){return!!this.Yc};f.getBody=function(){return this.Yc};f.setBody=function(a){this.Yc=a;this.De(a);this.De=void 0};f.whenBodyAvailable=function(){return this.Wc};f.isReady=function(){return this.Cf};f.setReady=function(){this.Cf=!0;this.Bf();this.Bf=void 0};f.whenReady=function(){return this.ee};function uh(a){th.call(this,a,a.location.href,a.document)}aa(uh,th);uh.prototype.getHeadNode=function(){return this.win.document.head}; +function wh(){var a=self;O(a,"ampdoc",function(){return new rh(a,!0)})};function xh(a){var b=this;this.win=a;this.vd=this.win.Date.now();this.sb=[];this.o=this.h=null;this.Ab=this.Ed=!1;this.Ue=G();this.ye="";this.Ze=this.Xe=this.nf=null;this.addEnabledExperiment("rtv-"+r(this.win).rtvVersion);ub(this.win)&&this.addEnabledExperiment("canary");mf(a.document).then(function(){b.tick("ol");if(!b.win.PerformancePaintTiming&&b.win.chrome&&"function"==typeof b.win.chrome.loadTimes){var a=1E3*b.win.chrome.loadTimes().firstPaintTime-b.win.performance.timing.navigationStart;1>= +a||b.tickDelta("fp",a)}b.flush()});yh(this)}f=xh.prototype;f.coreServicesAvailable=function(){var a=this;this.h=T(this.win.document);this.o=sd(this.win.document);this.Ab=this.h.isEmbedded()&&"1"===this.h.getParam("csi");this.h.onVisibilityChanged(this.flush.bind(this));zh(this);var b=this.h.whenMessagingReady();this.h.whenFirstVisible().then(function(){a.tick("ofv");a.flush()});return b?b.then(function(){a.Ed=!0;a.tickDelta("msr",a.win.Date.now()-a.vd);Ah(a);a.flush()}):Promise.resolve()}; +function yh(a){if(a.win.PerformancePaintTiming){var b=!1,c=!1,d=function(d){"first-paint"!=d.name||b?"first-contentful-paint"!=d.name||c||(a.tickDelta("fcp",d.startTime+d.duration),c=!0):(a.tickDelta("fp",d.startTime+d.duration),b=!0)},e=new a.win.PerformanceObserver(function(b){b.getEntries().forEach(d);a.flush()});a.win.performance.getEntriesByType("paint").forEach(d);e.observe({entryTypes:["paint"]})}} +function zh(a){var b=!a.h.hasBeenVisible(),c=b?-1:a.vd;b&&a.h.whenFirstVisible().then(function(){c=a.win.Date.now()});Bh(a).then(function(){if(b){var d=-1'];Dh.raw=['\n '];var Eh=null; +function Fh(a){this.Z=a.document;this.pd=a.document.head;this.Gb={};this.Uf={};this.Jb=rd(a);this.Gb[K(a.location.href).origin]=!0;var b;a:{if(!Eh){b=a.document.createElement("link");var c=b.relList;b.as="invalid-value";if(!c||!c.supports){b={};break a}Eh={preconnect:c.supports("preconnect"),preload:c.supports("preload"),onlyValidAs:"invalid-value"!=b.as}}b=Eh}this.ac=b;this.R=R(a)}Fh.prototype.url=function(a,b,c){var d=this;a.whenFirstVisible().then(function(){d.pe(a,b,c)})}; +Fh.prototype.pe=function(a,b,c){if(Gh(b)){a=K(b).origin;b=Date.now();var d=this.Gb[a];if(d&&bc.right)return{distance:!1};if(b.bottomc.bottom)g=b.top-c.bottom,1==d&&(e=2);else return{distance:!0};return{distance:g,scrollPenalty:e,viewportHeight:b.height}}; +f.isWithinViewportRatio=function(a,b){if("boolean"===typeof a)return a;var c=b||this.getDistanceViewportRatio(),d=c.distance,e=c.viewportHeight;return this.H?d\n
\n
\n
\n '];Uh.raw=['
\n
\n
\n
\n
'];var Vh=['
\n
\n
']; +Vh.raw=['
\n
\n
'];var Wh={"AMP-AD":!0};function Xh(a,b){var c=a.split(",");C().assert(0=q||"A"<=q&&"Z">=q||"0"<=q&&"9">=q);l--);C().assert(l=q||"A"<=q&&"Z">=q||"0"<=q&&"9">=q);l--);0<=l?(c=a.substring(0,l+1).trim(),e=a.substring(l+1).trim()):(e=a,c=void 0);d.push({mediaQuery:c,size:n?e:b?Xe(e):We(e)})}});return new Yh(d)} +function Yh(a){C().assert(0'];Zh.raw=['\n
'];var $h;function ai(a,b){function c(a){return d.call(this,a)||this}var d=bi(a);aa(c,d);c.prototype.elementName=function(){return b};return c} +function bi(a){function b(a){a=c.call(this,a)||this;a.createdCallback();return a}if(a.BaseCustomElementClass)return a.BaseCustomElementClass;var c=a.HTMLElement;aa(b,c);b.prototype.createdCallback=function(){this.gc=this.Me=!1;this.cd=null;this.readyState="loading";this.everAttached=!1;this.cb=this.o=this.D=null;this.layout_="nodisplay";this.layoutWidth_=-1;this.fa=0;this.Ib=this.ab=this.Bd=!1;this.dc=this.Fc=this.oc=void 0;this.warnOnMissingOverflow=!0;this.Pd=this.Nd=this.sizerElement=void 0;this.Od= +this.Na=null;this.ga=void 0;var b=a.ampExtendedElements&&a.ampExtendedElements[this.elementName()];this.implementation_=new b(this);this.nb=1;this.Tf=0;this.zb=this.Ia=void 0;this.P=new ff;var c=nc(a);this.wf=c&&c.isPerformanceTrackingOn();this.Ld=null;this.__AMP_UPG_RES&&(this.__AMP_UPG_RES(this),delete this.__AMP_UPG_RES,delete this.__AMP_UPG_PRM)};b.prototype.elementName=function(){};b.prototype.signals=function(){return this.P};b.prototype.getAmpDoc=function(){return this.D};b.prototype.getResources= +function(){return this.o};b.prototype.getLayers=function(){return this.cb};b.prototype.isUpgraded=function(){return 2==this.nb};b.prototype.upgrade=function(a){this.zb||1!=this.nb||(this.implementation_=new a(this),this.everAttached&&this.Qf())};b.prototype.getUpgradeDelayMs=function(){return this.Tf};b.prototype.hd=function(b,c){this.Tf=a.Date.now()-c;this.nb=2;this.implementation_=b;this.classList.remove("amp-unresolved");this.classList.remove("i-amphtml-unresolved");this.implementation_.createdCallback(); +this.bg();this.implementation_.layout_=this.layout_;this.implementation_.layoutWidth_=this.layoutWidth_;this.implementation_.firstAttachedCallback();this.$a();this.getResources().upgraded(this)};b.prototype.bg=function(){if("nodisplay"!=this.layout_&&!this.implementation_.isLayoutSupported(this.layout_)){var a="Layout not supported: "+this.layout_;this.getAttribute("layout")||(a+=". The element did not specify a layout attribute. Check https://www.ampproject.org/docs/guides/responsive/control_layout and the respective element documentation for details."); +throw C().createError(a);}};b.prototype.isBuilt=function(){return this.Me};b.prototype.whenBuilt=function(){return this.P.whenSignal("built")};b.prototype.getLayoutPriority=function(){this.isUpgraded();return this.implementation_.getLayoutPriority()};b.prototype.build=function(){var a=this;this.isUpgraded();return this.cd?this.cd:this.cd=(new Promise(function(b,c){var d=a.xg();d?jd(a.getAmpDoc(),"consentPolicyManager","amp-consent").then(function(a){return a?a.whenPolicyUnblock(d):!0}).then(function(d){1== +d?b(a.implementation_.buildCallback()):c(Error("BLOCK_BY_CONSENT"))}):b(a.implementation_.buildCallback())})).then(function(){a.preconnect(!1);a.Me=!0;a.classList.remove("i-amphtml-notbuilt");a.classList.remove("amp-notbuilt");a.P.signal("built");a.ab&&a.Rf(!0);a.Ia&&R(a.ownerDocument.defaultView).delay(a.rg.bind(a),1);if(!a.getPlaceholder()){var b=a.createPlaceholder();b&&a.appendChild(b)}},function(b){a.P.rejectSignal("built",b);ze(b)||xe(b,a);throw b;})};b.prototype.preconnect=function(a){var b= +this;a?this.implementation_.preconnectCallback(a):R(this.ownerDocument.defaultView).delay(function(){var c=b.tagName;b.ownerDocument?b.ownerDocument.defaultView?b.implementation_.preconnectCallback(a):E().error(c,"preconnect without defaultView"):E().error(c,"preconnect without ownerDocument")},1)};b.prototype.isAlwaysFixed=function(){return this.implementation_.isAlwaysFixed()};b.prototype.updateLayoutBox=function(a,b){var c=this;this.layoutWidth_=a.width;this.isUpgraded()&&(this.implementation_.layoutWidth_= +this.layoutWidth_);if(this.isBuilt())try{if(this.implementation_.onLayoutMeasure(),b)this.implementation_.onMeasureChanged()}catch(h){xe(h,this)}this.jc()&&(this.ab?this.toggleLoading(!0):1E3>a.top&&0<=a.top&&this.rc(function(){return c.zf()}))};b.prototype.af=function(){void 0===this.sizerElement&&"responsive"===this.layout_&&(this.sizerElement=this.querySelector("i-amphtml-sizer"));return this.sizerElement||null};b.prototype.applySizesAndMediaQuery=function(){void 0===this.oc&&(this.oc=this.getAttribute("media")|| +null);if(this.oc){var a=this.ownerDocument.defaultView;this.classList.toggle("i-amphtml-hidden-by-media-query",!a.matchMedia(this.oc).matches)}if(void 0===this.Fc){var b=this.getAttribute("sizes");this.Fc=b?Xh(b):null}this.Fc&&U(this,"width",this.Fc.select(this.ownerDocument.defaultView));void 0===this.dc&&"responsive"===this.layout_&&(this.dc=(b=this.getAttribute("heights"))?Xh(b,!0):null);this.dc&&(b=this.af())&&U(b,"paddingTop",this.dc.select(this.ownerDocument.defaultView))};b.prototype.changeSize= +function(a,b,c){var d=this.af();d&&(this.sizerElement=null,U(d,"paddingTop","0"),this.rc(function(){Qc(d)}));void 0!==a&&U(this,"height",a,"px");void 0!==b&&U(this,"width",b,"px");c&&(null!=c.top&&U(this,"marginTop",c.top,"px"),null!=c.right&&U(this,"marginRight",c.right,"px"),null!=c.bottom&&U(this,"marginBottom",c.bottom,"px"),null!=c.left&&U(this,"marginLeft",c.left,"px"));this.Cg()&&this.mh()};b.prototype.connectedCallback=function(){if(!this.gc&&Rc(this)&&(this.gc=!0,this.everAttached||(this.classList.add("i-amphtml-element"), +this.classList.add("i-amphtml-notbuilt"),this.classList.add("amp-notbuilt")),void 0===$h&&($h="content"in self.document.createElement("template")),$h||void 0!==this.zb||(this.zb=!!Vc(this,"template")),!this.zb)){if(!this.D){var a=this.ownerDocument.defaultView,b=nd(a).getAmpDoc(this);this.D=b;var c=this.tagName.toLowerCase();this.implementation_ instanceof Nh&&!b.declaresExtension(c)&&pd(a).installExtensionForDoc(b,c)}this.o||(this.o=sd(this.D));L(this.D.win,"layers")&&(this.cb||(this.cb=oc(this.D, +"layers")),this.getLayers().add(this));this.getResources().add(this);if(this.everAttached){var h=this.reconstructWhenReparented();h&&this.Gf();this.isUpgraded()&&(h&&this.getResources().upgraded(this),this.$a())}else{this.everAttached=!0;try{var k;var l=this.getAttribute("i-amphtml-layout");if(l){var n=Te(l);"responsive"!=n&&"intrinsic"!=n||!this.firstElementChild?"nodisplay"==n&&$e(this):this.sizerElement=this.querySelector("i-amphtml-sizer")||void 0;k=n}else{var m=this.getAttribute("layout"),q= +this.getAttribute("width"),t=this.getAttribute("height"),y=this.getAttribute("sizes"),v=this.getAttribute("heights"),A=m?Te(m):null;C().assert(void 0!==A,"Unknown layout: %s",m);var D=q&&"auto"!=q?Ve(q):q;C().assert(void 0!==D,"Invalid width value: %s",q);var z=t&&"fluid"!=t?Ve(t):t;C().assert(void 0!==z,"Invalid height value: %s",t);var B,x,u,J;if(!(J=A&&"fixed"!=A&&"fixed-height"!=A||D&&z)){var ha=this.tagName,ha=ha.toUpperCase();J=void 0===Re[ha]}if(J)B=D,x=z;else{var S=this.tagName.toUpperCase(); +if(!Re[S]){var F=this.ownerDocument,V=S.replace(/^AMP\-/,""),Ha=F.createElement(V);Ha.controls=!0;fe(Ha,{position:"absolute",visibility:"hidden"});F.body.appendChild(Ha);Re[S]={width:(Ha.offsetWidth||1)+"px",height:(Ha.offsetHeight||1)+"px"};F.body.removeChild(Ha)}var Ga=Re[S];B=D||"fixed-height"==A?D:Ga.width;x=z||Ga.height}u=A?A:B||x?"fluid"==x?"fluid":!x||B&&"auto"!=B?x&&B&&(y||v)?"responsive":"fixed":"fixed-height":"container";"fixed"!=u&&"fixed-height"!=u&&"responsive"!=u&&"intrinsic"!=u||C().assert(x, +"Expected height to be available: %s",t);"fixed-height"==u&&C().assert(!B||"auto"==B,'Expected width to be either absent or equal "auto" for fixed-height layout: %s',q);"fixed"!=u&&"responsive"!=u&&"intrinsic"!=u||C().assert(B&&"auto"!=B,'Expected width to be available and not equal to "auto": %s',q);"responsive"==u||"intrinsic"==u?C().assert(Ye(B)==Ye(x),"Length units should be the same for width and height: %s, %s",q,t):C().assert(null===v,'Unexpected "heights" attribute for none-responsive layout'); +this.classList.add("i-amphtml-layout-"+u);Ue(u)&&this.classList.add("i-amphtml-layout-size-defined");if("nodisplay"==u)$e(this);else if("fixed"==u)fe(this,{width:B,height:x});else if("fixed-height"==u)U(this,"height",x);else if("responsive"==u){var ba=this.ownerDocument.createElement("i-amphtml-sizer");fe(ba,{display:"block",paddingTop:Ze(x)/Ze(B)*100+"%"});this.insertBefore(ba,this.firstChild);this.sizerElement=ba}else if("intrinsic"==u){var ga=Ne(this)(Pe),fa=ga.firstElementChild;fa.setAttribute("src", +'data:image/svg+xml;charset=utf-8,');this.insertBefore(ga,this.firstChild);this.sizerElement=fa}else"fill"!=u&&"container"!=u&&("flex-item"==u?(B&&U(this,"width",B),x&&U(this,"height",x)):"fluid"==u&&(this.classList.add("i-amphtml-layout-awaiting-size"),B&&U(this,"width",B),U(this,"height",0)));k=u}this.layout_=k}catch(xa){xe(xa,this)}this.implementation_ instanceof Nh||this.Qf();this.isUpgraded()||(this.classList.add("amp-unresolved"), +this.classList.add("i-amphtml-unresolved"),this.$a())}}};b.prototype.Cg=function(){return this.classList.contains("i-amphtml-layout-awaiting-size")};b.prototype.mh=function(){this.classList.remove("i-amphtml-layout-awaiting-size")};b.prototype.attachedCallback=function(){this.connectedCallback()};b.prototype.Qf=function(){var b=this,c=this.implementation_;if(1==this.nb){this.nb=4;var g=a.Date.now(),h=c.upgradeCallback();h?"function"==typeof h.then?h.then(function(a){b.hd(a||c,g)}).catch(function(a){b.nb= +3;w(a)}):this.hd(h,g):this.hd(c,g)}};b.prototype.disconnectedCallback=function(){this.zb||!this.gc||Rc(this)||(this.gc=!1,this.getResources().remove(this),this.implementation_.detachedCallback())};b.prototype.detachedCallback=function(){this.disconnectedCallback()};b.prototype.dispatchCustomEvent=function(a,b){b=b||{};var c=this.ownerDocument.createEvent("Event");c.data=b;c.initEvent(a,!0,!0);this.dispatchEvent(c)};b.prototype.$a=function(){};b.prototype.prerenderAllowed=function(){return this.implementation_.prerenderAllowed()}; +b.prototype.createPlaceholder=function(){return this.implementation_.createPlaceholderCallback()};b.prototype.renderOutsideViewport=function(){return this.implementation_.renderOutsideViewport()};b.prototype.idleRenderOutsideViewport=function(){return this.implementation_.idleRenderOutsideViewport()};b.prototype.getLayoutBox=function(){return this.getResources().getResourceForElement(this).getLayoutBox()};b.prototype.getPageLayoutBox=function(){return this.getResources().getResourceForElement(this).getPageLayoutBox()}; +b.prototype.getOwner=function(){return this.getResources().getResourceForElement(this).getOwner()};b.prototype.getIntersectionChangeEntry=function(){var a=this.implementation_.getIntersectionElementLayoutBox(),b=this.getResources().getResourceForElement(this).getOwner(),c=this.implementation_.getViewport().getRect(),h=b&&b.getLayoutBox(),k=Fe(a,h,c)||W(0,0,0,0),b=k.width*k.height/(a.width*a.height),l=c;c&&(k=He(k,-c.left,-c.top),a=He(a,-c.left,-c.top),l=He(l,-c.left,-c.top));return{time:"undefined"!== +typeof performance&&performance.now?performance.now():Date.now()-hg,rootBounds:l,boundingClientRect:a,intersectionRect:k,intersectionRatio:b}};b.prototype.getResourceId=function(){return this.getResources().getResourceForElement(this).getId()};b.prototype.yg=function(){return this.getResources().getResourceForElement(this).getState()};b.prototype.isRelayoutNeeded=function(){return this.implementation_.isRelayoutNeeded()};b.prototype.getImpl=function(){var a=this;return this.whenBuilt().then(function(){return a.implementation_})}; +b.prototype.getLayout=function(){return this.layout_};b.prototype.layoutCallback=function(){var a=this;this.isBuilt();this.$a();var b=0==this.fa;this.P.reset("unload");b&&this.P.signal("load-start");this.wf&&this.$e().startLayout();var c=cc(function(){return a.implementation_.layoutCallback()});this.preconnect(!0);this.classList.add("i-amphtml-layout");return c.then(function(){b&&a.P.signal("load-end");a.readyState="complete";a.fa++;a.toggleLoading(!1,{cleanup:!0});a.Bd||(a.implementation_.firstLayoutCompleted(), +a.Bd=!0,a.dispatchCustomEvent("amp:load:end"))},function(c){b&&a.P.rejectSignal("load-end",c);a.fa++;a.toggleLoading(!1,{cleanup:!0});throw c;})};b.prototype.isInViewport=function(){return this.ab};b.prototype.viewportCallback=function(a){var b=this;a!=this.ab&&this.ownerDocument&&this.ownerDocument.defaultView&&(this.ab=a,0==this.fa&&(a?R(this.ownerDocument.defaultView).delay(function(){b.ab&&b.ownerDocument&&b.ownerDocument.defaultView&&b.toggleLoading(!0)},100):this.toggleLoading(!1)),this.isBuilt()&& +this.Rf(a))};b.prototype.Rf=function(a){this.implementation_.inViewport_=a;this.implementation_.viewportCallback(a);a&&this.wf&&this.$e().enterViewport()};b.prototype.isPaused=function(){return this.Ib};b.prototype.pauseCallback=function(){this.Ib||(this.Ib=!0,this.viewportCallback(!1),this.isBuilt()&&this.implementation_.pauseCallback())};b.prototype.resumeCallback=function(){this.Ib&&(this.Ib=!1,this.isBuilt()&&this.implementation_.resumeCallback())};b.prototype.unlayoutCallback=function(){if(!this.isBuilt())return!1; +this.P.signal("unload");var a=this.implementation_.unlayoutCallback();a&&this.Gf();return a};b.prototype.Gf=function(){this.fa=0;this.Bd=!1;this.P.reset("render-start");this.P.reset("load-start");this.P.reset("load-end");this.P.reset("ini-load")};b.prototype.unlayoutOnPause=function(){return this.implementation_.unlayoutOnPause()};b.prototype.reconstructWhenReparented=function(){return this.implementation_.reconstructWhenReparented()};b.prototype.collapse=function(){this.implementation_.collapse()}; +b.prototype.collapsedCallback=function(a){this.implementation_.collapsedCallback(a)};b.prototype.expand=function(){this.implementation_.expand()};b.prototype.expandedCallback=function(a){this.implementation_.expandedCallback(a)};b.prototype.mutatedAttributesCallback=function(a){this.implementation_.mutatedAttributesCallback(a)};b.prototype.enqueAction=function(a){this.isBuilt()?this.We(a,!1):(void 0===this.Ia&&(this.Ia=[]),this.Ia.push(a))};b.prototype.rg=function(){var a=this;if(this.Ia){var b=this.Ia; +this.Ia=null;b.forEach(function(b){a.We(b,!0)})}};b.prototype.We=function(a,b){try{this.implementation_.executeAction(a,b)}catch(g){w("Action execution failed:",g,a.node.tagName,a.method)}};b.prototype.xg=function(){var a=this.getAttribute("data-block-on-consent");return null===a?null:""==a||"default"==a?this.implementation_.getConsentPolicy():a};b.prototype.getRealChildNodes=function(){return $c(this,function(a){return!ci(a)})};b.prototype.getRealChildren=function(){return Yc(this,function(a){return!ci(a)})}; +b.prototype.toggleLayoutDisplay=function(a){this.classList.toggle("i-amphtml-display",a)};b.prototype.getPlaceholder=function(){return Zc(this,function(a){return a.hasAttribute("placeholder")&&!("placeholder"in a)})};b.prototype.togglePlaceholder=function(a){if(a){var b=this.getPlaceholder();b&&b.classList.remove("amp-hidden")}else for(var c=dd(this,"> [placeholder]"),b=0;b [fallback]")}; +b.prototype.toggleFallback=function(a){var b=this.yg();if(!a||0!=b&&1!=b&&2!=b)if(this.classList.toggle("amp-notsupported",a),1==a){var c=this.getFallback();c&&this.getResources().scheduleLayout(this,c)}};b.prototype.renderStarted=function(){this.P.signal("render-start");this.togglePlaceholder(!1);this.toggleLoading(!1)};b.prototype.jc=function(){if(this.Eg())return!1;void 0===this.Nd&&(this.Nd=this.hasAttribute("noloading"));var a;(a=this.Nd)||(a=this.tagName.toUpperCase(),a=!("AMP-AD"==a||"AMP-EMBED"== +a||Se[a]));return a||100>this.layoutWidth_||0 [overflow]"))&&(this.ga.hasAttribute("tabindex")||this.ga.setAttribute("tabindex","0"),this.ga.hasAttribute("role")||this.ga.setAttribute("role","button"));return this.ga};b.prototype.overflowCallback=function(a,b,c){var d=this;this.getOverflowElement();this.ga?(this.ga.classList.toggle("amp-visible",a),this.ga.onclick=a?function(){var a=d.getResources();a.changeSize(d,b,c);a.mutateElement(d,function(){d.overflowCallback(!1,b,c)})}:null):a&&this.warnOnMissingOverflow&& +C().warn("CustomElement","Cannot resize element and overflow is not available",this)};b.prototype.rc=function(a){this.o?this.getResources().mutateElement(this,a):a()};a.BaseCustomElementClass=b;return a.BaseCustomElementClass}function ci(a){var b="string"==typeof a?a:a.tagName;return b&&I(b.toLowerCase(),"i-")||a.tagName&&(a.hasAttribute("placeholder")||a.hasAttribute("fallback")||a.hasAttribute("overflow"))?!0:!1};function di(a){a.ampExtendedElements||(a.ampExtendedElements={});return a.ampExtendedElements}function ei(a,b,c){var d=di(a);if(!d[b])fi(a,b,c);else if(d[b]!=c){C().assert(d[b]==Nh,"%s is already registered. The script tag for %s is likely included twice in the page.",b,b);d[b]=c;for(var e=0;e template")}; +function ki(a,b){var c=b.__AMP_IMPL_;if(c)return Promise.resolve(c);var c=C().assert(b.getAttribute("type"),"Type must be specified: %s",b),d=b.__AMP_WAIT_;if(d)return d;d=li(a,c).then(function(c){var d=b.__AMP_IMPL_=new c(b,a.A);delete b.__AMP_WAIT_;return d});return b.__AMP_WAIT_=d}function li(a,b){if(a.lb[b])return a.lb[b];var c=new N,d=c.promise,c=c.resolve;a.lb[b]=d;a.Ic[b]=c;return d}f.unregisterTemplate=function(a){delete this.lb[a];delete this.Ic[a]};var mi=["GET","POST"];function ni(a,b){var c=Object.assign({},b);if(Bg(b.body)){c.headers["Content-Type"]="multipart/form-data;charset=utf-8";b=b.body.entries();for(var d=[],e=b.next();!e.done;e=b.next())d.push(e.value);c.body=d}return{input:a,init:c}} +function oi(a,b){C().assert(ma(a),"Object expected: %s",a);var c="document"==b;if("function"===typeof Response&&!c)return new Response(a.body,a.init);var d=G(),e={status:200,statusText:"OK",responseText:a.body?String(a.body):"",getResponseHeader:function(a){return d[String(a).toLowerCase()]||null}};a.init&&(a=a.init,la(a.headers)&&a.headers.forEach(function(a){var b=a[0],c=a[1];d[String(b).toLowerCase()]=String(c)}),a.status&&(e.status=parseInt(a.status,10)),a.statusText&&(e.statusText=String(a.statusText))); +c&&(e.responseXML=(new DOMParser).parseFromString(e.responseText,"text/html"));return new pi(e)} +function qi(a,b,c,d){if(!b)return Promise.resolve();var e=T(b),g=e.whenFirstVisible();return!jb(c)&&e.hasCapability("xhrInterceptor")&&b.getRootNode().documentElement.hasAttribute("allow-xhr-interception")?g.then(function(){return e.isTrustedViewer()}).then(function(b){var g=r(a).development;if(b||g){var h=H({originalRequest:ni(c,d)});return e.sendMessageAwaitResponse("xhr",h).then(function(a){return oi(a,d.responseType)})}}):g}function ri(a,b,c){!1!==c.ampCors&&(b=pb(a,b));return b} +function si(a,b){a=a||{};var c=a.credentials,d;d=a.method;void 0===d?d="GET":(d=d.toUpperCase(),mi.includes(d));a.method=d;a.headers=a.headers||H({});b&&(a.headers.Accept=b);return a} +function ti(a,b,c){!1===c.ampCors&&(c.requireAmpResponseSourceOrigin=!1);!0===c.requireAmpResponseSourceOrigin&&E().error("XHR","requireAmpResponseSourceOrigin is deprecated, use ampCors instead");void 0===c.requireAmpResponseSourceOrigin&&(c.requireAmpResponseSourceOrigin=!0);var d=a.origin||K(a.location.href).origin;a=K(b).origin;d==a&&(c.headers=c.headers||{},c.headers["AMP-Same-Origin"]="true");return c}var ui={document:1,text:2}; +function vi(a,b){return new Promise(function(c,d){var e=wi(b.method||"GET",a);"include"==b.credentials&&(e.withCredentials=!0);b.responseType in ui&&(e.responseType=b.responseType);b.headers&&Object.keys(b.headers).forEach(function(a){e.setRequestHeader(a,b.headers[a])});e.onreadystatechange=function(){2>e.readyState||(100>e.status||599b;c.response=a;throw c;})}function pi(a){this.Ha=a;this.status=this.Ha.status;this.ok=200<=this.status&&300>this.status;this.headers=new yi(a);this.bodyUsed=!1;this.body=null}f=pi.prototype;f.clone=function(){return new pi(this.Ha)};function zi(a){a.bodyUsed=!0;return Promise.resolve(a.Ha.responseText)}f.text=function(){return zi(this)};f.json=function(){return zi(this).then(Yd)}; +f.document=function(){this.bodyUsed=!0;C().assert(this.Ha.responseXML,"responseXML should exist. Make sure to return Content-Type: text/html header.");return Promise.resolve(this.Ha.responseXML)};f.arrayBuffer=function(){return zi(this).then(af)};function yi(a){this.Ha=a}yi.prototype.get=function(a){return this.Ha.getResponseHeader(a)};yi.prototype.has=function(a){return null!=this.Ha.getResponseHeader(a)};var Ai=[la,ma];function Bi(a){this.win=a;a=nd(a);this.$f=a.isSingleDoc()?a.getAmpDoc():null}f=Bi.prototype;f.wg=function(a,b){var c=this,d=arguments;return qi(this.win,this.$f,a,b).then(function(e){if(e)return e;Bg(b.body)&&(b.body=b.body.getFormData());return"document"==b.responseType?vi(a,b):(c.win.fetch||vi).apply(null,d)})}; +function Ci(a,b,c){c=void 0===c?{}:c;b=ri(a.win,b,c);c=ti(a.win,b,c);return a.wg(b,c).then(function(b){var d=a.win,g=c,h=b.headers.get("AMP-Access-Control-Allow-Source-Origin");h?(d=ob(d.location.href),C().assert(h==d,"Returned AMP-Access-Control-Allow-Source-Origin is not equal to the current: "+h+(" vs "+d))):g.requireAmpResponseSourceOrigin&&C().assert(!1,"Response must contain the AMP-Access-Control-Allow-Source-Origin header");return b},function(a){var c=K(b).origin;throw C().createExpectedError("XHR", +"Failed fetching"+(" ("+c+"/...):"),a&&a.message);})}f.fetchJson=function(a,b){var c=si(b,"application/json");if("POST"==c.method&&!Bg(c.body)){Ai.some(function(a){return a(c.body)});c.headers["Content-Type"]=c.headers["Content-Type"]||"text/plain;charset=utf-8";var d=c.headers["Content-Type"];c.body="application/x-www-form-urlencoded"===d?$a(c.body):JSON.stringify(c.body)}return this.fetch(a,c)};f.fetchText=function(a,b){return this.fetch(a,si(b,"text/plain"))}; +f.fetchDocument=function(a,b){b=si(b,"text/html");b.responseType="document";return this.fetch(a,b).then(function(a){return a.document()})};f.fetch=function(a,b){b=si(b);return Ci(this,a,b).then(function(a){return xi(a)})};f.sendSignal=function(a,b){return Ci(this,a,b).then(function(a){return xi(a)})};f.getCorsUrl=function(a,b){return pb(a,b)};function Di(a){Bi.call(this,a);this.ub=G()}aa(Di,Bi);Di.prototype.fetch=function(a,b){var c=this,d=b&&b.headers&&b.headers.Accept||"",e=!b||!b.method||"GET"===b.method,g=ib(a)+d,h=!!this.ub[g];if(e&&h)return this.ub[g].then(function(a){return a.clone()});var k=Bi.prototype.fetch.call(this,a,b);e&&(this.ub[g]=k.then(function(a){delete c.ub[g];return a.clone()},function(a){delete c.ub[g];throw a;}));return k};function Ei(a){this.D=a;this.h=T(this.D);this.de=null;this.R=R(this.D.win)}Ei.prototype.isSupported=function(){return this.h.isCctEmbedded()&&this.h.isProxyOrigin()};Ei.prototype.getScopedCid=function(a){var b=this;if(!this.h.isCctEmbedded())return Promise.resolve(null);this.de||(this.de=this.tb("https://ampcid.google.com/v1/cache:getClientId?key=AIzaSyDKtqGxnoeIqVM33Uf7hRSa3GJxuzR7mLc"));return this.de.then(function(c){return c?Fi(b,c,a):null})}; +Ei.prototype.tb=function(a,b){b=void 0===b?!0:b;var c=this,d=H({publisherOrigin:ob(this.D.win.location)});return this.R.timeoutPromise(3E4,Q(this.D.win,"xhr").fetchJson(a,{method:"POST",ampCors:!1,credentials:"include",mode:"cors",body:d})).then(function(a){return a.json().then(function(a){if(a.optOut)return null;var d=a.publisherClientId;if(!d&&b&&a.alternateUrl){var e=a.alternateUrl+"?key=AIzaSyDKtqGxnoeIqVM33Uf7hRSa3GJxuzR7mLc";return c.tb(e,!1)}return d})}).catch(function(a){a&&a.response?a.response.json().then(function(a){E().error("CacheCidApi", +JSON.stringify(a))}):E().error("CacheCidApi",a);return null})};function Fi(a,b,c){b=b+";"+c;return Q(a.D.win,"crypto").sha384Base64(b).then(function(a){return"amp-"+a})};function Gi(a){this.A=a.win;this.R=R(this.A);this.gd={};this.fd=(a=od(a).canonicalUrl)?K(a).origin:null} +Gi.prototype.getScopedCid=function(a,b){var c=this;if(this.gd[b])return this.gd[b];var d;return this.gd[b]=this.R.poll(200,function(){d=rb(c.A,"AMP_TOKEN");return"$RETRIEVING"!==d}).then(function(){if("$OPT_OUT"===d)return"$OPT_OUT";var e="$NOT_FOUND"===d&&jb(c.A.document.referrer);if(!e&&d&&"$"===d[0])return null;d&&(!d||"$"!==d[0])||Hi(c,"$RETRIEVING",3E4);return c.tb("https://ampcid.google.com/v1/publisher:getClientId?key="+a,b,d).then(function(e){var g=c.cf(e);if(!g&&e.alternateUrl){var k=e.alternateUrl+ +"?key="+a;return c.tb(k,b,d).then(c.cf.bind(c))}return g}).catch(function(a){Hi(c,"$ERROR",3E4);a&&a.response?a.response.json().then(function(a){E().error("GoogleCidApi",JSON.stringify(a))}):E().error("GoogleCidApi",a);return null})})};Gi.prototype.tb=function(a,b,c){b=H({originScope:b,canonicalOrigin:this.fd});c&&(b.securityToken=c);return this.R.timeoutPromise(3E4,Q(this.A,"xhr").fetchJson(a,{method:"POST",ampCors:!1,credentials:"include",mode:"cors",body:b}).then(function(a){return a.json()}))}; +Gi.prototype.cf=function(a){if(a.optOut)return Hi(this,"$OPT_OUT",31536E6),"$OPT_OUT";if(a.clientId)return Hi(this,a.securityToken,31536E6),a.clientId;if(a.alternateUrl)return null;Hi(this,"$NOT_FOUND",36E5);return null};function Hi(a,b,c){b&&sb(a.A,"AMP_TOKEN",b,a.A.Date.now()+c,{highestAvailableDomain:!0})};function Ii(a){this.D=a;this.h=T(this.D);this.fd=(a=od(this.D).canonicalUrl)?K(a).origin:null}Ii.prototype.isSupported=function(){return this.h.hasCapability("cid")?this.h.isTrustedViewer():Promise.resolve(!1)};Ii.prototype.getScopedCid=function(a,b){b=H({scope:b,clientIdApi:!!a,canonicalOrigin:this.fd});a&&(b.apiKey=a);return this.h.sendMessageAwaitResponse("cid",b)};var Ji=/^[a-zA-Z0-9-_.]+$/,Ki={googleanalytics:"AMP_ECID_GOOGLE"},Li={googleanalytics:"AIzaSyA65lEHUEizIsNtlbNo-l2K18dT680nsaM"};function Mi(a){this.ampdoc=a;this.Vc=null;this.jd=Object.create(null);this.Ne=new Ei(a);this.Wf=new Ii(a);this.og=new Gi(a);this.Uc=null} +Mi.prototype.get=function(a,b,c){var d=this;C().assert(Ji.test(a.scope)&&Ji.test(a.cookieName),"The CID scope and cookie name must only use the characters [a-zA-Z0-9-_.]+\nInstead found: %s",a.scope);return b.then(function(){return T(d.ampdoc).whenFirstVisible()}).then(function(){return Ni(d.ampdoc)}).then(function(e){if(e)return"";var g=Oi(d,a,c||b);return R(d.ampdoc.win).timeoutPromise(1E4,g,'Getting cid for "'+a.scope+'" timed out').catch(function(a){w(a)})})};Mi.prototype.optOut=function(){return Pi(this.ampdoc)}; +function Oi(a,b,c){var d=b.scope,e=K(a.ampdoc.win.location.href);if(!jb(e)){var g=Qi(a,d);return g?a.og.getScopedCid(g,d).then(function(e){return"$OPT_OUT"==e?null:e?(Ri(a.ampdoc.win,b.cookieName||d,e),e):Si(a,b,c)}):Si(a,b,c)}return a.Wf.isSupported().then(function(b){if(b){var g=Qi(a,d);return a.Wf.getScopedCid(g,d)}return a.Ne.isSupported()&&Qi(a,d)?a.Ne.getScopedCid(d).then(function(b){return b?b:Ti(a,c,d,e)}):Ti(a,c,d,e)})} +function Ti(a,b,c,d){return Ui(a,b).then(function(b){return Q(a.ampdoc.win,"crypto").sha384Base64(b+Vi(d)+c)})}function Qi(a,b){a.Uc||(a.Uc=Wi(a));return a.Uc[b]} +function Wi(a){var b={},c=a.ampdoc.win.document.head.querySelector("meta[name=amp-google-client-id-api]");c&&c.hasAttribute("content")&&c.getAttribute("content").split(",").forEach(function(a){a=a.trim();if(0c.message.indexOf("secure origin")&&E().error("Crypto","SubtleCrypto failed, fallback to closure lib.",c);return dj(b).then(function(){return b.sha384(a)})})}catch(c){return E().error("Crypto","SubtleCrypto failed, fallback to closure lib.", +c),dj(this).then(function(){return b.sha384(a)})}};f.sha384Base64=function(a){return this.sha384(a).then(function(a){return ef(a)})};f.uniform=function(a){return this.sha384(a).then(function(a){for(var b=0,d=2;0<=d;d--)b=(b+a[d])/256;return b})};function dj(a){return a.Kb?a.Kb:a.Kb=pd(a.A).preloadExtension("amp-crypto-polyfill").then(function(){return Q(a.A,"crypto-polyfill")})}f.isPkcsAvailable=function(){return!!this.subtle&&!1!==this.A.isSecureContext}; +f.importPkcsKey=function(a){this.isPkcsAvailable();var b=this.Hg?af(JSON.stringify(a)):a;return this.subtle.importKey("jwk",b,this.pkcsAlgo,!0,["verify"])};f.verifyPkcs=function(a,b,c){this.isPkcsAvailable();return this.subtle.verify(this.pkcsAlgo,a,b,c)};var ej=["prefetch","preload","preconnect","dns-prefetch"];function fj(a){this.D=a;this.ud=null} +fj.prototype.get=function(){if(this.ud)return this.ud;var a=this.D,b=a.getUrl(),c=nb(b),d=a.getRootNode(),b=d&&d.AMP&&d.AMP.canonicalUrl;if(!b)var e=d.querySelector("link[rel=canonical]"),b=e?K(e.href).href:c;var g=String(Math.floor(1E4*a.win.Math.random())),h=gj(a.win.document),k=hj(a.win.document),d=ij(a);return this.ud={get sourceUrl(){return nb(a.getUrl())},canonicalUrl:b,pageViewId:g,linkRels:h,metaTags:k,replaceParams:d}}; +function gj(a){var b=G();if(a.head){var c=a.head.querySelectorAll("link[rel]");a={};for(var d=0;d")?(b.preventDefault(),!0):!1:!1} +function oj(a,b,c,d){var e="",g=dc(a.pa,"url",!0).parse(e),h=""+d.origin+d.pathname+d.search,k=""+g.origin+g.pathname+g.search;if(d.hash&&h==k){if(b.preventDefault(),!a.Ad){var l=d.hash.slice(1),n=null;if(l)var m=String(l).replace(Lc,Mc),n=a.pa.getElementById(l)||a.pa.querySelector('a[name="'+m+'"]');d.hash!=g.hash?a.N.replaceStateForTarget(d.hash).then(function(){pj(a,n,l)}):pj(a,n,l)}}else if(a.Ad||a.Fg){var q=(c.getAttribute("target")||"").toLowerCase();"_top"!=q&&"_blank"!=q&&c.setAttribute("target", +"_blank")}}function pj(a,b,c){b?(a.G.scrollIntoView(b),R(a.ampdoc.win).delay(function(){return a.G.scrollIntoView(b)},1)):E().warn("navigation","failed to find element with id="+c+" or a[name="+c+"]")};function qj(a){if(!a.defaultPrevented){var b=a.target;if(b&&"FORM"==b.tagName){var c=b.classList.contains("i-amphtml-form"),d;(d=c?!b.hasAttribute("amp-novalidate"):!b.hasAttribute("novalidate"))&&b.checkValidity&&!b.checkValidity()&&a.preventDefault();for(var e=b.elements,g=0;g=a.B?Promise.resolve():a.j.pop(a.B).then(function(b){a.aa(b)})},"goBack")};f.replaceStateForTarget=function(a){var b=this,c=this.D.win.location.hash;return this.push(function(){b.D.win.location.replace(c||"#")}).then(function(){b.j.replaceStateForTarget(a)})}; +f.getFragment=function(){return this.j.getFragment()};f.updateFragment=function(a){"#"==a[0]&&(a=a.substr(1));return this.j.updateFragment(a)};f.aa=function(a){this.B=a.stackIndex;tj(this,a)};function tj(a,b){if(!(a.B>=a.Ra.length-1)){for(var c=[],d=a.Ra.length-1;d>a.B;d--)a.Ra[d]&&(c.push(a.Ra[d]),a.Ra[d]=void 0);a.Ra.splice(a.B+1);if(0b.win.history.length-2&&(d=b.win.history.length-2,b.za(yj(a,{stackIndex:d})));d=void 0==c?d+ +1:c=b)return Promise.resolve(a.B);a.mb=wj(a,a.B-b);var c=Qj(a);a.win.history.go(-b);return c.then(function(){return Promise.resolve(a.B)})}f.df=function(a,b,c){a||(a={});var d=this.B+1;a["AMP.History"]=d;this.ah(a,b,c);d!=this.win.history.length-1&&(d=this.win.history.length-1,a["AMP.History"]=d,this.Cc(a));this.za(yj(a,{stackIndex:d}))}; +f.replaceStateForTarget=function(a){var b=this;Oj(this,function(){b.win.removeEventListener("popstate",b.Ac);try{b.win.location.replace(a)}finally{b.win.addEventListener("popstate",b.Ac)}b.qd();return Promise.resolve()})};f.qd=function(a,b,c){a||(a={});var d=Math.min(this.B,this.win.history.length-1);a["AMP.History"]=d;this.Cc(a,b,c);this.za(yj(a,{stackIndex:d}))};f.za=function(a){a.stackIndex=Math.min(a.stackIndex,this.win.history.length-1);this.B!=a.stackIndex&&(this.B=a.stackIndex,this.aa&&this.aa(a))}; +f.getFragment=function(){var a=this.win.location.hash,a=a.substr(1);return Promise.resolve(a)};f.updateFragment=function(a){return this.replace({fragment:a})};function yj(a,b){var c=Object.assign({},a&&a.data||{},b&&b.data||{});return Object.assign({},a,b,{data:c})}function Rj(a,b){this.win=a;this.h=b;this.B=0;this.aa=null;this.uh=this.h.onMessage("historyPopped",this.Rg.bind(this))}f=Rj.prototype;f.replaceStateForTarget=function(a){this.win.location.replace(a)};f.cleanup=function(){this.uh()}; +f.setOnStateUpdated=function(a){this.aa=a};f.push=function(a){var b=this,c=Object.assign({stackIndex:this.B+1},a||{});return this.h.sendMessageAwaitResponse("pushHistory",c).then(function(a){a=a||c;b.za(a);return a})};f.pop=function(a){var b=this;if(a>this.B)return this.get();a=H({stackIndex:this.B});return this.h.sendMessageAwaitResponse("popHistory",a).then(function(a){a=a||H({stackIndex:b.B-1});b.za(a);return a})}; +f.replace=function(a){var b=this,c=Object.assign({stackIndex:this.B},a||{});return this.h.sendMessageAwaitResponse("replaceHistory",c,!0).then(function(a){a=a||c;b.za(a);return a})};f.get=function(){return this.h.sendMessageAwaitResponse("getHistory",void 0,!0).then(function(a){return{fragment:a.fragment,stackIndex:a.stackIndex,data:a.data,title:a.title}})};f.Rg=function(a){this.za(a)};f.za=function(a){this.B!=a.stackIndex&&(this.B=a.stackIndex,this.aa&&this.aa(a))}; +f.getFragment=function(){return this.h.hasCapability("fragment")?this.h.sendMessageAwaitResponse("getFragment",void 0,!0).then(function(a){if(!a)return"";"#"==a[0]&&(a=a.substr(1));return a}):Promise.resolve("")};f.updateFragment=function(a){return this.h.hasCapability("fragment")?this.h.sendMessageAwaitResponse("replaceHistory",H({fragment:a}),!0):Promise.resolve()}; +function Sj(a){var b=T(a);b.isOvertakeHistory()||a.win.AMP_TEST_IFRAME?b=new Rj(a.win,b):(O(a.win,"global-history-binding",vj),b=Q(a.win,"global-history-binding"));return new rj(a,b)};function Tj(a){this.win=a;this.eg=this.Sg.bind(this);this.fg=this.Tg.bind(this);this.Zc=this.Fe=this.$c=null;this.od="ontouchstart"in a||void 0!==a.navigator.maxTouchPoints&&0=this.sf&&zd(this.win.document,"mousemove",this.$c)};function Uj(a){this.U=a.navigator}f=Uj.prototype;f.isAndroid=function(){return/Android/i.test(this.U.userAgent)};f.isIos=function(){return/iPhone|iPad|iPod/i.test(this.U.userAgent)};f.isSafari=function(){return/Safari/i.test(this.U.userAgent)&&!this.isChrome()&&!this.isIe()&&!this.isEdge()&&!this.isFirefox()&&!this.isOpera()};f.isChrome=function(){return/Chrome|CriOS/i.test(this.U.userAgent)&&!this.isEdge()&&!this.isOpera()};f.isFirefox=function(){return/Firefox|FxiOS/i.test(this.U.userAgent)&&!this.isEdge()}; +f.isOpera=function(){return/OPR\/|Opera|OPiOS/i.test(this.U.userAgent)};f.isIe=function(){return/Trident|MSIE|IEMobile/i.test(this.U.userAgent)};f.isEdge=function(){return/Edge/i.test(this.U.userAgent)};f.isWebKit=function(){return/WebKit/i.test(this.U.userAgent)&&!this.isEdge()};f.isStandalone=function(){return this.isIos()&&this.U.standalone};f.isBot=function(){return/bot/i.test(this.U.userAgent)}; +f.getMajorVersion=function(){return this.isSafari()?this.isIos()?this.getIosMajorVersion()||0:Vj(this,/\sVersion\/(\d+)/,1):this.isChrome()?Vj(this,/(Chrome|CriOS)\/(\d+)/,2):this.isFirefox()?Vj(this,/(Firefox|FxiOS)\/(\d+)/,2):this.isOpera()?Vj(this,/(OPR|Opera|OPiOS)\/(\d+)/,2):this.isIe()?Vj(this,/MSIE\s(\d+)/,1):this.isEdge()?Vj(this,/Edge\/(\d+)/,1):0};function Vj(a,b,c){if(!a.U.userAgent)return 0;a=a.U.userAgent.match(b);return!a||c>=a.length?0:parseInt(a[c],10)} +f.getIosVersionString=function(){if(!this.U.userAgent||!this.isIos())return"";var a=this.U.userAgent.match(/OS ([0-9]+[_.][0-9]+([_.][0-9]+)?)\b/);return a?a=a[1].replace(/_/g,"."):""};f.getIosMajorVersion=function(){var a=this.getIosVersionString();return""==a?null:Number(a.split(".")[0])};function Wj(a){this.F=a;this.Pf=Object.create(null)}Wj.prototype.addTransition=function(a,b,c){var d=a+"|"+b;this.Pf[d]=c};Wj.prototype.setState=function(a){var b=this.F;this.F=a;(a=this.Pf[b+"|"+a])&&a()};function Xj(a,b){var c=this;this.win=a;this.$g=b;this.N=[];this.uf=new Y;this.Pe=function(a){a.target&&1==a.target.nodeType&&Yj(c,a.target)};this.Oe=function(){R(a).delay(function(){Yj(c,c.win.document.activeElement)},500)};this.win.document.addEventListener("focus",this.Pe,!0);this.win.addEventListener("blur",this.Oe)}f=Xj.prototype;f.Ch=function(){this.win.document.removeEventListener("focus",this.Pe,!0);this.win.removeEventListener("blur",this.Oe)};f.onFocus=function(a){return this.uf.add(a)}; +function Yj(a,b){var c=Date.now();0==a.N.length||a.N[a.N.length-1].el!=b?a.N.push({el:b,time:c}):a.N[a.N.length-1].time=c;a.purgeBefore(c-a.$g);a.uf.fire(b)}f.getLast=function(){return 0==this.N.length?null:this.N[this.N.length-1].el};f.purgeBefore=function(a){for(var b=this.N.length-1,c=0;c=a){b=c-1;break}-1!=b&&this.N.splice(0,b+1)}; +f.hasDescendantsOf=function(a){this.win.document.activeElement&&Yj(this,this.win.document.activeElement);for(var b=0;bc)a.clearInterval(e),b(),h||E().error("ie-media-bug","IE media never resolved")},10)})}function bk(a){var b="(min-width: "+(a.innerWidth-1)+"px)"+(" AND (max-width: "+(a.innerWidth+1)+"px)");try{return a.matchMedia(b).matches}catch(c){return E().error("ie-media-bug","IE matchMedia failed: ",c),!0}};function ck(a){var b=this;this.ampdoc=a;this.win=a.win;this.h=T(a);this.na=this.h.isRuntimeOn();this.Dg=!1;this.pf=this.win.devicePixelRatio||1;this.hh=0;this.o=[];this.jg=this.we=0;this.la=this.h.isVisible();this.Fa=this.h.getPrerenderSize();this.rb=!1;this.Ye=!0;this.xe=!1;this.Da=-1;this.kb=!0;this.Mb=-1;this.Kd=this.lc=0;this.yc=new og(this.win,function(){return b.doPass()});this.Ff=new og(this.win,function(){b.kb=!0;b.schedulePass()});this.ua=new Zj;this.C=new Zj;this.H=L(this.win,"layers"); +var c;this.Ge=c=this.H?this.lg.bind(this):this.mg.bind(this);this.ia=[];this.wa=[];this.zd=!1;this.G=ud(this.ampdoc);this.w=td(this.win);this.ue=new Xj(this.win,6E4);this.te=!1;this.Zb=0;this.fb=!1;this.Yf=new Wj(this.h.getVisibilityState());dk(this,this.Yf);this.G.onChanged(function(a){b.lc=Date.now();b.Kd=a.velocity;a.relayoutAll&&(b.kb=!0,b.fb=!0);b.schedulePass()});this.G.onScroll(function(){b.lc=Date.now()});this.H&&(this.cb=a=oc(this.ampdoc,"layers"),a.onScroll(function(){b.schedulePass()}), +this.dg=this.kg.bind(this));this.h.onVisibilityChanged(function(){-1==b.Da&&b.h.isVisible()&&(b.Da=Date.now());b.schedulePass()});this.h.onRuntimeState(function(a){b.na=a;b.schedulePass(1)});this.ue.onFocus(function(a){ek(b,a)});this.schedulePass();this.rebuildDomWhenReady()}f=ck.prototype; +f.rebuildDomWhenReady=function(){var a=this;this.ampdoc.whenReady().then(function(){function b(){return a.Ff.schedule()}a.rb=!0;fk(a);a.wa=null;var c=ak(a.win);c?c.then(b):b();gk(a);Promise.race([Pd(a.win),R(a.win).promise(3100)]).then(b);a.win.document.fonts&&"loaded"!=a.win.document.fonts.status&&a.win.document.fonts.ready.then(b)})};f.get=function(){return this.o.slice(0)};f.isRuntimeOn=function(){return this.na};f.renderStarted=function(){this.ampdoc.signals().signal("render-start")}; +f.getMeasuredResources=function(a,b){var c=this;return this.ampdoc.signals().whenSignal("ready-scan").then(function(){var b=[];c.o.forEach(function(d){d.hasBeenMeasured()||d.hostWin!=a||d.hasOwner()||b.push(hk(c,d))});return Promise.all(b)}).then(function(){return c.o.filter(function(c){return c.hostWin==a&&!c.hasOwner()&&c.hasBeenMeasured()&&b(c)})})}; +f.getResourcesInRect=function(a,b,c){return this.getMeasuredResources(a,function(a){return!a.isDisplayed()||!a.overlaps(b)&&!a.isFixed()||c&&!a.prerenderAllowed()?!1:!0})};function gk(a){var b=Q(a.win,"input");b.onTouchDetected(function(b){ik(a,"amp-mode-touch",b)},!0);b.onMouseDetected(function(b){ik(a,"amp-mode-mouse",b)},!0);b.onKeyboardStateChanged(function(b){ik(a,"amp-mode-keyboard-active",b)},!0)} +function ik(a,b,c){a.ampdoc.whenBodyAvailable().then(function(d){a.w.mutate(function(){d.classList.toggle(b,c)})})}f.getMaxDpr=function(){return this.pf};f.getDpr=function(){return this.pf};f.getResourceForElement=function(a){return Z(a)};f.getResourceForElementOptional=function(a){return Z(a)};f.getElementLayoutBox=function(a){var b=this,c=this.getResourceForElementOptional(a);return c?hk(this,c):this.w.measurePromise(function(){return b.getViewport().getLayoutRect(a)})}; +function hk(a,b){return b.hasBeenMeasured()?cc(function(){return b.getPageLayoutBox()}):a.w.measurePromise(function(){b.measure();return b.getPageLayoutBox()})}f.getViewport=function(){return this.G};f.getScrollDirection=function(){return Math.sign(this.Kd)||1};f.add=function(a){this.we++;1==this.we&&this.G.ensureReadyForElements();var b=Z(a);b&&0!=b.getState()&&!a.reconstructWhenReparented()?b.requestMeasure():b=new Rh(++this.hh,a,this);this.o.push(b);this.Ff.schedule(1E3)}; +f.grantBuildPermission=function(){return 20>this.jg++||this.h.hasBeenVisible()};function jk(a,b,c){var d;c=void 0===c?!1:c;d=void 0===d?!0:d;var e=a.na||a.Dg,g="prerender"!=a.h.getVisibilityState()||b.prerenderAllowed();e&&g&&(a.rb?kk(a,b,d):b.isBuilt()||b.isBuilding()||c&&a.wa.includes(b)||(a.wa.push(b),fk(a,d)))} +function fk(a,b){if(!a.zd)try{a.zd=!0;b=void 0===b?!0:b;b=void 0===b?!0:b;for(var c=0;cMath.abs(a.Kd)&&500=c.bottom-e||0==y&&t.bottom+Math.min(J,0)>=c.bottom-e)S=!0;else if(1J&&c.top+n<-J)continue;g?(n+=J,l.push(m)):a.ia.push(m);continue}else yk(a,q,t)?S=!0:0>J||0>y||0>v||m.resource.overflowCallback(!0,m.newHeight,m.newWidth,u);S&&(0<=t.top&&(k=-1==k?t.top: +Math.min(k,t.top)),m.resource.changeSize(m.newHeight,m.newWidth,u),m.resource.overflowCallback(!1,m.newHeight,m.newWidth,u),a.fb=!0);m.callback&&m.callback(S)}-1!=k&&wk(a,k);0=a||h.bottom>=a}function wk(a,b){a.H?a.kb=!0:a.Mb=-1==a.Mb?b:Math.min(b,a.Mb)} +function ek(a,b){var c=Tc(b,function(a){return!!Z(a)});if(c){b=Z(c);var d=b.getPendingChangeSize();void 0!==d&&tk(a,b,d.height,d.width,d.margins,!0)}} +function zk(a){var b=Date.now(),c=a.kb;a.kb=!1;var d=a.Mb;a.Mb=-1;for(var e=0,g=0,h=0;h=d){var n=k.isDisplayed();k.measure(); +n&&!k.isDisplayed()&&(l||(l=[]),l.push(k))}l&&a.w.mutate(function(){l.forEach(function(b){b.unload();mk(a,b)})});var d=a.G.getRect(),m;m=a.la?Ge(d,.25,2):0a.ua.getLastDequeueTime()+ +5E3){for(var y=0,b=0;by;b++)d=a.o[b],2==d.getState()&&!d.hasOwner()&&d.isDisplayed()&&d.idleRenderOutsideViewport()&&(ok(a,d,!1),y++);for(b=0;by;b++)d=a.o[b],2==d.getState()&&!d.hasOwner()&&d.isDisplayed()&&(ok(a,d,!1),y++)}}f.mg=function(a){var b=this.G.getRect(),c=a.resource.getLayoutBox(),d=Math.floor((c.top-b.top)/b.height);Math.sign(d)!=this.getScrollDirection()&&(d*=2);d=Math.abs(d);return 10*a.priority+d}; +f.lg=function(a,b){var c=this.cb.iterateAncestry(a.resource.element,this.dg,b);return 10*a.priority+c};f.kg=function(a,b,c,d){var e=b.getId();if(Ea.call(d,e))return d[e];a=a||0;c=1+c/10;var g=b.isActiveUnsafe()?1:2;b=b.getHorizontalDistanceFromParent()+b.getVerticalDistanceFromParent();return d[e]=a+g*c*b}; +function Ak(a,b){var c=Date.now();if(0==a.ua.getSize()){if(-1===a.Da)return 0;var d=1E3*b.priority;return Math.max(d-(c-a.Da),0)}var e=0;a.ua.forEach(function(a){e=Math.max(e,Math.max(1E3*(b.priority-a.priority),0)-(c-a.startTime))});return e}f.eh=function(a){this.C.getTaskById(a.id)||this.C.enqueue(a)};f.Lf=function(a,b,c){this.ua.dequeue(a);this.schedulePass(1E3);if(!b)return E().info("Resources","task failed:",a.id,a.resource.debugid,c),Promise.reject(c)}; +function tk(a,b,c,d,e,g,h){b.hasBeenMeasured()&&!e?Bk(a,b,c,d,void 0,g,h):a.w.measure(function(){b.hasBeenMeasured()||b.measure();var k;e?(k=he(a.win,b.element),k={newMargins:e,currentMargins:{top:parseInt(k.marginTop,10)||0,right:parseInt(k.marginRight,10)||0,bottom:parseInt(k.marginBottom,10)||0,left:parseInt(k.marginLeft,10)||0}}):k=void 0;var l=k;Bk(a,b,c,d,l,g,h)})} +function Bk(a,b,c,d,e,g,h){b.resetPendingChangeSize();var k=b.getPageLayoutBox();if(!(k=void 0!==c&&c!=k.height||void 0!==d&&d!=k.width)&&(k=void 0!==e))var k=e.currentMargins,l=e.newMargins,k=void 0!==l.top&&l.top!=k.top||void 0!==l.right&&l.right!=k.right||void 0!==l.bottom&&l.bottom!=k.bottom||void 0!==l.left&&l.left!=k.left;if(k){k=null;for(l=0;lthis.Og){var c=Infinity,d=null;for(a=0;a=c)return 0;if(1<=c)return 1;for(var d=0,e=1,g=0,h=0;8>h;h++){var g=this.getPointX(c),k=(this.getPointX(c+b)-g)/b;if(Math.abs(g-a)b&&8>h;h++)gc;c++)if(isNaN(b[c]))return null;return Sk(b[0],b[1],b[2],b[3])}return null}return Yk[a]}return a};function $k(){}function al(a,b){this.pb=a;this.w=b||td(self);this.Re=null;this.Y=[]}function bl(a,b,c,d){return(new al(a)).setCurve(d).add(0,b,1).start(c)}al.prototype.setCurve=function(a){a&&(this.Re=Zk(a));return this};al.prototype.add=function(a,b,c,d){this.Y.push({delay:a,func:b,duration:c,curve:Zk(d)});return this};al.prototype.start=function(a){var b=new cl(this.w,this.pb,this.Y,this.Re,a);return b}; +function cl(a,b,c,d,e){this.w=a;this.pb=b;this.Y=[];for(b=0;b=d.delay&&(d.started=!0)}for(c=0;cq&&(!!n&&0==parseInt(n,10)||!!A&&0==parseInt(A,10)));J&&(b=!0);c[k.id]={fixed:B,sticky:x,transferrable:J,top:n,zIndex:D, +transform:y}}else c[k.id]={fixed:!1,sticky:!1,transferrable:!1,top:"",zIndex:""}}},mutate:function(c){b&&a.Ga&&il(a).update();for(var d=a.W,e=0;e\n
\n \n
\n '];zl.raw=['\n
\n
\n \n
\n
'];var Al="align-content align-items align-self alignment-baseline backface-visibility box-sizing column-count column-fill column-gap column-rule column-span column-width columns display flex flex-basis flex-direction flex-flow flex-grow flex-shrink flex-wrap gap grid grid-area grid-auto-columns grid-auto-flow grid-auto-rows grid-column grid-gap grid-row grid-template justify-content justify-items justify-self margin order padding perspective perspective-origin place-content place-items place-self table-layout".split(" "); +function Bl(a){var b=this;this.win=a;this.w=td(a);a=this.win.document;a.documentElement.classList.add("i-amphtml-ios-embed-sd");var c=Ne(a)(zl);this.S=c;this.M=c.firstElementChild;de(this.S,{"overflow-x":"hidden","overflow-y":"auto",position:"absolute",top:"0",left:"0",right:"0",bottom:"0",margin:"0",width:"100%","box-sizing":"border-box",display:"block","padding-top":"0px","border-top":"1px solid transparent"});de(this.M,{overflow:"visible",position:"relative"});this.ka=new Y;this.ja=new Y;this.Ca= +this.Eb.bind(this);this.Ba=this.Vg.bind(this);this.H=L(this.win,"layers");this.K=0;this.Qb=this.Xc=!1;Oc(a,this.Rb.bind(this));lf(a).then(function(){b.S.classList.add("i-amphtml-ios-overscroll");de(b.S,{"-webkit-overflow-scrolling":"touch"})})}f=Bl.prototype;f.ensureReadyForElements=function(){this.Rb()}; +f.Rb=function(){if(!this.Qb){this.Qb=!0;var a=this.win.document.body;a.attachShadow({mode:"open"}).appendChild(this.S);this.oe();if(this.win.MutationObserver){var b=new this.win.MutationObserver(this.oe.bind(this));b.observe(a,{attributes:!0})}this.Eb()}};f.oe=function(){var a=this;if(!this.Xc){var b=this.win.document.body;if(b){var c={};this.Xc=!0;this.w.run({measure:function(){var d=he(a.win,b);Al.forEach(function(a){c[a]=d[a]||""})},mutate:function(){a.Xc=!1;de(a.M,c)}})}}}; +f.Vg=function(){this.ja.fire();this.oe()};f.connect=function(){this.win.addEventListener("resize",this.Ba);this.S.addEventListener("scroll",this.Ca)};f.disconnect=function(){this.win.removeEventListener("resize",this.Ba);this.S.removeEventListener("scroll",this.Ca)};f.getBorderTop=function(){return 1};f.requiresFixedLayerTransfer=function(){return!0};f.supportsPositionFixed=function(){return!0};f.onScroll=function(a){this.ka.add(a)};f.onResize=function(a){this.ja.add(a)}; +f.updatePaddingTop=function(a){this.K=a;de(this.S,{"padding-top":a+"px"})};f.hideViewerHeader=function(a){a||this.updatePaddingTop(0)};f.showViewerHeader=function(a,b){a||this.updatePaddingTop(b)};f.disableScroll=function(){de(this.S,{"overflow-y":"hidden"})};f.resetScroll=function(){de(this.S,{"overflow-y":"auto"})};f.updateLightboxMode=function(){return Promise.resolve()};f.getSize=function(){return{width:this.win.innerWidth,height:this.win.innerHeight}};f.getScrollTop=function(){return this.S.scrollTop}; +f.getScrollLeft=function(){return 0};f.getScrollWidth=function(){return this.S.scrollWidth};f.getScrollHeight=function(){return this.S.scrollHeight};f.getContentHeight=function(){return this.M.scrollHeight+this.K+this.getBorderTop()};f.getLayoutRect=function(a,b,c){a=a.getBoundingClientRect();if(this.H)return W(a.left,a.top,a.width,a.height);c=void 0!=c?c:this.getScrollTop();b=void 0!=b?b:this.getScrollLeft();return W(Math.round(a.left+b),Math.round(a.top+c),Math.round(a.width),Math.round(a.height))}; +f.getRootClientRectAsync=function(){return Promise.resolve(null)};f.setScrollTop=function(a){this.S.scrollTop=a||1};f.Eb=function(a){0==this.S.scrollTop&&(this.S.scrollTop=1,a&&a.preventDefault());a&&this.ka.fire()};f.getScrollingElement=function(){return this.S};function Cl(a){var b=this;this.win=a;a=this.win.document;var c=a.documentElement,d=c.className;c.className="i-amphtml-ios-embed";var e=a.createElement("html");this.M=e;e.id="i-amphtml-wrapper";e.className=d;this.ka=new Y;this.ja=new Y;this.Ca=this.Eb.bind(this);this.Ba=function(){return b.ja.fire()};this.H=L(this.win,"layers");this.Qb=!1;Oc(a,this.Rb.bind(this));lf(a).then(function(){c.classList.add("i-amphtml-ios-overscroll")})}f=Cl.prototype;f.ensureReadyForElements=function(){this.Rb()}; +f.Rb=function(){if(!this.Qb){this.Qb=!0;var a=this.win.document,b=a.body;a.documentElement.appendChild(this.M);this.M.appendChild(b);Object.defineProperty(a,"body",{get:function(){return b}});this.Eb()}};f.connect=function(){this.win.addEventListener("resize",this.Ba);this.M.addEventListener("scroll",this.Ca)};f.disconnect=function(){this.win.removeEventListener("resize",this.Ba);this.M.removeEventListener("scroll",this.Ca)};f.getBorderTop=function(){return 1};f.requiresFixedLayerTransfer=function(){return!0}; +f.supportsPositionFixed=function(){return!0};f.onScroll=function(a){this.ka.add(a)};f.onResize=function(a){this.ja.add(a)};f.updatePaddingTop=function(a){de(this.M,{"padding-top":a+"px"})};f.hideViewerHeader=function(a){a||this.updatePaddingTop(0)};f.showViewerHeader=function(a,b){a||this.updatePaddingTop(b)};f.disableScroll=function(){this.M.classList.add("i-amphtml-scroll-disabled")};f.resetScroll=function(){this.M.classList.remove("i-amphtml-scroll-disabled")};f.updateLightboxMode=function(){return Promise.resolve()}; +f.getSize=function(){return{width:this.win.innerWidth,height:this.win.innerHeight}};f.getScrollTop=function(){return this.M.scrollTop};f.getScrollLeft=function(){return 0};f.getScrollWidth=function(){return this.M.scrollWidth};f.getScrollHeight=function(){return this.M.scrollHeight};f.getContentHeight=function(){var a=this.win.document.body.getBoundingClientRect();return a.height+a.top+this.getScrollTop()}; +f.getLayoutRect=function(a,b,c){a=a.getBoundingClientRect();if(this.H)return W(a.left,a.top,a.width,a.height);c=void 0!=c?c:this.getScrollTop();b=void 0!=b?b:this.getScrollLeft();return W(Math.round(a.left+b),Math.round(a.top+c),Math.round(a.width),Math.round(a.height))};f.getRootClientRectAsync=function(){return Promise.resolve(null)};f.setScrollTop=function(a){this.M.scrollTop=a||1};f.Eb=function(a){0==this.M.scrollTop&&(this.M.scrollTop=1,a&&a.preventDefault());a&&this.ka.fire()}; +f.getScrollingElement=function(){return this.M};function Dl(a,b,c){var d=this;this.ampdoc=a;this.La=this.ampdoc.win.document;this.j=b;this.h=c;this.ra=this.T=this.Lb=null;this.fe=!1;this.Qa=null;this.K=Number(c.getParam("paddingTop")||0);this.kc=0;this.R=R(this.ampdoc.win);this.w=td(this.ampdoc.win);this.ge=!1;this.Jf=0;this.Qe=new Y;this.ka=new Y;this.ja=new Y;this.Zd=this.Ub=void 0;(this.H=L(this.ampdoc.win,"layers"))&&xl(this.ampdoc,this.j.getScrollingElement());this.ea=new dl(this.ampdoc,this.w,this.j.getBorderTop(),this.K,this.j.requiresFixedLayerTransfer()); +this.ampdoc.whenReady().then(function(){return d.ea.setup()});this.h.onMessage("viewport",this.vh.bind(this));this.h.onMessage("scroll",this.yh.bind(this));this.h.onMessage("disableScroll",this.sg.bind(this));this.j.updatePaddingTop(this.K);this.j.onScroll(this.jh.bind(this));this.j.onResize(this.Hf.bind(this));this.onScroll(this.lh.bind(this));this.la=!1;this.h.onVisibilityChanged(this.Sf.bind(this));this.Sf();this.ampdoc.isSingleDoc()&&this.La.documentElement.classList.add("i-amphtml-singledoc"); +c.isEmbedded()?this.La.documentElement.classList.add("i-amphtml-embedded"):this.La.documentElement.classList.add("i-amphtml-standalone");fd(this.ampdoc.win)&&this.La.documentElement.classList.add("i-amphtml-iframed");"1"===c.getParam("webview")&&this.La.documentElement.classList.add("i-amphtml-webview");fd(this.ampdoc.win)&&"scrollRestoration"in this.ampdoc.win.history&&(this.ampdoc.win.history.scrollRestoration="manual")}f=Dl.prototype;f.dispose=function(){this.j.disconnect()}; +f.ensureReadyForElements=function(){this.j.ensureReadyForElements()};f.Sf=function(){var a=this.h.isVisible();a!=this.la&&((this.la=a)?(this.j.connect(),this.T&&this.Hf()):this.j.disconnect())};f.getPaddingTop=function(){return this.K};f.getTop=function(){return this.getScrollTop()};f.getScrollTop=function(){null==this.ra&&(this.ra=this.j.getScrollTop());return this.ra};f.getScrollLeft=function(){null==this.Qa&&(this.Qa=this.j.getScrollLeft());return this.Qa}; +f.setScrollTop=function(a){this.ra=null;this.j.setScrollTop(a)};f.updatePaddingBottom=function(a){this.ampdoc.whenBodyAvailable().then(function(b){U(b,"borderBottom",a+"px solid transparent")})};f.getSize=function(){if(this.T)return this.T;this.T=this.j.getSize();if(0==this.T.width||0==this.T.height){var a=this.h.getVisibilityState();("prerender"==a||"visible"==a)&&.01>Math.random()&&E().error("Viewport","viewport has zero dimensions")}return this.T};f.getHeight=function(){return this.getSize().height}; +f.getWidth=function(){return this.getSize().width};f.getScrollWidth=function(){return this.j.getScrollWidth()};f.getScrollHeight=function(){return this.j.getScrollHeight()};f.getContentHeight=function(){return this.j.getContentHeight()};f.getRect=function(){if(null==this.Lb){var a=0,b=0;this.H||(a=this.getScrollTop(),b=this.getScrollLeft());var c=this.getSize();this.Lb=W(b,a,c.width,c.height)}return this.Lb}; +f.getLayoutRect=function(a){var b=this.getScrollLeft(),c=this.getScrollTop(),d=Ic(a,this.ampdoc.win);return d?(a=this.j.getLayoutRect(a,0,0),b=this.j.getLayoutRect(d,b,c),W(Math.round(a.left+b.left),Math.round(a.top+b.top),Math.round(a.width),Math.round(a.height))):this.j.getLayoutRect(a,b,c)}; +f.getClientRectAsync=function(a){var b=this;if(this.H)return this.w.measurePromise(function(){return b.getLayoutRect(a)});var c=this.w.measurePromise(function(){return a.getBoundingClientRect()}),d=this.j.getRootClientRectAsync(),e=Ic(a,this.ampdoc.win);e&&(d=this.w.measurePromise(function(){return e.getBoundingClientRect()}));return Promise.all([c,d]).then(function(a){var b=a[0];return(a=a[1])?He(b,a.left,a.top):W(Number(b.left),Number(b.top),Number(b.width),Number(b.height))})}; +f.supportsPositionFixed=function(){return this.j.supportsPositionFixed()};f.isDeclaredFixed=function(a){return this.ea.isDeclaredFixed(a)};f.scrollIntoView=function(a){var b=this;return El(this,a).then(function(c){return Fl(b,a,c)})};function Fl(a,b,c){var d=a.j.getLayoutRect(b).top,e=a.H?Gl(a,c).then(function(a){return d+a}):cc(function(){return Math.max(0,d-a.K)});e.then(function(b){return Hl(a,c,b)})} +f.animateScrollIntoView=function(a,b,c,d){b=void 0===b?500:b;c=void 0===c?"ease-in":c;d=void 0===d?"top":d;var e=this;return El(this,a).then(function(g){return Il(e,a,g,b,c,d)})}; +function Il(a,b,c,d,e,g){b=a.j.getLayoutRect(b);var h=(c==a.j.getScrollingElement()?a.getSize():a.getLayoutRect(c)).height;switch(g){case "bottom":g=-h+b.height;break;case "center":g=-h/2+b.height/2;break;default:g=0}var k,l;if(a.H)k=b.top+g,l=Promise.resolve(0);else{var n=b.top-a.K+g;k=Math.max(0,n);l=Gl(a,c)}return l.then(function(b){if(k!=b)return Jl(a,c,b,k,d,e)})}function Jl(a,b,c,d,e,g){var h=yl(c,d);return bl(b,function(c){Hl(a,b,h(c))},e,g).thenAlways(function(){Hl(a,b,d)})} +function El(a,b){return a.w.measurePromise(function(){return Wc(b)||a.j.getScrollingElement()})}function Hl(a,b,c){b==a.j.getScrollingElement()?a.j.setScrollTop(c):a.w.mutate(function(){b.scrollTop=c})}function Gl(a,b){return b==a.j.getScrollingElement()?cc(function(){return a.getScrollTop()}):a.w.measurePromise(function(){return b.scrollTop})}f.onChanged=function(a){return this.Qe.add(a)};f.onScroll=function(a){return this.ka.add(a)};f.onResize=function(a){return this.ja.add(a)}; +f.enterLightboxMode=function(a){this.h.sendMessage("requestFullOverlay",{},!0);this.enterOverlayMode();this.hideFixedLayer();a&&this.maybeEnterFieLightboxMode(a);return this.j.updateLightboxMode(!0)};f.leaveLightboxMode=function(a){this.h.sendMessage("cancelFullOverlay",{},!0);this.showFixedLayer();this.leaveOverlayMode();a&&this.maybeLeaveFieLightboxMode(a);return this.j.updateLightboxMode(!1)};f.isLightboxExperimentOn=function(){return L(this.ampdoc.win,"amp-lightbox-a4a-proto")}; +f.maybeEnterFieLightboxMode=function(a){var b=Kl(this,a);b&&(this.isLightboxExperimentOn(),b.enterFullOverlayMode())};f.maybeLeaveFieLightboxMode=function(a){(a=Kl(this,a))&&a.leaveFullOverlayMode()};function Kl(a,b){var c=Ic(b,a.ampdoc.win);return c&&c.__AMP_EMBED__}f.enterOverlayMode=function(){this.disableTouchZoom();this.disableScroll()};f.leaveOverlayMode=function(){this.resetScroll();this.restoreOriginalTouchZoom()};f.disableScroll=function(){var a=this;this.w.mutate(function(){a.j.disableScroll()})}; +f.resetScroll=function(){var a=this;this.w.mutate(function(){a.j.resetScroll()})};f.resetTouchZoom=function(){var a=this,b=this.ampdoc.win.innerHeight,c=this.La.documentElement.clientHeight;b&&c&&b===c||this.disableTouchZoom()&&this.R.delay(function(){a.restoreOriginalTouchZoom()},50)}; +f.disableTouchZoom=function(){var a=Ll(this);if(!a)return!1;var b=a.content,c={"maximum-scale":"1","user-scalable":"no"};var d=Object.create(null);if(b)for(var e=b.split(/,|;/),g=0;g=b)return Promise.resolve();var e=yl(a.kc-a.K,0);return bl(a.ampdoc.getRootNode(),function(b){b=e(b);a.ea.transformMutate("translateY("+b+"px)")},b,c).thenAlways(function(){a.ea.transformMutate(null)})}function Ol(a,b,c){var d=a.getSize(),e=a.getScrollTop(),g=a.getScrollLeft();a.Qe.fire({relayoutAll:b,top:e,left:g,width:d.width,height:d.height,velocity:c})} +f.jh=function(){var a=this;this.Lb=null;this.Jf++;this.Qa=this.j.getScrollLeft();var b=this.j.getScrollTop();if(!(0>b)){this.ra=b;if(!this.ge){this.ge=!0;var c=Date.now();this.R.delay(function(){a.w.measure(function(){a.Of(c,b)})},36)}this.ka.fire()}};f.Of=function(a,b){var c=this,d=this.ra=this.j.getScrollTop(),e=Date.now(),g=0;e!=a&&(g=(d-b)/(e-a));.03>Math.abs(g)?(Ol(this,!1,g),this.ge=!1):this.R.delay(function(){return c.w.measure(c.Of.bind(c,e,d))},20)}; +f.lh=function(){var a=this;this.fe||(this.fe=!0,this.w.measure(function(){a.fe=!1;a.h.sendMessage("scroll",H({scrollTop:a.getScrollTop()}),!0)}))};f.Hf=function(){var a=this;this.Lb=null;var b=this.T;this.T=null;var c=this.getSize();this.ea.update().then(function(){var d=!b||b.width!=c.width;Ol(a,d,0);var e=d||b.height!=c.height;e&&a.ja.fire({relayoutAll:d,width:c.width,height:c.height})})}; +function Pl(a){var b=T(a),c;if(c=a.isSingleDoc()){c=a.win;var d=b.getParam("viewportType")||Ql;rd(c).isIos()&&d==Ql?!fd(c)&&r(c).development?c=Rl:(fd(c),c=fd(c)&&b.isEmbedded()?Rl:d):c=d;c=c==Rl}c=c?L(a.win,"ios-embed-sd")&&a.win.Element.prototype.attachShadow&&11<=rd(a.win).getMajorVersion()?new Bl(a.win):new Cl(a.win):new ll(a);return new Dl(a,c,b)}var Ql="natural",Rl="natural-ios-embed";function Sl(a){var b=this;this.win=a;this.Ja=nd(this.win);this.qb=Q(this.win,"documentState");this.bh=Tl(this);this.I=[];this.Vd=[];this.le=[];this.Ud=[];this.qa=!1;this.Td=this.tc=null;this.bd=this.ih.bind(this);this.Bg=new og(this.win,this.bd,16);this.Ae=new og(this.win,this.bd,40);this.ie=null;var c=this.Yd.bind(this);if(this.Ja.isSingleDoc())pc(this.Ja.getAmpDoc(),"viewer").then(function(a){b.ie=a;a.onVisibilityChanged(c)});else this.qb.onVisibilityChanged(c);this.gf=new jg(this.win)}f=Sl.prototype; +f.Yd=function(){this.qa&&Ul(this)};f.run=function(a,b){this.I.push(a);this.le.push(b||void 0);this.Pa()};f.runPromise=function(a,b){this.run(a,b);if(this.tc)return this.tc;a=new N;this.Td=a.resolve;return this.tc=a.promise};f.createTask=function(a){var b=this;return function(c){b.run(a,c)}};f.mutate=function(a){this.run({measure:void 0,mutate:a})};f.mutatePromise=function(a){return this.runPromise({measure:void 0,mutate:a})};f.measure=function(a){this.run({measure:a,mutate:void 0})}; +f.measurePromise=function(a){var b=this;return new Promise(function(c){b.measure(function(){c(a())})})};f.canAnimate=function(a){return Vl(this,a)};function Vl(a,b){return a.qb.isHidden()?!1:a.ie?a.ie.isVisible():b?(a=a.Ja.getAmpDoc(b),T(a).isVisible()):!0}f.runAnim=function(a,b,c){if(!Vl(this,a))return E().warn("VSYNC","Did not schedule a vsync request, because document was invisible"),!1;this.run(b,c);return!0};f.createAnimTask=function(a,b){var c=this;return function(d){return c.runAnim(a,b,d)}}; +f.runAnimMutateSeries=function(a,b,c){var d=this;return Vl(this,a)?new Promise(function(e,g){var h=Date.now(),k=0,l=d.createAnimTask(a,{mutate:function(a){var d=Date.now()-h;b(d,d-k,a)?c&&d>c?g(Error("timeout")):(k=d,l(a)):e()}});l({})}):Promise.reject(Error("CANCELLED"))};f.Pa=function(){this.qa||(this.qa=!0,this.gf.onScheduled(),Ul(this))};function Ul(a){Vl(a)?(a.bh(a.bd),a.Ae.schedule()):a.Bg.schedule()} +f.ih=function(){this.Ae.cancel();this.qa=!1;this.gf.onRun();var a=this.I,b=this.le,c=this.Td;this.tc=this.Td=null;this.I=this.Vd;this.le=this.Ud;for(var d=0;d element.")), +this.propagateAttributes(Yl,this.O),Xl(this.O),this.applyFillContent(this.O,!0),this.element.appendChild(this.O))};f.prerenderAllowed=function(){return this.ff};f.reconstructWhenReparented=function(){return!1};f.layoutCallback=function(){var a=this;this.ec();var b=this.O;this.Mc=yd(b,"load",function(){return $l(a)});this.Lc=yd(b,"error",function(){return am(a)});return 0>=this.getLayoutWidth()?Promise.resolve():this.loadPromise(b)}; +f.unlayoutCallback=function(){this.Lc&&(this.Lc(),this.Lc=null);this.Mc&&(this.Mc(),this.Mc=null);return!0};function $l(a){!a.Wb&&a.O.classList.contains("i-amphtml-ghost")&&a.getVsync().mutate(function(){a.O.classList.remove("i-amphtml-ghost");a.toggleFallback(!1)})}function am(a){a.Wb&&(a.getVsync().mutate(function(){a.O.classList.add("i-amphtml-ghost");a.toggleFallback(!0);a.togglePlaceholder(!1)}),a.Wb=!1)};function bm(a){Kh.apply(this,arguments)}aa(bm,Kh);bm.prototype.isLayoutSupported=function(a){return Ue(a)};bm.prototype.buildCallback=function(){var a=this.win.document.createElement("div");this.applyFillContent(a);this.getRealChildNodes().forEach(function(b){a.appendChild(b)});this.element.appendChild(a)};function cm(a){Kh.call(this,a);this.me=null}aa(cm,Kh);cm.prototype.isLayoutSupported=function(){return!0}; +cm.prototype.buildCallback=function(){this.element.setAttribute("aria-hidden","true");(this.Bc=this.element.getAttribute("referrerpolicy"))&&C().assert("no-referrer"==this.Bc,'amp-pixel: invalid "referrerpolicy" value "'+this.Bc+'". Only "no-referrer" is supported');this.element.hasAttribute("i-amphtml-ssr")&&this.element.querySelector("img")?E().info("amp-pixel","inabox img already present"):T(this.getAmpDoc()).whenFirstVisible().then(this.sh.bind(this))}; +cm.prototype.sh=function(){var a=this;if(this.me)return E().error("amp-pixel","duplicate pixel"),this.me;this.me=R(this.win).promise(1).then(function(){var b=a.element.getAttribute("src");if(b)return dc(a.element,"url-replace",!0).expandUrlAsync(dm(b)).then(function(b){var c=a.win,e=a.Bc;e&&"no-referrer"!==e&&C().error("pixel","Unsupported referrerPolicy: "+e);if("no-referrer"===e)if("referrerPolicy"in Image.prototype)c=ng(c,b,!0);else{var g=c.document,e=H({src:"about:blank",style:"display:none"}), +g=g.createElement("iframe"),h;for(h in e)g.setAttribute(h,e[h]);c.document.body.appendChild(g);ng(g.contentWindow,b);c=g}else c=ng(c,b);var k=c;E().info("amp-pixel","pixel triggered: ",b);return k})})};function dm(a){C().assert(/^(https\:\/\/|\/\/)/i.test(a),'The src attribute must start with "https://" or "//". Invalid value: '+a);return a};var em=["amp-ad","amp-embed","amp-video"],fm=["amp-mustache"];function gm(a){this.win=a;this.Ja=nd(a);this.$b={};this.Za=null}f=gm.prototype;f.registerExtension=function(a,b,c){var d=hm(this,a,!0);try{this.Za=a,b(c,c._),d.loaded=!0,d.resolve&&d.resolve(d.extension)}catch(e){throw d.error=e,d.reject&&d.reject(e),e;}finally{this.Za=null}};f.waitForExtension=function(a,b,c){return R(a).timeoutPromise(c||8E3,im(hm(this,b,!1)),"Render timeout waiting for extension "+b+" to be load.")}; +f.preloadExtension=function(a,b){"amp-embed"==a&&(a="amp-ad");var c=hm(this,a,!1),d;c.loaded||c.error?d=!1:(void 0===c.scriptPresent&&(c.scriptPresent=!!this.win.document.head.querySelector('[custom-element="'+a+'"]')),d=!c.scriptPresent);if(d){d=b;b=this.win.document.createElement("script");b.async=!0;I(a,"_")?d="":b.setAttribute(0<=fm.indexOf(a)?"custom-template":"custom-element",a);b.setAttribute("data-script",a);b.setAttribute("i-amphtml-inserted","");var e;e=Ka.cdn;var g=r().rtvVersion;null== +d&&(d="0.1");b.src=e+"/rtv/"+g+"/v0/"+a+(d?"-"+d:"")+".js";this.win.document.head.appendChild(b);c.scriptPresent=!0}return im(c)};f.installExtensionForDoc=function(a,b,c){var d=this,e=a.getRootNode(),g=e.__AMP_EXT_LDR;g||(g=e.__AMP_EXT_LDR=G());if(g[b])return g[b];hi(a.win,b);return g[b]=this.preloadExtension(b,c).then(function(){return jm(d,a,b)})};f.reloadExtension=function(a,b){this.$b[a]&&delete this.$b[a];b.removeAttribute("custom-element");b.setAttribute("i-amphtml-loaded-new-version",a);return this.preloadExtension(a)}; +f.loadElementClass=function(a){return this.preloadExtension(a).then(function(b){return b.elements[a].implementationClass})};f.addElement=function(a,b,c){km(this,a).extension.elements[a]={implementationClass:b,css:c};this.addDocFactory(function(d){lm(d,a,b,c)})};function lm(a,b,c,d){d?le(a,d,function(){mm(a.win,b,c)},!1,b):mm(a.win,b,c)}function mm(a,b,c){ei(a,b,c);O(a,b,nm)}f.addService=function(a,b){km(this).extension.services.push(a);this.addDocFactory(function(c){P(c,a,b,!0)})}; +f.addDocFactory=function(a,b){var c=km(this,b);c.docFactories.push(a);if(this.Za&&(this.Ja.isSingleDoc()||this.Ja.hasAmpDocShell())){var d=this.Ja.getAmpDoc(this.win.document);(d.declaresExtension(this.Za)||c.auto)&&a(d)}};f.installExtensionsInDoc=function(a,b){var c=this,d=[];b.forEach(function(b){d.push(jm(c,a,b))});return Promise.all(d)}; +function jm(a,b,c){var d=hm(a,c,!1);return im(d).then(function(){b.declareExtension(c);d.docFactories.forEach(function(a){try{a(b)}catch(g){w("Doc factory failed: ",g,c)}})})} +f.installExtensionsInChildWindow=function(a,b,c){var d=this,e=this.win;Hc(a,a.frameElement.ownerDocument.defaultView);om(a);pe(a.document,cssText$$module$build$css,null,!0,"amp-runtime");c&&c(a);pm(a);qm(e,a);rm(a);var g=[];b.forEach(function(b){em.includes(b)||hi(a,b);var c=d.preloadExtension(b).then(function(c){c.services.forEach(function(b){Kc(a,b)});var d=null,e={},g;for(g in c.elements){e.elementName=g;e.elementDef=c.elements[e.elementName];var h=(new Promise(function(c){return function(d){c.elementDef.css? +pe(a.document,c.elementDef.css,d,!1,b):d()}}(e))).then(function(b){return function(){ei(a,b.elementName,b.elementDef.implementationClass)}}(e));d?d.push(h):d=[h];e={elementDef:e.elementDef,elementName:e.elementName}}return d?Promise.all(d).then(function(){return c}):c});g.push(c)});return Promise.all(g)}; +function hm(a,b,c){var d=a.$b[b];d||(d={extension:{elements:{},services:[]},auto:c,docFactories:[],promise:void 0,resolve:void 0,reject:void 0,loaded:void 0,error:void 0,scriptPresent:void 0},a.$b[b]=d);return d}function km(a,b){a.Za||E().error("extensions","unknown extension for ",b);return hm(a,a.Za||"_UNKNOWN_",!0)} +function im(a){if(!a.promise)if(a.loaded)a.promise=Promise.resolve(a.extension);else if(a.error)a.promise=Promise.reject(a.error);else{var b=new N;a.promise=b.promise;a.resolve=b.resolve;a.reject=b.reject}return a.promise}function qm(a,b){var c=di(a)["amp-img"];fi(b,"amp-img",c||Nh);a=di(a)["amp-pixel"];fi(b,"amp-pixel",a||Nh)}function rm(a){em.forEach(function(b){hi(a,b)})}function om(a){Ab(a);ac(a);bc(a)}function pm(a){Kc(a,"url");Kc(a,"action");Kc(a,"standard-actions");Kc(a,"navigation")} +function nm(){return{}};(function(){Ca=ta;E();C()})();(function(a){self.reportError=a})(function(a,b,c){xe(b,c);b&&a&&qa(b.message)&&!(0<=b.message.indexOf("\u200b\u200b\u200b\u200b"))&&L(a,"user-error-reporting")&&(b={errorName:b.name,errorMessage:b.message},a=nd(a).getAmpDoc().getRootNode(),se(a.documentElement||a.body||a,b))}.bind(null,self)); +function sm(a){O(a,"crypto",cj);O(a,"batched-xhr",Di);O(a,"documentState",jj);O(a,"platform",Uj);O(a,"templates",ji);O(a,"timer",Qk);O(a,"timer",Qk);O(a,"vsync",Sl);O(a,"xhr",Bi);O(a,"input",Tj)} +function tm(a){var b=self;function c(a){function c(){g.then(function(){"function"==typeof a?a(b.AMP,b.AMP._):e.registerExtension(a.n,a.f,b.AMP)})}"function"!=typeof a&&a.i?um(e,a).then(function(){return vm(b,a,c)}):vm(b,a,c)}if(b.AMP_TAG)Promise.resolve();else{b.AMP_TAG=!0;var d=b.AMP||[];O(b,"extensions",gm);var e=pd(b);sm(b);rm(b);b.AMP={win:b,_:b.AMP?b.AMP._:void 0};b.AMP.config=La;b.AMP.BaseElement=Kh;b.AMP.BaseTemplate=ii;b.AMP.registerElement=e.addElement.bind(e);b.AMP.registerTemplate=function(a, +c){var d=Q(b,"templates");if(d.lb[a]){var e=d.Ic[a];C().assert(e,"Duplicate template type: %s",a);delete d.Ic[a];e(c)}else d.lb[a]=Promise.resolve(c)};b.AMP.registerServiceForDoc=e.addService.bind(e);b.AMP.isExperimentOn=L.bind(null,b);b.AMP.toggleExperiment=wb.bind(null,b);b.AMP.setLogLevel=sa.bind(null);b.AMP.setTickFunction=function(){};var g=a(b,e);for(a=0;a + + + + +Welcome to Ghost + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+

Welcome to Ghost

+ +
+
+ +
+
+

Hey! Welcome to Ghost, it's great to have you :)

+

We know that first impressions are important, so we've populated your new site with some initial Getting Started posts that will help you get familiar with everything in no time. This is the first one!

+

There are a few things that you should know up-front:

+
    +
  1. +

    Ghost is designed for ambitious, professional publishers who want to actively build a business around their content. That's who it works best for. If you're using Ghost for some other purpose, that's fine too - but it might not be the best choice for you.

    +
  2. +
  3. +

    The entire platform can be modified and customized to suit your needs, which is very powerful, but doing so does require some knowledge of code. Ghost is not necessarily a good platform for beginners or people who just want a simple personal blog.

    +
  4. +
  5. +

    For the best experience we recommend downloading the Ghost Desktop App for your computer, which is the best way to access your Ghost site on a desktop device.

    +
  6. +
+

Ghost is made by an independent non-profit organisation called the Ghost Foundation. We are 100% self funded by revenue from our Ghost(Pro) service, and every penny we make is re-invested into funding further development of free, open source technology for modern journalism.

+

The main thing you'll want to read about next is probably: the Ghost editor.

+

Once you're done reading, you can simply delete the default Ghost user from your team to remove all of these introductory posts!

+
+
+
+
+ + + diff --git a/docker/tanner/snare/dist/pages/8/35a63c8a85b1279a0f991ce8828fb9d9 b/docker/tanner/snare/dist/pages/8/35a63c8a85b1279a0f991ce8828fb9d9 new file mode 100644 index 000000000..faf910953 Binary files /dev/null and b/docker/tanner/snare/dist/pages/8/35a63c8a85b1279a0f991ce8828fb9d9 differ diff --git a/docker/tanner/snare/dist/pages/8/421694f2a1956e51036a0a6ff95ea9e1 b/docker/tanner/snare/dist/pages/8/421694f2a1956e51036a0a6ff95ea9e1 new file mode 100644 index 000000000..f123a144f Binary files /dev/null and b/docker/tanner/snare/dist/pages/8/421694f2a1956e51036a0a6ff95ea9e1 differ diff --git a/docker/tanner/snare/dist/pages/8/442e1148b357e5ec9d0060a6e0f9055e b/docker/tanner/snare/dist/pages/8/442e1148b357e5ec9d0060a6e0f9055e new file mode 100644 index 000000000..ed7cd1afa Binary files /dev/null and b/docker/tanner/snare/dist/pages/8/442e1148b357e5ec9d0060a6e0f9055e differ diff --git a/docker/tanner/snare/dist/pages/8/47c2ef7b3f9c7158f2e15ef5269d2a09 b/docker/tanner/snare/dist/pages/8/47c2ef7b3f9c7158f2e15ef5269d2a09 new file mode 100644 index 000000000..846083b02 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/47c2ef7b3f9c7158f2e15ef5269d2a09 @@ -0,0 +1,13 @@ + + + + + +ARCTIC - Visual Vibes - YouTube + + + +
+ \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/8/50ce0a5ffcd9e65830c66c359235c4c5 b/docker/tanner/snare/dist/pages/8/50ce0a5ffcd9e65830c66c359235c4c5 new file mode 100644 index 000000000..2e12aab04 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/50ce0a5ffcd9e65830c66c359235c4c5 @@ -0,0 +1,174 @@ +<![CDATA[user Blog]]>http://172.20.254.138:80/http://172.20.254.138:80/favicon.pnguser Bloghttp://172.20.254.138:80/Ghost 1.25Tue, 14 Aug 2018 12:46:03 GMT60<![CDATA[Welcome to Ghost]]>

Hey! Welcome to Ghost, it's great to have you :)

+

We know that first impressions are important, so we've populated your new site with some initial Getting Started posts that will help you get familiar with everything in no time. This is the first one!

+

There are a few things that

]]>
http://172.20.254.138:80/welcome/5b6c1fcd2d07ae3e32c42ae3Thu, 09 Aug 2018 11:04:52 GMTWelcome to Ghost

Hey! Welcome to Ghost, it's great to have you :)

+

We know that first impressions are important, so we've populated your new site with some initial Getting Started posts that will help you get familiar with everything in no time. This is the first one!

+

There are a few things that you should know up-front:

+
    +
  1. +

    Ghost is designed for ambitious, professional publishers who want to actively build a business around their content. That's who it works best for. If you're using Ghost for some other purpose, that's fine too - but it might not be the best choice for you.

    +
  2. +
  3. +

    The entire platform can be modified and customized to suit your needs, which is very powerful, but doing so does require some knowledge of code. Ghost is not necessarily a good platform for beginners or people who just want a simple personal blog.

    +
  4. +
  5. +

    For the best experience we recommend downloading the Ghost Desktop App for your computer, which is the best way to access your Ghost site on a desktop device.

    +
  6. +
+

Ghost is made by an independent non-profit organisation called the Ghost Foundation. We are 100% self funded by revenue from our Ghost(Pro) service, and every penny we make is re-invested into funding further development of free, open source technology for modern journalism.

+

The main thing you'll want to read about next is probably: the Ghost editor.

+

Once you're done reading, you can simply delete the default Ghost user from your team to remove all of these introductory posts!

+]]>
<![CDATA[Using the Ghost editor]]>

Ghost uses a language called Markdown to format text.

+

When you go to edit a post and see special characters and colours intertwined between the words, those are Markdown shortcuts which tell Ghost what to do with the words in your document. The biggest benefit of Markdown is that you

]]>
http://172.20.254.138:80/the-editor/5b6c1fcd2d07ae3e32c42ae1Thu, 09 Aug 2018 11:04:51 GMTUsing the Ghost editor

Ghost uses a language called Markdown to format text.

+

When you go to edit a post and see special characters and colours intertwined between the words, those are Markdown shortcuts which tell Ghost what to do with the words in your document. The biggest benefit of Markdown is that you can quickly apply formatting as you type, without needing to pause.

+

At the bottom of the editor, you'll find a toolbar with basic formatting options to help you get started as easily as possible. You'll also notice that there's a ? icon, which contains more advanced shortcuts.

+

For now, though, let's run you through some of the basics. You'll want to make sure you're editing this post in order to see all the Markdown we've used.

+

Formatting text

+

The most common shortcuts are of course, bold text, italic text, and hyperlinks. These generally make up the bulk of any document. You can type the characters out, but you can also use keyboard shortcuts.

+
    +
  • CMD/Ctrl + B for Bold
  • +
  • CMD/Ctrl + I for Italic
  • +
  • CMD/Ctrl + K for a Link
  • +
  • CMD/Ctrl + H for a Heading (Press multiple times for h2/h3/h4/etc)
  • +
+

With just a couple of extra characters here and there, you're well on your way to creating a beautifully formatted story.

+

Inserting images

+

Images in Markdown look just the same as links, except they're prefixed with an exclamation mark, like this:

+

![Image description](/path/to/image.jpg)

+

Using the Ghost editor

+

Most Markdown editors don't make you type this out, though. In Ghost you can click on the image icon in the toolbar at the bottom of the editor, or you can just click and drag an image from your desktop directly into the editor. Both will upload the image for you and generate the appropriate Markdown.

+

Important Note: Ghost does not currently have automatic image resizing, so it's always a good idea to make sure your images aren't gigantic files before uploading them to Ghost.

+

Making lists

+

Lists in HTML are a formatting nightmare, but in Markdown they become an absolute breeze with just a couple of characters and a bit of smart automation. For numbered lists, just write out the numbers. For bullet lists, just use * or - or +. Like this:

+
    +
  1. Crack the eggs over a bowl
  2. +
  3. Whisk them together
  4. +
  5. Make an omelette
  6. +
+

or

+
    +
  • Remember to buy milk
  • +
  • Feed the cat
  • +
  • Come up with idea for next story
  • +
+

Adding quotes

+

When you want to pull out a particularly good excerpt in the middle of a piece, you can use > at the beginning of a paragraph to turn it into a Blockquote. You might've seen this formatting before in email clients.

+
+

A well placed quote guides a reader through a story, helping them to understand the most important points being made

+
+

All themes handles blockquotes slightly differently. Sometimes they'll look better kept shorter, while other times you can quote fairly hefty amounts of text and get away with it. Generally, the safest option is to use blockquotes sparingly.

+

Dividing things up

+

If you're writing a piece in parts and you just feel like you need to divide a couple of sections distinctly from each other, a horizontal rule might be just what you need. Dropping --- on a new line will create a sleek divider, anywhere you want it.

+
+

This should get you going with the vast majority of what you need to do in the editor, but if you're still curious about more advanced tips then check out the Advanced Markdown Guide - or if you'd rather learn about how Ghost taxononomies work, we've got a overview of how to use Ghost tags.

+]]>
<![CDATA[Organising your content with tags]]>

Ghost has a single, powerful organisational taxonomy, called tags.

+

It doesn't matter whether you want to call them categories, tags, boxes, or anything else. You can think of Ghost tags a lot like Gmail labels. By tagging posts with one or more keyword, you can organise articles into buckets of

]]>
http://172.20.254.138:80/using-tags/5b6c1fcd2d07ae3e32c42adfThu, 09 Aug 2018 11:04:50 GMTOrganising your content with tags

Ghost has a single, powerful organisational taxonomy, called tags.

+

It doesn't matter whether you want to call them categories, tags, boxes, or anything else. You can think of Ghost tags a lot like Gmail labels. By tagging posts with one or more keyword, you can organise articles into buckets of related content.

+

Basic tagging

+

When you write a post, you can assign tags to help differentiate between categories of content. For example, you might tag some posts with News and other posts with Cycling, which would create two distinct categories of content listed on /tag/news/ and /tag/cycling/, respectively.

+

If you tag a post with both News and Cycling - then it appears in both sections.

+

Tag archives are like dedicated home-pages for each category of content that you have. They have their own pages, their own RSS feeds, and can support their own cover images and meta data.

+

The primary tag

+

Inside the Ghost editor, you can drag and drop tags into a specific order. The first tag in the list is always given the most importance, and some themes will only display the primary tag (the first tag in the list) by default. So you can add the most important tag which you want to show up in your theme, but also add a bunch of related tags which are less important.

+

News, Cycling, Bart Stevens, Extreme Sports

+

In this example, News is the primary tag which will be displayed by the theme, but the post will also still receive all the other tags, and show up in their respective archives.

+

Private tags

+

Sometimes you may want to assign a post a specific tag, but you don't necessarily want that tag appearing in the theme or creating an archive page. In Ghost, hashtags are private and can be used for special styling.

+

For example, if you sometimes publish posts with video content - you might want your theme to adapt and get rid of the sidebar for these posts, to give more space for an embedded video to fill the screen. In this case, you could use private tags to tell your theme what to do.

+

News, Cycling, #video

+

Here, the theme would assign the post publicly displayed tags of News, and Cycling - but it would also keep a private record of the post being tagged with #video.

+

In your theme, you could then look for private tags conditionally and give them special formatting:

+
{{#post}}
+    {{#has tag="#video"}}
+        ...markup for a nice big video post layout...
+    {{else}}
+        ...regular markup for a post...
+    {{/has}}
+{{/post}}
+
+

You can find documentation for theme development techniques like this and many more over on Ghost's extensive theme documentation.

+]]>
<![CDATA[Managing Ghost users]]>

Ghost has a number of different user roles for your team

+

Authors

+

The base user level in Ghost is an author. Authors can write posts, edit their own posts, and publish their own posts. Authors are trusted users. If you don't trust users to be allowed to publish their own

]]>
http://172.20.254.138:80/managing-users/5b6c1fcd2d07ae3e32c42addThu, 09 Aug 2018 11:04:49 GMTManaging Ghost users

Ghost has a number of different user roles for your team

+

Authors

+

The base user level in Ghost is an author. Authors can write posts, edit their own posts, and publish their own posts. Authors are trusted users. If you don't trust users to be allowed to publish their own posts, you shouldn't invite them to Ghost admin.

+

Editors

+

Editors are the 2nd user level in Ghost. Editors can do everything that an Author can do, but they can also edit and publish the posts of others - as well as their own. Editors can also invite new authors to the site.

+

Administrators

+

The top user level in Ghost is Administrator. Again, administrators can do everything that Authors and Editors can do, but they can also edit all site settings and data, not just content. Additionally, administrators have full access to invite, manage or remove any other user of the site.

+

The Owner

+

There is only ever one owner of a Ghost site. The owner is a special user which has all the same permissions as an Administrator, but with two exceptions: The Owner can never be deleted. And in some circumstances the owner will have access to additional special settings if applicable — for example, billing details, if using Ghost(Pro).

+
+

It's a good idea to ask all of your users to fill out their user profiles, including bio and social links. These will populate rich structured data for posts and generally create more opportunities for themes to fully populate their design.

+]]>
<![CDATA[Making your site private]]>

Sometimes you might want to put your site behind closed doors

+

If you've got a publication that you don't want the world to see yet because it's not ready to launch, you can hide your Ghost site behind a simple shared pass-phrase.

+

You can toggle this preference on at the

]]>
http://172.20.254.138:80/private-sites/5b6c1fcd2d07ae3e32c42adbThu, 09 Aug 2018 11:04:48 GMTMaking your site private

Sometimes you might want to put your site behind closed doors

+

If you've got a publication that you don't want the world to see yet because it's not ready to launch, you can hide your Ghost site behind a simple shared pass-phrase.

+

You can toggle this preference on at the bottom of Ghost's General Settings

+

Making your site private

+

Ghost will give you a short, randomly generated pass-phrase which you can share with anyone who needs access to the site while you're working on it. While this setting is enabled, all search engine optimisation features will be switched off to help keep the site off the radar.

+

Do remember though, this is not secure authentication. You shouldn't rely on this feature for protecting important private data. It's just a simple, shared pass-phrase for very basic privacy.

+]]>
<![CDATA[Advanced Markdown tips]]>

There are lots of powerful things you can do with the Ghost editor

+

If you've gotten pretty comfortable with all the basics of writing in Ghost, then you may enjoy some more advanced tips about the types of things you can do with Markdown!

+

As with the last post about

]]>
http://172.20.254.138:80/advanced-markdown/5b6c1fcd2d07ae3e32c42ad9Thu, 09 Aug 2018 11:04:47 GMTAdvanced Markdown tips

There are lots of powerful things you can do with the Ghost editor

+

If you've gotten pretty comfortable with all the basics of writing in Ghost, then you may enjoy some more advanced tips about the types of things you can do with Markdown!

+

As with the last post about the editor, you'll want to be actually editing this post as you read it so that you can see all the Markdown code we're using.

+

Special formatting

+

As well as bold and italics, you can also use some other special formatting in Markdown when the need arises, for example:

+
    +
  • strike through
  • +
  • highlight
  • +
  • *escaped characters*
  • +
+

Writing code blocks

+

There are two types of code elements which can be inserted in Markdown, the first is inline, and the other is block. Inline code is formatted by wrapping any word or words in back-ticks, like this. Larger snippets of code can be displayed across multiple lines using triple back ticks:

+
.my-link {
+    text-decoration: underline;
+}
+
+

If you want to get really fancy, you can even add syntax highlighting using Prism.js.

+

Full bleed images

+

One neat trick which you can use in Markdown to distinguish between different types of images is to add a #hash value to the end of the source URL, and then target images containing the hash with special styling. For example:

+

Advanced Markdown tips

+

which is styled with...

+
img[src$="#full"] {
+    max-width: 100vw;
+}
+
+

This creates full-bleed images in the Casper theme, which stretch beyond their usual boundaries right up to the edge of the window. Every theme handles these types of things slightly differently, but it's a great trick to play with if you want to have a variety of image sizes and styles.

+

Reference lists

+

The quick brown fox, jumped over the lazy dog.

+

Another way to insert links in markdown is using reference lists. You might want to use this style of linking to cite reference material in a Wikipedia-style. All of the links are listed at the end of the document, so you can maintain full separation between content and its source or reference.

+

Creating footnotes

+

The quick brown fox[1] jumped over the lazy dog[2].

+

Footnotes are a great way to add additional contextual details when appropriate. Ghost will automatically add footnote content to the very end of your post.

+

Full HTML

+

Perhaps the best part of Markdown is that you're never limited to just Markdown. You can write HTML directly in the Ghost editor and it will just work as HTML usually does. No limits! Here's a standard YouTube embed code as an example:

+ +
+
+
    +
  1. Foxes are red ↩︎

    +
  2. +
  3. Dogs are usually not red ↩︎

    +
  4. +
+
+]]>
<![CDATA[Setting up your own Ghost theme]]>

Creating a totally custom design for your publication

+

Ghost comes with a beautiful default theme called Casper, which is designed to be a clean, readable publication layout and can be easily adapted for most purposes. However, Ghost can also be completely themed to suit your needs. Rather than just giving

]]>
http://172.20.254.138:80/themes/5b6c1fcd2d07ae3e32c42ad7Thu, 09 Aug 2018 11:04:46 GMTSetting up your own Ghost theme

Creating a totally custom design for your publication

+

Ghost comes with a beautiful default theme called Casper, which is designed to be a clean, readable publication layout and can be easily adapted for most purposes. However, Ghost can also be completely themed to suit your needs. Rather than just giving you a few basic settings which act as a poor proxy for code, we just let you write code.

+

There are a huge range of both free and premium pre-built themes which you can get from the Ghost Theme Marketplace, or you can simply create your own from scratch.

+

Setting up your own Ghost theme

+
+

Anyone can write a completely custom Ghost theme, with just some solid knowledge of HTML and CSS

+
+

Ghost themes are written with a templating language called handlebars, which has a bunch of dynamic helpers to insert your data into template files. Like {{author.name}}, for example, outputs the name of the current author.

+

The best way to learn how to write your own Ghost theme is to have a look at the source code for Casper, which is heavily commented and should give you a sense of how everything fits together.

+
    +
  • default.hbs is the main template file, all contexts will load inside this file unless specifically told to use a different template.
  • +
  • post.hbs is the file used in the context of viewing a post.
  • +
  • index.hbs is the file used in the context of viewing the home page.
  • +
  • and so on
  • +
+

We've got full and extensive theme documentation which outlines every template file, context and helper that you can use.

+

If you want to chat with other people making Ghost themes to get any advice or help, there's also a themes section on our public Ghost forum.

+]]>
\ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/8/50f8f0588e30faaee873853ce1b145de b/docker/tanner/snare/dist/pages/8/50f8f0588e30faaee873853ce1b145de new file mode 100644 index 000000000..50945adfe --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/50f8f0588e30faaee873853ce1b145de @@ -0,0 +1,118 @@ + + + + + +Setting up your own Ghost theme + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+

Setting up your own Ghost theme

+ +
+
+ +
+
+

Creating a totally custom design for your publication

+

Ghost comes with a beautiful default theme called Casper, which is designed to be a clean, readable publication layout and can be easily adapted for most purposes. However, Ghost can also be completely themed to suit your needs. Rather than just giving you a few basic settings which act as a poor proxy for code, we just let you write code.

+

There are a huge range of both free and premium pre-built themes which you can get from the Ghost Theme Marketplace, or you can simply create your own from scratch.

+

+
+

Anyone can write a completely custom Ghost theme, with just some solid knowledge of HTML and CSS

+
+

Ghost themes are written with a templating language called handlebars, which has a bunch of dynamic helpers to insert your data into template files. Like {{author.name}}, for example, outputs the name of the current author.

+

The best way to learn how to write your own Ghost theme is to have a look at the source code for Casper, which is heavily commented and should give you a sense of how everything fits together.

+
    +
  • default.hbs is the main template file, all contexts will load inside this file unless specifically told to use a different template.
  • +
  • post.hbs is the file used in the context of viewing a post.
  • +
  • index.hbs is the file used in the context of viewing the home page.
  • +
  • and so on
  • +
+

We've got full and extensive theme documentation which outlines every template file, context and helper that you can use.

+

If you want to chat with other people making Ghost themes to get any advice or help, there's also a themes section on our public Ghost forum.

+
+
+
+
+ + + diff --git a/docker/tanner/snare/dist/pages/8/59ec181beaeef3e1706e3fe05fa16158 b/docker/tanner/snare/dist/pages/8/59ec181beaeef3e1706e3fe05fa16158 new file mode 100644 index 000000000..ca94ff625 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/59ec181beaeef3e1706e3fe05fa16158 @@ -0,0 +1,107 @@ + + + + + +Making your site private + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+

Making your site private

+ +
+
+ +
+
+

Sometimes you might want to put your site behind closed doors

+

If you've got a publication that you don't want the world to see yet because it's not ready to launch, you can hide your Ghost site behind a simple shared pass-phrase.

+

You can toggle this preference on at the bottom of Ghost's General Settings

+

+

Ghost will give you a short, randomly generated pass-phrase which you can share with anyone who needs access to the site while you're working on it. While this setting is enabled, all search engine optimisation features will be switched off to help keep the site off the radar.

+

Do remember though, this is not secure authentication. You shouldn't rely on this feature for protecting important private data. It's just a simple, shared pass-phrase for very basic privacy.

+
+
+
+
+ + + diff --git a/docker/tanner/snare/dist/pages/8/6086f269b8b3d1c686bdf9b081124fe4 b/docker/tanner/snare/dist/pages/8/6086f269b8b3d1c686bdf9b081124fe4 new file mode 100644 index 000000000..8af522f6b Binary files /dev/null and b/docker/tanner/snare/dist/pages/8/6086f269b8b3d1c686bdf9b081124fe4 differ diff --git a/docker/tanner/snare/dist/pages/8/627c1b450e67251c53ef2edcfdf6f11d b/docker/tanner/snare/dist/pages/8/627c1b450e67251c53ef2edcfdf6f11d new file mode 100644 index 000000000..20cfe49c5 Binary files /dev/null and b/docker/tanner/snare/dist/pages/8/627c1b450e67251c53ef2edcfdf6f11d differ diff --git a/docker/tanner/snare/dist/pages/8/6e994092478c0e3c7e9ae5821d67f13c b/docker/tanner/snare/dist/pages/8/6e994092478c0e3c7e9ae5821d67f13c new file mode 100644 index 000000000..924da6cf9 Binary files /dev/null and b/docker/tanner/snare/dist/pages/8/6e994092478c0e3c7e9ae5821d67f13c differ diff --git a/docker/tanner/snare/dist/pages/8/759cca6c69e8c7c54b6a12df090842d4 b/docker/tanner/snare/dist/pages/8/759cca6c69e8c7c54b6a12df090842d4 new file mode 100644 index 000000000..498fc6784 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/759cca6c69e8c7c54b6a12df090842d4 @@ -0,0 +1 @@ +;(function($){'use strict';$.fn.fitVids=function(options){var settings={customSelector:null,ignore:null};if(!document.getElementById('fit-vids-style')){var head=document.head||document.getElementsByTagName('head')[0];var css='.fluid-width-video-container{flex-grow: 1;width:100%;}.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';var div=document.createElement("div");div.innerHTML='

x

';head.appendChild(div.childNodes[1]);}if(options){$.extend(settings,options);}return this.each(function(){var selectors=['iframe[src*="player.vimeo.com"]','iframe[src*="youtube.com"]','iframe[src*="youtube-nocookie.com"]','iframe[src*="kickstarter.com"][src*="video.html"]','object','embed'];if(settings.customSelector){selectors.push(settings.customSelector);}var ignoreList='.fitvidsignore';if(settings.ignore){ignoreList=ignoreList+', '+settings.ignore;}var $allVideos=$(this).find(selectors.join(','));$allVideos=$allVideos.not('object object');$allVideos=$allVideos.not(ignoreList);$allVideos.each(function(){var $this=$(this);if($this.parents(ignoreList).length>0){return;}if(this.tagName.toLowerCase()==='embed'&&$this.parent('object').length||$this.parent('.fluid-width-video-wrapper').length){return;}if((!$this.css('height')&&!$this.css('width'))&&(isNaN($this.attr('height'))||isNaN($this.attr('width')))){$this.attr('height',9);$this.attr('width',16);}var height=(this.tagName.toLowerCase()==='object'||($this.attr('height')&&!isNaN(parseInt($this.attr('height'),10))))?parseInt($this.attr('height'),10):$this.height(),width=!isNaN(parseInt($this.attr('width'),10))?parseInt($this.attr('width'),10):$this.width(),aspectRatio=height/width;if(!$this.attr('name')){var videoName='fitvid'+$.fn.fitVids._count;$this.attr('name',videoName);$.fn.fitVids._count++;}$this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top',(aspectRatio*100)+'%');$this.removeAttr('height').removeAttr('width');});});};$.fn.fitVids._count=0;})(window.jQuery||window.Zepto); \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/8/7d4539153a5354fcce37ce02fbb15e38 b/docker/tanner/snare/dist/pages/8/7d4539153a5354fcce37ce02fbb15e38 new file mode 100644 index 000000000..37069846c --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/7d4539153a5354fcce37ce02fbb15e38 @@ -0,0 +1 @@ +Ghost diff --git a/docker/tanner/snare/dist/pages/8/7f3fdea0cce5338f7c0d5010329650c8 b/docker/tanner/snare/dist/pages/8/7f3fdea0cce5338f7c0d5010329650c8 new file mode 100644 index 000000000..b8bf2fe62 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/7f3fdea0cce5338f7c0d5010329650c8 @@ -0,0 +1,259 @@ + + + + + + +Managing Ghost users + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +/ Getting Started +
+

Managing Ghost users

+
+
+
+
+
+

Ghost has a number of different user roles for your team

+

Authors

+

The base user level in Ghost is an author. Authors can write posts, edit their own posts, and publish their own posts. Authors are trusted users. If you don't trust users to be allowed to publish their own posts, you shouldn't invite them to Ghost admin.

+

Editors

+

Editors are the 2nd user level in Ghost. Editors can do everything that an Author can do, but they can also edit and publish the posts of others - as well as their own. Editors can also invite new authors to the site.

+

Administrators

+

The top user level in Ghost is Administrator. Again, administrators can do everything that Authors and Editors can do, but they can also edit all site settings and data, not just content. Additionally, administrators have full access to invite, manage or remove any other user of the site.

+

The Owner

+

There is only ever one owner of a Ghost site. The owner is a special user which has all the same permissions as an Administrator, but with two exceptions: The Owner can never be deleted. And in some circumstances the owner will have access to additional special settings if applicable — for example, billing details, if using Ghost(Pro).

+
+

It's a good idea to ask all of your users to fill out their user profiles, including bio and social links. These will populate rich structured data for posts and generally create more opportunities for themes to fully populate their design.

+
+
+
+
+
+ + +
+

Ghost

+

You can delete this user to remove all the welcome posts

+
+
+
+Read More +
+
+
+
+
+ +
+ + +
Managing Ghost users
+
+
Share this + + +
+ + + + + + +
+ +
+ +
+
+
+ +
+ + + + + diff --git a/docker/tanner/snare/dist/pages/8/80a35a9639b0b70193e43257dfb1fb56 b/docker/tanner/snare/dist/pages/8/80a35a9639b0b70193e43257dfb1fb56 new file mode 100644 index 000000000..f28f0935f --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/80a35a9639b0b70193e43257dfb1fb56 @@ -0,0 +1,254 @@ + + + + + + +Making your site private + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +/ Getting Started +
+

Making your site private

+
+
+
+
+
+

Sometimes you might want to put your site behind closed doors

+

If you've got a publication that you don't want the world to see yet because it's not ready to launch, you can hide your Ghost site behind a simple shared pass-phrase.

+

You can toggle this preference on at the bottom of Ghost's General Settings

+

private

+

Ghost will give you a short, randomly generated pass-phrase which you can share with anyone who needs access to the site while you're working on it. While this setting is enabled, all search engine optimisation features will be switched off to help keep the site off the radar.

+

Do remember though, this is not secure authentication. You shouldn't rely on this feature for protecting important private data. It's just a simple, shared pass-phrase for very basic privacy.

+
+
+
+
+
+ + +
+

Ghost

+

You can delete this user to remove all the welcome posts

+
+
+
+Read More +
+
+
+
+
+ +
+ + +
Making your site private
+
+
Share this + + +
+ + + + + + +
+ +
+ +
+
+
+ +
+ + + + + diff --git a/docker/tanner/snare/dist/pages/8/8bb6fa05647ee00c240d7bfa744d994e b/docker/tanner/snare/dist/pages/8/8bb6fa05647ee00c240d7bfa744d994e new file mode 100644 index 000000000..6330fb910 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/8bb6fa05647ee00c240d7bfa744d994e @@ -0,0 +1,42 @@ +(self.AMP=self.AMP||[]).push({n:"amp-iframe",v:"1533253141109",f:(function(AMP,_){ +var l;function aa(a,b){function c(){}c.prototype=b.prototype;a.prototype=new c;a.prototype.constructor=a;for(var d in b)if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(b,d);e&&Object.defineProperty(a,d,e)}else a[d]=b[d]}function q(a,b){b=void 0===b?"":b;try{return decodeURIComponent(a)}catch(c){return b}};var ba=/(?:^[#?]?|&)([^=&]+)(?:=([^&]*))?/g;self.log=self.log||{user:null,dev:null,userForEmbed:null};var t=self.log;function u(){if(!t.user)throw Error("failed to call initLogConstructor");return t.user}function v(){if(t.dev)return t.dev;throw Error("failed to call initLogConstructor");};function x(){var a,b=Object.create(null);a&&Object.assign(b,a);return b}function y(a){return a||{}};function z(a,b){var c=a.length-b.length;return 0<=c&&a.indexOf(b,c)==c};var A=self.AMP_CONFIG||{},ca={thirdParty:A.thirdPartyUrl||"https://3p.ampproject.net",thirdPartyFrameHost:A.thirdPartyFrameHost||"ampproject.net",thirdPartyFrameRegex:("string"==typeof A.thirdPartyFrameRegex?new RegExp(A.thirdPartyFrameRegex):A.thirdPartyFrameRegex)||/^d-\d+\.ampproject\.net$/,cdn:A.cdnUrl||"https://cdn.ampproject.org",cdnProxyRegex:("string"==typeof A.cdnProxyRegex?new RegExp(A.cdnProxyRegex):A.cdnProxyRegex)||/^https:\/\/([a-zA-Z0-9_-]+\.)?cdn\.ampproject\.org$/,localhostRegex:/^https?:\/\/localhost(:\d+)?$/, +errorReporting:A.errorReportingUrl||"https://amp-error-reporting.appspot.com/r",localDev:A.localDev||!1};function B(a){this.Z=a;this.K=this.T=0;this.C=Object.create(null)}B.prototype.has=function(a){return!!this.C[a]};B.prototype.get=function(a){var b=this.C[a];if(b)return b.access=++this.K,b.payload};B.prototype.put=function(a,b){this.has(a)||this.T++;this.C[a]={payload:b,access:this.K};if(!(this.T<=this.Z)){v().warn("lru-cache","Trimming LRU cache");a=this.C;var c=this.K+1,d,e;for(e in a){var f=a[e].access;f=e&&(c[d]=Math.random() src. Must start with https://. Found %s",a);var n=e.parse(d);u().assert(!wa(c,"allow-same-origin")||f!=n.origin&&"data:"!=h,"Origin of must not be equal to container %sif allow-same-origin is set. See https://github.com/ampproject/amphtml/blob/master/spec/amp-iframe-origin-policy.md for details.", +a);u().assert(!(z(g,"."+ca.thirdPartyFrameHost)||z(g,".ampproject.org")),"amp-iframe does not allow embedding of frames from ampproject.*: %s",b);return b} +function xa(a){var b=a.element.getLayoutBox(),c=Math.min(600,.75*a.getViewport().getSize().height);u().assert(b.top>=c," elements must be positioned outside the first 75% of the viewport or 600px from the top (whichever is smaller): %s Current position %s. Min: %sPositioning rules don't apply for iframes that use `placeholder`.See https://github.com/ampproject/amphtml/blob/master/extensions/amp-iframe/amp-iframe.md#iframe-with-placeholder for details.",a.element,b.top,c)} +function wa(a,b){var c=new RegExp("\\s"+b+"\\s","i");return c.test(" "+a+" ")}function ya(a,b){if(b){a=F(a.element,"url").parse(b);var c=a.hash;"data:"==a.protocol||c&&"#"!=c||(a=b.indexOf("#"),b=(-1==a?b:b.substring(0,a))+"#amp=1");return b}} +l.firstAttachedCallback=function(){this.o=this.element.getAttribute("sandbox");var a;if(!(a=ya(this,this.element.getAttribute("src")))){a=this.element.getAttribute("srcdoc");var b=this.o;if(a){u().assert(!(" "+b+" ").match(/\s+allow-same-origin\s+/i),"allow-same-origin is not allowed with the srcdoc attribute %s.",this.element);if("undefined"!==typeof TextEncoder)b=(new TextEncoder("utf-8")).encode(a);else{a=unescape(encodeURIComponent(a));for(var b=new Uint8Array(a.length),c=0;cb||e>c)&&20>=b-f&&20>=c-e){b=!0;break a}}b=!1}this.O=b;b=this.element;c=b.getLayoutBox();this.B=10=d)}this.X=b;this.l&& +this.l.fire()};function Aa(a){if(a.h){var b=a.getViewport().getLayoutRect(a.h),c=a.getLayoutBox();a.M=O(b,-c.left,-c.top)}}l.getIntersectionElementLayoutBox=function(){if(!this.h)return AMP.BaseElement.prototype.getIntersectionElementLayoutBox.call(this);var a=this.getLayoutBox();this.M||Aa(this);return O(this.M,a.left,a.top)}; +l.layoutCallback=function(){var a=this;u().assert(!this.X,"amp-iframe is not used for displaying fixed ad. Please use amp-sticky-ad and amp-ad instead.");this.F||xa(this);this.G&&u().assert(this.getOverflowElement(),"Overflow element must be defined for resizable frames: %s",this.element);if(!this.iframeSrc)return Promise.resolve();if(this.B&&(X++,1 when its "sandbox" attribute contains "allow-top-navigation".');}; +function Ca(a,b,c){if(a.G)if(100>b)a.user().error("amp-iframe","Ignoring embed-size request because the resize height is less than 100px. If you are using amp-iframe to display ads, consider using amp-ad instead.",a.element);else{var d,e;b=parseInt(b,10);isNaN(b)||(d=Math.max(b+(a.element.offsetHeight-a.h.offsetHeight),b));c=parseInt(c,10);isNaN(c)||(e=Math.max(c+(a.element.offsetWidth-a.h.offsetWidth),c));void 0!==d||void 0!==e?a.attemptChangeSize(d,e).then(function(){void 0!==d&&a.element.setAttribute("height", +d);void 0!==e&&a.element.setAttribute("width",e)},function(){}):a.user().error("amp-iframe","Ignoring embed-size request because no width or height value is provided",a.element)}else a.user().error("amp-iframe","Ignoring embed-size request because this iframe is not resizable",a.element)} +function za(a){if(da(a.win)){var b=a.element,c=b.getAttribute("src");c&&(a.m=F(b,"url").parse(c).origin);a.registerAction("postMessage",function(b){a.m?a.h.contentWindow.postMessage(b.args,a.m):u().error("amp-iframe",'"postMessage" action is only allowed with "src"attribute with an origin.')},100);if(a.m){var d=10,e=0,f=function(b){if(b.source===a.h.contentWindow)if(b.origin!==a.m)u().error("amp-iframe",'"message" received from unexpected origin: '+b.origin+". Only allowed from: "+a.m);else{var c; +a.getAmpDoc().getRootNode().activeElement!==a.h?c=!1:(c=a.win.document.createElement("audio"),c.play(),c=c.paused?!1:!0);if(c){var g=b.data,k;try{k=JSON.parse(JSON.stringify(g))}catch(p){u().error("amp-iframe",'Data from "message" event must be JSON.');return}var m=a.win;b=y({data:k});c={detail:b};Object.assign(c,void 0);"function"==typeof m.CustomEvent?b=new m.CustomEvent("amp-iframe:message",c):(m=m.document.createEvent("CustomEvent"),m.initCustomEvent("amp-iframe:message",!!c.bubbles,!!c.cancelable, +b),b=m);var r=F(a.getAmpDoc(),"action");r.trigger(a.element,"message",b,100)}else e++,u().error("amp-iframe",'"message" event may only be triggered from a user gesture.'),e>=d&&(u().error("amp-iframe",'Too many non-gesture-triggered "message" events; detaching event listener.'),a.win.removeEventListener("message",f))}};a.win.addEventListener("message",f)}}}l.ba=function(a){this.m=a};function Ba(a,b){var c=b||"";a.setAttribute("sandbox",c)}(function(a){a.registerElement("amp-iframe",Y)})(self.AMP); +})}); +//# sourceMappingURL=amp-iframe-0.1.js.map + diff --git a/docker/tanner/snare/dist/pages/8/8ec1660cd4eda74cbb6edf77c842bad9 b/docker/tanner/snare/dist/pages/8/8ec1660cd4eda74cbb6edf77c842bad9 new file mode 100644 index 000000000..f0f442f5a Binary files /dev/null and b/docker/tanner/snare/dist/pages/8/8ec1660cd4eda74cbb6edf77c842bad9 differ diff --git a/docker/tanner/snare/dist/pages/8/92859a05b36f5e050665d74674997816 b/docker/tanner/snare/dist/pages/8/92859a05b36f5e050665d74674997816 new file mode 100644 index 000000000..1a77d9f57 Binary files /dev/null and b/docker/tanner/snare/dist/pages/8/92859a05b36f5e050665d74674997816 differ diff --git a/docker/tanner/snare/dist/pages/8/955e9ba270f49d4139071491eb8567d2 b/docker/tanner/snare/dist/pages/8/955e9ba270f49d4139071491eb8567d2 new file mode 100644 index 000000000..173fd577f --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/955e9ba270f49d4139071491eb8567d2 @@ -0,0 +1,143 @@ + + + + + +Using the Ghost editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+

Using the Ghost editor

+ +
+
+ +
+
+

Ghost uses a language called Markdown to format text.

+

When you go to edit a post and see special characters and colours intertwined between the words, those are Markdown shortcuts which tell Ghost what to do with the words in your document. The biggest benefit of Markdown is that you can quickly apply formatting as you type, without needing to pause.

+

At the bottom of the editor, you'll find a toolbar with basic formatting options to help you get started as easily as possible. You'll also notice that there's a ? icon, which contains more advanced shortcuts.

+

For now, though, let's run you through some of the basics. You'll want to make sure you're editing this post in order to see all the Markdown we've used.

+

Formatting text

+

The most common shortcuts are of course, bold text, italic text, and hyperlinks. These generally make up the bulk of any document. You can type the characters out, but you can also use keyboard shortcuts.

+
    +
  • CMD/Ctrl + B for Bold
  • +
  • CMD/Ctrl + I for Italic
  • +
  • CMD/Ctrl + K for a Link
  • +
  • CMD/Ctrl + H for a Heading (Press multiple times for h2/h3/h4/etc)
  • +
+

With just a couple of extra characters here and there, you're well on your way to creating a beautifully formatted story.

+

Inserting images

+

Images in Markdown look just the same as links, except they're prefixed with an exclamation mark, like this:

+

![Image description](/path/to/image.jpg)

+

+

Most Markdown editors don't make you type this out, though. In Ghost you can click on the image icon in the toolbar at the bottom of the editor, or you can just click and drag an image from your desktop directly into the editor. Both will upload the image for you and generate the appropriate Markdown.

+

Important Note: Ghost does not currently have automatic image resizing, so it's always a good idea to make sure your images aren't gigantic files before uploading them to Ghost.

+

Making lists

+

Lists in HTML are a formatting nightmare, but in Markdown they become an absolute breeze with just a couple of characters and a bit of smart automation. For numbered lists, just write out the numbers. For bullet lists, just use * or - or +. Like this:

+
    +
  1. Crack the eggs over a bowl
  2. +
  3. Whisk them together
  4. +
  5. Make an omelette
  6. +
+

or

+
    +
  • Remember to buy milk
  • +
  • Feed the cat
  • +
  • Come up with idea for next story
  • +
+

Adding quotes

+

When you want to pull out a particularly good excerpt in the middle of a piece, you can use > at the beginning of a paragraph to turn it into a Blockquote. You might've seen this formatting before in email clients.

+
+

A well placed quote guides a reader through a story, helping them to understand the most important points being made

+
+

All themes handles blockquotes slightly differently. Sometimes they'll look better kept shorter, while other times you can quote fairly hefty amounts of text and get away with it. Generally, the safest option is to use blockquotes sparingly.

+

Dividing things up

+

If you're writing a piece in parts and you just feel like you need to divide a couple of sections distinctly from each other, a horizontal rule might be just what you need. Dropping --- on a new line will create a sleek divider, anywhere you want it.

+
+

This should get you going with the vast majority of what you need to do in the editor, but if you're still curious about more advanced tips then check out the Advanced Markdown Guide - or if you'd rather learn about how Ghost taxononomies work, we've got a overview of how to use Ghost tags.

+
+
+
+
+ + + diff --git a/docker/tanner/snare/dist/pages/8/96dfe3a279942cee47fc2d858ccc6e26 b/docker/tanner/snare/dist/pages/8/96dfe3a279942cee47fc2d858ccc6e26 new file mode 100644 index 000000000..84132e0c7 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/96dfe3a279942cee47fc2d858ccc6e26 @@ -0,0 +1,2 @@ +a,abbr,acronym,address,applet,article,aside,audio,big,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,ul,var,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}img{max-width:100%}html{box-sizing:border-box;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}a{background-color:transparent}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn,em,i{font-style:italic}h1{margin:.67em 0;font-size:2em}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}mark{background-color:#fdffb6}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;color:inherit;font:inherit}button{overflow:visible;border:none}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input:focus{outline:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{padding:0;border:0}textarea{overflow:auto}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}html{overflow-y:scroll;font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body,html{overflow-x:hidden}body{color:#3c484e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1.5rem;line-height:1.6em;font-weight:400;font-style:normal;letter-spacing:0;text-rendering:optimizeLegibility;background:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-font-feature-settings:"liga" on}::-moz-selection{text-shadow:none;background:#cbeafb}::selection{text-shadow:none;background:#cbeafb}hr{position:relative;display:block;width:100%;margin:2.5em 0 3.5em;padding:0;height:1px;border:0;border-top:1px solid #e3e9ed}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{margin:0;padding:0;border:0}textarea{resize:vertical}blockquote,dl,ol,p,ul{margin:0 0 1.5em}ol,ul{padding-left:1.3em;padding-right:1.5em}ol ol,ol ul,ul ol,ul ul{margin:.5em 0 1em}ul{list-style:disc}ol{list-style:decimal}ol,ul{max-width:100%}li{margin:.5em 0;padding-left:.3em;line-height:1.6em}dt{float:left;margin:0 20px 0 0;width:120px;color:#15171a;font-weight:500;text-align:right}dd{margin:0 0 5px;text-align:left}blockquote{margin:1.5em 0;padding:0 1.6em;border-left:.5em solid #e5eff5}blockquote p{margin:.8em 0;font-size:1.2em;font-weight:300}blockquote small{display:inline-block;margin:.8em 0 .8em 1.5em;font-size:.9em;opacity:.8}blockquote small:before{content:"\2014 \00A0"}blockquote cite{font-weight:700}blockquote cite a{font-weight:400}a{color:#26a8ed;text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4,h5,h6{margin-top:0;line-height:1.15;font-weight:700;text-rendering:optimizeLegibility}h1{margin:0 0 .5em;font-size:5rem;font-weight:700}@media (max-width:500px){h1{font-size:2.2rem}}h2{margin:1.5em 0 .5em;font-size:2rem}@media (max-width:500px){h2{font-size:1.8rem}}h3{margin:1.5em 0 .5em;font-size:1.8rem;font-weight:500}@media (max-width:500px){h3{font-size:1.7rem}}h4{margin:1.5em 0 .5em;font-size:1.6rem;font-weight:500}h5,h6{margin:1.5em 0 .5em;font-size:1.4rem;font-weight:500}body{background:#f4f8fb}.img{display:block;width:100%;height:100%;background-position:50%;background-size:cover;border-radius:100%}.hidden{visibility:hidden;position:absolute;text-indent:-9999px}.site-wrapper{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:100vh}.site-main{z-index:100;-ms-flex-positive:1;flex-grow:1}.outer{position:relative;padding:0 4vw}.inner{margin:0 auto;max-width:1040px;width:100%}@media (min-width:900px){.author-template .post-feed,.home-template .post-feed,.tag-template .post-feed{margin-top:-70px;padding-top:0}.home-template .site-nav{position:relative;top:-70px}}.site-header{position:relative;padding-top:12px;padding-bottom:12px;color:#fff;background:#090a0b no-repeat 50%;background-size:cover}.site-header:before{bottom:0;background:rgba(0,0,0,.18)}.site-header:after,.site-header:before{content:"";position:absolute;top:0;right:0;left:0;z-index:10;display:block}.site-header:after{bottom:auto;height:80px;background:linear-gradient(rgba(0,0,0,.1),transparent)}.site-header.no-cover:after,.site-header.no-cover:before{display:none}.site-header-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;padding:10vw 4vw;min-height:200px;max-height:450px;text-align:center}.site-title{z-index:10;margin:0;padding:0;font-size:3.8rem;font-weight:700}.site-logo{max-height:45px}.site-description{z-index:10;margin:0;padding:5px 0;font-size:2.2rem;font-weight:300;letter-spacing:.5px;opacity:.8}@media (max-width:500px){.site-title{font-size:3rem}.site-description{font-size:1.8rem}}.site-nav{position:relative;z-index:300;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:start;align-items:flex-start;height:40px;font-size:1.2rem}.site-nav,.site-nav-left{display:-ms-flexbox;display:flex;overflow-y:hidden}.site-nav-left{-ms-flex-align:center;align-items:center;overflow-x:auto;-webkit-overflow-scrolling:touch;margin-right:10px;padding-bottom:80px;letter-spacing:.4px;white-space:nowrap;-ms-overflow-scrolling:touch}.site-nav-logo{-ms-flex-negative:0;flex-shrink:0;display:block;margin-right:24px;padding:11px 0;color:#fff;font-size:1.7rem;line-height:1em;font-weight:700;letter-spacing:-.5px}.site-nav-logo:hover{text-decoration:none}.site-nav-logo img{display:block;width:auto;height:21px}.nav{display:-ms-flexbox;display:flex;margin:0 0 0 -12px;padding:0;list-style:none}.nav li{padding:0;text-transform:uppercase}.nav li,.nav li a{display:block;margin:0}.nav li a{padding:10px 12px;color:#fff;opacity:.8}.nav li a:hover{text-decoration:none;opacity:1}.site-nav-right{height:40px}.site-nav-right,.social-links{-ms-flex-negative:0;flex-shrink:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.social-links a:last-of-type{padding-right:20px}.social-link{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;margin:0;padding:10px;color:#fff;opacity:.8}.social-link:hover{opacity:1}.social-link svg{height:1.8rem;fill:#fff}.social-link-fb svg{height:1.5rem}.social-link-wb svg{height:1.6rem}.social-link-wb svg path{stroke:#fff}.social-link-rss svg{height:1.9rem}.subscribe-button{display:block;padding:4px 10px;border:1px solid #fff;color:#fff;font-size:1.2rem;line-height:1em;border-radius:10px;opacity:.8}.subscribe-button:hover{text-decoration:none;opacity:1}.rss-button{opacity:.8}.rss-button:hover{opacity:1}.rss-button svg{margin-bottom:1px;height:2.1rem;fill:#fff}@media (max-width:700px){.site-header{padding-right:0;padding-left:0}.site-nav-left{margin-right:0;padding-left:4vw}.site-nav-right{display:none}}.post-feed{position:relative;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0 -20px;padding:40px 0 0}.post-card,.post-feed{display:-ms-flexbox;display:flex}.post-card{-ms-flex:1 1 300px;flex:1 1 300px;-ms-flex-direction:column;flex-direction:column;overflow:hidden;margin:0 20px 40px;min-height:300px;background:#fff 50%;background-size:cover;border-radius:5px;box-shadow:8px 14px 38px rgba(39,44,49,.06),1px 3px 8px rgba(39,44,49,.03);transition:all .5s ease}.post-card:hover{box-shadow:8px 28px 50px rgba(39,44,49,.07),1px 6px 12px rgba(39,44,49,.04);transition:all .4s ease;transform:translate3D(0,-1px,0) scale(1.02)}.post-card-image-link{position:relative;display:block;overflow:hidden;border-radius:5px 5px 0 0}.post-card-image{width:auto;height:200px;background:#c5d2d9 no-repeat 50%;background-size:cover}.post-card-content-link{position:relative;-ms-flex-positive:1;flex-grow:1;display:block;padding:25px 25px 0;color:#15171a}.post-card-content-link:hover{text-decoration:none}.post-card-tags{display:block;margin-bottom:4px;color:#738a94;font-size:1.2rem;line-height:1.15em;font-weight:500;letter-spacing:.5px;text-transform:uppercase}.post-card-title{margin-top:0}.post-card-content{-ms-flex-positive:1;flex-grow:1;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between}.post-card-excerpt{font-family:Georgia,serif}.post-card-meta{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:end;align-items:flex-end;padding:0 25px 25px}.author-profile-image,.avatar-wrapper{display:block;width:100%;height:100%;background:#e3e9ed;border-radius:100%;object-fit:cover}.post-card-meta .avatar-wrapper,.post-card-meta .profile-image-wrapper{position:relative}.author-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin:0;padding:0;list-style:none}.author-list-item{position:relative;-ms-flex-negative:0;flex-shrink:0;margin:0;padding:0}.author-list-item:first-child{z-index:10}.author-list-item:nth-child(2){z-index:9}.author-list-item:nth-child(3){z-index:8}.author-list-item:nth-child(4){z-index:7}.author-list-item:nth-child(5){z-index:6}.author-list-item:nth-child(6){z-index:5}.author-list-item:nth-child(7){z-index:4}.author-list-item:nth-child(8){z-index:3}.author-list-item:nth-child(9){z-index:2}.author-list-item:nth-child(10){z-index:1}.static-avatar{margin:0 -5px;width:34px;height:34px}.moving-avatar,.static-avatar{display:block;overflow:hidden;border:2px solid #fff;border-radius:100%}.moving-avatar{margin:0 -6px;width:56px;height:56px;transition:all .5s cubic-bezier(.4,.01,.165,.99) .7s}@media (min-width:800px){.author-list:hover .moving-avatar{margin:0;transition:all .3s cubic-bezier(.4,.01,.165,.99)}}.author-name-tooltip{position:absolute;bottom:105%;z-index:999;display:block;padding:2px 8px;color:#fff;font-size:1.2rem;letter-spacing:.2px;white-space:nowrap;background:#15171a;border-radius:3px;box-shadow:0 12px 26px rgba(39,44,49,.08),1px 3px 8px rgba(39,44,49,.03);opacity:0;transition:all .3s cubic-bezier(.4,.01,.165,.99);transform:translateY(6px);pointer-events:none}.author-list-item:hover .author-name-tooltip{opacity:1;transform:translateY(0)}@media (max-width:650px){.author-name-tooltip{display:none}}.reading-time{-ms-flex-negative:0;flex-shrink:0;margin-left:20px;color:#738a94;font-size:1.2rem;line-height:33px;font-weight:500;letter-spacing:.5px;text-transform:uppercase}@media (min-width:795px){.home-template .post-feed .post-card:nth-child(6n+1):not(.no-image){-ms-flex:1 1 100%;flex:1 1 100%;-ms-flex-direction:row;flex-direction:row}.home-template .post-feed .post-card:nth-child(6n+1):not(.no-image) .post-card-image-link{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;border-radius:5px 0 0 5px}.home-template .post-feed .post-card:nth-child(6n+1):not(.no-image) .post-card-image{position:absolute;width:100%;height:100%}.home-template .post-feed .post-card:nth-child(6n+1):not(.no-image) .post-card-content{-ms-flex:0 1 357px;flex:0 1 357px}.home-template .post-feed .post-card:nth-child(6n+1):not(.no-image) h2{font-size:2.6rem}.home-template .post-feed .post-card:nth-child(6n+1):not(.no-image) p{font-size:1.8rem;line-height:1.55em}.home-template .post-feed .post-card:nth-child(6n+1):not(.no-image) .post-card-content-link{padding:30px 40px 0}.home-template .post-feed .post-card:nth-child(6n+1):not(.no-image) .post-card-meta{padding:0 40px 30px}}.home-template .site-header:after{display:none}@media (max-width:650px){.post-feed{padding-top:5vw}.post-card{margin:0 20px 5vw}}.page-template .site-main,.post-template .site-main{padding-bottom:4vw;background:#fff}.post-full{position:relative;z-index:50}.post-full-header{margin:0 auto;padding:6vw 3vw 3vw;max-width:1040px;text-align:center}@media (max-width:500px){.post-full-header{padding:14vw 3vw 10vw}}.post-full-meta{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;color:#738a94;font-size:1.4rem;font-weight:600;text-transform:uppercase}.post-full-meta-date{color:#3eb0ef}.post-full-title{margin:0;color:#090a0b}.date-divider{display:inline-block;margin:0 6px 1px}.post-full-image{margin:0 -10vw -165px;height:800px;background:#c5d2d9 50%;background-size:cover;border-radius:5px}@media (max-width:1170px){.post-full-image{margin:0 -4vw -100px;height:600px;border-radius:0}}@media (max-width:800px){.post-full-image{height:400px}}.post-full-content{position:relative;margin:0 auto;padding:70px 100px 0;min-height:230px;font-family:Georgia,serif;font-size:2.2rem;line-height:1.6em;background:#fff}@media (max-width:1170px){.post-full-content{padding:5vw 7vw 0}}@media (max-width:800px){.post-full-content{font-size:1.9rem}}.post-full-content:before{left:-5px;transform:rotate(-5deg)}.post-full-content:after,.post-full-content:before{content:"";position:absolute;top:15px;z-index:-1;display:block;width:20px;height:200px;background:rgba(39,44,49,.15);filter:blur(5px)}.post-full-content:after{right:-5px;transform:rotate(5deg)}.no-image .post-full-content{padding-top:0}.no-image .post-full-content:after,.no-image .post-full-content:before{display:none}.footnotes,.post-full-comments,.post-full-content blockquote,.post-full-content dl,.post-full-content h1,.post-full-content h2,.post-full-content h3,.post-full-content h4,.post-full-content h5,.post-full-content h6,.post-full-content ol,.post-full-content p,.post-full-content pre,.post-full-content ul{min-width:100%}.post-full-content li{word-break:break-word}.post-full-content li p{margin:0}.post-full-content a{color:#000;box-shadow:inset 0 -1px 0 #3eb0ef}.post-full-content a:hover{color:#3eb0ef;text-decoration:none}.post-full-content em,.post-full-content strong{color:#090a0b}.post-full-content small{display:inline-block;line-height:1.6em}.post-full-content li:first-child{margin-top:0}.post-full-content img,.post-full-content video{display:block;margin:1.5em auto;max-width:1040px}@media (max-width:1040px){.post-full-content img,.post-full-content video{width:100%}}.post-full-content img[src$="#full"]{max-width:none;width:100vw}.post-full-content img+br+small{display:block;margin-top:-3em;margin-bottom:1.5em;text-align:center}.post-full-content iframe{margin:0 auto}.post-full-content blockquote{margin:0 0 1.5em;padding:0 1.5em;border-left:3px solid #3eb0ef}.post-full-content blockquote p{margin:0 0 1em;color:inherit;font-size:inherit;line-height:inherit;font-style:italic}.post-full-content blockquote p:last-child{margin-bottom:0}.post-full-content code{padding:0 5px 2px;font-size:.8em;line-height:1em;font-weight:400!important;background:#e5eff5;border-radius:3px}.post-full-content pre{overflow-x:auto;margin:1.5em 0 3em;padding:20px;max-width:100%;border:1px solid #000;color:#e5eff5;font-size:1.4rem;line-height:1.5em;background:#0e0f11;border-radius:5px}.post-full-content pre code{padding:0;font-size:inherit;line-height:inherit;background:transparent}.post-full-content pre code *{color:inherit}.post-full-content .fluid-width-video-wrapper{margin:1.5em 0 3em}.post-full-content hr{margin:4vw 0}.post-full-content hr:after{content:"";position:absolute;top:-15px;left:50%;display:block;margin-left:-10px;width:1px;height:30px;background:#e3e9ed;box-shadow:0 0 0 5px #fff;transform:rotate(45deg)}.post-full-content h1,.post-full-content h2,.post-full-content h3,.post-full-content h4,.post-full-content h5,.post-full-content h6{color:#090a0b;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.post-full-content h1{margin:.5em 0 .2em;font-size:4.6rem;font-weight:700}@media (max-width:500px){.post-full-content h1{font-size:2.8rem}}.post-full-content h2{margin:.5em 0 .2em;font-size:3.6rem;font-weight:700}@media (max-width:500px){.post-full-content h2{font-size:2.6rem}}.post-full-content h3{margin:.5em 0 .2em;font-size:2.8rem;font-weight:700}@media (max-width:500px){.post-full-content h3{font-size:2.2rem}}.post-full-content h4{margin:.5em 0 .2em;font-size:2.8rem;font-weight:700}@media (max-width:500px){.post-full-content h4{font-size:2.2rem}}.post-full-content h5{display:block;margin:.5em 0;padding:1em 0 1.5em;border:0;color:#3eb0ef;font-family:Georgia,serif;font-size:3.2rem;line-height:1.35em;text-align:center}@media (min-width:1180px){.post-full-content h5{max-width:1060px;width:100vw}}@media (max-width:500px){.post-full-content h5{padding:0 0 .5em;font-size:2.2rem}}.post-full-content h6{margin:.5em 0 .2em;font-size:2.3rem;font-weight:700}@media (max-width:500px){.post-full-content h6{font-size:2rem}}.footnotes-sep{margin-bottom:30px}.footnotes{font-size:1.5rem}.footnotes p{margin:0}.footnote-backref{color:#3eb0ef!important;font-size:1.2rem;font-weight:700;text-decoration:none!important;box-shadow:none!important}@media (max-width:500px){.post-full-meta{font-size:1.2rem;line-height:1.3em}.post-full-title{font-size:2.9rem}.post-full-image{margin-bottom:4vw;height:350px}.post-full-content{padding:0}.post-full-content:after,.post-full-content:before{display:none}}.post-full-content table{display:inline-block;overflow-x:auto;margin:.5em 0 2.5em;max-width:100%;width:auto;border-spacing:0;border-collapse:collapse;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1.6rem;white-space:nowrap;vertical-align:top;-webkit-overflow-scrolling:touch;background:radial-gradient(ellipse at left,rgba(0,0,0,.2) 0,transparent 75%) 0,radial-gradient(ellipse at right,rgba(0,0,0,.2) 0,transparent 75%) 100%;background-attachment:scroll,scroll;background-size:10px 100%,10px 100%;background-repeat:no-repeat}.post-full-content table td:first-child{background-image:linear-gradient(90deg,#fff 50%,hsla(0,0%,100%,0));background-size:20px 100%;background-repeat:no-repeat}.post-full-content table td:last-child{background-image:linear-gradient(270deg,#fff 50%,hsla(0,0%,100%,0));background-position:100% 0;background-size:20px 100%;background-repeat:no-repeat}.post-full-content table th{color:#15171a;font-size:1.2rem;font-weight:700;letter-spacing:.2px;text-align:left;text-transform:uppercase;background-color:#f4f8fb}.post-full-content table td,.post-full-content table th{padding:6px 12px;border:1px solid #e3ecf3}.subscribe-form{margin:1.5em 0;padding:6.5vw 7vw 7vw;border:1px solid #edf4f8;text-align:center;background:#f4f8fb;border-radius:7px}.subscribe-form-title{margin:0 0 3px;padding:0;color:#15171a;font-size:3.5rem;line-height:1;font-weight:700}.subscribe-form p{margin-bottom:1em;color:#738a94;font-size:2.2rem;line-height:1.55em;letter-spacing:.2px}.subscribe-form form{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;margin:0 auto;max-width:420px}.subscribe-form .form-group{-ms-flex-positive:1;flex-grow:1}.subscribe-email{display:block;padding:10px;width:100%;border:1px solid #dae2e7;color:#738a94;font-size:1.8rem;line-height:1em;font-weight:400;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;border-radius:5px;transition:border-color .15s linear;-webkit-appearance:none}.subscribe-form button{display:inline-block;margin:0 0 0 10px;padding:0 20px;height:41px;outline:none;color:#fff;font-size:1.5rem;line-height:37px;font-weight:400;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.1);background:linear-gradient(#4fb7f0,#29a0e0 60%,#29a0e0 90%,#36a6e2);border-radius:5px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.14);-webkit-font-smoothing:subpixel-antialiased}.subscribe-form button:active,.subscribe-form button:focus{background:#209cdf}@media (max-width:650px){.subscribe-form-title{font-size:2.4rem}.subscribe-form p{font-size:1.6rem}}@media (max-width:500px){.subscribe-form form{-ms-flex-direction:column;flex-direction:column}.subscribe-form .form-group{width:100%}.subscribe-form button{margin:10px 0 0;width:100%}}.post-full-footer{-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;margin:0 auto;padding:3vw 0 6vw;max-width:840px}.author-card,.post-full-footer{display:-ms-flexbox;display:flex}.author-card .author-profile-image,.author-card .avatar-wrapper{width:60px;height:60px}.author-card-name{margin:8px 0 2px;padding:0;font-size:2rem}.author-card-name a{color:#15171a;font-weight:700}.author-card-name a:hover{text-decoration:none}.author-card-content p{margin:0;color:#738a94;line-height:1.3em}.post-full-footer-right{-ms-flex-negative:0;flex-shrink:0;margin-left:20px}.author-card-button{display:block;padding:9px 16px;border:1px solid #aebbc1;color:#738a94;font-size:1.2rem;line-height:1;font-weight:500;border-radius:20px;transition:all .2s ease}.author-card-button:hover{border-color:#3eb0ef;color:#3eb0ef;text-decoration:none}.post-full-authors{-ms-flex-positive:1;flex-grow:1;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;margin-top:20px;padding-top:40px;border-top:1px solid #e3e9ed}.post-full-authors-content{margin-bottom:20px}.post-full-authors-content p{margin-bottom:0;color:#738a94;font-size:1.4rem;letter-spacing:.2px;text-align:center;text-transform:uppercase}.post-full-authors-content a{display:inline-block;color:#424852;font-size:1.4rem;font-weight:600;text-transform:uppercase}.post-full-footer .author-list{-ms-flex-pack:center;justify-content:center;padding:10px 20px}.author-card .author-profile-image,.author-card .avatar-wrapper{position:relative;margin-right:15px}.author-list-item .author-card{position:absolute;bottom:130%;left:50%;z-index:300;display:block;margin-left:-160px;width:320px;font-size:1.4rem;letter-spacing:.2px;background:#fff;border-radius:6px;box-shadow:0 12px 26px rgba(39,44,49,.08),1px 3px 8px rgba(39,44,49,.03);opacity:0;transition:all .3s cubic-bezier(.4,.01,.165,.99);transform:scale(.98) translateY(15px);pointer-events:none}.author-list-item .author-card:before{content:"";position:absolute;top:100%;left:50%;display:block;margin-left:-12px;width:0;height:0;border-top:12px solid #fff;border-right:12px solid transparent;border-left:12px solid transparent}.author-list-item .author-card.hovered{opacity:1;transform:scale(1) translateY(0);pointer-events:auto}.author-card .basic-info{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;padding:30px 20px 20px;color:#fff;background:#15171a;border-radius:6px 6px 0 0}.author-card .basic-info h2{margin:1em 0 .5em}.author-card .bio{padding:20px 20px 0}@media (max-width:650px){.author-list-item .author-card{display:none}}.basic-info .author-profile-image,.basic-info .avatar-wrapper{margin:0;width:88px;height:88px;border:none}.basic-info .avatar-wrapper{position:relative;background:rgba(229,239,245,.1)}.basic-info .avatar-wrapper svg{margin:0;width:88px;height:88px;opacity:.15}.post-full-comments{margin:0 auto;max-width:840px}.read-next-feed{-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0 -20px;padding:40px 0 0}.read-next-card,.read-next-feed{display:-ms-flexbox;display:flex}.read-next-card{position:relative;-ms-flex:1 1 300px;flex:1 1 300px;-ms-flex-direction:column;flex-direction:column;overflow:hidden;margin:0 20px 40px;padding:25px;color:#fff;background:#15171a 50%;background-size:cover;border-radius:5px;box-shadow:8px 14px 38px rgba(39,44,49,.06),1px 3px 8px rgba(39,44,49,.03)}.read-next-card:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;display:block;background:linear-gradient(135deg,rgba(0,40,60,.8),rgba(0,20,40,.7));border-radius:5px;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.read-next-card-header{position:relative;z-index:50;padding-top:20px;text-align:center}.read-next-card-header-sitetitle{display:block;font-size:1.3rem;line-height:1.3em;opacity:.8}.read-next-card-header-title{margin:0;padding:0 20px;color:#fff;font-size:3rem;line-height:1.2em;letter-spacing:1px}.read-next-card-header-title a{color:#fff;font-weight:300;text-decoration:none}.read-next-card-header-title a:hover{text-decoration:none}.read-next-divider{position:relative;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;height:80px}.read-next-divider svg{width:40px;fill:transparent;stroke:#fff;stroke-width:.5px;stroke-opacity:.65}.read-next-card-content{position:relative;z-index:50;-ms-flex-positive:1;flex-grow:1;display:-ms-flexbox;display:flex;font-size:1.7rem}.read-next-card-content ul{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:0 auto;padding:0;text-align:center;list-style:none}.read-next-card-content li{margin:0;padding:0;font-size:1.6rem;line-height:1.25em;font-weight:200;letter-spacing:-.5px}.read-next-card-content li a{display:block;padding:20px 0;border-bottom:1px solid hsla(0,0%,100%,.3);color:#fff;font-weight:500;vertical-align:top;transition:opacity .3s ease}.read-next-card-content li:first-of-type a{padding-top:10px}.read-next-card-content li a:hover{opacity:1}.read-next-card-footer{position:relative;margin:15px 0 3px;text-align:center}.read-next-card-footer a{color:#fff}.floating-header{visibility:hidden;position:fixed;top:0;right:0;left:0;z-index:1000;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:60px;border-bottom:1px solid rgba(0,0,0,.06);background:hsla(0,0%,100%,.95);transition:all .5s cubic-bezier(.19,1,.22,1);transform:translate3d(0,-120%,0)}.floating-active{visibility:visible;transition:all .5s cubic-bezier(.22,1,.27,1);transform:translateZ(0)}.floating-header-logo{overflow:hidden;margin:0 0 0 20px;font-size:1.6rem;line-height:1em;letter-spacing:-1px;text-overflow:ellipsis;white-space:nowrap}.floating-header-logo a{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;color:#15171a;line-height:1.1em;font-weight:700}.floating-header-logo a:hover{text-decoration:none}.floating-header-logo img{margin:0 10px 0 0;max-height:20px}.floating-header-divider{margin:0 5px;line-height:1em}.floating-header-title{-ms-flex:1;flex:1;overflow:hidden;margin:0;color:#2e2e2e;font-size:1.6rem;line-height:1.3em;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.floating-header-share{-ms-flex-pack:end;justify-content:flex-end;padding-left:2%;font-size:1.3rem;line-height:1}.floating-header-share,.floating-header-share a{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.floating-header-share a{-ms-flex-pack:center;justify-content:center}.floating-header-share svg{width:auto;height:16px;fill:#fff}.floating-header-share-label{-ms-flex-negative:0;flex-shrink:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;margin-right:10px;color:rgba(0,0,0,.7);font-weight:500}.floating-header-share-label svg{margin:0 5px 0 10px;width:18px;height:18px;stroke:rgba(0,0,0,.7);transform:rotate(90deg)}.floating-header-share-fb,.floating-header-share-tw{display:block;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;width:60px;height:60px;color:#fff;line-height:48px;text-align:center;transition:all .5s cubic-bezier(.19,1,.22,1)}.floating-header-share-tw{background:#33b1ff}.floating-header-share-fb{background:#005e99}.progress{position:absolute;right:0;bottom:-1px;left:0;width:100%;height:2px;border:none;color:#3eb0ef;background:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.progress::-webkit-progress-bar{background-color:transparent}.progress::-webkit-progress-value{background-color:#3eb0ef}.progress::-moz-progress-bar{background-color:#3eb0ef}.progress-container{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background-color:transparent}.progress-bar{display:block;width:50%;height:inherit;background-color:#3eb0ef}@media (max-width:900px){.floating-header{height:40px}.floating-header-logo,.floating-header-title{font-size:1.5rem}.floating-header-share-fb,.floating-header-share-tw{width:40px;height:40px;line-height:38px}}@media (max-width:800px){.floating-header-logo{margin-left:10px}.floating-header-logo a{color:#2e2e2e}.floating-header-divider,.floating-header-title{visibility:hidden}}@media (max-width:450px){.floating-header-share-label{display:none}}.post-content{max-width:920px}.kg-card-markdown,.post-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center}.kg-card-markdown{max-width:100%}.post-template .kg-card-markdown>p:first-child,.post-template .post-content>p:first-child{font-size:1.25em;line-height:1.5em}.post-full-content .kg-image{max-width:100%}.post-full-image+.post-full-content .kg-content :first-child .kg-image{width:100%}.post-full-content .kg-width-wide .kg-image{max-width:1040px}.post-full-content .kg-width-full .kg-image{max-width:100vw}.post-content figcaption{font-size:80%;line-height:1.6em;text-align:center}.kg-image-card{margin:0 0 1.5em}.kg-image-card figcaption{margin:-1em 0 1.5em}.kg-embed-card{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;margin:1.5em 0 3em;min-width:100%}.kg-embed-card figcaption{margin:.5em 0 0}.kg-embed-card .fluid-width-video-wrapper{margin:0}.kg-image-full+figcaption{padding:0 1.5em}@media (max-width:1040px){.post-full-content .kg-width-full .kg-image{width:100vw}}.site-header-content .author-profile-image{z-index:10;-ms-flex-negative:0;flex-shrink:0;margin:0 0 20px;width:100px;height:100px;box-shadow:0 0 0 6px hsla(0,0%,100%,.1)}.site-header-content .author-bio{z-index:10;-ms-flex-negative:0;flex-shrink:0;margin:5px 0 10px;max-width:600px;font-size:2rem;line-height:1.3em;font-weight:300;letter-spacing:.5px;opacity:.8}.site-header-content .author-meta{z-index:10;-ms-flex-negative:0;flex-shrink:0;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;margin:0 0 10px;font-family:Georgia,serif;font-style:italic}.site-header-content .author-location svg{height:1.9rem;stroke:#fff}.site-header-content .bull{display:inline-block;margin:0 12px;opacity:.5}.site-header-content .social-link:first-of-type{padding-left:4px}@media (max-width:500px){.site-header-content .author-bio{font-size:1.8rem;line-height:1.15em;letter-spacing:0}.author-location,.author-stats{display:none}}.error-template .site-main{padding:7vw 4vw}.site-nav-center{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;text-align:center}.site-nav-center .site-nav-logo{margin-right:0}.error-message{text-align:center}.error-code{margin:0;font-size:12vw;line-height:1em;letter-spacing:-5px;opacity:.3}.error-description{margin:0;color:#738a94;font-size:3rem;line-height:1.3em;font-weight:400}@media (max-width:800px){.error-description{margin:5px 0 0;font-size:1.8rem}}.error-link{display:inline-block;margin-top:5px}.error-template .post-feed{padding-top:0}.subscribe-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9000;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;background:rgba(0,25,40,.97);opacity:0;transition:opacity .2s ease-in;pointer-events:none;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.subscribe-overlay:target{opacity:1;pointer-events:auto}.subscribe-overlay-content{position:relative;z-index:9999;margin:0 0 5vw;padding:4vw;color:#fff;text-align:center}.subscribe-overlay-logo{position:fixed;top:23px;left:30px;height:30px}.subscribe-overlay-title{display:inline-block;margin:0 0 10px;font-size:6rem;line-height:1.15em}.subscribe-overlay-description{margin:0 auto 50px;max-width:650px;font-family:Georgia,serif;font-size:3rem;line-height:1.3em;font-weight:300;opacity:.8}.subscribe-overlay form{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;margin:0 auto;max-width:500px}.subscribe-overlay .form-group{-ms-flex-positive:1;flex-grow:1}.subscribe-overlay .subscribe-email{display:block;padding:14px 20px;width:100%;border:none;color:#738a94;font-size:2rem;line-height:1em;font-weight:400;letter-spacing:.5px;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;border-radius:8px;transition:border-color .15s linear;-webkit-appearance:none}.subscribe-email:focus{outline:0;border-color:#becdd5}.subscribe-overlay button{display:inline-block;margin:0 0 0 15px;padding:0 25px;height:52px;outline:none;color:#fff;font-size:1.7rem;line-height:37px;font-weight:400;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.1);background:linear-gradient(#4fb7f0,#29a0e0 60%,#29a0e0 90%,#36a6e2);border-radius:8px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.14);-webkit-font-smoothing:subpixel-antialiased}.subscribe-overlay button:active,.subscribe-overlay button:focus{background:#209cdf}.subscribe-overlay-close{position:absolute;top:0;right:0;bottom:0;left:0;display:block}.subscribe-overlay-close:before{transform:rotate(45deg)}.subscribe-overlay-close:after,.subscribe-overlay-close:before{content:"";position:absolute;top:40px;right:25px;display:block;width:30px;height:2px;background:#fff;opacity:.8}.subscribe-overlay-close:after{transform:rotate(-45deg)}.subscribe-overlay-close:hover{cursor:default}.site-footer{position:relative;padding-top:20px;padding-bottom:60px;color:#fff;background:#000}.site-footer-content{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;font-size:1.3rem}.site-footer-content,.site-footer-content a{color:hsla(0,0%,100%,.7)}.site-footer-content a:hover{color:#fff;text-decoration:none}.site-footer-nav{display:-ms-flexbox;display:flex}.site-footer-nav a{position:relative;margin-left:20px}.site-footer-nav a:before{content:"";position:absolute;top:11px;left:-11px;display:block;width:2px;height:2px;background:#fff;border-radius:100%}.site-footer-nav a:first-of-type:before{display:none}@media (max-width:650px){.site-footer-content{-ms-flex-direction:column;flex-direction:column}.site-footer-nav a:first-child{margin-left:0}} +/*# sourceMappingURL=screen.css.map */ diff --git a/docker/tanner/snare/dist/pages/8/9a5d0b02a7c07bdd949d1d3ad6c87d2b b/docker/tanner/snare/dist/pages/8/9a5d0b02a7c07bdd949d1d3ad6c87d2b new file mode 100644 index 000000000..2b226fa85 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/9a5d0b02a7c07bdd949d1d3ad6c87d2b @@ -0,0 +1,99 @@ + + + + + + + +user Blog + + + + + + + + diff --git a/docker/tanner/snare/dist/pages/8/ad2a60e58d60060ee239fa4d3148ae33 b/docker/tanner/snare/dist/pages/8/ad2a60e58d60060ee239fa4d3148ae33 new file mode 100644 index 000000000..f64e1a18b --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/ad2a60e58d60060ee239fa4d3148ae33 @@ -0,0 +1,126 @@ + + + + + +Organising your content with tags + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+

Organising your content with tags

+ +
+
+ +
+
+

Ghost has a single, powerful organisational taxonomy, called tags.

+

It doesn't matter whether you want to call them categories, tags, boxes, or anything else. You can think of Ghost tags a lot like Gmail labels. By tagging posts with one or more keyword, you can organise articles into buckets of related content.

+

Basic tagging

+

When you write a post, you can assign tags to help differentiate between categories of content. For example, you might tag some posts with News and other posts with Cycling, which would create two distinct categories of content listed on /tag/news/ and /tag/cycling/, respectively.

+

If you tag a post with both News and Cycling - then it appears in both sections.

+

Tag archives are like dedicated home-pages for each category of content that you have. They have their own pages, their own RSS feeds, and can support their own cover images and meta data.

+

The primary tag

+

Inside the Ghost editor, you can drag and drop tags into a specific order. The first tag in the list is always given the most importance, and some themes will only display the primary tag (the first tag in the list) by default. So you can add the most important tag which you want to show up in your theme, but also add a bunch of related tags which are less important.

+

News, Cycling, Bart Stevens, Extreme Sports

+

In this example, News is the primary tag which will be displayed by the theme, but the post will also still receive all the other tags, and show up in their respective archives.

+

Private tags

+

Sometimes you may want to assign a post a specific tag, but you don't necessarily want that tag appearing in the theme or creating an archive page. In Ghost, hashtags are private and can be used for special styling.

+

For example, if you sometimes publish posts with video content - you might want your theme to adapt and get rid of the sidebar for these posts, to give more space for an embedded video to fill the screen. In this case, you could use private tags to tell your theme what to do.

+

News, Cycling, #video

+

Here, the theme would assign the post publicly displayed tags of News, and Cycling - but it would also keep a private record of the post being tagged with #video.

+

In your theme, you could then look for private tags conditionally and give them special formatting:

+
{{#post}}
+    {{#has tag="#video"}}
+        ...markup for a nice big video post layout...
+    {{else}}
+        ...regular markup for a post...
+    {{/has}}
+{{/post}}
+
+

You can find documentation for theme development techniques like this and many more over on Ghost's extensive theme documentation.

+
+
+
+
+ + + diff --git a/docker/tanner/snare/dist/pages/8/b6ab5ca99c37db3eba159ccb46aae341 b/docker/tanner/snare/dist/pages/8/b6ab5ca99c37db3eba159ccb46aae341 new file mode 100644 index 000000000..644d35e27 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/b6ab5ca99c37db3eba159ccb46aae341 @@ -0,0 +1,4 @@ +/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"
","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), +null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + + + + + + +
+ +
+
+
+ + + + + + + +
+
+
+ +
+ + + + + + diff --git a/docker/tanner/snare/dist/pages/8/d33d50a409a95819f54bb8e7967d5ef8 b/docker/tanner/snare/dist/pages/8/d33d50a409a95819f54bb8e7967d5ef8 new file mode 100644 index 000000000..e7a07065b --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/d33d50a409a95819f54bb8e7967d5ef8 @@ -0,0 +1,237 @@ + + + + + + +Setting up your own Ghost theme + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +/ Getting Started +
+

Setting up your own Ghost theme

+
+
+
+
+
+

Creating a totally custom design for your publication

+

Ghost comes with a beautiful default theme called Casper, which is designed to be a clean, readable publication layout and can be easily adapted for most purposes. However, Ghost can also be completely themed to suit your needs. Rather than just giving you a few basic settings which act as a poor proxy for code, we just let you write code.

+

There are a huge range of both free and premium pre-built themes which you can get from the Ghost Theme Marketplace, or you can simply create your own from scratch.

+

marketplace

+
+

Anyone can write a completely custom Ghost theme, with just some solid knowledge of HTML and CSS

+
+

Ghost themes are written with a templating language called handlebars, which has a bunch of dynamic helpers to insert your data into template files. Like {{author.name}}, for example, outputs the name of the current author.

+

The best way to learn how to write your own Ghost theme is to have a look at the source code for Casper, which is heavily commented and should give you a sense of how everything fits together.

+
    +
  • default.hbs is the main template file, all contexts will load inside this file unless specifically told to use a different template.
  • +
  • post.hbs is the file used in the context of viewing a post.
  • +
  • index.hbs is the file used in the context of viewing the home page.
  • +
  • and so on
  • +
+

We've got full and extensive theme documentation which outlines every template file, context and helper that you can use.

+

If you want to chat with other people making Ghost themes to get any advice or help, there's also a themes section on our public Ghost forum.

+
+
+
+
+
+ + +
+

Ghost

+

You can delete this user to remove all the welcome posts

+
+
+
+Read More +
+
+
+
+
+ +
+ + +
Setting up your own Ghost theme
+
+
Share this + + +
+ + + + + + +
+ +
+ +
+
+
+ +
+ + + + + diff --git a/docker/tanner/snare/dist/pages/8/e09b8947de656d130c64210e9b28f07d b/docker/tanner/snare/dist/pages/8/e09b8947de656d130c64210e9b28f07d new file mode 100644 index 000000000..30c42a686 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/e09b8947de656d130c64210e9b28f07d @@ -0,0 +1,146 @@ + + + + + +Advanced Markdown tips + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+

Advanced Markdown tips

+ +
+
+ +
+
+

There are lots of powerful things you can do with the Ghost editor

+

If you've gotten pretty comfortable with all the basics of writing in Ghost, then you may enjoy some more advanced tips about the types of things you can do with Markdown!

+

As with the last post about the editor, you'll want to be actually editing this post as you read it so that you can see all the Markdown code we're using.

+

Special formatting

+

As well as bold and italics, you can also use some other special formatting in Markdown when the need arises, for example:

+
    +
  • strike through
  • +
  • highlight
  • +
  • *escaped characters*
  • +
+

Writing code blocks

+

There are two types of code elements which can be inserted in Markdown, the first is inline, and the other is block. Inline code is formatted by wrapping any word or words in back-ticks, like this. Larger snippets of code can be displayed across multiple lines using triple back ticks:

+
.my-link {
+    text-decoration: underline;
+}
+
+

If you want to get really fancy, you can even add syntax highlighting using Prism.js.

+

Full bleed images

+

One neat trick which you can use in Markdown to distinguish between different types of images is to add a #hash value to the end of the source URL, and then target images containing the hash with special styling. For example:

+

+

which is styled with...

+
img[src$="#full"] {
+    max-width: 100vw;
+}
+
+

This creates full-bleed images in the Casper theme, which stretch beyond their usual boundaries right up to the edge of the window. Every theme handles these types of things slightly differently, but it's a great trick to play with if you want to have a variety of image sizes and styles.

+

Reference lists

+

The quick brown fox, jumped over the lazy dog.

+

Another way to insert links in markdown is using reference lists. You might want to use this style of linking to cite reference material in a Wikipedia-style. All of the links are listed at the end of the document, so you can maintain full separation between content and its source or reference.

+

Creating footnotes

+

The quick brown fox[1] jumped over the lazy dog[2].

+

Footnotes are a great way to add additional contextual details when appropriate. Ghost will automatically add footnote content to the very end of your post.

+

Full HTML

+

Perhaps the best part of Markdown is that you're never limited to just Markdown. You can write HTML directly in the Ghost editor and it will just work as HTML usually does. No limits! Here's a standard YouTube embed code as an example:

+ +
+
+
    +
  1. Foxes are red ↩︎

    +
  2. +
  3. Dogs are usually not red ↩︎

    +
  4. +
+
+
+
+
+
+ + + diff --git a/docker/tanner/snare/dist/pages/8/e45ade28f21147129a3c634f10cdfa02 b/docker/tanner/snare/dist/pages/8/e45ade28f21147129a3c634f10cdfa02 new file mode 100644 index 000000000..3de935896 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/e45ade28f21147129a3c634f10cdfa02 @@ -0,0 +1,237 @@ + + + + + + +Welcome to Ghost + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +/ Getting Started +
+

Welcome to Ghost

+
+
+
+
+
+

Hey! Welcome to Ghost, it's great to have you :)

+

We know that first impressions are important, so we've populated your new site with some initial Getting Started posts that will help you get familiar with everything in no time. This is the first one!

+

There are a few things that you should know up-front:

+
    +
  1. +

    Ghost is designed for ambitious, professional publishers who want to actively build a business around their content. That's who it works best for. If you're using Ghost for some other purpose, that's fine too - but it might not be the best choice for you.

    +
  2. +
  3. +

    The entire platform can be modified and customized to suit your needs, which is very powerful, but doing so does require some knowledge of code. Ghost is not necessarily a good platform for beginners or people who just want a simple personal blog.

    +
  4. +
  5. +

    For the best experience we recommend downloading the Ghost Desktop App for your computer, which is the best way to access your Ghost site on a desktop device.

    +
  6. +
+

Ghost is made by an independent non-profit organisation called the Ghost Foundation. We are 100% self funded by revenue from our Ghost(Pro) service, and every penny we make is re-invested into funding further development of free, open source technology for modern journalism.

+

The main thing you'll want to read about next is probably: the Ghost editor.

+

Once you're done reading, you can simply delete the default Ghost user from your team to remove all of these introductory posts!

+
+
+
+
+
+ + +
+

Ghost

+

You can delete this user to remove all the welcome posts

+
+
+
+Read More +
+
+
+
+
+ +
+ + +
Welcome to Ghost
+
+
Share this + + +
+ + + + + + +
+ +
+ +
+
+
+ +
+ + + + + diff --git a/docker/tanner/snare/dist/pages/8/e91ec595a26a68dd828e2c7446e53733 b/docker/tanner/snare/dist/pages/8/e91ec595a26a68dd828e2c7446e53733 new file mode 100644 index 000000000..591754337 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/e91ec595a26a68dd828e2c7446e53733 @@ -0,0 +1,290 @@ + + + + + + +Using the Ghost editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +/ Getting Started +
+

Using the Ghost editor

+
+
+
+
+
+

Ghost uses a language called Markdown to format text.

+

When you go to edit a post and see special characters and colours intertwined between the words, those are Markdown shortcuts which tell Ghost what to do with the words in your document. The biggest benefit of Markdown is that you can quickly apply formatting as you type, without needing to pause.

+

At the bottom of the editor, you'll find a toolbar with basic formatting options to help you get started as easily as possible. You'll also notice that there's a ? icon, which contains more advanced shortcuts.

+

For now, though, let's run you through some of the basics. You'll want to make sure you're editing this post in order to see all the Markdown we've used.

+

Formatting text

+

The most common shortcuts are of course, bold text, italic text, and hyperlinks. These generally make up the bulk of any document. You can type the characters out, but you can also use keyboard shortcuts.

+
    +
  • CMD/Ctrl + B for Bold
  • +
  • CMD/Ctrl + I for Italic
  • +
  • CMD/Ctrl + K for a Link
  • +
  • CMD/Ctrl + H for a Heading (Press multiple times for h2/h3/h4/etc)
  • +
+

With just a couple of extra characters here and there, you're well on your way to creating a beautifully formatted story.

+

Inserting images

+

Images in Markdown look just the same as links, except they're prefixed with an exclamation mark, like this:

+

![Image description](/path/to/image.jpg)

+

Computer

+

Most Markdown editors don't make you type this out, though. In Ghost you can click on the image icon in the toolbar at the bottom of the editor, or you can just click and drag an image from your desktop directly into the editor. Both will upload the image for you and generate the appropriate Markdown.

+

Important Note: Ghost does not currently have automatic image resizing, so it's always a good idea to make sure your images aren't gigantic files before uploading them to Ghost.

+

Making lists

+

Lists in HTML are a formatting nightmare, but in Markdown they become an absolute breeze with just a couple of characters and a bit of smart automation. For numbered lists, just write out the numbers. For bullet lists, just use * or - or +. Like this:

+
    +
  1. Crack the eggs over a bowl
  2. +
  3. Whisk them together
  4. +
  5. Make an omelette
  6. +
+

or

+
    +
  • Remember to buy milk
  • +
  • Feed the cat
  • +
  • Come up with idea for next story
  • +
+

Adding quotes

+

When you want to pull out a particularly good excerpt in the middle of a piece, you can use > at the beginning of a paragraph to turn it into a Blockquote. You might've seen this formatting before in email clients.

+
+

A well placed quote guides a reader through a story, helping them to understand the most important points being made

+
+

All themes handles blockquotes slightly differently. Sometimes they'll look better kept shorter, while other times you can quote fairly hefty amounts of text and get away with it. Generally, the safest option is to use blockquotes sparingly.

+

Dividing things up

+

If you're writing a piece in parts and you just feel like you need to divide a couple of sections distinctly from each other, a horizontal rule might be just what you need. Dropping --- on a new line will create a sleek divider, anywhere you want it.

+
+

This should get you going with the vast majority of what you need to do in the editor, but if you're still curious about more advanced tips then check out the Advanced Markdown Guide - or if you'd rather learn about how Ghost taxononomies work, we've got a overview of how to use Ghost tags.

+
+
+
+
+
+ + +
+

Ghost

+

You can delete this user to remove all the welcome posts

+
+
+
+Read More +
+
+
+
+
+ +
+ + +
Using the Ghost editor
+
+
Share this + + +
+ + + + + + +
+ +
+ +
+
+
+ +
+ + + + + diff --git a/docker/tanner/snare/dist/pages/8/eb2b58d209a506af4e3130c04317c043 b/docker/tanner/snare/dist/pages/8/eb2b58d209a506af4e3130c04317c043 new file mode 100644 index 000000000..78bece2ce --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/eb2b58d209a506af4e3130c04317c043 @@ -0,0 +1,273 @@ + + + + + + +Organising your content with tags + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +/ Getting Started +
+

Organising your content with tags

+
+
+
+
+
+

Ghost has a single, powerful organisational taxonomy, called tags.

+

It doesn't matter whether you want to call them categories, tags, boxes, or anything else. You can think of Ghost tags a lot like Gmail labels. By tagging posts with one or more keyword, you can organise articles into buckets of related content.

+

Basic tagging

+

When you write a post, you can assign tags to help differentiate between categories of content. For example, you might tag some posts with News and other posts with Cycling, which would create two distinct categories of content listed on /tag/news/ and /tag/cycling/, respectively.

+

If you tag a post with both News and Cycling - then it appears in both sections.

+

Tag archives are like dedicated home-pages for each category of content that you have. They have their own pages, their own RSS feeds, and can support their own cover images and meta data.

+

The primary tag

+

Inside the Ghost editor, you can drag and drop tags into a specific order. The first tag in the list is always given the most importance, and some themes will only display the primary tag (the first tag in the list) by default. So you can add the most important tag which you want to show up in your theme, but also add a bunch of related tags which are less important.

+

News, Cycling, Bart Stevens, Extreme Sports

+

In this example, News is the primary tag which will be displayed by the theme, but the post will also still receive all the other tags, and show up in their respective archives.

+

Private tags

+

Sometimes you may want to assign a post a specific tag, but you don't necessarily want that tag appearing in the theme or creating an archive page. In Ghost, hashtags are private and can be used for special styling.

+

For example, if you sometimes publish posts with video content - you might want your theme to adapt and get rid of the sidebar for these posts, to give more space for an embedded video to fill the screen. In this case, you could use private tags to tell your theme what to do.

+

News, Cycling, #video

+

Here, the theme would assign the post publicly displayed tags of News, and Cycling - but it would also keep a private record of the post being tagged with #video.

+

In your theme, you could then look for private tags conditionally and give them special formatting:

+
{{#post}}
+    {{#has tag="#video"}}
+        ...markup for a nice big video post layout...
+    {{else}}
+        ...regular markup for a post...
+    {{/has}}
+{{/post}}
+
+

You can find documentation for theme development techniques like this and many more over on Ghost's extensive theme documentation.

+
+
+
+
+
+ + +
+

Ghost

+

You can delete this user to remove all the welcome posts

+
+
+
+Read More +
+
+
+
+
+ +
+ + +
Organising your content with tags
+
+
Share this + + +
+ + + + + + +
+ +
+ +
+
+
+ +
+ + + + + diff --git a/docker/tanner/snare/dist/pages/8/ec953d6cbb68dbb592fa8d9a244af5d9 b/docker/tanner/snare/dist/pages/8/ec953d6cbb68dbb592fa8d9a244af5d9 new file mode 100644 index 000000000..ea84ecf22 Binary files /dev/null and b/docker/tanner/snare/dist/pages/8/ec953d6cbb68dbb592fa8d9a244af5d9 differ diff --git a/docker/tanner/snare/dist/pages/8/f377d34ebe9121ae977db65a84e6b0d5 b/docker/tanner/snare/dist/pages/8/f377d34ebe9121ae977db65a84e6b0d5 new file mode 100644 index 000000000..2b226fa85 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/f377d34ebe9121ae977db65a84e6b0d5 @@ -0,0 +1,99 @@ + + + + + + + +user Blog + + + + + + + + diff --git a/docker/tanner/snare/dist/pages/8/f9b8e44bc5f2368bbb2cf7def4016144 b/docker/tanner/snare/dist/pages/8/f9b8e44bc5f2368bbb2cf7def4016144 new file mode 100644 index 000000000..73674ff00 --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/f9b8e44bc5f2368bbb2cf7def4016144 @@ -0,0 +1,291 @@ + + + + + + +Ghost - user Blog + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + + +
+
+
+ +
+ + + + + + diff --git a/docker/tanner/snare/dist/pages/8/meta.json b/docker/tanner/snare/dist/pages/8/meta.json new file mode 100644 index 000000000..89296834b --- /dev/null +++ b/docker/tanner/snare/dist/pages/8/meta.json @@ -0,0 +1 @@ +{"/index.html": {"hash": "d1546d731a9f30cc80127d57142a482b", "content_type": "text/html"}, "/status_404": {"hash": "bacfa45149ffbe8dbff34609bf56d748", "content_type": "text/html"}, "/assets/built/screen.css?v=8cfc086fe8": {"hash": "96dfe3a279942cee47fc2d858ccc6e26", "content_type": "text/css"}, "/favicon.ico": {"hash": "35a63c8a85b1279a0f991ce8828fb9d9", "content_type": "image/x-icon"}, "/rss/": {"hash": "50ce0a5ffcd9e65830c66c359235c4c5", "content_type": "text/xml"}, "/welcome/": {"hash": "e45ade28f21147129a3c634f10cdfa02", "content_type": "text/html"}, "/author/ghost/": {"hash": "f9b8e44bc5f2368bbb2cf7def4016144", "content_type": "text/html"}, "/the-editor/": {"hash": "e91ec595a26a68dd828e2c7446e53733", "content_type": "text/html"}, "/using-tags/": {"hash": "eb2b58d209a506af4e3130c04317c043", "content_type": "text/html"}, "/managing-users/": {"hash": "7f3fdea0cce5338f7c0d5010329650c8", "content_type": "text/html"}, "/private-sites/": {"hash": "80a35a9639b0b70193e43257dfb1fb56", "content_type": "text/html"}, "/advanced-markdown/": {"hash": "09cb202bfb87f1b123106f4826437a6a", "content_type": "text/html"}, "/themes/": {"hash": "d33d50a409a95819f54bb8e7967d5ef8", "content_type": "text/html"}, "/v1.0.0/images/ghost-logo.svg": {"hash": "7d4539153a5354fcce37ce02fbb15e38", "content_type": "image/svg+xml"}, "/jquery-3.2.1.min.js": {"hash": "b6ab5ca99c37db3eba159ccb46aae341", "content_type": "application/javascript"}, "/assets/js/jquery.fitvids.js,qv=8cfc086fe8.pagespeed.jm.nHU73nSfsl.js": {"hash": "759cca6c69e8c7c54b6a12df090842d4", "content_type": "application/javascript"}, "/welcome/amp/": {"hash": "2bcdba241d530911055b533378dce1d8", "content_type": "text/html"}, "/tag/getting-started/": {"hash": "0841ddfa9fd9cf1e059378c618f594bb", "content_type": "text/html"}, "/the-editor/amp/": {"hash": "955e9ba270f49d4139071491eb8567d2", "content_type": "text/html"}, "/v1.0.0/images/computer.jpg": {"hash": "bce08acadf46be96489d70406d20d498", "content_type": "image/jpeg"}, "/using-tags/amp/": {"hash": "ad2a60e58d60060ee239fa4d3148ae33", "content_type": "text/html"}, "/managing-users/amp/": {"hash": "13e355a722feefde6af35e1176fd5c2b", "content_type": "text/html"}, "/private-sites/amp/": {"hash": "59ec181beaeef3e1706e3fe05fa16158", "content_type": "text/html"}, "/v1.0.0/images/private.png": {"hash": "442e1148b357e5ec9d0060a6e0f9055e", "content_type": "image/png"}, "/advanced-markdown/amp/": {"hash": "e09b8947de656d130c64210e9b28f07d", "content_type": "text/html"}, "/v1.0.0/images/walking.jpg#full": {"hash": "92859a05b36f5e050665d74674997816", "content_type": "image/jpeg"}, "/embed/Cniqsc9QfDo?rel=0&showinfo=0": {"hash": "47c2ef7b3f9c7158f2e15ef5269d2a09", "content_type": "text/html"}, "/themes/amp/": {"hash": "50f8f0588e30faaee873853ce1b145de", "content_type": "text/html"}, "/v1.0.0/images/marketplace.jpg": {"hash": "6086f269b8b3d1c686bdf9b081124fe4", "content_type": "image/jpeg"}, "/v0.js": {"hash": "16ec9d027895bf83ac1181429a038d33", "content_type": "text/javascript"}, "/v1.0.0/images/welcome.jpg": {"hash": "6e994092478c0e3c7e9ae5821d67f13c", "content_type": "image/jpeg"}, "/v1.0.0/images/writing.jpg": {"hash": "8ec1660cd4eda74cbb6edf77c842bad9", "content_type": "image/jpeg"}, "/v1.0.0/images/tags.jpg": {"hash": "b8933dc054e6bc07fd7198dec126cee1", "content_type": "image/jpeg"}, "/v1.0.0/images/team.jpg": {"hash": "ec953d6cbb68dbb592fa8d9a244af5d9", "content_type": "image/jpeg"}, "/v1.0.0/images/locked.jpg": {"hash": "627c1b450e67251c53ef2edcfdf6f11d", "content_type": "image/jpeg"}, "/v0/amp-iframe-0.1.js": {"hash": "8bb6fa05647ee00c240d7bfa744d994e", "content_type": "text/javascript"}, "/v1.0.0/images/advanced.jpg": {"hash": "052eb2182a98215b4b6d88d9d32a2cf5", "content_type": "image/jpeg"}, "/yts/cssbin/www-player-vflg6820w.css": {"hash": "9a5d0b02a7c07bdd949d1d3ad6c87d2b", "content_type": "text/html"}, "/yts/jsbin/www-embed-player-vflLmvgO2/www-embed-player.js": {"hash": "f377d34ebe9121ae977db65a84e6b0d5", "content_type": "text/html"}, "/yts/jsbin/player-vflM-t6FF/de_DE/base.js": {"hash": "bd44b423b294507bcf8a6db57baa84e0", "content_type": "text/html"}, "/v1.0.0/images/design.jpg": {"hash": "421694f2a1956e51036a0a6ff95ea9e1", "content_type": "image/jpeg"}} \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/9/0666088a481c44d0ac9a3ffddf0dda78 b/docker/tanner/snare/dist/pages/9/0666088a481c44d0ac9a3ffddf0dda78 new file mode 100644 index 000000000..8c54182aa Binary files /dev/null and b/docker/tanner/snare/dist/pages/9/0666088a481c44d0ac9a3ffddf0dda78 differ diff --git a/docker/tanner/snare/dist/pages/9/0c2a3c7a2fe87682a4be8efad8a4654b b/docker/tanner/snare/dist/pages/9/0c2a3c7a2fe87682a4be8efad8a4654b new file mode 100644 index 000000000..b93a4953f Binary files /dev/null and b/docker/tanner/snare/dist/pages/9/0c2a3c7a2fe87682a4be8efad8a4654b differ diff --git a/docker/tanner/snare/dist/pages/9/0d28ceb1c727ecd1f4e3bb73a4b351e4 b/docker/tanner/snare/dist/pages/9/0d28ceb1c727ecd1f4e3bb73a4b351e4 new file mode 100644 index 000000000..9e612858f Binary files /dev/null and b/docker/tanner/snare/dist/pages/9/0d28ceb1c727ecd1f4e3bb73a4b351e4 differ diff --git a/docker/tanner/snare/dist/pages/9/11f6b3285bf71a87811c3dadccb7b166 b/docker/tanner/snare/dist/pages/9/11f6b3285bf71a87811c3dadccb7b166 new file mode 100644 index 000000000..06a7ca03f --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/11f6b3285bf71a87811c3dadccb7b166 @@ -0,0 +1,54 @@ + + + + + + + + user's Blog! - Log in + + + + + + + +
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +I've lost my password
+← Back to user's Blog! +
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/9/1452d54691b6760fb951c0b506f6d41b b/docker/tanner/snare/dist/pages/9/1452d54691b6760fb951c0b506f6d41b new file mode 100644 index 000000000..4a4ca865d Binary files /dev/null and b/docker/tanner/snare/dist/pages/9/1452d54691b6760fb951c0b506f6d41b differ diff --git a/docker/tanner/snare/dist/pages/9/1963024d89bcbfbb1c664b4b74ced7f3 b/docker/tanner/snare/dist/pages/9/1963024d89bcbfbb1c664b4b74ced7f3 new file mode 100644 index 000000000..1ab63332c --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/1963024d89bcbfbb1c664b4b74ced7f3 @@ -0,0 +1,20 @@ + + + tag:172.20.254.140,2005:/articles + + + user's Blog! + 2018-08-07T13:06:11Z + Publify + + urn:uuid:af558c3a-50f7-41f9-a01c-cf99a599119b + 2018-08-07T13:06:10Z + 2018-08-07T13:06:11Z + + + UserName LastName + + Hello World! + <p>Welcome to Publify. This is your first article. Edit or delete it, then start blogging!</p> + + diff --git a/docker/tanner/snare/dist/pages/9/1a21716eacb5400f04e5554c51dba01c b/docker/tanner/snare/dist/pages/9/1a21716eacb5400f04e5554c51dba01c new file mode 100644 index 000000000..4a4ca865d Binary files /dev/null and b/docker/tanner/snare/dist/pages/9/1a21716eacb5400f04e5554c51dba01c differ diff --git a/docker/tanner/snare/dist/pages/9/28bfda8482273171af3cccd8990d1f30 b/docker/tanner/snare/dist/pages/9/28bfda8482273171af3cccd8990d1f30 new file mode 100644 index 000000000..52137d228 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/28bfda8482273171af3cccd8990d1f30 @@ -0,0 +1,21 @@ + + + + + user's Blog! + http://172.20.254.140:80 + + en-us + 40 + + + Hello World! + <p>Welcome to Publify. This is your first article. Edit or delete it, then start blogging!</p> + Tue, 07 Aug 2018 13:06:10 +0000 + urn:uuid:af558c3a-50f7-41f9-a01c-cf99a599119b + UserName LastName + http://172.20.254.140:80/2018/08/07/hello-world#comments + http://172.20.254.140:80/2018/08/07/hello-world + + + diff --git a/docker/tanner/snare/dist/pages/9/2df49f2d304a0872412c19c2e931bb4c b/docker/tanner/snare/dist/pages/9/2df49f2d304a0872412c19c2e931bb4c new file mode 100644 index 000000000..44641c5b2 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/2df49f2d304a0872412c19c2e931bb4c @@ -0,0 +1,8 @@ + + + tag:172.20.254.140,2005:/2018/08/07/hello-world + + + user's Blog! + Publify + diff --git a/docker/tanner/snare/dist/pages/9/41601b3d2e593ad72daf46f21df20cc6 b/docker/tanner/snare/dist/pages/9/41601b3d2e593ad72daf46f21df20cc6 new file mode 100644 index 000000000..e3e2dc739 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/41601b3d2e593ad72daf46f21df20cc6 @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/9/464f101ae5c84e736a7892870138d72c b/docker/tanner/snare/dist/pages/9/464f101ae5c84e736a7892870138d72c new file mode 100644 index 000000000..1413fc609 Binary files /dev/null and b/docker/tanner/snare/dist/pages/9/464f101ae5c84e736a7892870138d72c differ diff --git a/docker/tanner/snare/dist/pages/9/4932450bb5193d14011eae9fea780a7f b/docker/tanner/snare/dist/pages/9/4932450bb5193d14011eae9fea780a7f new file mode 100644 index 000000000..67fa00bf8 Binary files /dev/null and b/docker/tanner/snare/dist/pages/9/4932450bb5193d14011eae9fea780a7f differ diff --git a/docker/tanner/snare/dist/pages/9/5399a955161fb3b480cd6e5f1299608d b/docker/tanner/snare/dist/pages/9/5399a955161fb3b480cd6e5f1299608d new file mode 100644 index 000000000..64539b54c Binary files /dev/null and b/docker/tanner/snare/dist/pages/9/5399a955161fb3b480cd6e5f1299608d differ diff --git a/docker/tanner/snare/dist/pages/9/56ddd28e5c6776f76f8fbdd8face0232 b/docker/tanner/snare/dist/pages/9/56ddd28e5c6776f76f8fbdd8face0232 new file mode 100644 index 000000000..43dfa768f --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/56ddd28e5c6776f76f8fbdd8face0232 @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + +
+
+
+

No notes found...

+
+
+ +
+
+
+
+
+
+
+

Powered by Publify | Photo Startup stock photos

+ + diff --git a/docker/tanner/snare/dist/pages/9/60650eb79d0c83bd42a14e43b61be6aa b/docker/tanner/snare/dist/pages/9/60650eb79d0c83bd42a14e43b61be6aa new file mode 100644 index 000000000..ccec86596 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/60650eb79d0c83bd42a14e43b61be6aa @@ -0,0 +1,54 @@ + + + + + + + + user's Blog! - Log in + + + + + + + +
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +I've lost my password
+← Back to user's Blog! +
+
+
+
+ + diff --git a/docker/tanner/snare/dist/pages/9/6083e773a264168ebb97468746552fbf b/docker/tanner/snare/dist/pages/9/6083e773a264168ebb97468746552fbf new file mode 100644 index 000000000..32949c928 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/6083e773a264168ebb97468746552fbf @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url("/assets/bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot");src:url("/assets/bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot?#iefix") format("embedded-opentype"),url("/assets/bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2") format("woff2"),url("/assets/bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff") format("woff"),url("/assets/bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf") format("truetype"),url("/assets/bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:14px;line-height:1.428571429;color:#333333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eeeeee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#777777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eeeeee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eeeeee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.428571429;color:#777777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.428571429}code,kbd,pre,samp{font-family:Menlo, Monaco, Consolas, "Courier New", monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;word-break:break-all;word-wrap:break-word;color:#333333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eeeeee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,.input-group-sm input[type="date"],input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,.input-group-sm input[type="time"],input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,.input-group-sm input[type="datetime-local"],input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn,.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,.input-group-lg input[type="date"],input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,.input-group-lg input[type="time"],input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,.input-group-lg input[type="datetime-local"],input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn,.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width: 768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#777777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#777777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555555;text-align:center;background-color:#eeeeee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eeeeee}.nav>li.disabled>a{color:#777777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eeeeee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width: 768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width: 768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width: 768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width: 768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width: 768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right ~ .navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#090909;color:#fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.428571429;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{z-index:2;color:#23527c;background-color:#eeeeee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eeeeee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eeeeee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width: 768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333333}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus,button.list-group-item:hover,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eeeeee;color:#777777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:hover,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active,button.list-group-item-success.active:hover,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:hover,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active,button.list-group-item-info.active:hover,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:hover,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active,button.list-group-item-warning.active:hover,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:hover,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active,button.list-group-item-danger.active:hover,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:before,.modal-header:after{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.428571429;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.428571429;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs{display:none !important}.visible-sm{display:none !important}.visible-md{display:none !important}.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width: 767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width: 767px){.visible-xs-block{display:block !important}}@media (max-width: 767px){.visible-xs-inline{display:inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display:block !important}}@media (min-width: 1200px){.visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}body{padding-top:160px} diff --git a/docker/tanner/snare/dist/pages/9/75399d88b4df5040d7b3ce818facf692 b/docker/tanner/snare/dist/pages/9/75399d88b4df5040d7b3ce818facf692 new file mode 100644 index 000000000..110e5af8d --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/75399d88b4df5040d7b3ce818facf692 @@ -0,0 +1 @@ +.alignleft,img.left{float:left;margin:0 5px 5px 0}.alignright,img.right{float:right;margin:0 0 5px 5px}.centered{margin-left:auto;margin-right:auto;display:block;padding:8px}.gravatar{float:left;margin-right:3px;margin-bottom:3px}.status{background:#fff;margin:-8px;padding:8px} diff --git a/docker/tanner/snare/dist/pages/9/76b082ffe4098f46161619c6bad7d769 b/docker/tanner/snare/dist/pages/9/76b082ffe4098f46161619c6bad7d769 new file mode 100644 index 000000000..bd22ea5e7 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/76b082ffe4098f46161619c6bad7d769 @@ -0,0 +1,21 @@ + + + + + user's Blog! + http://172.20.254.140:80 + + en-us + 40 + + + Hello World! + <p>Welcome to Publify. This is your first article. Edit or delete it, then start blogging!</p> + Tue, 07 Aug 2018 13:06:10 +0000 + urn:uuid:af558c3a-50f7-41f9-a01c-cf99a599119b + UserName LastName + http://172.20.254.140:80/2018/08/07/hello-world#comments + http://172.20.254.140:80/2018/08/07/hello-world + + + diff --git a/docker/tanner/snare/dist/pages/9/8861c821c987f3d18220f72e2d9eccb4 b/docker/tanner/snare/dist/pages/9/8861c821c987f3d18220f72e2d9eccb4 new file mode 100644 index 000000000..94fb5490a --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/8861c821c987f3d18220f72e2d9eccb4 @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docker/tanner/snare/dist/pages/9/939a37014ca61908f972f6adb88ce319 b/docker/tanner/snare/dist/pages/9/939a37014ca61908f972f6adb88ce319 new file mode 100644 index 000000000..a06a4b1cc --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/939a37014ca61908f972f6adb88ce319 @@ -0,0 +1,6 @@ +.CodeRay{background-color:#f2f2f2;border:1px solid silver;color:black}.CodeRay pre{margin:0px}span.CodeRay{white-space:pre;border:0px;padding:2px}table.CodeRay{border-collapse:collapse;width:100%;padding:2px}table.CodeRay td{padding:2px 4px;vertical-align:top}.CodeRay .line-numbers{background-color:#d5f6f6;color:gray;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeRay .line-numbers a{background-color:#d5f6f6 !important;color:gray !important;text-decoration:none !important}.CodeRay .line-numbers a:target{color:blue !important}.CodeRay .line-numbers .highlighted{color:red !important}.CodeRay .line-numbers .highlighted a{color:red !important}.CodeRay span.line-numbers{padding:0px 4px}.CodeRay .line{display:block;float:left;width:100%}.CodeRay .code{width:100%}.CodeRay .debug{color:white !important;background:blue !important}.CodeRay .annotation{color:#007}.CodeRay .attribute-name{color:#b48}.CodeRay .attribute-value{color:#700}.CodeRay .binary{color:#509}.CodeRay .char .content{color:#D20}.CodeRay .char .delimiter{color:#710}.CodeRay .char{color:#D20}.CodeRay .class{color:#B06;font-weight:bold}.CodeRay .class-variable{color:#369}.CodeRay .color{color:#0A0}.CodeRay .comment{color:#777}.CodeRay .comment .char{color:#444}.CodeRay .comment .delimiter{color:#444}.CodeRay .complex{color:#A08}.CodeRay .constant{color:#036;font-weight:bold}.CodeRay .decorator{color:#B0B}.CodeRay .definition{color:#099;font-weight:bold}.CodeRay .delimiter{color:#000}.CodeRay .directive{color:#088;font-weight:bold}.CodeRay .doc{color:#970}.CodeRay .doc-string{color:#D42;font-weight:bold}.CodeRay .doctype{color:#34b}.CodeRay .entity{color:#800;font-weight:bold}.CodeRay .error{color:#F00;background-color:#FAA}.CodeRay .escape{color:#666}.CodeRay .exception{color:#C00;font-weight:bold}.CodeRay .float{color:#60E}.CodeRay .function{color:#06B;font-weight:bold}.CodeRay .global-variable{color:#d70}.CodeRay .hex{color:#02b}.CodeRay .imaginary{color:red}.CodeRay .include{color:#B44;font-weight:bold}.CodeRay .inline{background-color:rgba(0,0,0,0.07);color:#000}.CodeRay .inline-delimiter{font-weight:bold;color:#666}.CodeRay .instance-variable{color:#33B}.CodeRay .integer{color:#00D}.CodeRay .key .char{color:#60f}.CodeRay .key .delimiter{color:#404}.CodeRay .key{color:#606}.CodeRay .keyword{color:#080;font-weight:bold}.CodeRay .label{color:#970;font-weight:bold}.CodeRay .local-variable{color:#963}.CodeRay .namespace{color:#707;font-weight:bold}.CodeRay .octal{color:#40E}.CodeRay .predefined{color:#369;font-weight:bold}.CodeRay .predefined-constant{color:#069}.CodeRay .predefined-type{color:#0a5;font-weight:bold}.CodeRay .preprocessor{color:#579}.CodeRay .pseudo-class{color:#00C;font-weight:bold}.CodeRay .regexp .content{color:#808}.CodeRay .regexp .delimiter{color:#404}.CodeRay .regexp .modifier{color:#C2C}.CodeRay .regexp{background-color:rgba(255,0,255,0.06)}.CodeRay .reserved{color:#080;font-weight:bold}.CodeRay .shell .content{color:#2B2}.CodeRay .shell .delimiter{color:#161}.CodeRay .shell{background-color:rgba(0,255,0,0.06)}.CodeRay .string .char{color:#b0b}.CodeRay .string .content{color:#D20}.CodeRay .string .delimiter{color:#710}.CodeRay .string .modifier{color:#E40}.CodeRay .string{background-color:rgba(255,0,0,0.05)}.CodeRay .symbol .content{color:#A60}.CodeRay .symbol .delimiter{color:#630}.CodeRay .symbol{color:#A60}.CodeRay .tag{color:#070}.CodeRay .type{color:#339;font-weight:bold}.CodeRay .value{color:#088}.CodeRay .variable{color:#037}.CodeRay .insert{background:rgba(0,255,0,0.12)}.CodeRay .delete{background:rgba(255,0,0,0.12)}.CodeRay .change{color:#bbf;background:#007}.CodeRay .head{color:#f8f;background:#505}.CodeRay .head .filename{color:white}.CodeRay .delete .eyecatcher{background-color:rgba(255,0,0,0.2);border:1px solid rgba(230,0,0,0.5);margin:-1px;border-bottom:none;border-top-left-radius:5px;border-top-right-radius:5px}.CodeRay .insert .eyecatcher{background-color:rgba(0,255,0,0.2);border:1px solid rgba(0,128,0,0.5);margin:-1px;border-top:none;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.CodeRay .insert .insert{color:#0c0;background:transparent;font-weight:bold}.CodeRay .delete .delete{color:#c00;background:transparent;font-weight:bold}.CodeRay .change .change{color:#88f}.CodeRay .head .head{color:#f4f}table.CodeRay{width:auto}#main .example{width:960px;overflow:auto}#main .CodeRay pre{font-size:13px !important;line-height:15px}/*! + * Lightbox for Bootstrap 3 by @ashleydw + * https://github.com/ashleydw/lightbox + * + * License: https://github.com/ashleydw/lightbox/blob/master/LICENSE + */.ekko-lightbox-container{position:relative}.ekko-lightbox-nav-overlay{position:absolute;top:0;left:0;z-index:100;width:100%;height:100%}.ekko-lightbox-nav-overlay a{z-index:100;display:block;width:49%;height:100%;padding-top:45%;font-size:30px;color:#fff;text-shadow:2px 2px 4px #000;opacity:0;filter:dropshadow(color=#000, offx=2, offy=2);-webkit-transition:opacity 0.5s;-moz-transition:opacity 0.5s;-o-transition:opacity 0.5s;transition:opacity 0.5s}.ekko-lightbox-nav-overlay a:empty{width:49%}.ekko-lightbox a:hover{text-decoration:none;opacity:1}.ekko-lightbox .glyphicon-chevron-left{left:0;float:left;padding-left:15px;text-align:left}.ekko-lightbox .glyphicon-chevron-right{right:0;float:right;padding-right:15px;text-align:right}.ekko-lightbox .modal-footer{text-align:left}.statuses_sidebar{border-bottom:#eee 1px solid;font-size:0.9em} diff --git a/docker/tanner/snare/dist/pages/9/a72bbef679577a1d938a1473a11d778e b/docker/tanner/snare/dist/pages/9/a72bbef679577a1d938a1473a11d778e new file mode 100644 index 000000000..1368b2f93 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/a72bbef679577a1d938a1473a11d778e @@ -0,0 +1,20 @@ + + + tag:172.20.254.140,2005:/2018/08?format=atom + + + user's Blog! + 2018-08-07T13:06:11Z + Publify + + urn:uuid:af558c3a-50f7-41f9-a01c-cf99a599119b + 2018-08-07T13:06:10Z + 2018-08-07T13:06:11Z + + + UserName LastName + + Hello World! + <p>Welcome to Publify. This is your first article. Edit or delete it, then start blogging!</p> + + diff --git a/docker/tanner/snare/dist/pages/9/a93a419e2f305d159b1635f256e507ab b/docker/tanner/snare/dist/pages/9/a93a419e2f305d159b1635f256e507ab new file mode 100644 index 000000000..94e7752b6 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/a93a419e2f305d159b1635f256e507ab @@ -0,0 +1,100 @@ + + + + + +Archives for user's Blog! + + + + + + + + + + + + + + + + + +
+
+

+ 08 2018 +

+
+ 7 - + Hello World! +
+
+ +
+
+
+
+
+
+
+

Powered by Publify | Photo Startup stock photos

+ + diff --git a/docker/tanner/snare/dist/pages/9/ae3bdf96c845f31f80f1fbe0886c6411 b/docker/tanner/snare/dist/pages/9/ae3bdf96c845f31f80f1fbe0886c6411 new file mode 100644 index 000000000..b93a4953f Binary files /dev/null and b/docker/tanner/snare/dist/pages/9/ae3bdf96c845f31f80f1fbe0886c6411 differ diff --git a/docker/tanner/snare/dist/pages/9/ae988846bdeeabb057f56ecfee926517 b/docker/tanner/snare/dist/pages/9/ae988846bdeeabb057f56ecfee926517 new file mode 100644 index 000000000..d6a636b63 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/ae988846bdeeabb057f56ecfee926517 @@ -0,0 +1,6165 @@ +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +@media print { + * { + text-shadow: none !important; + color: #000 !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../../fonts/theme/glyphicons-halflings-regular.eot'); + src: url('../../fonts/theme/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../fonts/theme/glyphicons-halflings-regular.woff') format('woff'), url('../../fonts/theme/glyphicons-halflings-regular.ttf') format('truetype'), url('../../fonts/theme/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 18px; + line-height: 1.42857143; + color: #333333; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #428bca; + text-decoration: none; +} +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + width: 100% \9; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + width: 100% \9; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 25px; + margin-bottom: 25px; + border: 0; + border-top: 1px solid #eeeeee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 25px; + margin-bottom: 12.5px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 12.5px; + margin-bottom: 12.5px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 46px; +} +h2, +.h2 { + font-size: 38px; +} +h3, +.h3 { + font-size: 31px; +} +h4, +.h4 { + font-size: 23px; +} +h5, +.h5 { + font-size: 18px; +} +h6, +.h6 { + font-size: 16px; +} +p { + margin: 0 0 12.5px; +} +.lead { + margin-bottom: 25px; + font-size: 20px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 27px; + } +} +small, +.small { + font-size: 88%; +} +cite { + font-style: normal; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777777; +} +.text-primary { + color: #428bca; +} +a.text-primary:hover { + color: #3071a9; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #428bca; +} +a.bg-primary:hover { + background-color: #3071a9; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 11.5px; + margin: 50px 0 25px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 12.5px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 25px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 12.5px 25px; + margin: 0 0 25px; + font-size: 22.5px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +blockquote:before, +blockquote:after { + content: ""; +} +address { + margin-bottom: 25px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + box-shadow: none; +} +pre { + display: block; + padding: 12px; + margin: 0 0 12.5px; + font-size: 17px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 25px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dddddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #dddddd; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 18.75px; + overflow-y: hidden; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #dddddd; + -webkit-overflow-scrolling: touch; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 25px; + font-size: 27px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 18px; + line-height: 1.42857143; + color: #555555; +} +.form-control { + display: block; + width: 100%; + height: 39px; + padding: 6px 12px; + font-size: 18px; + line-height: 1.42857143; + color: #555555; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #777777; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #777777; +} +.form-control::-webkit-input-placeholder { + color: #777777; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: 39px; + line-height: 1.42857143 \0; +} +input[type="date"].input-sm, +input[type="time"].input-sm, +input[type="datetime-local"].input-sm, +input[type="month"].input-sm { + line-height: 36px; +} +input[type="date"].input-lg, +input[type="time"].input-lg, +input[type="datetime-local"].input-lg, +input[type="month"].input-lg { + line-height: 53px; +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + min-height: 25px; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm, +.form-horizontal .form-group-sm .form-control { + height: 36px; + padding: 5px 10px; + font-size: 16px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 36px; + line-height: 36px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.input-lg, +.form-horizontal .form-group-lg .form-control { + height: 53px; + padding: 10px 16px; + font-size: 23px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg { + height: 53px; + line-height: 53px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 48.75px; +} +.form-control-feedback { + position: absolute; + top: 30px; + right: 0; + z-index: 2; + display: block; + width: 39px; + height: 39px; + line-height: 39px; + text-align: center; +} +.input-lg + .form-control-feedback { + width: 53px; + height: 53px; + line-height: 53px; +} +.input-sm + .form-control-feedback { + width: 36px; + height: 36px; + line-height: 36px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 32px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + top: 0; + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 18px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default .badge { + color: #ffffff; + background-color: #333333; +} +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #357ebd; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #3071a9; + border-color: #285e8e; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} +.btn-primary .badge { + color: #428bca; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #ffffff; +} +.btn-link { + color: #428bca; + font-weight: normal; + cursor: pointer; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 23px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 16px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 16px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 18px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 11.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #428bca; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 16px; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: 0; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + opacity: 0; + filter: alpha(opacity=0); +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 53px; + padding: 10px 16px; + font-size: 23px; + line-height: 1.33; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 53px; + line-height: 53px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 36px; + padding: 5px 10px; + font-size: 16px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 36px; + line-height: 36px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 18px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 16px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 23px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li.disabled > a { + color: #777777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #428bca; +} +.nav .nav-divider { + height: 1px; + margin: 11.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #dddddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #428bca; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 25px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 12.5px 15px; + font-size: 23px; + line-height: 25px; + height: 50px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 6.25px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 25px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 25px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 12.5px; + padding-bottom: 12.5px; + } + .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 5.5px; + margin-bottom: 5.5px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-form.navbar-right:last-child { + margin-right: -15px; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 5.5px; + margin-bottom: 5.5px; +} +.navbar-btn.btn-sm { + margin-top: 7px; + margin-bottom: 7px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 12.5px; + margin-bottom: 12.5px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } + .navbar-text.navbar-right:last-child { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777777; +} +.navbar-default .navbar-nav > li > a { + color: #777777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #dddddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555555; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777777; +} +.navbar-default .navbar-link:hover { + color: #333333; +} +.navbar-default .btn-link { + color: #777777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; +} +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #777777; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #777777; +} +.navbar-inverse .navbar-nav > li > a { + color: #777777; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #777777; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .btn-link { + color: #777777; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #ffffff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 25px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #cccccc; +} +.breadcrumb > .active { + color: #777777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 25px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #428bca; + background-color: #ffffff; + border: 1px solid #dddddd; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #2a6496; + background-color: #eeeeee; + border-color: #dddddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777777; + background-color: #ffffff; + border-color: #dddddd; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 23px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 16px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 25px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + background-color: #ffffff; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #428bca; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3071a9; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 16px; + font-weight: bold; + color: #ffffff; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: #777777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #ffffff; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eeeeee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 27px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 81px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 25px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #428bca; +} +.thumbnail .caption { + padding: 9px; + color: #333333; +} +.alert { + padding: 15px; + margin-bottom: 25px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + overflow: hidden; + height: 25px; + margin-bottom: 25px; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 16px; + line-height: 25px; + color: #ffffff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar[aria-valuenow="1"], +.progress-bar[aria-valuenow="2"] { + min-width: 30px; +} +.progress-bar[aria-valuenow="0"] { + color: #777777; + min-width: 30px; + background-color: transparent; + background-image: none; + box-shadow: none; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media, +.media .media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-object { + display: block; +} +.media-heading { + margin: 0 0 5px; +} +.media > .pull-left { + margin-right: 10px; +} +.media > .pull-right { + margin-left: 10px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +a.list-group-item { + color: #555555; +} +a.list-group-item .list-group-item-heading { + color: #333333; +} +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + color: #555555; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #eeeeee; + color: #777777; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #e1edf7; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 25px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 21px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive { + border-top: 1px solid #dddddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 25px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body { + border-top: 1px solid #dddddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} +.panel-default { + border-color: #dddddd; +} +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #dddddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #dddddd; +} +.panel-primary { + border-color: #428bca; +} +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #428bca; +} +.panel-primary > .panel-heading .badge { + color: #428bca; + background-color: #ffffff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #428bca; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 27px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate3d(0, -25%, 0); + transform: translate3d(0, -25%, 0); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-size: 16px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + right: 5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + background-color: #ffffff; + background-clip: padding-box; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 18px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; +} +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #ffffff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); +} +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #ffffff; +} +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} diff --git a/docker/tanner/snare/dist/pages/9/b57009c3567f0c2eff8862e9cc79a763 b/docker/tanner/snare/dist/pages/9/b57009c3567f0c2eff8862e9cc79a763 new file mode 100644 index 000000000..4cdb093c4 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/b57009c3567f0c2eff8862e9cc79a763 @@ -0,0 +1,7 @@ +/* TEAM */ +Your title: Your name. +Site: email, link to a contact form, etc. +Twitter: your Twitter username. + +/* SITE */ +Software: Publify [http://publify.co] 9.1.0 diff --git a/docker/tanner/snare/dist/pages/9/b9aa8a760dd994f46bfc71674567a7c2 b/docker/tanner/snare/dist/pages/9/b9aa8a760dd994f46bfc71674567a7c2 new file mode 100644 index 000000000..97b7b8b20 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/b9aa8a760dd994f46bfc71674567a7c2 @@ -0,0 +1,94 @@ + + + + + +About + + + + + + + + + + + + + + + + +
+
+

About

+

This is an example of a Publify page. You can edit this to write information about yourself or your site so readers know who you are. You can create as many pages as you like and manage all of your content inside Publify.

+
+ +
+
+
+
+
+
+
+

Powered by Publify | Photo Startup stock photos

+ + diff --git a/docker/tanner/snare/dist/pages/9/bacfa45149ffbe8dbff34609bf56d748 b/docker/tanner/snare/dist/pages/9/bacfa45149ffbe8dbff34609bf56d748 new file mode 100644 index 000000000..7c649feed --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/bacfa45149ffbe8dbff34609bf56d748 @@ -0,0 +1,67 @@ + + + + +The page you were looking for doesn't exist (404) + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/docker/tanner/snare/dist/pages/9/ca882d2907713e5d69400654ce1bdbc9 b/docker/tanner/snare/dist/pages/9/ca882d2907713e5d69400654ce1bdbc9 new file mode 100644 index 000000000..e3241df17 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/ca882d2907713e5d69400654ce1bdbc9 @@ -0,0 +1,133 @@ + + + + + +Hello World! | user's Blog! + + + + + + + + + + + + + + + + + + + +
+
+
+

Hello World!

+

Welcome to Publify. This is your first article. Edit or delete it, then start blogging!

+
+

+ + Published on 07/08/2018 at 13h06 by UserName LastName, tags + +

+
+ +
    +
+
+
+

comment Hello World!

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

Powered by Publify | Photo Startup stock photos

+ + diff --git a/docker/tanner/snare/dist/pages/9/d100e62a23539f04a69a4d77a57de8e8 b/docker/tanner/snare/dist/pages/9/d100e62a23539f04a69a4d77a57de8e8 new file mode 100644 index 000000000..7c649feed --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/d100e62a23539f04a69a4d77a57de8e8 @@ -0,0 +1,67 @@ + + + + +The page you were looking for doesn't exist (404) + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/docker/tanner/snare/dist/pages/9/d111066d3e9f971a14bd24e53986cf70 b/docker/tanner/snare/dist/pages/9/d111066d3e9f971a14bd24e53986cf70 new file mode 100644 index 000000000..88497ec4e --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/d111066d3e9f971a14bd24e53986cf70 @@ -0,0 +1,116 @@ + + + + + +Archives for user's Blog! Archives for user's Blog! August 2018 + + + + + + + + + + + + + + + + + + + + +
+
+
+
+

Hello World!

+
+

Welcome to Publify. This is your first article. Edit or delete it, then start blogging!

+
+

+ + Published on 07/08/2018 at 13h06 by UserName LastName, tags + +

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

Powered by Publify | Photo Startup stock photos

+ + diff --git a/docker/tanner/snare/dist/pages/9/d1546d731a9f30cc80127d57142a482b b/docker/tanner/snare/dist/pages/9/d1546d731a9f30cc80127d57142a482b new file mode 100644 index 000000000..ba70c55ef --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/d1546d731a9f30cc80127d57142a482b @@ -0,0 +1,115 @@ + + + + + +user's Blog! | + + + + + + + + + + + + + + + + + + + +
+
+
+
+

Hello World!

+
+

Welcome to Publify. This is your first article. Edit or delete it, then start blogging!

+
+

+ + Published on 07/08/2018 at 13h06 by UserName LastName, tags + +

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

Powered by Publify | Photo Startup stock photos

+ + diff --git a/docker/tanner/snare/dist/pages/9/e69d3c2505139a84faed967c9ba7d70a b/docker/tanner/snare/dist/pages/9/e69d3c2505139a84faed967c9ba7d70a new file mode 100644 index 000000000..c29dddb98 --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/e69d3c2505139a84faed967c9ba7d70a @@ -0,0 +1,12 @@ + + + + + user's Blog! + http://172.20.254.140:80/2018/08/07/hello-world + + en-us + 40 + + + diff --git a/docker/tanner/snare/dist/pages/9/f69cc131d4343c8614ba4e957f170617 b/docker/tanner/snare/dist/pages/9/f69cc131d4343c8614ba4e957f170617 new file mode 100644 index 000000000..9444e7bbe --- /dev/null +++ b/docker/tanner/snare/dist/pages/9/f69cc131d4343c8614ba4e957f170617 @@ -0,0 +1,16 @@ +function edButton(t,e,i,n,s,o){this.id=t,this.display=e,this.tagStart=i,this.tagEnd=n,this.access=s,this.open=o}function get_buttons(t){switch(t){case"textile":edButtons.push(new edButton("ed_bold","b","**","**","b")),edButtons.push(new edButton("ed_italic","i","_","_","i")),edButtons.push(new edButton("ed_link","link","","","a")),edButtons.push(new edButton("ed_img","img","!","!","m",-1)),edButtons.push(new edButton("ed_li","li","* ","","l",-1)),edButtons.push(new edButton("ed_block","b-quote",">","","q",-1)),edButtons.push(new edButton("ed_del","del","","")),edButtons.push(new edButton("ed_code","code","@","@","c")),edButtons.push(new edButton("ed_more","more","\n\n","","")),edButtons.push(new edButton("ed_publifycode","publify:code","","\n\n\n","publify:code"));break;case"markdown":case"markdown smartypants":edButtons.push(new edButton("ed_bold","b","**","**","b")),edButtons.push(new edButton("ed_italic","i","_","_","i")),edButtons.push(new edButton("ed_link","link","","","a")),edButtons.push(new edButton("ed_img","img","","","m",-1)),edButtons.push(new edButton("ed_li","li","* ","","l",-1)),edButtons.push(new edButton("ed_ol","ol","#","","o",-1)),edButtons.push(new edButton("ed_block","b-quote",">","","q",-1)),edButtons.push(new edButton("ed_del","del","","")),edButtons.push(new edButton("ed_code","code","`","`","c")),edButtons.push(new edButton("ed_more","more","\n\n","","")),edButtons.push(new edButton("ed_publifycode","publify:code","","\n\n\n","publify:code"));break;default:edButtons.push(new edButton("ed_bold","b","","","b")),edButtons.push(new edButton("ed_italic","i","","","i")),edButtons.push(new edButton("ed_link","link","","","a")),edButtons.push(new edButton("ed_img","img","","","m",-1)),edButtons.push(new edButton("ed_ul","ul","
    \n","
\n\n","u")),edButtons.push(new edButton("ed_ol","ol","
    \n","
\n\n","o")),edButtons.push(new edButton("ed_li","li","\t
  • ","
  • \n","l")),edButtons.push(new edButton("ed_block","b-quote","
    ","
    ","q")),edButtons.push(new edButton("ed_del","del","","")),edButtons.push(new edButton("ed_code","code","","","c")),edButtons.push(new edButton("ed_more","more","\n\n","","")),edButtons.push(new edButton("ed_publifycode","publify:code","","\n\n\n","publify:code"))}}function edLink(t,e,i){this.display=t,this.URL=e,i||(i=0),this.newWin=i}function edShowButton(t,e,i){if(e.access)var n=' accesskey = "'+e.access+'"';else n="";switch(e.id){case"ed_img":document.write('');break;case"ed_link":document.write('');break;case"ed_publifycode":document.write('');break;default:document.write('')}}function edShowLinks(){var t='",document.write(t)}function edAddTag(t,e){""!=edButtons[e].tagEnd&&(edOpenTags[t][edOpenTags[t].length]=e,document.getElementById(edButtons[e].id+"_"+t).value="/"+document.getElementById(edButtons[e].id+"_"+t).value)}function edRemoveTag(t,e){for(i=0;i"+edLinks[t].display+"";e.selectedIndex=0,edInsertContent(edCanvas,n)}else e.selectedIndex=0}function edSpell(t){myField=document.getElementById(t);var e="";if(document.selection){myField.focus();var i=document.selection.createRange();0
    '),i=0;i'),document.write("
    "),edOpenTags[t]=new Array}function edInsertTag(t,e){if(myField=document.getElementById(t),document.selection)myField.focus(),sel=document.selection.createRange(),0',edInsertTag(t,e))}}function edInsertPublifyCode(t,e,i){if(myField=document.getElementById(t),i||(i=""),edCheckOpenTags(t,e))edInsertTag(t,e);else{var n=prompt("Choose language",i);n&&(edButtons[e].tagStart='\n',edInsertTag(t,e))}}function edInsertImage(t){myField=document.getElementById(t);var e=prompt("Enter the URL of the image","http://");e&&0')}function edInsertImageFromCarousel(t,e){myField=document.getElementById(t),e&&(myValue=''+prompt(',edInsertContent(t,myValue))}function countInstances(t,e){return t.split(e).length-1}function edInsertVia(t){myField=document.getElementById(t);var e=prompt("Enter the URL of the source link","http://");e&&edInsertContent(t,e='(Thanks '+prompt("Enter the name of the source","")+")")}function edSetCookie(t,e,i,n,s){document.cookie=t+"="+escape(e)+(i?"; expires="+i.toGMTString():"")+(n?"; path="+n:"")+(s?"; domain="+s:"")}function edShowExtraCookie(){for(var t=document.cookie.split(";"),e=0;e"!==c[1]||Jt.test(a)?0:l:l.firstChild)&&a.childNodes.length;o--;)pt.nodeName(h=a.childNodes[o],"tbody")&&!h.childNodes.length&&a.removeChild(h);for(pt.merge(f,l.childNodes),l.textContent="";l.firstChild;)l.removeChild(l.firstChild);l=p.lastChild}else f.push(e.createTextNode(a));for(l&&p.removeChild(l),ct.appendChecked||pt.grep(v(f,"input"),b),m=0;a=f[m++];)if(n&&-1")).appendTo(e.documentElement))[0].contentWindow||he[0].contentDocument).document).write(),e.close(),i=M(t,e),he.detach()),ce[t]=i),i}function E(t,e){return{get:function(){if(!t())return(this.get=e).apply(this,arguments);delete this.get}}}function N(t){if(t in De)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),i=Te.length;i--;)if((t=Te[i]+e)in De)return t}function P(t,e){for(var i,n,s,o=[],a=0,r=t.length;ax.cacheLength&&delete i[n.shift()],i[t+" "]=e}var n=[];return i}function l(t){return t[z]=!0,t}function s(t){var e=N.createElement("div");try{return!!t(e)}catch(i){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function e(t,e){for(var i=t.split("|"),n=i.length;n--;)x.attrHandle[i[n]]=e}function u(t,e){var i=e&&t,n=i&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||K)-(~t.sourceIndex||K);if(n)return n;if(i)for(;i=i.nextSibling;)if(i===e)return-1;return t?1:-1}function n(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function o(i){return function(t){var e=t.nodeName.toLowerCase();return("input"===e||"button"===e)&&t.type===i}}function a(a){return l(function(o){return o=+o,l(function(t,e){for(var i,n=a([],t.length,o),s=n.length;s--;)t[i=n[s]]&&(t[i]=!(e[i]=t[i]))})})}function m(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function r(){}function g(t){for(var e=0,i=t.length,n="";e+~]|"+it+")"+it+"*"),ht=new RegExp("="+it+"*([^\\]'\"]*?)"+it+"*\\]","g"),ct=new RegExp(ot),dt=new RegExp("^"+nt+"$"),pt={ID:new RegExp("^#("+nt+")"),CLASS:new RegExp("^\\.("+nt+")"),TAG:new RegExp("^("+nt+"|[*])"),ATTR:new RegExp("^"+st),PSEUDO:new RegExp("^"+ot),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+it+"*(even|odd|(([+-]|)(\\d*)n|)"+it+"*(?:([+-]|)"+it+"*(\\d+)|))"+it+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+it+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+it+"*((?:-\\d)?\\d*)"+it+"*\\)|)(?=[^-]|$)","i")},ft=/^(?:input|select|textarea|button)$/i,mt=/^h\d$/i,gt=/^[^{]+\{\s*\[native \w/,vt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,yt=/[+~]/,bt=/'|\\/g,_t=new RegExp("\\\\([\\da-f]{1,6}"+it+"?|("+it+")|.)","ig"),wt=function(t,e,i){var n="0x"+e-65536;return n!=n||i?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)},xt=function(){E()};try{G.apply(Q=Z.call($.childNodes),$.childNodes),Q[$.childNodes.length].nodeType}catch(kt){G={apply:Q.length?function(t,e){X.apply(t,Z.call(e))}:function(t,e){for(var i=t.length,n=0;t[i++]=e[n++];);t.length=i-1}}}for(f in v=_.support={},C=_.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},E=_.setDocument=function(t){var e,i,n=t?t.ownerDocument||t:$;return n!==N&&9===n.nodeType&&n.documentElement&&(P=(N=n).documentElement,O=!C(N),(i=N.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",xt,!1):i.attachEvent&&i.attachEvent("onunload",xt)),v.attributes=s(function(t){return t.className="i",!t.getAttribute("className")}),v.getElementsByTagName=s(function(t){return t.appendChild(N.createComment("")),!t.getElementsByTagName("*").length}),v.getElementsByClassName=gt.test(N.getElementsByClassName),v.getById=s(function(t){return P.appendChild(t).id=z,!N.getElementsByName||!N.getElementsByName(z).length}),v.getById?(x.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&O){var i=e.getElementById(t);return i?[i]:[]}},x.filter.ID=function(t){var e=t.replace(_t,wt);return function(t){return t.getAttribute("id")===e}}):(delete x.find.ID,x.filter.ID=function(t){var i=t.replace(_t,wt);return function(t){var e="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return e&&e.value===i}}),x.find.TAG=v.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):v.qsa?e.querySelectorAll(t):void 0}:function(t,e){var i,n=[],s=0,o=e.getElementsByTagName(t);if("*"===t){for(;i=o[s++];)1===i.nodeType&&n.push(i);return n}return o},x.find.CLASS=v.getElementsByClassName&&function(t,e){if("undefined"!=typeof e.getElementsByClassName&&O)return e.getElementsByClassName(t)},j=[],H=[],(v.qsa=gt.test(N.querySelectorAll))&&(s(function(t){P.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&H.push("[*^$]="+it+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||H.push("\\["+it+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+z+"-]").length||H.push("~="),t.querySelectorAll(":checked").length||H.push(":checked"),t.querySelectorAll("a#"+z+"+*").length||H.push(".#.+[+~]")}),s(function(t){var e=N.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&H.push("name"+it+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||H.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),H.push(",.*:")})),(v.matchesSelector=gt.test(F=P.matches||P.webkitMatchesSelector||P.mozMatchesSelector||P.oMatchesSelector||P.msMatchesSelector))&&s(function(t){v.disconnectedMatch=F.call(t,"div"),F.call(t,"[s!='']:x"),j.push("!=",ot)}),H=H.length&&new RegExp(H.join("|")),j=j.length&&new RegExp(j.join("|")),e=gt.test(P.compareDocumentPosition),L=e||gt.test(P.contains)?function(t,e){var i=9===t.nodeType?t.documentElement:t,n=e&&e.parentNode;return t===n||!(!n||1!==n.nodeType||!(i.contains?i.contains(n):t.compareDocumentPosition&&16&t.compareDocumentPosition(n)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},V=e?function(t,e){if(t===e)return A=!0,0;var i=!t.compareDocumentPosition-!e.compareDocumentPosition;return i||(1&(i=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!v.sortDetached&&e.compareDocumentPosition(t)===i?t===N||t.ownerDocument===$&&L($,t)?-1:e===N||e.ownerDocument===$&&L($,e)?1:M?tt(M,t)-tt(M,e):0:4&i?-1:1)}:function(t,e){if(t===e)return A=!0,0;var i,n=0,s=t.parentNode,o=e.parentNode,a=[t],r=[e];if(!s||!o)return t===N?-1:e===N?1:s?-1:o?1:M?tt(M,t)-tt(M,e):0;if(s===o)return u(t,e);for(i=t;i=i.parentNode;)a.unshift(i);for(i=e;i=i.parentNode;)r.unshift(i);for(;a[n]===r[n];)n++;return n?u(a[n],r[n]):a[n]===$?-1:r[n]===$?1:0}),N},_.matches=function(t,e){return _(t,null,null,e)},_.matchesSelector=function(t,e){if((t.ownerDocument||t)!==N&&E(t),e=e.replace(ht,"='$1']"),v.matchesSelector&&O&&!Y[e+" "]&&(!j||!j.test(e))&&(!H||!H.test(e)))try{var i=F.call(t,e);if(i||v.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(kt){}return 0<_(e,N,null,[t]).length},_.contains=function(t,e){return(t.ownerDocument||t)!==N&&E(t),L(t,e)},_.attr=function(t,e){(t.ownerDocument||t)!==N&&E(t);var i=x.attrHandle[e.toLowerCase()],n=i&&U.call(x.attrHandle,e.toLowerCase())?i(t,e,!O):undefined;return n!==undefined?n:v.attributes||!O?t.getAttribute(e):(n=t.getAttributeNode(e))&&n.specified?n.value:null},_.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},_.uniqueSort=function(t){var e,i=[],n=0,s=0;if(A=!v.detectDuplicates,M=!v.sortStable&&t.slice(0),t.sort(V),A){for(;e=t[s++];)e===t[s]&&(n=i.push(s));for(;n--;)t.splice(i[n],1)}return M=null,t},k=_.getText=function(t){var e,i="",n=0,s=t.nodeType;if(s){if(1===s||9===s||11===s){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)i+=k(t)}else if(3===s||4===s)return t.nodeValue}else for(;e=t[n++];)i+=k(e);return i},(x=_.selectors={cacheLength:50,createPseudo:l,match:pt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(_t,wt),t[3]=(t[3]||t[4]||t[5]||"").replace(_t,wt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||_.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&_.error(t[0]),t},PSEUDO:function(t){var e,i=!t[6]&&t[2];return pt.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":i&&ct.test(i)&&(e=T(i,!0))&&(e=i.indexOf(")",i.length-e)-i.length)&&(t[0]=t[0].slice(0,e),t[2]=i.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(_t,wt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=B[t+" "];return e||(e=new RegExp("(^|"+it+")"+t+"("+it+"|$)"))&&B(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(i,n,s){return function(t){var e=_.attr(t,i);return null==e?"!="===n:!n||(e+="","="===n?e===s:"!="===n?e!==s:"^="===n?s&&0===e.indexOf(s):"*="===n?s&&-1(?:<\/\1>|)$/,kt=/^.[^:#\[\.,]*$/;pt.filter=function(t,e,i){var n=e[0];return i&&(t=":not("+t+")"),1===e.length&&1===n.nodeType?pt.find.matchesSelector(n,t)?[n]:[]:pt.find.matches(t,pt.grep(e,function(t){return 1===t.nodeType}))},pt.fn.extend({find:function(t){var e,i=[],n=this,s=n.length;if("string"!=typeof t)return this.pushStack(pt(t).filter(function(){for(e=0;e)[^>]*|#([\w-]*))$/;(pt.fn.init=function(t,e,i){var n,s;if(!t)return this;if(i=i||Ct,"string"==typeof t){if(!(n="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&3<=t.length?[null,t,null]:Tt.exec(t))||!n[1]&&e)return!e||e.jquery?(e||i).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof pt?e[0]:e,pt.merge(this,pt.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:nt,!0)),xt.test(n[1])&&pt.isPlainObject(e))for(n in e)pt.isFunction(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}if((s=nt.getElementById(n[2]))&&s.parentNode){if(s.id!==n[2])return Ct.find(t);this.length=1,this[0]=s}return this.context=nt,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):pt.isFunction(t)?"undefined"!=typeof i.ready?i.ready(t):t(pt):(t.selector!==undefined&&(this.selector=t.selector,this.context=t.context),pt.makeArray(t,this))}).prototype=pt.fn,Ct=pt(nt);var Dt=/^(?:parents|prev(?:Until|All))/,St={children:!0,contents:!0,next:!0,prev:!0};pt.fn.extend({has:function(t){var e,i=pt(t,this),n=i.length;return this.filter(function(){for(e=0;e
    a",ct.leadingWhitespace=3===Ht.firstChild.nodeType,ct.tbody=!Ht.getElementsByTagName("tbody").length,ct.htmlSerialize=!!Ht.getElementsByTagName("link").length,ct.html5Clone="<:nav>"!==nt.createElement("nav").cloneNode(!0).outerHTML,Ft.type="checkbox",Ft.checked=!0,jt.appendChild(Ft),ct.appendChecked=Ft.checked,Ht.innerHTML="",ct.noCloneChecked=!!Ht.cloneNode(!0).lastChild.defaultValue,jt.appendChild(Ht),(Ft=nt.createElement("input")).setAttribute("type","radio"),Ft.setAttribute("checked","checked"),Ft.setAttribute("name","t"),Ht.appendChild(Ft),ct.checkClone=Ht.cloneNode(!0).cloneNode(!0).lastChild.checked,ct.noCloneEvent=!!Ht.addEventListener,Ht[pt.expando]=1,ct.attributes=!Ht.getAttribute(pt.expando);var Ut={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:ct.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]};Ut.optgroup=Ut.option,Ut.tbody=Ut.tfoot=Ut.colgroup=Ut.caption=Ut.thead,Ut.th=Ut.td;var Qt=/<|&#?\w+;/,Jt=/]","i"),se=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,oe=/\s*$/g,ue=g(nt).appendChild(nt.createElement("div"));pt.extend({htmlPrefilter:function(t){return t.replace(se,"<$1>")},clone:function(t,e,i){var n,s,o,a,r,l=pt.contains(t.ownerDocument,t);if(ct.html5Clone||pt.isXMLDoc(t)||!ne.test("<"+t.nodeName+">")?o=t.cloneNode(!0):(ue.innerHTML=t.outerHTML,ue.removeChild(o=ue.firstChild)),!(ct.noCloneEvent&&ct.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||pt.isXMLDoc(t)))for(n=v(o),r=v(t),a=0;null!=(s=r[a]);++a)n[a]&&D(s,n[a]);if(e)if(i)for(r=r||v(t),n=n||v(o),a=0;null!=(s=r[a]);a++)T(s,n[a]);else T(t,o);return 0<(n=v(o,"script")).length&&y(n,!l&&v(t,"script")),n=r=s=null,o},cleanData:function(t,e){for(var i,n,s,o,a=0,r=pt.expando,l=pt.cache,u=ct.attributes,h=pt.event.special;null!=(i=t[a]);a++)if((e||Nt(i))&&(o=(s=i[r])&&l[s])){if(o.events)for(n in o.events)h[n]?pt.event.remove(i,n):pt.removeEvent(i,n,o.handle);l[s]&&(delete l[s],u||"undefined"==typeof i.removeAttribute?i[r]=undefined:i.removeAttribute(r),it.push(s))}}}),pt.fn.extend({domManip:S,detach:function(t){return I(this,t,!0)},remove:function(t){return I(this,t)},text:function(t){return Rt(this,function(t){return t===undefined?pt.text(this):this.empty().append((this[0]&&this[0].ownerDocument||nt).createTextNode(t))},null,t,arguments.length)},append:function(){return S(this,arguments,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||w(this,t).appendChild(t)})},prepend:function(){return S(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=w(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return S(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return S(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&&pt.cleanData(v(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&&pt.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return pt.clone(this,t,e)})},html:function(t){return Rt(this,function(t){var e=this[0]||{},i=0,n=this.length;if(t===undefined)return 1===e.nodeType?e.innerHTML.replace(ie,""):undefined;if("string"==typeof t&&!oe.test(t)&&(ct.htmlSerialize||!ne.test(t))&&(ct.leadingWhitespace||!Vt.test(t))&&!Ut[(qt.exec(t)||["",""])[1].toLowerCase()]){t=pt.htmlPrefilter(t);try{for(;it",h.childNodes[0].style.borderCollapse="separate",(t=h.getElementsByTagName("td"))[0].style.cssText="margin:0;border:0;padding:0;display:none",(a=0===t[0].offsetHeight)&&(t[0].style.display="",t[1].style.display="none",a=0===t[0].offsetHeight)),i.removeChild(u)}var n,s,o,a,r,l,u=nt.createElement("div"),h=nt.createElement("div");h.style&&(h.style.cssText="float:left;opacity:.5",ct.opacity="0.5"===h.style.opacity,ct.cssFloat=!!h.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",ct.clearCloneStyle="content-box"===h.style.backgroundClip,(u=nt.createElement("div")).style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.innerHTML="",u.appendChild(h),ct.boxSizing=""===h.style.boxSizing||""===h.style.MozBoxSizing||""===h.style.WebkitBoxSizing,pt.extend(ct,{reliableHiddenOffsets:function(){return null==n&&t(),a},boxSizingReliable:function(){return null==n&&t(),o},pixelMarginRight:function(){return null==n&&t(),s},pixelPosition:function(){return null==n&&t(),n},reliableMarginRight:function(){return null==n&&t(),r},reliableMarginLeft:function(){return null==n&&t(),l}}))}();var ge,ve,ye=/^(top|right|bottom|left)$/;k.getComputedStyle?(ge=function(t){var e=t.ownerDocument.defaultView;return e&&e.opener||(e=k),e.getComputedStyle(t)},ve=function(t,e,i){var n,s,o,a,r=t.style;return""!==(a=(i=i||ge(t))?i.getPropertyValue(e)||i[e]:undefined)&&a!==undefined||pt.contains(t.ownerDocument,t)||(a=pt.style(t,e)),i&&!ct.pixelMarginRight()&&pe.test(a)&&de.test(e)&&(n=r.width,s=r.minWidth,o=r.maxWidth,r.minWidth=r.maxWidth=r.width=a,a=i.width,r.width=n,r.minWidth=s,r.maxWidth=o),a===undefined?a:a+""}):me.currentStyle&&(ge=function(t){return t.currentStyle},ve=function(t,e,i){var n,s,o,a,r=t.style;return null==(a=(i=i||ge(t))?i[e]:undefined)&&r&&r[e]&&(a=r[e]),pe.test(a)&&!ye.test(e)&&(n=r.left,(o=(s=t.runtimeStyle)&&s.left)&&(s.left=t.currentStyle.left),r.left="fontSize"===e?"1em":a,a=r.pixelLeft+"px",r.left=n,o&&(s.left=o)),a===undefined?a:a+""||"auto"});var be=/alpha\([^)]*\)/i,_e=/opacity\s*=\s*([^)]*)/i,we=/^(none|table(?!-c[ea]).+)/,xe=new RegExp("^("+Lt+")(.*)$","i"),ke={position:"absolute",visibility:"hidden",display:"block"},Ce={letterSpacing:"0",fontWeight:"400"},Te=["Webkit","O","Moz","ms"],De=nt.createElement("div").style;pt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var i=ve(t,"opacity");return""===i?"1":i}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":ct.cssFloat?"cssFloat":"styleFloat"},style:function(t,e,i,n){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var s,o,a,r=pt.camelCase(e),l=t.style;if(e=pt.cssProps[r]||(pt.cssProps[r]=N(r)||r),a=pt.cssHooks[e]||pt.cssHooks[r],i===undefined)return a&&"get"in a&&(s=a.get(t,!1,n))!==undefined?s:l[e];if("string"===(o=typeof i)&&(s=zt.exec(i))&&s[1]&&(i=c(t,e,s),o="number"),null!=i&&i==i&&("number"===o&&(i+=s&&s[3]||(pt.cssNumber[r]?"":"px")),ct.clearCloneStyle||""!==i||0!==e.indexOf("background")||(l[e]="inherit"),!(a&&"set"in a&&(i=a.set(t,i,n))===undefined)))try{l[e]=i}catch(u){}}},css:function(t,e,i,n){var s,o,a,r=pt.camelCase(e);return e=pt.cssProps[r]||(pt.cssProps[r]=N(r)||r),(a=pt.cssHooks[e]||pt.cssHooks[r])&&"get"in a&&(o=a.get(t,!0,i)),o===undefined&&(o=ve(t,e,n)),"normal"===o&&e in Ce&&(o=Ce[e]),""===i||i?(s=parseFloat(o),!0===i||isFinite(s)?s||0:o):o}}),pt.each(["height","width"],function(t,s){pt.cssHooks[s]={get:function(t,e,i){if(e)return we.test(pt.css(t,"display"))&&0===t.offsetWidth?fe(t,ke,function(){return j(t,s,i)}):j(t,s,i)},set:function(t,e,i){var n=i&&ge(t);return O(t,e,i?H(t,s,i,ct.boxSizing&&"border-box"===pt.css(t,"boxSizing",!1,n),n):0)}}}),ct.opacity||(pt.cssHooks.opacity={get:function(t,e){return _e.test((e&&t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":e?"1":""},set:function(t,e){var i=t.style,n=t.currentStyle,s=pt.isNumeric(e)?"alpha(opacity="+100*e+")":"",o=n&&n.filter||i.filter||"";((i.zoom=1)<=e||""===e)&&""===pt.trim(o.replace(be,""))&&i.removeAttribute&&(i.removeAttribute("filter"),""===e||n&&!n.filter)||(i.filter=be.test(o)?o.replace(be,s):o+" "+s)}}),pt.cssHooks.marginRight=E(ct.reliableMarginRight,function(t,e){if(e)return fe(t,{display:"inline-block"},ve,[t,"marginRight"])}),pt.cssHooks.marginLeft=E(ct.reliableMarginLeft,function(t,e){if(e)return(parseFloat(ve(t,"marginLeft"))||(pt.contains(t.ownerDocument,t)?t.getBoundingClientRect().left-fe(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}):0))+"px"}),pt.each({margin:"",padding:"",border:"Width"},function(s,o){pt.cssHooks[s+o]={expand:function(t){for(var e=0,i={},n="string"==typeof t?t.split(" "):[t];e<4;e++)i[s+$t[e]+o]=n[e]||n[e-2]||n[0];return i}},de.test(s)||(pt.cssHooks[s+o].set=O)}),pt.fn.extend({css:function(t,e){return Rt(this,function(t,e,i){var n,s,o={},a=0;if(pt.isArray(e)){for(n=ge(t),s=e.length;a
    a",Me=Ee.getElementsByTagName("a")[0],Ae.setAttribute("type","checkbox"),Ee.appendChild(Ae),(Me=Ee.getElementsByTagName("a")[0]).style.cssText="top:1px",ct.getSetAttribute="t"!==Ee.className,ct.style=/top/.test(Me.getAttribute("style")),ct.hrefNormalized="/a"===Me.getAttribute("href"),ct.checkOn=!!Ae.value,ct.optSelected=Pe.selected,ct.enctype=!!nt.createElement("form").enctype,Ne.disabled=!0,ct.optDisabled=!Pe.disabled,(Ae=nt.createElement("input")).setAttribute("value",""),ct.input=""===Ae.getAttribute("value"),Ae.value="t",Ae.setAttribute("type","radio"),ct.radioValue="t"===Ae.value;var je=/\r/g,Fe=/[\x20\t\r\n\f]+/g;pt.fn.extend({val:function(i){var n,t,s,e=this[0];return arguments.length?(s=pt.isFunction(i),this.each(function(t){var e;1===this.nodeType&&(null==(e=s?i.call(this,t,pt(this).val()):i)?e="":"number"==typeof e?e+="":pt.isArray(e)&&(e=pt.map(e,function(t){return null==t?"":t+""})),(n=pt.valHooks[this.type]||pt.valHooks[this.nodeName.toLowerCase()])&&"set"in n&&n.set(this,e,"value")!==undefined||(this.value=e))})):e?(n=pt.valHooks[e.type]||pt.valHooks[e.nodeName.toLowerCase()])&&"get"in n&&(t=n.get(e,"value"))!==undefined?t:"string"==typeof(t=e.value)?t.replace(je,""):null==t?"":t:void 0}}),pt.extend({valHooks:{option:{get:function(t){var e=pt.find.attr(t,"value");return null!=e?e:pt.trim(pt.text(t)).replace(Fe," ")}},select:{get:function(t){for(var e,i,n=t.options,s=t.selectedIndex,o="select-one"===t.type||s<0,a=o?null:[],r=o?s+1:n.length,l=s<0?r:o?s:0;l").append(pt.parseHTML(t)).find(n):t)}).always(i&&function(t,e){a.each(function(){i.apply(this,o||[t.responseText,e,t])})}),this},pt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){pt.fn[e]=function(t){return this.on(e,t)}}),pt.expr.filters.animated=function(e){return pt.grep(pt.timers,function(t){return e===t.elem}).length},pt.offset={setOffset:function(t,e,i){var n,s,o,a,r,l,u=pt.css(t,"position"),h=pt(t),c={};"static"===u&&(t.style.position="relative"),r=h.offset(),o=pt.css(t,"top"),l=pt.css(t,"left"),("absolute"===u||"fixed"===u)&&-1'),r='';o===l||s===l||u.isCrossDomain(e)||(r+=''),n&&a.attr("target",n),a.hide().append(r).appendTo("body"),a.submit()},formElements:function(t,e){return t.is("form")?h(t[0].elements).filter(e):t.find(e)},disableFormElements:function(t){u.formElements(t,u.disableSelector).each(function(){u.disableFormElement(h(this))})},disableFormElement:function(t){var e,i;e=t.is("button")?"html":"val",(i=t.data("disable-with"))!==l&&(t.data("ujs:enable-with",t[e]()),t[e](i)),t.prop("disabled",!0),t.data("ujs:disabled",!0)},enableFormElements:function(t){u.formElements(t,u.enableSelector).each(function(){u.enableFormElement(h(this))})},enableFormElement:function(t){var e=t.is("button")?"html":"val";t.data("ujs:enable-with")!==l&&(t[e](t.data("ujs:enable-with")),t.removeData("ujs:enable-with")),t.prop("disabled",!1),t.removeData("ujs:disabled")},allowAction:function(t){var e,i=t.data("confirm"),n=!1;if(!i)return!0;if(u.fire(t,"confirm")){try{n=u.confirm(i)}catch(s){(console.error||console.log).call(console,s.stack||s)}e=u.fire(t,"confirm:complete",[n])}return n&&e},blankInputs:function(t,e,i){var n,s,o,a=h(),r=e||"input,textarea",l=t.find(r),u={};return l.each(function(){(n=h(this)).is("input[type=radio]")?(o=n.attr("name"),u[o]||(0===t.find('input[type=radio]:checked[name="'+o+'"]').length&&(s=t.find('input[type=radio][name="'+o+'"]'),a=a.add(s)),u[o]=o)):(n.is("input[type=checkbox],input[type=radio]")?n.is(":checked"):!!n.val())===i&&(a=a.add(n))}),!!a.length&&a},nonBlankInputs:function(t,e){return u.blankInputs(t,e,!0)},stopEverything:function(t){return h(t.target).trigger("ujs:everythingStopped"),t.stopImmediatePropagation(),!1},disableElement:function(t){var e=t.data("disable-with");e!==l&&(t.data("ujs:enable-with",t.html()),t.html(e)),t.bind("click.railsDisable",function(t){return u.stopEverything(t)}),t.data("ujs:disabled",!0)},enableElement:function(t){t.data("ujs:enable-with")!==l&&(t.html(t.data("ujs:enable-with")),t.removeData("ujs:enable-with")),t.unbind("click.railsDisable"),t.removeData("ujs:disabled")}},u.fire(t,"rails:attachBindings")&&(h.ajaxPrefilter(function(t,e,i){t.crossDomain||u.CSRFProtection(i)}),h(window).on("pageshow.rails",function(){h(h.rails.enableSelector).each(function(){var t=h(this);t.data("ujs:disabled")&&h.rails.enableFormElement(t)}),h(h.rails.linkDisableSelector).each(function(){var t=h(this);t.data("ujs:disabled")&&h.rails.enableElement(t)})}),t.on("ajax:complete",u.linkDisableSelector,function(){u.enableElement(h(this))}),t.on("ajax:complete",u.buttonDisableSelector,function(){u.enableFormElement(h(this))}),t.on("click.rails",u.linkClickSelector,function(t){var e=h(this),i=e.data("method"),n=e.data("params"),s=t.metaKey||t.ctrlKey;if(!u.allowAction(e))return u.stopEverything(t);if(!s&&e.is(u.linkDisableSelector)&&u.disableElement(e),u.isRemote(e)){if(s&&(!i||"GET"===i)&&!n)return!0;var o=u.handleRemote(e);return!1===o?u.enableElement(e):o.fail(function(){u.enableElement(e)}),!1}return i?(u.handleMethod(e),!1):void 0}),t.on("click.rails",u.buttonClickSelector,function(t){var e=h(this);if(!u.allowAction(e)||!u.isRemote(e))return u.stopEverything(t);e.is(u.buttonDisableSelector)&&u.disableFormElement(e);var i=u.handleRemote(e);return!1===i?u.enableFormElement(e):i.fail(function(){u.enableFormElement(e)}),!1}),t.on("change.rails",u.inputChangeSelector,function(t){var e=h(this);return u.allowAction(e)&&u.isRemote(e)?(u.handleRemote(e),!1):u.stopEverything(t)}),t.on("submit.rails",u.formSubmitSelector,function(t){var e,i,n=h(this),s=u.isRemote(n);if(!u.allowAction(n))return u.stopEverything(t);if(n.attr("novalidate")===l)if(n.data("ujs:formnovalidate-button")===l){if((e=u.blankInputs(n,u.requiredInputSelector,!1))&&u.fire(n,"ajax:aborted:required",[e]))return u.stopEverything(t)}else n.data("ujs:formnovalidate-button",l);if(s){if(i=u.nonBlankInputs(n,u.fileInputSelector)){setTimeout(function(){u.disableFormElements(n)},13);var o=u.fire(n,"ajax:aborted:file",[i]);return o||setTimeout(function(){u.enableFormElements(n)},13),o}return u.handleRemote(n),!1}setTimeout(function(){u.disableFormElements(n)},13)}),t.on("click.rails",u.formInputClickSelector,function(t){var e=h(this);if(!u.allowAction(e))return u.stopEverything(t);var i=e.attr("name"),n=i?{name:i,value:e.val()}:null,s=e.closest("form");0===s.length&&(s=h("#"+e.attr("form"))),s.data("ujs:submit-button",n),s.data("ujs:formnovalidate-button",e.attr("formnovalidate")),s.data("ujs:submit-button-formaction",e.attr("formaction")),s.data("ujs:submit-button-formmethod",e.attr("formmethod"))}),t.on("ajax:send.rails",u.formSubmitSelector,function(t){this===t.target&&u.disableFormElements(h(this))}),t.on("ajax:complete.rails",u.formSubmitSelector,function(t){this===t.target&&u.enableFormElements(h(this))}),h(function(){u.refreshCSRFTokens()}))}(jQuery),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){return t.ui=t.ui||{},t.ui.version="1.12.1"}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(n){return n.extend(n.expr[":"],{data:n.expr.createPseudo?n.expr.createPseudo(function(e){return function(t){return!!n.data(t,e)}}):function(t,e,i){return!!n.data(t,i[3])}})}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(t){return t.fn.extend({disableSelection:(e="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(e+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(".ui-disableSelection")}});var e}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(l){function u(t){for(var e=t.css("visibility");"inherit"===e;)e=(t=t.parent()).css("visibility");return"hidden"!==e}return l.ui.focusable=function(t,e){var i,n,s,o,a,r=t.nodeName.toLowerCase();return"area"===r?(n=(i=t.parentNode).name,!(!t.href||!n||"map"!==i.nodeName.toLowerCase())&&(0<(s=l("img[usemap='#"+n+"']")).length&&s.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(r)?(o=!t.disabled)&&(a=l(t).closest("fieldset")[0])&&(o=!a.disabled):o="a"===r&&t.href||e,o&&l(t).is(":visible")&&u(l(t)))},l.extend(l.expr[":"],{focusable:function(t){return l.ui.focusable(t,null!=l.attr(t,"tabindex"))}}),l.ui.focusable}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(t){return t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)}}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(t){return t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase())}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(t){return t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(t){return t.ui.escapeSelector=(e=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g,function(t){return t.replace(e,"\\$1")});var e}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version","./escape-selector"],t):t(jQuery)}(function(o){return o.fn.labels=function(){var t,e,i,n,s;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),(i=this.attr("id"))&&(s=(t=this.eq(0).parents().last()).add(t.length?t.siblings():this.siblings()),e="label[for='"+o.ui.escapeSelector(i)+"']",n=n.add(s.find(e).addBack(e))),this.pushStack(n))}}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(r){"1.7"===r.fn.jquery.substring(0,3)&&(r.each(["Width","Height"],function(t,i){function n(t,e,i,n){return r.each(s,function(){e-=parseFloat(r.css(t,"padding"+this))||0,i&&(e-=parseFloat(r.css(t,"border"+this+"Width"))||0),n&&(e-=parseFloat(r.css(t,"margin"+this))||0)}),e}var s="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:r.fn.innerWidth,innerHeight:r.fn.innerHeight,outerWidth:r.fn.outerWidth,outerHeight:r.fn.outerHeight};r.fn["inner"+i]=function(t){return t===undefined?a["inner"+i].call(this):this.each(function(){r(this).css(o,n(this,t)+"px")})},r.fn["outer"+i]=function(t,e){return"number"!=typeof t?a["outer"+i].call(this,t):this.each(function(){r(this).css(o,n(this,t,!0,e)+"px")})}}),r.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))})}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(o){return o.ui.plugin={add:function(t,e,i){var n,s=o.ui[t].prototype;for(n in i)s.plugins[n]=s.plugins[n]||[],s.plugins[n].push([e,i[n]])},call:function(t,e,i,n){var s,o=t.plugins[e];if(o&&(n||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(s=0;s")[0],y=h.each;i.style.cssText="background-color:rgba(1,1,1,.5)",v.rgba=-1o.mod/2?n+=o.mod:n-s>o.mod/2&&(n-=o.mod)),u[i]=d((s-n)*a+n,e)))}),this[e](u)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),n=f(t)._rgba;return f(h.map(e,function(t,e){return(1-i)*n[e]+i*t}))},toRgbaString:function(){var t="rgba(",e=h.map(this._rgba,function(t,e){return null==t?2").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},s=document.activeElement;try{s.id}catch(o){s=document.body}return i.wrap(t),(i[0]===s||d.contains(i[0],s))&&d(s).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(d.extend(n,{position:i.css("position"),zIndex:i.css("z-index")}),d.each(["top","left","bottom","right"],function(t,e){n[e]=i.css(e),isNaN(parseInt(n[e],10))&&(n[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(n).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===e||d.contains(t[0],e))&&d(e).trigger("focus")),t}}),d.extend(d.effects,{version:"1.12.1",define:function(t,e,i){return i||(i=e,e="effect"),d.effects.effect[t]=i,d.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var n="horizontal"!==i?(e||100)/100:1,s="vertical"!==i?(e||100)/100:1;return{height:t.height()*s,width:t.width()*n,outerHeight:t.outerHeight()*s,outerWidth:t.outerWidth()*n}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var n=t.queue();1").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),"float":t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(r+"placeholder",e)),t.css({position:i,left:n.left,top:n.top}),e},removePlaceholder:function(t){var e=r+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){d.effects.restoreStyle(t),d.effects.removePlaceholder(t)},setTransition:function(n,t,s,o){return o=o||{},d.each(t,function(t,e){var i=n.cssUnit(e);0").appendTo("body").addClass(t.className).css({top:h.top-a,left:h.left-r,height:i.innerHeight(),width:i.innerWidth(),position:s?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),d.isFunction(e)&&e()})}}),d.fx.step.clip=function(t){t.clipInit||(t.start=d(t.elem).cssClip(),"string"==typeof t.end&&(t.end=e(t.end,t.elem)),t.clipInit=!0),d(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})}}(),i={},d.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){i[t]=function(t){return Math.pow(t,e+2)}}),d.extend(i,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),d.each(i,function(t,e){d.easing["easeIn"+t]=e,d.easing["easeOut"+t]=function(t){return 1-e(1-t)},d.easing["easeInOut"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}}),d.effects}),function(t){"function"==typeof define&&define.amd?define(["jquery","./form","./version"],t):t(jQuery)}(function(i){return i.ui.formResetMixin={_formResetHandler:function(){var e=i(this);setTimeout(function(){var t=e.data("ui-form-reset-instances");i.each(t,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var t=this.form.data("ui-form-reset-instances");t.splice(i.inArray(this,t),1),t.length?this.form.data("ui-form-reset-instances",t):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}}}),function(t){"function"==typeof define&&define.amd?define(["jquery","./version"],t):t(jQuery)}(function(D){return function(){function x(t,e,i){return[parseFloat(t[0])*(l.test(t[0])?e/100:1),parseFloat(t[1])*(l.test(t[1])?i/100:1)]}function k(t,e){return parseInt(D.css(t,e),10)||0}function e(t){var e=t[0];return 9===e.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:D.isWindow(e)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:e.preventDefault?{width:0,height:0,offset:{top:e.pageY,left:e.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}var s,C=Math.max,T=Math.abs,n=/left|center|right/,o=/top|center|bottom/,a=/[\+\-]\d+(\.[\d]+)?%?/,r=/^\w+/,l=/%$/,i=D.fn.position;D.position={scrollbarWidth:function(){if(s!==undefined)return s;var t,e,i=D("
    "),n=i.children()[0];return D("body").append(i),t=n.offsetWidth,i.css("overflow","scroll"),t===(e=n.offsetWidth)&&(e=i[0].clientWidth),i.remove(),s=t-e},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===e||"auto"===e&&t.widthC(T(n),T(s))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),a.offset(D.extend(u,{using:t}))})},D.ui.position={fit:{left:function(t,e){var i,n=e.within,s=n.isWindow?n.scrollLeft:n.offset.left,o=n.width,a=t.left-e.collisionPosition.marginLeft,r=s-a,l=a+e.collisionWidth-o-s;e.collisionWidth>o?0o?0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=h(e||this.defaultElement||this)[0],this.element=h(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=h(),this.hoverable=h(),this.focusable=h(),this.classesElementLookup={},e!==this&&(h.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=h(e.style?e.ownerDocument:e.document||e),this.window=h(this.document[0].defaultView||this.document[0].parentWindow)),this.options=h.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:h.noop,_create:h.noop,_init:h.noop,destroy:function(){var i=this;this._destroy(),h.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:h.noop,widget:function(){return this.element},option:function(t,e){var i,n,s,o=t;if(0===arguments.length)return h.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(n=o[t]=h.widget.extend({},this.options[t]),s=0;s").css({position:"absolute",visibility:"visible",left:-o*m,top:-s*g}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:m,height:g,left:a+(p?l*m:0),top:r+(p?u*g:0),opacity:p?0:1}).animate({left:a+(p?0:l*m),top:r+(p?0:u*g),opacity:p?1:0},t.duration||500,t.easing,i)})}),function(t){"function"==typeof define&&define.amd?define(["jquery","../version","../effect"],t):t(jQuery)}(function(n){return n.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;n(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})})}),function(t){"function"==typeof define&&define.amd?define(["jquery","../version","../effect"],t):t(jQuery)}(function(g){return g.effects.define("fold","hide",function(e,t){var i=g(this),n=e.mode,s="show"===n,o="hide"===n,a=e.size||15,r=/([0-9]+)%/.exec(a),l=!!e.horizFirst?["right","bottom"]:["bottom","right"],u=e.duration/2,h=g.effects.createPlaceholder(i),c=i.cssClip(),d={clip:g.extend({},c)},p={clip:g.extend({},c)},f=[c[l[0]],c[l[1]]],m=i.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,s&&(i.cssClip(p.clip),h&&h.css(g.effects.clipToBox(p)),p.clip=c),i.queue(function(t){h&&h.animate(g.effects.clipToBox(d),u,e.easing).animate(g.effects.clipToBox(p),u,e.easing),t()}).animate(d,u,e.easing).animate(p,u,e.easing).queue(t),g.effects.unshift(i,m,4)})}),function(t){"function"==typeof define&&define.amd?define(["jquery","../version","../effect"],t):t(jQuery)}(function(s){return s.effects.define("highlight","show",function(t,e){var i=s(this),n={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&&(n.opacity=0),s.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(n,{queue:!1,duration:t.duration,easing:t.easing,complete:e})})}),function(t){"function"==typeof define&&define.amd?define(["jquery","../version","../effect"],t):t(jQuery)}(function(y){return y.effects.define("size",function(s,e){var t,o,i,n=y(this),a=["fontSize"],r=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],u=s.mode,h="effect"!==u,c=s.scale||"both",d=s.origin||["middle","center"],p=n.css("position"),f=n.position(),m=y.effects.scaledDimensions(n),g=s.from||m,v=s.to||y.effects.scaledDimensions(n,0);y.effects.createPlaceholder(n),"show"===u&&(i=g,g=v,v=i),o={from:{y:g.height/m.height,x:g.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},"box"!==c&&"both"!==c||(o.from.y!==o.to.y&&(g=y.effects.setTransition(n,r,o.from.y,g),v=y.effects.setTransition(n,r,o.to.y,v)),o.from.x!==o.to.x&&(g=y.effects.setTransition(n,l,o.from.x,g),v=y.effects.setTransition(n,l,o.to.x,v))),"content"!==c&&"both"!==c||o.from.y!==o.to.y&&(g=y.effects.setTransition(n,a,o.from.y,g),v=y.effects.setTransition(n,a,o.to.y,v)),d&&(t=y.effects.getBaseline(d,m),g.top=(m.outerHeight-g.outerHeight)*t.y+f.top,g.left=(m.outerWidth-g.outerWidth)*t.x+f.left,v.top=(m.outerHeight-v.outerHeight)*t.y+f.top,v.left=(m.outerWidth-v.outerWidth)*t.x+f.left),n.css(g),"content"!==c&&"both"!==c||(r=r.concat(["marginTop","marginBottom"]).concat(a),l=l.concat(["marginLeft","marginRight"]),n.find("*[width]").each(function(){var t=y(this),e=y.effects.scaledDimensions(t),i={height:e.height*o.from.y,width:e.width*o.from.x,outerHeight:e.outerHeight*o.from.y,outerWidth:e.outerWidth*o.from.x},n={height:e.height*o.to.y,width:e.width*o.to.x,outerHeight:e.height*o.to.y,outerWidth:e.width*o.to.x};o.from.y!==o.to.y&&(i=y.effects.setTransition(t,r,o.from.y,i),n=y.effects.setTransition(t,r,o.to.y,n)),o.from.x!==o.to.x&&(i=y.effects.setTransition(t,l,o.from.x,i),n=y.effects.setTransition(t,l,o.to.x,n)),h&&y.effects.saveStyle(t),t.css(i),t.animate(n,s.duration,s.easing,function(){h&&y.effects.restoreStyle(t)})})),n.animate(v,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=n.offset();0===v.opacity&&n.css("opacity",g.opacity),h||(n.css("position","static"===p?"relative":p).offset(t),y.effects.saveStyle(n)),e()}})})}),function(t){"function"==typeof define&&define.amd?define(["jquery","../version","../effect","./effect-size"],t):t(jQuery)}(function(a){return a.effects.define("scale",function(t,e){var i=a(this),n=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"effect"!==n?0:100),o=a.extend(!0,{from:a.effects.scaledDimensions(i),to:a.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&&(o.from.opacity=1,o.to.opacity=0),a.effects.effect.size.call(this,o,e)})}),function(t){"function"==typeof define&&define.amd?define(["jquery","../version","../effect","./effect-scale"],t):t(jQuery)}(function(n){return n.effects.define("puff","hide",function(t,e){var i=n.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});n.effects.effect.scale.call(this,i,e)})}),function(t){"function"==typeof define&&define.amd?define(["jquery","../version","../effect"],t):t(jQuery)}(function(c){return c.effects.define("pulsate","show",function(t,e){var i=c(this),n=t.mode,s="show"===n,o=s||"hide"===n,a=2*(t.times||5)+(o?1:0),r=t.duration/a,l=0,u=1,h=i.queue().length;for(!s&&i.is(":visible")||(i.css("opacity",0).show(),l=1);u li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=h(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():h()}},_createIcons:function(){var t,e,i=this.options.icons;i&&(t=h(""),this._addClass(t,"ui-accordion-header-icon","ui-icon "+i.header),t.prependTo(this.headers),e=this.active.children(".ui-accordion-header-icon"),this._removeClass(e,i.header)._addClass(e,null,i.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=h.ui.keyCode,i=this.headers.length,n=this.headers.index(t.target),s=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:s=this.headers[(n+1)%i];break;case e.LEFT:case e.UP:s=this.headers[(n-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:s=this.headers[0];break;case e.END:s=this.headers[i-1]}s&&(h(t.target).attr("tabIndex",-1),h(s).attr("tabIndex",0),h(s).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===h.ui.keyCode.UP&&t.ctrlKey&&h(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=h()):!1===t.active?this._activate(0):this.active.length&&!h.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=h()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,n=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=h(this),e=t.uniqueId().attr("id"),i=t.next(),n=i.uniqueId().attr("id");t.attr("aria-controls",n),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=n.height(),this.element.siblings(":visible").each(function(){var t=h(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=h(this).outerHeight(!0)}),this.headers.next().each(function(){h(this).height(Math.max(0,i-h(this).innerHeight()+h(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){var t=h(this).is(":visible");t||h(this).show(),i=Math.max(i,h(this).css("height","").height()),t||h(this).hide()}).height(i))},_activate:function(t){var e=this._findActive(t)[0];e!==this.active[0]&&(e=e||this.active[0],this._eventHandler({target:e,currentTarget:e,preventDefault:h.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):h()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&h.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e,i,n=this.options,s=this.active,o=h(t.currentTarget),a=o[0]===s[0],r=a&&n.collapsible,l=r?h():o.next(),u={oldHeader:s,oldPanel:s.next(),newHeader:r?h():o,newPanel:l};t.preventDefault(),a&&!n.collapsible||!1===this._trigger("beforeActivate",t,u)||(n.active=!r&&this.headers.index(o),this.active=a?h():o,this._toggle(u),this._removeClass(s,"ui-accordion-header-active","ui-state-active"),n.icons&&(e=s.children(".ui-accordion-header-icon"),this._removeClass(e,null,n.icons.activeHeader)._addClass(e,null,n.icons.header)),a||(this._removeClass(o,"ui-accordion-header-collapsed")._addClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.header)._addClass(i,null,n.icons.activeHeader)),this._addClass(o.next(),"ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(h(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){var n,s,o,a=this,r=0,l=t.css("box-sizing"),u=t.length&&(!i.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(t){var e=r(t.target),i=r(r.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var e=r(t.target).closest(".ui-menu-item"),i=r(t.currentTarget);e[0]===i[0]&&(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(t){this._delay(function(){!r.contains(this.element[0],r.ui.safeActiveElement(this.document[0]))&&this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=r(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,n,s,o=!0;switch(t.keyCode){case r.ui.keyCode.PAGE_UP:this.previousPage(t);break;case r.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case r.ui.keyCode.HOME:this._move("first","first",t);break;case r.ui.keyCode.END:this._move("last","last",t);break;case r.ui.keyCode.UP:this.previous(t);break;case r.ui.keyCode.DOWN:this.next(t);break;case r.ui.keyCode.LEFT:this.collapse(t);break;case r.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case r.ui.keyCode.ENTER:case r.ui.keyCode.SPACE:this._activate(t);break;case r.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,i=this.previousFilter||"",s=!1,n=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),n===i?s=!0:n=i+n,e=this._filterMenuItems(n),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(n=String.fromCharCode(t.keyCode),e=this._filterMenuItems(n)),e.length?(this.focus(t,e),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,i,n,s=this,o=this.options.icons.submenu,a=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=a.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=r(this),e=t.prev(),i=r("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+o),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=a.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=r(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),n=(i=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(i,"ui-menu-item")._addClass(n,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!r.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,n,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),n=this.active.children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",n.attr("id")),s=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,n,s,o,a;this._hasScroll()&&(e=parseFloat(r.css(this.activeMenu[0],"borderTopWidth"))||0,i=parseFloat(r.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-e-i,s=this.activeMenu.scrollTop(),o=this.activeMenu.height(),a=t.outerHeight(),n<0?this.activeMenu.scrollTop(s+n):o",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var i,n,s,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,o="input"===t;this.isMultiLine=e||!o&&this._isContentEditable(this.element),this.valueMethod=this.element[e||o?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))n=s=i=!0;else{n=s=i=!1;var e=a.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:n=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!n){var e=a.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(s)return s=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(clearTimeout(this.searching),this.close(t),this._change(t))}}),this._initSource(),this.menu=a("
      ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==a.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(t,e){var i,n;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){a(t.target).trigger(t.originalEvent)});n=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),(i=e.item.attr("aria-label")||n.value)&&a.trim(i).length&&(this.liveRegion.children().hide(),a("
      ").text(i).appendTo(this.liveRegion))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==a.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=a("
      ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||a.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?a(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front, dialog")),t.length||(t=this.document[0].body),t},_initSource:function(){var i,n,s=this;a.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(a.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(n=this.options.source,this.source=function(t,e){s.xhr&&s.xhr.abort(),s.xhr=a.ajax({url:n,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(n){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=n.altKey||n.ctrlKey||n.metaKey||n.shiftKey;t&&(!t||e||i)||(this.selectedItem=null,this.search(null,n))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(a("
      ").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),a.extend(a.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(t,function(t){return i.test(t.label||t.value||t)})}}),a.widget("ui.autocomplete",a.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1").text(e).appendTo(this.liveRegion))}}),a.ui.autocomplete}),function(t){"function"==typeof define&&define.amd?define(["jquery","../widget"],t):t(jQuery)}(function(l){var o=/ui-corner-([a-z]){2,6}/g;return l.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"
      ",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var a=this,r=[];l.each(this.options.items,function(s,t){var e,o={};if(t)return"controlgroupLabel"===s?((e=a.element.find(t)).each(function(){var t=l(this);t.children(".ui-controlgroup-label-contents").length||t.contents().wrapAll("")}),a._addClass(e,null,"ui-widget ui-widget-content ui-state-default"),void(r=r.concat(e.get()))):void(l.fn[s]&&(o=a["_"+s+"Options"]?a["_"+s+"Options"]("middle"):{classes:{}},a.element.find(t).each(function(){var t=l(this),e=t[s]("instance"),i=l.widget.extend({},o);if("button"!==s||!t.parent(".ui-spinner").length){e||(e=t[s]()[s]("instance")),e&&(i.classes=a._resolveClassesValues(i.classes,e)),t[s](i);var n=t[s]("widget");l.data(n[0],"ui-controlgroup-data",e||t[s]("instance")),r.push(n[0])}})))}),this.childWidgets=l(l.unique(r)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var t=l(this).data("ui-controlgroup-data");t&&t[e]&&t[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",n=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,n)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,n={classes:{}};return n.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],n},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:!!e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(i,n){var s={};return l.each(i,function(t){var e=n.options.classes[t]||"";e=l.trim(e.replace(o,"")),s[t]=(e+" "+i[t]).replace(/\s+/g," ")}),s},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"!==t?this.refresh():this._callChildMethod(e?"disable":"enable")},refresh:function(){var s,o=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),s=this.childWidgets,this.options.onlyVisible&&(s=s.filter(":visible")),s.length&&(l.each(["first","last"],function(t,e){var i=s[e]().data("ui-controlgroup-data");if(i&&o["_"+i.widgetName+"Options"]){var n=o["_"+i.widgetName+"Options"](1===s.length?"only":e);n.classes=o._resolveClassesValues(n.classes,i),i.element[i.widgetName](n)}else o._updateCornerClass(s[e](),e)}),this._callChildMethod("refresh"))}})}),function(t){"function"==typeof define&&define.amd?define(["jquery","../escape-selector","../form-reset-mixin","../labels","../widget"],t):t(jQuery)}(function(s){return s.widget("ui.checkboxradio",[s.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var t,e,i=this,n=this._super()||{};return this._readType(),e=this.element.labels(),this.label=s(e[e.length-1]),this.label.length||s.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){i.originalLabel+=3===this.nodeType?s(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),null!=(t=this.element[0].disabled)&&(n.disabled=t),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var t=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===t&&/radio|checkbox/.test(this.type)||s.error("Can't create checkboxradio on element.nodeName="+t+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){ +var t=this.element[0].name,e="input[name='"+s.ui.escapeSelector(t)+"']";return t?(this.form.length?s(this.form[0].elements).filter(e):s(e).filter(function(){return 0===s(this).form().length})).not(this.element):s([])},_toggleClasses:function(){var t=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",t)._toggleClass(this.icon,null,"ui-icon-blank",!t),"radio"===this.type&&this._getRadioGroup().each(function(){var t=s(this).checkboxradio("instance");t&&t._removeClass(t.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(t){var e="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=s(""),this.iconSpace=s(" "),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(e+=t?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,t?"ui-icon-blank":"ui-icon-check")):e+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",e),t||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):this.icon!==undefined&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),s.ui.checkboxradio}),function(t){"function"==typeof define&&define.amd?define(["jquery","./controlgroup","./checkboxradio","../keycode","../widget"],t):t(jQuery)}(function(o){var t;return o.widget("ui.button",{version:"1.12.1",defaultElement:"").addClass(this._triggerClass).html(s?k("").attr({src:s,alt:n,title:n}):n)),t[a?"before":"after"](e.trigger),e.trigger.on("click",function(){return k.datepicker._datepickerShowing&&k.datepicker._lastInput===t[0]?k.datepicker._hideDatepicker():(k.datepicker._datepickerShowing&&k.datepicker._lastInput!==t[0]&&k.datepicker._hideDatepicker(),k.datepicker._showDatepicker(t[0])),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,n,s,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(s=n=i=0;si&&(i=t[s].length,n=s);return n},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(t,e){var i=k(t);i.hasClass(this.markerClassName)||(i.addClass(this.markerClassName).append(e.dpDiv),k.data(t,"datepicker",e),this._setDate(e,this._getDefaultDate(e),!0),this._updateDatepicker(e),this._updateAlternate(e),e.settings.disabled&&this._disableDatepicker(t),e.dpDiv.css("display","block"))},_dialogDatepicker:function(t,e,i,n,s){var o,a,r,l,u,h=this._dialogInst;return h||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=k(""),this._dialogInput.on("keydown",this._doKeyDown),k("body").append(this._dialogInput),(h=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},k.data(this._dialogInput[0],"datepicker",h)),c(h.settings,n||{}),e=e&&e.constructor===Date?this._formatDate(h,e):e,this._dialogInput.val(e),this._pos=s?s.length?s:[s.pageX,s.pageY]:null,this._pos||(a=document.documentElement.clientWidth,r=document.documentElement.clientHeight,l=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[a/2-100+l,r/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),h.settings.onSelect=i,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),k.blockUI&&k.blockUI(this.dpDiv),k.data(this._dialogInput[0],"datepicker",h),this},_destroyDatepicker:function(t){var e,i=k(t),n=k.data(t,"datepicker");i.hasClass(this.markerClassName)&&(e=t.nodeName.toLowerCase(),k.removeData(t,"datepicker"),"input"===e?(n.append.remove(),n.trigger.remove(),i.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==e&&"span"!==e||i.removeClass(this.markerClassName).empty(),r===n&&(r=null))},_enableDatepicker:function(e){var t,i,n=k(e),s=k.data(e,"datepicker");n.hasClass(this.markerClassName)&&("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!1,s.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==t&&"span"!==t||((i=n.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=k.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var t,i,n=k(e),s=k.data(e,"datepicker");n.hasClass(this.markerClassName)&&("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!0,s.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==t&&"span"!==t||((i=n.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=k.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;er&&nl&&se;)--Z<0&&(Z=11,tt--);for(t.drawMonth=Z,t.drawYear=tt,i=this._get(t,"prevText"),i=Y?this.formatDate(i,this._daylightSavingAdjust(new Date(tt,Z-U,1)),this._getFormatConfig(t)):i,n=this._canAdjustMonth(t,-1,tt,Z)?""+i+"":q?"":""+i+"",s=this._get(t,"nextText"),s=Y?this.formatDate(s,this._daylightSavingAdjust(new Date(tt,Z+U,1)),this._getFormatConfig(t)):s,o=this._canAdjustMonth(t,1,tt,Z)?""+s+"":q?"":""+s+"",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?J:W,a=Y?this.formatDate(a,r,this._getFormatConfig(t)):a,l=t.inline?"":"",u=B?"
      "+(R?l:"")+(this._isInRange(t,r)?"":"")+(R?"":l)+"
      ":"",h=parseInt(this._get(t,"firstDay"),10),h=isNaN(h)?0:h,c=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),y=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),_="",x=0;x"+(/all|left/.test(D)&&0===x?R?o:n:"")+(/all|right/.test(D)&&0===x?R?n:o:"")+this._generateMonthYearHeader(t,Z,tt,X,G,0",I=c?"":"",w=0;w<7;w++)I+="";for(S+=I+"",A=this._getDaysInMonth(tt,Z),tt===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,A)),E=(this._getFirstDayOfMonth(tt,Z)-h+7)%7,N=Math.ceil((E+A)/7),P=Q&&this.maxRows>N?this.maxRows:N,this.maxRows=P,O=this._daylightSavingAdjust(new Date(tt,Z,1-E)),H=0;H",j=c?"":"",w=0;w<7;w++)F=g?g.apply(t.input?t.input[0]:null,[O]):[!0,""],z=(L=O.getMonth()!==Z)&&!y||!F[0]||X&&O"+(L&&!v?" ":z?""+O.getDate()+"":""+O.getDate()+"")+"",O.setDate(O.getDate()+1),O=this._daylightSavingAdjust(O);S+=j+""}11<++Z&&(Z=0,tt++),k+=S+="
      "+this._get(t,"weekHeader")+""+p[M]+"
      "+this._get(t,"calculateWeek")(O)+"
      "+(Q?"
      "+(0
      ":""):"")}_+=k}return _+=u,t._keyEvent=!1,_},_generateMonthYearHeader:function(t,e,i,n,s,o,a,r){var l,u,h,c,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),y=this._get(t,"showMonthAfterYear"),b="
      ",_="";if(o||!g)_+=""+a[e]+"";else{for(l=n&&n.getFullYear()===i,u=s&&s.getFullYear()===i,_+=""}if(y||(b+=_+(!o&&g&&v?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!v)b+=""+i+"";else{for(c=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),f=(p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e})(c[0]),m=Math.max(f,p(c[1]||"")),f=n?Math.max(f,n.getFullYear()):f,m=s?Math.min(m,s.getFullYear()):m,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),y&&(b+=(!o&&g&&v?"":" ")+_),b+="
      "},_adjustInstDate:function(t,e,i){var n=t.selectedYear+("Y"===i?e:0),s=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(n,s))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(n,s,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),n=this._getMinMaxDate(t,"max"),s=i&&e=s.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||e.getFullYear()<=r)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,n){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var s=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(n,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),s,this._getFormatConfig(t))}}),k.fn.datepicker=function(t,e){if(!this.length)return this;k.datepicker.initialized||(k(document).on("mousedown",k.datepicker._checkExternalClick),k.datepicker.initialized=!0),0===k("#"+k.datepicker._mainDivId).length&&k("body").append(k.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof e?k.datepicker["_"+t+"Datepicker"].apply(k.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?k.datepicker["_"+t+"Datepicker"].apply(k.datepicker,[this].concat(i)):k.datepicker._attachDatepicker(this,t)}):k.datepicker["_"+t+"Datepicker"].apply(k.datepicker,[this[0]].concat(i))},k.datepicker=new t,k.datepicker.initialized=!1,k.datepicker.uuid=(new Date).getTime(),k.datepicker.version="1.12.1",k.datepicker}),function(t){"function"==typeof define&&define.amd?define(["jquery","../ie","../version","../widget"],t):t(jQuery)}(function(s){var o=!1;return s(document).on("mouseup",function(){o=!1}),s.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(t){if(!0===s.data(t.target,e.widgetName+".preventClickEvent"))return s.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!o){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,n=!("string"!=typeof this.options.cancel||!t.target.nodeName)&&s(t.target).closest(this.options.cancel).length;return!(i&&!n&&this._mouseCapture(t))||(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===s.data(t.target,this.widgetName+".preventClickEvent")&&s.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),o=!0))}},_mouseMove:function(t){if(this._mouseMoved){if(s.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&s.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,o=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})}),function(t){"function"==typeof define&&define.amd?define(["jquery","./mouse","../data","../plugin","../safe-active-element","../safe-blur","../scroll-parent","../version","../widget"],t):t(jQuery)}(function(b){return b.widget("ui.draggable",b.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){(this.helper||this.element).is(".ui-draggable-dragging")?this.destroyOnClear=!0:(this._removeHandleClassName(),this._mouseDestroy())},_mouseCapture:function(t){var e=this.options;return!(this.helper||e.disabled||0").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var e=b.ui.safeActiveElement(this.document[0]);b(t.target).closest(e).length||b.ui.safeBlur(e)},_mouseStart:function(t){var e=this.options;return this.helper=this._createHelper(t),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),b.ui.ddmanager&&(b.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0i[2]&&(l=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(u=i[3]+this.offset.click.top)),a.grid&&(s=a.grid[1]?this.originalPageY+Math.round((u-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,u=i?s-this.offset.click.top>=i[1]||s-this.offset.click.top>i[3]?s:s-this.offset.click.top>=i[1]?s-a.grid[1]:s+a.grid[1]:s,o=a.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,l=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(l=this.originalPageX),"x"===a.axis&&(u=this.originalPageY)),{top:u-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(t,e,i){return i=i||this._uiHash(),b.ui.plugin.call(this,t,[e,i,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),i.offset=this.positionAbs),b.Widget.prototype._trigger.call(this,t,e,i)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),b.ui.plugin.add("draggable","connectToSortable",{start:function(e,t,i){var n=b.extend({},t,{item:i.element});i.sortables=[],b(i.options.connectToSortable).each(function(){var t=b(this).sortable("instance");t&&!t.options.disabled&&(i.sortables.push(t),t.refreshPositions(),t._trigger("activate",e,n))})},stop:function(e,t,i){var n=b.extend({},t,{item:i.element});i.cancelHelperRemoval=!1,b.each(i.sortables,function(){var t=this;t.isOver?(t.isOver=0,i.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(i,n,s){b.each(s.sortables,function(){var t=!1,e=this;e.positionAbs=s.positionAbs,e.helperProportions=s.helperProportions,e.offset.click=s.offset.click,e._intersectsWith(e.containerCache)&&(t=!0,b.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==e&&this._intersectsWith(this.containerCache)&&b.contains(e.element[0],this.element[0])&&(t=!1),t})),t?(e.isOver||(e.isOver=1,s._parent=n.helper.parent(),e.currentItem=n.helper.appendTo(e.element).data("ui-sortable-item",!0),e.options._helper=e.options.helper,e.options.helper=function(){return n.helper[0]},i.target=e.currentItem[0],e._mouseCapture(i,!0),e._mouseStart(i,!0,!0),e.offset.click.top=s.offset.click.top,e.offset.click.left=s.offset.click.left,e.offset.parent.left-=s.offset.parent.left-e.offset.parent.left,e.offset.parent.top-=s.offset.parent.top-e.offset.parent.top,s._trigger("toSortable",i),s.dropped=e.element,b.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,e.fromOutside=s),e.currentItem&&(e._mouseDrag(i),n.position=e.position)):e.isOver&&(e.isOver=0,e.cancelHelperRemoval=!0,e.options._revert=e.options.revert,e.options.revert=!1,e._trigger("out",i,e._uiHash(e)),e._mouseStop(i,!0),e.options.revert=e.options._revert,e.options.helper=e.options._helper,e.placeholder&&e.placeholder.remove(),n.helper.appendTo(s._parent),s._refreshOffsets(i),n.position=s._generatePosition(i,!0),s._trigger("fromSortable",i),s.dropped=!1,b.each(s.sortables,function(){this.refreshPositions()}))})}}),b.ui.plugin.add("draggable","cursor",{start:function(t,e,i){var n=b("body"),s=i.options;n.css("cursor")&&(s._cursor=n.css("cursor")),n.css("cursor",s.cursor)},stop:function(t,e,i){var n=i.options;n._cursor&&b("body").css("cursor",n._cursor)}}),b.ui.plugin.add("draggable","opacity",{start:function(t,e,i){var n=b(e.helper),s=i.options;n.css("opacity")&&(s._opacity=n.css("opacity")),n.css("opacity",s.opacity)},stop:function(t,e,i){var n=i.options;n._opacity&&b(e.helper).css("opacity",n._opacity)}}),b.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,e,i){var n=i.options,s=!1,o=i.scrollParentNotHidden[0],a=i.document[0];o!==a&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(i.overflowOffset.top+o.offsetHeight-t.pageY
      ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,e=function(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(e(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),e(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles()}},_setupHandles:function(){var t,e,i,n,s,o=this.options,a=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(s,"ui-resizable-handle "+n),s.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.append(s);this._renderAxis=function(t){var e,i,n,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:a._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),n=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(n,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){a.resizing||(this.className&&(s=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),a.axis=s&&s[1]?s[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(t){var e,i,n=!1;for(e in this.handles)((i=y(this.handles[e])[0])===t.target||y.contains(i,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var e,i,n,s=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e,i,n=this.originalMousePosition,s=this.axis,o=t.pageX-n.left||0,a=t.pageY-n.top||0,r=this._change[s];return this._updatePrevProperties(),r&&(e=r.apply(this,[t,o,a]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),i=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(i)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,n,s,o,a,r,l=this.options,u=this;return this._helper&&(n=(i=(e=this._proportionallyResizeElements).length&&/textarea/i.test(e[0].nodeName))&&this._hasScroll(e[0],"left")?0:u.sizeDiff.height,s=i?0:u.sizeDiff.width,o={width:u.helper.width()-s,height:u.helper.height()-n},a=parseFloat(u.element.css("left"))+(u.position.left-u.originalPosition.left)||null,r=parseFloat(u.element.css("top"))+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(y.extend(o,{top:r,left:a})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,n,s,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:Infinity,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:Infinity},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,s=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),n>o.minHeight&&(o.minHeight=n),it.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,u=/sw|nw|w/.test(i),h=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),n&&(t.width=e.maxWidth),s&&(t.height=e.maxHeight),o&&u&&(t.left=r-e.minWidth),n&&u&&(t.left=r-e.maxWidth),a&&h&&(t.top=l-e.minHeight),s&&h&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],n=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],s=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(n[e])||0,i[e]+=parseFloat(s[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e
      "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var n=this.originalSize;return{top:this.originalPosition.top+i,height:n.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,n=i._proportionallyResizeElements,s=n.length&&/textarea/i.test(n[0].nodeName),o=s&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,a=s?0:i.sizeDiff.width,r={width:i.size.width-a,height:i.size.height-o},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,u=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(r,u&&l?{top:u,left:l}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&y(n[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,n,t,e,s,o,a,r=y(this).resizable("instance"),l=r.options,u=r.element,h=l.containment,c=h instanceof y?h.get(0):/parent/.test(h)?u.parent().get(0):h;c&&(r.containerElement=y(c),/document/.test(h)||h===document?(r.containerOffset={left:0,top:0},r.containerPosition={left:0,top:0},r.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(c),n=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){n[t]=r._num(i.css("padding"+e))}),r.containerOffset=i.offset(),r.containerPosition=i.position(),r.containerSize={height:i.innerHeight()-n[3],width:i.innerWidth()-n[1]},t=r.containerOffset,e=r.containerSize.height,s=r.containerSize.width,o=r._hasScroll(c,"left")?c.scrollWidth:s,a=r._hasScroll(c)?c.scrollHeight:e,r.parentData={element:c,left:t.left,top:t.top,width:o,height:a}))},resize:function(t){var e,i,n,s,o=y(this).resizable("instance"),a=o.options,r=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,h={top:0,left:0},c=o.containerElement,d=!0;c[0]!==document&&/static/.test(c.css("position"))&&(h=r),l.left<(o._helper?r.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-r.left:o.position.left-h.left),u&&(o.size.height=o.size.width/o.aspectRatio,d=!1),o.position.left=a.helper?r.left:0),l.top<(o._helper?r.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-r.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,d=!1),o.position.top=o._helper?r.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),s=/relative|absolute/.test(o.containerElement.css("position")),n&&s?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),e=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-h.left:o.offset.left-r.left)),i=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-h.top:o.offset.top-r.top)),e+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-e,u&&(o.size.height=o.size.width/o.aspectRatio,d=!1)),i+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-i,u&&(o.size.width=o.size.height*o.aspectRatio,d=!1)),d||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,n=t.containerPosition,s=t.containerElement,o=y(t.helper),a=o.offset(),r=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(s.css("position"))&&y(this).css({left:a.left-n.left-i.left,width:r,height:l}),t._helper&&!e.animate&&/static/.test(s.css("position"))&&y(this).css({left:a.left-n.left-i.left,width:r,height:l})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),n=e.options,s=e.originalSize,o=e.originalPosition,a={height:e.size.height-s.height||0,width:e.size.width-s.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(n.alsoResize).each(function(){var t=y(this),n=y(this).data("ui-resizable-alsoresize"),s={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(n[e]||0)+(a[e]||0);i&&0<=i&&(s[e]=i||null)}),t.css(s)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,n=e.size,s=e.originalSize,o=e.originalPosition,a=e.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,l=r[0]||1,u=r[1]||1,h=Math.round((n.width-s.width)/l)*l,c=Math.round((n.height-s.height)/u)*u,d=s.width+h,p=s.height+c,f=i.maxWidth&&i.maxWidthd,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=l),v&&(p+=u),f&&(d-=l),m&&(p-=u),/^(se|s|e)$/.test(a)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.top=o.top-c):/^(sw)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.left=o.left-h):((p-u<=0||d-l<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",s+1),i=!0),i&&!e&&this._trigger("focus",t),i},open:function(){var t=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=l(l.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(t){function e(){var t=l.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===t||l.contains(this.uiDialog[0],t)||this._focusTabbable()}t.preventDefault(),e.call(this),this._delay(e)},_createWrapper:function(){this.uiDialog=l("
      ").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===l.ui.keyCode.ESCAPE)return t.preventDefault(),void this.close(t);if(t.keyCode===l.ui.keyCode.TAB&&!t.isDefaultPrevented()){var e=this.uiDialog.find(":tabbable"),i=e.filter(":first"),n=e.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==i[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.trigger("focus")}),t.preventDefault()):(this._delay(function(){i.trigger("focus")}),t.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=l("
      "),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(t){l(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=l("").button({label:l("").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),t=l("").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(t,"ui-dialog-title"),this._title(t),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html(" ")},_createButtonPane:function(){this.uiDialogButtonPane=l("
      "),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=l("
      ").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var s=this,t=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),l.isEmptyObject(t)||l.isArray(t)&&!t.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(l.each(t,function(t,e){var i,n;e=l.isFunction(e)?{click:e,text:t}:e,e=l.extend({type:"button"},e),i=e.click,n={icon:e.icon,iconPosition:e.iconPosition,showLabel:e.showLabel,icons:e.icons,text:e.text},delete e.click,delete e.icon,delete e.iconPosition,delete e.showLabel,delete e.icons,"boolean"==typeof e.text&&delete e.text,l("",e).button(n).appendTo(s.uiButtonSet).on("click",function(){i.apply(s.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){function s(t){return{position:t.position,offset:t.offset}}var o=this,a=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(t,e){o._addClass(l(this),"ui-dialog-dragging"),o._blockFrames(),o._trigger("dragStart",t,s(e))},drag:function(t,e){o._trigger("drag",t,s(e))},stop:function(t,e){var i=e.offset.left-o.document.scrollLeft(),n=e.offset.top-o.document.scrollTop();a.position={my:"left top",at:"left"+(0<=i?"+":"")+i+" top"+(0<=n?"+":"")+n,of:o.window},o._removeClass(l(this),"ui-dialog-dragging"),o._unblockFrames(),o._trigger("dragStop",t,s(e))}})},_makeResizable:function(){function o(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var a=this,r=this.options,t=r.resizable,e=this.uiDialog.css("position"),i="string"==typeof t?t:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:r.maxWidth,maxHeight:r.maxHeight,minWidth:r.minWidth,minHeight:this._minHeight(),handles:i,start:function(t,e){a._addClass(l(this),"ui-dialog-resizing"),a._blockFrames(),a._trigger("resizeStart",t,o(e))},resize:function(t,e){a._trigger("resize",t,o(e))},stop:function(t,e){var i=a.uiDialog.offset(),n=i.left-a.document.scrollLeft(),s=i.top-a.document.scrollTop();r.height=a.uiDialog.height(),r.width=a.uiDialog.width(),r.position={my:"left top",at:"left"+(0<=n?"+":"")+n+" top"+(0<=s?"+":"")+s,of:a.window},a._removeClass(l(this),"ui-dialog-resizing"),a._unblockFrames(),a._trigger("resizeStop",t,o(e))}}).css("position",e)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=l(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),e=l.inArray(this,t);-1!==e&&t.splice(e,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(t){var i=this,n=!1,s={};l.each(t,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(n=!0),t in i.resizableRelatedOptions&&(s[t]=e)}),n&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",s)},_setOption:function(t,e){var i,n,s=this.uiDialog;"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:l("").text(""+this.options.closeText).html()}),"draggable"===t&&((i=s.is(":data(ui-draggable)"))&&!e&&s.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&((n=s.is(":data(ui-resizable)"))&&!e&&s.resizable("destroy"),n&&"string"==typeof e&&s.resizable("option","handles",e),n||!1===e||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,n=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),n.minWidth>n.width&&(n.width=n.minWidth),t=this.uiDialog.css({height:"auto",width:n.width}).outerHeight(),e=Math.max(0,n.minHeight-t),i="number"==typeof n.maxHeight?Math.max(0,n.maxHeight-t):"none","auto"===n.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,n.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=l(this);return l("
      ").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return!!l(t.target).closest(".ui-dialog").length||!!l(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=l("
      ").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),!1!==l.uiBackCompat&&l.widget("ui.dialog",l.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),l.ui.dialog}),function(t){"function"==typeof define&&define.amd?define(["jquery","./draggable","./mouse","../version","../widget"],t):t(jQuery)}(function(r){r.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=r.isFunction(i)?i:function(t){return t.is(i)},this.proportions=function(t){if(!arguments.length)return e||(e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight});e=t},this._addToManager(t.scope),t.addClasses&&this._addClass("ui-droppable")},_addToManager:function(t){r.ui.ddmanager.droppables[t]=r.ui.ddmanager.droppables[t]||[],r.ui.ddmanager.droppables[t].push(this)},_splice:function(t){for(var e=0;e").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(t===undefined)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return t===undefined&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,e=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).width(e.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,t===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=i("
      ").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}})}),function(t){"function"==typeof define&&define.amd?define(["jquery","./mouse","../version","../widget"],t):t(jQuery)}(function(h){return h.widget("ui.selectable",h.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var n=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){n.elementPos=h(n.element[0]).offset(),n.selectees=h(n.options.filter,n.element[0]),n._addClass(n.selectees,"ui-selectee"),n.selectees.each(function(){var t=h(this),e=t.offset(),i={left:e.left-n.elementPos.left,top:e.top-n.elementPos.top};h.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=h("
      "),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(i){var n=this,t=this.options;this.opos=[i.pageX,i.pageY],this.elementPos=h(this.element[0]).offset(),this.options.disabled||(this.selectees=h(t.filter,this.element[0]),this._trigger("start",i),h(t.appendTo).append(this.helper),this.helper.css({left:i.pageX,top:i.pageY,width:0,height:0}),t.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var t=h.data(this,"selectable-item");t.startselected=!0,i.metaKey||i.ctrlKey||(n._removeClass(t.$element,"ui-selected"),t.selected=!1,n._addClass(t.$element,"ui-unselecting"),t.unselecting=!0,n._trigger("unselecting",i,{unselecting:t.element}))}),h(i.target).parents().addBack().each(function(){var t,e=h.data(this,"selectable-item");if(e)return t=!i.metaKey&&!i.ctrlKey||!e.$element.hasClass("ui-selected"),n._removeClass(e.$element,t?"ui-unselecting":"ui-selected")._addClass(e.$element,t?"ui-selecting":"ui-unselecting"),e.unselecting=!t,e.selecting=t,(e.selected=t)?n._trigger("selecting",i,{selecting:e.element}):n._trigger("unselecting",i,{unselecting:e.element}),!1}))},_mouseDrag:function(n){if(this.dragged=!0,!this.options.disabled){var t,s=this,o=this.options,a=this.opos[0],r=this.opos[1],l=n.pageX,u=n.pageY;return ll||i.rightu||i.bottoma&&i.rightr&&i.bottom",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var t=this.element.uniqueId().attr("id");this.ids={element:t,button:t+"-button",menu:t+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=a()},_drawButton:function(){var t,e=this,i=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=a("",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),t=a("").appendTo(this.button),this._addClass(t,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(i).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){e._rendered||e._refreshMenu()})},_drawMenu:function(){var n=this;this.menu=a("
      '),this},showYoutubeVideo:function(t){var e,i,n;if(e=560/315,n=this.$element.data("width")||560,i=(n=this.checkDimensions(n))/e,this.resize(n),this.lightbox_body.html(''),this.modal_arrows)return this.modal_arrows.css("display","none")},showVimeoVideo:function(t){var e,i,n;if(e=500/281,n=this.$element.data("width")||560,i=(n=this.checkDimensions(n))/e,this.resize(n),this.lightbox_body.html(''),this.modal_arrows)return this.modal_arrows.css("display","none")},showInstagramVideo:function(t){var e,i;if(i=this.$element.data("width")||612,e=i=this.checkDimensions(i),this.resize(i),this.lightbox_body.html(''),this.modal_arrows)return this.modal_arrows.css("display","none")},error:function(t){return this.lightbox_body.html(t),this},preloadImage:function(t,e){var i,n=this;return i=new Image,null!=e&&!0!==e||(i.onload=function(){var t;return(t=o("")).attr("src",i.src),t.addClass("img-responsive"),n.lightbox_body.html(t),n.modal_arrows&&n.modal_arrows.css("display","block"),n.resize(i.width)},i.onerror=function(){return n.error("Failed to load image: "+t)}),i.src=t,i},resize:function(t){var e;return e=t+this.border.left+this.padding.left+this.padding.right+this.border.right,this.modal_dialog.css("width","auto").css("max-width",e),this.lightbox_container.find("a").css("padding-top",function(){return o(this).parent().height()/2}),this},checkDimensions:function(t){var e;return e=t+this.border.left+this.padding.left+this.padding.right+this.border.right,document.body.clientWidth"!==c[1]||Je.test(a)?0:u:u.firstChild)&&a.childNodes.length;o--;)he.nodeName(l=a.childNodes[o],"tbody")&&!l.childNodes.length&&a.removeChild(l);for(he.merge(m,u.childNodes),u.textContent="";u.firstChild;)u.removeChild(u.firstChild);u=h.lastChild}else m.push(t.createTextNode(a));for(u&&h.removeChild(u),ce.appendChecked||he.grep(y(m,"input"),x),p=0;a=m[p++];)if(r&&-1")).appendTo(t.documentElement))[0].contentWindow||lt[0].contentDocument).document).write(),t.close(),n=F(e,t),lt.detach()),ct[e]=n),n}function _(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}function D(e){if(e in At)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Tt.length;n--;)if((e=Tt[n]+t)in At)return e}function L(e,t){for(var n,r,i,o=[],a=0,s=e.length;ak.cacheLength&&delete n[r.shift()],n[e+" "]=t}var r=[];return n}function u(e){return e[O]=!0,e}function i(e){var t=D.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function t(e,t){for(var n=e.split("|"),r=n.length;r--;)k.attrHandle[n[r]]=t}function d(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||V)-(~e.sourceIndex||V);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function r(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function o(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function a(a){return u(function(o){return o=+o,u(function(e,t){for(var n,r=a([],e.length,o),i=r.length;i--;)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function p(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function s(){}function g(e){for(var t=0,n=e.length,r="";t+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),ce=new RegExp(oe),fe=new RegExp("^"+re+"$"),he={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},me=/^(?:input|select|textarea|button)$/i,pe=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ve=/[+~]/,xe=/'|\\/g,be=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},ke=function(){_()};try{K.apply(Y=Z.call($.childNodes),$.childNodes),Y[$.childNodes.length].nodeType}catch(Ne){K={apply:Y.length?function(e,t){G.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}for(m in y=b.support={},j=b.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},_=b.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:$;return r!==D&&9===r.nodeType&&r.documentElement&&(L=(D=r).documentElement,q=!j(D),(n=D.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",ke,!1):n.attachEvent&&n.attachEvent("onunload",ke)),y.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),y.getElementsByTagName=i(function(e){return e.appendChild(D.createComment("")),!e.getElementsByTagName("*").length}),y.getElementsByClassName=ge.test(D.getElementsByClassName),y.getById=i(function(e){return L.appendChild(e).id=O,!D.getElementsByName||!D.getElementsByName(O).length}),y.getById?(k.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&q){var n=t.getElementById(e);return n?[n]:[]}},k.filter.ID=function(e){var t=e.replace(be,we);return function(e){return e.getAttribute("id")===t}}):(delete k.find.ID,k.filter.ID=function(e){var n=e.replace(be,we);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}}),k.find.TAG=y.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):y.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},k.find.CLASS=y.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&q)return t.getElementsByClassName(e)},M=[],H=[],(y.qsa=ge.test(D.querySelectorAll))&&(i(function(e){L.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&H.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||H.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+O+"-]").length||H.push("~="),e.querySelectorAll(":checked").length||H.push(":checked"),e.querySelectorAll("a#"+O+"+*").length||H.push(".#.+[+~]")}),i(function(e){var t=D.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&H.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||H.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),H.push(",.*:")})),(y.matchesSelector=ge.test(I=L.matches||L.webkitMatchesSelector||L.mozMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(e){y.disconnectedMatch=I.call(e,"div"),I.call(e,"[s!='']:x"),M.push("!=",oe)}),H=H.length&&new RegExp(H.join("|")),M=M.length&&new RegExp(M.join("|")),t=ge.test(L.compareDocumentPosition),R=t||ge.test(L.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},X=t?function(e,t){if(e===t)return E=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!y.sortDetached&&t.compareDocumentPosition(e)===n?e===D||e.ownerDocument===$&&R($,e)?-1:t===D||t.ownerDocument===$&&R($,t)?1:F?ee(F,e)-ee(F,t):0:4&n?-1:1)}:function(e,t){if(e===t)return E=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===D?-1:t===D?1:i?-1:o?1:F?ee(F,e)-ee(F,t):0;if(i===o)return d(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?d(a[r],s[r]):a[r]===$?-1:s[r]===$?1:0}),D},b.matches=function(e,t){return b(e,null,null,t)},b.matchesSelector=function(e,t){if((e.ownerDocument||e)!==D&&_(e),t=t.replace(le,"='$1']"),y.matchesSelector&&q&&!W[t+" "]&&(!M||!M.test(t))&&(!H||!H.test(t)))try{var n=I.call(e,t);if(n||y.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(Ne){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,we),e[3]=(e[3]||e[4]||e[5]||"").replace(be,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||b.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&b.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&ce.test(n)&&(t=T(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=Q[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&Q(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=b.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1(?:<\/\1>|)$/,Ne=/^.[^:#\[\.,]*$/;he.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?he.find.matchesSelector(r,e)?[r]:[]:he.find.matches(e,he.grep(t,function(e){return 1===e.nodeType}))},he.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(he(e).filter(function(){for(t=0;t)[^>]*|#([\w-]*))$/;(he.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||je,"string"==typeof e){if(!(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:Te.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof he?t[0]:t,he.merge(this,he.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:re,!0)),ke.test(r[1])&&he.isPlainObject(t))for(r in t)he.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}if((i=re.getElementById(r[2]))&&i.parentNode){if(i.id!==r[2])return je.find(e);this.length=1,this[0]=i}return this.context=re,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):he.isFunction(e)?"undefined"!=typeof n.ready?n.ready(e):e(he):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),he.makeArray(e,this))}).prototype=he.fn,je=he(re);var Ae=/^(?:parents|prev(?:Until|All))/,Ce={children:!0,contents:!0,next:!0,prev:!0};he.fn.extend({has:function(e){var t,n=he(e,this),r=n.length;return this.filter(function(){for(t=0;t
      a",ce.leadingWhitespace=3===He.firstChild.nodeType,ce.tbody=!He.getElementsByTagName("tbody").length,ce.htmlSerialize=!!He.getElementsByTagName("link").length,ce.html5Clone="<:nav>"!==re.createElement("nav").cloneNode(!0).outerHTML,Ie.type="checkbox",Ie.checked=!0,Me.appendChild(Ie),ce.appendChecked=Ie.checked,He.innerHTML="",ce.noCloneChecked=!!He.cloneNode(!0).lastChild.defaultValue,Me.appendChild(He),(Ie=re.createElement("input")).setAttribute("type","radio"),Ie.setAttribute("checked","checked"),Ie.setAttribute("name","t"),He.appendChild(Ie),ce.checkClone=He.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.noCloneEvent=!!He.addEventListener,He[he.expando]=1,ce.attributes=!He.getAttribute(he.expando);var Ue={option:[1,""],legend:[1,"
      ","
      "],area:[1,"",""],param:[1,"",""],thead:[1,"","
      "],tr:[2,"","
      "],col:[2,"","
      "],td:[3,"","
      "],_default:ce.htmlSerialize?[0,"",""]:[1,"X
      ","
      "]};Ue.optgroup=Ue.option,Ue.tbody=Ue.tfoot=Ue.colgroup=Ue.caption=Ue.thead,Ue.th=Ue.td;var Ye=/<|&#?\w+;/,Je=/]","i"),it=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,ot=/\s*$/g,dt=g(re).appendChild(re.createElement("div"));he.extend({htmlPrefilter:function(e){return e.replace(it,"<$1>")},clone:function(e,t,n){var r,i,o,a,s,u=he.contains(e.ownerDocument,e);if(ce.html5Clone||he.isXMLDoc(e)||!rt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(dt.innerHTML=e.outerHTML,dt.removeChild(o=dt.firstChild)),!(ce.noCloneEvent&&ce.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||he.isXMLDoc(e)))for(r=y(o),s=y(e),a=0;null!=(i=s[a]);++a)r[a]&&A(i,r[a]);if(t)if(n)for(s=s||y(e),r=r||y(o),a=0;null!=(i=s[a]);a++)T(i,r[a]);else T(e,o);return 0<(r=y(o,"script")).length&&v(r,!u&&y(e,"script")),r=s=i=null,o},cleanData:function(e,t){for(var n,r,i,o,a=0,s=he.expando,u=he.cache,d=ce.attributes,l=he.event.special;null!=(n=e[a]);a++)if((t||De(n))&&(o=(i=n[s])&&u[i])){if(o.events)for(r in o.events)l[r]?he.event.remove(n,r):he.removeEvent(n,r,o.handle);u[i]&&(delete u[i],d||"undefined"==typeof n.removeAttribute?n[s]=undefined:n.removeAttribute(s),ne.push(i))}}}),he.fn.extend({domManip:C,detach:function(e){return S(this,e,!0)},remove:function(e){return S(this,e)},text:function(e){return ze(this,function(e){return e===undefined?he.text(this):this.empty().append((this[0]&&this[0].ownerDocument||re).createTextNode(e))},null,e,arguments.length)},append:function(){return C(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||w(this,e).appendChild(e)})},prepend:function(){return C(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=w(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return C(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return C(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&he.cleanData(y(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&he.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return he.clone(this,e,t)})},html:function(e){return ze(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined)return 1===t.nodeType?t.innerHTML.replace(nt,""):undefined;if("string"==typeof e&&!ot.test(e)&&(ce.htmlSerialize||!rt.test(e))&&(ce.leadingWhitespace||!Xe.test(e))&&!Ue[(Be.exec(e)||["",""])[1].toLowerCase()]){e=he.htmlPrefilter(e);try{for(;nt",l.childNodes[0].style.borderCollapse="separate",(e=l.getElementsByTagName("td"))[0].style.cssText="margin:0;border:0;padding:0;display:none",(a=0===e[0].offsetHeight)&&(e[0].style.display="",e[1].style.display="none",a=0===e[0].offsetHeight)),n.removeChild(d)}var r,i,o,a,s,u,d=re.createElement("div"),l=re.createElement("div");l.style&&(l.style.cssText="float:left;opacity:.5",ce.opacity="0.5"===l.style.opacity,ce.cssFloat=!!l.style.cssFloat,l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",ce.clearCloneStyle="content-box"===l.style.backgroundClip,(d=re.createElement("div")).style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",l.innerHTML="",d.appendChild(l),ce.boxSizing=""===l.style.boxSizing||""===l.style.MozBoxSizing||""===l.style.WebkitBoxSizing,he.extend(ce,{reliableHiddenOffsets:function(){return null==r&&e(),a},boxSizingReliable:function(){return null==r&&e(),o},pixelMarginRight:function(){return null==r&&e(),i},pixelPosition:function(){return null==r&&e(),r},reliableMarginRight:function(){return null==r&&e(),s},reliableMarginLeft:function(){return null==r&&e(),u}}))}();var gt,yt,vt=/^(top|right|bottom|left)$/;N.getComputedStyle?(gt=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=N),t.getComputedStyle(e)},yt=function(e,t,n){var r,i,o,a,s=e.style;return""!==(a=(n=n||gt(e))?n.getPropertyValue(t)||n[t]:undefined)&&a!==undefined||he.contains(e.ownerDocument,e)||(a=he.style(e,t)),n&&!ce.pixelMarginRight()&&ht.test(a)&&ft.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o),a===undefined?a:a+""}):pt.currentStyle&&(gt=function(e){return e.currentStyle},yt=function(e,t,n){var r,i,o,a,s=e.style;return null==(a=(n=n||gt(e))?n[t]:undefined)&&s&&s[t]&&(a=s[t]),ht.test(a)&&!vt.test(t)&&(r=s.left,(o=(i=e.runtimeStyle)&&i.left)&&(i.left=e.currentStyle.left),s.left="fontSize"===t?"1em":a,a=s.pixelLeft+"px",s.left=r,o&&(i.left=o)),a===undefined?a:a+""||"auto"});var xt=/alpha\([^)]*\)/i,bt=/opacity\s*=\s*([^)]*)/i,wt=/^(none|table(?!-c[ea]).+)/,kt=new RegExp("^("+Re+")(.*)$","i"),Nt={position:"absolute",visibility:"hidden",display:"block"},jt={letterSpacing:"0",fontWeight:"400"},Tt=["Webkit","O","Moz","ms"],At=re.createElement("div").style;he.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=yt(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":ce.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=he.camelCase(t),u=e.style;if(t=he.cssProps[s]||(he.cssProps[s]=D(s)||s),a=he.cssHooks[t]||he.cssHooks[s],n===undefined)return a&&"get"in a&&(i=a.get(e,!1,r))!==undefined?i:u[t];if("string"===(o=typeof n)&&(i=Oe.exec(n))&&i[1]&&(n=c(e,t,i),o="number"),null!=n&&n==n&&("number"===o&&(n+=i&&i[3]||(he.cssNumber[s]?"":"px")),ce.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),!(a&&"set"in a&&(n=a.set(e,n,r))===undefined)))try{u[t]=n}catch(d){}}},css:function(e,t,n,r){var i,o,a,s=he.camelCase(t);return t=he.cssProps[s]||(he.cssProps[s]=D(s)||s),(a=he.cssHooks[t]||he.cssHooks[s])&&"get"in a&&(o=a.get(e,!0,n)),o===undefined&&(o=yt(e,t,r)),"normal"===o&&t in jt&&(o=jt[t]),""===n||n?(i=parseFloat(o),!0===n||isFinite(i)?i||0:o):o}}),he.each(["height","width"],function(e,i){he.cssHooks[i]={get:function(e,t,n){if(t)return wt.test(he.css(e,"display"))&&0===e.offsetWidth?mt(e,Nt,function(){return M(e,i,n)}):M(e,i,n)},set:function(e,t,n){var r=n&>(e);return q(e,t,n?H(e,i,n,ce.boxSizing&&"border-box"===he.css(e,"boxSizing",!1,r),r):0)}}}),ce.opacity||(he.cssHooks.opacity={get:function(e,t){return bt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=he.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";((n.zoom=1)<=t||""===t)&&""===he.trim(o.replace(xt,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=xt.test(o)?o.replace(xt,i):o+" "+i)}}),he.cssHooks.marginRight=_(ce.reliableMarginRight,function(e,t){if(t)return mt(e,{display:"inline-block"},yt,[e,"marginRight"])}),he.cssHooks.marginLeft=_(ce.reliableMarginLeft,function(e,t){if(t)return(parseFloat(yt(e,"marginLeft"))||(he.contains(e.ownerDocument,e)?e.getBoundingClientRect().left-mt(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}):0))+"px"}),he.each({margin:"",padding:"",border:"Width"},function(i,o){he.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+$e[t]+o]=r[t]||r[t-2]||r[0];return n}},ft.test(i)||(he.cssHooks[i+o].set=q)}),he.fn.extend({css:function(e,t){return ze(this,function(e,t,n){var r,i,o={},a=0;if(he.isArray(t)){for(r=gt(e),i=t.length;a
      a",Ft=_t.getElementsByTagName("a")[0],Et.setAttribute("type","checkbox"),_t.appendChild(Et),(Ft=_t.getElementsByTagName("a")[0]).style.cssText="top:1px",ce.getSetAttribute="t"!==_t.className,ce.style=/top/.test(Ft.getAttribute("style")),ce.hrefNormalized="/a"===Ft.getAttribute("href"),ce.checkOn=!!Et.value,ce.optSelected=Lt.selected,ce.enctype=!!re.createElement("form").enctype,Dt.disabled=!0,ce.optDisabled=!Lt.disabled,(Et=re.createElement("input")).setAttribute("value",""),ce.input=""===Et.getAttribute("value"),Et.value="t",Et.setAttribute("type","radio"),ce.radioValue="t"===Et.value;var Mt=/\r/g,It=/[\x20\t\r\n\f]+/g;he.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=he.isFunction(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,he(this).val()):n)?t="":"number"==typeof t?t+="":he.isArray(t)&&(t=he.map(t,function(e){return null==e?"":e+""})),(r=he.valHooks[this.type]||he.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&r.set(this,t,"value")!==undefined||(this.value=t))})):t?(r=he.valHooks[t.type]||he.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&(e=r.get(t,"value"))!==undefined?e:"string"==typeof(e=t.value)?e.replace(Mt,""):null==e?"":e:void 0}}),he.extend({valHooks:{option:{get:function(e){var t=he.find.attr(e,"value");return null!=t?t:he.trim(he.text(e)).replace(It," ")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||i<0,a=o?null:[],s=o?i+1:r.length,u=i<0?s:o?i:0;u").append(he.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},he.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){he.fn[t]=function(e){return this.on(t,e)}}),he.expr.filters.animated=function(t){return he.grep(he.timers,function(e){return t===e.elem}).length},he.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,d=he.css(e,"position"),l=he(e),c={};"static"===d&&(e.style.position="relative"),s=l.offset(),o=he.css(e,"top"),u=he.css(e,"left"),("absolute"===d||"fixed"===d)&&-1'),s='';o===u||i===u||d.isCrossDomain(t)||(s+=''),r&&a.attr("target",r),a.hide().append(s).appendTo("body"),a.submit()},formElements:function(e,t){return e.is("form")?l(e[0].elements).filter(t):e.find(t)},disableFormElements:function(e){d.formElements(e,d.disableSelector).each(function(){d.disableFormElement(l(this))})},disableFormElement:function(e){var t,n;t=e.is("button")?"html":"val",(n=e.data("disable-with"))!==u&&(e.data("ujs:enable-with",e[t]()),e[t](n)),e.prop("disabled",!0),e.data("ujs:disabled",!0)},enableFormElements:function(e){d.formElements(e,d.enableSelector).each(function(){d.enableFormElement(l(this))})},enableFormElement:function(e){var t=e.is("button")?"html":"val";e.data("ujs:enable-with")!==u&&(e[t](e.data("ujs:enable-with")),e.removeData("ujs:enable-with")),e.prop("disabled",!1),e.removeData("ujs:disabled")},allowAction:function(e){var t,n=e.data("confirm"),r=!1;if(!n)return!0;if(d.fire(e,"confirm")){try{r=d.confirm(n)}catch(i){(console.error||console.log).call(console,i.stack||i)}t=d.fire(e,"confirm:complete",[r])}return r&&t},blankInputs:function(e,t,n){var r,i,o,a=l(),s=t||"input,textarea",u=e.find(s),d={};return u.each(function(){(r=l(this)).is("input[type=radio]")?(o=r.attr("name"),d[o]||(0===e.find('input[type=radio]:checked[name="'+o+'"]').length&&(i=e.find('input[type=radio][name="'+o+'"]'),a=a.add(i)),d[o]=o)):(r.is("input[type=checkbox],input[type=radio]")?r.is(":checked"):!!r.val())===n&&(a=a.add(r))}),!!a.length&&a},nonBlankInputs:function(e,t){return d.blankInputs(e,t,!0)},stopEverything:function(e){return l(e.target).trigger("ujs:everythingStopped"),e.stopImmediatePropagation(),!1},disableElement:function(e){var t=e.data("disable-with");t!==u&&(e.data("ujs:enable-with",e.html()),e.html(t)),e.bind("click.railsDisable",function(e){return d.stopEverything(e)}),e.data("ujs:disabled",!0)},enableElement:function(e){e.data("ujs:enable-with")!==u&&(e.html(e.data("ujs:enable-with")),e.removeData("ujs:enable-with")),e.unbind("click.railsDisable"),e.removeData("ujs:disabled")}},d.fire(e,"rails:attachBindings")&&(l.ajaxPrefilter(function(e,t,n){e.crossDomain||d.CSRFProtection(n)}),l(window).on("pageshow.rails",function(){l(l.rails.enableSelector).each(function(){var e=l(this);e.data("ujs:disabled")&&l.rails.enableFormElement(e)}),l(l.rails.linkDisableSelector).each(function(){var e=l(this);e.data("ujs:disabled")&&l.rails.enableElement(e)})}),e.on("ajax:complete",d.linkDisableSelector,function(){d.enableElement(l(this))}),e.on("ajax:complete",d.buttonDisableSelector,function(){d.enableFormElement(l(this))}),e.on("click.rails",d.linkClickSelector,function(e){var t=l(this),n=t.data("method"),r=t.data("params"),i=e.metaKey||e.ctrlKey;if(!d.allowAction(t))return d.stopEverything(e);if(!i&&t.is(d.linkDisableSelector)&&d.disableElement(t),d.isRemote(t)){if(i&&(!n||"GET"===n)&&!r)return!0;var o=d.handleRemote(t);return!1===o?d.enableElement(t):o.fail(function(){d.enableElement(t)}),!1}return n?(d.handleMethod(t),!1):void 0}),e.on("click.rails",d.buttonClickSelector,function(e){var t=l(this);if(!d.allowAction(t)||!d.isRemote(t))return d.stopEverything(e);t.is(d.buttonDisableSelector)&&d.disableFormElement(t);var n=d.handleRemote(t);return!1===n?d.enableFormElement(t):n.fail(function(){d.enableFormElement(t)}),!1}),e.on("change.rails",d.inputChangeSelector,function(e){var t=l(this);return d.allowAction(t)&&d.isRemote(t)?(d.handleRemote(t),!1):d.stopEverything(e)}),e.on("submit.rails",d.formSubmitSelector,function(e){var t,n,r=l(this),i=d.isRemote(r);if(!d.allowAction(r))return d.stopEverything(e);if(r.attr("novalidate")===u)if(r.data("ujs:formnovalidate-button")===u){if((t=d.blankInputs(r,d.requiredInputSelector,!1))&&d.fire(r,"ajax:aborted:required",[t]))return d.stopEverything(e)}else r.data("ujs:formnovalidate-button",u);if(i){if(n=d.nonBlankInputs(r,d.fileInputSelector)){setTimeout(function(){d.disableFormElements(r)},13);var o=d.fire(r,"ajax:aborted:file",[n]);return o||setTimeout(function(){d.enableFormElements(r)},13),o}return d.handleRemote(r),!1}setTimeout(function(){d.disableFormElements(r)},13)}),e.on("click.rails",d.formInputClickSelector,function(e){var t=l(this);if(!d.allowAction(t))return d.stopEverything(e);var n=t.attr("name"),r=n?{name:n,value:t.val()}:null,i=t.closest("form");0===i.length&&(i=l("#"+t.attr("form"))),i.data("ujs:submit-button",r),i.data("ujs:formnovalidate-button",t.attr("formnovalidate")),i.data("ujs:submit-button-formaction",t.attr("formaction")),i.data("ujs:submit-button-formmethod",t.attr("formmethod"))}),e.on("ajax:send.rails",d.formSubmitSelector,function(e){this===e.target&&d.disableFormElements(l(this))}),e.on("ajax:complete.rails",d.formSubmitSelector,function(e){this===e.target&&d.enableFormElements(l(this))}),l(function(){d.refreshCSRFTokens()}))}(jQuery),function(){"use strict";var o,n;o=jQuery,(n=function(e,t){var n,r,i=this;return this.options=o.extend({title:null,footer:null,remote:null},o.fn.ekkoLightbox.defaults,t||{}),this.$element=o(e),"",this.modal_id=this.options.modal_id?this.options.modal_id:"ekkoLightbox-"+Math.floor(1e3*Math.random()+1),r='",n='",o(document.body).append('"),this.modal=o("#"+this.modal_id),this.modal_dialog=this.modal.find(".modal-dialog").first(),this.modal_content=this.modal.find(".modal-content").first(),this.modal_body=this.modal.find(".modal-body").first(),this.lightbox_container=this.modal_body.find(".ekko-lightbox-container").first(),this.lightbox_body=this.lightbox_container.find("> div:first-child").first(),this.showLoading(),this.modal_arrows=null,this.border={top:parseFloat(this.modal_dialog.css("border-top-width"))+parseFloat(this.modal_content.css("border-top-width"))+parseFloat(this.modal_body.css("border-top-width")),right:parseFloat(this.modal_dialog.css("border-right-width"))+parseFloat(this.modal_content.css("border-right-width"))+parseFloat(this.modal_body.css("border-right-width")),bottom:parseFloat(this.modal_dialog.css("border-bottom-width"))+parseFloat(this.modal_content.css("border-bottom-width"))+parseFloat(this.modal_body.css("border-bottom-width")),left:parseFloat(this.modal_dialog.css("border-left-width"))+parseFloat(this.modal_content.css("border-left-width"))+parseFloat(this.modal_body.css("border-left-width"))},this.padding={top:parseFloat(this.modal_dialog.css("padding-top"))+parseFloat(this.modal_content.css("padding-top"))+parseFloat(this.modal_body.css("padding-top")),right:parseFloat(this.modal_dialog.css("padding-right"))+parseFloat(this.modal_content.css("padding-right"))+parseFloat(this.modal_body.css("padding-right")),bottom:parseFloat(this.modal_dialog.css("padding-bottom"))+parseFloat(this.modal_content.css("padding-bottom"))+parseFloat(this.modal_body.css("padding-bottom")),left:parseFloat(this.modal_dialog.css("padding-left"))+parseFloat(this.modal_content.css("padding-left"))+parseFloat(this.modal_body.css("padding-left"))},this.modal.on("show.bs.modal",this.options.onShow.bind(this)).on("shown.bs.modal",function(){return i.modal_shown(),i.options.onShown.call(i)}).on("hide.bs.modal",this.options.onHide.bind(this)).on("hidden.bs.modal",function(){return i.gallery&&o(document).off("keydown.ekkoLightbox"),i.modal.remove(),i.options.onHidden.call(i)}).modal("show",t),this.modal}).prototype={modal_shown:function(){var e,t=this;return this.options.remote?(this.gallery=this.$element.data("gallery"),this.gallery&&("document.body"===this.options.gallery_parent_selector||""===this.options.gallery_parent_selector?this.gallery_items=o(document.body).find('*[data-toggle="lightbox"][data-gallery="'+this.gallery+'"]'):this.gallery_items=this.$element.parents(this.options.gallery_parent_selector).first().find('*[data-toggle="lightbox"][data-gallery="'+this.gallery+'"]'),this.gallery_index=this.gallery_items.index(this.$element),o(document).on("keydown.ekkoLightbox",this.navigate.bind(this)),this.options.directional_arrows&&1
      '),this.modal_arrows=this.lightbox_container.find("div.ekko-lightbox-nav-overlay").first(),this.lightbox_container.find("a"+this.strip_spaces(this.options.left_arrow_class)).on("click",function(e){return e.preventDefault(),t.navigate_left()}),this.lightbox_container.find("a"+this.strip_spaces(this.options.right_arrow_class)).on("click",function(e){return e.preventDefault(),t.navigate_right()}))),this.options.type?"image"===this.options.type?this.preloadImage(this.options.remote,!0):"youtube"===this.options.type&&(e=this.getYoutubeId(this.options.remote))?this.showYoutubeVideo(e):"vimeo"===this.options.type?this.showVimeoVideo(this.options.remote):"instagram"===this.options.type?this.showInstagramVideo(this.options.remote):this.error('Could not detect remote target type. Force the type using data-type="image|youtube|vimeo"'):this.detectRemoteType(this.options.remote)):this.error("No remote target given")},strip_stops:function(e){return e.replace(/\./g,"")},strip_spaces:function(e){return e.replace(/\s/g,"")},isImage:function(e){return e.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSwf:function(e){return e.match(/\.(swf)((\?|#).*)?$/i)},getYoutubeId:function(e){var t;return!(!(t=e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/))||11!==t[2].length)&&t[2]},getVimeoId:function(e){return 0Loading..
      '),this},showYoutubeVideo:function(e){var t,n,r;if(t=560/315,r=this.$element.data("width")||560,n=(r=this.checkDimensions(r))/t,this.resize(r),this.lightbox_body.html(''),this.modal_arrows)return this.modal_arrows.css("display","none")},showVimeoVideo:function(e){var t,n,r;if(t=500/281,r=this.$element.data("width")||560,n=(r=this.checkDimensions(r))/t,this.resize(r),this.lightbox_body.html(''),this.modal_arrows)return this.modal_arrows.css("display","none")},showInstagramVideo:function(e){var t,n;if(n=this.$element.data("width")||612,t=n=this.checkDimensions(n),this.resize(n),this.lightbox_body.html(''),this.modal_arrows)return this.modal_arrows.css("display","none")},error:function(e){return this.lightbox_body.html(e),this},preloadImage:function(e,t){var n,r=this;return n=new Image,null!=t&&!0!==t||(n.onload=function(){var e;return(e=o("")).attr("src",n.src),e.addClass("img-responsive"),r.lightbox_body.html(e),r.modal_arrows&&r.modal_arrows.css("display","block"),r.resize(n.width)},n.onerror=function(){return r.error("Failed to load image: "+e)}),n.src=e,n},resize:function(e){var t;return t=e+this.border.left+this.padding.left+this.padding.right+this.border.right,this.modal_dialog.css("width","auto").css("max-width",t),this.lightbox_container.find("a").css("padding-top",function(){return o(this).parent().height()/2}),this},checkDimensions:function(e){var t;return t=e+this.border.left+this.padding.left+this.padding.right+this.border.right,document.body.clientWidth> /var/log/vnclowpot/vnclowpot.log diff --git a/docker/vnclowpot/README.md b/docker/vnclowpot/README.md deleted file mode 100644 index 06948ebfc..000000000 --- a/docker/vnclowpot/README.md +++ /dev/null @@ -1,15 +0,0 @@ -[![](https://images.microbadger.com/badges/version/dtagdevsec/vnclowpot:1710.svg)](https://microbadger.com/images/dtagdevsec/vnclowpot:1710 "Get your own version badge on microbadger.com") [![](https://images.microbadger.com/badges/image/dtagdevsec/vnclowpot:1710.svg)](https://microbadger.com/images/dtagdevsec/vnclowpot:1710 "Get your own image badge on microbadger.com") - -# vnclowpot - -[vnclowpot](https://github.com/magisterquis/vnclowpot) is a low-interaction VNC honeypot with a static challenge. - -This dockerized version is part of the **[T-Pot community honeypot](http://dtag-dev-sec.github.io/)** of Deutsche Telekom AG. - -The `Dockerfile` contains the blueprint for the dockerized vnclowpot and will be used to setup the docker image. - -The `docker-compose.yml` contains the necessary settings to test vnclowpot using `docker-compose`. This will ensure to start the docker container with the appropriate permissions and port mappings. - -# vnclowpot Dashboard - -![vnclowpot Dashboard](https://raw.githubusercontent.com/dtag-dev-sec/tpotce/master/docker/vnclowpot/doc/dashboard.png) diff --git a/docker/vnclowpot/doc/dashboard.png b/docker/vnclowpot/doc/dashboard.png deleted file mode 100644 index 7667d967e..000000000 Binary files a/docker/vnclowpot/doc/dashboard.png and /dev/null differ diff --git a/docker/vnclowpot/docker-compose.yml b/docker/vnclowpot/docker-compose.yml deleted file mode 100644 index 2c1cb63f6..000000000 --- a/docker/vnclowpot/docker-compose.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: '2.1' - -networks: - vnclowpot_local: - -services: - -# vnclowpot service - vnclowpot: - container_name: vnclowpot - restart: always - networks: - - vnclowpot_local - ports: - - "5900:5900" - image: "dtagdevsec/vnclowpot:1710" - volumes: - - /data/vnclowpot/log:/var/log/vnclowpot diff --git a/etc/compose/collector.yml b/etc/compose/collector.yml new file mode 100644 index 000000000..dd5a7f41d --- /dev/null +++ b/etc/compose/collector.yml @@ -0,0 +1,211 @@ +# T-Pot (Collector) +# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) +version: '2.3' + +networks: + cyberchef_local: + heralding_local: + ewsposter_local: + spiderfoot_local: + +services: + +################## +#### Honeypots +################## + +# Heralding service + heralding: + container_name: heralding + restart: always + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + - "21:21" + - "22:22" + - "23:23" + - "25:25" + - "80:80" + - "110:110" + - "143:143" + - "443:443" + - "993:993" + - "995:995" + - "5432:5432" + - "5900:5900" + image: "dtagdevsec/heralding:1811" + read_only: true + volumes: + - /data/heralding/log:/var/log/heralding + +# Honeytrap service + honeytrap: + container_name: honeytrap + restart: always + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: "dtagdevsec/honeytrap:1811" + read_only: true + volumes: + - /data/honeytrap/attacks:/opt/honeytrap/var/attacks + - /data/honeytrap/downloads:/opt/honeytrap/var/downloads + - /data/honeytrap/log:/opt/honeytrap/var/log + + +################## +#### NSM +################## + +# P0f service + p0f: + container_name: p0f + restart: always + network_mode: "host" + image: "dtagdevsec/p0f:1811" + read_only: true + volumes: + - /data/p0f/log:/var/log/p0f + +# Suricata service + suricata: + container_name: suricata + restart: always + environment: + # For ET Pro ruleset replace "OPEN" with your OINKCODE + - OINKCODE=OPEN + network_mode: "host" + cap_add: + - NET_ADMIN + - SYS_NICE + - NET_RAW + image: "dtagdevsec/suricata:1811" + volumes: + - /data/suricata/log:/var/log/suricata + + +################## +#### Tools +################## + +# Cyberchef service + cyberchef: + container_name: cyberchef + restart: always + networks: + - cyberchef_local + ports: + - "127.0.0.1:64299:8000" + image: "dtagdevsec/cyberchef:1811" + read_only: true + +#### ELK +## Elasticsearch service + elasticsearch: + container_name: elasticsearch + restart: always + environment: + - bootstrap.memory_lock=true + - ES_JAVA_OPTS=-Xms1024m -Xmx1024m + - ES_TMPDIR=/tmp + cap_add: + - IPC_LOCK + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + mem_limit: 4g + ports: + - "127.0.0.1:64298:9200" + image: "dtagdevsec/elasticsearch:1811" + volumes: + - /data:/data + +## Kibana service + kibana: + container_name: kibana + restart: always + depends_on: + elasticsearch: + condition: service_healthy + ports: + - "127.0.0.1:64296:5601" + image: "dtagdevsec/kibana:1811" + +## Logstash service + logstash: + container_name: logstash + restart: always + depends_on: + elasticsearch: + condition: service_healthy + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/logstash:1811" + volumes: + - /data:/data + +## Elasticsearch-head service + head: + container_name: head + restart: always + depends_on: + elasticsearch: + condition: service_healthy + ports: + - "127.0.0.1:64302:9100" + image: "dtagdevsec/head:1811" + read_only: true + +# Ewsposter service + ewsposter: + container_name: ewsposter + restart: always + networks: + - ewsposter_local + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/ewsposter:1811" + volumes: + - /data:/data + - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip + +# Nginx service + nginx: + container_name: nginx + restart: always + tmpfs: + - /var/tmp/nginx/client_body + - /var/tmp/nginx/proxy + - /var/tmp/nginx/fastcgi + - /var/tmp/nginx/uwsgi + - /var/tmp/nginx/scgi + - /run + network_mode: "host" + ports: + - "64297:64297" + image: "dtagdevsec/nginx:1811" + read_only: true + volumes: + - /data/nginx/cert/:/etc/nginx/cert/:ro + - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - /data/nginx/log/:/var/log/nginx/ + +# Spiderfoot service + spiderfoot: + container_name: spiderfoot + restart: always + networks: + - spiderfoot_local + ports: + - "127.0.0.1:64303:8080" + image: "dtagdevsec/spiderfoot:1811" + volumes: + - /data/spiderfoot/spiderfoot.db:/home/spiderfoot/spiderfoot.db diff --git a/etc/compose/hp.yml b/etc/compose/hp.yml deleted file mode 100644 index 10d070780..000000000 --- a/etc/compose/hp.yml +++ /dev/null @@ -1,157 +0,0 @@ -# T-Pot (HP) -# For docker-compose ... -version: '2.2' - -networks: - cowrie_local: - dionaea_local: - elasticpot_local: - ewsposter_local: - glastopf_local: - mailoney_local: - rdpy_local: - vnclowpot_local: - -services: - -# Cowrie service - cowrie: - container_name: cowrie - restart: always - networks: - - cowrie_local - cap_add: - - NET_BIND_SERVICE - ports: - - "22:2222" - - "23:2223" - image: "dtagdevsec/cowrie:1710" - volumes: - - /data/cowrie/downloads:/home/cowrie/cowrie/dl - - /data/cowrie/keys:/home/cowrie/cowrie/etc - - /data/cowrie/log:/home/cowrie/cowrie/log - - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty - -# Dionaea service - dionaea: - container_name: dionaea - stdin_open: true - restart: always - networks: - - dionaea_local - cap_add: - - NET_BIND_SERVICE - ports: - - "20:20" - - "21:21" - - "42:42" - - "69:69/udp" - - "8081:80" - - "135:135" - - "443:443" - - "445:445" - - "1433:1433" - - "1723:1723" - - "1883:1883" - - "3306:3306" - - "5060:5060" - - "5060:5060/udp" - - "5061:5061" - - "27017:27017" - image: "dtagdevsec/dionaea:1710" - volumes: - - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp - - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp - - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www - - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp - - /data/dionaea:/opt/dionaea/var/dionaea - - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries - - /data/dionaea/log:/opt/dionaea/var/log - - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp - -# Elasticpot service - elasticpot: - container_name: elasticpot - restart: always - networks: - - elasticpot_local - ports: - - "9200:9200" - image: "dtagdevsec/elasticpot:1710" - volumes: - - /data/elasticpot/log:/opt/ElasticpotPY/log - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:1710" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip - -# Glastopf service - glastopf: - container_name: glastopf - restart: always - networks: - - glastopf_local - ports: - - "80:80" - image: "dtagdevsec/glastopf:1710" - volumes: - - /data/glastopf/db:/opt/glastopf/db - - /data/glastopf/log:/opt/glastopf/log - -# Honeytrap service - honeytrap: - container_name: honeytrap - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:1710" - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - -# Mailoney service - mailoney: - container_name: mailoney - restart: always - networks: - - mailoney_local - ports: - - "25:2525" - image: "dtagdevsec/mailoney:1710" - volumes: - - /data/mailoney/log:/opt/mailoney/logs - -# Rdpy service - rdpy: - container_name: rdpy - restart: always - networks: - - rdpy_local - ports: - - "3389:3389" - image: "dtagdevsec/rdpy:1710" - volumes: - - /data/rdpy/log:/var/log/rdpy - -# Vnclowpot service - vnclowpot: - container_name: vnclowpot - restart: always - networks: - - vnclowpot_local - ports: - - "5900:5900" - image: "dtagdevsec/vnclowpot:1710" - volumes: - - /data/vnclowpot/log:/var/log/vnclowpot diff --git a/etc/compose/industrial.yml b/etc/compose/industrial.yml index 29262782c..d5d0b2001 100644 --- a/etc/compose/industrial.yml +++ b/etc/compose/industrial.yml @@ -1,37 +1,295 @@ # T-Pot (Industrial) -# For docker-compose ... -version: '2.2' +# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) +version: '2.3' networks: - conpot_local: - emobility_local: + conpot_local_default: + conpot_local_IEC104: + conpot_local_guardian_ast: + conpot_local_ipmi: + conpot_local_kamstrup_382: + cowrie_local: + cyberchef_local: + heralding_local: + medpot_local: + rdpy_local: ewsposter_local: spiderfoot_local: - ui-for-docker_local: services: -# Conpot service - conpot: - container_name: conpot +################## +#### Honeypots +################## + +# Conpot default service + conpot_default: + build: . + container_name: conpot_default + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_default.json + - CONPOT_LOG=/var/log/conpot/conpot_default.log + - CONPOT_TEMPLATE=default + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_default + ports: + - "69:69" + - "80:80" + - "102:102" + - "161:161" + - "502:502" +# - "623:623" + - "21:21" + - "44818:44818" + - "47808:47808" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot IEC104 service + conpot_IEC104: + container_name: conpot_iec104 restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json + - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log + - CONPOT_TEMPLATE=IEC104 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_IEC104 + ports: +# - "161:161" + - "2404:2404" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot guardian_ast service + conpot_guardian_ast: + container_name: conpot_guardian_ast + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json + - CONPOT_LOG=/var/log/conpot/conpot_guardian_ast.log + - CONPOT_TEMPLATE=guardian_ast + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 networks: - - conpot_local + - conpot_local_guardian_ast + ports: + - "10001:10001" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot ipmi + conpot_ipmi: + container_name: conpot_ipmi + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json + - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log + - CONPOT_TEMPLATE=ipmi + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_ipmi + ports: + - "623:623" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot kamstrup_382 + conpot_kamstrup_382: + container_name: conpot_kamstrup_382 + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json + - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log + - CONPOT_TEMPLATE=kamstrup_382 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_kamstrup_382 ports: - "1025:1025" - "50100:50100" - image: "dtagdevsec/conpot:1710" + image: "dtagdevsec/conpot:1811" + read_only: true volumes: - /data/conpot/log:/var/log/conpot -# ELK services +# Cowrie service + cowrie: + container_name: cowrie + restart: always + tmpfs: + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 + networks: + - cowrie_local + ports: + - "22:22" + - "23:23" + image: "dtagdevsec/cowrie:1811" + read_only: true + volumes: + - /data/cowrie/downloads:/home/cowrie/cowrie/dl + - /data/cowrie/keys:/home/cowrie/cowrie/etc + - /data/cowrie/log:/home/cowrie/cowrie/log + - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty + +# Heralding service + heralding: + container_name: heralding + restart: always + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + # - "21:21" + # - "22:22" + # - "23:23" + # - "25:25" + # - "80:80" + # - "110:110" + # - "143:143" + # - "443:443" + # - "993:993" + # - "995:995" + # - "5432:5432" + - "5900:5900" + image: "dtagdevsec/heralding:1811" + read_only: true + volumes: + - /data/heralding/log:/var/log/heralding + +# Honeytrap service + honeytrap: + container_name: honeytrap + restart: always + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: "dtagdevsec/honeytrap:1811" + read_only: true + volumes: + - /data/honeytrap/attacks:/opt/honeytrap/var/attacks + - /data/honeytrap/downloads:/opt/honeytrap/var/downloads + - /data/honeytrap/log:/opt/honeytrap/var/log + +# Medpot service + medpot: + container_name: medpot + restart: always + networks: + - medpot_local + ports: + - "2575:2575" + image: "dtagdevsec/medpot:1811" + read_only: true + volumes: + - /data/medpot/log/:/var/log/medpot + +# Rdpy service + rdpy: + container_name: rdpy + extra_hosts: + - hpfeeds.example.com:127.0.0.1 + restart: always + environment: + - HPFEEDS_SERVER=hpfeeds.example.com + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=65000 + - SERVERID=id + networks: + - rdpy_local + ports: + - "3389:3389" + image: "dtagdevsec/rdpy:1811" + read_only: true + volumes: + - /data/rdpy/log:/var/log/rdpy + + +################## +#### NSM +################## + +# P0f service + p0f: + container_name: p0f + restart: always + network_mode: "host" + image: "dtagdevsec/p0f:1811" + read_only: true + volumes: + - /data/p0f/log:/var/log/p0f + +# Suricata service + suricata: + container_name: suricata + restart: always + environment: + # For ET Pro ruleset replace "OPEN" with your OINKCODE + - OINKCODE=OPEN + network_mode: "host" + cap_add: + - NET_ADMIN + - SYS_NICE + - NET_RAW + image: "dtagdevsec/suricata:1811" + volumes: + - /data/suricata/log:/var/log/suricata + + +################## +#### Tools +################## + +# Cyberchef service + cyberchef: + container_name: cyberchef + restart: always + networks: + - cyberchef_local + ports: + - "127.0.0.1:64299:8000" + image: "dtagdevsec/cyberchef:1811" + read_only: true + +#### ELK ## Elasticsearch service elasticsearch: container_name: elasticsearch restart: always environment: - bootstrap.memory_lock=true -# - "ES_JAVA_OPTS=-Xms1g -Xmx1g" + - ES_JAVA_OPTS=-Xms1024m -Xmx1024m + - ES_TMPDIR=/tmp cap_add: - IPC_LOCK ulimits: @@ -41,10 +299,10 @@ services: nofile: soft: 65536 hard: 65536 -# mem_limit: 2g + mem_limit: 4g ports: - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:1710" + image: "dtagdevsec/elasticsearch:1811" volumes: - /data:/data @@ -57,7 +315,7 @@ services: condition: service_healthy ports: - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:1710" + image: "dtagdevsec/kibana:1811" ## Logstash service logstash: @@ -68,10 +326,9 @@ services: condition: service_healthy env_file: - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/logstash:1710" + image: "dtagdevsec/logstash:1811" volumes: - /data:/data - - /var/log:/data/host/log ## Elasticsearch-head service head: @@ -82,22 +339,8 @@ services: condition: service_healthy ports: - "127.0.0.1:64302:9100" - image: "dtagdevsec/head:1710" - -# Emobility service - emobility: - container_name: emobility - restart: always - networks: - - emobility_local - cap_add: - - NET_ADMIN - ports: - - "8080:8080" - image: "dtagdevsec/emobility:1710" - volumes: - - /data/emobility:/data/eMobility - - /data/ews:/data/ews + image: "dtagdevsec/head:1811" + read_only: true # Ewsposter service ewsposter: @@ -107,28 +350,31 @@ services: - ewsposter_local env_file: - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:1710" + image: "dtagdevsec/ewsposter:1811" volumes: - /data:/data - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip -# Netdata service - netdata: - container_name: netdata +# Nginx service + nginx: + container_name: nginx restart: always + tmpfs: + - /var/tmp/nginx/client_body + - /var/tmp/nginx/proxy + - /var/tmp/nginx/fastcgi + - /var/tmp/nginx/uwsgi + - /var/tmp/nginx/scgi + - /run network_mode: "host" - depends_on: - elasticsearch: - condition: service_healthy - cap_add: - - SYS_PTRACE - security_opt: - - apparmor=unconfined - image: "dtagdevsec/netdata:1710" + ports: + - "64297:64297" + image: "dtagdevsec/nginx:1811" + read_only: true volumes: - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /var/run/docker.sock:/var/run/docker.sock + - /data/nginx/cert/:/etc/nginx/cert/:ro + - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - /data/nginx/log/:/var/log/nginx/ # Spiderfoot service spiderfoot: @@ -138,41 +384,6 @@ services: - spiderfoot_local ports: - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:1710" + image: "dtagdevsec/spiderfoot:1811" volumes: - /data/spiderfoot/spiderfoot.db:/home/spiderfoot/spiderfoot.db - -# Ui-for-docker service - ui-for-docker: - container_name: ui-for-docker - command: -H unix:///var/run/docker.sock --no-auth - restart: always - networks: - - ui-for-docker_local - ports: - - "127.0.0.1:64299:9000" - image: "dtagdevsec/ui-for-docker:1710" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - -# Suricata service - suricata: - container_name: suricata - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:1710" - volumes: - - /data/suricata/log:/var/log/suricata - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:1710" - volumes: - - /data/p0f/log:/var/log/p0f diff --git a/etc/compose/all.yml b/etc/compose/legacy.yml similarity index 60% rename from etc/compose/all.yml rename to etc/compose/legacy.yml index 130af3aaa..6af8520aa 100644 --- a/etc/compose/all.yml +++ b/etc/compose/legacy.yml @@ -1,48 +1,37 @@ -# T-Pot (Everything) -# For docker-compose ... -version: '2.2' +# T-Pot (Legacy) +# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) +version: '2.3' networks: - conpot_local: cowrie_local: - dionaea_local: elasticpot_local: - emobility_local: - ewsposter_local: glastopf_local: + heralding_local: mailoney_local: rdpy_local: + ewsposter_local: spiderfoot_local: - ui-for-docker_local: - vnclowpot_local: services: -# Conpot service - conpot: - container_name: conpot - restart: always - networks: - - conpot_local - ports: - - "1025:1025" - - "50100:50100" - image: "dtagdevsec/conpot:1710" - volumes: - - /data/conpot/log:/var/log/conpot +################## +#### Honeypots +################## # Cowrie service cowrie: container_name: cowrie restart: always + tmpfs: + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 networks: - cowrie_local - cap_add: - - NET_BIND_SERVICE ports: - - "22:2222" - - "23:2223" - image: "dtagdevsec/cowrie:1710" + - "22:22" + - "23:23" + image: "dtagdevsec/cowrie:1811" + read_only: true volumes: - /data/cowrie/downloads:/home/cowrie/cowrie/dl - /data/cowrie/keys:/home/cowrie/cowrie/etc @@ -53,17 +42,15 @@ services: dionaea: container_name: dionaea stdin_open: true + tty: true restart: always - networks: - - dionaea_local - cap_add: - - NET_BIND_SERVICE + network_mode: "host" ports: - "20:20" - "21:21" - "42:42" - "69:69/udp" - - "8081:80" + - "81:81" - "135:135" - "443:443" - "445:445" @@ -75,7 +62,8 @@ services: - "5060:5060/udp" - "5061:5061" - "27017:27017" - image: "dtagdevsec/dionaea:1710" + image: "dtagdevsec/dionaea:1811" + read_only: true volumes: - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp @@ -94,18 +82,154 @@ services: - elasticpot_local ports: - "9200:9200" - image: "dtagdevsec/elasticpot:1710" + image: "dtagdevsec/elasticpot:1811" + read_only: true volumes: - /data/elasticpot/log:/opt/ElasticpotPY/log -# ELK services +# Glastopf service + glastopf: + container_name: glastopf + tmpfs: + - /tmp/glastopf:uid=2000,gid=2000 + restart: always + networks: + - glastopf_local + ports: + - "80:80" + image: "dtagdevsec/glastopf:1811" + read_only: true + volumes: + - /data/glastopf/db:/tmp/glastopf/db + - /data/glastopf/log:/tmp/glastopf/log + +# Heralding service + heralding: + container_name: heralding + restart: always + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + # - "21:21" + # - "22:22" + # - "23:23" + # - "25:25" + # - "80:80" + # - "110:110" + # - "143:143" + # - "443:443" + # - "993:993" + # - "995:995" + # - "5432:5432" + - "5900:5900" + image: "dtagdevsec/heralding:1811" + read_only: true + volumes: + - /data/heralding/log:/var/log/heralding + +# Honeytrap service + honeytrap: + container_name: honeytrap + restart: always + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: "dtagdevsec/honeytrap:1811" + read_only: true + volumes: + - /data/honeytrap/attacks:/opt/honeytrap/var/attacks + - /data/honeytrap/downloads:/opt/honeytrap/var/downloads + - /data/honeytrap/log:/opt/honeytrap/var/log + +# Mailoney service + mailoney: + container_name: mailoney + restart: always + environment: + - HPFEEDS_SERVER= + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=20000 + - HPFEEDS_CHANNELPREFIX=prefix + networks: + - mailoney_local + ports: + - "25:25" + image: "dtagdevsec/mailoney:1811" + read_only: true + volumes: + - /data/mailoney/log:/opt/mailoney/logs + +# Rdpy service + rdpy: + container_name: rdpy + extra_hosts: + - hpfeeds.example.com:127.0.0.1 + restart: always + environment: + - HPFEEDS_SERVER=hpfeeds.example.com + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=65000 + - SERVERID=id + networks: + - rdpy_local + ports: + - "3389:3389" + image: "dtagdevsec/rdpy:1811" + read_only: true + volumes: + - /data/rdpy/log:/var/log/rdpy + + +################## +#### NSM +################## + +# P0f service + p0f: + container_name: p0f + restart: always + network_mode: "host" + image: "dtagdevsec/p0f:1811" + read_only: true + volumes: + - /data/p0f/log:/var/log/p0f + +# Suricata service + suricata: + container_name: suricata + restart: always + environment: + # For ET Pro ruleset replace "OPEN" with your OINKCODE + - OINKCODE=OPEN + network_mode: "host" + cap_add: + - NET_ADMIN + - SYS_NICE + - NET_RAW + image: "dtagdevsec/suricata:1811" + volumes: + - /data/suricata/log:/var/log/suricata + + +################## +#### Tools +################## + +#### ELK ## Elasticsearch service elasticsearch: container_name: elasticsearch restart: always environment: - bootstrap.memory_lock=true -# - "ES_JAVA_OPTS=-Xms1g -Xmx1g" + - ES_JAVA_OPTS=-Xms1024m -Xmx1024m + - ES_TMPDIR=/tmp cap_add: - IPC_LOCK ulimits: @@ -115,10 +239,10 @@ services: nofile: soft: 65536 hard: 65536 -# mem_limit: 2g + mem_limit: 4g ports: - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:1710" + image: "dtagdevsec/elasticsearch:1811" volumes: - /data:/data @@ -131,7 +255,7 @@ services: condition: service_healthy ports: - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:1710" + image: "dtagdevsec/kibana:1811" ## Logstash service logstash: @@ -142,10 +266,9 @@ services: condition: service_healthy env_file: - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/logstash:1710" + image: "dtagdevsec/logstash:1811" volumes: - /data:/data - - /var/log:/data/host/log ## Elasticsearch-head service head: @@ -156,22 +279,8 @@ services: condition: service_healthy ports: - "127.0.0.1:64302:9100" - image: "dtagdevsec/head:1710" - -# Emobility service - emobility: - container_name: emobility - restart: always - networks: - - emobility_local - cap_add: - - NET_ADMIN - ports: - - "8080:8080" - image: "dtagdevsec/emobility:1710" - volumes: - - /data/emobility:/data/eMobility - - /data/ews:/data/ews + image: "dtagdevsec/head:1811" + read_only: true # Ewsposter service ewsposter: @@ -181,78 +290,31 @@ services: - ewsposter_local env_file: - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:1710" + image: "dtagdevsec/ewsposter:1811" volumes: - /data:/data - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip -# Glastopf service - glastopf: - container_name: glastopf - restart: always - networks: - - glastopf_local - ports: - - "80:80" - image: "dtagdevsec/glastopf:1710" - volumes: - - /data/glastopf/db:/opt/glastopf/db - - /data/glastopf/log:/opt/glastopf/log - -# Honeytrap service - honeytrap: - container_name: honeytrap +# Nginx service + nginx: + container_name: nginx restart: always + tmpfs: + - /var/tmp/nginx/client_body + - /var/tmp/nginx/proxy + - /var/tmp/nginx/fastcgi + - /var/tmp/nginx/uwsgi + - /var/tmp/nginx/scgi + - /run network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:1710" - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - -# Mailoney service - mailoney: - container_name: mailoney - restart: always - networks: - - mailoney_local ports: - - "25:2525" - image: "dtagdevsec/mailoney:1710" - volumes: - - /data/mailoney/log:/opt/mailoney/logs - -# Netdata service - netdata: - container_name: netdata - restart: always - network_mode: "host" - depends_on: - elasticsearch: - condition: service_healthy - cap_add: - - SYS_PTRACE - security_opt: - - apparmor=unconfined - image: "dtagdevsec/netdata:1710" + - "64297:64297" + image: "dtagdevsec/nginx:1811" + read_only: true volumes: - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /var/run/docker.sock:/var/run/docker.sock - -# Rdpy service - rdpy: - container_name: rdpy - restart: always - networks: - - rdpy_local - ports: - - "3389:3389" - image: "dtagdevsec/rdpy:1710" - volumes: - - /data/rdpy/log:/var/log/rdpy + - /data/nginx/cert/:/etc/nginx/cert/:ro + - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - /data/nginx/log/:/var/log/nginx/ # Spiderfoot service spiderfoot: @@ -262,53 +324,6 @@ services: - spiderfoot_local ports: - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:1710" + image: "dtagdevsec/spiderfoot:1811" volumes: - /data/spiderfoot/spiderfoot.db:/home/spiderfoot/spiderfoot.db - -# Ui-for-docker service - ui-for-docker: - container_name: ui-for-docker - command: -H unix:///var/run/docker.sock --no-auth - restart: always - networks: - - ui-for-docker_local - ports: - - "127.0.0.1:64299:9000" - image: "dtagdevsec/ui-for-docker:1710" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - -# Suricata service - suricata: - container_name: suricata - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:1710" - volumes: - - /data/suricata/log:/var/log/suricata - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:1710" - volumes: - - /data/p0f/log:/var/log/p0f - -# Vnclowpot service - vnclowpot: - container_name: vnclowpot - restart: always - networks: - - vnclowpot_local - ports: - - "5900:5900" - image: "dtagdevsec/vnclowpot:1710" - volumes: - - /data/vnclowpot/log:/var/log/vnclowpot diff --git a/etc/compose/nextgen.yml b/etc/compose/nextgen.yml new file mode 100644 index 000000000..fc7e87c41 --- /dev/null +++ b/etc/compose/nextgen.yml @@ -0,0 +1,533 @@ +# T-Pot (NextGen) +# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) +version: '2.3' + +networks: + conpot_local_IEC104: + conpot_local_guardian_ast: + conpot_local_ipmi: + conpot_local_kamstrup_382: + cowrie_local: + cyberchef_local: + elasticpot_local: + heralding_local: + mailoney_local: + medpot_local: + rdpy_local: + tanner_local: + ewsposter_local: + spiderfoot_local: + +services: + +################## +#### Honeypots +################## + +# Ciscoasa service + ciscoasa: + container_name: ciscoasa + restart: always + tmpfs: + - /tmp/ciscoasa:uid=2000,gid=2000 + network_mode: "host" + ports: + - "5000:5000/udp" + - "8443:8443" + image: "dtagdevsec/ciscoasa:1811" + read_only: true + volumes: + - /data/ciscoasa/log:/var/log/ciscoasa + +# Conpot IEC104 service + conpot_IEC104: + container_name: conpot_iec104 + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json + - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log + - CONPOT_TEMPLATE=IEC104 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_IEC104 + ports: + - "161:161" + - "2404:2404" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot guardian_ast service + conpot_guardian_ast: + container_name: conpot_guardian_ast + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json + - CONPOT_LOG=/var/log/conpot/conpot_guardian_ast.log + - CONPOT_TEMPLATE=guardian_ast + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_guardian_ast + ports: + - "10001:10001" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot ipmi + conpot_ipmi: + container_name: conpot_ipmi + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json + - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log + - CONPOT_TEMPLATE=ipmi + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_ipmi + ports: + - "623:623" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot kamstrup_382 + conpot_kamstrup_382: + container_name: conpot_kamstrup_382 + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json + - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log + - CONPOT_TEMPLATE=kamstrup_382 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_kamstrup_382 + ports: + - "1025:1025" + - "50100:50100" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Cowrie service + cowrie: + container_name: cowrie + restart: always + tmpfs: + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 + networks: + - cowrie_local + ports: + - "22:22" + - "23:23" + image: "dtagdevsec/cowrie:1811" + read_only: true + volumes: + - /data/cowrie/downloads:/home/cowrie/cowrie/dl + - /data/cowrie/keys:/home/cowrie/cowrie/etc + - /data/cowrie/log:/home/cowrie/cowrie/log + - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty + +# Dionaea service + dionaea: + container_name: dionaea + stdin_open: true + tty: true + restart: always + network_mode: "host" + ports: + - "20:20" + - "21:21" + - "42:42" + - "69:69/udp" + - "81:81" + - "135:135" + - "443:443" + - "445:445" + - "1433:1433" + - "1723:1723" + - "1883:1883" + - "3306:3306" + - "5060:5060" + - "5060:5060/udp" + - "5061:5061" + - "27017:27017" + image: "dtagdevsec/dionaea:1811" + read_only: true + volumes: + - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp + - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp + - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www + - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp + - /data/dionaea:/opt/dionaea/var/dionaea + - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries + - /data/dionaea/log:/opt/dionaea/var/log + - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp + +# Elasticpot service + elasticpot: + container_name: elasticpot + restart: always + networks: + - elasticpot_local + ports: + - "9200:9200" + image: "dtagdevsec/elasticpot:1811" + read_only: true + volumes: + - /data/elasticpot/log:/opt/ElasticpotPY/log + +# Heralding service + heralding: + container_name: heralding + restart: always + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + # - "21:21" + # - "22:22" + # - "23:23" + # - "25:25" + # - "80:80" + - "110:110" + - "143:143" + # - "443:443" + - "993:993" + - "995:995" + - "5432:5432" + - "5900:5900" + image: "dtagdevsec/heralding:1811" + read_only: true + volumes: + - /data/heralding/log:/var/log/heralding + +# Glutton service + glutton: + build: . + container_name: glutton + restart: always + tmpfs: + - /var/lib/glutton:uid=2000,gid=2000 + - /run:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: "dtagdevsec/glutton:1811" + read_only: true + volumes: + - /data/glutton/log:/var/log/glutton +# - /root/tpotce/docker/glutton/dist/rules.yaml:/opt/glutton/rules/rules.yaml + +# Mailoney service + mailoney: + container_name: mailoney + restart: always + environment: + - HPFEEDS_SERVER= + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=20000 + - HPFEEDS_CHANNELPREFIX=prefix + networks: + - mailoney_local + ports: + - "25:25" + image: "dtagdevsec/mailoney:1811" + read_only: true + volumes: + - /data/mailoney/log:/opt/mailoney/logs + +# Medpot service + medpot: + container_name: medpot + restart: always + networks: + - medpot_local + ports: + - "2575:2575" + image: "dtagdevsec/medpot:1811" + read_only: true + volumes: + - /data/medpot/log/:/var/log/medpot + +# Rdpy service + rdpy: + container_name: rdpy + extra_hosts: + - hpfeeds.example.com:127.0.0.1 + restart: always + environment: + - HPFEEDS_SERVER=hpfeeds.example.com + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=65000 + - SERVERID=id + networks: + - rdpy_local + ports: + - "3389:3389" + image: "dtagdevsec/rdpy:1811" + read_only: true + volumes: + - /data/rdpy/log:/var/log/rdpy + +#### Snare / Tanner +## Tanner Redis Service + tanner_redis: + container_name: tanner_redis + restart: always + tty: true + networks: + - tanner_local + image: "dtagdevsec/redis:1811" + read_only: true + +## PHP Sandbox service + tanner_phpox: + container_name: tanner_phpox + restart: always + tty: true + networks: + - tanner_local + image: "dtagdevsec/phpox:1811" + read_only: true + +## Tanner API Service + tanner_api: + container_name: tanner_api + restart: always + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + command: tannerapi + depends_on: + - tanner_redis + +## Tanner WEB Service + tanner_web: + container_name: tanner_web + restart: always + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + command: tannerweb + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + depends_on: + - tanner_redis + +## Tanner Service + tanner: + container_name: tanner + restart: always + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + command: tanner + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + - /data/tanner/files:/opt/tanner/files + depends_on: + - tanner_api + - tanner_web + - tanner_phpox + +## Snare Service + snare: + container_name: snare + restart: always + tty: true + networks: + - tanner_local + ports: + - "80:80" + image: "dtagdevsec/snare:1811" + depends_on: + - tanner + + +################## +#### NSM +################## + +# P0f service + p0f: + container_name: p0f + restart: always + network_mode: "host" + image: "dtagdevsec/p0f:1811" + read_only: true + volumes: + - /data/p0f/log:/var/log/p0f + +# Suricata service + suricata: + container_name: suricata + restart: always + environment: + # For ET Pro ruleset replace "OPEN" with your OINKCODE + - OINKCODE=OPEN + network_mode: "host" + cap_add: + - NET_ADMIN + - SYS_NICE + - NET_RAW + image: "dtagdevsec/suricata:1811" + volumes: + - /data/suricata/log:/var/log/suricata + + +################## +#### Tools +################## + +# Cyberchef service + cyberchef: + container_name: cyberchef + restart: always + networks: + - cyberchef_local + ports: + - "127.0.0.1:64299:8000" + image: "dtagdevsec/cyberchef:1811" + read_only: true + +#### ELK +## Elasticsearch service + elasticsearch: + container_name: elasticsearch + restart: always + environment: + - bootstrap.memory_lock=true + - ES_JAVA_OPTS=-Xms1024m -Xmx1024m + - ES_TMPDIR=/tmp + cap_add: + - IPC_LOCK + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + mem_limit: 4g + ports: + - "127.0.0.1:64298:9200" + image: "dtagdevsec/elasticsearch:1811" + volumes: + - /data:/data + +## Kibana service + kibana: + container_name: kibana + restart: always + depends_on: + elasticsearch: + condition: service_healthy + ports: + - "127.0.0.1:64296:5601" + image: "dtagdevsec/kibana:1811" + +## Logstash service + logstash: + container_name: logstash + restart: always + depends_on: + elasticsearch: + condition: service_healthy + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/logstash:1811" + volumes: + - /data:/data + +## Elasticsearch-head service + head: + container_name: head + restart: always + depends_on: + elasticsearch: + condition: service_healthy + ports: + - "127.0.0.1:64302:9100" + image: "dtagdevsec/head:1811" + read_only: true + +# Ewsposter service + ewsposter: + container_name: ewsposter + restart: always + networks: + - ewsposter_local + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/ewsposter:1811" + volumes: + - /data:/data + - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip + +# Nginx service + nginx: + container_name: nginx + restart: always + tmpfs: + - /var/tmp/nginx/client_body + - /var/tmp/nginx/proxy + - /var/tmp/nginx/fastcgi + - /var/tmp/nginx/uwsgi + - /var/tmp/nginx/scgi + - /run + network_mode: "host" + ports: + - "64297:64297" + image: "dtagdevsec/nginx:1811" + read_only: true + volumes: + - /data/nginx/cert/:/etc/nginx/cert/:ro + - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - /data/nginx/log/:/var/log/nginx/ + +# Spiderfoot service + spiderfoot: + container_name: spiderfoot + restart: always + networks: + - spiderfoot_local + ports: + - "127.0.0.1:64303:8080" + image: "dtagdevsec/spiderfoot:1811" + volumes: + - /data/spiderfoot/spiderfoot.db:/home/spiderfoot/spiderfoot.db diff --git a/etc/compose/sensor.yml b/etc/compose/sensor.yml new file mode 100644 index 000000000..ec64eedd9 --- /dev/null +++ b/etc/compose/sensor.yml @@ -0,0 +1,426 @@ +# T-Pot (Sensor) +# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) +version: '2.3' + +networks: + conpot_local_IEC104: + conpot_local_guardian_ast: + conpot_local_ipmi: + conpot_local_kamstrup_382: + cowrie_local: + elasticpot_local: + heralding_local: + mailoney_local: + medpot_local: + rdpy_local: + tanner_local: + ewsposter_local: + spiderfoot_local: + +services: + +################## +#### Honeypots +################## + +# Ciscoasa service + ciscoasa: + container_name: ciscoasa + restart: always + tmpfs: + - /tmp/ciscoasa:uid=2000,gid=2000 + network_mode: "host" + ports: + - "5000:5000/udp" + - "8443:8443" + image: "dtagdevsec/ciscoasa:1811" + read_only: true + volumes: + - /data/ciscoasa/log:/var/log/ciscoasa + +# Conpot IEC104 service + conpot_IEC104: + container_name: conpot_iec104 + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json + - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log + - CONPOT_TEMPLATE=IEC104 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_IEC104 + ports: + - "161:161" + - "2404:2404" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot guardian_ast service + conpot_guardian_ast: + container_name: conpot_guardian_ast + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json + - CONPOT_LOG=/var/log/conpot/conpot_guardian_ast.log + - CONPOT_TEMPLATE=guardian_ast + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_guardian_ast + ports: + - "10001:10001" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot ipmi + conpot_ipmi: + container_name: conpot_ipmi + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json + - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log + - CONPOT_TEMPLATE=ipmi + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_ipmi + ports: + - "623:623" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot kamstrup_382 + conpot_kamstrup_382: + container_name: conpot_kamstrup_382 + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json + - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log + - CONPOT_TEMPLATE=kamstrup_382 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_kamstrup_382 + ports: + - "1025:1025" + - "50100:50100" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Cowrie service + cowrie: + container_name: cowrie + restart: always + tmpfs: + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 + networks: + - cowrie_local + ports: + - "22:22" + - "23:23" + image: "dtagdevsec/cowrie:1811" + read_only: true + volumes: + - /data/cowrie/downloads:/home/cowrie/cowrie/dl + - /data/cowrie/keys:/home/cowrie/cowrie/etc + - /data/cowrie/log:/home/cowrie/cowrie/log + - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty + +# Dionaea service + dionaea: + container_name: dionaea + stdin_open: true + tty: true + restart: always + network_mode: "host" + ports: + - "20:20" + - "21:21" + - "42:42" + - "69:69/udp" + - "81:81" + - "135:135" + - "443:443" + - "445:445" + - "1433:1433" + - "1723:1723" + - "1883:1883" + - "3306:3306" + - "5060:5060" + - "5060:5060/udp" + - "5061:5061" + - "27017:27017" + image: "dtagdevsec/dionaea:1811" + read_only: true + volumes: + - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp + - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp + - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www + - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp + - /data/dionaea:/opt/dionaea/var/dionaea + - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries + - /data/dionaea/log:/opt/dionaea/var/log + - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp + +# Elasticpot service + elasticpot: + container_name: elasticpot + restart: always + networks: + - elasticpot_local + ports: + - "9200:9200" + image: "dtagdevsec/elasticpot:1811" + read_only: true + volumes: + - /data/elasticpot/log:/opt/ElasticpotPY/log + +# Heralding service + heralding: + container_name: heralding + restart: always + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + # - "21:21" + # - "22:22" + # - "23:23" + # - "25:25" + # - "80:80" + - "110:110" + - "143:143" + # - "443:443" + - "993:993" + - "995:995" + - "5432:5432" + - "5900:5900" + image: "dtagdevsec/heralding:1811" + read_only: true + volumes: + - /data/heralding/log:/var/log/heralding + +# Honeytrap service + honeytrap: + container_name: honeytrap + restart: always + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: "dtagdevsec/honeytrap:1811" + read_only: true + volumes: + - /data/honeytrap/attacks:/opt/honeytrap/var/attacks + - /data/honeytrap/downloads:/opt/honeytrap/var/downloads + - /data/honeytrap/log:/opt/honeytrap/var/log + +# Mailoney service + mailoney: + container_name: mailoney + restart: always + environment: + - HPFEEDS_SERVER= + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=20000 + - HPFEEDS_CHANNELPREFIX=prefix + networks: + - mailoney_local + ports: + - "25:25" + image: "dtagdevsec/mailoney:1811" + read_only: true + volumes: + - /data/mailoney/log:/opt/mailoney/logs + +# Medpot service + medpot: + container_name: medpot + restart: always + networks: + - medpot_local + ports: + - "2575:2575" + image: "dtagdevsec/medpot:1811" + read_only: true + volumes: + - /data/medpot/log/:/var/log/medpot + +# Rdpy service + rdpy: + container_name: rdpy + extra_hosts: + - hpfeeds.example.com:127.0.0.1 + restart: always + environment: + - HPFEEDS_SERVER=hpfeeds.example.com + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=65000 + - SERVERID=id + networks: + - rdpy_local + ports: + - "3389:3389" + image: "dtagdevsec/rdpy:1811" + read_only: true + volumes: + - /data/rdpy/log:/var/log/rdpy + +#### Snare / Tanner +## Tanner Redis Service + tanner_redis: + container_name: tanner_redis + restart: always + tty: true + networks: + - tanner_local + image: "dtagdevsec/redis:1811" + read_only: true + +## PHP Sandbox service + tanner_phpox: + container_name: tanner_phpox + restart: always + tty: true + networks: + - tanner_local + image: "dtagdevsec/phpox:1811" + read_only: true + +## Tanner API Service + tanner_api: + container_name: tanner_api + restart: always + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + command: tannerapi + depends_on: + - tanner_redis + +## Tanner WEB Service + tanner_web: + container_name: tanner_web + restart: always + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + command: tannerweb + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + depends_on: + - tanner_redis + +## Tanner Service + tanner: + container_name: tanner + restart: always + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + command: tanner + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + - /data/tanner/files:/opt/tanner/files + depends_on: + - tanner_api + - tanner_web + - tanner_phpox + +## Snare Service + snare: + container_name: snare + restart: always + tty: true + networks: + - tanner_local + ports: + - "80:80" + image: "dtagdevsec/snare:1811" + depends_on: + - tanner + + +################## +#### NSM +################## + +# P0f service + p0f: + container_name: p0f + restart: always + network_mode: "host" + image: "dtagdevsec/p0f:1811" + read_only: true + volumes: + - /data/p0f/log:/var/log/p0f + +# Suricata service + suricata: + container_name: suricata + restart: always + environment: + # For ET Pro ruleset replace "OPEN" with your OINKCODE + - OINKCODE=OPEN + network_mode: "host" + cap_add: + - NET_ADMIN + - SYS_NICE + - NET_RAW + image: "dtagdevsec/suricata:1811" + volumes: + - /data/suricata/log:/var/log/suricata + + +################## +#### Tools +################## + +# Ewsposter service + ewsposter: + container_name: ewsposter + restart: always + networks: + - ewsposter_local + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/ewsposter:1811" + volumes: + - /data:/data + - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip diff --git a/etc/compose/standard.yml b/etc/compose/standard.yml new file mode 100644 index 000000000..822ee1f19 --- /dev/null +++ b/etc/compose/standard.yml @@ -0,0 +1,532 @@ +# T-Pot (Standard) +# Do not erase ports sections, these are used by /opt/tpot/bin/rules.sh to setup iptables ACCEPT rules for NFQ (honeytrap / glutton) +version: '2.3' + +networks: + conpot_local_IEC104: + conpot_local_guardian_ast: + conpot_local_ipmi: + conpot_local_kamstrup_382: + cowrie_local: + cyberchef_local: + elasticpot_local: + heralding_local: + mailoney_local: + medpot_local: + rdpy_local: + tanner_local: + ewsposter_local: + spiderfoot_local: + +services: + +################## +#### Honeypots +################## + +# Ciscoasa service + ciscoasa: + container_name: ciscoasa + restart: always + tmpfs: + - /tmp/ciscoasa:uid=2000,gid=2000 + network_mode: "host" + ports: + - "5000:5000/udp" + - "8443:8443" + image: "dtagdevsec/ciscoasa:1811" + read_only: true + volumes: + - /data/ciscoasa/log:/var/log/ciscoasa + +# Conpot IEC104 service + conpot_IEC104: + container_name: conpot_iec104 + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_IEC104.json + - CONPOT_LOG=/var/log/conpot/conpot_IEC104.log + - CONPOT_TEMPLATE=IEC104 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_IEC104 + ports: + - "161:161" + - "2404:2404" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot guardian_ast service + conpot_guardian_ast: + container_name: conpot_guardian_ast + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_guardian_ast.json + - CONPOT_LOG=/var/log/conpot/conpot_guardian_ast.log + - CONPOT_TEMPLATE=guardian_ast + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_guardian_ast + ports: + - "10001:10001" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot ipmi + conpot_ipmi: + container_name: conpot_ipmi + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_ipmi.json + - CONPOT_LOG=/var/log/conpot/conpot_ipmi.log + - CONPOT_TEMPLATE=ipmi + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_ipmi + ports: + - "623:623" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Conpot kamstrup_382 + conpot_kamstrup_382: + container_name: conpot_kamstrup_382 + restart: always + environment: + - CONPOT_CONFIG=/etc/conpot/conpot.cfg + - CONPOT_JSON_LOG=/var/log/conpot/conpot_kamstrup_382.json + - CONPOT_LOG=/var/log/conpot/conpot_kamstrup_382.log + - CONPOT_TEMPLATE=kamstrup_382 + - CONPOT_TMP=/tmp/conpot + tmpfs: + - /tmp/conpot:uid=2000,gid=2000 + networks: + - conpot_local_kamstrup_382 + ports: + - "1025:1025" + - "50100:50100" + image: "dtagdevsec/conpot:1811" + read_only: true + volumes: + - /data/conpot/log:/var/log/conpot + +# Cowrie service + cowrie: + container_name: cowrie + restart: always + tmpfs: + - /tmp/cowrie:uid=2000,gid=2000 + - /tmp/cowrie/data:uid=2000,gid=2000 + networks: + - cowrie_local + ports: + - "22:22" + - "23:23" + image: "dtagdevsec/cowrie:1811" + read_only: true + volumes: + - /data/cowrie/downloads:/home/cowrie/cowrie/dl + - /data/cowrie/keys:/home/cowrie/cowrie/etc + - /data/cowrie/log:/home/cowrie/cowrie/log + - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty + +# Dionaea service + dionaea: + container_name: dionaea + stdin_open: true + tty: true + restart: always + network_mode: "host" + ports: + - "20:20" + - "21:21" + - "42:42" + - "69:69/udp" + - "81:81" + - "135:135" + - "443:443" + - "445:445" + - "1433:1433" + - "1723:1723" + - "1883:1883" + - "3306:3306" + - "5060:5060" + - "5060:5060/udp" + - "5061:5061" + - "27017:27017" + image: "dtagdevsec/dionaea:1811" + read_only: true + volumes: + - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp + - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp + - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www + - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp + - /data/dionaea:/opt/dionaea/var/dionaea + - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries + - /data/dionaea/log:/opt/dionaea/var/log + - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp + +# Elasticpot service + elasticpot: + container_name: elasticpot + restart: always + networks: + - elasticpot_local + ports: + - "9200:9200" + image: "dtagdevsec/elasticpot:1811" + read_only: true + volumes: + - /data/elasticpot/log:/opt/ElasticpotPY/log + +# Heralding service + heralding: + container_name: heralding + restart: always + tmpfs: + - /tmp/heralding:uid=2000,gid=2000 + networks: + - heralding_local + ports: + # - "21:21" + # - "22:22" + # - "23:23" + # - "25:25" + # - "80:80" + - "110:110" + - "143:143" + # - "443:443" + - "993:993" + - "995:995" + - "5432:5432" + - "5900:5900" + image: "dtagdevsec/heralding:1811" + read_only: true + volumes: + - /data/heralding/log:/var/log/heralding + +# Honeytrap service + honeytrap: + container_name: honeytrap + restart: always + tmpfs: + - /tmp/honeytrap:uid=2000,gid=2000 + network_mode: "host" + cap_add: + - NET_ADMIN + image: "dtagdevsec/honeytrap:1811" + read_only: true + volumes: + - /data/honeytrap/attacks:/opt/honeytrap/var/attacks + - /data/honeytrap/downloads:/opt/honeytrap/var/downloads + - /data/honeytrap/log:/opt/honeytrap/var/log + +# Mailoney service + mailoney: + container_name: mailoney + restart: always + environment: + - HPFEEDS_SERVER= + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=20000 + - HPFEEDS_CHANNELPREFIX=prefix + networks: + - mailoney_local + ports: + - "25:25" + image: "dtagdevsec/mailoney:1811" + read_only: true + volumes: + - /data/mailoney/log:/opt/mailoney/logs + +# Medpot service + medpot: + container_name: medpot + restart: always + networks: + - medpot_local + ports: + - "2575:2575" + image: "dtagdevsec/medpot:1811" + read_only: true + volumes: + - /data/medpot/log/:/var/log/medpot + +# Rdpy service + rdpy: + container_name: rdpy + extra_hosts: + - hpfeeds.example.com:127.0.0.1 + restart: always + environment: + - HPFEEDS_SERVER=hpfeeds.example.com + - HPFEEDS_IDENT=user + - HPFEEDS_SECRET=pass + - HPFEEDS_PORT=65000 + - SERVERID=id + networks: + - rdpy_local + ports: + - "3389:3389" + image: "dtagdevsec/rdpy:1811" + read_only: true + volumes: + - /data/rdpy/log:/var/log/rdpy + +#### Snare / Tanner +## Tanner Redis Service + tanner_redis: + container_name: tanner_redis + restart: always + tty: true + networks: + - tanner_local + image: "dtagdevsec/redis:1811" + read_only: true + +## PHP Sandbox service + tanner_phpox: + container_name: tanner_phpox + restart: always + tty: true + networks: + - tanner_local + image: "dtagdevsec/phpox:1811" + read_only: true + +## Tanner API Service + tanner_api: + container_name: tanner_api + restart: always + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + command: tannerapi + depends_on: + - tanner_redis + +## Tanner WEB Service + tanner_web: + container_name: tanner_web + restart: always + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + command: tannerweb + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + depends_on: + - tanner_redis + +## Tanner Service + tanner: + container_name: tanner + restart: always + tmpfs: + - /tmp/tanner:uid=2000,gid=2000 + tty: true + networks: + - tanner_local + image: "dtagdevsec/tanner:1811" + command: tanner + read_only: true + volumes: + - /data/tanner/log:/var/log/tanner + - /data/tanner/files:/opt/tanner/files + depends_on: + - tanner_api + - tanner_web + - tanner_phpox + +## Snare Service + snare: + container_name: snare + restart: always + tty: true + networks: + - tanner_local + ports: + - "80:80" + image: "dtagdevsec/snare:1811" + depends_on: + - tanner + + +################## +#### NSM +################## + +# P0f service + p0f: + container_name: p0f + restart: always + network_mode: "host" + image: "dtagdevsec/p0f:1811" + read_only: true + volumes: + - /data/p0f/log:/var/log/p0f + +# Suricata service + suricata: + container_name: suricata + restart: always + environment: + # For ET Pro ruleset replace "OPEN" with your OINKCODE + - OINKCODE=OPEN + network_mode: "host" + cap_add: + - NET_ADMIN + - SYS_NICE + - NET_RAW + image: "dtagdevsec/suricata:1811" + volumes: + - /data/suricata/log:/var/log/suricata + + +################## +#### Tools +################## + +# Cyberchef service + cyberchef: + container_name: cyberchef + restart: always + networks: + - cyberchef_local + ports: + - "127.0.0.1:64299:8000" + image: "dtagdevsec/cyberchef:1811" + read_only: true + +#### ELK +## Elasticsearch service + elasticsearch: + container_name: elasticsearch + restart: always + environment: + - bootstrap.memory_lock=true + - ES_JAVA_OPTS=-Xms1024m -Xmx1024m + - ES_TMPDIR=/tmp + cap_add: + - IPC_LOCK + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + mem_limit: 4g + ports: + - "127.0.0.1:64298:9200" + image: "dtagdevsec/elasticsearch:1811" + volumes: + - /data:/data + +## Kibana service + kibana: + container_name: kibana + restart: always + depends_on: + elasticsearch: + condition: service_healthy + ports: + - "127.0.0.1:64296:5601" + image: "dtagdevsec/kibana:1811" + +## Logstash service + logstash: + container_name: logstash + restart: always + depends_on: + elasticsearch: + condition: service_healthy + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/logstash:1811" + volumes: + - /data:/data + +## Elasticsearch-head service + head: + container_name: head + restart: always + depends_on: + elasticsearch: + condition: service_healthy + ports: + - "127.0.0.1:64302:9100" + image: "dtagdevsec/head:1811" + read_only: true + +# Ewsposter service + ewsposter: + container_name: ewsposter + restart: always + networks: + - ewsposter_local + env_file: + - /opt/tpot/etc/compose/elk_environment + image: "dtagdevsec/ewsposter:1811" + volumes: + - /data:/data + - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip + +# Nginx service + nginx: + container_name: nginx + restart: always + tmpfs: + - /var/tmp/nginx/client_body + - /var/tmp/nginx/proxy + - /var/tmp/nginx/fastcgi + - /var/tmp/nginx/uwsgi + - /var/tmp/nginx/scgi + - /run + network_mode: "host" + ports: + - "64297:64297" + image: "dtagdevsec/nginx:1811" + read_only: true + volumes: + - /data/nginx/cert/:/etc/nginx/cert/:ro + - /data/nginx/conf/nginxpasswd:/etc/nginx/nginxpasswd:ro + - /data/nginx/log/:/var/log/nginx/ + +# Spiderfoot service + spiderfoot: + container_name: spiderfoot + restart: always + networks: + - spiderfoot_local + ports: + - "127.0.0.1:64303:8080" + image: "dtagdevsec/spiderfoot:1811" + volumes: + - /data/spiderfoot/spiderfoot.db:/home/spiderfoot/spiderfoot.db diff --git a/etc/compose/tpot.yml b/etc/compose/tpot.yml deleted file mode 100644 index 20b506752..000000000 --- a/etc/compose/tpot.yml +++ /dev/null @@ -1,284 +0,0 @@ -# T-Pot (Standard) -# For docker-compose ... -version: '2.2' - -networks: - cowrie_local: - dionaea_local: - elasticpot_local: - ewsposter_local: - glastopf_local: - mailoney_local: - rdpy_local: - spiderfoot_local: - ui-for-docker_local: - vnclowpot_local: - -services: - -# Cowrie service - cowrie: - container_name: cowrie - restart: always - networks: - - cowrie_local - cap_add: - - NET_BIND_SERVICE - ports: - - "22:2222" - - "23:2223" - image: "dtagdevsec/cowrie:1710" - volumes: - - /data/cowrie/downloads:/home/cowrie/cowrie/dl - - /data/cowrie/keys:/home/cowrie/cowrie/etc - - /data/cowrie/log:/home/cowrie/cowrie/log - - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty - -# Dionaea service - dionaea: - container_name: dionaea - stdin_open: true - restart: always - networks: - - dionaea_local - cap_add: - - NET_BIND_SERVICE - ports: - - "20:20" - - "21:21" - - "42:42" - - "69:69/udp" - - "8081:80" - - "135:135" - - "443:443" - - "445:445" - - "1433:1433" - - "1723:1723" - - "1883:1883" - - "3306:3306" - - "5060:5060" - - "5060:5060/udp" - - "5061:5061" - - "27017:27017" - image: "dtagdevsec/dionaea:1710" - volumes: - - /data/dionaea/roots/ftp:/opt/dionaea/var/dionaea/roots/ftp - - /data/dionaea/roots/tftp:/opt/dionaea/var/dionaea/roots/tftp - - /data/dionaea/roots/www:/opt/dionaea/var/dionaea/roots/www - - /data/dionaea/roots/upnp:/opt/dionaea/var/dionaea/roots/upnp - - /data/dionaea:/opt/dionaea/var/dionaea - - /data/dionaea/binaries:/opt/dionaea/var/dionaea/binaries - - /data/dionaea/log:/opt/dionaea/var/log - - /data/dionaea/rtp:/opt/dionaea/var/dionaea/rtp - -# Elasticpot service - elasticpot: - container_name: elasticpot - restart: always - networks: - - elasticpot_local - ports: - - "9200:9200" - image: "dtagdevsec/elasticpot:1710" - volumes: - - /data/elasticpot/log:/opt/ElasticpotPY/log - -# ELK services -## Elasticsearch service - elasticsearch: - container_name: elasticsearch - restart: always - environment: - - bootstrap.memory_lock=true - - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - cap_add: - - IPC_LOCK - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 -# mem_limit: 2g - ports: - - "127.0.0.1:64298:9200" - image: "dtagdevsec/elasticsearch:1710" - volumes: - - /data:/data - -## Kibana service - kibana: - container_name: kibana - restart: always - depends_on: - elasticsearch: - condition: service_healthy - ports: - - "127.0.0.1:64296:5601" - image: "dtagdevsec/kibana:1710" - -## Logstash service - logstash: - container_name: logstash - restart: always - depends_on: - elasticsearch: - condition: service_healthy - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/logstash:1710" - volumes: - - /data:/data - - /var/log:/data/host/log - -## Elasticsearch-head service - head: - container_name: head - restart: always - depends_on: - elasticsearch: - condition: service_healthy - ports: - - "127.0.0.1:64302:9100" - image: "dtagdevsec/head:1710" - -# Ewsposter service - ewsposter: - container_name: ewsposter - restart: always - networks: - - ewsposter_local - env_file: - - /opt/tpot/etc/compose/elk_environment - image: "dtagdevsec/ewsposter:1710" - volumes: - - /data:/data - - /data/ews/conf/ews.ip:/opt/ewsposter/ews.ip - -# Glastopf service - glastopf: - container_name: glastopf - restart: always - networks: - - glastopf_local - ports: - - "80:80" - image: "dtagdevsec/glastopf:1710" - volumes: - - /data/glastopf/db:/opt/glastopf/db - - /data/glastopf/log:/opt/glastopf/log - -# Honeytrap service - honeytrap: - container_name: honeytrap - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - image: "dtagdevsec/honeytrap:1710" - volumes: - - /data/honeytrap/attacks:/opt/honeytrap/var/attacks - - /data/honeytrap/downloads:/opt/honeytrap/var/downloads - - /data/honeytrap/log:/opt/honeytrap/var/log - -# Mailoney service - mailoney: - container_name: mailoney - restart: always - networks: - - mailoney_local - ports: - - "25:2525" - image: "dtagdevsec/mailoney:1710" - volumes: - - /data/mailoney/log:/opt/mailoney/logs - -# Netdata service - netdata: - container_name: netdata - restart: always - network_mode: "host" - depends_on: - elasticsearch: - condition: service_healthy - cap_add: - - SYS_PTRACE - security_opt: - - apparmor=unconfined - image: "dtagdevsec/netdata:1710" - volumes: - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /var/run/docker.sock:/var/run/docker.sock - -# Rdpy service - rdpy: - container_name: rdpy - restart: always - networks: - - rdpy_local - ports: - - "3389:3389" - image: "dtagdevsec/rdpy:1710" - volumes: - - /data/rdpy/log:/var/log/rdpy - -# Spiderfoot service - spiderfoot: - container_name: spiderfoot - restart: always - networks: - - spiderfoot_local - ports: - - "127.0.0.1:64303:8080" - image: "dtagdevsec/spiderfoot:1710" - volumes: - - /data/spiderfoot/spiderfoot.db:/home/spiderfoot/spiderfoot.db - -# Ui-for-docker service - ui-for-docker: - container_name: ui-for-docker - command: -H unix:///var/run/docker.sock --no-auth - restart: always - networks: - - ui-for-docker_local - ports: - - "127.0.0.1:64299:9000" - image: "dtagdevsec/ui-for-docker:1710" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - -# Suricata service - suricata: - container_name: suricata - restart: always - network_mode: "host" - cap_add: - - NET_ADMIN - - SYS_NICE - - NET_RAW - image: "dtagdevsec/suricata:1710" - volumes: - - /data/suricata/log:/var/log/suricata - -# P0f service - p0f: - container_name: p0f - restart: always - network_mode: "host" - image: "dtagdevsec/p0f:1710" - volumes: - - /data/p0f/log:/var/log/p0f - -# Vnclowpot service - vnclowpot: - container_name: vnclowpot - restart: always - networks: - - vnclowpot_local - ports: - - "5900:5900" - image: "dtagdevsec/vnclowpot:1710" - volumes: - - /data/vnclowpot/log:/var/log/vnclowpot diff --git a/etc/logrotate/logrotate.conf b/etc/logrotate/logrotate.conf index 85d889bbf..a09bbcdca 100644 --- a/etc/logrotate/logrotate.conf +++ b/etc/logrotate/logrotate.conf @@ -1,5 +1,6 @@ -/data/conpot/log/conpot.json -/data/conpot/log/conpot.log +/data/ciscoasa/log/ciscoasa.log +/data/conpot/log/conpot*.json +/data/conpot/log/conpot*.log /data/cowrie/log/cowrie.json /data/cowrie/log/cowrie-textlog.log /data/cowrie/log/lastlog.txt @@ -12,20 +13,24 @@ /data/dionaea/dionaea-errors.log /data/elasticpot/log/elasticpot.log /data/elk/log/*.log -/data/emobility/log/centralsystem.log -/data/emobility/log/centralsystemEWS.log /data/glastopf/log/glastopf.log /data/glastopf/db/glastopf.db +/data/glutton/log/*.log +/data/glutton/log/*.err +/data/heralding/log/*.log +/data/heralding/log/*.csv /data/honeytrap/log/*.log /data/honeytrap/log/*.json /data/honeytrap/attacks.tgz /data/honeytrap/downloads.tgz /data/mailoney/log/commands.log +/data/medpot/log/*.log +/data/nginx/log/*.log /data/p0f/log/p0f.json /data/rdpy/log/rdpy.log /data/suricata/log/*.log /data/suricata/log/*.json -/data/vnclowpot/log/vnclowpot.log +/data/tanner/log/*.json { su tpot tpot copytruncate diff --git a/etc/objects/dashboards.json b/etc/objects/dashboards.json deleted file mode 100644 index 8e1a22616..000000000 --- a/etc/objects/dashboards.json +++ /dev/null @@ -1,2996 +0,0 @@ -[ - { - "_id": "3be196b0-68c7-11e7-a9d5-35bd0d8c6af2", - "_type": "dashboard", - "_source": { - "title": ">T-Pot", - "hits": 0, - "description": "T-Pot Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"P0f-OS-Top-10\",\"panelIndex\":9,\"row\":10,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Cowrie-Username-Tagcloud\",\"panelIndex\":12,\"row\":13,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":4,\"id\":\"Cowrie-Password-Tagcloud\",\"panelIndex\":13,\"row\":13,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":8,\"id\":\"Suricata-Alert-Signature-Top-10\",\"panelIndex\":21,\"row\":16,\"size_x\":5,\"size_y\":6,\"type\":\"visualization\"},{\"col\":6,\"id\":\"1a097850-7c22-11e7-aa1e-6bf93670d67b\",\"panelIndex\":38,\"row\":16,\"size_x\":2,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"e624bc50-7dd6-11e7-bee2-c98307c16efa\",\"panelIndex\":43,\"row\":9,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"d94ff2a0-7ec2-11e7-a286-9f03beba6417\",\"panelIndex\":44,\"row\":16,\"size_x\":3,\"size_y\":6,\"type\":\"visualization\"},{\"col\":4,\"id\":\"50d82860-7ea0-11e7-a286-9f03beba6417\",\"panelIndex\":45,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"7b61a6a0-7ebf-11e7-a286-9f03beba6417\",\"panelIndex\":46,\"row\":11,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"87428ba0-7e9d-11e7-a286-9f03beba6417\",\"panelIndex\":47,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"762f66c0-7e9e-11e7-a286-9f03beba6417\",\"panelIndex\":48,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":4,\"id\":\"0d947000-7ebd-11e7-a286-9f03beba6417\",\"panelIndex\":49,\"row\":10,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"885928c0-7ebe-11e7-a286-9f03beba6417\",\"panelIndex\":50,\"row\":7,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"ef227eb0-7e9d-11e7-a286-9f03beba6417\",\"panelIndex\":51,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"d1aa9740-7e9e-11e7-a286-9f03beba6417\",\"panelIndex\":52,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":4,\"id\":\"772cb2b0-7ec3-11e7-a7c8-5f38ad5bf75f\",\"panelIndex\":53,\"row\":16,\"size_x\":2,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"349c11c0-7ea0-11e7-a286-9f03beba6417\",\"panelIndex\":54,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"f1a19000-7ebf-11e7-a286-9f03beba6417\",\"panelIndex\":55,\"row\":13,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-21\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-38\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-44\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-52\":{\"mapCenter\":[28.92163128242129,-2.98828125],\"mapZoom\":2},\"P-53\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-9\":{\"vis\":{\"legendOpen\":true}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "Cowrie", - "_type": "dashboard", - "_source": { - "title": "Cowrie", - "hits": 0, - "description": "Cowrie Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"Cowrie-Events-Histogram\",\"panelIndex\":22,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":4,\"id\":\"Cowrie-Countries-Top-10\",\"panelIndex\":28,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Cowrie-Events-by-Country-Histogram\",\"panelIndex\":29,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":10,\"id\":\"Cowrie-Version-Pie-Top-10\",\"panelIndex\":31,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Cowrie-Username-Tagcloud-Large\",\"panelIndex\":34,\"row\":12,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Cowrie-Password-Tagcloud-Large\",\"panelIndex\":35,\"row\":12,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Cowrie-Map\",\"panelIndex\":36,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Cowrie-Input-Top-10\",\"panelIndex\":37,\"row\":16,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":5,\"id\":\"Cowrie-Source-IP-Top-10\",\"panelIndex\":38,\"row\":16,\"size_x\":2,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Cowrie-ASN-Top-10\",\"panelIndex\":39,\"row\":16,\"size_x\":4,\"size_y\":5,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Cowrie-Ports-Pie\",\"panelIndex\":43,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"c1ef91c0-7dc2-11e7-8268-ed048f6272e0\",\"panelIndex\":44,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"bf39e000-80d5-11e7-ba6f-4542711dd148\",\"panelIndex\":45,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"f28b8c60-80e4-11e7-ba6f-4542711dd148\",\"panelIndex\":46,\"row\":7,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"2a6803f0-80e7-11e7-a689-67e589a14a8a\",\"panelIndex\":47,\"row\":7,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-1\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"P-33\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"P-36\":{\"mapCenter\":[29.22889003019423,-0.17578125],\"mapZoom\":2},\"P-37\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-38\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-39\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "Dionaea", - "_type": "dashboard", - "_source": { - "title": "Dionaea", - "hits": 0, - "description": "Dionaea Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"Dionaea-Events-Histogram\",\"panelIndex\":2,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":10,\"id\":\"Dionaea-Destination-Ports-Top-10\",\"panelIndex\":3,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Dionaea-Protocol\",\"panelIndex\":4,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Dionaea-Username-Tagcloud-Large\",\"panelIndex\":7,\"row\":13,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Dionaea-Password-Tagcloud-Large\",\"panelIndex\":8,\"row\":13,\"size_x\":6,\"size_y\":4,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Dionaea-Events-by-Country-Histogram\",\"panelIndex\":10,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Dionaea-Map\",\"panelIndex\":11,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Dionaea-ASN-Top-10\",\"panelIndex\":12,\"row\":17,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Dionaea-Source-IP-Top-10\",\"panelIndex\":13,\"row\":17,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"b9343070-80e9-11e7-a689-67e589a14a8a\",\"panelIndex\":14,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"cf8d0e40-80ea-11e7-a689-67e589a14a8a\",\"panelIndex\":15,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":4,\"id\":\"Dionaea-Countries-Top-10\",\"panelIndex\":16,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Dionaea-Type\",\"panelIndex\":17,\"row\":10,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":4,\"id\":\"Dionaea-Transport\",\"panelIndex\":18,\"row\":10,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"7e33e3d0-810c-11e7-8413-9fe5e30ade77\",\"panelIndex\":19,\"row\":10,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-1\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"P-11\":{\"mapCenter\":[29.53522956294847,-2.63671875],\"mapZoom\":2},\"P-12\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-13\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "ConPot", - "_type": "dashboard", - "_source": { - "title": "ConPot", - "hits": 0, - "description": "ConPot Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"ConPot-Events-Histogram\",\"panelIndex\":2,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":4,\"id\":\"ConPot-Countries-Top-10\",\"panelIndex\":3,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"ConPot-Event-Type\",\"panelIndex\":4,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":10,\"id\":\"ConPot-Protocol\",\"panelIndex\":5,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"ConPot-Events-by-Country-Histogram\",\"panelIndex\":6,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"ConPot-Input-Top-10\",\"panelIndex\":7,\"row\":10,\"size_x\":3,\"size_y\":5,\"type\":\"visualization\"},{\"col\":10,\"id\":\"ConPot-Response-Top-10\",\"panelIndex\":8,\"row\":10,\"size_x\":3,\"size_y\":5,\"type\":\"visualization\"},{\"col\":7,\"id\":\"ConPot-Map\",\"panelIndex\":9,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"ConPot-ASN-Top-10\",\"panelIndex\":11,\"row\":10,\"size_x\":3,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"ffb284f0-80cd-11e7-ab37-eb92b1bfb573\",\"panelIndex\":14,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":4,\"id\":\"082111a0-80cf-11e7-ab37-eb92b1bfb573\",\"panelIndex\":15,\"row\":10,\"size_x\":3,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"62fde9a0-858d-11e7-a686-392ac617767d\",\"panelIndex\":16,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-11\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-15\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-7\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-8\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-9\":{\"mapCenter\":[33.7243396617476,-4.74609375],\"mapZoom\":2}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "ElasticPot", - "_type": "dashboard", - "_source": { - "title": "ElasticPot", - "hits": 0, - "description": "ElasticPot Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"ElasticPot-Events-Histogram\",\"panelIndex\":2,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"ElasticPot-Countries-Top-10\",\"panelIndex\":3,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"ElasticPot-Events-by-Country-Histogram\",\"panelIndex\":4,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"ElasticPot-Map\",\"panelIndex\":5,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":5,\"id\":\"ElasticPot-Source-IP-Top-10\",\"panelIndex\":6,\"row\":10,\"size_x\":3,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"ElasticPot-ASN-Top-10\",\"panelIndex\":7,\"row\":10,\"size_x\":4,\"size_y\":5,\"type\":\"visualization\"},{\"col\":8,\"id\":\"ElasticPot-Query-Top-10\",\"panelIndex\":9,\"row\":10,\"size_x\":5,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"d01a6390-827e-11e7-afbf-a7491fba5d8a\",\"panelIndex\":10,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"59b9dd60-827f-11e7-afbf-a7491fba5d8a\",\"panelIndex\":11,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-5\":{\"mapCenter\":[28.304380682962783,3.33984375],\"mapZoom\":2},\"P-6\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"asc\"}}}},\"P-7\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-9\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "Honeytrap", - "_type": "dashboard", - "_source": { - "title": "Honeytrap", - "hits": 0, - "description": "Honeytrap Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"Honeytrap-Events-Histogram\",\"panelIndex\":2,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":4,\"id\":\"Honeytrap-Countries-Top-10\",\"panelIndex\":5,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Honeytrap-Events-by-Country-Histogram\",\"panelIndex\":6,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Honeytrap-Destination-Ports-Top-10\",\"panelIndex\":7,\"row\":10,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Honeytrap-Map\",\"panelIndex\":8,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Honeytrap-Source-IP-Top-10\",\"panelIndex\":9,\"row\":13,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Honeytrap-ASN-Top-10\",\"panelIndex\":10,\"row\":13,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"6ee70b90-8374-11e7-9adb-2955c2136c8c\",\"panelIndex\":11,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"ec53e470-8376-11e7-9adb-2955c2136c8c\",\"panelIndex\":12,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"576a3cb0-82ae-11e7-bcbe-2b6958a9c888\",\"panelIndex\":13,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":4,\"id\":\"4e2887d0-8379-11e7-97dc-15d31af3c77f\",\"panelIndex\":14,\"row\":10,\"size_x\":9,\"size_y\":3,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-1\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"P-10\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-14\":{\"vis\":{\"defaultColors\":{\"0 - 450\":\"rgb(255,255,204)\",\"450 - 900\":\"rgb(255,241,170)\",\"900 - 1350\":\"rgb(254,225,135)\",\"1350 - 1800\":\"rgb(254,201,101)\",\"1800 - 2250\":\"rgb(254,171,73)\",\"2250 - 2700\":\"rgb(253,141,60)\",\"2700 - 3150\":\"rgb(252,91,46)\",\"3150 - 3600\":\"rgb(237,47,34)\",\"3600 - 4050\":\"rgb(212,16,32)\",\"4050 - 4500\":\"rgb(176,0,38)\"}}},\"P-8\":{\"mapCenter\":[28.613459424004414,-3.69140625],\"mapZoom\":2},\"P-9\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "NGINX", - "_type": "dashboard", - "_source": { - "title": "NGINX", - "hits": 0, - "description": "NGINX Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"NGINX-Events-Histogram\",\"panelIndex\":2,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":4,\"id\":\"NGINX-HTTP-Method-Pie-Top-10\",\"panelIndex\":3,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"NGINX-HTTP-Status-Code-Pie-Top-10\",\"panelIndex\":4,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":10,\"id\":\"NGINX-HTTP-User-Agent-Pie-Top-10\",\"panelIndex\":5,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"NGINX-Username-Tagcloud\",\"panelIndex\":6,\"row\":7,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"NGINX-ASN-Top-10\",\"panelIndex\":7,\"row\":12,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":7,\"id\":\"NGINX-Source-IP-Top-10\",\"panelIndex\":8,\"row\":12,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":7,\"id\":\"NGINX-Map\",\"panelIndex\":9,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"NGINX-Events-by-Country-Histogram\",\"panelIndex\":13,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"NGINX-Countries-Top-10\",\"panelIndex\":14,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"51ca6ee0-80d5-11e7-ab37-eb92b1bfb573\",\"panelIndex\":15,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"7dcaa2b0-8596-11e7-a686-392ac617767d\",\"panelIndex\":16,\"row\":7,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-7\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-8\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-9\":{\"mapCenter\":[30.14512718337613,-0.87890625],\"mapZoom\":2}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "Glastopf", - "_type": "dashboard", - "_source": { - "title": "Glastopf", - "hits": 0, - "description": "Glastopf Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"Glastopf-Events-Histogram\",\"panelIndex\":2,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Glastopf-Countries-Top-10\",\"panelIndex\":3,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Glastopf-Map\",\"panelIndex\":5,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Glastop-Source-IP-Top-10\",\"panelIndex\":6,\"row\":10,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Glastopf-ASN-Top-10\",\"panelIndex\":7,\"row\":10,\"size_x\":6,\"size_y\":5,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Glastopf-Events-by-Country-Histogram\",\"panelIndex\":9,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"307afd60-82a9-11e7-bcbe-2b6958a9c888\",\"panelIndex\":10,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"59509e90-8590-11e7-a686-392ac617767d\",\"panelIndex\":11,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-1\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"P-5\":{\"mapCenter\":[29.84064389983441,-27.24609375],\"mapZoom\":2},\"P-6\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-7\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "Suricata", - "_type": "dashboard", - "_source": { - "title": "Suricata", - "hits": 0, - "description": "Suricata Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"Suricata-Events-Histogram\",\"panelIndex\":2,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":4,\"id\":\"Suricata-Countries-Top-10\",\"panelIndex\":9,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Suricata-Fileinfo-Magic-Top-10\",\"panelIndex\":12,\"row\":12,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":10,\"id\":\"Suricata-HTTP-Content-Type-Top-10\",\"panelIndex\":14,\"row\":12,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Suricata-HTTP-Hostname-Pie-Top-10\",\"panelIndex\":15,\"row\":12,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Suricata-HTTP-Method-Pie-Top-10\",\"panelIndex\":16,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":10,\"id\":\"Suricata-HTTP-User-Agent-Pie-Top-10\",\"panelIndex\":18,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":4,\"id\":\"Suricata-SSH-Client-Software-Version-Pie-Top-10\",\"panelIndex\":19,\"row\":12,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Suricata-Events-by-Country-Histogram\",\"panelIndex\":22,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Suricata-Map\",\"panelIndex\":23,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":4,\"id\":\"Suricata-Source-IP-Top-10\",\"panelIndex\":24,\"row\":15,\"size_x\":2,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Suricata-ASN-Top-10\",\"panelIndex\":25,\"row\":15,\"size_x\":3,\"size_y\":6,\"type\":\"visualization\"},{\"col\":8,\"id\":\"Suricata-Alert-Signature-Top-10\",\"panelIndex\":26,\"row\":15,\"size_x\":5,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"e624bc50-7dd6-11e7-bee2-c98307c16efa\",\"panelIndex\":27,\"row\":7,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"bf6f6000-8598-11e7-8f60-4f4666b0a88e\",\"panelIndex\":28,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"0e230290-859b-11e7-8f60-4f4666b0a88e\",\"panelIndex\":29,\"row\":7,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"b1a7f8d0-859b-11e7-8f60-4f4666b0a88e\",\"panelIndex\":30,\"row\":9,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":6,\"id\":\"1a097850-7c22-11e7-aa1e-6bf93670d67b\",\"panelIndex\":31,\"row\":15,\"size_x\":2,\"size_y\":6,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-1\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"P-23\":{\"mapCenter\":[28.613459424004414,-3.33984375],\"mapZoom\":2},\"P-24\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-25\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-26\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-31\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "eMobility", - "_type": "dashboard", - "_source": { - "title": "eMobility", - "hits": 0, - "description": "eMobility Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"eMobility-Events-Histogram\",\"panelIndex\":2,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"eMobility-Countries-Top-10\",\"panelIndex\":3,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"eMobility-Events-by-Country-Histogram\",\"panelIndex\":4,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"eMobility-Map\",\"panelIndex\":5,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"eMobility-Source-IP-Top-10\",\"panelIndex\":6,\"row\":10,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"eMobility-ASN-Top-10\",\"panelIndex\":7,\"row\":10,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"595d6170-85e0-11e7-916b-fb4cebb78112\",\"panelIndex\":8,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"c3d133e0-85e2-11e7-916b-fb4cebb78112\",\"panelIndex\":9,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-1\":{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"}}},\"P-5\":{\"mapCenter\":[29.53522956294847,-5.44921875],\"mapZoom\":2},\"P-6\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-7\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "Syslog", - "_type": "dashboard", - "_source": { - "title": "Syslog", - "hits": 0, - "description": "Syslog Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"Syslog-Events-Histogram\",\"panelIndex\":1,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Syslog-SSH-Events-Histogram\",\"panelIndex\":2,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Syslog-Events-by-Country-Histogram\",\"panelIndex\":4,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Syslog-Program-Top-10\",\"panelIndex\":6,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Syslog-Map\",\"panelIndex\":8,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"Syslog-ASN-Top-10\",\"panelIndex\":9,\"row\":10,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"Syslog-Source-IP-Top-10\",\"panelIndex\":10,\"row\":10,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":10,\"id\":\"Syslog-Username-Tagcloud\",\"panelIndex\":11,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"29117a00-85dc-11e7-916b-fb4cebb78112\",\"panelIndex\":12,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-10\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-8\":{\"mapCenter\":[29.53522956294847,-10.01953125],\"mapZoom\":2},\"P-9\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "dd6b19a0-85e8-11e7-9ef1-352f01cf0e9e", - "_type": "dashboard", - "_source": { - "title": "Vnclowpot", - "hits": 0, - "description": "Vnclowpot Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"0e34b630-85e5-11e7-a042-0737cf24db6d\",\"panelIndex\":1,\"row\":10,\"size_x\":3,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"db3104f0-85e4-11e7-a042-0737cf24db6d\",\"panelIndex\":2,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"ea4752f0-85e4-11e7-a042-0737cf24db6d\",\"panelIndex\":3,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"99249a40-85e4-11e7-a042-0737cf24db6d\",\"panelIndex\":4,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"bc1219b0-85e4-11e7-a042-0737cf24db6d\",\"panelIndex\":5,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"cda24150-85e4-11e7-a042-0737cf24db6d\",\"panelIndex\":6,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"65ba4280-85e5-11e7-a042-0737cf24db6d\",\"panelIndex\":7,\"row\":10,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":4,\"id\":\"19865b10-85e5-11e7-a042-0737cf24db6d\",\"panelIndex\":8,\"row\":10,\"size_x\":3,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"007e9470-85e5-11e7-a042-0737cf24db6d\",\"panelIndex\":9,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-1\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-2\":{\"mapCenter\":[28.92163128242129,-5.09765625],\"mapZoom\":2},\"P-7\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-8\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"match_all\":{}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "e05aac20-8b51-11e7-b92d-d39e43e3de0f", - "_type": "dashboard", - "_source": { - "title": "Rdpy", - "hits": 0, - "description": "Rdpy Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"0de24040-8b52-11e7-b92d-d39e43e3de0f\",\"panelIndex\":10,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"c90f1f00-8b52-11e7-b92d-d39e43e3de0f\",\"panelIndex\":11,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"da489b20-8b52-11e7-b92d-d39e43e3de0f\",\"panelIndex\":12,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":7,\"id\":\"e4b7cf40-8b52-11e7-b92d-d39e43e3de0f\",\"panelIndex\":13,\"row\":1,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":1,\"id\":\"051c59e0-8b53-11e7-b92d-d39e43e3de0f\",\"panelIndex\":14,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":4,\"id\":\"51c331f0-8b54-11e7-b92d-d39e43e3de0f\",\"panelIndex\":15,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"73364660-8b54-11e7-b92d-d39e43e3de0f\",\"panelIndex\":16,\"row\":10,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"874be060-8b54-11e7-b92d-d39e43e3de0f\",\"panelIndex\":17,\"row\":10,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"54213440-8b56-11e7-b92d-d39e43e3de0f\",\"panelIndex\":18,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"},{\"col\":10,\"id\":\"cb2a3a00-8b56-11e7-b92d-d39e43e3de0f\",\"panelIndex\":19,\"row\":7,\"size_x\":3,\"size_y\":3,\"type\":\"visualization\"}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-13\":{\"mapCenter\":[30.44867367928756,-5.44921875],\"mapZoom\":2},\"P-16\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-17\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"match_all\":{}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "dd95c950-8b5d-11e7-ba35-0d8832ac304f", - "_type": "dashboard", - "_source": { - "title": "Mailoney", - "hits": 0, - "description": "Mailoney Dashboard", - "panelsJSON": "[{\"col\":1,\"id\":\"5234de80-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":10,\"row\":1,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"63672eb0-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":11,\"row\":3,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"88d899e0-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":12,\"row\":5,\"size_x\":6,\"size_y\":2,\"type\":\"visualization\"},{\"col\":1,\"id\":\"cac48440-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":13,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"},{\"col\":7,\"id\":\"d2405e70-8b5e-11e7-ba35-0d8832ac304f\",\"panelIndex\":14,\"row\":7,\"size_x\":6,\"size_y\":3,\"type\":\"visualization\"},{\"col\":1,\"id\":\"ad6dcb50-8b5e-11e7-ba35-0d8832ac304f\",\"panelIndex\":15,\"row\":10,\"size_x\":3,\"size_y\":6,\"type\":\"visualization\"},{\"col\":4,\"id\":\"ba9d6280-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":16,\"row\":10,\"size_x\":3,\"size_y\":6,\"type\":\"visualization\"},{\"col\":7,\"id\":\"0169b450-8b62-11e7-ba35-0d8832ac304f\",\"panelIndex\":17,\"row\":10,\"size_x\":6,\"size_y\":6,\"type\":\"visualization\"},{\"size_x\":6,\"size_y\":6,\"panelIndex\":18,\"type\":\"visualization\",\"id\":\"c0916430-8b5e-11e7-ba35-0d8832ac304f\",\"col\":7,\"row\":1}]", - "optionsJSON": "{\"darkTheme\":false}", - "uiStateJSON": "{\"P-15\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-16\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-17\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-18\":{\"mapZoom\":2,\"mapCenter\":[29.22889003019423,-7.207031249999999]}}", - "version": 1, - "timeRestore": false, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[{\"query\":{\"match_all\":{}}}],\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "ConPot-Logs", - "_type": "search", - "_source": { - "title": "ConPot-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"ConPot\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "Cowrie-Logs", - "_type": "search", - "_source": { - "title": "Cowrie-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"Cowrie\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "Dionaea-Logs", - "_type": "search", - "_source": { - "title": "Dionaea-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"Dionaea\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "ElasticPot-Logs", - "_type": "search", - "_source": { - "title": "ElasticPot-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"ElasticPot\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "eMobility-Logs", - "_type": "search", - "_source": { - "title": "eMobility-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"eMobility\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "Glastopf-Logs", - "_type": "search", - "_source": { - "title": "Glastopf-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"Glastopf\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "Honeytrap-Logs", - "_type": "search", - "_source": { - "title": "Honeytrap-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"Honeytrap\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "NGINX-Logs", - "_type": "search", - "_source": { - "title": "NGINX-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"NGINX\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "P0f-Logs", - "_type": "search", - "_source": { - "title": "P0f-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"P0f\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "Suricata-Logs", - "_type": "search", - "_source": { - "title": "Suricata-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"Suricata\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "Syslog-Logs", - "_type": "search", - "_source": { - "title": "Syslog-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"type:\\\"Syslog\\\"\"}},\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647}}" - } - } - }, - { - "_id": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "_type": "search", - "_source": { - "title": "Mailoney-Logs", - "description": "", - "hits": 0, - "columns": [ - "ip_rep", - "alert.cve_id" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"type:\\\"Mailoney\\\"\"}},\"filter\":[]}" - } - } - }, - { - "_id": "3290fa70-69a2-11e7-bcac-d3ee6f9c26fd", - "_type": "search", - "_source": { - "title": "NSM-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"filter\":[],\"query\":{\"query_string\":{\"query\":\"type:\\\"Suricata\\\" OR type:\\\"p0f\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "c3b89bc0-69a7-11e7-bcac-d3ee6f9c26fd", - "_type": "search", - "_source": { - "title": "T-Pot-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"filter\":[],\"query\":{\"query_string\":{\"query\":\"type:\\\"ConPot\\\" OR type:\\\"Cowrie\\\" OR type:\\\"Dionaea\\\" OR type:\\\"ElasticPot\\\" OR type:\\\"eMobility\\\" OR type:\\\"Glastopf\\\" OR type:\\\"Honeytrap\\\" OR type:\\\"Mailoney\\\" OR type:\\\"p0f\\\" OR type:\\\"Suricata\\\"\",\"analyze_wildcard\":true}}}" - } - } - }, - { - "_id": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "_type": "search", - "_source": { - "title": "Vnclowpot-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query_string\":{\"query\":\"type:\\\"Vnclowpot\\\"\",\"analyze_wildcard\":true}},\"filter\":[]}" - } - } - }, - { - "_id": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "_type": "search", - "_source": { - "title": "Rdpy-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query_string\":{\"query\":\"type:\\\"Rdpy\\\"\",\"analyze_wildcard\":true}},\"filter\":[]}" - } - } - }, - { - "_id": "Honeypot-Logs", - "_type": "search", - "_source": { - "title": "Honeypot-Logs", - "description": "", - "hits": 0, - "columns": [ - "_source" - ], - "sort": [ - "@timestamp", - "desc" - ], - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"type:\\\"ConPot\\\" OR type:\\\"Cowrie\\\" OR type:\\\"Dionaea\\\" OR type:\\\"ElasticPot\\\" OR type:\\\"eMobility\\\" OR type:\\\"Glastopf\\\" OR type:\\\"Honeytrap\\\" OR type:\\\"Mailoney\\\" OR type:\\\"Rdpy\\\" OR type:\\\"Vnclowpot\\\"\",\"analyze_wildcard\":true}},\"highlightAll\":true,\"version\":true}" - } - } - }, - { - "_id": "50d82860-7ea0-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot Countries", - "visState": "{\"title\":\"Honeypot Countries\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "d94ff2a0-7ec2-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot AS/N - Top 10", - "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"CNT\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"AS\",\"field\":\"geoip.asn\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"},{\"enabled\":true,\"id\":\"3\",\"params\":{\"customLabel\":\"ASN\",\"field\":\"geoip.as_org.keyword\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"listeners\":{},\"params\":{\"perPage\":10,\"showMeticsAtAllLevels\":false,\"showPartialRows\":false,\"showTotal\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"totalFunc\":\"sum\"},\"title\":\"Honeypot AS/N - Top 10\",\"type\":\"table\"}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "772cb2b0-7ec3-11e7-a7c8-5f38ad5bf75f", - "_type": "visualization", - "_source": { - "title": "Honeypot Source IP - Top 10", - "visState": "{\"title\":\"Honeypot Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "f1a19000-7ebf-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot by Country and Port", - "visState": "{\"title\":\"Honeypot by Country and Port\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"top\",\"isDonut\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"split\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"\",\"row\":false}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "349c11c0-7ea0-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot Source IP Reputation", - "visState": "{\"title\":\"Honeypot Source IP Reputation\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "0d947000-7ebd-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot Events Pie", - "visState": "{\"title\":\"Honeypot Events Pie\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "d1aa9740-7e9e-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot Attack Map", - "visState": "{\"title\":\"Honeypot Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":0,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":3}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ConPot-Map", - "_type": "visualization", - "_source": { - "title": "ConPot Attack Map", - "visState": "{\"title\":\"ConPot Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ConPot-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "ConPot Countries", - "visState": "{\"title\":\"ConPot Countries\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ConPot-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "ConPot AS/N - Top 10", - "visState": "{\"title\":\"ConPot AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "082111a0-80cf-11e7-ab37-eb92b1bfb573", - "_type": "visualization", - "_source": { - "title": "ConPot Source IP - Top 10", - "visState": "{\"title\":\"ConPot Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ConPot-Response-Top-10", - "_type": "visualization", - "_source": { - "title": "ConPot Response - Top 10", - "visState": "{\"title\":\"ConPot Response - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"response.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Response\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ConPot-Input-Top-10", - "_type": "visualization", - "_source": { - "title": "ConPot Input - Top 10", - "visState": "{\"title\":\"ConPot Input - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"request.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Input\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ConPot-Event-Type", - "_type": "visualization", - "_source": { - "title": "ConPot Event Type", - "visState": "{\"title\":\"ConPot Event Type\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"shareYAxis\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"event_type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ConPot-Protocol", - "_type": "visualization", - "_source": { - "title": "ConPot Protocol", - "visState": "{\"title\":\"ConPot Protocol\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"data_type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "bf39e000-80d5-11e7-ba6f-4542711dd148", - "_type": "visualization", - "_source": { - "title": "Cowrie Source IP Reputation", - "visState": "{\"title\":\"Cowrie Source IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Map", - "_type": "visualization", - "_source": { - "title": "Cowrie Attack Map", - "visState": "{\"title\":\"Cowrie Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Password-Tagcloud-Large", - "_type": "visualization", - "_source": { - "title": "Cowrie Password Tagcloud - Large", - "visState": "{\"title\":\"Cowrie Password Tagcloud - Large\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"sqrt\",\"orientations\":1,\"fromDegree\":0,\"toDegree\":0,\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":500,\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"right angled\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"password.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"spy\":{\"mode\":{\"name\":null,\"fill\":false}}}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Username-Tagcloud-Large", - "_type": "visualization", - "_source": { - "title": "Cowrie Username Tagcloud - Large", - "visState": "{\"title\":\"Cowrie Username Tagcloud - Large\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"sqrt\",\"orientations\":1,\"fromDegree\":\"0\",\"toDegree\":\"0\",\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":\"500\",\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"right angled\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"username.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Ports-Pie", - "_type": "visualization", - "_source": { - "title": "Cowrie Ports Pie", - "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"filters\":[{\"input\":{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"dest_port:2222\"}}},\"label\":\"SSH\"},{\"input\":{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"dest_port:2223\"}}},\"label\":\"Telnet\"}]},\"schema\":\"segment\",\"type\":\"filters\"}],\"listeners\":{},\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true},\"title\":\"Cowrie Ports Pie\",\"type\":\"pie\"}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Version-Pie-Top-10", - "_type": "visualization", - "_source": { - "title": "Cowrie Version Pie - Top 10", - "visState": "{\"title\":\"Cowrie Version Pie - Top 10\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"version.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "Cowrie Countries - Top 10", - "visState": "{\"title\":\"Cowrie Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Source-IP-Top-10", - "_type": "visualization", - "_source": { - "title": "Cowrie Source IP - Top 10", - "visState": "{\"title\":\"Cowrie Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Map", - "_type": "visualization", - "_source": { - "title": "Dionaea Attack Map", - "visState": "{\"title\":\"Dionaea Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "Dionaea AS/N - Top 10", - "visState": "{\"title\":\"Dionaea AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "Cowrie AS/N - Top 10", - "visState": "{\"title\":\"Cowrie AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Password-Tagcloud-Large", - "_type": "visualization", - "_source": { - "title": "Dionaea Password Tagcloud - Large", - "visState": "{\"title\":\"Dionaea Password Tagcloud - Large\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"sqrt\",\"orientations\":1,\"fromDegree\":0,\"toDegree\":0,\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":500,\"spiral\":\"rectangular\",\"minFontSize\":18,\"maxFontSize\":72,\"scale\":\"square root\",\"orientation\":\"right angled\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"login.password.keyword\",\"size\":100,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Username-Tagcloud-Large", - "_type": "visualization", - "_source": { - "title": "Dionaea Username Tagcloud - Large", - "visState": "{\"title\":\"Dionaea Username Tagcloud - Large\",\"type\":\"tagcloud\",\"params\":{\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"fromDegree\":0,\"maxFontSize\":64,\"minFontSize\":16,\"orientations\":1,\"spiral\":\"rectangular\",\"textScale\":\"sqrt\",\"timeInterval\":500,\"toDegree\":0,\"scale\":\"linear\",\"orientation\":\"right angled\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"login.username.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Destination-Ports-Top-10", - "_type": "visualization", - "_source": { - "title": "Dionaea Destination Ports - Top 10", - "visState": "{\"title\":\"Dionaea Destination Ports - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"dest_port\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "Dionaea Countries - Top 10", - "visState": "{\"title\":\"Dionaea Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Transport", - "_type": "visualization", - "_source": { - "title": "Dionaea Transport", - "visState": "{\"title\":\"Dionaea Transport\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"connection.transport.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Protocol", - "_type": "visualization", - "_source": { - "title": "Dionaea Protocol", - "visState": "{\"title\":\"Dionaea Protocol\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"connection.protocol.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Type", - "_type": "visualization", - "_source": { - "title": "Dionaea Type", - "visState": "{\"title\":\"Dionaea Type\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"connection.type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "2a6803f0-80e7-11e7-a689-67e589a14a8a", - "_type": "visualization", - "_source": { - "title": "Cowrie Destination Ports Histogram", - "visState": "{\"title\":\"Cowrie Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"@timestamp per 30 seconds\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{}}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "b9343070-80e9-11e7-a689-67e589a14a8a", - "_type": "visualization", - "_source": { - "title": "Dionaea Events Bar", - "visState": "{\"title\":\"Dionaea Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Dionaea\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Dionaea\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "c1ef91c0-7dc2-11e7-8268-ed048f6272e0", - "_type": "visualization", - "_source": { - "title": "Cowrie Events Bar", - "visState": "{\"title\":\"Cowrie Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Cowrie\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Cowrie\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "d01a6390-827e-11e7-afbf-a7491fba5d8a", - "_type": "visualization", - "_source": { - "title": "ElasticPot Events Bar", - "visState": "{\"title\":\"ElasticPot Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"ElasticPot\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ElasticPot\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ElasticPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ElasticPot-Map", - "_type": "visualization", - "_source": { - "title": "ElasticPot Attack Map", - "visState": "{\"title\":\"ElasticPot Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ElasticPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "59b9dd60-827f-11e7-afbf-a7491fba5d8a", - "_type": "visualization", - "_source": { - "title": "ElasticPot Source IP Reputation", - "visState": "{\n \"title\": \"ElasticPot Source IP Reputation\",\n \"type\": \"pie\",\n \"params\": {\n \"addLegend\": true,\n \"addTooltip\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\",\n \"shareYAxis\": true\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"ip_rep.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ElasticPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "307afd60-82a9-11e7-bcbe-2b6958a9c888", - "_type": "visualization", - "_source": { - "title": "Glastopf Events Bar", - "visState": "{\"title\":\"Glastopf Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Glastopf\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Glastopf\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Glastopf-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Glastopf-Map", - "_type": "visualization", - "_source": { - "title": "Glastopf Attack Map", - "visState": "{\"title\":\"Glastopf Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Scaled Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Glastopf-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ElasticPot-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "ElasticPot AS/N - Top 10", - "visState": "{\"title\":\"ElasticPot AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "ElasticPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ElasticPot-Source-IP-Top-10", - "_type": "visualization", - "_source": { - "title": "ElasticPot Source IP - Top 10", - "visState": "{\"title\":\"ElasticPot Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "ElasticPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ElasticPot-Query-Top-10", - "_type": "visualization", - "_source": { - "title": "ElasticPot Query - Top 10", - "visState": "{\"title\":\"ElasticPot Query - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"honeypot.query.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Query\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "ElasticPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ElasticPot-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "ElasticPot Countries - Top 10", - "visState": "{\"title\":\"ElasticPot Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ElasticPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "6ee70b90-8374-11e7-9adb-2955c2136c8c", - "_type": "visualization", - "_source": { - "title": "Honeytrap Events Bar", - "visState": "{\"title\":\"Honeytrap Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Honeytrap\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Honeytrap\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Honeytrap-Map", - "_type": "visualization", - "_source": { - "title": "Honeytrap Attack Map", - "visState": "{\"title\":\"Honeytrap Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Glastopf-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "Glastopf ASN - Top 10", - "visState": "{\"title\":\"Glastopf ASN - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Glastopf-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Glastop-Source-IP-Top-10", - "_type": "visualization", - "_source": { - "title": "Glastopf Source IP - Top 10", - "visState": "{\"title\":\"Glastopf Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Glastopf-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Glastopf-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "Glastopf Countries - Top 10", - "visState": "{\"title\":\"Glastopf Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Glastopf-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Honeytrap-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "Honeytrap AS/N - Top 10", - "visState": "{\"title\":\"Honeytrap AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Honeytrap-Source-IP-Top-10", - "_type": "visualization", - "_source": { - "title": "Honeytrap Source IP - Top 10", - "visState": "{\"title\":\"Honeytrap Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "576a3cb0-82ae-11e7-bcbe-2b6958a9c888", - "_type": "visualization", - "_source": { - "title": "Honeytrap Source IP Reputation", - "visState": "{\n \"title\": \"Honeytrap Source IP Reputation\",\n \"type\": \"pie\",\n \"params\": {\n \"addLegend\": true,\n \"addTooltip\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\",\n \"shareYAxis\": true\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"ip_rep.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "762f66c0-7e9e-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot Events Histogram", - "visState": "{\"title\":\"Honeypot Events Histogram\",\"type\":\"line\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "NGINX Events Histogram", - "visState": "{\"title\":\"NGINX Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "51ca6ee0-80d5-11e7-ab37-eb92b1bfb573", - "_type": "visualization", - "_source": { - "title": "NGINX Events Bar", - "visState": "{\"title\":\"NGINX Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"NGINX\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"NGINX\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-Username-Tagcloud", - "_type": "visualization", - "_source": { - "title": "NGINX Username Tagcloud", - "visState": "{\"title\":\"NGINX Username Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"linear\",\"orientations\":1,\"fromDegree\":0,\"toDegree\":0,\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":500,\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"single\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"remote_user.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "NGINX Countries - Top 10", - "visState": "{\"title\":\"NGINX Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "Cowrie Events Histogram", - "visState": "{\"title\":\"Cowrie Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "Dionaea Events Histogram", - "visState": "{\"title\":\"Dionaea Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ConPot-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "ConPot Events Histogram", - "visState": "{\"title\":\"ConPot Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "62fde9a0-858d-11e7-a686-392ac617767d", - "_type": "visualization", - "_source": { - "title": "ConPot Events Bar", - "visState": "{\"title\":\"ConPot Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"ConPot\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ConPot\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ffb284f0-80cd-11e7-ab37-eb92b1bfb573", - "_type": "visualization", - "_source": { - "title": "ConPot Source IP Reputation", - "visState": "{\n \"title\": \"ConPot Source IP Reputation\",\n \"type\": \"pie\",\n \"params\": {\n \"addLegend\": true,\n \"addTooltip\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\",\n \"shareYAxis\": true\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"ip_rep.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "ElasticPot-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "ElasticPot Events Histogram", - "visState": "{\"title\":\"ElasticPot Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ElasticPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Glastopf-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "Glastopf Events Histogram", - "visState": "{\"title\":\"Glastopf Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\",\"interpolate\":\"linear\",\"lineWidth\":2},{\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Glastopf-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "4e2887d0-8379-11e7-97dc-15d31af3c77f", - "_type": "visualization", - "_source": { - "title": "Honeytrap Heatmap", - "visState": "{\"title\":\"Honeytrap Heatmap\",\"type\":\"heatmap\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"times\":[],\"colorsNumber\":10,\"colorSchema\":\"Yellow to Red\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"square root\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"color\":\"#555\"}}]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Destination Port\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(255,255,204)\",\"100 - 200\":\"rgb(255,241,170)\",\"200 - 300\":\"rgb(254,225,135)\",\"300 - 400\":\"rgb(254,201,101)\",\"400 - 500\":\"rgb(254,171,73)\",\"500 - 600\":\"rgb(253,141,60)\",\"600 - 700\":\"rgb(252,91,46)\",\"700 - 800\":\"rgb(237,47,34)\",\"800 - 900\":\"rgb(212,16,32)\",\"900 - 1000\":\"rgb(176,0,38)\"}},\"spy\":{\"mode\":{\"name\":null,\"fill\":false}}}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Honeytrap-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "Honeytrap Events Histogram", - "visState": "{\"title\":\"Honeytrap Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"2\",\"label\":\"Unique Source IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "87428ba0-7e9d-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot Events Bar", - "visState": "{\"title\":\"Honeypot Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100,\"rotate\":0,\"filter\":false},\"title\":{\"text\":\"Honeypots\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":10,\"order\":\"asc\",\"orderBy\":\"_term\",\"customLabel\":\"Honeypots\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "59509e90-8590-11e7-a686-392ac617767d", - "_type": "visualization", - "_source": { - "title": "Glastopf Source IP Reputation", - "visState": "{\n \"aggs\": [\n {\n \"enabled\": true,\n \"id\": \"1\",\n \"params\": {},\n \"schema\": \"metric\",\n \"type\": \"count\"\n },\n {\n \"enabled\": true,\n \"id\": \"2\",\n \"params\": {\n \"field\": \"ip_rep.keyword\",\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"size\": 10\n },\n \"schema\": \"segment\",\n \"type\": \"terms\"\n }\n ],\n \"listeners\": {},\n \"params\": {\n \"addLegend\": true,\n \"addTooltip\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\"\n },\n \"title\": \"Glastopf Source IP Reputation\",\n \"type\": \"pie\"\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Glastopf-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "7b61a6a0-7ebf-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot Destination Ports Histogram", - "visState": "{\"title\":\"Honeypot Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"spy\":{\"mode\":{\"name\":null,\"fill\":false}}}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "885928c0-7ebe-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot Events by Country Histogram", - "visState": "{\"title\":\"Honeypot Events by Country Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ef227eb0-7e9d-11e7-a286-9f03beba6417", - "_type": "visualization", - "_source": { - "title": "Honeypot Events by Type Histogram", - "visState": "{\"title\":\"Honeypot Events by Type Histogram\",\"type\":\"line\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeypot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "e624bc50-7dd6-11e7-bee2-c98307c16efa", - "_type": "visualization", - "_source": { - "title": "Suricata Alert Category Histogram", - "visState": "{\"title\":\"Suricata Alert Category Histogram\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"alert.category.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-Alert-Signature-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata Alert Signature - Top 10", - "visState": "{\"title\":\"Suricata Alert Signature - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"alert.signature_id\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ID\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"alert.signature.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Description\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Username-Tagcloud", - "_type": "visualization", - "_source": { - "title": "Cowrie Username Tagcloud", - "visState": "{\"title\":\"Cowrie Username Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"linear\",\"orientations\":1,\"fromDegree\":\"0\",\"toDegree\":\"0\",\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":\"500\",\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"single\",\"hideLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"username.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "1a097850-7c22-11e7-aa1e-6bf93670d67b", - "_type": "visualization", - "_source": { - "title": "Suricata CVE - Top 10", - "visState": "{\"title\":\"Suricata CVE - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"alert.cve_id.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"CVE ID\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Password-Tagcloud", - "_type": "visualization", - "_source": { - "title": "Cowrie Password Tagcloud", - "visState": "{\"title\":\"Cowrie Password Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"linear\",\"orientations\":1,\"fromDegree\":\"0\",\"toDegree\":\"0\",\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":\"500\",\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"single\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"password.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "P0f-OS-Top-10", - "_type": "visualization", - "_source": { - "title": "P0f OS Distribution", - "visState": "{\"title\":\"P0f OS Distribution\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"os.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "P0f-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "f28b8c60-80e4-11e7-ba6f-4542711dd148", - "_type": "visualization", - "_source": { - "title": "Cowrie Destination Ports Histogram Incoming", - "visState": "{\"title\":\"Cowrie Destination Ports Histogram Incoming\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"filters\",\"schema\":\"group\",\"params\":{\"filters\":[{\"input\":{\"query\":{\"query_string\":{\"query\":\"dest_port:2222\",\"analyze_wildcard\":true}}},\"label\":\"SSH\"},{\"input\":{\"query\":{\"query_string\":{\"query\":\"dest_port:2223\",\"analyze_wildcard\":true}}},\"label\":\"Telnet\"}]}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "7e33e3d0-810c-11e7-8413-9fe5e30ade77", - "_type": "visualization", - "_source": { - "title": "Dionaea Destination Ports Histogram", - "visState": "{\"title\":\"Dionaea Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Source-IP-Top-10", - "_type": "visualization", - "_source": { - "title": "Dionaea Source IP - Top 10", - "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"CNT\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Source IP\",\"field\":\"src_ip.keyword\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":10},\"schema\":\"bucket\",\"type\":\"terms\"}],\"listeners\":{},\"params\":{\"perPage\":10,\"showMeticsAtAllLevels\":false,\"showPartialRows\":false,\"showTotal\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"totalFunc\":\"sum\"},\"title\":\"Dionaea Source IP - Top 10\",\"type\":\"table\"}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ec53e470-8376-11e7-9adb-2955c2136c8c", - "_type": "visualization", - "_source": { - "title": "Honeytrap Destination Ports Histogram", - "visState": "{\"title\":\"Honeytrap Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "7dcaa2b0-8596-11e7-a686-392ac617767d", - "_type": "visualization", - "_source": { - "title": "NGINX Top Users Histogram", - "visState": "{\"title\":\"NGINX Top Users Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"remote_user.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Honeytrap-Destination-Ports-Top-10", - "_type": "visualization", - "_source": { - "title": "Honeytrap Destination Ports - Top 10", - "visState": "{\"title\":\"Honeytrap Destination Ports - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"dest_port\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-HTTP-Method-Pie-Top-10", - "_type": "visualization", - "_source": { - "title": "NGINX HTTP Method Pie - Top 10", - "visState": "{\"title\":\"NGINX HTTP Method Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"request_method.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Honeytrap-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "Honeytrap Countries - Top 10", - "visState": "{\"title\":\"Honeytrap Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-Map", - "_type": "visualization", - "_source": { - "title": "Suricata Attack Map", - "visState": "{\"title\":\"Suricata Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":[0,-0.17578125],\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-Map", - "_type": "visualization", - "_source": { - "title": "NGINX Attack Map", - "visState": "{\"title\":\"NGINX Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-Source-IP-Top-10", - "_type": "visualization", - "_source": { - "title": "NGINX Source IP - Top 10", - "visState": "{\"title\":\"NGINX Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-HTTP-User-Agent-Pie-Top-10", - "_type": "visualization", - "_source": { - "title": "NGINX HTTP User Agent Pie - Top 10", - "visState": "{\"title\":\"NGINX HTTP User Agent Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"http_user_agent.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-HTTP-Status-Code-Pie-Top-10", - "_type": "visualization", - "_source": { - "title": "NGINX HTTP Status Code Pie - Top 10", - "visState": "{\"title\":\"NGINX HTTP Status Code Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"status.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "0e230290-859b-11e7-8f60-4f4666b0a88e", - "_type": "visualization", - "_source": { - "title": "Suricata Destination Ports Histogram", - "visState": "{\"title\":\"Suricata Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "bf6f6000-8598-11e7-8f60-4f4666b0a88e", - "_type": "visualization", - "_source": { - "title": "Suricata Events Bar", - "visState": "{\"title\":\"Suricata Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Suricata\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Suricata\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-Source-IP-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata Source IP - Top 10", - "visState": "{\"title\":\"Suricata Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "b1a7f8d0-859b-11e7-8f60-4f4666b0a88e", - "_type": "visualization", - "_source": { - "title": "Suricata Source IP Reputation", - "visState": "{\n \"title\": \"Suricata Source IP Reputation\",\n \"type\": \"pie\",\n \"params\": {\n \"addLegend\": true,\n \"addTooltip\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\",\n \"shareYAxis\": true\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"ip_rep.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "Suricata-SSH-Client-Software-Version-Pie-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata SSH Client Software Version Pie - Top 10", - "visState": "{\"title\":\"Suricata SSH Client Software Version Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ssh.client.software_version.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-HTTP-User-Agent-Pie-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata HTTP User Agent Pie - Top 10", - "visState": "{\"title\":\"Suricata HTTP User Agent Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"http.http_user_agent.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-HTTP-Content-Type-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata HTTP Content Type - Top 10", - "visState": "{\"title\":\"Suricata HTTP Content Type - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"http.http_content_type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-HTTP-Hostname-Pie-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata HTTP Hostname Pie - Top 10", - "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"field\":\"http.hostname.keyword\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"listeners\":{},\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true},\"title\":\"Suricata HTTP Hostname Pie - Top 10\",\"type\":\"pie\"}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-HTTP-Method-Pie-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata HTTP Method Pie - Top 10", - "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"field\":\"http.http_method.keyword\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"listeners\":{},\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true},\"title\":\"Suricata HTTP Method Pie - Top 10\",\"type\":\"pie\"}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-Fileinfo-Magic-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata Fileinfo Magic - Top 10", - "visState": "{\"title\":\"Suricata Fileinfo Magic - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"fileinfo.magic.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata Countries - Top 10", - "visState": "{\"title\":\"Suricata Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Syslog-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "Syslog Events Histogram", - "visState": "{\"title\":\"Syslog Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"program.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "29117a00-85dc-11e7-916b-fb4cebb78112", - "_type": "visualization", - "_source": { - "title": "Syslog Events Bar", - "visState": "{\"title\":\"Syslog Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Syslog\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Syslog\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Syslog-Map", - "_type": "visualization", - "_source": { - "title": "Syslog Attack Map", - "visState": "{\"title\":\"Syslog Attack Map\",\"type\":\"tile_map\",\"params\":{\"addTooltip\":true,\"heatBlur\":15,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatNormalizeData\":true,\"heatRadius\":25,\"isDesaturated\":false,\"mapType\":\"Shaded Circle Markers\",\"wms\":{\"enabled\":false,\"options\":{\"attribution\":\"Maps provided by USGS\",\"format\":\"image/png\",\"layers\":\"0\",\"styles\":\"\",\"transparent\":true,\"version\":\"1.3.0\"},\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\"},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Syslog-Username-Tagcloud", - "_type": "visualization", - "_source": { - "title": "Syslog Username Tagcloud", - "visState": "{\"title\":\"Syslog Username Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"fromDegree\":0,\"maxFontSize\":64,\"minFontSize\":16,\"orientations\":1,\"spiral\":\"archimedean\",\"textScale\":\"linear\",\"timeInterval\":500,\"toDegree\":0,\"scale\":\"linear\",\"orientation\":\"single\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"username.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Syslog-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "Syslog Countries - Top 10", - "visState": "{\"title\":\"Syslog Countries - Top 10\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"shareYAxis\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Syslog-Program-Top-10", - "_type": "visualization", - "_source": { - "title": "Syslog Program - Top 10", - "visState": "{\"title\":\"Syslog Program - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"program.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "eMobility-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "eMobility Events Histogram", - "visState": "{\"title\":\"eMobility Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\",\"interpolate\":\"linear\",\"lineWidth\":2},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", - "description": "", - "savedSearchId": "eMobility-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Syslog-SSH-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "Syslog SSH Events Histogram", - "visState": "{\"title\":\"Syslog SSH Events Histogram\",\"type\":\"histogram\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"legendPosition\":\"right\",\"mode\":\"stacked\",\"scale\":\"linear\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"mode\":\"stacked\",\"show\":\"true\",\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"tags.keyword\",\"exclude\":\"_geoip_lookup_failure\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "595d6170-85e0-11e7-916b-fb4cebb78112", - "_type": "visualization", - "_source": { - "title": "eMobility Events Bar", - "visState": "{\n \"title\": \"eMobility Events Bar\",\n \"type\": \"histogram\",\n \"params\": {\n \"grid\": {\n \"categoryLines\": false,\n \"style\": {\n \"color\": \"#eee\"\n }\n },\n \"categoryAxes\": [\n {\n \"id\": \"CategoryAxis-1\",\n \"type\": \"category\",\n \"position\": \"left\",\n \"show\": true,\n \"style\": {},\n \"scale\": {\n \"type\": \"linear\"\n },\n \"labels\": {\n \"show\": false,\n \"rotate\": 90,\n \"filter\": false,\n \"truncate\": 200\n },\n \"title\": {\n \"text\": \"ConPot\"\n }\n }\n ],\n \"valueAxes\": [\n {\n \"id\": \"ValueAxis-1\",\n \"name\": \"BottomAxis-1\",\n \"type\": \"value\",\n \"position\": \"bottom\",\n \"show\": true,\n \"style\": {},\n \"scale\": {\n \"type\": \"square root\",\n \"mode\": \"normal\"\n },\n \"labels\": {\n \"show\": true,\n \"rotate\": 0,\n \"filter\": true,\n \"truncate\": 100\n },\n \"title\": {\n \"text\": \"\"\n }\n }\n ],\n \"seriesParams\": [\n {\n \"show\": true,\n \"type\": \"histogram\",\n \"mode\": \"normal\",\n \"data\": {\n \"label\": \"Events\",\n \"id\": \"1\"\n },\n \"valueAxis\": \"ValueAxis-1\",\n \"drawLinesBetweenPoints\": true,\n \"showCircles\": true\n },\n {\n \"show\": true,\n \"mode\": \"normal\",\n \"type\": \"histogram\",\n \"drawLinesBetweenPoints\": true,\n \"showCircles\": true,\n \"interpolate\": \"linear\",\n \"lineWidth\": 2,\n \"data\": {\n \"id\": \"3\",\n \"label\": \"Unique Source IPs\"\n },\n \"valueAxis\": \"ValueAxis-1\"\n }\n ],\n \"addTooltip\": true,\n \"addLegend\": true,\n \"legendPosition\": \"right\",\n \"times\": [],\n \"addTimeMarker\": false\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Events\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"type.keyword\",\n \"size\": 5,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"ConPot\"\n }\n },\n {\n \"id\": \"3\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Source IPs\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "eMobility-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "eMobility-Map", - "_type": "visualization", - "_source": { - "title": "eMobility Attack Map", - "visState": "{\"title\":\"eMobility Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":false,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"useGeocentroid\":true,\"precision\":2}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "eMobility-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Syslog-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "Syslog AS/N - Top 10", - "visState": "{\"title\":\"Syslog AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showMeticsAtAllLevels\":false,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Syslog-Source-IP-Top-10", - "_type": "visualization", - "_source": { - "title": "Syslog Source IP - Top 10", - "visState": "{\"title\":\"Syslog Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showMeticsAtAllLevels\":false,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "eMobility-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "eMobility AS/N - Top 10", - "visState": "{\"title\":\"eMobility AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "eMobility-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "eMobility-Source-IP-Top-10", - "_type": "visualization", - "_source": { - "title": "eMobility Source IP - Top 10", - "visState": "{\"title\":\"eMobility Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "eMobility-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "c3d133e0-85e2-11e7-916b-fb4cebb78112", - "_type": "visualization", - "_source": { - "title": "eMobility Source IP Reputation", - "visState": "{\n \"title\": \"eMobility Source IP Reputation\",\n \"type\": \"pie\",\n \"params\": {\n \"addLegend\": true,\n \"addTooltip\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\",\n \"shareYAxis\": true\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"ip_rep.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "eMobility-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "cf8d0e40-80ea-11e7-a689-67e589a14a8a", - "_type": "visualization", - "_source": { - "title": "Dionaea Source IP Reputation", - "visState": "{\"title\":\"Dionaea Source IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "eMobility-Countries-Top-10", - "_type": "visualization", - "_source": { - "title": "eMobility Countries - Top 10", - "visState": "{\"title\":\"eMobility Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "eMobility-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "Suricata AS/N - Top 10", - "visState": "{\"title\":\"Suricata AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-ASN-Top-10", - "_type": "visualization", - "_source": { - "title": "NGINX AS/N - Top 10", - "visState": "{\"title\":\"NGINX AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ASN\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Input-Top-10", - "_type": "visualization", - "_source": { - "title": "Cowrie Input - Top 10", - "visState": "{\"title\":\"Cowrie Input - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"input.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Command Line Input\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "db3104f0-85e4-11e7-a042-0737cf24db6d", - "_type": "visualization", - "_source": { - "title": "Vnclowpot Attack Map", - "visState": "{\n \"title\": \"Vnclowpot Attack Map\",\n \"type\": \"tile_map\",\n \"params\": {\n \"mapType\": \"Shaded Circle Markers\",\n \"isDesaturated\": false,\n \"addTooltip\": true,\n \"heatMaxZoom\": 16,\n \"heatMinOpacity\": 0.1,\n \"heatRadius\": 25,\n \"heatBlur\": 15,\n \"heatNormalizeData\": true,\n \"wms\": {\n \"enabled\": false,\n \"url\": \"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\n \"options\": {\n \"version\": \"1.3.0\",\n \"layers\": \"0\",\n \"format\": \"image/png\",\n \"transparent\": true,\n \"attribution\": \"Maps provided by USGS\",\n \"styles\": \"\"\n }\n },\n \"legendPosition\": \"bottomright\",\n \"mapZoom\": 2,\n \"mapCenter\": [\n 0,\n 0\n ]\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"geohash_grid\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"geoip.location\",\n \"autoPrecision\": true,\n \"useGeocentroid\": true,\n \"precision\": 2\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "0e34b630-85e5-11e7-a042-0737cf24db6d", - "_type": "visualization", - "_source": { - "title": "Vnclowpot AS/N - Top 10", - "visState": "{\n \"title\": \"Vnclowpot AS/N - Top 10\",\n \"type\": \"table\",\n \"params\": {\n \"perPage\": 10,\n \"showPartialRows\": false,\n \"showMeticsAtAllLevels\": false,\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n },\n \"showTotal\": false,\n \"totalFunc\": \"sum\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"CNT\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"geoip.asn\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"AS\"\n }\n },\n {\n \"id\": \"3\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"geoip.as_org.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"ASN\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}", - "description": "", - "savedSearchId": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "bc1219b0-85e4-11e7-a042-0737cf24db6d", - "_type": "visualization", - "_source": { - "title": "Vnclowpot Events Histogram", - "visState": "{\n \"aggs\": [\n {\n \"enabled\": true,\n \"id\": \"1\",\n \"params\": {\n \"customLabel\": \"Events\"\n },\n \"schema\": \"metric\",\n \"type\": \"count\"\n },\n {\n \"enabled\": true,\n \"id\": \"3\",\n \"params\": {\n \"customLabel\": \"Unique Source IPs\",\n \"field\": \"src_ip.keyword\"\n },\n \"schema\": \"metric\",\n \"type\": \"cardinality\"\n },\n {\n \"enabled\": true,\n \"id\": \"2\",\n \"params\": {\n \"customInterval\": \"2h\",\n \"customLabel\": \"Timestamp\",\n \"extended_bounds\": {},\n \"field\": \"@timestamp\",\n \"interval\": \"auto\",\n \"min_doc_count\": 1\n },\n \"schema\": \"segment\",\n \"type\": \"date_histogram\"\n }\n ],\n \"listeners\": {},\n \"params\": {\n \"addLegend\": true,\n \"addTimeMarker\": false,\n \"addTooltip\": true,\n \"categoryAxes\": [\n {\n \"id\": \"CategoryAxis-1\",\n \"labels\": {\n \"filter\": true,\n \"rotate\": 0,\n \"show\": true,\n \"truncate\": 100\n },\n \"position\": \"bottom\",\n \"scale\": {\n \"type\": \"linear\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"Timestamp\"\n },\n \"type\": \"category\"\n }\n ],\n \"defaultYExtents\": false,\n \"drawLinesBetweenPoints\": true,\n \"grid\": {\n \"categoryLines\": false,\n \"style\": {\n \"color\": \"#eee\"\n }\n },\n \"interpolate\": \"linear\",\n \"legendPosition\": \"right\",\n \"radiusRatio\": 9,\n \"scale\": \"square root\",\n \"seriesParams\": [\n {\n \"data\": {\n \"id\": \"1\",\n \"label\": \"Events\"\n },\n \"drawLinesBetweenPoints\": true,\n \"interpolate\": \"linear\",\n \"lineWidth\": 2,\n \"mode\": \"normal\",\n \"show\": true,\n \"showCircles\": true,\n \"type\": \"line\",\n \"valueAxis\": \"ValueAxis-1\"\n },\n {\n \"data\": {\n \"id\": \"3\",\n \"label\": \"Unique Source IPs\"\n },\n \"drawLinesBetweenPoints\": true,\n \"interpolate\": \"linear\",\n \"lineWidth\": 2,\n \"mode\": \"normal\",\n \"show\": true,\n \"showCircles\": true,\n \"type\": \"line\",\n \"valueAxis\": \"ValueAxis-1\"\n }\n ],\n \"setYExtents\": false,\n \"shareYAxis\": true,\n \"showCircles\": true,\n \"smoothLines\": false,\n \"times\": [],\n \"valueAxes\": [\n {\n \"id\": \"ValueAxis-1\",\n \"labels\": {\n \"filter\": false,\n \"rotate\": 0,\n \"show\": true,\n \"truncate\": 100\n },\n \"name\": \"LeftAxis-1\",\n \"position\": \"left\",\n \"scale\": {\n \"mode\": \"normal\",\n \"type\": \"square root\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"\"\n },\n \"type\": \"value\"\n }\n ],\n \"yAxis\": {}\n },\n \"title\": \"Vnclowpot Events Histogram\",\n \"type\": \"line\"\n}", - "uiStateJSON": "{\n \"vis\": {\n \"legendOpen\": true\n }\n}", - "description": "", - "savedSearchId": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "99249a40-85e4-11e7-a042-0737cf24db6d", - "_type": "visualization", - "_source": { - "title": "Vnclowpot Events Bar", - "visState": "{\n \"title\": \"Vnclowpot Events Bar\",\n \"type\": \"histogram\",\n \"params\": {\n \"grid\": {\n \"categoryLines\": false,\n \"style\": {\n \"color\": \"#eee\"\n }\n },\n \"categoryAxes\": [\n {\n \"id\": \"CategoryAxis-1\",\n \"type\": \"category\",\n \"position\": \"left\",\n \"show\": true,\n \"style\": {},\n \"scale\": {\n \"type\": \"linear\"\n },\n \"labels\": {\n \"show\": false,\n \"rotate\": 0,\n \"filter\": false,\n \"truncate\": 200\n },\n \"title\": {\n \"text\": \"Vnclowpot\"\n }\n }\n ],\n \"valueAxes\": [\n {\n \"id\": \"ValueAxis-1\",\n \"name\": \"BottomAxis-1\",\n \"type\": \"value\",\n \"position\": \"bottom\",\n \"show\": true,\n \"style\": {},\n \"scale\": {\n \"type\": \"square root\",\n \"mode\": \"normal\"\n },\n \"labels\": {\n \"show\": true,\n \"rotate\": 0,\n \"filter\": true,\n \"truncate\": 100\n },\n \"title\": {\n \"text\": \"\"\n }\n }\n ],\n \"seriesParams\": [\n {\n \"show\": true,\n \"type\": \"histogram\",\n \"mode\": \"normal\",\n \"data\": {\n \"label\": \"Events\",\n \"id\": \"1\"\n },\n \"valueAxis\": \"ValueAxis-1\",\n \"drawLinesBetweenPoints\": true,\n \"showCircles\": true\n },\n {\n \"show\": true,\n \"mode\": \"normal\",\n \"type\": \"histogram\",\n \"drawLinesBetweenPoints\": true,\n \"showCircles\": true,\n \"interpolate\": \"linear\",\n \"lineWidth\": 2,\n \"data\": {\n \"id\": \"3\",\n \"label\": \"Unique Source IPs\"\n },\n \"valueAxis\": \"ValueAxis-1\"\n }\n ],\n \"addTooltip\": true,\n \"addLegend\": true,\n \"legendPosition\": \"right\",\n \"times\": [],\n \"addTimeMarker\": false\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Events\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"type.keyword\",\n \"size\": 5,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"Vnclowpot\"\n }\n },\n {\n \"id\": \"3\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Source IPs\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "65ba4280-85e5-11e7-a042-0737cf24db6d", - "_type": "visualization", - "_source": { - "title": "Vnclowpot Handshake - Top 10", - "visState": "{\n \"title\": \"Vnclowpot Handshake - Top 10\",\n \"type\": \"table\",\n \"params\": {\n \"perPage\": 10,\n \"showPartialRows\": false,\n \"showMeticsAtAllLevels\": false,\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n },\n \"showTotal\": false,\n \"totalFunc\": \"sum\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"CNT\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"vnc_handshake.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"VNC Handshake\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}", - "description": "", - "savedSearchId": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "19865b10-85e5-11e7-a042-0737cf24db6d", - "_type": "visualization", - "_source": { - "title": "Vnclowpot Source IP - Top 10", - "visState": "{\n \"title\": \"Vnclowpot Source IP - Top 10\",\n \"type\": \"table\",\n \"params\": {\n \"perPage\": 10,\n \"showPartialRows\": false,\n \"showMeticsAtAllLevels\": false,\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n },\n \"showTotal\": false,\n \"totalFunc\": \"sum\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"CNT\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"Source IP\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}", - "description": "", - "savedSearchId": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "ea4752f0-85e4-11e7-a042-0737cf24db6d", - "_type": "visualization", - "_source": { - "title": "Vnclowpot Countries - Top 10", - "visState": "{\n \"title\": \"Vnclowpot Countries - Top 10\",\n \"type\": \"pie\",\n \"params\": {\n \"shareYAxis\": true,\n \"addTooltip\": true,\n \"addLegend\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"geoip.country_name.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "007e9470-85e5-11e7-a042-0737cf24db6d", - "_type": "visualization", - "_source": { - "title": "Vnclowpot Source IP Reputation", - "visState": "{\n \"title\": \"Vnclowpot Source IP Reputation\",\n \"type\": \"pie\",\n \"params\": {\n \"addLegend\": true,\n \"addTooltip\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\",\n \"shareYAxis\": true\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"ip_rep.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "ElasticPot-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "ElasticPot Events by Country Histogram", - "visState": "{\"title\":\"ElasticPot Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ElasticPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Glastopf-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "Glastopf Events by Country Histogram", - "visState": "{\"title\":\"Glastopf Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Glastopf-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ConPot-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "ConPot Events by Country Histogram", - "visState": "{\"title\":\"ConPot Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "ConPot-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Dionaea-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "Dionaea Events by Country Histogram", - "visState": "{\"title\":\"Dionaea Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Dionaea-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Cowrie-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "Cowrie Events by Country Histogram", - "visState": "{\"title\":\"Cowrie Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\",\"interpolate\":\"linear\",\"lineWidth\":2}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Cowrie-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Honeytrap-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "Honeytrap Events by Country Histogram", - "visState": "{\"title\":\"Honeytrap Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Honeytrap-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "Suricata Events by Country Histogram", - "visState": "{\"title\":\"Suricata Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Syslog-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "Syslog Events by Country Histogram", - "visState": "{\"title\":\"Syslog Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Syslog-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "NGINX-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "NGINX Events by Country Histogram", - "visState": "{\"title\":\"NGINX Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "NGINX-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "cda24150-85e4-11e7-a042-0737cf24db6d", - "_type": "visualization", - "_source": { - "title": "Vnclowpot Events by Country Histogram", - "visState": "{\"title\":\"Vnclowpot Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\",\"interpolate\":\"linear\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "f9db98a0-85e6-11e7-9ef1-352f01cf0e9e", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "eMobility-Events-by-Country-Histogram", - "_type": "visualization", - "_source": { - "title": "eMobility Events by Country Histogram", - "visState": "{\"title\":\"eMobility Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "eMobility-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "Suricata-Events-Histogram", - "_type": "visualization", - "_source": { - "title": "Suricata Events Histogram", - "visState": "{\"title\":\"Suricata Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "Suricata-Logs", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "da489b20-8b52-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy Events by Country Histogram", - "visState": "{\n \"aggs\": [\n {\n \"enabled\": true,\n \"id\": \"1\",\n \"params\": {\n \"customLabel\": \"Events\"\n },\n \"schema\": \"metric\",\n \"type\": \"count\"\n },\n {\n \"enabled\": true,\n \"id\": \"3\",\n \"params\": {\n \"field\": \"geoip.country_name.keyword\",\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"size\": 5\n },\n \"schema\": \"group\",\n \"type\": \"terms\"\n },\n {\n \"enabled\": true,\n \"id\": \"2\",\n \"params\": {\n \"customInterval\": \"2h\",\n \"customLabel\": \"Timestamp\",\n \"extended_bounds\": {},\n \"field\": \"@timestamp\",\n \"interval\": \"auto\",\n \"min_doc_count\": 1\n },\n \"schema\": \"segment\",\n \"type\": \"date_histogram\"\n }\n ],\n \"listeners\": {},\n \"params\": {\n \"addLegend\": true,\n \"addTimeMarker\": false,\n \"addTooltip\": true,\n \"categoryAxes\": [\n {\n \"id\": \"CategoryAxis-1\",\n \"labels\": {\n \"filter\": true,\n \"show\": true,\n \"truncate\": 100\n },\n \"position\": \"bottom\",\n \"scale\": {\n \"type\": \"linear\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"Timestamp\"\n },\n \"type\": \"category\"\n }\n ],\n \"defaultYExtents\": false,\n \"drawLinesBetweenPoints\": true,\n \"grid\": {\n \"categoryLines\": false,\n \"style\": {\n \"color\": \"#eee\"\n }\n },\n \"interpolate\": \"linear\",\n \"legendPosition\": \"right\",\n \"radiusRatio\": 9,\n \"scale\": \"square root\",\n \"seriesParams\": [\n {\n \"data\": {\n \"id\": \"1\",\n \"label\": \"Events\"\n },\n \"drawLinesBetweenPoints\": true,\n \"interpolate\": \"linear\",\n \"mode\": \"normal\",\n \"show\": \"true\",\n \"showCircles\": true,\n \"type\": \"area\",\n \"valueAxis\": \"ValueAxis-1\"\n }\n ],\n \"setYExtents\": false,\n \"shareYAxis\": true,\n \"showCircles\": true,\n \"smoothLines\": false,\n \"times\": [],\n \"valueAxes\": [\n {\n \"id\": \"ValueAxis-1\",\n \"labels\": {\n \"filter\": false,\n \"rotate\": 0,\n \"show\": true,\n \"truncate\": 100\n },\n \"name\": \"LeftAxis-1\",\n \"position\": \"left\",\n \"scale\": {\n \"mode\": \"normal\",\n \"type\": \"square root\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"\"\n },\n \"type\": \"value\"\n }\n ],\n \"yAxis\": {}\n },\n \"title\": \"Rdpy Events by Country Histogram\",\n \"type\": \"area\"\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "0de24040-8b52-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy Events Bar", - "visState": "{\n \"title\": \"Rdpy Events Bar\",\n \"type\": \"histogram\",\n \"params\": {\n \"grid\": {\n \"categoryLines\": false,\n \"style\": {\n \"color\": \"#eee\"\n }\n },\n \"categoryAxes\": [\n {\n \"id\": \"CategoryAxis-1\",\n \"type\": \"category\",\n \"position\": \"left\",\n \"show\": true,\n \"style\": {},\n \"scale\": {\n \"type\": \"linear\"\n },\n \"labels\": {\n \"show\": false,\n \"rotate\": 0,\n \"filter\": false,\n \"truncate\": 200\n },\n \"title\": {\n \"text\": \"Rdpy\"\n }\n }\n ],\n \"valueAxes\": [\n {\n \"id\": \"ValueAxis-1\",\n \"name\": \"BottomAxis-1\",\n \"type\": \"value\",\n \"position\": \"bottom\",\n \"show\": true,\n \"style\": {},\n \"scale\": {\n \"type\": \"square root\",\n \"mode\": \"normal\"\n },\n \"labels\": {\n \"show\": true,\n \"rotate\": 0,\n \"filter\": true,\n \"truncate\": 100\n },\n \"title\": {\n \"text\": \"\"\n }\n }\n ],\n \"seriesParams\": [\n {\n \"show\": true,\n \"type\": \"histogram\",\n \"mode\": \"normal\",\n \"data\": {\n \"label\": \"Events\",\n \"id\": \"1\"\n },\n \"valueAxis\": \"ValueAxis-1\",\n \"drawLinesBetweenPoints\": true,\n \"showCircles\": true\n },\n {\n \"show\": true,\n \"mode\": \"normal\",\n \"type\": \"histogram\",\n \"drawLinesBetweenPoints\": true,\n \"showCircles\": true,\n \"interpolate\": \"linear\",\n \"lineWidth\": 2,\n \"data\": {\n \"id\": \"3\",\n \"label\": \"Unique Source IPs\"\n },\n \"valueAxis\": \"ValueAxis-1\"\n }\n ],\n \"addTooltip\": true,\n \"addLegend\": true,\n \"legendPosition\": \"right\",\n \"times\": [],\n \"addTimeMarker\": false\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Events\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"type.keyword\",\n \"size\": 5,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"Rdpy\"\n }\n },\n {\n \"id\": \"3\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Source IPs\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "e4b7cf40-8b52-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy Attack Map", - "visState": "{\n \"title\": \"Rdpy Attack Map\",\n \"type\": \"tile_map\",\n \"params\": {\n \"mapType\": \"Shaded Circle Markers\",\n \"isDesaturated\": false,\n \"addTooltip\": true,\n \"heatMaxZoom\": 16,\n \"heatMinOpacity\": 0.1,\n \"heatRadius\": 25,\n \"heatBlur\": 15,\n \"heatNormalizeData\": true,\n \"wms\": {\n \"enabled\": false,\n \"url\": \"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\n \"options\": {\n \"version\": \"1.3.0\",\n \"layers\": \"0\",\n \"format\": \"image/png\",\n \"transparent\": true,\n \"attribution\": \"Maps provided by USGS\",\n \"styles\": \"\"\n }\n },\n \"legendPosition\": \"bottomright\",\n \"mapZoom\": 2,\n \"mapCenter\": [\n 0,\n 0\n ]\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"geohash_grid\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"geoip.location\",\n \"autoPrecision\": true,\n \"useGeocentroid\": true,\n \"precision\": 2\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "73364660-8b54-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy AS/N - Top 10", - "visState": "{\n \"title\": \"Rdpy AS/N - Top 10\",\n \"type\": \"table\",\n \"params\": {\n \"perPage\": 10,\n \"showPartialRows\": false,\n \"showMeticsAtAllLevels\": false,\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n },\n \"showTotal\": false,\n \"totalFunc\": \"sum\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"CNT\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"geoip.asn\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"AS\"\n }\n },\n {\n \"id\": \"3\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"geoip.as_org.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"ASN\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "51c331f0-8b54-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy Countries - Top 10", - "visState": "{\n \"title\": \"Rdpy Countries - Top 10\",\n \"type\": \"pie\",\n \"params\": {\n \"shareYAxis\": true,\n \"addTooltip\": true,\n \"addLegend\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"geoip.country_name.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "c90f1f00-8b52-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy Events Histogram", - "visState": "{\n \"aggs\": [\n {\n \"enabled\": true,\n \"id\": \"1\",\n \"params\": {\n \"customLabel\": \"Events\"\n },\n \"schema\": \"metric\",\n \"type\": \"count\"\n },\n {\n \"enabled\": true,\n \"id\": \"3\",\n \"params\": {\n \"customLabel\": \"Unique Source IPs\",\n \"field\": \"src_ip.keyword\"\n },\n \"schema\": \"metric\",\n \"type\": \"cardinality\"\n },\n {\n \"enabled\": true,\n \"id\": \"2\",\n \"params\": {\n \"customInterval\": \"2h\",\n \"customLabel\": \"Timestamp\",\n \"extended_bounds\": {},\n \"field\": \"@timestamp\",\n \"interval\": \"auto\",\n \"min_doc_count\": 1\n },\n \"schema\": \"segment\",\n \"type\": \"date_histogram\"\n }\n ],\n \"listeners\": {},\n \"params\": {\n \"addLegend\": true,\n \"addTimeMarker\": false,\n \"addTooltip\": true,\n \"categoryAxes\": [\n {\n \"id\": \"CategoryAxis-1\",\n \"labels\": {\n \"filter\": true,\n \"rotate\": 0,\n \"show\": true,\n \"truncate\": 100\n },\n \"position\": \"bottom\",\n \"scale\": {\n \"type\": \"linear\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"Timestamp\"\n },\n \"type\": \"category\"\n }\n ],\n \"defaultYExtents\": false,\n \"drawLinesBetweenPoints\": true,\n \"grid\": {\n \"categoryLines\": false,\n \"style\": {\n \"color\": \"#eee\"\n }\n },\n \"interpolate\": \"linear\",\n \"legendPosition\": \"right\",\n \"radiusRatio\": 9,\n \"scale\": \"square root\",\n \"seriesParams\": [\n {\n \"data\": {\n \"id\": \"1\",\n \"label\": \"Events\"\n },\n \"drawLinesBetweenPoints\": true,\n \"interpolate\": \"linear\",\n \"lineWidth\": 2,\n \"mode\": \"normal\",\n \"show\": true,\n \"showCircles\": true,\n \"type\": \"line\",\n \"valueAxis\": \"ValueAxis-1\"\n },\n {\n \"data\": {\n \"id\": \"3\",\n \"label\": \"Unique Source IPs\"\n },\n \"drawLinesBetweenPoints\": true,\n \"interpolate\": \"linear\",\n \"lineWidth\": 2,\n \"mode\": \"normal\",\n \"show\": true,\n \"showCircles\": true,\n \"type\": \"line\",\n \"valueAxis\": \"ValueAxis-1\"\n }\n ],\n \"setYExtents\": false,\n \"shareYAxis\": true,\n \"showCircles\": true,\n \"smoothLines\": false,\n \"times\": [],\n \"valueAxes\": [\n {\n \"id\": \"ValueAxis-1\",\n \"labels\": {\n \"filter\": false,\n \"rotate\": 0,\n \"show\": true,\n \"truncate\": 100\n },\n \"name\": \"LeftAxis-1\",\n \"position\": \"left\",\n \"scale\": {\n \"mode\": \"normal\",\n \"type\": \"square root\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"\"\n },\n \"type\": \"value\"\n }\n ],\n \"yAxis\": {}\n },\n \"title\": \"Rdpy Events Histogram\",\n \"type\": \"line\"\n}", - "uiStateJSON": "{\n \"vis\": {\n \"legendOpen\": true\n }\n}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "54213440-8b56-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy Username Tagcloud", - "visState": "{\n \"title\": \"Rdpy Username Tagcloud\",\n \"type\": \"tagcloud\",\n \"params\": {\n \"textScale\": \"linear\",\n \"orientations\": 1,\n \"fromDegree\": \"0\",\n \"toDegree\": \"0\",\n \"font\": \"serif\",\n \"fontStyle\": \"normal\",\n \"fontWeight\": \"normal\",\n \"timeInterval\": \"500\",\n \"spiral\": \"rectangular\",\n \"minFontSize\": 16,\n \"maxFontSize\": 64,\n \"scale\": \"linear\",\n \"orientation\": \"single\",\n \"hideLabel\": false\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"username.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "874be060-8b54-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy Source IP - Top 10", - "visState": "{\n \"title\": \"Rdpy Source IP - Top 10\",\n \"type\": \"table\",\n \"params\": {\n \"perPage\": 10,\n \"showPartialRows\": false,\n \"showMeticsAtAllLevels\": false,\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n },\n \"showTotal\": false,\n \"totalFunc\": \"sum\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"CNT\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"Source IP\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "cb2a3a00-8b56-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy Password Tagcloud", - "visState": "{\n \"title\": \"Rdpy Password Tagcloud\",\n \"type\": \"tagcloud\",\n \"params\": {\n \"textScale\": \"linear\",\n \"orientations\": 1,\n \"fromDegree\": \"0\",\n \"toDegree\": \"0\",\n \"font\": \"serif\",\n \"fontStyle\": \"normal\",\n \"fontWeight\": \"normal\",\n \"timeInterval\": \"500\",\n \"spiral\": \"rectangular\",\n \"minFontSize\": 16,\n \"maxFontSize\": 64,\n \"scale\": \"linear\",\n \"orientation\": \"single\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"password.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "051c59e0-8b53-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Rdpy Source IP Reputation", - "visState": "{\n \"title\": \"Rdpy Source IP Reputation\",\n \"type\": \"pie\",\n \"params\": {\n \"addLegend\": true,\n \"addTooltip\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\",\n \"shareYAxis\": true\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"ip_rep.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "c0916430-8b5e-11e7-ba35-0d8832ac304f", - "_type": "visualization", - "_source": { - "title": "Mailoney Attack Map", - "visState": "{\n \"title\": \"Mailoney Attack Map\",\n \"type\": \"tile_map\",\n \"params\": {\n \"mapType\": \"Shaded Circle Markers\",\n \"isDesaturated\": false,\n \"addTooltip\": true,\n \"heatMaxZoom\": 16,\n \"heatMinOpacity\": 0.1,\n \"heatRadius\": 25,\n \"heatBlur\": 15,\n \"heatNormalizeData\": true,\n \"wms\": {\n \"enabled\": false,\n \"url\": \"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\n \"options\": {\n \"version\": \"1.3.0\",\n \"layers\": \"0\",\n \"format\": \"image/png\",\n \"transparent\": true,\n \"attribution\": \"Maps provided by USGS\",\n \"styles\": \"\"\n }\n },\n \"legendPosition\": \"bottomright\",\n \"mapZoom\": 2,\n \"mapCenter\": [\n 0,\n 0\n ]\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"geohash_grid\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"geoip.location\",\n \"autoPrecision\": true,\n \"useGeocentroid\": true,\n \"precision\": 2\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "ad6dcb50-8b5e-11e7-ba35-0d8832ac304f", - "_type": "visualization", - "_source": { - "title": "Mailoney AS/N - Top 10", - "visState": "{\n \"title\": \"Mailoney AS/N - Top 10\",\n \"type\": \"table\",\n \"params\": {\n \"perPage\": 10,\n \"showPartialRows\": false,\n \"showMeticsAtAllLevels\": false,\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n },\n \"showTotal\": false,\n \"totalFunc\": \"sum\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"CNT\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"geoip.asn\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"AS\"\n }\n },\n {\n \"id\": \"3\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"geoip.as_org.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"ASN\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}", - "description": "", - "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "63672eb0-8b5f-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Mailoney Events Histogram", - "visState": "{\n \"aggs\": [\n {\n \"enabled\": true,\n \"id\": \"1\",\n \"params\": {\n \"customLabel\": \"Events\"\n },\n \"schema\": \"metric\",\n \"type\": \"count\"\n },\n {\n \"enabled\": true,\n \"id\": \"3\",\n \"params\": {\n \"customLabel\": \"Unique Source IPs\",\n \"field\": \"src_ip.keyword\"\n },\n \"schema\": \"metric\",\n \"type\": \"cardinality\"\n },\n {\n \"enabled\": true,\n \"id\": \"2\",\n \"params\": {\n \"customInterval\": \"2h\",\n \"customLabel\": \"Timestamp\",\n \"extended_bounds\": {},\n \"field\": \"@timestamp\",\n \"interval\": \"auto\",\n \"min_doc_count\": 1\n },\n \"schema\": \"segment\",\n \"type\": \"date_histogram\"\n }\n ],\n \"listeners\": {},\n \"params\": {\n \"addLegend\": true,\n \"addTimeMarker\": false,\n \"addTooltip\": true,\n \"categoryAxes\": [\n {\n \"id\": \"CategoryAxis-1\",\n \"labels\": {\n \"filter\": true,\n \"rotate\": 0,\n \"show\": true,\n \"truncate\": 100\n },\n \"position\": \"bottom\",\n \"scale\": {\n \"type\": \"linear\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"Timestamp\"\n },\n \"type\": \"category\"\n }\n ],\n \"defaultYExtents\": false,\n \"drawLinesBetweenPoints\": true,\n \"grid\": {\n \"categoryLines\": false,\n \"style\": {\n \"color\": \"#eee\"\n }\n },\n \"interpolate\": \"linear\",\n \"legendPosition\": \"right\",\n \"radiusRatio\": 9,\n \"scale\": \"square root\",\n \"seriesParams\": [\n {\n \"data\": {\n \"id\": \"1\",\n \"label\": \"Events\"\n },\n \"drawLinesBetweenPoints\": true,\n \"interpolate\": \"linear\",\n \"lineWidth\": 2,\n \"mode\": \"normal\",\n \"show\": true,\n \"showCircles\": true,\n \"type\": \"line\",\n \"valueAxis\": \"ValueAxis-1\"\n },\n {\n \"data\": {\n \"id\": \"3\",\n \"label\": \"Unique Source IPs\"\n },\n \"drawLinesBetweenPoints\": true,\n \"interpolate\": \"linear\",\n \"lineWidth\": 2,\n \"mode\": \"normal\",\n \"show\": true,\n \"showCircles\": true,\n \"type\": \"line\",\n \"valueAxis\": \"ValueAxis-1\"\n }\n ],\n \"setYExtents\": false,\n \"shareYAxis\": true,\n \"showCircles\": true,\n \"smoothLines\": false,\n \"times\": [],\n \"valueAxes\": [\n {\n \"id\": \"ValueAxis-1\",\n \"labels\": {\n \"filter\": false,\n \"rotate\": 0,\n \"show\": true,\n \"truncate\": 100\n },\n \"name\": \"LeftAxis-1\",\n \"position\": \"left\",\n \"scale\": {\n \"mode\": \"normal\",\n \"type\": \"square root\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"\"\n },\n \"type\": \"value\"\n }\n ],\n \"yAxis\": {}\n },\n \"title\": \"Mailoney Events Histogram\",\n \"type\": \"line\"\n}", - "uiStateJSON": "{\n \"vis\": {\n \"legendOpen\": true\n }\n}", - "description": "", - "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "88d899e0-8b5f-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Mailoney Events by Country Histogram", - "visState": "{\n \"aggs\": [\n {\n \"enabled\": true,\n \"id\": \"1\",\n \"params\": {\n \"customLabel\": \"Events\"\n },\n \"schema\": \"metric\",\n \"type\": \"count\"\n },\n {\n \"enabled\": true,\n \"id\": \"3\",\n \"params\": {\n \"field\": \"geoip.country_name.keyword\",\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"size\": 5\n },\n \"schema\": \"group\",\n \"type\": \"terms\"\n },\n {\n \"enabled\": true,\n \"id\": \"2\",\n \"params\": {\n \"customInterval\": \"2h\",\n \"customLabel\": \"Timestamp\",\n \"extended_bounds\": {},\n \"field\": \"@timestamp\",\n \"interval\": \"auto\",\n \"min_doc_count\": 1\n },\n \"schema\": \"segment\",\n \"type\": \"date_histogram\"\n }\n ],\n \"listeners\": {},\n \"params\": {\n \"addLegend\": true,\n \"addTimeMarker\": false,\n \"addTooltip\": true,\n \"categoryAxes\": [\n {\n \"id\": \"CategoryAxis-1\",\n \"labels\": {\n \"filter\": true,\n \"show\": true,\n \"truncate\": 100\n },\n \"position\": \"bottom\",\n \"scale\": {\n \"type\": \"linear\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"Timestamp\"\n },\n \"type\": \"category\"\n }\n ],\n \"defaultYExtents\": false,\n \"drawLinesBetweenPoints\": true,\n \"grid\": {\n \"categoryLines\": false,\n \"style\": {\n \"color\": \"#eee\"\n }\n },\n \"interpolate\": \"linear\",\n \"legendPosition\": \"right\",\n \"radiusRatio\": 9,\n \"scale\": \"square root\",\n \"seriesParams\": [\n {\n \"data\": {\n \"id\": \"1\",\n \"label\": \"Events\"\n },\n \"drawLinesBetweenPoints\": true,\n \"interpolate\": \"linear\",\n \"mode\": \"normal\",\n \"show\": \"true\",\n \"showCircles\": true,\n \"type\": \"area\",\n \"valueAxis\": \"ValueAxis-1\"\n }\n ],\n \"setYExtents\": false,\n \"shareYAxis\": true,\n \"showCircles\": true,\n \"smoothLines\": false,\n \"times\": [],\n \"valueAxes\": [\n {\n \"id\": \"ValueAxis-1\",\n \"labels\": {\n \"filter\": false,\n \"rotate\": 0,\n \"show\": true,\n \"truncate\": 100\n },\n \"name\": \"LeftAxis-1\",\n \"position\": \"left\",\n \"scale\": {\n \"mode\": \"normal\",\n \"type\": \"square root\"\n },\n \"show\": true,\n \"style\": {},\n \"title\": {\n \"text\": \"\"\n },\n \"type\": \"value\"\n }\n ],\n \"yAxis\": {}\n },\n \"title\": \"Mailoney Events by Country Histogram\",\n \"type\": \"area\"\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "5234de80-8b5f-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Mailoney Events Bar", - "visState": "{\"title\":\"Mailoney Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Mailoney\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Mailoney\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}],\"listeners\":{}}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "ba9d6280-8b5f-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Mailoney Source IP - Top 10", - "visState": "{\n \"title\": \"Mailoney Source IP - Top 10\",\n \"type\": \"table\",\n \"params\": {\n \"perPage\": 10,\n \"showPartialRows\": false,\n \"showMeticsAtAllLevels\": false,\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n },\n \"showTotal\": false,\n \"totalFunc\": \"sum\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"CNT\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"bucket\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"customLabel\": \"Source IP\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{\n \"vis\": {\n \"params\": {\n \"sort\": {\n \"columnIndex\": null,\n \"direction\": null\n }\n }\n }\n}", - "description": "", - "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "0169b450-8b62-11e7-ba35-0d8832ac304f", - "_type": "visualization", - "_source": { - "title": "Mailoney Handshake - Top 10", - "visState": "{\"title\":\"Mailoney Handshake - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"smtp_input.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"SMTP Input\"}}],\"listeners\":{}}", - "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", - "description": "", - "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\"filter\":[]}" - } - } - }, - { - "_id": "d2405e70-8b5e-11e7-ba35-0d8832ac304f", - "_type": "visualization", - "_source": { - "title": "Mailoney Countries - Top 10", - "visState": "{\n \"title\": \"Mailoney Countries - Top 10\",\n \"type\": \"pie\",\n \"params\": {\n \"shareYAxis\": true,\n \"addTooltip\": true,\n \"addLegend\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"geoip.country_name.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - }, - { - "_id": "cac48440-8b5f-11e7-b92d-d39e43e3de0f", - "_type": "visualization", - "_source": { - "title": "Mailoney Source IP Reputation", - "visState": "{\n \"title\": \"Mailoney Source IP Reputation\",\n \"type\": \"pie\",\n \"params\": {\n \"addLegend\": true,\n \"addTooltip\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\",\n \"shareYAxis\": true\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"ip_rep.keyword\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", - "uiStateJSON": "{}", - "description": "", - "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", - "version": 1, - "kibanaSavedObjectMeta": { - "searchSourceJSON": "{\n \"filter\": []\n}" - } - } - } -] \ No newline at end of file diff --git a/etc/objects/elkbase.tgz b/etc/objects/elkbase.tgz index 23a09abc0..8477beac2 100644 Binary files a/etc/objects/elkbase.tgz and b/etc/objects/elkbase.tgz differ diff --git a/etc/objects/kibana-objects.tgz b/etc/objects/kibana-objects.tgz index 2382ef87d..bf6c03271 100644 Binary files a/etc/objects/kibana-objects.tgz and b/etc/objects/kibana-objects.tgz differ diff --git a/etc/objects/kibana_export.json b/etc/objects/kibana_export.json new file mode 100644 index 000000000..d8d296a98 --- /dev/null +++ b/etc/objects/kibana_export.json @@ -0,0 +1,4573 @@ +[ + { + "_id": "29f51af0-4876-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding Protocols Histogram", + "visState": "{\"title\":\"Heralding Protocols Histogram\",\"type\":\"histogram\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"legendPosition\":\"right\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"step-after\",\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"times\":[],\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"proto.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "4e2887d0-8379-11e7-97dc-15d31af3c77f", + "_type": "visualization", + "_source": { + "title": "Honeytrap Heatmap", + "visState": "{\"title\":\"Honeytrap Heatmap\",\"type\":\"heatmap\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"times\":[],\"colorsNumber\":10,\"colorSchema\":\"Green to Red\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"square root\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"color\":\"#555\",\"overwriteColor\":false}}],\"type\":\"heatmap\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Destination Port\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 650\":\"rgb(0,104,55)\",\"650 - 1300\":\"rgb(26,151,80)\",\"1300 - 1950\":\"rgb(102,189,99)\",\"1950 - 2600\":\"rgb(166,217,106)\",\"2600 - 3250\":\"rgb(217,239,139)\",\"3250 - 3900\":\"rgb(255,255,190)\",\"3900 - 4550\":\"rgb(254,224,139)\",\"4550 - 5200\":\"rgb(253,174,97)\",\"5200 - 5850\":\"rgb(244,109,67)\",\"5850 - 6500\":\"rgb(214,47,39)\"}},\"spy\":{\"mode\":{\"name\":null,\"fill\":false}}}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "54213440-8b56-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy Username Tagcloud", + "visState": "{\"title\":\"Rdpy Username Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"linear\",\"orientations\":1,\"fromDegree\":\"0\",\"toDegree\":\"0\",\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":\"500\",\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"single\",\"hideLabel\":false,\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"username.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "7c5959b0-4889-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding Password Tagcloud", + "visState": "{\"title\":\"Heralding Password Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"scale\":\"linear\",\"orientation\":\"single\",\"minFontSize\":16,\"maxFontSize\":64,\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"password.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "656df650-6357-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner HTTP Encoding Pie - Top 10", + "visState": "{\"title\":\"Tanner HTTP Encoding Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"headers.accept-encoding.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "7dcaa2b0-8596-11e7-a686-392ac617767d", + "_type": "visualization", + "_source": { + "title": "NGINX Top Users Histogram", + "visState": "{\"title\":\"NGINX Top Users Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"remote_user.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "7e9a7d20-e858-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton Flow Direction", + "visState": "{\"title\":\"Glutton Flow Direction\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"direction.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "87cf3b50-6357-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner HTTP Language Pie - Top 10", + "visState": "{\"title\":\"Tanner HTTP Language Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"headers.accept-language.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "946dc4d0-6352-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner HTTP Method Pie - Top 10", + "visState": "{\"title\":\"Tanner HTTP Method Pie - Top 10\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"method.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "895645f0-6356-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner Detection Type Pie - Top 10", + "visState": "{\"title\":\"Tanner Detection Type Pie - Top 10\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"response_msg.response.message.detection.name.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "c1c8a3a0-6352-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner HTTP Hostname Pie - Top 10", + "visState": "{\"title\":\"Tanner HTTP Hostname Pie - Top 10\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"headers.host.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "a6ccd530-6352-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner HTTP User Agent Pie - Top 10", + "visState": "{\"title\":\"Tanner HTTP User Agent Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"headers.user-agent.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-Event-Type", + "_type": "visualization", + "_source": { + "title": "Conpot Event Type", + "visState": "{\"title\":\"Conpot Event Type\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"shareYAxis\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"event_type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-Protocol", + "_type": "visualization", + "_source": { + "title": "Conpot Protocol", + "visState": "{\"title\":\"Conpot Protocol\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"data_type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Version-Pie-Top-10", + "_type": "visualization", + "_source": { + "title": "Cowrie Version Pie - Top 10", + "visState": "{\"title\":\"Cowrie Version Pie - Top 10\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"version.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Input-Top-10", + "_type": "visualization", + "_source": { + "title": "Cowrie Input - Top 10", + "visState": "{\"title\":\"Cowrie Input - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"input.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Command Line Input\"}}],\"listeners\":{}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Protocol", + "_type": "visualization", + "_source": { + "title": "Dionaea Protocol", + "visState": "{\"title\":\"Dionaea Protocol\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"connection.protocol.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Transport", + "_type": "visualization", + "_source": { + "title": "Dionaea Transport", + "visState": "{\"title\":\"Dionaea Transport\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"connection.transport.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Type", + "_type": "visualization", + "_source": { + "title": "Dionaea Type", + "visState": "{\"title\":\"Dionaea Type\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"connection.type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "a001a350-e85b-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton Payload Hex - Top 10", + "visState": "{\"title\":\"Glutton Payload Hex - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"payload_hex.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Payload Hex\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "c80e9ff0-e866-11e8-95af-236f09a02fdb", + "_type": "visualization", + "_source": { + "title": "Glutton Msg - Top 10", + "visState": "{\"title\":\"Glutton Msg - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"msg.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Msg\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "bf6f6000-8598-11e7-8f60-4f4666b0a88e", + "_type": "visualization", + "_source": { + "title": "Suricata Events Bar", + "visState": "{\"title\":\"Suricata Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Suricata\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Suricata\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "cb2a3a00-8b56-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy Password Tagcloud", + "visState": "{\"title\":\"Rdpy Password Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"linear\",\"orientations\":1,\"fromDegree\":\"0\",\"toDegree\":\"0\",\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":\"500\",\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"single\",\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"password.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-Input-Top-10", + "_type": "visualization", + "_source": { + "title": "Conpot Input - Top 10", + "visState": "{\"title\":\"Conpot Input - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"request.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Input\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-Response-Top-10", + "_type": "visualization", + "_source": { + "title": "Conpot Response - Top 10", + "visState": "{\"title\":\"Conpot Response - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"response.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Response\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Password-Tagcloud-Large", + "_type": "visualization", + "_source": { + "title": "Cowrie Password Tagcloud", + "visState": "{\"title\":\"Cowrie Password Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"sqrt\",\"orientations\":1,\"fromDegree\":0,\"toDegree\":0,\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":500,\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"single\",\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"password.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{\"spy\":{\"mode\":{\"name\":null,\"fill\":false}}}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Username-Tagcloud-Large", + "_type": "visualization", + "_source": { + "title": "Cowrie Username Tagcloud", + "visState": "{\"title\":\"Cowrie Username Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"sqrt\",\"orientations\":1,\"fromDegree\":\"0\",\"toDegree\":\"0\",\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":\"500\",\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"single\",\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"username.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Username-Tagcloud-Large", + "_type": "visualization", + "_source": { + "title": "Dionaea Username Tagcloud", + "visState": "{\"title\":\"Dionaea Username Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"fromDegree\":0,\"maxFontSize\":64,\"minFontSize\":16,\"orientations\":1,\"spiral\":\"rectangular\",\"textScale\":\"sqrt\",\"timeInterval\":500,\"toDegree\":0,\"scale\":\"linear\",\"orientation\":\"single\",\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"username.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Password-Tagcloud-Large", + "_type": "visualization", + "_source": { + "title": "Dionaea Password Tagcloud", + "visState": "{\"title\":\"Dionaea Password Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"sqrt\",\"orientations\":1,\"fromDegree\":0,\"toDegree\":0,\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":500,\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"single\",\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"password.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e9e534d0-6356-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner URI - Top 10", + "visState": "{\"title\":\"Tanner URI - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"path.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"URI\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e624bc50-7dd6-11e7-bee2-c98307c16efa", + "_type": "visualization", + "_source": { + "title": "Suricata Alert Category Histogram", + "visState": "{\"title\":\"Suricata Alert Category Histogram\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"alert.category.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ElasticPot-Query-Top-10", + "_type": "visualization", + "_source": { + "title": "ElasticPot Query - Top 10", + "visState": "{\"title\":\"ElasticPot Query - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"honeypot.query.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Query\"}}],\"listeners\":{}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "f4444100-e858-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton Handler", + "visState": "{\"title\":\"Glutton Handler\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"handler.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-HTTP-Method-Pie-Top-10", + "_type": "visualization", + "_source": { + "title": "NGINX HTTP Method Pie - Top 10", + "visState": "{\"title\":\"NGINX HTTP Method Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"request_method.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-Countries-Top-10", + "_type": "visualization", + "_source": { + "title": "NGINX Countries - Top 10", + "visState": "{\"title\":\"NGINX Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-HTTP-Status-Code-Pie-Top-10", + "_type": "visualization", + "_source": { + "title": "NGINX HTTP Status Code Pie - Top 10", + "visState": "{\n \"title\": \"NGINX HTTP Status Code Pie - Top 10\",\n \"type\": \"pie\",\n \"params\": {\n \"shareYAxis\": true,\n \"addTooltip\": true,\n \"addLegend\": true,\n \"isDonut\": true,\n \"legendPosition\": \"right\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"status\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\"\n }\n }\n ],\n \"listeners\": {}\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-HTTP-User-Agent-Pie-Top-10", + "_type": "visualization", + "_source": { + "title": "NGINX HTTP User Agent Pie - Top 10", + "visState": "{\"title\":\"NGINX HTTP User Agent Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"http_user_agent.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-SSH-Client-Software-Version-Pie-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata SSH Client Software Version Pie - Top 10", + "visState": "{\"title\":\"Suricata SSH Client Software Version Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ssh.client.software_version.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-Source-IP-Top-10", + "_type": "visualization", + "_source": { + "title": "NGINX Source IP - Top 10", + "visState": "{\"title\":\"NGINX Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-HTTP-Hostname-Pie-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata HTTP Hostname Pie - Top 10", + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"field\":\"http.hostname.keyword\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"listeners\":{},\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true},\"title\":\"Suricata HTTP Hostname Pie - Top 10\",\"type\":\"pie\"}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-Fileinfo-Magic-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata Fileinfo Magic - Top 10", + "visState": "{\"title\":\"Suricata Fileinfo Magic - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"fileinfo.magic.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-Countries-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata Countries - Top 10", + "visState": "{\"title\":\"Suricata Countries - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-Source-IP-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata Source IP - Top 10", + "visState": "{\"title\":\"Suricata Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Source IP\"}}],\"listeners\":{}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-HTTP-Method-Pie-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata HTTP Method Pie - Top 10", + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"field\":\"http.http_method.keyword\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":10},\"schema\":\"segment\",\"type\":\"terms\"}],\"listeners\":{},\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true},\"title\":\"Suricata HTTP Method Pie - Top 10\",\"type\":\"pie\"}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "P0f-OS-Top-10", + "_type": "visualization", + "_source": { + "title": "P0f OS Distribution", + "visState": "{\"title\":\"P0f OS Distribution\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"os.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "P0f-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-HTTP-User-Agent-Pie-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata HTTP User Agent Pie - Top 10", + "visState": "{\"title\":\"Suricata HTTP User Agent Pie - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"http.http_user_agent.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-HTTP-Content-Type-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata HTTP Content Type - Top 10", + "visState": "{\"title\":\"Suricata HTTP Content Type - Top 10\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":200}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"http.http_content_type.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-Events-Histogram", + "_type": "visualization", + "_source": { + "title": "NGINX Events Histogram", + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Events\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customInterval\":\"2h\",\"customLabel\":\"Timestamp\",\"extended_bounds\":{},\"field\":\"@timestamp\",\"interval\":\"auto\",\"min_doc_count\":1},\"schema\":\"segment\",\"type\":\"date_histogram\"},{\"enabled\":true,\"id\":\"3\",\"params\":{\"customLabel\":\"Unique Src IPs\",\"field\":\"src_ip.keyword\"},\"schema\":\"metric\",\"type\":\"cardinality\"}],\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"type\":\"line\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"title\":\"NGINX Events Histogram\",\"type\":\"line\"}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-Events-by-Country-Histogram", + "_type": "visualization", + "_source": { + "title": "NGINX Events by Country Histogram", + "visState": "{\"title\":\"NGINX Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-Events-by-Country-Histogram", + "_type": "visualization", + "_source": { + "title": "Suricata Events by Country Histogram", + "visState": "{\"title\":\"Suricata Events by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Count\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-Events-Histogram", + "_type": "visualization", + "_source": { + "title": "Suricata Events Histogram", + "visState": "{\"title\":\"Suricata Events Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-Alert-Signature-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata Alert Signature - Top 10", + "visState": "{\"title\":\"Suricata Alert Signature - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"alert.signature_id\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"ID\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"alert.signature.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Description\"}}],\"listeners\":{}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-Username-Tagcloud", + "_type": "visualization", + "_source": { + "title": "NGINX Username Tagcloud", + "visState": "{\"title\":\"NGINX Username Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"textScale\":\"linear\",\"orientations\":1,\"fromDegree\":0,\"toDegree\":0,\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"timeInterval\":500,\"spiral\":\"rectangular\",\"minFontSize\":16,\"maxFontSize\":64,\"scale\":\"linear\",\"orientation\":\"single\",\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"remote_user.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "logstash-*", + "_type": "index-pattern", + "_source": { + "title": "logstash-*", + "timeFieldName": "@timestamp", + "fields": "[{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"@version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ConnectionResetError\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ConnectionResetError.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"NameError\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"NameError.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ValueError\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ValueError.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"alert.action\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"alert.action.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"alert.category\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"alert.category.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"alert.cve_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"alert.cve_id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"alert.gid\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"alert.rev\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"alert.severity\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"alert.signature\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"alert.signature.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"alert.signature_id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"app\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"app.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"app_proto\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"app_proto.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"arch\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"arch.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"attack_connection.payload.data_hex\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"attack_connection.payload.data_hex.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"attack_connection.payload.length\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"attack_connection.payload.md5_hash\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"attack_connection.payload.md5_hash.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"attack_connection.payload.sha512_hash\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"attack_connection.payload.sha512_hash.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"attack_connection.protocol\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"attack_connection.protocol.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"auth_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"auth_id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"body_bytes_sent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"body_bytes_sent.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"compCS\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"compCS.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"connection.protocol\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"connection.protocol.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"connection.transport\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"connection.transport.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"connection.type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"connection.type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cookies. cockpit\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"cookies. cockpit.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cookies. sess_uuid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"cookies. sess_uuid.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cookies.cookie\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"cookies.cookie.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cookies.path\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"cookies.path.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cookies.sess_uuid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"cookies.sess_uuid.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"data\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"data.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"data_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"data_type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"dest_ip\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"dest_ip.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"dest_port\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destfile\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"destfile.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"direction\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"direction.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"dist\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"dist.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"dns.id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"dns.rrname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"dns.rrname.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"dns.rrtype\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"dns.rrtype.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"dns.tx_id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"dns.type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"dns.type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"download_count\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"download_tries\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"duration\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.body_md5\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.body_md5.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.date\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.date.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.from\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.from.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.message_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.message_id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.received\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.received.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.reply_to\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.reply_to.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.status\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.status.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.subject\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.subject.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.subject_md5\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.subject_md5.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.to\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.to.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"email.x_mailer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"email.x_mailer.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"encCS\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"encCS.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"end_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"event_type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"eventid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"eventid.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"fileinfo.filename\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"fileinfo.filename.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"fileinfo.gaps\",\"type\":\"boolean\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"fileinfo.magic\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"fileinfo.magic.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"fileinfo.md5\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"fileinfo.md5.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"fileinfo.size\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"fileinfo.state\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"fileinfo.state.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"fileinfo.stored\",\"type\":\"boolean\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"fileinfo.tx_id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"fingerprint\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"fingerprint.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"flow_id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ftp.commands.arguments\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ftp.commands.arguments.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ftp.commands.command\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ftp.commands.command.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.as_org\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.as_org.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.asn\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.city_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.city_name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.continent_code\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.continent_code.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.country_code2\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.country_code2.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.country_code3\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.country_code3.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.country_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.country_name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.dma_code\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.latitude\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.location\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.longitude\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.postal_code\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.postal_code.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.region_code\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.region_code.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.region_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.region_name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.timezone\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"geoip.timezone.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"handle\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"handle.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"handler\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"handler.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.accept\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.accept-charset\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.accept-charset.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.accept-encoding\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.accept-encoding.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.accept-language\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.accept-language.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.accept.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.authorization\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.authorization.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.cache-control\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.cache-control.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.connection\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.connection.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.content-length\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.content-length.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.content-type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.content-type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.cookie\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.cookie.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.dnt\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.dnt.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.expires\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.expires.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.from\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.from.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.host.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.icy-metadata\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.icy-metadata.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.if\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.if-modified-since\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.if-modified-since.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.if.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.keep-alive\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.keep-alive.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.max-forwards\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.max-forwards.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.mime-version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.mime-version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.origin\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.origin.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.pragma\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.pragma.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.proxy-connection\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.proxy-connection.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.range\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.range.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.referer.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.tagid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.tagid.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.te\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.te.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.upgrade-insecure-requests\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.upgrade-insecure-requests.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.user-agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.user-agent.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.via\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.via.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.x-forwarded-for\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.x-forwarded-for.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.x-insight\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.x-insight.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.x-loop-control\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.x-loop-control.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.x-vermeer-content-type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.x-vermeer-content-type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"headers.x-via\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"headers.x-via.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"height\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"honeypot.name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"honeypot.name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"honeypot.nodeid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"honeypot.nodeid.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"honeypot.postdata\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"honeypot.postdata.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"honeypot.query\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"honeypot.query.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"honeypot.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"honeypot.raw.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"host.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"hostname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"hostname.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.accept_encoding\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.accept_encoding.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.accept_language\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.accept_language.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.authorization\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.authorization.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.from\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.from.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.hostname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.hostname.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.http_content_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.http_content_type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.http_method\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.http_method.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.http_refer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.http_refer.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.http_user_agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.http_user_agent.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.length\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.protocol\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.protocol.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.redirect\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.redirect.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.status\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.url.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.via\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.via.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.xff\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http.xff.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http_method\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http_method.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http_referrer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http_referrer.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http_uri\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http_uri.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http_user_agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"http_user_agent.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"icmp_code\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"icmp_type\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"in_iface\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"in_iface.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"input\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"input.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ip_rep\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ip_rep.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"isError\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"is_virtual\",\"type\":\"boolean\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kexAlgs\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"kexAlgs.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"key\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"key.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"keyAlgs\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"keyAlgs.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"lang\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"lang.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"langCS\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"langCS.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"level\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"level.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"link\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"link.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"login.password\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"login.password.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"login.username\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"login.username.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"macCS\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"macCS.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"messageBadHTTP/0.9requesttype(\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"messageBadHTTP/0.9requesttype(.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"method\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"method.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"mod\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"mod.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"msg\",\"type\":\"string\",\"count\":2,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"msg.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"operation_mode\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"os.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"outfile\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"outfile.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"params\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"params.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"password\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"password.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"path\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"path.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"payload_hex\",\"type\":\"string\",\"count\":2,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"payload_hex.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"payload_printable\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"payload_printable.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.-7\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.-7.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.-77\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.-77.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.0\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.0.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.0o0\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.0o0.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.1\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.1.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.123\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.123.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.123456\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.123456.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.180217\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.180217.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.1989\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.1989.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.2\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.2.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.23051831\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.23051831.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.258\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.258.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.321\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.321.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.4\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.4.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.4875\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.4875.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.5\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.5.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.520\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.520.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.5201314\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.5201314.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.905\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.905.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.92\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.92.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.a\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.a.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.aaaa\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.aaaa.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.adc\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.adc.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.admin\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.admin.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.ajax\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.ajax.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.ak10\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.ak10.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.angge\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.angge.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.aotu177\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.aotu177.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.authenticity_token\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.authenticity_token.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.aw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.aw.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.axa\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.axa.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.bbs\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.bbs.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.blog_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.blog_name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.byshanhun\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.byshanhun.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.c\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.c.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.caonma\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.caonma.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.cc123\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.cc123.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.cc1362308\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.cc1362308.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.cmd\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.cmd.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.cnm\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.cnm.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.commit\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.commit.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.conflg\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.conflg.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.daoen\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.daoen.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.diyworld\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.diyworld.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.email\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.email.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.email_confirmation\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.email_confirmation.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.erwa\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.erwa.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.eval\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.eval.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.excerpt\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.excerpt.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.f11\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.f11.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.feixiang\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.feixiang.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.firstname.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.form_build_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.form_build_id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.form_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.form_id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.fusheng\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.fusheng.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.godkey\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.godkey.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.h\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.h.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.hacker\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.hacker.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.hello\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.hello.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.hide_mail\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.hide_mail.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.hm\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.hm.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.js\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.js.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.json\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.json.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.king\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.king.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.l\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.l.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.language\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.language.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.lastname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.lastname.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.leng\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.leng.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.lindex\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.lindex.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.login\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.login.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.lz\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.lz.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.m\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.m.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.mail\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.mail.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.miao\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.miao.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.mmp\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.mmp.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.mx\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.mx.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.nidie\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.nidie.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.none\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.none.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.nuoxi\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.nuoxi.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.op\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.op.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.p1\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.p1.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.pass\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.pass.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.password\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.password.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.password_confirmation\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.password_confirmation.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.ppx\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.ppx.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.q\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.q.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.qiurong\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.qiurong.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.qw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.qw.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.qwer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.qwer.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.remember_me\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.remember_me.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.requesttoken\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.requesttoken.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.sdf\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.sdf.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.sean\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.sean.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.sha\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.sha.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.submit\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.submit.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.timezone\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.timezone-offset\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.timezone-offset.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.timezone.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.title.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.tomkey\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.tomkey.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.url.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.user\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.user.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.username\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.username.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.utf8\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.utf8.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.value\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.value.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.wanan\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.wanan.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.weixiao\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.weixiao.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.wen\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.wen.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.x\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.x.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.xiao\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.xiao.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.xiaodai\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.xiaodai.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.xiaoer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.xiaoer.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.xiaopang\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.xiaopang.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.xx\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.xx.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"post_data.zuo\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"post_data.zuo.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proto\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"proto.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"protocol\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"protocol.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proxy_connection.local_ip\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"proxy_connection.local_ip.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proxy_connection.local_port\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proxy_connection.payload.data_hex\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"proxy_connection.payload.data_hex.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proxy_connection.payload.length\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proxy_connection.payload.md5_hash\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"proxy_connection.payload.md5_hash.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proxy_connection.payload.sha512_hash\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"proxy_connection.payload.sha512_hash.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proxy_connection.protocol\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"proxy_connection.protocol.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proxy_connection.remote_ip\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"proxy_connection.remote_ip.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"proxy_connection.remote_port\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"public_ip\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"public_ip.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"query\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"query.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"raw_freq\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"raw_freq.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"raw_hits\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"raw_hits.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"raw_mtu\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"raw_mtu.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"raw_sig\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"raw_sig.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"reason\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"reason.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"remote_user\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"remote_user.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"request.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"request_method\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"request_method.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"request_time\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"request_time.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.response.message.detection.name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response_msg.response.message.detection.name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.response.message.detection.order\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.response.message.detection.payload.headers.email\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response_msg.response.message.detection.payload.headers.email.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.response.message.detection.payload.headers.value\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response_msg.response.message.detection.payload.headers.value.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.response.message.detection.payload.page\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response_msg.response.message.detection.payload.page.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.response.message.detection.payload.value\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response_msg.response.message.detection.payload.value.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.response.message.detection.type\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.response.message.detection.version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response_msg.response.message.detection.version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.response.message.sess_uuid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response_msg.response.message.sess_uuid.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response_msg.version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response_msg.version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"sensor\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"sensor.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"sensorID\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"sensorID.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"sensorid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"sensorid.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"session\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"session.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"session_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"session_id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"shasum\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"shasum.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"size\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"smtp.helo\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"smtp.helo.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"smtp.mail_from\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"smtp.mail_from.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"smtp.rcpt_to\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"smtp.rcpt_to.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"smtp_input\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"smtp_input.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"src_hostname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"src_hostname.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"src_ip\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"src_ip.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"src_port\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ssh.client.proto_version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ssh.client.proto_version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ssh.client.software_version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ssh.client.software_version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ssh.server.proto_version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ssh.server.proto_version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ssh.server.software_version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ssh.server.software_version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ssl.SSLError\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ssl.SSLError.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"start_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"status\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"stream\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"struct.error\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"struct.error.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"subject\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"subject.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"system\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"system.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"t-pot_hostname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"t-pot_hostname.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"t-pot_ip_ext\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"t-pot_ip_ext.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"t-pot_ip_int\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"t-pot_ip_int.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tags.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.fingerprint\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tls.fingerprint.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.issuerdn\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tls.issuerdn.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.notafter\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.notbefore\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.serial\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tls.serial.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.session_resumed\",\"type\":\"boolean\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.sni\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tls.sni.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.subject\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tls.subject.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tls.version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ttylog\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ttylog.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tunnel.depth\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tunnel.dest_ip\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tunnel.dest_ip.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tunnel.dest_port\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tunnel.proto\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tunnel.proto.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tunnel.src_ip\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tunnel.src_ip.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tunnel.src_port\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tx_id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"type\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"uptime\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"uptime.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"url.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"username\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"username.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"uuid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"uuid.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"v=self.send(byte_view.count\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"v=self.send(byte_view.count.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"value\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"value.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"vnc_handshake\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"vnc_handshake.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"width\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"xff\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"xff.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]", + "fieldFormatMap": "{\"src_ip\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://www.talosintelligence.com/reputation_center/lookup?search={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"dst_ip\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://www.talosintelligence.com/reputation_center/lookup?search={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"dest_port\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.speedguide.net/port.php?port={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"src_port\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.speedguide.net/port.php?port={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"proxy_connection.local_port\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.speedguide.net/port.php?port={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"proxy_connection.remote_port\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.speedguide.net/port.php?port={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"alert.signature_id\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://doc.emergingthreats.net/bin/view/Main/{{value}}\",\"labelTemplate\":\"{{value}}\"}},\"dest_ip\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://www.talosintelligence.com/reputation_center/lookup?search={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"geoip.ip\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"proxy_connection.local_ip\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"proxy_connection.remote_ip\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"geoip.country_name\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://en.wikipedia.org/w/index.php?search={{value}}&title=Special:Search&go=Go\",\"labelTemplate\":\"{{value}}\"}},\"geoip.real_region_name\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://en.wikipedia.org/w/index.php?search={{value}}&title=Special:Search&go=Go\",\"labelTemplate\":\"{{value}}\"}},\"geoip.city_name\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://en.wikipedia.org/w/index.php?search={{value}}&title=Special:Search&go=Go\",\"labelTemplate\":\"{{value}}\"}},\"geoip.number\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://mxtoolbox.com/SuperTool.aspx?action=asn%3a{{value}}&run=toolpage\",\"labelTemplate\":\"{{value}}\"}},\"status\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://httpstatuses.com/{{value}}\",\"labelTemplate\":\"{{value}}\"}},\"http.status\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://httpstatuses.com/{{value}}\",\"labelTemplate\":\"{{value}}\"}},\"dns.rrname\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"http_user_agent\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://ua.theafh.net/list.php?s={{value}}&include=yes&class=abr&do=desc\",\"labelTemplate\":\"{{value}}\"}},\"http.http_user_agent\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://ua.theafh.net/list.php?s={{value}}&include=yes&class=abr&do=desc\",\"labelTemplate\":\"{{value}}\"}},\"os\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://duckduckgo.com/?q={{value}}&t=h_&ia=web\",\"labelTemplate\":\"{{value}}\"}},\"link\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://duckduckgo.com/?q={{value}}&t=h_&ia=web\",\"labelTemplate\":\"{{value}}\"}},\"event_type\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://duckduckgo.com/?q={{value}}&t=h_&ia=web\",\"labelTemplate\":\"{{value}}\"}},\"tls.sni\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://www.ssllabs.com/ssltest/analyze.html?d={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"tls.version\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://duckduckgo.com/?q={{value}}&t=h_&ia=web\",\"labelTemplate\":\"{{value}}\"}},\"src_ip.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"http_user_agent.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://ua.theafh.net/list.php?s={{value}}&include=yes&class=abr&do=desc\",\"labelTemplate\":\"{{value}}\"}},\"geoip.country_name.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://en.wikipedia.org/w/index.php?search={{value}}&title=Special:Search&go=Go\",\"labelTemplate\":\"{{value}}\"}},\"geoip.city_name.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://en.wikipedia.org/w/index.php?search={{value}}&title=Special:Search&go=Go\",\"labelTemplate\":\"{{value}}\"}},\"status.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://httpstatuses.com/{{value}}\",\"labelTemplate\":\"{{value}}\"}},\"geoip.number.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://mxtoolbox.com/SuperTool.aspx?action=asn%3a{{value}}&run=toolpage\",\"labelTemplate\":\"{{value}}\"}},\"geoip.asn.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://duckduckgo.com/?q={{value}}&t=h_&ia=web\",\"labelTemplate\":\"{{value}}\"}},\"geoip.real_region_name.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://en.wikipedia.org/w/index.php?search={{value}}&title=Special:Search&go=Go\",\"labelTemplate\":\"{{value}}\"}},\"event_type.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://duckduckgo.com/?q={{value}}&t=h_&ia=web\",\"labelTemplate\":\"{{value}}\"}},\"dest_ip.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"proxy_connection.remote_ip.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"proxy_connection.local_ip.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"dst_ip.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"os.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://duckduckgo.com/?q={{value}}&t=h_&ia=web\",\"labelTemplate\":\"{{value}}\"}},\"link.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://duckduckgo.com/?q={{value}}&t=h_&ia=web\",\"labelTemplate\":\"{{value}}\"}},\"tls.version.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://duckduckgo.com/?q={{value}}&t=h_&ia=web\",\"labelTemplate\":\"{{value}}\"}},\"dns.rrname.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://www.senderbase.org/lookup/?search_string={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"tls.sni.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://www.ssllabs.com/ssltest/analyze.html?d={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"http.http_user_agent.raw\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"http://ua.theafh.net/list.php?s={{value}}&include=yes&class=abr&do=desc\",\"labelTemplate\":\"{{value}}\"}},\"alert.cve_id.keyword\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://www.cvedetails.com/cve/{{value}}\",\"labelTemplate\":\"{{value}}\"}},\"src_ip.keyword\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://www.talosintelligence.com/reputation_center/lookup?search={{value}}\",\"labelTemplate\":\"{{value}}\"}},\"geoip.asn\":{\"id\":\"url\",\"params\":{\"urlTemplate\":\"https://mxtoolbox.com/SuperTool.aspx?action=asn%3a{{value}}\",\"labelTemplate\":\"{{value}}\"}}}" + }, + "_meta": { + "savedObjectVersion": 2 + }, + "_migrationVersion": { + "index-pattern": "6.5.0" + } + }, + { + "_id": "NGINX", + "_type": "dashboard", + "_source": { + "title": "NGINX", + "hits": 0, + "description": "NGINX Dashboard", + "panelsJSON": "[{\"gridData\":{\"x\":0,\"y\":6,\"w\":24,\"h\":11,\"i\":\"2\"},\"id\":\"NGINX-Events-Histogram\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":12,\"y\":28,\"w\":12,\"h\":11,\"i\":\"3\"},\"id\":\"NGINX-HTTP-Method-Pie-Top-10\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":28,\"w\":12,\"h\":11,\"i\":\"4\"},\"id\":\"NGINX-HTTP-Status-Code-Pie-Top-10\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":36,\"y\":28,\"w\":12,\"h\":11,\"i\":\"5\"},\"id\":\"NGINX-HTTP-User-Agent-Pie-Top-10\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":17,\"w\":16,\"h\":11,\"i\":\"6\"},\"id\":\"NGINX-Username-Tagcloud\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":0,\"y\":39,\"w\":24,\"h\":20,\"i\":\"7\"},\"id\":\"NGINX-ASN-Top-10\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":24,\"y\":39,\"w\":24,\"h\":20,\"i\":\"8\"},\"id\":\"NGINX-Source-IP-Top-10\",\"panelIndex\":\"8\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[30.14512718337613,-0.87890625],\"mapZoom\":2},\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":17,\"i\":\"9\"},\"id\":\"NGINX-Map\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":32,\"y\":17,\"w\":16,\"h\":11,\"i\":\"13\"},\"id\":\"NGINX-Events-by-Country-Histogram\",\"panelIndex\":\"13\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":28,\"w\":12,\"h\":11,\"i\":\"14\"},\"id\":\"NGINX-Countries-Top-10\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":0,\"w\":14,\"h\":6,\"i\":\"15\"},\"id\":\"51ca6ee0-80d5-11e7-ab37-eb92b1bfb573\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":16,\"y\":17,\"w\":16,\"h\":11,\"i\":\"16\"},\"id\":\"7dcaa2b0-8596-11e7-a686-392ac617767d\",\"panelIndex\":\"16\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":14,\"y\":0,\"w\":10,\"h\":6,\"i\":\"17\"},\"version\":\"6.4.3\",\"panelIndex\":\"17\",\"type\":\"visualization\",\"id\":\"07581df0-e752-11e8-b4a6-215b0b97c069\",\"embeddableConfig\":{}}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata", + "_type": "dashboard", + "_source": { + "title": "Suricata", + "hits": 0, + "description": "Suricata Dashboard", + "panelsJSON": "[{\"gridData\":{\"h\":11,\"i\":\"2\",\"w\":24,\"x\":0,\"y\":6},\"id\":\"Suricata-Events-Histogram\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"9\",\"w\":12,\"x\":36,\"y\":28},\"id\":\"Suricata-Countries-Top-10\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"12\",\"w\":12,\"x\":0,\"y\":39},\"id\":\"Suricata-Fileinfo-Magic-Top-10\",\"panelIndex\":\"12\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"14\",\"w\":12,\"x\":24,\"y\":28},\"id\":\"Suricata-HTTP-Content-Type-Top-10\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"15\",\"w\":12,\"x\":12,\"y\":28},\"id\":\"Suricata-HTTP-Hostname-Pie-Top-10\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"16\",\"w\":12,\"x\":24,\"y\":39},\"id\":\"Suricata-HTTP-Method-Pie-Top-10\",\"panelIndex\":\"16\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"18\",\"w\":12,\"x\":12,\"y\":39},\"id\":\"Suricata-HTTP-User-Agent-Pie-Top-10\",\"panelIndex\":\"18\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"19\",\"w\":12,\"x\":36,\"y\":39},\"id\":\"Suricata-SSH-Client-Software-Version-Pie-Top-10\",\"panelIndex\":\"19\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"22\",\"w\":16,\"x\":32,\"y\":17},\"id\":\"Suricata-Events-by-Country-Histogram\",\"panelIndex\":\"22\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[28.613459424004414,-3.33984375],\"mapZoom\":2},\"gridData\":{\"h\":17,\"i\":\"23\",\"w\":24,\"x\":24,\"y\":0},\"id\":\"Suricata-Map\",\"panelIndex\":\"23\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"24\",\"w\":8,\"x\":12,\"y\":50},\"id\":\"Suricata-Source-IP-Top-10\",\"panelIndex\":\"24\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"25\",\"w\":12,\"x\":0,\"y\":50},\"id\":\"Suricata-ASN-Top-10\",\"panelIndex\":\"25\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"26\",\"w\":20,\"x\":28,\"y\":50},\"id\":\"Suricata-Alert-Signature-Top-10\",\"panelIndex\":\"26\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"27\",\"w\":16,\"x\":0,\"y\":17},\"id\":\"e624bc50-7dd6-11e7-bee2-c98307c16efa\",\"panelIndex\":\"27\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":6,\"i\":\"28\",\"w\":14,\"x\":0,\"y\":0},\"id\":\"bf6f6000-8598-11e7-8f60-4f4666b0a88e\",\"panelIndex\":\"28\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"29\",\"w\":16,\"x\":16,\"y\":17},\"id\":\"0e230290-859b-11e7-8f60-4f4666b0a88e\",\"panelIndex\":\"29\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"30\",\"w\":12,\"x\":0,\"y\":28},\"id\":\"b1a7f8d0-859b-11e7-8f60-4f4666b0a88e\",\"panelIndex\":\"30\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"31\",\"w\":8,\"x\":20,\"y\":50},\"id\":\"1a097850-7c22-11e7-aa1e-6bf93670d67b\",\"panelIndex\":\"31\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":6,\"i\":\"32\",\"w\":10,\"x\":14,\"y\":0},\"id\":\"4a60fe20-e75f-11e8-803c-59c072645505\",\"panelIndex\":\"32\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ElasticPot", + "_type": "dashboard", + "_source": { + "title": "ElasticPot", + "hits": 0, + "description": "ElasticPot Dashboard", + "panelsJSON": "[{\"gridData\":{\"x\":0,\"y\":6,\"w\":24,\"h\":11,\"i\":\"2\"},\"id\":\"ElasticPot-Events-Histogram\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":12,\"y\":17,\"w\":12,\"h\":11,\"i\":\"3\"},\"id\":\"ElasticPot-Countries-Top-10\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":17,\"w\":24,\"h\":11,\"i\":\"4\"},\"id\":\"ElasticPot-Events-by-Country-Histogram\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[28.92163128242129,1.7578125000000002],\"mapZoom\":2},\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":17,\"i\":\"5\"},\"id\":\"ElasticPot-Map\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":1,\"direction\":\"asc\"}}}},\"gridData\":{\"x\":16,\"y\":28,\"w\":12,\"h\":20,\"i\":\"6\"},\"id\":\"ElasticPot-Source-IP-Top-10\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":0,\"y\":28,\"w\":16,\"h\":20,\"i\":\"7\"},\"id\":\"ElasticPot-ASN-Top-10\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":28,\"y\":28,\"w\":20,\"h\":20,\"i\":\"9\"},\"id\":\"ElasticPot-Query-Top-10\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":0,\"w\":14,\"h\":6,\"i\":\"10\"},\"id\":\"d01a6390-827e-11e7-afbf-a7491fba5d8a\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":17,\"w\":12,\"h\":11,\"i\":\"11\"},\"id\":\"59b9dd60-827f-11e7-afbf-a7491fba5d8a\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":14,\"y\":0,\"w\":10,\"h\":6,\"i\":\"12\"},\"id\":\"3814c570-e68e-11e8-b727-735f5b0e1502\",\"panelIndex\":\"12\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "83b11b50-e850-11e8-97df-bbc3de28ece0", + "_type": "dashboard", + "_source": { + "title": "Glutton", + "hits": 0, + "description": "Glutton Dashboard", + "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"x\":30,\"y\":17,\"w\":18,\"h\":11,\"i\":\"16\"},\"id\":\"e055e240-e851-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"16\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":12,\"y\":39,\"w\":36,\"h\":11,\"i\":\"17\"},\"id\":\"133801c0-e852-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"17\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":6,\"w\":24,\"h\":11,\"i\":\"18\"},\"id\":\"50aa1940-e851-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"18\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":12,\"y\":17,\"w\":18,\"h\":11,\"i\":\"19\"},\"id\":\"9d251bd0-e851-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"19\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":0,\"w\":14,\"h\":6,\"i\":\"20\"},\"id\":\"32814dd0-e851-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"20\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[29.53522956294847,-3.1640625000000004],\"mapZoom\":2},\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":17,\"i\":\"21\"},\"id\":\"63d0bf60-e851-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"21\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":14,\"y\":0,\"w\":10,\"h\":6,\"i\":\"22\"},\"id\":\"3f646820-e851-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"22\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":28,\"w\":12,\"h\":11,\"i\":\"23\"},\"id\":\"f66b9200-e851-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"23\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":36,\"y\":28,\"w\":12,\"h\":11,\"i\":\"24\"},\"id\":\"0464b030-e852-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"24\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":17,\"w\":12,\"h\":11,\"i\":\"25\"},\"id\":\"7e6121d0-e851-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"25\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":50,\"w\":12,\"h\":20,\"i\":\"26\"},\"id\":\"21c65b10-e852-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"26\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":12,\"y\":50,\"w\":12,\"h\":20,\"i\":\"27\"},\"id\":\"41d04290-e852-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"27\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":12,\"y\":28,\"w\":12,\"h\":11,\"i\":\"28\"},\"id\":\"7e9a7d20-e858-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"28\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":24,\"y\":28,\"w\":12,\"h\":11,\"i\":\"29\"},\"id\":\"f4444100-e858-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"29\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":39,\"w\":12,\"h\":11,\"i\":\"30\"},\"id\":\"160f9cb0-e85b-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"30\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":70,\"w\":48,\"h\":20,\"i\":\"31\"},\"id\":\"a001a350-e85b-11e8-97df-bbc3de28ece0\",\"panelIndex\":\"31\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":50,\"w\":24,\"h\":20,\"i\":\"32\"},\"version\":\"6.4.3\",\"panelIndex\":\"32\",\"type\":\"visualization\",\"id\":\"c80e9ff0-e866-11e8-95af-236f09a02fdb\",\"embeddableConfig\":{}}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "14ebefd0-488f-11e8-9b3d-f36e8d4f5cb2", + "_type": "dashboard", + "_source": { + "title": "Heralding", + "hits": 0, + "description": "Heralding Dashboard", + "panelsJSON": "[{\"gridData\":{\"h\":6,\"i\":\"1\",\"w\":14,\"x\":0,\"y\":0},\"id\":\"2cf90930-47d3-11e8-a905-f74bbc7cbd2d\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"2\",\"w\":24,\"x\":0,\"y\":6},\"id\":\"d3bb9bd0-4863-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"3\",\"w\":24,\"x\":24,\"y\":17},\"id\":\"d0dbe890-4870-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[25.799891182088334,16.875000000000004],\"mapZoom\":2},\"gridData\":{\"h\":17,\"i\":\"4\",\"w\":24,\"x\":24,\"y\":0},\"id\":\"94ae10e0-4871-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"5\",\"w\":24,\"x\":0,\"y\":17},\"id\":\"29f51af0-4876-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"6\",\"w\":16,\"x\":0,\"y\":28},\"id\":\"eca8e580-4877-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"7\",\"w\":16,\"x\":16,\"y\":28},\"id\":\"e1969e20-4878-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"8\",\"w\":16,\"x\":32,\"y\":28},\"id\":\"864b2f30-4883-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"8\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":16,\"i\":\"10\",\"w\":24,\"x\":24,\"y\":39},\"id\":\"7c5959b0-4889-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":16,\"i\":\"11\",\"w\":24,\"x\":0,\"y\":39},\"id\":\"1268af10-4889-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":20,\"i\":\"12\",\"w\":12,\"x\":0,\"y\":55},\"id\":\"21ad1c80-488a-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"12\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":20,\"i\":\"13\",\"w\":12,\"x\":12,\"y\":55},\"id\":\"844f33f0-488a-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"13\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":20,\"i\":\"14\",\"w\":24,\"x\":24,\"y\":55},\"id\":\"124a1140-488e-11e8-9b3d-f36e8d4f5cb2\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":6,\"i\":\"15\",\"w\":10,\"x\":14,\"y\":0},\"id\":\"d500a3c0-e6b8-11e8-b727-735f5b0e1502\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"hidePanelTitles\":false,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[],\"highlightAll\":true,\"version\":true}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea", + "_type": "dashboard", + "_source": { + "title": "Dionaea", + "hits": 0, + "description": "Dionaea Dashboard", + "panelsJSON": "[{\"gridData\":{\"x\":0,\"y\":6,\"w\":24,\"h\":11,\"i\":\"2\"},\"id\":\"Dionaea-Events-Histogram\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":22,\"y\":28,\"w\":11,\"h\":11,\"i\":\"3\"},\"id\":\"Dionaea-Destination-Ports-Top-10\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":11,\"y\":17,\"w\":11,\"h\":11,\"i\":\"4\"},\"id\":\"Dionaea-Protocol\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":39,\"w\":24,\"h\":13,\"i\":\"8\"},\"id\":\"Dionaea-Password-Tagcloud-Large\",\"panelIndex\":\"8\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":33,\"y\":17,\"w\":15,\"h\":11,\"i\":\"10\"},\"id\":\"Dionaea-Events-by-Country-Histogram\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[26.073274367159797,8.357599969021976],\"mapZoom\":2},\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":17,\"i\":\"11\"},\"id\":\"Dionaea-Map\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":0,\"y\":52,\"w\":24,\"h\":20,\"i\":\"12\"},\"id\":\"Dionaea-ASN-Top-10\",\"panelIndex\":\"12\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":24,\"y\":52,\"w\":24,\"h\":20,\"i\":\"13\"},\"id\":\"Dionaea-Source-IP-Top-10\",\"panelIndex\":\"13\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":0,\"w\":14,\"h\":6,\"i\":\"14\"},\"id\":\"b9343070-80e9-11e7-a689-67e589a14a8a\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":17,\"w\":11,\"h\":11,\"i\":\"15\"},\"id\":\"cf8d0e40-80ea-11e7-a689-67e589a14a8a\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":22,\"y\":17,\"w\":11,\"h\":11,\"i\":\"16\"},\"id\":\"Dionaea-Countries-Top-10\",\"panelIndex\":\"16\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":28,\"w\":11,\"h\":11,\"i\":\"17\"},\"id\":\"Dionaea-Type\",\"panelIndex\":\"17\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":11,\"y\":28,\"w\":11,\"h\":11,\"i\":\"18\"},\"id\":\"Dionaea-Transport\",\"panelIndex\":\"18\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":33,\"y\":28,\"w\":15,\"h\":11,\"i\":\"19\"},\"id\":\"7e33e3d0-810c-11e7-8413-9fe5e30ade77\",\"panelIndex\":\"19\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":14,\"y\":0,\"w\":10,\"h\":6,\"i\":\"20\"},\"id\":\"465d9810-e5cf-11e8-b72a-b734d2b55cd4\",\"panelIndex\":\"20\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":39,\"w\":24,\"h\":13,\"i\":\"21\"},\"id\":\"Dionaea-Username-Tagcloud-Large\",\"panelIndex\":\"21\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Glastopf", + "_type": "dashboard", + "_source": { + "title": "Glastopf", + "hits": 0, + "description": "Glastopf Dashboard", + "panelsJSON": "[{\"gridData\":{\"h\":11,\"i\":\"2\",\"w\":24,\"x\":0,\"y\":6},\"id\":\"Glastopf-Events-Histogram\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"3\",\"w\":16,\"x\":16,\"y\":17},\"id\":\"Glastopf-Countries-Top-10\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[27.994401411046148,-6.679687500000001],\"mapZoom\":2},\"gridData\":{\"h\":17,\"i\":\"5\",\"w\":24,\"x\":24,\"y\":0},\"id\":\"Glastopf-Map\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"6\",\"w\":24,\"x\":24,\"y\":28},\"id\":\"Glastop-Source-IP-Top-10\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"7\",\"w\":24,\"x\":0,\"y\":28},\"id\":\"Glastopf-ASN-Top-10\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"9\",\"w\":16,\"x\":32,\"y\":17},\"id\":\"Glastopf-Events-by-Country-Histogram\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":6,\"i\":\"10\",\"w\":14,\"x\":0,\"y\":0},\"id\":\"307afd60-82a9-11e7-bcbe-2b6958a9c888\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"11\",\"w\":16,\"x\":0,\"y\":17},\"id\":\"59509e90-8590-11e7-a686-392ac617767d\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":6,\"i\":\"12\",\"w\":10,\"x\":14,\"y\":0},\"id\":\"409907c0-e6b5-11e8-b727-735f5b0e1502\",\"panelIndex\":\"12\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot", + "_type": "dashboard", + "_source": { + "title": "Conpot", + "hits": 0, + "description": "Conpot Dashboard", + "panelsJSON": "[{\"gridData\":{\"h\":11,\"i\":\"2\",\"w\":24,\"x\":0,\"y\":6},\"id\":\"ConPot-Events-Histogram\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"3\",\"w\":12,\"x\":12,\"y\":17},\"id\":\"ConPot-Countries-Top-10\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"4\",\"w\":12,\"x\":0,\"y\":28},\"id\":\"ConPot-Event-Type\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"5\",\"w\":12,\"x\":12,\"y\":28},\"id\":\"ConPot-Protocol\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"6\",\"w\":24,\"x\":24,\"y\":17},\"id\":\"ConPot-Events-by-Country-Histogram\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":21,\"i\":\"7\",\"w\":12,\"x\":24,\"y\":39},\"id\":\"ConPot-Input-Top-10\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":21,\"i\":\"8\",\"w\":12,\"x\":36,\"y\":39},\"id\":\"ConPot-Response-Top-10\",\"panelIndex\":\"8\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":21,\"i\":\"11\",\"w\":12,\"x\":0,\"y\":39},\"id\":\"ConPot-ASN-Top-10\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"14\",\"w\":12,\"x\":0,\"y\":17},\"id\":\"ffb284f0-80cd-11e7-ab37-eb92b1bfb573\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":21,\"i\":\"15\",\"w\":12,\"x\":12,\"y\":39},\"id\":\"082111a0-80cf-11e7-ab37-eb92b1bfb573\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":6,\"i\":\"16\",\"w\":13,\"x\":0,\"y\":0},\"id\":\"62fde9a0-858d-11e7-a686-392ac617767d\",\"panelIndex\":\"16\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[35.746512259918504,-16.171875000000004],\"mapZoom\":2},\"gridData\":{\"h\":17,\"i\":\"17\",\"w\":24,\"x\":24,\"y\":0},\"id\":\"ConPot-Map\",\"panelIndex\":\"17\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":6,\"i\":\"18\",\"w\":11,\"x\":13,\"y\":0},\"id\":\"10e765a0-e51e-11e8-8a75-d5f374dbaebe\",\"panelIndex\":\"18\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":11,\"i\":\"19\",\"w\":24,\"x\":24,\"y\":28},\"id\":\"a427e6c0-e521-11e8-8a75-d5f374dbaebe\",\"panelIndex\":\"19\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"hidePanelTitles\":false,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "faeb1340-6355-11e8-be86-73985bedf977", + "_type": "dashboard", + "_source": { + "title": "Tanner", + "hits": 0, + "description": "Tanner Dashboard", + "panelsJSON": "[{\"gridData\":{\"x\":0,\"y\":50,\"w\":12,\"h\":20,\"i\":\"1\"},\"id\":\"06628c70-6352-11e8-be86-73985bedf977\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[36.03133177633189,4.218750000000001],\"mapZoom\":2},\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":17,\"i\":\"2\"},\"id\":\"f8e24f20-634e-11e8-be86-73985bedf977\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":12,\"y\":17,\"w\":12,\"h\":11,\"i\":\"3\"},\"id\":\"d968d5e0-6350-11e8-be86-73985bedf977\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":0,\"w\":14,\"h\":6,\"i\":\"4\"},\"id\":\"5014cee0-634e-11e8-be86-73985bedf977\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":6,\"w\":24,\"h\":11,\"i\":\"5\"},\"id\":\"77bf1310-634e-11e8-be86-73985bedf977\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":17,\"w\":24,\"h\":11,\"i\":\"6\"},\"id\":\"6ee57da0-634f-11e8-be86-73985bedf977\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":28,\"w\":16,\"h\":11,\"i\":\"7\"},\"id\":\"c1c8a3a0-6352-11e8-be86-73985bedf977\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":32,\"y\":39,\"w\":16,\"h\":11,\"i\":\"8\"},\"id\":\"946dc4d0-6352-11e8-be86-73985bedf977\",\"panelIndex\":\"8\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":16,\"y\":39,\"w\":16,\"h\":11,\"i\":\"9\"},\"id\":\"a6ccd530-6352-11e8-be86-73985bedf977\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":12,\"y\":50,\"w\":12,\"h\":20,\"i\":\"10\"},\"id\":\"Cowrie-Source-IP-Top-10\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":17,\"w\":12,\"h\":11,\"i\":\"11\"},\"id\":\"a51e9ae0-6350-11e8-be86-73985bedf977\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":32,\"y\":28,\"w\":16,\"h\":11,\"i\":\"12\"},\"id\":\"895645f0-6356-11e8-be86-73985bedf977\",\"panelIndex\":\"12\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":50,\"w\":24,\"h\":20,\"i\":\"13\"},\"id\":\"e9e534d0-6356-11e8-be86-73985bedf977\",\"panelIndex\":\"13\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":39,\"w\":16,\"h\":11,\"i\":\"14\"},\"id\":\"87cf3b50-6357-11e8-be86-73985bedf977\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":16,\"y\":28,\"w\":16,\"h\":11,\"i\":\"15\"},\"id\":\"656df650-6357-11e8-be86-73985bedf977\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":14,\"y\":0,\"w\":10,\"h\":6,\"i\":\"16\"},\"version\":\"6.4.3\",\"panelIndex\":\"16\",\"type\":\"visualization\",\"id\":\"535b0c80-e761-11e8-803c-59c072645505\",\"embeddableConfig\":{}}]", + "optionsJSON": "{\"darkTheme\":true,\"hidePanelTitles\":false,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[],\"highlightAll\":true,\"version\":true}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e05aac20-8b51-11e7-b92d-d39e43e3de0f", + "_type": "dashboard", + "_source": { + "title": "Rdpy", + "hits": 0, + "description": "Rdpy Dashboard", + "panelsJSON": "[{\"gridData\":{\"x\":0,\"y\":0,\"w\":15,\"h\":6,\"i\":\"10\"},\"id\":\"0de24040-8b52-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":6,\"w\":24,\"h\":11,\"i\":\"11\"},\"id\":\"c90f1f00-8b52-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":17,\"w\":24,\"h\":11,\"i\":\"12\"},\"id\":\"da489b20-8b52-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"12\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[30.44867367928756,-5.44921875],\"mapZoom\":2},\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":17,\"i\":\"13\"},\"id\":\"e4b7cf40-8b52-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"13\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":17,\"w\":12,\"h\":11,\"i\":\"14\"},\"id\":\"051c59e0-8b53-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":12,\"y\":17,\"w\":12,\"h\":11,\"i\":\"15\"},\"id\":\"51c331f0-8b54-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":0,\"y\":39,\"w\":24,\"h\":20,\"i\":\"16\"},\"id\":\"73364660-8b54-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"16\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":24,\"y\":39,\"w\":24,\"h\":20,\"i\":\"17\"},\"id\":\"874be060-8b54-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"17\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":28,\"w\":24,\"h\":11,\"i\":\"18\"},\"id\":\"54213440-8b56-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"18\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":28,\"w\":24,\"h\":11,\"i\":\"19\"},\"id\":\"cb2a3a00-8b56-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"19\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":15,\"y\":0,\"w\":9,\"h\":6,\"i\":\"20\"},\"id\":\"94e13130-e756-11e8-b4a6-215b0b97c069\",\"panelIndex\":\"20\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"match_all\":{}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie", + "_type": "dashboard", + "_source": { + "title": "Cowrie", + "hits": 0, + "description": "Cowrie Dashboard", + "panelsJSON": "[{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":0,\"y\":6,\"w\":24,\"h\":11,\"i\":\"22\"},\"id\":\"Cowrie-Events-Histogram\",\"panelIndex\":\"22\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":28,\"w\":12,\"h\":11,\"i\":\"28\"},\"id\":\"Cowrie-Countries-Top-10\",\"panelIndex\":\"28\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":32,\"y\":17,\"w\":16,\"h\":11,\"i\":\"29\"},\"id\":\"Cowrie-Events-by-Country-Histogram\",\"panelIndex\":\"29\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":12,\"y\":28,\"w\":12,\"h\":11,\"i\":\"31\"},\"id\":\"Cowrie-Version-Pie-Top-10\",\"panelIndex\":\"31\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":39,\"w\":24,\"h\":16,\"i\":\"34\"},\"id\":\"Cowrie-Username-Tagcloud-Large\",\"panelIndex\":\"34\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":39,\"w\":24,\"h\":16,\"i\":\"35\"},\"id\":\"Cowrie-Password-Tagcloud-Large\",\"panelIndex\":\"35\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[24.84656534821976,6.855468750000001],\"mapZoom\":2},\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":17,\"i\":\"36\"},\"id\":\"Cowrie-Map\",\"panelIndex\":\"36\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":24,\"y\":55,\"w\":24,\"h\":20,\"i\":\"37\"},\"id\":\"Cowrie-Input-Top-10\",\"panelIndex\":\"37\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":0,\"y\":55,\"w\":16,\"h\":20,\"i\":\"39\"},\"id\":\"Cowrie-ASN-Top-10\",\"panelIndex\":\"39\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":36,\"y\":28,\"w\":12,\"h\":11,\"i\":\"43\"},\"id\":\"Cowrie-Ports-Pie\",\"panelIndex\":\"43\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":0,\"y\":0,\"w\":14,\"h\":6,\"i\":\"44\"},\"id\":\"c1ef91c0-7dc2-11e7-8268-ed048f6272e0\",\"panelIndex\":\"44\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":0,\"y\":28,\"w\":12,\"h\":11,\"i\":\"45\"},\"id\":\"bf39e000-80d5-11e7-ba6f-4542711dd148\",\"panelIndex\":\"45\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":0,\"y\":17,\"w\":16,\"h\":11,\"i\":\"46\"},\"id\":\"f28b8c60-80e4-11e7-ba6f-4542711dd148\",\"panelIndex\":\"46\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":16,\"y\":17,\"w\":16,\"h\":11,\"i\":\"47\"},\"id\":\"2a6803f0-80e7-11e7-a689-67e589a14a8a\",\"panelIndex\":\"47\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":14,\"y\":0,\"w\":10,\"h\":6,\"i\":\"48\"},\"id\":\"45e32dc0-dec5-11e8-87cf-239397d2b8d3\",\"panelIndex\":\"48\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":16,\"y\":55,\"w\":8,\"h\":20,\"i\":\"49\"},\"version\":\"6.4.3\",\"panelIndex\":\"49\",\"type\":\"visualization\",\"id\":\"48d3dad0-e725-11e8-b4a6-215b0b97c069\",\"embeddableConfig\":{}}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeytrap", + "_type": "dashboard", + "_source": { + "title": "Honeytrap", + "hits": 0, + "description": "Honeytrap Dashboard", + "panelsJSON": "[{\"gridData\":{\"h\":11,\"i\":\"2\",\"w\":24,\"x\":0,\"y\":6},\"id\":\"Honeytrap-Events-Histogram\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"5\",\"w\":12,\"x\":12,\"y\":28},\"id\":\"Honeytrap-Countries-Top-10\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"6\",\"w\":18,\"x\":30,\"y\":17},\"id\":\"Honeytrap-Events-by-Country-Histogram\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"7\",\"w\":12,\"x\":0,\"y\":17},\"id\":\"Honeytrap-Destination-Ports-Top-10\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[28.613459424004414,-3.69140625],\"mapZoom\":2},\"gridData\":{\"h\":17,\"i\":\"8\",\"w\":24,\"x\":24,\"y\":0},\"id\":\"Honeytrap-Map\",\"panelIndex\":\"8\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"9\",\"w\":24,\"x\":24,\"y\":39},\"id\":\"Honeytrap-Source-IP-Top-10\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"10\",\"w\":24,\"x\":0,\"y\":39},\"id\":\"Honeytrap-ASN-Top-10\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":6,\"i\":\"11\",\"w\":14,\"x\":0,\"y\":0},\"id\":\"6ee70b90-8374-11e7-9adb-2955c2136c8c\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"12\",\"w\":18,\"x\":12,\"y\":17},\"id\":\"ec53e470-8376-11e7-9adb-2955c2136c8c\",\"panelIndex\":\"12\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"13\",\"w\":12,\"x\":0,\"y\":28},\"id\":\"576a3cb0-82ae-11e7-bcbe-2b6958a9c888\",\"panelIndex\":\"13\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 450\":\"rgb(255,255,204)\",\"1350 - 1800\":\"rgb(254,201,101)\",\"1800 - 2250\":\"rgb(254,171,73)\",\"2250 - 2700\":\"rgb(253,141,60)\",\"2700 - 3150\":\"rgb(252,91,46)\",\"3150 - 3600\":\"rgb(237,47,34)\",\"3600 - 4050\":\"rgb(212,16,32)\",\"4050 - 4500\":\"rgb(176,0,38)\",\"450 - 900\":\"rgb(255,241,170)\",\"900 - 1350\":\"rgb(254,225,135)\"}}},\"gridData\":{\"h\":11,\"i\":\"14\",\"w\":24,\"x\":24,\"y\":28},\"id\":\"4e2887d0-8379-11e7-97dc-15d31af3c77f\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":6,\"i\":\"15\",\"w\":10,\"x\":14,\"y\":0},\"id\":\"f5e74220-e725-11e8-b4a6-215b0b97c069\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "dd95c950-8b5d-11e7-ba35-0d8832ac304f", + "_type": "dashboard", + "_source": { + "title": "Mailoney", + "hits": 0, + "description": "Mailoney Dashboard", + "panelsJSON": "[{\"gridData\":{\"h\":6,\"i\":\"10\",\"w\":14,\"x\":0,\"y\":0},\"id\":\"5234de80-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"11\",\"w\":24,\"x\":0,\"y\":6},\"id\":\"63672eb0-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"11\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"12\",\"w\":24,\"x\":24,\"y\":17},\"id\":\"88d899e0-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"12\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"13\",\"w\":12,\"x\":12,\"y\":17},\"id\":\"cac48440-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"13\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"h\":11,\"i\":\"14\",\"w\":12,\"x\":0,\"y\":17},\"id\":\"d2405e70-8b5e-11e7-ba35-0d8832ac304f\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"15\",\"w\":12,\"x\":0,\"y\":28},\"id\":\"ad6dcb50-8b5e-11e7-ba35-0d8832ac304f\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"16\",\"w\":12,\"x\":12,\"y\":28},\"id\":\"ba9d6280-8b5f-11e7-b92d-d39e43e3de0f\",\"panelIndex\":\"16\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"h\":20,\"i\":\"17\",\"w\":24,\"x\":24,\"y\":28},\"id\":\"0169b450-8b62-11e7-ba35-0d8832ac304f\",\"panelIndex\":\"17\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[29.22889003019423,-7.207031249999999],\"mapZoom\":2},\"gridData\":{\"h\":17,\"i\":\"18\",\"w\":24,\"x\":24,\"y\":0},\"id\":\"c0916430-8b5e-11e7-ba35-0d8832ac304f\",\"panelIndex\":\"18\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":6,\"i\":\"19\",\"w\":10,\"x\":14,\"y\":0},\"id\":\"f2742de0-e745-11e8-b4a6-215b0b97c069\",\"panelIndex\":\"19\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"match_all\":{}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "133801c0-e852-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton Heatmap", + "visState": "{\n \"title\": \"Glutton Heatmap\",\n \"type\": \"heatmap\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": true,\n \"enableHover\": false,\n \"legendPosition\": \"right\",\n \"times\": [],\n \"colorsNumber\": 10,\n \"colorSchema\": \"Green to Red\",\n \"setColorRange\": false,\n \"colorsRange\": [],\n \"invertColors\": false,\n \"percentageMode\": false,\n \"valueAxes\": [\n {\n \"show\": false,\n \"id\": \"ValueAxis-1\",\n \"type\": \"value\",\n \"scale\": {\n \"type\": \"square root\",\n \"defaultYExtents\": false\n },\n \"labels\": {\n \"show\": false,\n \"rotate\": 0,\n \"color\": \"#555\",\n \"overwriteColor\": false\n }\n }\n ],\n \"type\": \"heatmap\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {}\n },\n {\n \"id\": \"3\",\n \"enabled\": true,\n \"type\": \"terms\",\n \"schema\": \"group\",\n \"params\": {\n \"field\": \"dest_port\",\n \"size\": 10,\n \"order\": \"desc\",\n \"orderBy\": \"1\",\n \"otherBucket\": false,\n \"otherBucketLabel\": \"Other\",\n \"missingBucket\": false,\n \"missingBucketLabel\": \"Missing\",\n \"customLabel\": \"Destination Port\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"date_histogram\",\n \"schema\": \"segment\",\n \"params\": {\n \"field\": \"@timestamp\",\n \"interval\": \"auto\",\n \"customInterval\": \"2h\",\n \"min_doc_count\": 1,\n \"extended_bounds\": {},\n \"customLabel\": \"Timestamp\"\n }\n }\n ]\n}", + "uiStateJSON": "{\n \"vis\": {\n \"defaultColors\": {\n \"0 - 500\": \"rgb(0,104,55)\",\n \"500 - 1000\": \"rgb(26,151,80)\",\n \"1000 - 1500\": \"rgb(102,189,99)\",\n \"1500 - 2000\": \"rgb(166,217,106)\",\n \"2000 - 2500\": \"rgb(217,239,139)\",\n \"2500 - 3000\": \"rgb(255,255,190)\",\n \"3000 - 3500\": \"rgb(254,224,139)\",\n \"3500 - 4000\": \"rgb(253,174,97)\",\n \"4000 - 4500\": \"rgb(244,109,67)\",\n \"4500 - 5000\": \"rgb(214,47,39)\"\n }\n },\n \"spy\": {\n \"mode\": {\n \"name\": null,\n \"fill\": false\n }\n }\n}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": []\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "1a097850-7c22-11e7-aa1e-6bf93670d67b", + "_type": "visualization", + "_source": { + "title": "Suricata CVE - Top 10", + "visState": "{\"title\":\"Suricata CVE - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"alert.cve_id.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"CVE ID\"}}],\"listeners\":{}}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "124a1140-488e-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding Top Credentials Per Protocol", + "visState": "{\"title\":\"Heralding Top Credentials Per Protocol\",\"type\":\"table\",\"params\":{\"perPage\":100,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"proto.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Protocol\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"username.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":3,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Username\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"password.keyword\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":3,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Password\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":3,\"direction\":null}}}}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "0e230290-859b-11e7-8f60-4f4666b0a88e", + "_type": "visualization", + "_source": { + "title": "Suricata Destination Ports Histogram", + "visState": "{\"title\":\"Suricata Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "2fc62270-e872-11e8-a876-6bccfb9086f2", + "_type": "visualization", + "_source": { + "title": "Medpot Data - Top 10", + "visState": "{\"title\":\"Medpot Data - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"data.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Data\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "1268af10-4889-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding Username Tagcloud", + "visState": "{\"title\":\"Heralding Username Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"scale\":\"linear\",\"orientation\":\"single\",\"minFontSize\":16,\"maxFontSize\":64,\"showLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"username.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "0169b450-8b62-11e7-ba35-0d8832ac304f", + "_type": "visualization", + "_source": { + "title": "Mailoney SMTP Input - Top 10", + "visState": "{\"title\":\"Mailoney SMTP Input - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"smtp_input.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"SMTP Input\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "160f9cb0-e85b-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton Method", + "visState": "{\"title\":\"Glutton Method\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"method.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Logs", + "_type": "search", + "_source": { + "title": "Dionaea-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"Dionaea\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Logs", + "_type": "search", + "_source": { + "title": "Cowrie-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"Cowrie\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeypot-Logs", + "_type": "search", + "_source": { + "title": "Honeypot-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"language\":\"lucene\",\"query\":\"type:\\\"Ciscoasa\\\" OR type:\\\"ConPot\\\" OR type:\\\"Cowrie\\\" OR type:\\\"Dionaea\\\" OR type:\\\"ElasticPot\\\" OR type:\\\"Glastopf\\\" OR type:\\\"Glutton\\\" OR type:\\\"Heralding\\\" OR type:\\\"Honeytrap\\\" OR type:\\\"Mailoney\\\" OR type:\\\"Medpot\\\" OR type:\\\"Rdpy\\\" OR type:\\\"Tanner\\\"\"},\"highlightAll\":true,\"version\":true}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d800f130-633f-11e8-be86-73985bedf977", + "_type": "search", + "_source": { + "title": "Tanner-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"type:\\\"Tanner\\\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeytrap-Logs", + "_type": "search", + "_source": { + "title": "Honeytrap-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"Honeytrap\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "_type": "search", + "_source": { + "title": "Glutton-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"type:\\\"Glutton\\\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-Logs", + "_type": "search", + "_source": { + "title": "NGINX-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"NGINX\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-Logs", + "_type": "search", + "_source": { + "title": "ConPot-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"ConPot\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "_type": "search", + "_source": { + "title": "Rdpy-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"Rdpy\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "3290fa70-69a2-11e7-bcac-d3ee6f9c26fd", + "_type": "search", + "_source": { + "title": "NSM-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"filter\":[],\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"Suricata\\\" OR type:\\\"p0f\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "_type": "search", + "_source": { + "title": "Ciscoasa-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"type:\\\"Ciscoasa\\\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "_type": "search", + "_source": { + "title": "Mailoney-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"type:\\\"Mailoney\\\"\",\"default_field\":\"*\"}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ElasticPot-Logs", + "_type": "search", + "_source": { + "title": "ElasticPot-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"ElasticPot\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-Logs", + "_type": "search", + "_source": { + "title": "Suricata-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"Suricata\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Glastopf-Logs", + "_type": "search", + "_source": { + "title": "Glastopf-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"Glastopf\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "P0f-Logs", + "_type": "search", + "_source": { + "title": "P0f-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query\":{\"query_string\":{\"query\":\"type:\\\"P0f\\\"\",\"analyze_wildcard\":true}},\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "baa53b00-b597-11e8-9a34-d951cebce834", + "_type": "search", + "_source": { + "title": "Medpot-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":\"type:\\\"Medpot\\\"\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "_type": "search", + "_source": { + "title": "Heralding-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"type:\\\"Heralding\\\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "c3b89bc0-69a7-11e7-bcac-d3ee6f9c26fd", + "_type": "search", + "_source": { + "title": "T-Pot-Logs", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "@timestamp", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"logstash-*\",\"query\":{\"language\":\"lucene\",\"query\":\"type:\\\"Ciscoasa\\\" OR type:\\\"ConPot\\\" OR type:\\\"Cowrie\\\" OR type:\\\"Dionaea\\\" OR type:\\\"ElasticPot\\\" OR type:\\\"Glastopf\\\" OR type:\\\"Glutton\\\" OR type:\\\"Heralding\\\" OR type:\\\"Honeytrap\\\" OR type:\\\"Mailoney\\\" OR type:\\\"Medpot\\\" OR type:\\\"P0f\\\" OR type:\\\"Rdpy\\\" OR type:\\\"Suricata\\\" OR type:\\\"Tanner\\\"\"},\"highlightAll\":true,\"version\":true,\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "48f595c0-e7f8-11e8-9ac4-13ecd4ad8d70", + "_type": "dashboard", + "_source": { + "title": "Medpot", + "hits": 0, + "description": "Medpot Dashboard", + "panelsJSON": "[{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":0,\"w\":14,\"h\":6,\"i\":\"13\"},\"id\":\"65fdfd10-e7f8-11e8-9ac4-13ecd4ad8d70\",\"panelIndex\":\"13\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":14,\"y\":0,\"w\":10,\"h\":6,\"i\":\"14\"},\"id\":\"17130490-e7fb-11e8-9ac4-13ecd4ad8d70\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":6,\"w\":24,\"h\":11,\"i\":\"15\"},\"id\":\"554c9550-e7fb-11e8-9ac4-13ecd4ad8d70\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{\"mapCenter\":[32.84267363195431,-5.273437500000001],\"mapZoom\":2},\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":17,\"i\":\"16\"},\"id\":\"a81cba70-e7fc-11e8-9ac4-13ecd4ad8d70\",\"panelIndex\":\"16\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":17,\"w\":12,\"h\":11,\"i\":\"17\"},\"id\":\"099c23d0-e7fd-11e8-9ac4-13ecd4ad8d70\",\"panelIndex\":\"17\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":12,\"y\":17,\"w\":12,\"h\":11,\"i\":\"18\"},\"id\":\"15b696f0-e7fd-11e8-9ac4-13ecd4ad8d70\",\"panelIndex\":\"18\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":24,\"y\":17,\"w\":24,\"h\":11,\"i\":\"19\"},\"id\":\"490b4e60-e7fd-11e8-9ac4-13ecd4ad8d70\",\"panelIndex\":\"19\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":28,\"w\":12,\"h\":20,\"i\":\"20\"},\"id\":\"5b69e990-e7fd-11e8-9ac4-13ecd4ad8d70\",\"panelIndex\":\"20\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":12,\"y\":28,\"w\":12,\"h\":20,\"i\":\"21\"},\"id\":\"e3f00420-e7fd-11e8-9ac4-13ecd4ad8d70\",\"panelIndex\":\"21\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"gridData\":{\"x\":24,\"y\":28,\"w\":24,\"h\":20,\"i\":\"22\"},\"version\":\"6.4.3\",\"panelIndex\":\"22\",\"type\":\"visualization\",\"id\":\"2fc62270-e872-11e8-a876-6bccfb9086f2\",\"embeddableConfig\":{}}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "885928c0-7ebe-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Attacks by Country Histogram", + "visState": "{\"title\":\"Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"top\",\"times\":[],\"addTimeMarker\":false,\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d94ff2a0-7ec2-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Attacker AS/N - Top 10", + "visState": "{\"title\":\"Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showTotal\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "772cb2b0-7ec3-11e7-a7c8-5f38ad5bf75f", + "_type": "visualization", + "_source": { + "title": "Attacker Source IP - Top 10", + "visState": "{\"title\":\"Attacker Source IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "f1a19000-7ebf-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Attacks by Country and Port", + "visState": "{\"title\":\"Attacks by Country and Port\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"top\",\"isDonut\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"split\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\",\"row\":false}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "50d82860-7ea0-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Attacks by Country", + "visState": "{\"title\":\"Attacks by Country\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "7b61a6a0-7ebf-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Attacks by Destination Port Histogram", + "visState": "{\"title\":\"Attacks by Destination Port Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"top\",\"times\":[],\"addTimeMarker\":false,\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{\"spy\":{\"mode\":{\"name\":null,\"fill\":false}}}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ef227eb0-7e9d-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Attacks by Honeypot Histogram", + "visState": "{\"title\":\"Attacks by Honeypot Histogram\",\"type\":\"line\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"top\",\"times\":[],\"addTimeMarker\":false,\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "762f66c0-7e9e-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Honeypot Attacks Histogram", + "visState": "{\"title\":\"Honeypot Attacks Histogram\",\"type\":\"line\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Source IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Source IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "87428ba0-7e9d-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Honeypot Attacks Bar", + "visState": "{\"title\":\"Honeypot Attacks Bar\",\"type\":\"histogram\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":75,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Honeypots\"},\"type\":\"category\"}],\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"legendPosition\":\"right\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"mode\":\"stacked\",\"show\":\"true\",\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"times\":[],\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":15,\"order\":\"asc\",\"orderBy\":\"_key\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Honeypots\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"language\":\"lucene\",\"query\":\"\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "0d947000-7ebd-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Attacks by Honeypot", + "visState": "{\"title\":\"Attacks by Honeypot\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "54d8c6a0-dec0-11e8-87cf-239397d2b8d3", + "_type": "dashboard", + "_source": { + "title": "Ciscoasa", + "hits": 0, + "description": "Ciscoasa Dashboard", + "panelsJSON": "[{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":6,\"i\":\"1\",\"w\":14,\"x\":0,\"y\":0},\"id\":\"15f2c000-4ad5-11e8-ab1b-fdef76c312f4\",\"panelIndex\":\"1\",\"type\":\"visualization\",\"version\":\"6.4.2\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":11,\"i\":\"2\",\"w\":24,\"x\":0,\"y\":6},\"id\":\"8a455850-4ad5-11e8-ab1b-fdef76c312f4\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.4.2\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"h\":11,\"i\":\"3\",\"w\":24,\"x\":24,\"y\":17},\"id\":\"a72ec5f0-4ad5-11e8-ab1b-fdef76c312f4\",\"panelIndex\":\"3\",\"type\":\"visualization\",\"version\":\"6.4.2\"},{\"gridData\":{\"h\":11,\"i\":\"5\",\"w\":12,\"x\":0,\"y\":17},\"id\":\"d77bbba0-4ad5-11e8-ab1b-fdef76c312f4\",\"panelIndex\":\"5\",\"type\":\"visualization\",\"version\":\"6.4.2\"},{\"gridData\":{\"h\":11,\"i\":\"6\",\"w\":12,\"x\":12,\"y\":17},\"id\":\"fe02b580-4ad5-11e8-ab1b-fdef76c312f4\",\"panelIndex\":\"6\",\"type\":\"visualization\",\"version\":\"6.4.2\"},{\"gridData\":{\"h\":20,\"i\":\"7\",\"w\":24,\"x\":24,\"y\":28},\"id\":\"1a80b720-4ad6-11e8-ab1b-fdef76c312f4\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.4.2\"},{\"gridData\":{\"h\":20,\"i\":\"8\",\"w\":24,\"x\":0,\"y\":28},\"id\":\"2a543aa0-4ad6-11e8-ab1b-fdef76c312f4\",\"panelIndex\":\"8\",\"type\":\"visualization\",\"version\":\"6.4.2\"},{\"embeddableConfig\":{\"mapCenter\":[42.032974332441405,0.703125],\"mapZoom\":2},\"gridData\":{\"h\":17,\"i\":\"9\",\"w\":24,\"x\":24,\"y\":0},\"id\":\"b8745000-4ad5-11e8-ab1b-fdef76c312f4\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.4.2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":6,\"i\":\"10\",\"w\":10,\"x\":14,\"y\":0},\"id\":\"79a71e90-dec1-11e8-87cf-239397d2b8d3\",\"panelIndex\":\"10\",\"type\":\"visualization\",\"version\":\"6.4.2\"}]", + "optionsJSON": "{\"darkTheme\":true,\"hidePanelTitles\":false,\"useMargins\":true}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[],\"highlightAll\":true,\"version\":true}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "32814dd0-e851-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton Attacks Bar", + "visState": "{\"title\":\"Glutton Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Honeytrap\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "5234de80-8b5f-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Mailoney Attacks Bar", + "visState": "{\"title\":\"Mailoney Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Mailoney\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Mailoney\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "51ca6ee0-80d5-11e7-ab37-eb92b1bfb573", + "_type": "visualization", + "_source": { + "title": "NGINX Events Bar", + "visState": "{\"title\":\"NGINX Events Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"NGINX\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Events\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"NGINX\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "5014cee0-634e-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner Attacks Bar", + "visState": "{\"title\":\"Tanner Attacks Bar\",\"type\":\"horizontal_bar\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":90,\"show\":false,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":false,\"style\":{},\"title\":{},\"type\":\"category\"}],\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"legendPosition\":\"right\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"2\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"histogram\",\"valueAxis\":\"ValueAxis-1\"}],\"times\":[],\"type\":\"histogram\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"bottom\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"language\":\"lucene\",\"query\":\"\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "65fdfd10-e7f8-11e8-9ac4-13ecd4ad8d70", + "_type": "visualization", + "_source": { + "title": "Medpot Attacks Bar", + "visState": "{\"title\":\"Medpot Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"ElasticPot\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ElasticPot\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "0de24040-8b52-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy Attacks Bar", + "visState": "{\"title\":\"Rdpy Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Rdpy\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Rdpy\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d01a6390-827e-11e7-afbf-a7491fba5d8a", + "_type": "visualization", + "_source": { + "title": "ElasticPot Attacks Bar", + "visState": "{\"title\":\"ElasticPot Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"ElasticPot\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ElasticPot\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "6ee70b90-8374-11e7-9adb-2955c2136c8c", + "_type": "visualization", + "_source": { + "title": "Honeytrap Attacks Bar", + "visState": "{\"title\":\"Honeytrap Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Honeytrap\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "307afd60-82a9-11e7-bcbe-2b6958a9c888", + "_type": "visualization", + "_source": { + "title": "Glastopf Attacks Bar", + "visState": "{\"title\":\"Glastopf Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Glastopf\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Glastopf-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "62fde9a0-858d-11e7-a686-392ac617767d", + "_type": "visualization", + "_source": { + "title": "Conpot Attacks Bar", + "visState": "{\"title\":\"Conpot Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"ConPot\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Conpot\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "b9343070-80e9-11e7-a689-67e589a14a8a", + "_type": "visualization", + "_source": { + "title": "Dionaea Attacks Bar", + "visState": "{\"title\":\"Dionaea Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Dionaea\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Dionaea\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "c1ef91c0-7dc2-11e7-8268-ed048f6272e0", + "_type": "visualization", + "_source": { + "title": "Cowrie Attacks Bar", + "visState": "{\"title\":\"Cowrie Attacks Bar\",\"type\":\"histogram\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{\"text\":\"Cowrie\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"BottomAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"histogram\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Cowrie\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "cac48440-8b5f-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Mailoney - Attacker Src IP Reputation", + "visState": "{\"title\":\"Mailoney - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "a51e9ae0-6350-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner - Attacker Src IP Reputation", + "visState": "{\"title\":\"Tanner - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d77bbba0-4ad5-11e8-ab1b-fdef76c312f4", + "_type": "visualization", + "_source": { + "title": "Ciscoasa - Attacker Src IP Reputation", + "visState": "{\"title\":\"Ciscoasa - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "59b9dd60-827f-11e7-afbf-a7491fba5d8a", + "_type": "visualization", + "_source": { + "title": "ElasticPot - Attacker Src IP Reputation", + "visState": "{\"title\":\"ElasticPot - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "576a3cb0-82ae-11e7-bcbe-2b6958a9c888", + "_type": "visualization", + "_source": { + "title": "Honeytrap - Attacker Src IP Reputation", + "visState": "{\"title\":\"Honeytrap - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "b1a7f8d0-859b-11e7-8f60-4f4666b0a88e", + "_type": "visualization", + "_source": { + "title": "Suricata - Attacker Src IP Reputation", + "visState": "{\"title\":\"Suricata - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "cf8d0e40-80ea-11e7-a689-67e589a14a8a", + "_type": "visualization", + "_source": { + "title": "Dionaea - Attacker Src IP Reputation", + "visState": "{\"title\":\"Dionaea - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "bf39e000-80d5-11e7-ba6f-4542711dd148", + "_type": "visualization", + "_source": { + "title": "Cowrie - Attacker Src IP Reputation", + "visState": "{\"title\":\"Cowrie - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "59509e90-8590-11e7-a686-392ac617767d", + "_type": "visualization", + "_source": { + "title": "Glastopf - Attacker Src IP Reputation", + "visState": "{\"title\":\"Glastopf - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Glastopf-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ElasticPot-Events-Histogram", + "_type": "visualization", + "_source": { + "title": "ElasticPot Attacks Histogram", + "visState": "{\"title\":\"ElasticPot Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Glastopf-Events-Histogram", + "_type": "visualization", + "_source": { + "title": "Glastopf Attacks Histogram", + "visState": "{\"title\":\"Glastopf Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\",\"interpolate\":\"linear\",\"lineWidth\":2},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Glastopf-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeytrap-Events-Histogram", + "_type": "visualization", + "_source": { + "title": "Honeytrap Attacks Histogram", + "visState": "{\"title\":\"Honeytrap Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"2\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "f66b9200-e851-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton - Attacker Src IP Reputation", + "visState": "{\"title\":\"Glutton - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "099c23d0-e7fd-11e8-9ac4-13ecd4ad8d70", + "_type": "visualization", + "_source": { + "title": "Medpot - Attacker Src IP Reputation", + "visState": "{\"title\":\"Medpot - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "051c59e0-8b53-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy - Attacker Src IP Reputation", + "visState": "{\"title\":\"Rdpy - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "eca8e580-4877-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding - Attacker Src IP Reputation", + "visState": "{\"title\":\"Heralding - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ffb284f0-80cd-11e7-ab37-eb92b1bfb573", + "_type": "visualization", + "_source": { + "title": "Conpot - Attacker Src IP Reputation", + "visState": "{\"title\":\"Conpot - Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"labels\":{\"last_level\":true,\"show\":false,\"truncate\":100,\"values\":true},\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "349c11c0-7ea0-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Attacker Src IP Reputation", + "visState": "{\"title\":\"Attacker Src IP Reputation\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ip_rep.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "63672eb0-8b5f-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Mailoney Attacks Histogram", + "visState": "{\"title\":\"Mailoney Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "c90f1f00-8b52-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy Attacks Histogram", + "visState": "{\"title\":\"Rdpy Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "77bf1310-634e-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner Attacks Histogram", + "visState": "{\"title\":\"Tanner Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "8a455850-4ad5-11e8-ab1b-fdef76c312f4", + "_type": "visualization", + "_source": { + "title": "Ciscoasa Attacks Histogram", + "visState": "{\"title\":\"Ciscoasa Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"},\"valueAxis\":null},\"legendPosition\":\"right\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"2\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"times\":[],\"type\":\"line\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"filters\",\"schema\":\"group\",\"params\":{\"filters\":[{\"input\":{\"query\":\"*\"},\"label\":\"All\"},{\"input\":{\"query\":\"src_port:*\"},\"label\":\"Exploit\"}]}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"language\":\"lucene\",\"query\":\"\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "554c9550-e7fb-11e8-9ac4-13ecd4ad8d70", + "_type": "visualization", + "_source": { + "title": "Medpot Attacks Histogram", + "visState": "{\"title\":\"Medpot Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Events-Histogram", + "_type": "visualization", + "_source": { + "title": "Cowrie Attacks Histogram", + "visState": "{\"title\":\"Cowrie Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"rotate\":0,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{\"vis\":{\"legendOpen\":true}}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Events-Histogram", + "_type": "visualization", + "_source": { + "title": "Dionaea Attacks Histogram", + "visState": "{\"title\":\"Dionaea Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-Events-Histogram", + "_type": "visualization", + "_source": { + "title": "Conpot Attacks Histogram", + "visState": "{\"title\":\"Conpot Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"3\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"type\":\"line\",\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d3bb9bd0-4863-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding Attacks Histogram", + "visState": "{\"title\":\"Heralding Attacks Histogram\",\"type\":\"line\",\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"},\"valueAxis\":null},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100,\"filter\":false},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2},{\"show\":true,\"mode\":\"normal\",\"type\":\"line\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"data\":{\"id\":\"2\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "50aa1940-e851-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton Attacks Histogram", + "visState": "{\"title\":\"Glutton Attacks Histogram\",\"type\":\"line\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"},{\"data\":{\"id\":\"2\",\"label\":\"Unique Src IPs\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":true,\"showCircles\":true,\"type\":\"line\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"line\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d2405e70-8b5e-11e7-ba35-0d8832ac304f", + "_type": "visualization", + "_source": { + "title": "Mailoney - Attacks by Country", + "visState": "{\"title\":\"Mailoney - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "51c331f0-8b54-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy - Attacks by Country", + "visState": "{\"title\":\"Rdpy - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d968d5e0-6350-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner - Attacks by Country", + "visState": "{\"title\":\"Tanner - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e1969e20-4878-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding - Attacks by Country", + "visState": "{\"title\":\"Heralding - Attacks by Country\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ElasticPot-Countries-Top-10", + "_type": "visualization", + "_source": { + "title": "ElasticPot - Attacks by Country", + "visState": "{\"title\":\"ElasticPot - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Countries-Top-10", + "_type": "visualization", + "_source": { + "title": "Dionaea - Attacks by Country", + "visState": "{\"title\":\"Dionaea - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-Countries-Top-10", + "_type": "visualization", + "_source": { + "title": "Conpot - Attacks by Country", + "visState": "{\"title\":\"Conpot - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Countries-Top-10", + "_type": "visualization", + "_source": { + "title": "Cowrie - Attacks by Country", + "visState": "{\"title\":\"Cowrie - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "88d899e0-8b5f-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Mailoney - Attacks by Country Histogram", + "visState": "{\"title\":\"Mailoney - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Events\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "0464b030-e852-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton - Attacks by Country", + "visState": "{\"title\":\"Glutton - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "15b696f0-e7fd-11e8-9ac4-13ecd4ad8d70", + "_type": "visualization", + "_source": { + "title": "Medpot - Attacks by Country", + "visState": "{\"title\":\"Medpot - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "fe02b580-4ad5-11e8-ab1b-fdef76c312f4", + "_type": "visualization", + "_source": { + "title": "Ciscoasa - Attacks by Country", + "visState": "{\"title\":\"Ciscoasa - Attacks by Country\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeytrap-Countries-Top-10", + "_type": "visualization", + "_source": { + "title": "Honeytrap - Attacks by Country", + "visState": "{\"title\":\"Honeytrap - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Glastopf-Countries-Top-10", + "_type": "visualization", + "_source": { + "title": "Glastopf - Attacks by Country", + "visState": "{\"title\":\"Glastopf - Attacks by Country\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Glastopf-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e055e240-e851-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton - Attacks by Country Histogram", + "visState": "{\"title\":\"Glutton - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "490b4e60-e7fd-11e8-9ac4-13ecd4ad8d70", + "_type": "visualization", + "_source": { + "title": "Medpot - Attacks by Country Histogram", + "visState": "{\"title\":\"Medpot - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Attacks\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "6ee57da0-634f-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner - Attacks by Country Histogram", + "visState": "{\"title\":\"Tanner - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\",\"interpolate\":\"linear\",\"lineWidth\":2}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "da489b20-8b52-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy - Attacks by Country Histogram", + "visState": "{\"title\":\"Rdpy - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ElasticPot-Events-by-Country-Histogram", + "_type": "visualization", + "_source": { + "title": "ElasticPot - Attacks by Country Histogram", + "visState": "{\"title\":\"ElasticPot - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-Events-by-Country-Histogram", + "_type": "visualization", + "_source": { + "title": "Conpot - Attacks by Country Histogram", + "visState": "{\"title\":\"Conpot - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Events-by-Country-Histogram", + "_type": "visualization", + "_source": { + "title": "Cowrie - Attacks by Country Histogram", + "visState": "{\"title\":\"Cowrie - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":true,\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\",\"interpolate\":\"linear\",\"lineWidth\":2}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d0dbe890-4870-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding - Attacks by Country Histogram", + "visState": "{\"title\":\"Heralding - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"type\":\"area\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "a72ec5f0-4ad5-11e8-ab1b-fdef76c312f4", + "_type": "visualization", + "_source": { + "title": "Ciscoasa - Attacks by Country Histogram", + "visState": "{\"title\":\"Ciscoasa - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"type\":\"area\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeytrap-Events-by-Country-Histogram", + "_type": "visualization", + "_source": { + "title": "Honeytrap - Attacks by Country Histogram", + "visState": "{\"title\":\"Honeytrap - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Glastopf-Events-by-Country-Histogram", + "_type": "visualization", + "_source": { + "title": "Glastopf - Attacks by Country Histogram", + "visState": "{\"title\":\"Glastopf - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Glastopf-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Events-by-Country-Histogram", + "_type": "visualization", + "_source": { + "title": "Dionaea - Attacks by Country Histogram", + "visState": "{\"title\":\"Dionaea - Attacks by Country Histogram\",\"type\":\"area\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"Timestamp\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"interpolate\":\"linear\",\"legendPosition\":\"right\",\"radiusRatio\":9,\"scale\":\"square root\",\"seriesParams\":[{\"data\":{\"id\":\"1\",\"label\":\"Attacks\"},\"drawLinesBetweenPoints\":true,\"interpolate\":\"linear\",\"lineWidth\":2,\"mode\":\"normal\",\"show\":\"true\",\"showCircles\":true,\"type\":\"area\",\"valueAxis\":\"ValueAxis-1\"}],\"setYExtents\":false,\"shareYAxis\":true,\"showCircles\":true,\"smoothLines\":false,\"times\":[],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":100},\"name\":\"LeftAxis-1\",\"position\":\"left\",\"scale\":{\"mode\":\"normal\",\"type\":\"square root\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"\"},\"type\":\"value\"}],\"yAxis\":{},\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geoip.country_name.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "2a543aa0-4ad6-11e8-ab1b-fdef76c312f4", + "_type": "visualization", + "_source": { + "title": "Ciscoasa - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Ciscoasa - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "082111a0-80cf-11e7-ab37-eb92b1bfb573", + "_type": "visualization", + "_source": { + "title": "Conpot - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Conpot - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ElasticPot-Source-IP-Top-10", + "_type": "visualization", + "_source": { + "title": "ElasticPot - Attacker Src IP - Top 10", + "visState": "{\"title\":\"ElasticPot - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeytrap-Source-IP-Top-10", + "_type": "visualization", + "_source": { + "title": "Honeytrap - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Honeytrap - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Glastop-Source-IP-Top-10", + "_type": "visualization", + "_source": { + "title": "Glastopf - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Glastopf - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Glastopf-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Source-IP-Top-10", + "_type": "visualization", + "_source": { + "title": "Dionaea - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Dionaea - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showTotal\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "21ad1c80-488a-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Heralding - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "844f33f0-488a-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Heralding - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ba9d6280-8b5f-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Mailoney - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Mailoney - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "41d04290-e852-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Glutton - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e3f00420-e7fd-11e8-9ac4-13ecd4ad8d70", + "_type": "visualization", + "_source": { + "title": "Medpot - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Medpot - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "874be060-8b54-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Rdpy - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Source-IP-Top-10", + "_type": "visualization", + "_source": { + "title": "Tanner - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Tanner - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "48d3dad0-e725-11e8-b4a6-215b0b97c069", + "_type": "visualization", + "_source": { + "title": "Cowrie - Attacker Src IP - Top 10", + "visState": "{\"title\":\"Cowrie - Attacker Src IP - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"src_ip.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Source IP\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ad6dcb50-8b5e-11e7-ba35-0d8832ac304f", + "_type": "visualization", + "_source": { + "title": "Mailoney - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Mailoney - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "21c65b10-e852-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Glutton - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "5b69e990-e7fd-11e8-9ac4-13ecd4ad8d70", + "_type": "visualization", + "_source": { + "title": "Medpot - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Medpot - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "73364660-8b54-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Rdpy - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ElasticPot-ASN-Top-10", + "_type": "visualization", + "_source": { + "title": "ElasticPot - Attacker AS/N - Top 10", + "visState": "{\"title\":\"ElasticPot - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeytrap-ASN-Top-10", + "_type": "visualization", + "_source": { + "title": "Honeytrap - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Honeytrap - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Glastopf-ASN-Top-10", + "_type": "visualization", + "_source": { + "title": "Glastopf - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Glastopf - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Glastopf-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-ASN-Top-10", + "_type": "visualization", + "_source": { + "title": "Conpot - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Conpot - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-ASN-Top-10", + "_type": "visualization", + "_source": { + "title": "Cowrie - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Cowrie - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "a427e6c0-e521-11e8-8a75-d5f374dbaebe", + "_type": "visualization", + "_source": { + "title": "Conpot - Attacks by Destination Ports Histogram", + "visState": "{\"title\":\"Conpot - Attacks by Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"@timestamp per 30 seconds\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "2a6803f0-80e7-11e7-a689-67e589a14a8a", + "_type": "visualization", + "_source": { + "title": "Cowrie - Attacks by Destination Ports Histogram", + "visState": "{\"title\":\"Cowrie - Attacks by Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"@timestamp per 30 seconds\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "f28b8c60-80e4-11e7-ba6f-4542711dd148", + "_type": "visualization", + "_source": { + "title": "Cowrie - Attacks by Destination Ports Histogram Incoming", + "visState": "{\"title\":\"Cowrie - Attacks by Destination Ports Histogram Incoming\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"filters\",\"schema\":\"group\",\"params\":{\"filters\":[{\"input\":{\"query\":\"dest_port:22\"},\"label\":\"SSH\"},{\"input\":{\"query\":\"dest_port:23\"},\"label\":\"Telnet\"}]}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "1a80b720-4ad6-11e8-ab1b-fdef76c312f4", + "_type": "visualization", + "_source": { + "title": "Ciscoasa - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Ciscoasa - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "06628c70-6352-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Tanner - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-ASN-Top-10", + "_type": "visualization", + "_source": { + "title": "Dionaea - Attacker AS/N - Top 10", + "visState": "{\"title\":\"Dionaea - Attacker AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-ASN-Top-10", + "_type": "visualization", + "_source": { + "title": "Suricata - AS/N - Top 10", + "visState": "{\"title\":\"Suricata - AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-ASN-Top-10", + "_type": "visualization", + "_source": { + "title": "NGINX - AS/N - Top 10", + "visState": "{\"title\":\"NGINX - AS/N - Top 10\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"showMetricsAtAllLevels\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"CNT\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.asn\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"AS\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"geoip.as_org.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"ASN\"}}]}", + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Ports-Pie", + "_type": "visualization", + "_source": { + "title": "Cowrie - Attacks by Port", + "visState": "{\"title\":\"Cowrie - Attacks by Port\",\"type\":\"pie\",\"params\":{\"addLegend\":true,\"addTooltip\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"shareYAxis\":true,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"filters\",\"schema\":\"segment\",\"params\":{\"filters\":[{\"input\":{\"query\":\"dest_port:22\"},\"label\":\"SSH\"},{\"input\":{\"query\":\"dest_port:23\"},\"label\":\"Telnet\"}]}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "9d251bd0-e851-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton - Attacks by Destination Ports Histogram", + "visState": "{\"title\":\"Glutton - Attacks by Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ec53e470-8376-11e7-9adb-2955c2136c8c", + "_type": "visualization", + "_source": { + "title": "Honeytrap - Attacks by Destination Ports Histogram", + "visState": "{\"title\":\"Honeytrap - Attacks by Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "7e33e3d0-810c-11e7-8413-9fe5e30ade77", + "_type": "visualization", + "_source": { + "title": "Dionaea - Attacks by Destination Ports Histogram", + "visState": "{\"title\":\"Dionaea - Attacks by Destination Ports Histogram\",\"type\":\"area\",\"params\":{\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{\"text\":\"Timestamp\"}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"area\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"step-after\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"type\":\"area\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"dest_port\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Timestamp\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "7e6121d0-e851-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton - Attacks by Port", + "visState": "{\"title\":\"Glutton - Attacks by Port\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"dest_port\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "864b2f30-4883-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding - Attacks by Port", + "visState": "{\"title\":\"Heralding - Attacks by Port\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"dest_port\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "56cdedf0-ec08-11e8-96db-ebfb2a58ccf6", + "_type": "visualization", + "_source": { + "title": "Username Tagcloud", + "visState": "{\"title\":\"Username Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"fromDegree\":\"0\",\"maxFontSize\":64,\"minFontSize\":16,\"orientation\":\"single\",\"orientations\":1,\"scale\":\"linear\",\"showLabel\":false,\"spiral\":\"rectangular\",\"textScale\":\"sqrt\",\"timeInterval\":\"500\",\"toDegree\":\"0\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"username.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"}}]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"(type.keyword:\\\"Cowrie\\\" AND system:\\\"ssh\\\") OR type.keyword:\\\"Dionaea\\\" OR type.keyword:\\\"Heralding\\\" OR type.keyword:\\\"RDPY\\\"\"},\"filter\":[],\"index\":\"logstash-*\"}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Destination-Ports-Top-10", + "_type": "visualization", + "_source": { + "title": "Dionaea - Attacks by Port", + "visState": "{\"title\":\"Dionaea - Attacks by Port\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"dest_port\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeytrap-Destination-Ports-Top-10", + "_type": "visualization", + "_source": { + "title": "Honeytrap - Attacks by Port", + "visState": "{\"title\":\"Honeytrap - Attacks by Port\",\"type\":\"pie\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"isDonut\":true,\"legendPosition\":\"right\",\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"dest_port\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "9b89ddb0-ec07-11e8-96db-ebfb2a58ccf6", + "_type": "visualization", + "_source": { + "title": "Password Tagcloud", + "visState": "{\"title\":\"Password Tagcloud\",\"type\":\"tagcloud\",\"params\":{\"font\":\"serif\",\"fontStyle\":\"normal\",\"fontWeight\":\"normal\",\"fromDegree\":0,\"maxFontSize\":64,\"minFontSize\":16,\"orientation\":\"single\",\"orientations\":1,\"scale\":\"linear\",\"showLabel\":false,\"spiral\":\"rectangular\",\"textScale\":\"sqrt\",\"timeInterval\":500,\"toDegree\":0},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"password.keyword\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{\"spy\":{\"mode\":{\"fill\":false,\"name\":null}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"(type:\\\"Cowrie\\\" AND system:\\\"ssh\\\") OR type:\\\"Dionaea\\\" OR type:\\\"Heralding\\\" OR type:\\\"RDPY\\\"\",\"language\":\"lucene\"},\"filter\":[],\"index\":\"logstash-*\"}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "8d4e8300-ebde-11e8-9675-1b303bfb38ef", + "_type": "dashboard", + "_source": { + "title": ">T-Pot", + "hits": 0, + "description": "T-Pot Dashboard", + "panelsJSON": "[{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":24,\"y\":36,\"w\":12,\"h\":15,\"i\":\"9\"},\"id\":\"P0f-OS-Top-10\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":28,\"y\":85,\"w\":20,\"h\":29,\"i\":\"21\"},\"id\":\"Suricata-Alert-Signature-Top-10\",\"panelIndex\":\"21\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":20,\"y\":85,\"w\":8,\"h\":29,\"i\":\"38\"},\"id\":\"1a097850-7c22-11e7-aa1e-6bf93670d67b\",\"panelIndex\":\"38\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":24,\"y\":51,\"w\":24,\"h\":15,\"i\":\"43\"},\"id\":\"e624bc50-7dd6-11e7-bee2-c98307c16efa\",\"panelIndex\":\"43\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":0,\"y\":85,\"w\":12,\"h\":29,\"i\":\"44\"},\"id\":\"d94ff2a0-7ec2-11e7-a286-9f03beba6417\",\"panelIndex\":\"44\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"gridData\":{\"x\":36,\"y\":36,\"w\":12,\"h\":15,\"i\":\"45\"},\"id\":\"50d82860-7ea0-11e7-a286-9f03beba6417\",\"panelIndex\":\"45\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"spy\":{\"mode\":{\"fill\":false,\"name\":null}},\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":0,\"y\":21,\"w\":16,\"h\":15,\"i\":\"46\"},\"id\":\"7b61a6a0-7ebf-11e7-a286-9f03beba6417\",\"panelIndex\":\"46\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":false}},\"gridData\":{\"x\":0,\"y\":6,\"w\":16,\"h\":15,\"i\":\"47\"},\"id\":\"87428ba0-7e9d-11e7-a286-9f03beba6417\",\"panelIndex\":\"47\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":false}},\"gridData\":{\"x\":16,\"y\":6,\"w\":16,\"h\":15,\"i\":\"48\"},\"id\":\"762f66c0-7e9e-11e7-a286-9f03beba6417\",\"panelIndex\":\"48\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"gridData\":{\"x\":12,\"y\":36,\"w\":12,\"h\":15,\"i\":\"49\"},\"id\":\"0d947000-7ebd-11e7-a286-9f03beba6417\",\"panelIndex\":\"49\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":32,\"y\":21,\"w\":16,\"h\":15,\"i\":\"50\"},\"id\":\"885928c0-7ebe-11e7-a286-9f03beba6417\",\"panelIndex\":\"50\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":16,\"y\":21,\"w\":16,\"h\":15,\"i\":\"51\"},\"id\":\"ef227eb0-7e9d-11e7-a286-9f03beba6417\",\"panelIndex\":\"51\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"mapCenter\":[24.5271348225978,-5.273437500000001],\"mapZoom\":1},\"gridData\":{\"x\":32,\"y\":6,\"w\":16,\"h\":15,\"i\":\"52\"},\"id\":\"d1aa9740-7e9e-11e7-a286-9f03beba6417\",\"panelIndex\":\"52\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":12,\"y\":85,\"w\":8,\"h\":29,\"i\":\"53\"},\"id\":\"772cb2b0-7ec3-11e7-a7c8-5f38ad5bf75f\",\"panelIndex\":\"53\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":0,\"y\":36,\"w\":12,\"h\":15,\"i\":\"54\"},\"id\":\"349c11c0-7ea0-11e7-a286-9f03beba6417\",\"panelIndex\":\"54\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":true}},\"gridData\":{\"x\":0,\"y\":51,\"w\":24,\"h\":15,\"i\":\"55\"},\"id\":\"f1a19000-7ebf-11e7-a286-9f03beba6417\",\"panelIndex\":\"55\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":0,\"w\":48,\"h\":6,\"i\":\"56\"},\"id\":\"e77bc660-e9d3-11e8-be2c-8fd05c77f582\",\"panelIndex\":\"56\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":66,\"w\":24,\"h\":19,\"i\":\"57\"},\"id\":\"56cdedf0-ec08-11e8-96db-ebfb2a58ccf6\",\"panelIndex\":\"57\",\"type\":\"visualization\",\"version\":\"6.4.3\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":24,\"y\":66,\"w\":24,\"h\":19,\"i\":\"58\"},\"id\":\"9b89ddb0-ec07-11e8-96db-ebfb2a58ccf6\",\"panelIndex\":\"58\",\"type\":\"visualization\",\"version\":\"6.4.3\"}]", + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":false}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "63d0bf60-e851-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton Attack Map", + "visState": "{\"title\":\"Glutton Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "a81cba70-e7fc-11e8-9ac4-13ecd4ad8d70", + "_type": "visualization", + "_source": { + "title": "Medpot Attack Map", + "visState": "{\"title\":\"Medpot Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "b8745000-4ad5-11e8-ab1b-fdef76c312f4", + "_type": "visualization", + "_source": { + "title": "Ciscoasa Attack Map", + "visState": "{\"title\":\"Ciscoasa Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatClusterSize\":1.5,\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"wms\":{\"enabled\":false,\"options\":{\"format\":\"image/png\",\"transparent\":true,\"layers\":\"OSM-WMS\",\"version\":\"1.3.0\",\"styles\":\"\",\"attribution\":\"© OpenStreetMap contributors\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.2.4\",\"minZoom\":0,\"maxZoom\":10,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.2.4\",\"minZoom\":0,\"maxZoom\":10,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]},\"url\":\"http://ows.terrestris.de/osm/service\"},\"colorSchema\":\"Yellow to Red\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":2.2851562500000004,\"lat\":37.85750715625203},\"precision\":2}}]}", + "uiStateJSON": "{\"mapZoom\":2,\"mapCenter\":[37.782941450067156,2.458449960686267]}", + "description": "", + "savedSearchId": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "94ae10e0-4871-11e8-9b3d-f36e8d4f5cb2", + "_type": "visualization", + "_source": { + "title": "Heralding Attack Map", + "visState": "{\"title\":\"Heralding Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatClusterSize\":1.5,\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"wms\":{\"enabled\":false,\"options\":{\"format\":\"image/png\",\"transparent\":true,\"layers\":\"OSM-WMS\",\"version\":\"1.3.0\",\"attribution\":\"© OpenStreetMap contributors\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.2.4\",\"minZoom\":0,\"maxZoom\":10,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.2.4\",\"minZoom\":0,\"maxZoom\":10,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]},\"url\":\"http://ows.terrestris.de/osm/service\"},\"colorSchema\":\"Yellow to Red\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e77bc660-e9d3-11e8-be2c-8fd05c77f582", + "_type": "visualization", + "_source": { + "title": "Honeypot Attacks - Top 10", + "visState": "{\"title\":\"Honeypot Attacks - Top 10\",\"type\":\"metric\",\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":24}}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"type.keyword\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "c0916430-8b5e-11e7-ba35-0d8832ac304f", + "_type": "visualization", + "_source": { + "title": "Mailoney Attack Map", + "visState": "{\"title\":\"Mailoney Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e4b7cf40-8b52-11e7-b92d-d39e43e3de0f", + "_type": "visualization", + "_source": { + "title": "Rdpy Attack Map", + "visState": "{\"title\":\"Rdpy Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "f8e24f20-634e-11e8-be86-73985bedf977", + "_type": "visualization", + "_source": { + "title": "Tanner Attack Map", + "visState": "{\"title\":\"Tanner Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.2.4\",\"minZoom\":0,\"maxZoom\":10,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.2.4\",\"minZoom\":0,\"maxZoom\":10,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"heatClusterSize\":1.5,\"colorSchema\":\"Yellow to Red\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ElasticPot-Map", + "_type": "visualization", + "_source": { + "title": "ElasticPot Attack Map", + "visState": "{\"title\":\"ElasticPot Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Honeytrap-Map", + "_type": "visualization", + "_source": { + "title": "Honeytrap Attack Map", + "visState": "{\"title\":\"Honeytrap Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "NGINX-Map", + "_type": "visualization", + "_source": { + "title": "NGINX Attack Map", + "visState": "{\"title\":\"NGINX Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Glastopf-Map", + "_type": "visualization", + "_source": { + "title": "Glastopf Attack Map", + "visState": "{\"title\":\"Glastopf Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Scaled Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Glastopf-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ConPot-Map", + "_type": "visualization", + "_source": { + "title": "Conpot Attack Map", + "visState": "{\"title\":\"Conpot Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d1aa9740-7e9e-11e7-a286-9f03beba6417", + "_type": "visualization", + "_source": { + "title": "Honeypot Attack Map", + "visState": "{\"title\":\"Honeypot Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":0,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.2&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.2&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":3}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeypot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Suricata-Map", + "_type": "visualization", + "_source": { + "title": "Suricata Attack Map", + "visState": "{\"title\":\"Suricata Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Dionaea-Map", + "_type": "visualization", + "_source": { + "title": "Dionaea Attack Map", + "visState": "{\"title\":\"Dionaea Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "Cowrie-Map", + "_type": "visualization", + "_source": { + "title": "Cowrie Attack Map", + "visState": "{\"title\":\"Cowrie Attack Map\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Shaded Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"http://ows.terrestris.de/osm/service\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"OSM-WMS\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"© OpenStreetMap contributors\",\"styles\":\"\"},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.4.3&license=9fb155de-424a-423c-a59a-07b920363565\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

      © OpenStreetMap contributors | Elastic Maps Service

      \",\"subdomains\":[]}},\"legendPosition\":\"bottomright\",\"mapZoom\":2,\"mapCenter\":[0,0],\"colorSchema\":\"Yellow to Red\",\"heatClusterSize\":1.5},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geoip.location\",\"autoPrecision\":true,\"isFilteredByCollar\":true,\"useGeocentroid\":true,\"mapZoom\":2,\"mapCenter\":{\"lon\":0.17578125,\"lat\":-0.17578097424708533},\"precision\":2}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "17130490-e7fb-11e8-9ac4-13ecd4ad8d70", + "_type": "visualization", + "_source": { + "title": "Medpot Attacks", + "visState": "{\n \"title\": \"Medpot Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addLegend\": false,\n \"addTooltip\": true,\n \"metric\": {\n \"colorSchema\": \"Green to Red\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"invertColors\": false,\n \"labels\": {\n \"show\": true\n },\n \"metricColorMode\": \"None\",\n \"percentageMode\": false,\n \"style\": {\n \"bgColor\": false,\n \"bgFill\": \"#000\",\n \"fontSize\": 30,\n \"labelColor\": false,\n \"subText\": \"\"\n },\n \"useRanges\": false\n },\n \"type\": \"metric\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "baa53b00-b597-11e8-9a34-d951cebce834", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"language\": \"lucene\",\n \"query\": \"\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "3814c570-e68e-11e8-b727-735f5b0e1502", + "_type": "visualization", + "_source": { + "title": "ElasticPot Attacks", + "visState": "{\n \"title\": \"ElasticPot Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addLegend\": false,\n \"addTooltip\": true,\n \"metric\": {\n \"colorSchema\": \"Green to Red\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"invertColors\": false,\n \"labels\": {\n \"show\": true\n },\n \"metricColorMode\": \"None\",\n \"percentageMode\": false,\n \"style\": {\n \"bgColor\": false,\n \"bgFill\": \"#000\",\n \"fontSize\": 30,\n \"labelColor\": false,\n \"subText\": \"\"\n },\n \"useRanges\": false\n },\n \"type\": \"metric\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ElasticPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"language\": \"lucene\",\n \"query\": \"\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "45e32dc0-dec5-11e8-87cf-239397d2b8d3", + "_type": "visualization", + "_source": { + "title": "Cowrie Attacks", + "visState": "{\n \"title\": \"Cowrie Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Cowrie-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "465d9810-e5cf-11e8-b72a-b734d2b55cd4", + "_type": "visualization", + "_source": { + "title": "Dionaea Attacks", + "visState": "{\n \"title\": \"Dionaea Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addLegend\": false,\n \"addTooltip\": true,\n \"metric\": {\n \"colorSchema\": \"Green to Red\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"invertColors\": false,\n \"labels\": {\n \"show\": true\n },\n \"metricColorMode\": \"None\",\n \"percentageMode\": false,\n \"style\": {\n \"bgColor\": false,\n \"bgFill\": \"#000\",\n \"fontSize\": 30,\n \"labelColor\": false,\n \"subText\": \"\"\n },\n \"useRanges\": false\n },\n \"type\": \"metric\"\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Dionaea-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"language\": \"lucene\",\n \"query\": \"\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "10e765a0-e51e-11e8-8a75-d5f374dbaebe", + "_type": "visualization", + "_source": { + "title": "Conpot Attacks", + "visState": "{\n \"title\": \"Conpot Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "ConPot-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": []\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d500a3c0-e6b8-11e8-b727-735f5b0e1502", + "_type": "visualization", + "_source": { + "title": "Heralding Attacks", + "visState": "{\n \"title\": \"Heralding Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "f2742de0-e745-11e8-b4a6-215b0b97c069", + "_type": "visualization", + "_source": { + "title": "Mailoney Attacks", + "visState": "{\n \"title\": \"Mailoney Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "9c35dd90-6977-11e7-9c11-8d9c11943fa0", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "3f646820-e851-11e8-97df-bbc3de28ece0", + "_type": "visualization", + "_source": { + "title": "Glutton Attacks", + "visState": "{\n \"title\": \"Glutton Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "385ea460-ad22-11e8-942c-a39712fa9ddf", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "535b0c80-e761-11e8-803c-59c072645505", + "_type": "visualization", + "_source": { + "title": "Tanner Attacks", + "visState": "{\n \"title\": \"Tanner Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "d800f130-633f-11e8-be86-73985bedf977", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "94e13130-e756-11e8-b4a6-215b0b97c069", + "_type": "visualization", + "_source": { + "title": "Rdpy Attacks", + "visState": "{\n \"title\": \"Rdpy Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "aa750980-8ab5-11e7-8fef-33e989079c7d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "79a71e90-dec1-11e8-87cf-239397d2b8d3", + "_type": "visualization", + "_source": { + "title": "Ciscoasa Attacks", + "visState": "{\n \"title\": \"Ciscoasa Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": []\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "f5e74220-e725-11e8-b4a6-215b0b97c069", + "_type": "visualization", + "_source": { + "title": "Honeytrap Attacks", + "visState": "{\n \"title\": \"Honeytrap Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Honeytrap-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "409907c0-e6b5-11e8-b727-735f5b0e1502", + "_type": "visualization", + "_source": { + "title": "Glastopf Attacks", + "visState": "{\n \"title\": \"Glastopf Attacks\",\n \"type\": \"metric\",\n \"params\": {\n \"addTooltip\": true,\n \"addLegend\": false,\n \"type\": \"metric\",\n \"metric\": {\n \"percentageMode\": false,\n \"useRanges\": false,\n \"colorSchema\": \"Green to Red\",\n \"metricColorMode\": \"None\",\n \"colorsRange\": [\n {\n \"from\": 0,\n \"to\": 10000\n }\n ],\n \"labels\": {\n \"show\": true\n },\n \"invertColors\": false,\n \"style\": {\n \"bgFill\": \"#000\",\n \"bgColor\": false,\n \"labelColor\": false,\n \"subText\": \"\",\n \"fontSize\": 30\n }\n }\n },\n \"aggs\": [\n {\n \"id\": \"1\",\n \"enabled\": true,\n \"type\": \"count\",\n \"schema\": \"metric\",\n \"params\": {\n \"customLabel\": \"Attacks\"\n }\n },\n {\n \"id\": \"2\",\n \"enabled\": true,\n \"type\": \"cardinality\",\n \"schema\": \"metric\",\n \"params\": {\n \"field\": \"src_ip.keyword\",\n \"customLabel\": \"Unique Src IPs\"\n }\n }\n ]\n}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Glastopf-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\n \"query\": {\n \"query\": \"\",\n \"language\": \"lucene\"\n },\n \"filter\": [],\n \"index\": \"logstash-*\"\n}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "07581df0-e752-11e8-b4a6-215b0b97c069", + "_type": "visualization", + "_source": { + "title": "NGINX Events", + "visState": "{\"title\":\"NGINX Events\",\"type\":\"metric\",\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":30}}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "NGINX-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[],\"index\":\"logstash-*\"}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "4a60fe20-e75f-11e8-803c-59c072645505", + "_type": "visualization", + "_source": { + "title": "Suricata Events", + "visState": "{\"title\":\"Suricata Events\",\"type\":\"metric\",\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":30}}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "Suricata-Logs", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[],\"index\":\"logstash-*\"}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "15f2c000-4ad5-11e8-ab1b-fdef76c312f4", + "_type": "visualization", + "_source": { + "title": "Ciscoasa Attacks Bar", + "visState": "{\"title\":\"Ciscoasa Attacks Bar\",\"type\":\"horizontal_bar\",\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"data\":{\"id\":\"2\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "2934abc0-4ad4-11e8-ab1b-fdef76c312f4", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "2cf90930-47d3-11e8-a905-f74bbc7cbd2d", + "_type": "visualization", + "_source": { + "title": "Heralding Attacks Bar", + "visState": "{\"title\":\"Heralding Attacks Bar\",\"type\":\"horizontal_bar\",\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":false,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":false,\"rotate\":90,\"filter\":false,\"truncate\":200},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"square root\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Attacks\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"showCircles\":true},{\"show\":true,\"mode\":\"normal\",\"type\":\"histogram\",\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"data\":{\"id\":\"2\",\"label\":\"Unique Src IPs\"},\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Attacks\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"src_ip.keyword\",\"customLabel\":\"Unique Src IPs\"}}]}", + "uiStateJSON": "{}", + "description": "", + "savedSearchId": "c2bea500-47ca-11e8-a905-f74bbc7cbd2d", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + } +] \ No newline at end of file diff --git a/host/etc/issue b/host/etc/issue index 30dc8604e..163982234 100644 --- a/host/etc/issue +++ b/host/etc/issue @@ -1,12 +1,12 @@  -┌──────────────────────────────────────────────┐ -│ _____ ____ _ _ _____ _ ___ │ -│|_ _| | _ \\ ___ | |_ / |___ / |/ _ \\ │ -│ | |_____| |_) / _ \\| __| | | / /| | | | |│ -│ | |_____| __/ (_) | |_ | | / /_| | |_| |│ -│ |_| |_| \\___/ \\__| |_|/_/(_)_|\\___/ │ -│ │ -└──────────────────────────────────────────────┘ +┌────────────────────────────────────────────┐ +│ _____ ____ _ _ ___ _ _ │ +│|_ _| | _ \\ ___ | |_ / |( _ ) / / |│ +│ | |_____| |_) / _ \\| __| | |/ _ \\ | | |│ +│ | |_____| __/ (_) | |_ | | (_) || | |│ +│ |_| |_| \\___/ \\__| |_|\\___(_)_|_|│ +│ │ +└────────────────────────────────────────────┘ ,---- [ \n ] [ \d ] [ \t ] @@ -14,6 +14,7 @@ | IP: | SSH: | WEB: +| ADMIN: | `---- diff --git a/host/etc/systemd/tpot.service b/host/etc/systemd/tpot.service index 9de263309..d46837521 100644 --- a/host/etc/systemd/tpot.service +++ b/host/etc/systemd/tpot.service @@ -15,8 +15,9 @@ ExecStartPre=-/opt/tpot/bin/updateip.sh ExecStartPre=-/bin/bash -c '/opt/tpot/bin/clean.sh on' # Remove old containers, images and volumes -ExecStartPre=-/usr/local/bin/docker-compose -f /opt/tpot/etc/tpot.yml down -v -ExecStartPre=-/usr/local/bin/docker-compose -f /opt/tpot/etc/tpot.yml rm -v +ExecStartPre=-/usr/bin/docker-compose -f /opt/tpot/etc/tpot.yml down -v +ExecStartPre=-/usr/bin/docker-compose -f /opt/tpot/etc/tpot.yml rm -v +ExecStartPre=-/bin/bash -c 'docker network rm $(docker network ls -q)' ExecStartPre=-/bin/bash -c 'docker volume rm $(docker volume ls -q)' ExecStartPre=-/bin/bash -c 'docker rm -v $(docker ps -aq)' ExecStartPre=-/bin/bash -c 'docker rmi $(docker images | grep "" | awk \'{print $3}\')' @@ -31,28 +32,16 @@ ExecStartPre=-/bin/chmod 666 /var/run/docker.sock # Set iptables accept rules to avoid forwarding to honeytrap / NFQUEUE # Forward all other connections to honeytrap / NFQUEUE -ExecStartPre=/sbin/iptables -w -A INPUT -s 127.0.0.1 -j ACCEPT -ExecStartPre=/sbin/iptables -w -A INPUT -d 127.0.0.1 -j ACCEPT -ExecStartPre=/sbin/iptables -w -A INPUT -p tcp -m multiport --dports 64295:64303,7634 -j ACCEPT -ExecStartPre=/sbin/iptables -w -A INPUT -p tcp -m multiport --dports 20:23,25,42,69,80,135,443,445,1433,1723,1883,1900 -j ACCEPT -ExecStartPre=/sbin/iptables -w -A INPUT -p tcp -m multiport --dports 3306,3389,5060,5061,5601,5900,27017 -j ACCEPT -ExecStartPre=/sbin/iptables -w -A INPUT -p tcp -m multiport --dports 1025,50100,8080,8081,9200 -j ACCEPT -ExecStartPre=/sbin/iptables -w -A INPUT -p tcp --syn -m state --state NEW -j NFQUEUE +ExecStartPre=/opt/tpot/bin/rules.sh /opt/tpot/etc/tpot.yml set # Compose T-Pot up -ExecStart=/usr/local/bin/docker-compose -f /opt/tpot/etc/tpot.yml up --no-color +ExecStart=/usr/bin/docker-compose -f /opt/tpot/etc/tpot.yml up --no-color # Compose T-Pot down, remove containers and volumes -ExecStop=/usr/local/bin/docker-compose -f /opt/tpot/etc/tpot.yml down -v +ExecStop=/usr/bin/docker-compose -f /opt/tpot/etc/tpot.yml down -v # Remove only previously set iptables rules -ExecStopPost=/sbin/iptables -w -D INPUT -s 127.0.0.1 -j ACCEPT -ExecStopPost=/sbin/iptables -w -D INPUT -d 127.0.0.1 -j ACCEPT -ExecStopPost=/sbin/iptables -w -D INPUT -p tcp -m multiport --dports 64295:64303,7634 -j ACCEPT -ExecStopPost=/sbin/iptables -w -D INPUT -p tcp -m multiport --dports 20:23,25,42,69,80,135,443,445,1433,1723,1883,1900 -j ACCEPT -ExecStopPost=/sbin/iptables -w -D INPUT -p tcp -m multiport --dports 3306,3389,5060,5061,5601,5900,27017 -j ACCEPT -ExecStopPost=/sbin/iptables -w -D INPUT -p tcp -m multiport --dports 1025,50100,8080,8081,9200 -j ACCEPT -ExecStopPost=/sbin/iptables -w -D INPUT -p tcp --syn -m state --state NEW -j NFQUEUE +ExecStopPost=/opt/tpot/bin/rules.sh /opt/tpot/etc/tpot.yml unset [Install] WantedBy=multi-user.target diff --git a/host/etc/systemd/wetty.service b/host/etc/systemd/wetty.service deleted file mode 100644 index 5f6b97176..000000000 --- a/host/etc/systemd/wetty.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=wetty -Requires=sshd.service -After=sshd.service - -[Service] -Restart=always -User=tsec -Group=tsec -ExecStart=/usr/bin/node /usr/local/lib/node_modules/wetty/app.js -p 64300 --host 127.0.0.1 --sshhost 127.0.0.1 --sshport 64295 - -[Install] -WantedBy=multi-user.target diff --git a/host/usr/share/nginx/html/favicon.ico b/host/usr/share/nginx/html/favicon.ico deleted file mode 100644 index a40c23729..000000000 Binary files a/host/usr/share/nginx/html/favicon.ico and /dev/null differ diff --git a/host/usr/share/nginx/html/navbar.html b/host/usr/share/nginx/html/navbar.html deleted file mode 100644 index d3b311a81..000000000 --- a/host/usr/share/nginx/html/navbar.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - T-Pot - - - - -
      - Home - Kibana - ES Head - Netdata - Spiderfoot - Portainer - WebTTY -
      - - diff --git a/install.sh b/install.sh new file mode 100755 index 000000000..417cc9c70 --- /dev/null +++ b/install.sh @@ -0,0 +1,3 @@ +#!/bin/bash +cd iso/installer +./install.sh "$@" diff --git a/iso/installer/install.sh b/iso/installer/install.sh index 91de24fe2..453f5007c 100755 --- a/iso/installer/install.sh +++ b/iso/installer/install.sh @@ -1,23 +1,226 @@ #!/bin/bash -# T-Pot post install script +# T-Pot Universal Installer + +################################## +# Extract command line arguments # +################################## + +myLSB=$(lsb_release -r | awk '{ print $2 }') +myLSB_SUPPORTED="18.04" +myINFO="\ +############################################ +### T-Pot Installer for Ubuntu $myLSB_SUPPORTED LTS ### +############################################ + +Disclaimer: +This script will install T-Pot on this system, by running the script you know what you are doing: +1. SSH will be reconfigured to tcp/64295 +2. Some packages will be installed, some will be upgraded +3. Please ensure other means of access to this system in case something goes wrong. +4. At best this script well be executed on the console instead through a SSH session. + +########################################### + +Usage: + $0 --help - Help. + +Example: + $0 --type=user - Best option for most users." + +if [ "$myLSB" != "$myLSB_SUPPORTED" ]; + then + echo "Aborting. Ubuntu $myLSB is not supported." + exit +fi +if [ "$1" == "" ]; + then + echo "$myINFO" + exit +fi +for i in "$@" + do + case $i in + --conf=*) + myTPOT_CONF_FILE="${i#*=}" + shift + ;; + --type=user) + myTPOT_DEPLOYMENT_TYPE="${i#*=}" + shift + ;; + --type=auto) + myTPOT_DEPLOYMENT_TYPE="${i#*=}" + shift + ;; + --type=iso) + myTPOT_DEPLOYMENT_TYPE="${i#*=}" + shift + ;; + --help) + echo "Usage: $0 " + echo + echo "--conf=" + echo " Use this if you want to automatically deploy a T-Pot instance (--type=auto implied)." + echo " A configuration example is available in \"tpotce/iso/installer/tpot.conf.dist\"." + echo + echo "--type=<[user, auto, iso]>" + echo " user, use this if you want to manually install a T-Pot on a Ubuntu 18.04 LTS machine." + echo " auto, implied if a configuration file is passed as an argument for automatic deployment." + echo " iso, use this if you are a T-Pot developer and want to install a T-Pot from a pre-compiled iso." + echo + exit + ;; + *) + echo "$myINFO" + exit + ;; + esac + done + + +################################################### +# Validate command line arguments and load config # +################################################### + +# If a valid config file exists, set deployment type to "auto" and load the configuration +if [ "$myTPOT_DEPLOYMENT_TYPE" == "auto" ] && [ "$myTPOT_CONF_FILE" == "" ]; + then + echo "Aborting. No configuration file given." + exit +fi +if [ -s "$myTPOT_CONF_FILE" ] && [ "$myTPOT_CONF_FILE" != "" ]; + then + myTPOT_DEPLOYMENT_TYPE="auto" + if [ "$(head -n 1 $myTPOT_CONF_FILE | grep -c "# tpot")" == "1" ]; + then + source "$myTPOT_CONF_FILE" + else + echo "Aborting. Config file \"$myTPOT_CONF_FILE\" not a T-Pot configuration file." + exit + fi + elif ! [ -s "$myTPOT_CONF_FILE" ] && [ "$myTPOT_CONF_FILE" != "" ]; + then + echo "Aborting. Config file \"$myTPOT_CONF_FILE\" not found." + exit +fi + + +####################### +# Prepare environment # +####################### + +# Got root? +function fuGOT_ROOT { +echo +echo -n "### Checking for root: " +if [ "$(whoami)" != "root" ]; + then + echo "[ NOT OK ]" + echo "### Please run as root." + echo "### Example: sudo $0" + exit + else + echo "[ OK ]" +fi +} + +# Let's check if all dependencies are met +function fuGET_DEPS { +local myPACKAGES="apache2-utils apparmor apt-transport-https aufs-tools bash-completion build-essential ca-certificates cgroupfs-mount cockpit cockpit-docker curl debconf-utils dialog dnsutils docker.io docker-compose dstat ethtool fail2ban genisoimage git glances grc html2text htop ifupdown iptables iw jq libcrack2 libltdl7 lm-sensors man mosh multitail net-tools npm ntp openssh-server openssl pass prips software-properties-common syslinux psmisc pv python-pip unattended-upgrades unzip vim wireless-tools wpasupplicant" +apt-get -y update +apt-get -y install software-properties-common +add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse" +echo +echo "### Getting update information." +echo +apt-get -y update +echo +echo "### Upgrading packages." +echo +# Downlaod and upgrade packages, but silently keep existing configs +echo "docker.io docker.io/restart boolean true" | debconf-set-selections -v +echo "debconf debconf/frontend select noninteractive" | debconf-set-selections -v +apt-get -y dist-upgrade -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes +echo +echo "### Installing T-Pot dependencies." +echo +apt-get -y install $myPACKAGES +} + +# Let's load dialog color theme +function fuDIALOG_SETUP { +echo +echo -n "### Checking for dialogrc: " +if [ -f "dialogrc" ]; + then + echo "[ OK ]" + cp dialogrc /etc/ + else + echo "[ NOT OK ]" + echo "### 'dialogrc' is missing. Please run 'install.sh' from within the setup folder." + exit + fi +} + +# Let's check for other services +function fuCHECK_PORTS { +if [ "$myTPOT_DEPLOYMENT_TYPE" == "user" ]; + then + echo + echo "### Checking for active services." + echo + grc netstat -tulpen + echo + echo "### Please review your running services." + echo "### We will take care of SSH (22), but other services i.e. FTP (21), TELNET (23), SMTP (25), HTTP (80), HTTPS (443), etc." + echo "### might collide with T-Pot's honeypots and prevent T-Pot from starting successfully." + echo + while [ 1 != 2 ] + do + read -s -n 1 -p "Continue [y/n]? " mySELECT + echo + case "$mySELECT" in + [y,Y]) + break + ;; + [n,N]) + exit + ;; + esac + done +fi +} + + +# Prepare running the installer +echo "$myINFO" | head -n 3 +fuGOT_ROOT +fuGET_DEPS +fuCHECK_PORTS +fuDIALOG_SETUP + + +############# +# Installer # +############# # Set TERM, DIALOGRC export TERM=linux export DIALOGRC=/etc/dialogrc -# Let's load dialog color theme -cp /root/installer/dialogrc /etc/ - -# Some global vars -myPROXYFILEPATH="/root/installer/proxy" -myNTPCONFPATH="/root/installer/ntp" -myPFXPATH="/root/installer/keys/8021x.pfx" -myPFXPWPATH="/root/installer/keys/8021x.pw" -myPFXHOSTIDPATH="/root/installer/keys/8021x.id" -myTPOTCOMPOSE="/opt/tpot/etc/tpot.yml" +####################### +# Global vars section # +####################### + myBACKTITLE="T-Pot-Installer" -mySITES="https://index.docker.io https://github.com https://pypi.python.org https://ubuntu.com" +myCONF_FILE="/root/installer/iso.conf" myPROGRESSBOXCONF=" --backtitle "$myBACKTITLE" --progressbox 24 80" +mySITES="https://hub.docker.com https://github.com https://pypi.python.org https://ubuntu.com" +myTPOTCOMPOSE="/opt/tpot/etc/tpot.yml" + +##################### +# Functions section # +##################### fuRANDOMWORD () { local myWORDFILE="$1" @@ -27,216 +230,247 @@ fuRANDOMWORD () { echo -n $(sed -n "$myNUM p" $myWORDFILE | tr -d \' | tr A-Z a-z) } -# Let's wait a few seconds to avoid interference with service messages -sleep 3 -tput civis -dialog --no-ok --no-cancel --backtitle "$myBACKTITLE" --title "[ Wait to avoid interference with service messages ]" --pause "" 6 80 7 +# If this is a ISO installation we need to wait a few seconds to avoid interference with service messages +if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ]; + then + sleep 5 + tput civis + dialog --no-ok --no-cancel --backtitle "$myBACKTITLE" --title "[ Wait to avoid interference with service messages ]" --pause "" 6 80 7 +fi -# Let's setup the proxy for env -if [ -f $myPROXYFILEPATH ]; -then -dialog --title "[ Setting up the proxy ]" $myPROGRESSBOXCONF <&1>/dev/null <&1>/dev/null <&1 | tee -a /etc/environment | dialog --title "[ Setting up the proxy ]" $myPROGRESSBOXCONF + source /etc/environment + + # Let's setup the proxy for apt + echo "$myPROXY_APT" 2>&1 | tee /etc/apt/apt.conf | dialog --title "[ Setting up the proxy ]" $myPROGRESSBOXCONF + + # Let's add proxy settings to docker defaults + echo "$myPROXY_DOCKER" 2>&1 | tee -a /etc/default/docker | dialog --title "[ Setting up the proxy ]" $myPROGRESSBOXCONF -# Let's restart docker for proxy changes to take effect -systemctl stop docker 2>&1 | dialog --title "[ Stop docker service ]" $myPROGRESSBOXCONF -systemctl start docker 2>&1 | dialog --title "[ Start docker service ]" $myPROGRESSBOXCONF + # Let's restart docker for proxy changes to take effect + systemctl stop docker 2>&1 | dialog --title "[ Stop docker service ]" $myPROGRESSBOXCONF + systemctl start docker 2>&1 | dialog --title "[ Start docker service ]" $myPROGRESSBOXCONF fi +### ---> End proxy setup # Let's test the internet connection -mySITESCOUNT=$(echo $mySITES | wc -w) -j=0 -for i in $mySITES; - do - dialog --title "[ Testing the internet connection ]" --backtitle "$myBACKTITLE" \ - --gauge "\n Now checking: $i\n" 8 80 $(expr 100 \* $j / $mySITESCOUNT) <&1>/dev/null - if [ $? -ne 0 ]; - then - dialog --backtitle "$myBACKTITLE" --title "[ Continue? ]" --yesno "\nInternet connection test failed. This might indicate some problems with your connection. You can continue, but the installation might fail." 10 50 - if [ $? = 1 ]; - then - dialog --backtitle "$myBACKTITLE" --title "[ Abort ]" --msgbox "\nInstallation aborted. Exiting the installer." 7 50 - exit - else - break; - fi; - fi; - let j+=1 - dialog --title "[ Testing the internet connection ]" --backtitle "$myBACKTITLE" \ - --gauge "\n Now checking: $i\n" 8 80 $(expr 100 \* $j / $mySITESCOUNT) <&1>/dev/null | dialog --title "[ Testing the internet connection ]" --backtitle "$myBACKTITLE" \ + --gauge "\n Now checking: $i\n" 8 80 $(expr 100 \* $j / $mySITESCOUNT) + if [ $? -ne 0 ]; + then + dialog --backtitle "$myBACKTITLE" --title "[ Continue? ]" --yesno "\nInternet connection test failed. This might indicate some problems with your connection. You can continue, but the installation might fail." 10 50 + if [ $? = 1 ]; + then + dialog --backtitle "$myBACKTITLE" --title "[ Abort ]" --msgbox "\nInstallation aborted. Exiting the installer." 7 50 + exit + else + break; + fi; + fi; + let j+=1 + echo 2>&1>/dev/null | dialog --title "[ Testing the internet connection ]" --backtitle "$myBACKTITLE" \ + --gauge "\n Now checking: $i\n" 8 80 $(expr 100 \* $j / $mySITESCOUNT) + done; +fi +# Let's put cursor back in standard form +tput cnorm -# Let's remove NGINX default website -#fuECHO "### Removing NGINX default website." -rm -rf /etc/nginx/sites-enabled/default 2>&1 | dialog --title "[ Removing NGINX default website. ]" $myPROGRESSBOXCONF; -rm -rf /etc/nginx/sites-available/default 2>&1 | dialog --title "[ Removing NGINX default website. ]" $myPROGRESSBOXCONF; -rm -rf /usr/share/nginx/html/index.html 2>&1 | dialog --title "[ Removing NGINX default website. ]" $myPROGRESSBOXCONF; +#################### +# User interaction # +#################### -# Let's ask user for install flavor -# Install types are TPOT, HP, INDUSTRIAL, ALL -tput cnorm -myFLAVOR=$(dialog --no-cancel --backtitle "$myBACKTITLE" --title "[ Choose your edition ]" --no-tags --menu \ -"\nRequired: 4GB RAM, 64GB disk\nRecommended: 8GB RAM, 128GB SSD" 14 60 4 \ -"TPOT" "Standard Honeypots, Suricata & ELK" \ -"HP" "Honeypots only, w/o Suricata & ELK" \ -"INDUSTRIAL" "Conpot, eMobility, Suricata & ELK" \ -"EVERYTHING" "Everything" 3>&1 1>&2 2>&3 3>&-) - -# Let's ask for a secure tsec password -myUSER="tsec" -myPASS1="pass1" -myPASS2="pass2" -mySECURE="0" -while [ "$myPASS1" != "$myPASS2" ] && [ "$mySECURE" == "0" ] - do - while [ "$myPASS1" == "pass1" ] || [ "$myPASS1" == "" ] +# Let's ask the user for install flavor +if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ] || [ "$myTPOT_DEPLOYMENT_TYPE" == "user" ]; + then + myCONF_TPOT_FLAVOR=$(dialog --no-cancel --backtitle "$myBACKTITLE" --title "[ Choose Your T-Pot NG Edition ]" --menu \ + "\nRequired: 6GB RAM, 128GB SSD\nRecommended: 8GB RAM, 256GB SSD" 15 70 7 \ + "STANDARD" "Honeypots, ELK, NSM & Tools" \ + "SENSOR" "Just Honeypots, EWS Poster & NSM" \ + "INDUSTRIAL" "Conpot, RDPY, Vnclowpot, ELK, NSM & Tools" \ + "COLLECTOR" "Heralding, ELK, NSM & Tools" \ + "NEXTGEN" "NextGen (Glutton instead of Honeytrap)" \ + "LEGACY" "Standard Edition from previous release" 3>&1 1>&2 2>&3 3>&-) +fi + +# Let's ask for a secure tsec password if installation type is iso +if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ]; + then + myCONF_TPOT_USER="tsec" + myPASS1="pass1" + myPASS2="pass2" + mySECURE="0" + while [ "$myPASS1" != "$myPASS2" ] && [ "$mySECURE" == "0" ] do - myPASS1=$(dialog --insecure --backtitle "$myBACKTITLE" \ - --title "[ Enter password for console user (tsec) ]" \ - --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) - done - myPASS2=$(dialog --insecure --backtitle "$myBACKTITLE" \ - --title "[ Repeat password for console user (tsec) ]" \ - --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) - if [ "$myPASS1" != "$myPASS2" ]; - then - dialog --backtitle "$myBACKTITLE" --title "[ Passwords do not match. ]" \ - --msgbox "\nPlease re-enter your password." 7 60 - myPASS1="pass1" - myPASS2="pass2" - fi - mySECURE=$(printf "%s" "$myPASS1" | cracklib-check | grep -c "OK") - if [ "$mySECURE" == "0" ] && [ "$myPASS1" == "$myPASS2" ]; - then - dialog --backtitle "$myBACKTITLE" --title "[ Password is not secure ]" --defaultno --yesno "\nKeep insecure password?" 7 50 - myOK=$? - if [ "$myOK" == "1" ]; + while [ "$myPASS1" == "pass1" ] || [ "$myPASS1" == "" ] + do + myPASS1=$(dialog --insecure --backtitle "$myBACKTITLE" \ + --title "[ Enter password for console user (tsec) ]" \ + --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) + done + myPASS2=$(dialog --insecure --backtitle "$myBACKTITLE" \ + --title "[ Repeat password for console user (tsec) ]" \ + --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) + if [ "$myPASS1" != "$myPASS2" ]; then + dialog --backtitle "$myBACKTITLE" --title "[ Passwords do not match. ]" \ + --msgbox "\nPlease re-enter your password." 7 60 myPASS1="pass1" myPASS2="pass2" fi - fi - done -printf "%s" "$myUSER:$myPASS1" | chpasswd - -# Let's ask for a web username with secure password -myOK="1" -myUSER="tsec" -myPASS1="pass1" -myPASS2="pass2" -mySECURE="0" -while [ 1 != 2 ] - do - myUSER=$(dialog --backtitle "$myBACKTITLE" --title "[ Enter your web user name ]" --inputbox "\nUsername (tsec not allowed)" 9 50 3>&1 1>&2 2>&3 3>&-) - myUSER=$(echo $myUSER | tr -cd "[:alnum:]_.-") - dialog --backtitle "$myBACKTITLE" --title "[ Your username is ]" --yesno "\n$myUSER" 7 50 - myOK=$? - if [ "$myOK" = "0" ] && [ "$myUSER" != "tsec" ] && [ "$myUSER" != "" ]; - then - break - fi - done -while [ "$myPASS1" != "$myPASS2" ] && [ "$mySECURE" == "0" ] - do - while [ "$myPASS1" == "pass1" ] || [ "$myPASS1" == "" ] + mySECURE=$(printf "%s" "$myPASS1" | cracklib-check | grep -c "OK") + if [ "$mySECURE" == "0" ] && [ "$myPASS1" == "$myPASS2" ]; + then + dialog --backtitle "$myBACKTITLE" --title "[ Password is not secure ]" --defaultno --yesno "\nKeep insecure password?" 7 50 + myOK=$? + if [ "$myOK" == "1" ]; + then + myPASS1="pass1" + myPASS2="pass2" + fi + fi + done + printf "%s" "$myCONF_TPOT_USER:$myPASS1" | chpasswd +fi + +# Let's ask for a web user credentials if deployment type is iso or user +# In case of auto, credentials are created from config values +# Skip this step entirely if SENSOR flavor +if [ "$myTPOT_DEPLOYMENT_TYPE" == "iso" ] || [ "$myTPOT_DEPLOYMENT_TYPE" == "user" ]; + then + myOK="1" + myCONF_WEB_USER="webuser" + myCONF_WEB_PW="pass1" + myCONF_WEB_PW2="pass2" + mySECURE="0" + while [ 1 != 2 ] do - myPASS1=$(dialog --insecure --backtitle "$myBACKTITLE" \ - --title "[ Enter password for your web user ]" \ - --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) + myCONF_WEB_USER=$(dialog --backtitle "$myBACKTITLE" --title "[ Enter your web user name ]" --inputbox "\nUsername (tsec not allowed)" 9 50 3>&1 1>&2 2>&3 3>&-) + myCONF_WEB_USER=$(echo $myCONF_WEB_USER | tr -cd "[:alnum:]_.-") + dialog --backtitle "$myBACKTITLE" --title "[ Your username is ]" --yesno "\n$myCONF_WEB_USER" 7 50 + myOK=$? + if [ "$myOK" = "0" ] && [ "$myCONF_WEB_USER" != "tsec" ] && [ "$myCONF_WEB_USER" != "" ]; + then + break + fi done - myPASS2=$(dialog --insecure --backtitle "$myBACKTITLE" \ + while [ "$myCONF_WEB_PW" != "$myCONF_WEB_PW2" ] && [ "$mySECURE" == "0" ] + do + while [ "$myCONF_WEB_PW" == "pass1" ] || [ "$myCONF_WEB_PW" == "" ] + do + myCONF_WEB_PW=$(dialog --insecure --backtitle "$myBACKTITLE" \ + --title "[ Enter password for your web user ]" \ + --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) + done + myCONF_WEB_PW2=$(dialog --insecure --backtitle "$myBACKTITLE" \ --title "[ Repeat password for your web user ]" \ --passwordbox "\nPassword" 9 60 3>&1 1>&2 2>&3 3>&-) - if [ "$myPASS1" != "$myPASS2" ]; - then - dialog --backtitle "$myBACKTITLE" --title "[ Passwords do not match. ]" \ - --msgbox "\nPlease re-enter your password." 7 60 - myPASS1="pass1" - myPASS2="pass2" - fi - mySECURE=$(printf "%s" "$myPASS1" | cracklib-check | grep -c "OK") - if [ "$mySECURE" == "0" ] && [ "$myPASS1" == "$myPASS2" ]; - then - dialog --backtitle "$myBACKTITLE" --title "[ Password is not secure ]" --defaultno --yesno "\nKeep insecure password?" 7 50 - myOK=$? - if [ "$myOK" == "1" ]; + if [ "$myCONF_WEB_PW" != "$myCONF_WEB_PW2" ]; then - myPASS1="pass1" - myPASS2="pass2" + dialog --backtitle "$myBACKTITLE" --title "[ Passwords do not match. ]" \ + --msgbox "\nPlease re-enter your password." 7 60 + myCONF_WEB_PW="pass1" + myCONF_WEB_PW2="pass2" fi - fi - done -htpasswd -b -c /etc/nginx/nginxpasswd "$myUSER" "$myPASS1" 2>&1 | dialog --title "[ Setting up user and password ]" $myPROGRESSBOXCONF; + mySECURE=$(printf "%s" "$myCONF_WEB_PW" | cracklib-check | grep -c "OK") + if [ "$mySECURE" == "0" ] && [ "$myCONF_WEB_PW" == "$myCONF_WEB_PW2" ]; + then + dialog --backtitle "$myBACKTITLE" --title "[ Password is not secure ]" --defaultno --yesno "\nKeep insecure password?" 7 50 + myOK=$? + if [ "$myOK" == "1" ]; + then + myCONF_WEB_PW="pass1" + myCONF_WEB_PW2="pass2" + fi + fi + done +fi +# If flavor is SENSOR do not write credentials +if ! [ "$myCONF_TPOT_FLAVOR" == "SENSOR" ]; + then + mkdir -p /data/nginx/conf 2>&1 + htpasswd -b -c /data/nginx/conf/nginxpasswd "$myCONF_WEB_USER" "$myCONF_WEB_PW" 2>&1 | dialog --title "[ Setting up user and password ]" $myPROGRESSBOXCONF; +fi -# Let's generate a SSL self-signed certificate without interaction (browsers will see it invalid anyway) + +######################## +# Installation section # +######################## + +# Put cursor in invisible mode tput civis -mkdir -p /etc/nginx/ssl 2>&1 | dialog --title "[ Generating a self-signed-certificate for NGINX ]" $myPROGRESSBOXCONF; + +# Let's generate a SSL self-signed certificate without interaction (browsers will see it invalid anyway) +if ! [ "$myCONF_TPOT_FLAVOR" == "SENSOR" ]; +then +mkdir -p /data/nginx/cert 2>&1 | dialog --title "[ Generating a self-signed-certificate for NGINX ]" $myPROGRESSBOXCONF; openssl req \ -nodes \ -x509 \ -sha512 \ -newkey rsa:8192 \ - -keyout "/etc/nginx/ssl/nginx.key" \ - -out "/etc/nginx/ssl/nginx.crt" \ + -keyout "/data/nginx/cert/nginx.key" \ + -out "/data/nginx/cert/nginx.crt" \ -days 3650 \ -subj '/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd' 2>&1 | dialog --title "[ Generating a self-signed-certificate for NGINX ]" $myPROGRESSBOXCONF; +fi # Let's setup the ntp server -if [ -f $myNTPCONFPATH ]; +if [ "$myCONF_NTP_USE" == "0" ]; then -dialog --title "[ Setting up the ntp server ]" $myPROGRESSBOXCONF <&1 | dialog --title "[ Setting up the ntp server ]" $myPROGRESSBOXCONF + cp $myCONF_NTP_CONF_FILE /etc/ntp.conf 2>&1 | dialog --title "[ Setting up the ntp server ]" $myPROGRESSBOXCONF fi # Let's setup 802.1x networking -if [ -f $myPFXPATH ]; - then -dialog --title "[ Setting 802.1x networking ]" $myPROGRESSBOXCONF <&1 | dialog --title "[ Setting 802.1x networking ]" $myPROGRESSBOXCONF - if [ -f $myPFXPWPATH ]; - then -dialog --title "[ Setting up 802.1x password ]" $myPROGRESSBOXCONF <&1>/dev/null <&1>/dev/null <&1>/dev/null <&1>/dev/null <&1 | dialog --title "[ Setting 802.1x networking ]" $myPROGRESSBOXCONF + echo "$myNETWORK_INTERFACES" 2>&1 | tee -a /etc/network/interfaces | dialog --title "[ Setting 802.1x networking ]" $myPROGRESSBOXCONF + + echo "$myNETWORK_WIRED8021x" 2>&1 | tee /etc/wpa_supplicant/wired8021x.conf | dialog --title "[ Setting 802.1x networking ]" $myPROGRESSBOXCONF + + echo "$myNETWORK_WLAN8021x" 2>&1 | tee /etc/wpa_supplicant/wireless8021x.conf | dialog --title "[ Setting 802.1x networking ]" $myPROGRESSBOXCONF fi # Let's provide a wireless example config ... -fuECHO "### Providing static ip, wireless example config." -tee -a /etc/network/interfaces 2>&1>/dev/null <" -EOF +# wpa-psk \"\" +" +echo "$myNETWORK_WLANEXAMPLE" 2>&1 | tee -a /etc/network/interfaces | dialog --title "[ Provide WLAN example config ]" $myPROGRESSBOXCONF # Let's modify the sources list sed -i '/cdrom/d' /etc/apt/sources.list # Let's make sure SSH roaming is turned off (CVE-2016-0777, CVE-2016-0778) -fuECHO "### Let's make sure SSH roaming is turned off." -tee -a /etc/ssh/ssh_config 2>&1>/dev/null <&1 | dialog --title "[ Pulling updates ]" $myPROGRESSBOXCONF -apt-get upgrade -y 2>&1 | dialog --title "[ Pulling updates ]" $myPROGRESSBOXCONF - -# Let's clean up apt -apt-get autoclean -y 2>&1 | dialog --title "[ Pulling updates ]" $myPROGRESSBOXCONF -apt-get autoremove -y 2>&1 | dialog --title "[ Pulling updates ]" $myPROGRESSBOXCONF +echo "UseRoaming no" 2>&1 | tee -a /etc/ssh/ssh_config | dialog --title "[ Turn SSH roaming off ]" $myPROGRESSBOXCONF -# Installing docker-compose, wetty, ctop, elasticdump, tpot +# Installing ctop, elasticdump, tpot, yq +npm install https://github.com/taskrabbit/elasticsearch-dump -g 2>&1 | dialog --title "[ Installing elasticsearch-dump ]" $myPROGRESSBOXCONF pip install --upgrade pip 2>&1 | dialog --title "[ Installing pip ]" $myPROGRESSBOXCONF -pip install docker-compose==1.16.1 2>&1 | dialog --title "[ Installing docker-compose ]" $myPROGRESSBOXCONF -pip install elasticsearch-curator==5.2.0 2>&1 | dialog --title "[ Installing elasticsearch-curator ]" $myPROGRESSBOXCONF -ln -s /usr/bin/nodejs /usr/bin/node 2>&1 | dialog --title "[ Installing wetty ]" $myPROGRESSBOXCONF -npm install https://github.com/t3chn0m4g3/wetty -g 2>&1 | dialog --title "[ Installing wetty ]" $myPROGRESSBOXCONF -npm install https://github.com/t3chn0m4g3/elasticsearch-dump -g 2>&1 | dialog --title "[ Installing elasticsearch-dump ]" $myPROGRESSBOXCONF -wget https://github.com/bcicen/ctop/releases/download/v0.6.1/ctop-0.6.1-linux-amd64 -O ctop 2>&1 | dialog --title "[ Installing ctop ]" $myPROGRESSBOXCONF -mv ctop /usr/bin/ 2>&1 | dialog --title "[ Installing ctop ]" $myPROGRESSBOXCONF +hash -r 2>&1 | dialog --title "[ Installing pip ]" $myPROGRESSBOXCONF +pip install elasticsearch-curator yq 2>&1 | dialog --title "[ Installing elasticsearch-curator, yq ]" $myPROGRESSBOXCONF +wget https://github.com/bcicen/ctop/releases/download/v0.7.1/ctop-0.7.1-linux-amd64 -O /usr/bin/ctop 2>&1 | dialog --title "[ Installing ctop ]" $myPROGRESSBOXCONF chmod +x /usr/bin/ctop 2>&1 | dialog --title "[ Installing ctop ]" $myPROGRESSBOXCONF git clone https://github.com/dtag-dev-sec/tpotce /opt/tpot 2>&1 | dialog --title "[ Cloning T-Pot ]" $myPROGRESSBOXCONF -# Let's add a new user -addgroup --gid 2000 tpot 2>&1 | dialog --title "[ Adding new user ]" $myPROGRESSBOXCONF -adduser --system --no-create-home --uid 2000 --disabled-password --disabled-login --gid 2000 tpot 2>&1 | dialog --title "[ Adding new user ]" $myPROGRESSBOXCONF +# Let's create the T-Pot user +addgroup --gid 2000 tpot 2>&1 | dialog --title "[ Adding T-Pot user ]" $myPROGRESSBOXCONF +adduser --system --no-create-home --uid 2000 --disabled-password --disabled-login --gid 2000 tpot 2>&1 | dialog --title "[ Adding T-Pot user ]" $myPROGRESSBOXCONF # Let's set the hostname a=$(fuRANDOMWORD /opt/tpot/host/usr/share/dict/a.txt) @@ -349,66 +572,63 @@ n=$(fuRANDOMWORD /opt/tpot/host/usr/share/dict/n.txt) myHOST=$a$n hostnamectl set-hostname $myHOST 2>&1 | dialog --title "[ Setting new hostname ]" $myPROGRESSBOXCONF sed -i 's#127.0.1.1.*#127.0.1.1\t'"$myHOST"'#g' /etc/hosts 2>&1 | dialog --title "[ Setting new hostname ]" $myPROGRESSBOXCONF +if [ -f "/etc/cloud/cloud.cfg" ]; + then + sed -i 's/preserve_hostname: false/preserve_hostname: true/' /etc/cloud/cloud.cfg +fi -# Let's patch sshd_config -sed -i 's#Port 22#Port 64295#' /etc/ssh/sshd_config 2>&1 | dialog --title "[ SSH listen on tcp/64295 ]" $myPROGRESSBOXCONF -sed -i 's#\#PasswordAuthentication yes#PasswordAuthentication no#' /etc/ssh/sshd_config 2>&1 | dialog --title "[ SSH password authentication only from RFC1918 networks ]" $myPROGRESSBOXCONF -tee -a /etc/ssh/sshd_config 2>&1>/dev/null <&1 | dialog --title "[ Cockpit listen on tcp/64294 ]" $myPROGRESSBOXCONF +sed -i '/^port/Id' /etc/ssh/sshd_config 2>&1 | dialog --title "[ SSH listen on tcp/64295 ]" $myPROGRESSBOXCONF +echo "Port 64295" >> /etc/ssh/sshd_config 2>&1 | dialog --title "[ SSH listen on tcp/64295 ]" $myPROGRESSBOXCONF -# Let's make sure only myFLAVOR images will be downloaded and started -case $myFLAVOR in - HP) - echo "### Preparing HONEYPOT flavor installation." - cp /opt/tpot/etc/compose/hp.yml $myTPOTCOMPOSE 2>&1>/dev/null +# Let's make sure only myCONF_TPOT_FLAVOR images will be downloaded and started +case $myCONF_TPOT_FLAVOR in + STANDARD) + echo "### Preparing STANDARD flavor installation." + ln -s /opt/tpot/etc/compose/standard.yml $myTPOTCOMPOSE 2>&1>/dev/null + ;; + SENSOR) + echo "### Preparing SENSOR flavor installation." + ln -s /opt/tpot/etc/compose/sensor.yml $myTPOTCOMPOSE 2>&1>/dev/null ;; INDUSTRIAL) echo "### Preparing INDUSTRIAL flavor installation." - cp /opt/tpot/etc/compose/industrial.yml $myTPOTCOMPOSE 2>&1>/dev/null + ln -s /opt/tpot/etc/compose/industrial.yml $myTPOTCOMPOSE 2>&1>/dev/null + ;; + COLLECTOR) + echo "### Preparing COLLECTOR flavor installation." + ln -s /opt/tpot/etc/compose/collector.yml $myTPOTCOMPOSE 2>&1>/dev/null ;; - TPOT) - echo "### Preparing TPOT flavor installation." - cp /opt/tpot/etc/compose/tpot.yml $myTPOTCOMPOSE 2>&1>/dev/null + NEXTGEN) + echo "### Preparing NEXTGEN flavor installation." + ln -s /opt/tpot/etc/compose/nextgen.yml $myTPOTCOMPOSE 2>&1>/dev/null ;; - EVERYTHING) - echo "### Preparing EVERYTHING flavor installation." - cp /opt/tpot/etc/compose/all.yml $myTPOTCOMPOSE 2>&1>/dev/null + LEGACY) + echo "### Preparing LEGACY flavor installation." + ln -s /opt/tpot/etc/compose/legacy.yml $myTPOTCOMPOSE 2>&1>/dev/null ;; esac -# Let's load docker images -myIMAGESCOUNT=$(cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d: -f2 | wc -l) -j=0 -for name in $(cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d'"' -f2) +# Let's load docker images in parallel +function fuPULLIMAGES { +for name in $(cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d'"' -f2 | uniq) do - dialog --title "[ Downloading docker images, please be patient ]" --backtitle "$myBACKTITLE" \ - --gauge "\n Now downloading: $name\n" 8 80 $(expr 100 \* $j / $myIMAGESCOUNT) <&1>/dev/null - let j+=1 - dialog --title "[ Downloading docker images, please be patient ]" --backtitle "$myBACKTITLE" \ - --gauge "\n Now downloading: $name\n" 8 80 $(expr 100 \* $j / $myIMAGESCOUNT) <&1 | dialog --title "[ Pulling docker images, please be patient ]" $myPROGRESSBOXCONF # Let's add the daily update check with a weekly clean interval -dialog --title "[ Modifying update checks ]" $myPROGRESSBOXCONF <&1>/dev/null <&1 | tee /etc/apt/apt.conf.d/10periodic | dialog --title "[ Modifying update checks ]" $myPROGRESSBOXCONF # Let's make sure to reboot the system after a kernel panic -dialog --title "[ Reboot after kernel panic ]" $myPROGRESSBOXCONF <&1>/dev/null <&1 | tee -a /etc/sysctl.conf | dialog --title "[ Tweak Sysctl ]" $myPROGRESSBOXCONF + +# Let's setup fail2ban config +myFAIL2BANCONF="[DEFAULT] +ignore-ip = 127.0.0.1/8 +bantime = 3600 +findtime = 600 +maxretry = 5 + +[nginx-http-auth] +enabled = true +filter = nginx-http-auth +port = 64297 +logpath = /data/nginx/log/error.log + +[pam-generic] +enabled = true +port = 64294 +filter = pam-generic +logpath = /var/log/auth.log + +[sshd] +enabled = true +port = 64295 +filter = sshd +logpath = /var/log/auth.log +" +echo "$myFAIL2BANCONF" 2>&1 | tee /etc/fail2ban/jail.d/tpot.conf | dialog --title "[ Setup fail2ban config ]" $myPROGRESSBOXCONF + +# Fix systemd error https://github.com/systemd/systemd/issues/3374 +mySYSTEMDFIX="[Link] +NamePolicy=kernel database onboard slot path +MACAddressPolicy=none +" +echo "$mySYSTEMDFIX" 2>&1 | tee /etc/systemd/network/99-default.link | dialog --title "[ systemd fix ]" $myPROGRESSBOXCONF # Let's add some cronjobs -dialog --title "[ Adding cronjobs ]" $myPROGRESSBOXCONF <&1>/dev/null <&1 | tee -a /etc/crontab | dialog --title "[ Adding cronjobs ]" $myPROGRESSBOXCONF # Let's create some files and folders -mkdir -p /data/conpot/log \ +mkdir -p /data/ciscoasa/log \ + /data/conpot/log \ /data/cowrie/log/tty/ /data/cowrie/downloads/ /data/cowrie/keys/ /data/cowrie/misc/ \ /data/dionaea/log /data/dionaea/bistreams /data/dionaea/binaries /data/dionaea/rtp /data/dionaea/roots/ftp /data/dionaea/roots/tftp /data/dionaea/roots/www /data/dionaea/roots/upnp \ /data/elasticpot/log \ /data/elk/data /data/elk/log \ - /data/glastopf /data/honeytrap/log/ /data/honeytrap/attacks/ /data/honeytrap/downloads/ \ + /data/glastopf/log /data/glastopf/db \ + /data/honeytrap/log/ /data/honeytrap/attacks/ /data/honeytrap/downloads/ \ + /data/glutton/log \ + /data/heralding/log \ /data/mailoney/log \ + /data/medpot/log \ + /data/nginx/log \ /data/emobility/log \ /data/ews/conf \ /data/rdpy/log \ /data/spiderfoot \ /data/suricata/log /home/tsec/.ssh/ \ - /data/p0f/log \ - /data/vnclowpot/log 2>&1 | dialog --title "[ Creating some files and folders ]" $myPROGRESSBOXCONF + /data/tanner/log /data/tanner/files \ + /data/p0f/log 2>&1 | dialog --title "[ Creating some files and folders ]" $myPROGRESSBOXCONF touch /data/spiderfoot/spiderfoot.db 2>&1 | dialog --title "[ Creating some files and folders ]" $myPROGRESSBOXCONF +touch /data/nginx/log/error.log 2>&1 | dialog --title "[ Creating some files and folders ]" $myPROGRESSBOXCONF # Let's copy some files tar xvfz /opt/tpot/etc/objects/elkbase.tgz -C / 2>&1 | dialog --title "[ Extracting elkbase.tgz ]" $myPROGRESSBOXCONF -cp /opt/tpot/host/etc/systemd/* /etc/systemd/system/ 2>&1 | dialog --title "[ Copy configs ]" $myPROGRESSBOXCONF -cp /opt/tpot/host/etc/issue /etc/ 2>&1 | dialog --title "[ Copy configs ]" $myPROGRESSBOXCONF -cp -R /opt/tpot/host/etc/nginx/ssl /etc/nginx/ 2>&1 | dialog --title "[ Copy configs ]" $myPROGRESSBOXCONF -cp /opt/tpot/host/etc/nginx/tpotweb.conf /etc/nginx/sites-available/ 2>&1 | dialog --title "[ Copy configs ]" $myPROGRESSBOXCONF -cp /opt/tpot/host/etc/nginx/nginx.conf /etc/nginx/nginx.conf 2>&1 | dialog --title "[ Copy configs ]" $myPROGRESSBOXCONF -cp /opt/tpot/host/usr/share/nginx/html/* /usr/share/nginx/html/ 2>&1 | dialog --title "[ Copy configs ]" $myPROGRESSBOXCONF -cp /root/installer/keys/authorized_keys /home/tsec/.ssh/authorized_keys 2>&1 | dialog --title "[ Copy configs ]" $myPROGRESSBOXCONF +cp /opt/tpot/host/etc/systemd/* /etc/systemd/system/ 2>&1 | dialog --title "[ Copy configs ]" $myPROGRESSBOXCONF +cp /opt/tpot/host/etc/issue /etc/ 2>&1 | dialog --title "[ Copy configs ]" $myPROGRESSBOXCONF systemctl enable tpot 2>&1 | dialog --title "[ Enabling service for tpot ]" $myPROGRESSBOXCONF -systemctl enable wetty 2>&1 | dialog --title "[ Enabling service for wetty ]" $myPROGRESSBOXCONF - -# Let's enable T-Pot website -ln -s /etc/nginx/sites-available/tpotweb.conf /etc/nginx/sites-enabled/tpotweb.conf 2>&1 | dialog --title "[ Enabling T-Pot website ]" $myPROGRESSBOXCONF # Let's take care of some files and permissions chmod 760 -R /data 2>&1 | dialog --title "[ Set permissions and ownerships ]" $myPROGRESSBOXCONF chown tpot:tpot -R /data 2>&1 | dialog --title "[ Set permissions and ownerships ]" $myPROGRESSBOXCONF -chmod 600 /home/tsec/.ssh/authorized_keys 2>&1 | dialog --title "[ Set permissions and ownerships ]" $myPROGRESSBOXCONF -chown tsec:tsec /home/tsec/.ssh /home/tsec/.ssh/authorized_keys 2>&1 | dialog --title "[ Set permissions and ownerships ]" $myPROGRESSBOXCONF +chmod 644 -R /data/nginx/conf 2>&1 | dialog --title "[ Set permissions and ownerships ]" $myPROGRESSBOXCONF +chmod 644 -R /data/nginx/cert 2>&1 | dialog --title "[ Set permissions and ownerships ]" $myPROGRESSBOXCONF # Let's replace "quiet splash" options, set a console font for more screen canvas and update grub sed -i 's#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"#GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"#' /etc/default/grub 2>&1>/dev/null @@ -495,16 +746,28 @@ tee -a /root/.bashrc 2>&1>/dev/null <&1>/dev/null <&1>/dev/null <&1>/dev/null +# Let's clean up apt +apt-get autoclean -y 2>&1 | dialog --title "[ Cleaning up ]" $myPROGRESSBOXCONF +apt-get autoremove -y 2>&1 | dialog --title "[ Cleaning up ]" $myPROGRESSBOXCONF + # Final steps cp /opt/tpot/host/etc/rc.local /etc/rc.local 2>&1>/dev/null && \ rm -rf /root/installer 2>&1>/dev/null && \ -dialog --no-ok --no-cancel --backtitle "$myBACKTITLE" --title "[ Thanks for your patience. Now rebooting. ]" --pause "" 6 80 2 && \ -reboot +if [ "$myTPOT_DEPLOYMENT_TYPE" == "auto" ]; + then + echo "Done. Please reboot." + else + dialog --no-ok --no-cancel --backtitle "$myBACKTITLE" --title "[ Thanks for your patience. Now rebooting. ]" --pause "" 6 80 2 && \ + reboot +fi diff --git a/iso/installer/iso.conf.dist b/iso/installer/iso.conf.dist new file mode 100644 index 000000000..f695f3814 --- /dev/null +++ b/iso/installer/iso.conf.dist @@ -0,0 +1,12 @@ +# makeiso configuration file +myCONF_PROXY_USE='0' +myCONF_PROXY_IP='1.2.3.4' +myCONF_PROXY_PORT='3128' +myCONF_PFX_USE='0' +myCONF_PFX_FILE='/' +myCONF_PFX_PW_USE='0' +myCONF_PFX_PW='' +myCONF_PFX_HOST_ID='.' +myCONF_NTP_USE='0' +myCONF_NTP_IP='1.2.3.4' +myCONF_NTP_CONF_FILE='/' diff --git a/iso/installer/keys/authorized_keys b/iso/installer/keys/authorized_keys deleted file mode 100644 index 8b1378917..000000000 --- a/iso/installer/keys/authorized_keys +++ /dev/null @@ -1 +0,0 @@ - diff --git a/iso/installer/rc.local.install b/iso/installer/rc.local.install index edb417d51..f16345641 100755 --- a/iso/installer/rc.local.install +++ b/iso/installer/rc.local.install @@ -1,2 +1,3 @@ #!/bin/bash -openvt -w -s /root/installer/install.sh +plymouth --quit +openvt -f -w -s /root/installer/wrapper.sh diff --git a/iso/installer/tpot.conf.dist b/iso/installer/tpot.conf.dist new file mode 100644 index 000000000..9716b55d8 --- /dev/null +++ b/iso/installer/tpot.conf.dist @@ -0,0 +1,5 @@ +# tpot configuration file +# myCONF_TPOT_FLAVOR=[STANDARD, SENSOR, INDUSTRIAL, COLLECTOR, EXPERIMENTAL, LEGACY] +myCONF_TPOT_FLAVOR='STANDARD' +myCONF_WEB_USER='webuser' +myCONF_WEB_PW='w3b$ecret' diff --git a/iso/installer/wrapper.sh b/iso/installer/wrapper.sh new file mode 100755 index 000000000..bb4137ef3 --- /dev/null +++ b/iso/installer/wrapper.sh @@ -0,0 +1,3 @@ +#!/bin/bash +cd /root/installer +./install.sh --type=iso diff --git a/iso/isolinux/txt.cfg b/iso/isolinux/txt.cfg index 6553b680c..84302a261 100755 --- a/iso/isolinux/txt.cfg +++ b/iso/isolinux/txt.cfg @@ -1,6 +1,6 @@ default install label install - menu label ^T-Pot 17.10 + menu label ^T-Pot 18.11 menu default kernel linux append vga=788 initrd=initrd.gz console-setup/ask_detect=true -- diff --git a/iso/preseed/tpot.seed b/iso/preseed/tpot.seed index be71342df..b1a67be0b 100755 --- a/iso/preseed/tpot.seed +++ b/iso/preseed/tpot.seed @@ -25,6 +25,7 @@ d-i console-setup/detected note ######################### ### Network Configuration ######################### +d-i netcfg/do_not_use_netplan true #d-i netcfg/choose_interface select auto #d-i netcfg/dhcp_timeout string 60 d-i netcfg/get_hostname string t-pot @@ -100,13 +101,19 @@ tasksel tasksel/first multiselect ubuntu-server ######################## ### Package Installation ######################## -d-i pkgsel/include string apache2-utils apparmor apt-transport-https aufs-tools bash-completion build-essential ca-certificates cgroupfs-mount curl dialog dnsutils docker.io dstat ethtool genisoimage git glances html2text htop iptables iw jq libcrack2 libltdl7 lm-sensors man nginx-extras nodejs npm ntp openssh-server openssl prips syslinux psmisc pv python-pip unzip vim wireless-tools wpasupplicant +d-i pkgsel/include string apache2-utils apparmor apt-transport-https aufs-tools bash-completion build-essential ca-certificates cgroupfs-mount cockpit cockpit-docker curl debconf-utils dialog dnsutils docker.io docker-compose dstat ethtool fail2ban genisoimage git glances grc html2text htop ifupdown iptables iw jq libcrack2 libltdl7 lm-sensors man mosh multitail net-tools npm ntp openssh-server openssl pass prips software-properties-common syslinux psmisc pv python-pip unzip vim wireless-tools wpasupplicant ################# ### Update Policy ################# d-i pkgsel/update-policy select unattended-upgrades +############### +### Boot Splash +############### +d-i debian-installer/quiet boolean false +d-i debian-installer/splash boolean false + ######################################### ### Post install (Grub & T-Pot Installer) ######################################### diff --git a/makeiso.sh b/makeiso.sh index 911f22bc5..7769a4c3d 100755 --- a/makeiso.sh +++ b/makeiso.sh @@ -1,27 +1,25 @@ #!/bin/bash # Set TERM, DIALOGRC -export DIALOGRC=/etc/dialogrc export TERM=linux +export DIALOGRC=/etc/dialogrc # Let's define some global vars myBACKTITLE="T-Pot - ISO Creator" -# If you need latest hardware support, try using the hardware enablement (hwe) ISO -# myUBUNTULINK="http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/hwe-netboot/mini.iso" -myUBUNTULINK="http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/netboot/mini.iso" +# If you need latest hardware support, try using the hardware enablement (hwe) ISO, usually released later in time +# myUBUNTULINK="http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/hwe-netboot/mini.iso" +myUBUNTULINK="http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/mini.iso" myUBUNTUISO="mini.iso" myTPOTISO="tpot.iso" myTPOTDIR="tpotiso" myTPOTSEED="iso/preseed/tpot.seed" myPACKAGES="dialog genisoimage syslinux syslinux-utils pv udisks2" -myAUTHKEYSPATH="iso/installer/keys/authorized_keys" -myPFXPATH="iso/installer/keys/8021x.pfx" -myPFXPWPATH="iso/installer/keys/8021x.pw" -myPFXHOSTIDPATH="iso/installer/keys/8021x.id" +myPFXFILE="iso/installer/keys/8021x.pfx" myINSTALLERPATH="iso/installer/install.sh" -myPROXYCONFIG="iso/installer/proxy" -myNTPCONFPATH="iso/installer/ntp" +myNTPCONFFILE="iso/installer/ntp.conf" myTMP="tmp" +myCONF_FILE="iso/installer/iso.conf" +myCONF_DEFAULT_FILE="iso/installer/iso.conf.dist" # Got root? myWHOAMI=$(whoami) @@ -32,13 +30,31 @@ if [ "$myWHOAMI" != "root" ] exit fi +# Let's check if all dependencies are met +myINST="" +for myDEPS in $myPACKAGES; +do + myOK=$(dpkg -s $myDEPS | grep ok | awk '{ print $3 }'); + if [ "$myOK" != "ok" ] + then + myINST=$(echo $myINST $myDEPS) + fi +done +if [ "$myINST" != "" ] + then + apt-get update -y + for myDEPS in $myINST; + do + apt-get install $myDEPS -y + done +fi + # Let's load dialog color theme cp host/etc/dialogrc /etc/ # Let's clean up at the end or if something goes wrong ... function fuCLEANUP { -rm -rf $myTMP $myTPOTDIR $myPROXYCONFIG $myPFXPATH $myPFXPWPATH $myPFXHOSTIDPATH $myNTPCONFPATH -echo > $myAUTHKEYSPATH +rm -rf $myTMP $myTPOTDIR $myPFXFILE $myNTPCONFFILE $myCONF_FILE if [ -f $myTPOTSEED.bak ]; then mv $myTPOTSEED.bak $myTPOTSEED @@ -64,25 +80,6 @@ function valid_ip() return $stat } -# Let's check if all dependencies are met -myINST="" -for myDEPS in $myPACKAGES; -do - myOK=$(dpkg -s $myDEPS | grep ok | awk '{ print $3 }'); - if [ "$myOK" != "ok" ] - then - myINST=$(echo $myINST $myDEPS) - fi -done -if [ "$myINST" != "" ] - then - apt-get update -y - for myDEPS in $myINST; - do - apt-get install $myDEPS -y - done -fi - # Let's ask if the user wants to run the script ... dialog --backtitle "$myBACKTITLE" --title "[ Continue? ]" --yesno "\nDownload latest supported Ubuntu Mini ISO and build the T-Pot Install Image." 8 50 mySTART=$? @@ -91,50 +88,36 @@ if [ "$mySTART" = "1" ]; exit fi +# Let's load the default config file +if [ -f $myCONF_DEFAULT_FILE ]; + then + source $myCONF_DEFAULT_FILE +fi + # Let's ask the user for a proxy ... while true; do dialog --backtitle "$myBACKTITLE" --title "[ Proxy Settings ]" --yesno "\nDo you want to configure a proxy?" 7 50 - myADDPROXY=$? - if [ "$myADDPROXY" = "0" ] + myCONF_PROXY_USE=$? + if [ "$myCONF_PROXY_USE" = "0" ] then myIPRESULT="false" while [ "$myIPRESULT" = "false" ]; do - myPROXYIP=$(dialog --backtitle "$myBACKTITLE" --no-cancel --title "Proxy IP?" --inputbox "" 7 50 "1.2.3.4" 3>&1 1>&2 2>&3 3>&-) - if valid_ip $myPROXYIP; then myIPRESULT="true"; fi + myCONF_PROXY_IP=$(dialog --backtitle "$myBACKTITLE" --no-cancel --title "Proxy IP?" --inputbox "" 7 50 "$myCONF_PROXY_IP" 3>&1 1>&2 2>&3 3>&-) + if valid_ip $myCONF_PROXY_IP; then myIPRESULT="true"; fi done myPORTRESULT="false" while [ "$myPORTRESULT" = "false" ]; do - myPROXYPORT=$(dialog --backtitle "$myBACKTITLE" --no-cancel --title "Proxy Port (i.e. 3128)?" --inputbox "" 7 50 "3128" 3>&1 1>&2 2>&3 3>&-) - if [[ $myPROXYPORT =~ ^-?[0-9]+$ ]] && [ $myPROXYPORT -gt 0 ] && [ $myPROXYPORT -lt 65536 ]; then myPORTRESULT="true"; fi + myCONF_PROXY_PORT=$(dialog --backtitle "$myBACKTITLE" --no-cancel --title "Proxy Port (i.e. 3128)?" --inputbox "" 7 50 "$myCONF_PROXY_PORT" 3>&1 1>&2 2>&3 3>&-) + if [[ $myCONF_PROXY_PORT =~ ^-?[0-9]+$ ]] && [ $myCONF_PROXY_PORT -gt 0 ] && [ $myCONF_PROXY_PORT -lt 65536 ]; then myPORTRESULT="true"; fi done - echo http://$myPROXYIP:$myPROXYPORT > $myPROXYCONFIG - sed -i.bak 's#d-i mirror/http/proxy.*#d-i mirror/http/proxy string http://'$myPROXYIP':'$myPROXYPORT'/#' $myTPOTSEED + sed -i.bak 's#d-i mirror/http/proxy.*#d-i mirror/http/proxy string http://'$myCONF_PROXY_IP':'$myCONF_PROXY_PORT'/#' $myTPOTSEED break else - break - fi -done - -# Let's ask the user for ssh keys ... -while true; -do - dialog --backtitle "$myBACKTITLE" --title "[ Add ssh keys? ]" --yesno "\nDo you want to add public key(s) to authorized_keys file?" 8 50 - myADDKEYS=$? - if [ "$myADDKEYS" = "0" ] - then - myKEYS=$(dialog --backtitle "$myBACKTITLE" --fselect "/" 15 50 3>&1 1>&2 2>&3 3>&-) - if [ -f "$myKEYS" ] - then - cat $myKEYS > $myAUTHKEYSPATH - break - else - dialog --backtitle "$myBACKTITLE" --title "[ Try again! ]" --msgbox "\nThis is no regular file." 7 50; - fi - else - echo > $myAUTHKEYSPATH + myCONF_PROXY_IP="" + myCONF_PROXY_PORT="" break fi done @@ -143,27 +126,30 @@ done while true; do dialog --backtitle "$myBACKTITLE" --title "[ Need 802.1x auth? ]" --yesno "\nDo you want to add a 802.1x host certificate?" 7 50 - myADDPFX=$? - if [ "$myADDPFX" = "0" ] + myCONF_PFX_USE=$? + if [ "$myCONF_PFX_USE" = "0" ] then - myPFX=$(dialog --backtitle "$myBACKTITLE" --fselect "/" 15 50 3>&1 1>&2 2>&3 3>&-) - if [ -f "$myPFX" ] + myCONF_PFX_FILE=$(dialog --backtitle "$myBACKTITLE" --fselect "$myCONF_PFX_FILE" 15 50 3>&1 1>&2 2>&3 3>&-) + if [ -f "$myCONF_PFX_FILE" ] then - cp $myPFX $myPFXPATH + cp $myCONF_PFX_FILE $myPFXFILE dialog --backtitle "$myBACKTITLE" --title "[ Password protected? ]" --yesno "\nDoes the certificate need your password?" 7 50 - myADDPFXPW=$? - if [ "$myADDPFXPW" = "0" ] + myCONF_PFX_PW_USE=$? + if [ "$myCONF_PFX_PW_USE" = "0" ] then - myPFXPW=$(dialog --backtitle "$myBACKTITLE" --no-cancel --inputbox "Password?" 7 50 3>&1 1>&2 2>&3 3>&-) - echo $myPFXPW > $myPFXPWPATH + myCONF_PFX_PW=$(dialog --backtitle "$myBACKTITLE" --no-cancel --inputbox "Password?" 7 50 3>&1 1>&2 2>&3 3>&-) + else + myCONF_PFX_PW="" fi - myPFXHOSTID=$(dialog --backtitle "$myBACKTITLE" --no-cancel --inputbox "Host ID?" 7 50 "." 3>&1 1>&2 2>&3 3>&-) - echo $myPFXHOSTID > $myPFXHOSTIDPATH + myCONF_PFX_HOST_ID=$(dialog --backtitle "$myBACKTITLE" --no-cancel --inputbox "Host ID?" 7 50 "$myCONF_PFX_HOST_ID" 3>&1 1>&2 2>&3 3>&-) break else dialog --backtitle "$myBACKTITLE" --title "[ Try again! ]" --msgbox "\nThis is no regular file." 7 50; fi else + myCONF_PFX_FILE="" + myCONF_PFX_HOST_ID="" + myCONF_PFX_PW="" break fi done @@ -172,16 +158,16 @@ done while true; do dialog --backtitle "$myBACKTITLE" --title "[ NTP server? ]" --yesno "\nDo you want to configure a ntp server?" 7 50 - myADDNTP=$? - if [ "$myADDNTP" = "0" ] + myCONF_NTP_USE=$? + if [ "$myCONF_NTP_USE" = "0" ] then myIPRESULT="false" while [ "$myIPRESULT" = "false" ]; do - myNTPIP=$(dialog --backtitle "$myBACKTITLE" --no-cancel --title "NTP IP?" --inputbox "" 7 50 "1.2.3.4" 3>&1 1>&2 2>&3 3>&-) - if valid_ip $myNTPIP; then myIPRESULT="true"; fi + myCONF_NTP_IP=$(dialog --backtitle "$myBACKTITLE" --no-cancel --title "NTP IP?" --inputbox "" 7 50 "$myCONF_NTP_IP" 3>&1 1>&2 2>&3 3>&-) + if valid_ip $myCONF_NTP_IP; then myIPRESULT="true"; fi done -tee $myNTPCONFPATH < $myCONF_FILE + echo "myCONF_PROXY_USE=\"$myCONF_PROXY_USE\"" >> $myCONF_FILE + echo "myCONF_PROXY_IP=\"$myCONF_PROXY_IP\"" >> $myCONF_FILE + echo "myCONF_PROXY_PORT=\"$myCONF_PROXY_PORT\"" >> $myCONF_FILE + echo "myCONF_PFX_USE=\"$myCONF_PFX_USE\"" >> $myCONF_FILE + echo "myCONF_PFX_FILE=\"/root/installer/keys/8021x.pfx\"" >> $myCONF_FILE + echo "myCONF_PFX_PW_USE=\"$myCONF_PFX_PW_USE\"" >> $myCONF_FILE + echo "myCONF_PFX_PW=\"$myCONF_PFX_PW\"" >> $myCONF_FILE + echo "myCONF_PFX_HOST_ID=\"$myCONF_PFX_HOST_ID\"" >> $myCONF_FILE + echo "myCONF_NTP_USE=\"$myCONF_NTP_USE\"" >> $myCONF_FILE + echo "myCONF_NTP_IP=\"$myCONF_NTP_IP\"" >> $myCONF_FILE + echo "myCONF_NTP_CONF_FILE=\"/root/installer/ntp.conf\"" >> $myCONF_FILE +fi + # Let's download Ubuntu Minimal ISO if [ ! -f $myUBUNTUISO ] then diff --git a/update.sh b/update.sh index 17142512b..a954bd9da 100755 --- a/update.sh +++ b/update.sh @@ -1,10 +1,6 @@ #!/bin/bash -################################################### -# Do not change any contents of this script! -################################################### - -# Some vars +# Some global vars myCONFIGFILE="/opt/tpot/etc/tpot.yml" myCOMPOSEPATH="/opt/tpot/etc/compose" myRED="" @@ -12,14 +8,6 @@ myGREEN="" myWHITE="" myBLUE="" -# Got root? -myWHOAMI=$(whoami) -if [ "$myWHOAMI" != "root" ] - then - echo "Need to run as root ..." - sudo ./$0 - exit -fi # Check for existing tpot.yml function fuCONFIGCHECK () { @@ -28,13 +16,14 @@ function fuCONFIGCHECK () { if ! [ -f $myCONFIGFILE ]; then echo - echo $myRED"Error - No T-Pot configuration file present." - echo "Please copy one of the preconfigured configuration files from /opt/tpot/etc/compose/*.yml to /opt/tpot/etc/tpot.yml."$myWHITE + echo "[ $myRED""NOT OK""$myWHITE ] - No T-Pot configuration found." + echo "Please create a link to your desired config i.e. 'ln -s /opt/tpot/etc/compose/standard.yml /opt/tpot/etc/tpot.yml'." echo exit 1 else - echo $myGREEN"OK"$myWHITE + echo "[ $myGREEN""OK""$myWHITE ]" fi +echo } # Let's test the internet connection @@ -47,142 +36,238 @@ mySITES=$1 curl --connect-timeout 5 -IsS $i 2>&1>/dev/null if [ $? -ne 0 ]; then - echo - echo $myRED"Error - Internet connection test failed. This might indicate some problems with your connection." - echo "Exiting."$myWHITE + echo + echo "###### $myBLUE""Error - Internet connection test failed.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + echo "Exiting.""$myWHITE" echo exit 1 else - echo $myGREEN"OK"$myWHITE + echo "[ $myGREEN"OK"$myWHITE ]" fi done; +echo } +# Update function fuSELFUPDATE () { echo "### Now checking for newer files in repository ..." - git fetch + git fetch --all myREMOTESTAT=$(git status | grep -c "up-to-date") if [ "$myREMOTESTAT" != "0" ]; then - echo "###### $myBLUE"No updates found in repository."$myWHITE" + echo "###### $myBLUE""No updates found in repository.""$myWHITE" return fi myRESULT=$(git diff --name-only origin/master | grep update.sh) - myLOCALSTAT=$(git status -uno | grep -c update.sh) if [ "$myRESULT" == "update.sh" ]; then - if [ "$myLOCALSTAT" == "0" ]; - then - echo "###### $myBLUE"Found newer version, will update myself and restart."$myWHITE" - git pull --force - exec "$1" "$2" - exit 1 - else - echo $myRED"Error - Update script was changed locally, cannot update." - echo "Exiting."$myWHITE - echo - exit 1 - fi + echo "###### $myBLUE""Found newer version, will be pulling updates and restart myself.""$myWHITE" + git reset --hard + git pull --force + exec "$1" "$2" + exit 1 else - echo "###### Update script is already up-to-date." + echo "###### $myBLUE""Pulling updates from repository.""$myWHITE" + git reset --hard git pull --force fi +echo } -# Only run with command switch -if [ "$1" != "-y" ]; then - echo "This script will update / upgrade all T-Pot related scripts, tools and packages" - echo "Some of your changes might be overwritten, so make sure to save your work" - echo "This feature is still experimental, run with \"-y\" switch" - echo - exit -fi - -echo "### Now running T-Pot update script." +# Let's check for version +function fuCHECK_VERSION () { +local myMINVERSION="18.04.0" +local myMASTERVERSION="18.11.0" echo - -fuCHECKINET "https://index.docker.io https://github.com https://pypi.python.org https://ubuntu.com" +echo "### Checking for version tag ..." +if [ -f "version" ]; + then + myVERSION=$(cat version) + if [[ "$myVERSION" > "$myMINVERSION" || "$myVERSION" == "$myMINVERSION" ]] && [[ "$myVERSION" < "$myMASTERVERSION" || "$myVERSION" == "$myMASTERVERSION" ]] + then + echo "###### $myBLUE$myVERSION is eligible for the update procedure.$myWHITE"" [ $myGREEN""OK""$myWHITE ]" + else + echo "###### $myBLUE $myVERSION cannot be upgraded automatically. Please run a fresh install.$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + exit + fi + else + echo "###### $myBLUE""Unable to determine version. Please run 'update.sh' from within '/opt/tpot'.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + exit + fi echo +} -fuSELFUPDATE "$0" "$@" -echo -fuCONFIGCHECK +# Stop T-Pot to avoid race conditions with running containers with regard to the current T-Pot config +function fuSTOP_TPOT () { +echo "### Need to stop T-Pot ..." +echo -n "###### $myBLUE Now stopping T-Pot.$myWHITE " +systemctl stop tpot +if [ $? -ne 0 ]; + then + echo " [ $myRED""NOT OK""$myWHITE ]" + echo "###### $myBLUE""Could not stop T-Pot.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + echo "Exiting.""$myWHITE" + echo + exit 1 + else + echo "[ $myGREEN"OK"$myWHITE ]" + echo "###### $myBLUE Now cleaning up containers.$myWHITE " + if [ "$(docker ps -aq)" != "" ]; + then + docker stop $(docker ps -aq) + docker rm $(docker ps -aq) + fi +fi echo +} -echo "### Now stopping T-Pot" -systemctl stop tpot +# Backup +function fuBACKUP () { +local myARCHIVE="/root/$(date +%Y%m%d%H%M)_tpot_backup.tgz" +local myPATH=$PWD +echo "### Create a backup, just in case ... " +echo -n "###### $myBLUE Building archive in $myARCHIVE $myWHITE" +cd /opt/tpot +tar cvfz $myARCHIVE * 2>&1>/dev/null +if [ $? -ne 0 ]; + then + echo " [ $myRED""NOT OK""$myWHITE ]" + echo "###### $myBLUE""Something went wrong.""$myWHITE"" [ $myRED""NOT OK""$myWHITE ]" + echo "Exiting.""$myWHITE" + echo + cd $myPATH + exit 1 + else + echo "[ $myGREEN"OK"$myWHITE ]" + cd $myPATH +fi +echo +} -# Better safe than sorry -echo "###### Creating backup and storing it in /home/tsec" -tar cvfz /root/tpot_backup.tgz /opt/tpot - -echo "###### Getting the current install flavor" -myFLAVOR=$(head $myCONFIGFILE -n 1 | awk '{ print $3 }' | tr -d :'()':) - -echo "###### Updating compose file" -case $myFLAVOR in - HP) - echo "###### Restoring HONEYPOT flavor installation." - cp $myCOMPOSEPATH/hp.yml $myCONFIGFILE - ;; - Industrial) - echo "###### Restoring INDUSTRIAL flavor installation." - cp $myCOMPOSEPATH/industrial.yml $myCONFIGFILE - ;; - Standard) - echo "###### Restoring TPOT flavor installation." - cp $myCOMPOSEPATH/tpot.yml $myCONFIGFILE - ;; - Everything) - echo "###### Restoring EVERYTHING flavor installation." - cp $myCOMPOSEPATH/all.yml $myCONFIGFILE - ;; -esac +# Remove old images for specific tag +function fuREMOVEOLDIMAGES () { +local myOLDTAG=$1 +local myOLDIMAGES=$(docker images | grep -c "$myOLDTAG") +if [ "$myOLDIMAGES" -gt "0" ]; + then + echo "### Removing old docker images." + docker rmi $(docker images | grep "$myOLDTAG" | awk '{print $3}') +fi +} +# Let's load docker images in parallel +function fuPULLIMAGES { +local myTPOTCOMPOSE="/opt/tpot/etc/tpot.yml" +for name in $(cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d'"' -f2 | uniq) + do + docker pull $name & + done +wait echo -echo "### Now upgrading packages" -apt-get autoclean -y -apt-get autoremove -y +} + +function fuUPDATER () { +local myPACKAGES="apache2-utils apparmor apt-transport-https aufs-tools bash-completion build-essential ca-certificates cgroupfs-mount cockpit cockpit-docker curl debconf-utils dialog dnsutils docker.io docker-compose dstat ethtool fail2ban genisoimage git glances grc html2text htop ifupdown iptables iw jq libcrack2 libltdl7 lm-sensors man mosh multitail net-tools npm ntp openssh-server openssl pass prips software-properties-common syslinux psmisc pv python-pip unattended-upgrades unzip vim wireless-tools wpasupplicant" +echo "### Now upgrading packages ..." +dpkg --configure -a +apt-get -y autoclean +apt-get -y autoremove apt-get update -apt-get dist-upgrade -y -pip install --upgrade pip -pip install docker-compose==1.16.1 -pip install elasticsearch-curator==5.2.0 -ln -s /usr/bin/nodejs /usr/bin/node 2>&1 -npm install https://github.com/t3chn0m4g3/wetty -g -npm install https://github.com/t3chn0m4g3/elasticsearch-dump -g -wget https://github.com/bcicen/ctop/releases/download/v0.6.1/ctop-0.6.1-linux-amd64 -O /usr/bin/ctop && chmod +x /usr/bin/ctop +apt-get -y install $myPACKAGES +# Some updates require interactive attention, and the following settings will override that. +echo "docker.io docker.io/restart boolean true" | debconf-set-selections -v +echo "debconf debconf/frontend select noninteractive" | debconf-set-selections -v +apt-get -y dist-upgrade -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes +dpkg --configure -a +npm install "https://github.com/taskrabbit/elasticsearch-dump" -g +pip install --upgrade pip +hash -r +pip install --upgrade elasticsearch-curator yq +wget https://github.com/bcicen/ctop/releases/download/v0.7.1/ctop-0.7.1-linux-amd64 -O /usr/bin/ctop && chmod +x /usr/bin/ctop echo -echo "### Now replacing T-Pot related config files on host" -cp host/etc/systemd/* /etc/systemd/system/ -cp host/etc/issue /etc/ -cp -R host/etc/nginx/ssl /etc/nginx/ -cp host/etc/nginx/tpotweb.conf /etc/nginx/sites-available/ -cp host/etc/nginx/nginx.conf /etc/nginx/nginx.conf -cp host/usr/share/nginx/html/* /usr/share/nginx/html/ -echo -echo "### Now reloading systemd, nginx" +echo "### Now replacing T-Pot related config files on host" +cp host/etc/systemd/* /etc/systemd/system/ +cp host/etc/issue /etc/ systemctl daemon-reload -nginx -s reload - echo -echo "### Now restarting wetty, nginx, docker" -systemctl restart wetty.service -systemctl restart nginx.service -systemctl restart docker.service +# Ensure some defaults +echo "### Ensure some T-Pot defaults with regard to some folders, permissions and configs." +sed -i 's#ListenStream=9090#ListenStream=64294#' /lib/systemd/system/cockpit.socket +sed -i '/^port/Id' /etc/ssh/sshd_config +echo "Port 64295" >> /etc/ssh/sshd_config echo + +### Ensure creation of T-Pot related folders, just in case +mkdir -p /data/ciscoasa/log \ + /data/conpot/log \ + /data/cowrie/log/tty/ /data/cowrie/downloads/ /data/cowrie/keys/ /data/cowrie/misc/ \ + /data/dionaea/log /data/dionaea/bistreams /data/dionaea/binaries /data/dionaea/rtp /data/dionaea/roots/ftp /data/dionaea/roots/tftp /data/dionaea/roots/www /data/dionaea/roots/upnp \ + /data/elasticpot/log \ + /data/elk/data /data/elk/log \ + /data/glastopf/log /data/glastopf/db \ + /data/honeytrap/log/ /data/honeytrap/attacks/ /data/honeytrap/downloads/ \ + /data/glutton/log \ + /data/heralding/log \ + /data/mailoney/log \ + /data/medpot/log \ + /data/nginx/log \ + /data/emobility/log \ + /data/ews/conf \ + /data/rdpy/log \ + /data/spiderfoot \ + /data/suricata/log /home/tsec/.ssh/ \ + /data/tanner/log /data/tanner/files \ + /data/p0f/log + +### Let's take care of some files and permissions +chmod 760 -R /data +chown tpot:tpot -R /data +chmod 644 -R /data/nginx/conf +chmod 644 -R /data/nginx/cert + echo "### Now pulling latest docker images" -docker-compose -f /opt/tpot/etc/tpot.yml pull +echo "######$myBLUE This might take a while, please be patient!$myWHITE" +fuPULLIMAGES 2>&1>/dev/null +fuREMOVEOLDIMAGES "1804" +echo "### If you made changes to tpot.yml please ensure to add them again." +echo "### We stored the previous version as backup in /root/." +echo "### Done, please reboot." echo -echo "### Now starting T-Pot service" -systemctl start tpot +} -echo -echo "### If you made changes to tpot.yml please ensure to add them again." -echo "### We stored the previous version as backup in /home/tsec." -echo "### Done." + +################ +# Main section # +################ + +# Got root? +myWHOAMI=$(whoami) +if [ "$myWHOAMI" != "root" ] + then + echo "Need to run as root ..." + sudo ./$0 + exit +fi + +# Only run with command switch +if [ "$1" != "-y" ]; then + echo "This script will update / upgrade all T-Pot related scripts, tools and packages to the latest versions." + echo "A backup of /opt/tpot will be written to /root. If you are unsure, you should save your work." + echo "This is a beta feature and only recommended for experienced users." + echo "If you understand the involved risks feel free to run this script with the '-y' switch." + echo + exit +fi + +fuCHECK_VERSION +fuCONFIGCHECK +fuCHECKINET "https://index.docker.io https://github.com https://pypi.python.org https://ubuntu.com" +fuSTOP_TPOT +fuBACKUP +fuSELFUPDATE "$0" "$@" +fuUPDATER diff --git a/version b/version new file mode 100644 index 000000000..9b7b3ce8c --- /dev/null +++ b/version @@ -0,0 +1 @@ +18.11.0