�PNG  IHDR22?�� pHYs  �� OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*! J�!��Q�EEȠ�����Q, � ��!���������{�kּ������>���� �H3Q5� �B�������.@� $p�d!s�#�~<<+"��x� �M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH���� � 0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4���������x����6��_-��"bb���ϫp@�t~��,/��;�m��%�h^ �u��f�@����W�p�~<�5�j>{�-�]c�K'Xt����o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A��,���� �`6�B$��BB d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(�� A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=� �C��7�F� �dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8, �c˱"� ���V����cϱw�E� 6wB aAHXLXN�H� $4� 7 �Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[ �b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w ��Ljg(�gw��L�Ӌ�T071���oUX*�*|�� �J�&�*/T����ު U�U�T��^S}�FU3S� Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k ��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN �(���~���)�)�4L�1e\k����X�H�Q�G�6������E�Y��A�J'\'Gg����S�Sݧ �M=:��.�k���Dw�n��^��Lo��y���}/�T�m���G X� $� �<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��= ���Z~s�r:V:ޚΜ�?}����/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z���������ۯ�6�i�ܟ�4�)�Y3s���C�Q��? ��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�������!h�쐭!��Α�i�P~���a�a��~ '���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl������� �{�/�]py�����.,:�@L�N8��A*��%�w%� y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y- �B��TZ(�*�geWf�͉�9���+��̳�ې7�����ᒶ��KW-X潬j9�������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n �ڴ �V����E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa��n��{��4���[���>ɾ�UUM�f�e�I���?�������m]�Nmq����#�׹���=TR��+�G�����w- 6 U����#pDy��� �� :�v�{���vg/jB��F�S��[b[�O�>����z�G��499�?r����C�d�&����ˮ/~�����јѡ�򗓿m|������������x31^�V���w�w��O�| (�h���SЧ��������c3-� cHRMz%������u0�`:�o�_�F5IDATx��ytUս�?�;���fN$$��@B�!�k��� -*�gE���j�O�kQ�ʠ`U�B_ �AÐ0%�Ȕ�@r3ޛ;߳��$�@��v����^�s����������$��ߢ !�W��5�̱'-٘������4�>�Rƫ$�G��0U�H}�_ _� #��k�MJ/=�9Du *ڲ�k�PQ;0��j|�*�$�^컂脛y���>�z×� B��� ��(�:$�ʔ_�6��C!B����MVx��a��ζyY����j��ƋY2�9�F�{r��r�딟F��Q��hY6��� x��[l��RC��������nt@��;P��3��� F�w��7��:�P���ɋ'���mj���Bƪ�$�Q�L��y��߷g��\���z����v5�p�v$�v櫻�`6~K �Y�X����,�:��"�o�e0II"(��,������l_�C���/4�+f�E�!q��:����u����c��樼.UE�@� �]K�W���$-�h]�JG���Dz)�`��.�A/ ���mᏣc�3jK� �!�>���$�Q�!�_�? \�C2(E �M$Z I{�U���s�ǣ���=��@Բe ޻��W�����@ �w����}�9v,)��.}*|"�s��di���,���G�]W�AC�������|<����[��ߕ������K�*�G nߴ!��‹��J�!��6(L�a)��Am��������;adf��:�xm��nh�;֦I��(���o�C~ډa?�=��s����h��E������xp����)���_���t��W�����´;8���`dz=(��@@�+,�;�`�fhl��XȌ�3,uI�~z(J����� �ZX�A����H'�À�㜦�82|��a�n�z2��I���� ���EY�h�ε<�0�q�{��C��v�˅��?"@��χ�x�WS+��N�~�KQ�J�8ل�� _.W��� !TU{�����,��"�� �;�������HI S� ��))�o�1�H�D� ���� (� ;����"Ҕ��,���� �F=���O��&�Ph>�`���y��߲ &S��P�<��'��1s�1cĂ�N����2)����@�u��tv��<�+�-&�����h��[!FSG���' � z z0��<����8d&�����E0�,��<��"!P�b4��� �{S�����X����.�囤���T��hEF��X�q0"-<����h���]�Py*����F⩍��@v�˂�Y08�� .q��a��s����(!<̫1�3�L�H��7sYW�`��qtu�\7��?�@�Y�� %Ka�x�GZ�*W�P��y�����N0r9��Z�c�%���q,��k�����!!,��>���IB��� �x1�Xu�Y���v-���ֺ��N������JP��a�2`�e5��w��u;�6�i���̃��(K���ťa��(l51��JL��O'%���]���ٖ뿉!��{*�p+f ���i8��D�ȑ���ܩ�M��V��ӟz��x�7Z�1i}�^͜���6e����x��)u�d�ˏ�V�eG�\�X1�����=n�U'�~Y����L�\,�(d!x ,�:�TW8� M`r���@��r+v�Q0��>^;˴�VbF��('����� �*O��i��j�Ӆ����^�S3&� ���{������.ی�� N;��NU%d0�Ce\r"�C�b��&t7N�7��� �ȪD�[%l�۪�$��'m?�A9tI�9>��NVL ��� 6v~M�����ъ�B���0����9$&=ώm��W�0���L���&��E���f�f��'+�9��hv��7,���M��6�D�&�^� �����8 D֮�����o��k^z��O��hP�8q�5d*��YVq3�{��������#LX4�?��jP=3�~�؅c�ݰ�̱�ұ��8̲��2�G�����j��έ�9��w7���U�X�w�85C��?!I&���o&����L���I#�^�eV�,�^t5�k� �xs˛\��U�8��."���{���ǵ�l4��ݼ�;��r"���G�/~���gJV�N糦��ZZ^k+NN�D��I$�=OE�z����|*�*{��%k���G��>�`9��b;�s���8,�qs��c��.b��q�%�>r��n�R�Ƨ�%�,�A��le#�8���}; 21�0�b�&�QX�f���q�00����$>�h�N�'�a3��A���/�r ��L5�8�GԲ'�����w;��c#�q1���h$*��V^�k��QĽ�b:i������� ����H F#�_���,��]g����Ը����`RUU���� ��"�qD���>-��ϤI�~��3�̴�����NZ[[555�eeek7�m����YF#[��Đ��R��i��L�H�r ��@��J-�Pŝ��_|�-��6y��ks�V�U~��6���w.����(��0A� 4��f��� /���C�xŊ�ٳ����z=6�����rg���mKo��o�/����a�g���?'9%9��P��斓��~���L{�� �H��{AW��B��$����v�1b�&Mb�ر��ر#�0`�`xMBp! )Z�Nmo�mZ�g�}�eذaWTVV ���'99��C5��&�&+5�bT>|8��PUUETT����&���t��~TE%��'������b�tEGG;RSS�S�N�v��ѯ��t����u1@�ޚ"f��͈���r'L�Ph��m��ƌ�74o��`�x�q�P���NRSS�X,�����l&&&��MFFA!-��`��ҷ�n��Yuu�����x<I�LB%����KԒ50�!�3�bz�����ʸKL���;---�l6[��`��������Ȏ;�����egg4��!D�T��jWujyZ��������K����%����p�^���X,6��sV=�ܖ����6�3�X ���4ҿ��A2�&����_k�;d�� �VfOIEND�B`� 0x0x
PHP 8.1.31
Preview: class-snoopy.php Size: 36.83 KB
/var/www/weelorum_com_usr/data/www/weelorum.com/wp-includes/class-snoopy.php
<?php

/**
 * Deprecated. Use WP_HTTP (http.php) instead.
 */
_deprecated_file( basename( __FILE__ ), '3.0.0', WPINC . '/http.php' );

if ( ! class_exists( 'Snoopy', false ) ) :
/*************************************************

Snoopy - the PHP net client
Author: Monte Ohrt <monte@ispi.net>
Copyright (c): 1999-2008 New Digital Group, all rights reserved
Version: 1.2.4

 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

You may contact the author of Snoopy by e-mail at:
monte@ohrt.com

The latest version of Snoopy can be obtained from:
http://snoopy.sourceforge.net/

*************************************************/

class Snoopy
{
	/**** Public variables ****/

	/* user definable vars */

	var $host			=	"www.php.net";		// host name we are connecting to
	var $port			=	80;					// port we are connecting to
	var $proxy_host		=	"";					// proxy host to use
	var $proxy_port		=	"";					// proxy port to use
	var $proxy_user		=	"";					// proxy user to use
	var $proxy_pass		=	"";					// proxy password to use

	var $agent			=	"Snoopy v1.2.4";	// agent we masquerade as
	var	$referer		=	"";					// referer info to pass
	var $cookies		=	array();			// array of cookies to pass
												// $cookies["username"]="joe";
	var	$rawheaders		=	array();			// array of raw headers to send
												// $rawheaders["Content-Type"]="text/html";

	var $maxredirs		=	5;					// http redirection depth maximum. 0 = disallow
	var $lastredirectaddr	=	"";				// contains address of last redirected address
	var	$offsiteok		=	true;				// allows redirection off-site
	var $maxframes		=	0;					// frame content depth maximum. 0 = disallow
	var $expandlinks	=	true;				// expand links to fully qualified URLs.
												// this only applies to fetchlinks()
												// submitlinks(), and submittext()
	var $passcookies	=	true;				// pass set cookies back through redirects
												// NOTE: this currently does not respect
												// dates, domains or paths.

	var	$user			=	"";					// user for http authentication
	var	$pass			=	"";					// password for http authentication

	// http accept types
	var $accept			=	"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";

	var $results		=	"";					// where the content is put

	var $error			=	"";					// error messages sent here
	var	$response_code	=	"";					// response code returned from server
	var	$headers		=	array();			// headers returned from server sent here
	var	$maxlength		=	500000;				// max return data length (body)
	var $read_timeout	=	0;					// timeout on read operations, in seconds
												// supported only since PHP 4 Beta 4
												// set to 0 to disallow timeouts
	var $timed_out		=	false;				// if a read operation timed out
	var	$status			=	0;					// http request status

	var $temp_dir		=	"/tmp";				// temporary directory that the webserver
												// has permission to write to.
												// under Windows, this should be C:\temp

	var	$curl_path		=	"/usr/local/bin/curl";
												// Snoopy will use cURL for fetching
												// SSL content if a full system path to
												// the cURL binary is supplied here.
												// set to false if you do not have
												// cURL installed. See http://curl.haxx.se
												// for details on installing cURL.
												// Snoopy does *not* use the cURL
												// library functions built into php,
												// as these functions are not stable
												// as of this Snoopy release.

	/**** Private variables ****/

	var	$_maxlinelen	=	4096;				// max line length (headers)

	var $_httpmethod	=	"GET";				// default http request method
	var $_httpversion	=	"HTTP/1.0";			// default http request version
	var $_submit_method	=	"POST";				// default submit method
	var $_submit_type	=	"application/x-www-form-urlencoded";	// default submit type
	var $_mime_boundary	=   "";					// MIME boundary for multipart/form-data submit type
	var $_redirectaddr	=	false;				// will be set if page fetched is a redirect
	var $_redirectdepth	=	0;					// increments on an http redirect
	var $_frameurls		= 	array();			// frame src urls
	var $_framedepth	=	0;					// increments on frame depth

	var $_isproxy		=	false;				// set if using a proxy server
	var $_fp_timeout	=	30;					// timeout for socket connection

/*======================================================================*\
	Function:	fetch
	Purpose:	fetch the contents of a web page
				(and possibly other protocols in the
				future like ftp, nntp, gopher, etc.)
	Input:		$URI	the location of the page to fetch
	Output:		$this->results	the output text from the fetch
\*======================================================================*/

	function fetch($URI)
	{

		//preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS);
		$URI_PARTS = parse_url($URI);
		if (!empty($URI_PARTS["user"]))
			$this->user = $URI_PARTS["user"];
		if (!empty($URI_PARTS["pass"]))
			$this->pass = $URI_PARTS["pass"];
		if (empty($URI_PARTS["query"]))
			$URI_PARTS["query"] = '';
		if (empty($URI_PARTS["path"]))
			$URI_PARTS["path"] = '';

		switch(strtolower($URI_PARTS["scheme"]))
		{
			case "http":
				$this->host = $URI_PARTS["host"];
				if(!empty($URI_PARTS["port"]))
					$this->port = $URI_PARTS["port"];
				if($this->_connect($fp))
				{
					if($this->_isproxy)
					{
						// using proxy, send entire URI
						$this->_httprequest($URI,$fp,$URI,$this->_httpmethod);
					}
					else
					{
						$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : "");
						// no proxy, send only the path
						$this->_httprequest($path, $fp, $URI, $this->_httpmethod);
					}

					$this->_disconnect($fp);

					if($this->_redirectaddr)
					{
						/* url was redirected, check if we've hit the max depth */
						if($this->maxredirs > $this->_redirectdepth)
						{
							// only follow redirect if it's on this site, or offsiteok is true
							if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)
							{
								/* follow the redirect */
								$this->_redirectdepth++;
								$this->lastredirectaddr=$this->_redirectaddr;
								$this->fetch($this->_redirectaddr);
							}
						}
					}

					if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0)
					{
						$frameurls = $this->_frameurls;
						$this->_frameurls = array();

						foreach ( $frameurls as $frameurl )
						{
							if($this->_framedepth < $this->maxframes)
							{
								$this->fetch($frameurl);
								$this->_framedepth++;
							}
							else
								break;
						}
					}
				}
				else
				{
					return false;
				}
				return true;
				break;
			case "https":
				if(!$this->curl_path)
					return false;
				if(function_exists("is_executable"))
				    if (!is_executable($this->curl_path))
				        return false;
				$this->host = $URI_PARTS["host"];
				if(!empty($URI_PARTS["port"]))
					$this->port = $URI_PARTS["port"];
				if($this->_isproxy)
				{
					// using proxy, send entire URI
					$this->_httpsrequest($URI,$URI,$this->_httpmethod);
				}
				else
				{
					$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : "");
					// no proxy, send only the path
					$this->_httpsrequest($path, $URI, $this->_httpmethod);
				}

				if($this->_redirectaddr)
				{
					/* url was redirected, check if we've hit the max depth */
					if($this->maxredirs > $this->_redirectdepth)
					{
						// only follow redirect if it's on this site, or offsiteok is true
						if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)
						{
							/* follow the redirect */
							$this->_redirectdepth++;
							$this->lastredirectaddr=$this->_redirectaddr;
							$this->fetch($this->_redirectaddr);
						}
					}
				}

				if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0)
				{
					$frameurls = $this->_frameurls;
					$this->_frameurls = array();

					foreach ( $frameurls as $frameurl )
					{
						if($this->_framedepth < $this->maxframes)
						{
							$this->fetch($frameurl);
							$this->_framedepth++;
						}
						else
							break;
					}
				}
				return true;
				break;
			default:
				// not a valid protocol
				$this->error	=	'Invalid protocol "'.$URI_PARTS["scheme"].'"\n';
				return false;
				break;
		}
		return true;
	}

/*======================================================================*\
	Function:	submit
	Purpose:	submit an http form
	Input:		$URI	the location to post the data
				$formvars	the formvars to use.
					format: $formvars["var"] = "val";
				$formfiles  an array of files to submit
					format: $formfiles["var"] = "/dir/filename.ext";
	Output:		$this->results	the text output from the post
\*======================================================================*/

	function submit($URI, $formvars="", $formfiles="")
	{
		unset($postdata);

		$postdata = $this->_prepare_post_body($formvars, $formfiles);

		$URI_PARTS = parse_url($URI);
		if (!empty($URI_PARTS["user"]))
			$this->user = $URI_PARTS["user"];
		if (!empty($URI_PARTS["pass"]))
			$this->pass = $URI_PARTS["pass"];
		if (empty($URI_PARTS["query"]))
			$URI_PARTS["query"] = '';
		if (empty($URI_PARTS["path"]))
			$URI_PARTS["path"] = '';

		switch(strtolower($URI_PARTS["scheme"]))
		{
			case "http":
				$this->host = $URI_PARTS["host"];
				if(!empty($URI_PARTS["port"]))
					$this->port = $URI_PARTS["port"];
				if($this->_connect($fp))
				{
					if($this->_isproxy)
					{
						// using proxy, send entire URI
						$this->_httprequest($URI,$fp,$URI,$this->_submit_method,$this->_submit_type,$postdata);
					}
					else
					{
						$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : "");
						// no proxy, send only the path
						$this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata);
					}

					$this->_disconnect($fp);

					if($this->_redirectaddr)
					{
						/* url was redirected, check if we've hit the max depth */
						if($this->maxredirs > $this->_redirectdepth)
						{
							if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr))
								$this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]);

							// only follow redirect if it's on this site, or offsiteok is true
							if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)
							{
								/* follow the redirect */
								$this->_redirectdepth++;
								$this->lastredirectaddr=$this->_redirectaddr;
								if( strpos( $this->_redirectaddr, "?" ) > 0 )
									$this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get
								else
									$this->submit($this->_redirectaddr,$formvars, $formfiles);
							}
						}
					}

					if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0)
					{
						$frameurls = $this->_frameurls;
						$this->_frameurls = array();

						foreach ( $frameurls as $frameurl )
						{
							if($this->_framedepth < $this->maxframes)
							{
								$this->fetch($frameurl);
								$this->_framedepth++;
							}
							else
								break;
						}
					}

				}
				else
				{
					return false;
				}
				return true;
				break;
			case "https":
				if(!$this->curl_path)
					return false;
				if(function_exists("is_executable"))
				    if (!is_executable($this->curl_path))
				        return false;
				$this->host = $URI_PARTS["host"];
				if(!empty($URI_PARTS["port"]))
					$this->port = $URI_PARTS["port"];
				if($this->_isproxy)
				{
					// using proxy, send entire URI
					$this->_httpsrequest($URI, $URI, $this->_submit_method, $this->_submit_type, $postdata);
				}
				else
				{
					$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : "");
					// no proxy, send only the path
					$this->_httpsrequest($path, $URI, $this->_submit_method, $this->_submit_type, $postdata);
				}

				if($this->_redirectaddr)
				{
					/* url was redirected, check if we've hit the max depth */
					if($this->maxredirs > $this->_redirectdepth)
					{
						if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr))
							$this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]);

						// only follow redirect if it's on this site, or offsiteok is true
						if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)
						{
							/* follow the redirect */
							$this->_redirectdepth++;
							$this->lastredirectaddr=$this->_redirectaddr;
							if( strpos( $this->_redirectaddr, "?" ) > 0 )
								$this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get
							else
								$this->submit($this->_redirectaddr,$formvars, $formfiles);
						}
					}
				}

				if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0)
				{
					$frameurls = $this->_frameurls;
					$this->_frameurls = array();

					foreach ( $frameurls as $frameurl )
					{
						if($this->_framedepth < $this->maxframes)
						{
							$this->fetch($frameurl);
							$this->_framedepth++;
						}
						else
							break;
					}
				}
				return true;
				break;

			default:
				// not a valid protocol
				$this->error	=	'Invalid protocol "'.$URI_PARTS["scheme"].'"\n';
				return false;
				break;
		}
		return true;
	}

/*======================================================================*\
	Function:	fetchlinks
	Purpose:	fetch the links from a web page
	Input:		$URI	where you are fetching from
	Output:		$this->results	an array of the URLs
\*======================================================================*/

	function fetchlinks($URI)
	{
		if ($this->fetch($URI))
		{
			if($this->lastredirectaddr)
				$URI = $this->lastredirectaddr;
			if(is_array($this->results))
			{
				for($x=0;$x<count($this->results);$x++)
					$this->results[$x] = $this->_striplinks($this->results[$x]);
			}
			else
				$this->results = $this->_striplinks($this->results);

			if($this->expandlinks)
				$this->results = $this->_expandlinks($this->results, $URI);
			return true;
		}
		else
			return false;
	}

/*======================================================================*\
	Function:	fetchform
	Purpose:	fetch the form elements from a web page
	Input:		$URI	where you are fetching from
	Output:		$this->results	the resulting html form
\*======================================================================*/

	function fetchform($URI)
	{

		if ($this->fetch($URI))
		{

			if(is_array($this->results))
			{
				for($x=0;$x<count($this->results);$x++)
					$this->results[$x] = $this->_stripform($this->results[$x]);
			}
			else
				$this->results = $this->_stripform($this->results);

			return true;
		}
		else
			return false;
	}


/*======================================================================*\
	Function:	fetchtext
	Purpose:	fetch the text from a web page, stripping the links
	Input:		$URI	where you are fetching from
	Output:		$this->results	the text from the web page
\*======================================================================*/

	function fetchtext($URI)
	{
		if($this->fetch($URI))
		{
			if(is_array($this->results))
			{
				for($x=0;$x<count($this->results);$x++)
					$this->results[$x] = $this->_striptext($this->results[$x]);
			}
			else
				$this->results = $this->_striptext($this->results);
			return true;
		}
		else
			return false;
	}

/*======================================================================*\
	Function:	submitlinks
	Purpose:	grab links from a form submission
	Input:		$URI	where you are submitting from
	Output:		$this->results	an array of the links from the post
\*======================================================================*/

	function submitlinks($URI, $formvars="", $formfiles="")
	{
		if($this->submit($URI,$formvars, $formfiles))
		{
			if($this->lastredirectaddr)
				$URI = $this->lastredirectaddr;
			if(is_array($this->results))
			{
				for($x=0;$x<count($this->results);$x++)
				{
					$this->results[$x] = $this->_striplinks($this->results[$x]);
					if($this->expandlinks)
						$this->results[$x] = $this->_expandlinks($this->results[$x],$URI);
				}
			}
			else
			{
				$this->results = $this->_striplinks($this->results);
				if($this->expandlinks)
					$this->results = $this->_expandlinks($this->results,$URI);
			}
			return true;
		}
		else
			return false;
	}

/*======================================================================*\
	Function:	submittext
	Purpose:	grab text from a form submission
	Input:		$URI	where you are submitting from
	Output:		$this->results	the text from the web page
\*======================================================================*/

	function submittext($URI, $formvars = "", $formfiles = "")
	{
		if($this->submit($URI,$formvars, $formfiles))
		{
			if($this->lastredirectaddr)
				$URI = $this->lastredirectaddr;
			if(is_array($this->results))
			{
				for($x=0;$x<count($this->results);$x++)
				{
					$this->results[$x] = $this->_striptext($this->results[$x]);
					if($this->expandlinks)
						$this->results[$x] = $this->_expandlinks($this->results[$x],$URI);
				}
			}
			else
			{
				$this->results = $this->_striptext($this->results);
				if($this->expandlinks)
					$this->results = $this->_expandlinks($this->results,$URI);
			}
			return true;
		}
		else
			return false;
	}



/*======================================================================*\
	Function:	set_submit_multipart
	Purpose:	Set the form submission content type to
				multipart/form-data
\*======================================================================*/
	function set_submit_multipart()
	{
		$this->_submit_type = "multipart/form-data";
	}


/*======================================================================*\
	Function:	set_submit_normal
	Purpose:	Set the form submission content type to
				application/x-www-form-urlencoded
\*======================================================================*/
	function set_submit_normal()
	{
		$this->_submit_type = "application/x-www-form-urlencoded";
	}




/*======================================================================*\
	Private functions
\*======================================================================*/


/*======================================================================*\
	Function:	_striplinks
	Purpose:	strip the hyperlinks from an html document
	Input:		$document	document to strip.
	Output:		$match		an array of the links
\*======================================================================*/

	function _striplinks($document)
	{
		preg_match_all("'<\s*a\s.*?href\s*=\s*			# find <a href=
						([\"\'])?					# find single or double quote
						(?(1) (.*?)\\1 | ([^\s\>]+))		# if quote found, match up to next matching
													# quote, otherwise match up to next space
						'isx",$document,$links);


		// catenate the non-empty matches from the conditional subpattern

		foreach ( $links[2] as $key => $val )
		{
			if(!empty($val))
				$match[] = $val;
		}

		foreach ( $links[3] as $key => $val )
		{
			if(!empty($val))
				$match[] = $val;
		}

		// return the links
		return $match;
	}

/*======================================================================*\
	Function:	_stripform
	Purpose:	strip the form elements from an html document
	Input:		$document	document to strip.
	Output:		$match		an array of the links
\*======================================================================*/

	function _stripform($document)
	{
		preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements);

		// catenate the matches
		$match = implode("\r\n",$elements[0]);

		// return the links
		return $match;
	}



/*======================================================================*\
	Function:	_striptext
	Purpose:	strip the text from an html document
	Input:		$document	document to strip.
	Output:		$text		the resulting text
\*======================================================================*/

	function _striptext($document)
	{

		// I didn't use preg eval (//e) since that is only available in PHP 4.0.
		// so, list your entities one by one here. I included some of the
		// more common ones.

		$search = array("'<script[^>]*?>.*?</script>'si",	// strip out javascript
						"'<[\/\!]*?[^<>]*?>'si",			// strip out html tags
						"'([\r\n])[\s]+'",					// strip out white space
						"'&(quot|#34|#034|#x22);'i",		// replace html entities
						"'&(amp|#38|#038|#x26);'i",			// added hexadecimal values
						"'&(lt|#60|#060|#x3c);'i",
						"'&(gt|#62|#062|#x3e);'i",
						"'&(nbsp|#160|#xa0);'i",
						"'&(iexcl|#161);'i",
						"'&(cent|#162);'i",
						"'&(pound|#163);'i",
						"'&(copy|#169);'i",
						"'&(reg|#174);'i",
						"'&(deg|#176);'i",
						"'&(#39|#039|#x27);'",
						"'&(euro|#8364);'i",				// europe
						"'&a(uml|UML);'",					// german
						"'&o(uml|UML);'",
						"'&u(uml|UML);'",
						"'&A(uml|UML);'",
						"'&O(uml|UML);'",
						"'&U(uml|UML);'",
						"'&szlig;'i",
						);
		$replace = array(	"",
							"",
							"\\1",
							"\"",
							"&",
							"<",
							">",
							" ",
							chr(161),
							chr(162),
							chr(163),
							chr(169),
							chr(174),
							chr(176),
							chr(39),
							chr(128),
							chr(0xE4), // ANSI &auml;
							chr(0xF6), // ANSI &ouml;
							chr(0xFC), // ANSI &uuml;
							chr(0xC4), // ANSI &Auml;
							chr(0xD6), // ANSI &Ouml;
							chr(0xDC), // ANSI &Uuml;
							chr(0xDF), // ANSI &szlig;
						);

		$text = preg_replace($search,$replace,$document);

		return $text;
	}

/*======================================================================*\
	Function:	_expandlinks
	Purpose:	expand each link into a fully qualified URL
	Input:		$links			the links to qualify
				$URI			the full URI to get the base from
	Output:		$expandedLinks	the expanded links
\*======================================================================*/

	function _expandlinks($links,$URI)
	{

		preg_match("/^[^\?]+/",$URI,$match);

		$match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]);
		$match = preg_replace("|/$|","",$match);
		$match_part = parse_url($match);
		$match_root =
		$match_part["scheme"]."://".$match_part["host"];

		$search = array( 	"|^http://".preg_quote($this->host)."|i",
							"|^(\/)|i",
							"|^(?!http://)(?!mailto:)|i",
							"|/\./|",
							"|/[^\/]+/\.\./|"
						);

		$replace = array(	"",
							$match_root."/",
							$match."/",
							"/",
							"/"
						);

		$expandedLinks = preg_replace($search,$replace,$links);

		return $expandedLinks;
	}

/*======================================================================*\
	Function:	_httprequest
	Purpose:	go get the http data from the server
	Input:		$url		the url to fetch
				$fp			the current open file pointer
				$URI		the full URI
				$body		body contents to send if any (POST)
	Output:
\*======================================================================*/

	function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="")
	{
		$cookie_headers = '';
		if($this->passcookies && $this->_redirectaddr)
			$this->setcookies();

		$URI_PARTS = parse_url($URI);
		if(empty($url))
			$url = "/";
		$headers = $http_method." ".$url." ".$this->_httpversion."\r\n";
		if(!empty($this->agent))
			$headers .= "User-Agent: ".$this->agent."\r\n";
		if(!empty($this->host) && !isset($this->rawheaders['Host'])) {
			$headers .= "Host: ".$this->host;
			if(!empty($this->port) && $this->port != 80)
				$headers .= ":".$this->port;
			$headers .= "\r\n";
		}
		if(!empty($this->accept))
			$headers .= "Accept: ".$this->accept."\r\n";
		if(!empty($this->referer))
			$headers .= "Referer: ".$this->referer."\r\n";
		if(!empty($this->cookies))
		{
			if(!is_array($this->cookies))
				$this->cookies = (array)$this->cookies;

			reset($this->cookies);
			if ( count($this->cookies) > 0 ) {
				$cookie_headers .= 'Cookie: ';
				foreach ( $this->cookies as $cookieKey => $cookieVal ) {
				$cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; ";
				}
				$headers .= substr($cookie_headers,0,-2) . "\r\n";
			}
		}
		if(!empty($this->rawheaders))
		{
			if(!is_array($this->rawheaders))
				$this->rawheaders = (array)$this->rawheaders;
			foreach ( $this->rawheaders as $headerKey => $headerVal )
				$headers .= $headerKey.": ".$headerVal."\r\n";
		}
		if(!empty($content_type)) {
			$headers .= "Content-Type: $content_type";
			if ($content_type == "multipart/form-data")
				$headers .= "; boundary=".$this->_mime_boundary;
			$headers .= "\r\n";
		}
		if(!empty($body))
			$headers .= "Content-Length: ".strlen($body)."\r\n";
		if(!empty($this->user) || !empty($this->pass))
			$headers .= "Authorization: Basic ".base64_encode($this->user.":".$this->pass)."\r\n";

		//add proxy auth headers
		if(!empty($this->proxy_user))
			$headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n";


		$headers .= "\r\n";

		// set the read timeout if needed
		if ($this->read_timeout > 0)
			socket_set_timeout($fp, $this->read_timeout);
		$this->timed_out = false;

		fwrite($fp,$headers.$body,strlen($headers.$body));

		$this->_redirectaddr = false;
		unset($this->headers);

		while($currentHeader = fgets($fp,$this->_maxlinelen))
		{
			if ($this->read_timeout > 0 && $this->_check_timeout($fp))
			{
				$this->status=-100;
				return false;
			}

			if($currentHeader == "\r\n")
				break;

			// if a header begins with Location: or URI:, set the redirect
			if(preg_match("/^(Location:|URI:)/i",$currentHeader))
			{
				// get URL portion of the redirect
				preg_match("/^(Location:|URI:)[ ]+(.*)/i",chop($currentHeader),$matches);
				// look for :// in the Location header to see if hostname is included
				if(!preg_match("|\:\/\/|",$matches[2]))
				{
					// no host in the path, so prepend
					$this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port;
					// eliminate double slash
					if(!preg_match("|^/|",$matches[2]))
							$this->_redirectaddr .= "/".$matches[2];
					else
							$this->_redirectaddr .= $matches[2];
				}
				else
					$this->_redirectaddr = $matches[2];
			}

			if(preg_match("|^HTTP/|",$currentHeader))
			{
                if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status))
				{
					$this->status= $status[1];
                }
				$this->response_code = $currentHeader;
			}

			$this->headers[] = $currentHeader;
		}

		$results = '';
		do {
    		$_data = fread($fp, $this->maxlength);
    		if (strlen($_data) == 0) {
        		break;
    		}
    		$results .= $_data;
		} while(true);

		if ($this->read_timeout > 0 && $this->_check_timeout($fp))
		{
			$this->status=-100;
			return false;
		}

		// check if there is a redirect meta tag

		if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match))

		{
			$this->_redirectaddr = $this->_expandlinks($match[1],$URI);
		}

		// have we hit our frame depth and is there frame src to fetch?
		if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match))
		{
			$this->results[] = $results;
			for($x=0; $x<count($match[1]); $x++)
				$this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host);
		}
		// have we already fetched framed content?
		elseif(is_array($this->results))
			$this->results[] = $results;
		// no framed content
		else
			$this->results = $results;

		return true;
	}

/*======================================================================*\
	Function:	_httpsrequest
	Purpose:	go get the https data from the server using curl
	Input:		$url		the url to fetch
				$URI		the full URI
				$body		body contents to send if any (POST)
	Output:
\*======================================================================*/

	function _httpsrequest($url,$URI,$http_method,$content_type="",$body="")
	{
		if($this->passcookies && $this->_redirectaddr)
			$this->setcookies();

		$headers = array();

		$URI_PARTS = parse_url($URI);
		if(empty($url))
			$url = "/";
		// GET ... header not needed for curl
		//$headers[] = $http_method." ".$url." ".$this->_httpversion;
		if(!empty($this->agent))
			$headers[] = "User-Agent: ".$this->agent;
		if(!empty($this->host))
			if(!empty($this->port))
				$headers[] = "Host: ".$this->host.":".$this->port;
			else
				$headers[] = "Host: ".$this->host;
		if(!empty($this->accept))
			$headers[] = "Accept: ".$this->accept;
		if(!empty($this->referer))
			$headers[] = "Referer: ".$this->referer;
		if(!empty($this->cookies))
		{
			if(!is_array($this->cookies))
				$this->cookies = (array)$this->cookies;

			reset($this->cookies);
			if ( count($this->cookies) > 0 ) {
				$cookie_str = 'Cookie: ';
				foreach ( $this->cookies as $cookieKey => $cookieVal ) {
				$cookie_str .= $cookieKey."=".urlencode($cookieVal)."; ";
				}
				$headers[] = substr($cookie_str,0,-2);
			}
		}
		if(!empty($this->rawheaders))
		{
			if(!is_array($this->rawheaders))
				$this->rawheaders = (array)$this->rawheaders;
			foreach ( $this->rawheaders as $headerKey => $headerVal )
				$headers[] = $headerKey.": ".$headerVal;
		}
		if(!empty($content_type)) {
			if ($content_type == "multipart/form-data")
				$headers[] = "Content-Type: $content_type; boundary=".$this->_mime_boundary;
			else
				$headers[] = "Content-Type: $content_type";
		}
		if(!empty($body))
			$headers[] = "Content-Length: ".strlen($body);
		if(!empty($this->user) || !empty($this->pass))
			$headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass);

		$headerfile = tempnam( $this->temp_dir, "sno" );
		$cmdline_params = '-k -D ' . escapeshellarg( $headerfile );

		foreach ( $headers as $header ) {
			$cmdline_params .= ' -H ' . escapeshellarg( $header );
		}

		if ( ! empty( $body ) ) {
			$cmdline_params .= ' -d ' . escapeshellarg( $body );
		}

		if ( $this->read_timeout > 0 ) {
			$cmdline_params .= ' -m ' . escapeshellarg( $this->read_timeout );
		}


		exec( $this->curl_path . ' ' . $cmdline_params . ' ' . escapeshellarg( $URI ), $results, $return );

		if($return)
		{
			$this->error = "Error: cURL could not retrieve the document, error $return.";
			return false;
		}


		$results = implode("\r\n",$results);

		$result_headers = file("$headerfile");

		$this->_redirectaddr = false;
		unset($this->headers);

		for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++)
		{

			// if a header begins with Location: or URI:, set the redirect
			if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader]))
			{
				// get URL portion of the redirect
				preg_match("/^(Location: |URI:)\s+(.*)/",chop($result_headers[$currentHeader]),$matches);
				// look for :// in the Location header to see if hostname is included
				if(!preg_match("|\:\/\/|",$matches[2]))
				{
					// no host in the path, so prepend
					$this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port;
					// eliminate double slash
					if(!preg_match("|^/|",$matches[2]))
							$this->_redirectaddr .= "/".$matches[2];
					else
							$this->_redirectaddr .= $matches[2];
				}
				else
					$this->_redirectaddr = $matches[2];
			}

			if(preg_match("|^HTTP/|",$result_headers[$currentHeader]))
				$this->response_code = $result_headers[$currentHeader];

			$this->headers[] = $result_headers[$currentHeader];
		}

		// check if there is a redirect meta tag

		if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match))
		{
			$this->_redirectaddr = $this->_expandlinks($match[1],$URI);
		}

		// have we hit our frame depth and is there frame src to fetch?
		if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match))
		{
			$this->results[] = $results;
			for($x=0; $x<count($match[1]); $x++)
				$this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host);
		}
		// have we already fetched framed content?
		elseif(is_array($this->results))
			$this->results[] = $results;
		// no framed content
		else
			$this->results = $results;

		unlink("$headerfile");

		return true;
	}

/*======================================================================*\
	Function:	setcookies()
	Purpose:	set cookies for a redirection
\*======================================================================*/

	function setcookies()
	{
		for($x=0; $x<count($this->headers); $x++)
		{
		if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $this->headers[$x],$match))
			$this->cookies[$match[1]] = urldecode($match[2]);
		}
	}


/*======================================================================*\
	Function:	_check_timeout
	Purpose:	checks whether timeout has occurred
	Input:		$fp	file pointer
\*======================================================================*/

	function _check_timeout($fp)
	{
		if ($this->read_timeout > 0) {
			$fp_status = socket_get_status($fp);
			if ($fp_status["timed_out"]) {
				$this->timed_out = true;
				return true;
			}
		}
		return false;
	}

/*======================================================================*\
	Function:	_connect
	Purpose:	make a socket connection
	Input:		$fp	file pointer
\*======================================================================*/

	function _connect(&$fp)
	{
		if(!empty($this->proxy_host) && !empty($this->proxy_port))
			{
				$this->_isproxy = true;

				$host = $this->proxy_host;
				$port = $this->proxy_port;
			}
		else
		{
			$host = $this->host;
			$port = $this->port;
		}

		$this->status = 0;

		if($fp = fsockopen(
					$host,
					$port,
					$errno,
					$errstr,
					$this->_fp_timeout
					))
		{
			// socket connection succeeded

			return true;
		}
		else
		{
			// socket connection failed
			$this->status = $errno;
			switch($errno)
			{
				case -3:
					$this->error="socket creation failed (-3)";
				case -4:
					$this->error="dns lookup failure (-4)";
				case -5:
					$this->error="connection refused or timed out (-5)";
				default:
					$this->error="connection failed (".$errno.")";
			}
			return false;
		}
	}
/*======================================================================*\
	Function:	_disconnect
	Purpose:	disconnect a socket connection
	Input:		$fp	file pointer
\*======================================================================*/

	function _disconnect($fp)
	{
		return(fclose($fp));
	}


/*======================================================================*\
	Function:	_prepare_post_body
	Purpose:	Prepare post body according to encoding type
	Input:		$formvars  - form variables
				$formfiles - form upload files
	Output:		post body
\*======================================================================*/

	function _prepare_post_body($formvars, $formfiles)
	{
		settype($formvars, "array");
		settype($formfiles, "array");
		$postdata = '';

		if (count($formvars) == 0 && count($formfiles) == 0)
			return;

		switch ($this->_submit_type) {
			case "application/x-www-form-urlencoded":
				reset($formvars);
				foreach ( $formvars as $key => $val ) {
					if (is_array($val) || is_object($val)) {
						foreach ( $val as $cur_key => $cur_val ) {
							$postdata .= urlencode($key)."[]=".urlencode($cur_val)."&";
						}
					} else
						$postdata .= urlencode($key)."=".urlencode($val)."&";
				}
				break;

			case "multipart/form-data":
				$this->_mime_boundary = "Snoopy".md5(uniqid(microtime()));

				reset($formvars);
				foreach ( $formvars as $key => $val ) {
					if (is_array($val) || is_object($val)) {
						foreach ( $val as $cur_key => $cur_val ) {
							$postdata .= "--".$this->_mime_boundary."\r\n";
							$postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n";
							$postdata .= "$cur_val\r\n";
						}
					} else {
						$postdata .= "--".$this->_mime_boundary."\r\n";
						$postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n";
						$postdata .= "$val\r\n";
					}
				}

				reset($formfiles);
				foreach ( $formfiles as $field_name => $file_names ) {
					settype($file_names, "array");
					foreach ( $file_names as $file_name ) {
						if (!is_readable($file_name)) continue;

						$fp = fopen($file_name, "r");
						$file_content = fread($fp, filesize($file_name));
						fclose($fp);
						$base_name = basename($file_name);

						$postdata .= "--".$this->_mime_boundary."\r\n";
						$postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n";
						$postdata .= "$file_content\r\n";
					}
				}
				$postdata .= "--".$this->_mime_boundary."--\r\n";
				break;
		}

		return $postdata;
	}
}
endif;
?>

Directory Contents

Dirs: 33 × Files: 257
Name Size Perms Modified Actions
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
ai-client DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
assets DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
blocks DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
build DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
css DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
customize DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
fonts DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
html-api DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
ID3 DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
images DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
IXR DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
js DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
l10n DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
PHPMailer DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
pomo DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
Requests DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
rest-api DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
SimplePie DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
sitemaps DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
Text DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
widgets DIR
- drwxr-xr-x 2026-07-27 19:13:23
Edit Download
23.80 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
7.82 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
38.39 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.49 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
11.90 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
19.38 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
7.35 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
28.05 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
316 B lrw-r--r-- 2021-08-11 09:08:01
Edit Download
15.24 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
61.33 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
17.83 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
116.64 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
12.47 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
15.07 KB lrw-r--r-- 2024-07-17 01:21:12
Edit Download
10.76 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
13.17 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
33.83 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
42.61 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
55.65 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
12.53 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
29.30 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
539 B lrw-r--r-- 2024-11-13 02:20:25
Edit Download
367 B lrw-r--r-- 2022-11-02 04:48:19
Edit Download
2.55 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
42.65 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
401 B lrw-r--r-- 2022-11-02 04:48:20
Edit Download
6.61 KB lrw-r--r-- 2024-11-13 02:20:25
Edit Download
664 B lrw-r--r-- 2020-07-21 12:58:02
Edit Download
20.63 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
2.18 KB lrw-r--r-- 2023-08-09 04:35:47
Edit Download
453 B lrw-r--r-- 2024-11-13 02:20:25
Edit Download
457 B lrw-r--r-- 2021-01-26 13:45:57
Edit Download
36.83 KB lrw-r--r-- 2023-03-30 04:40:00
Edit Download
2.41 KB lrw-r--r-- 2023-11-08 04:28:28
Edit Download
8.28 KB lrw-r--r-- 2023-11-08 04:28:29
Edit Download
13.89 KB lrw-r--r-- 2024-07-17 01:21:12
Edit Download
11.76 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
2.65 KB lrw-r--r-- 2023-11-08 04:28:28
Edit Download
7.43 KB lrw-r--r-- 2023-11-08 04:28:28
Edit Download
17.58 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
5.14 KB lrw-r--r-- 2022-11-02 04:48:20
Edit Download
16.70 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
8.07 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.92 KB lrw-r--r-- 2024-11-13 02:20:25
Edit Download
1.32 KB lrw-r--r-- 2022-11-02 04:48:20
Edit Download
4.60 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
11.57 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.50 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
1.95 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
11.25 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
4.28 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
10.07 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
68.32 KB lrw-r--r-- 2026-02-12 14:08:38
Edit Download
6.27 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
6.40 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
1.99 KB lrw-r--r-- 2024-11-13 02:20:25
Edit Download
6.91 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
4.91 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
16.83 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
24.14 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
3.93 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
47.49 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
9.15 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
14.07 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
25.51 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
198.13 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
56.61 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
10.46 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
10.95 KB lrw-r--r-- 2024-11-13 02:20:25
Edit Download
29.26 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
70.89 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
35.13 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
16.69 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.59 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
39.95 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
70.54 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
15.54 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
7.33 KB lrw-r--r-- 2023-03-30 04:39:59
Edit Download
253 B lrw-r--r-- 2024-11-13 02:20:25
Edit Download
7.96 KB lrw-r--r-- 2024-11-13 02:20:25
Edit Download
3.23 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
969 B lrw-r--r-- 2024-11-13 02:20:25
Edit Download
16.25 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
7.10 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
12.95 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
6.53 KB lrw-r--r-- 2023-08-09 04:35:47
Edit Download
3.43 KB lrw-r--r-- 2026-06-07 20:00:04
Edit Download
5.84 KB lrw-r--r-- 2023-08-09 04:35:47
Edit Download
1.97 KB lrw-r--r-- 2023-03-30 04:40:00
Edit Download
4.14 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.91 KB lrw-r--r-- 2022-11-02 04:48:20
Edit Download
16.37 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
40.67 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
7.67 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
20.22 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
36.11 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
17.01 KB lrw-r--r-- 2026-06-07 20:00:04
Edit Download
7.27 KB lrw-r--r-- 2023-11-08 04:28:28
Edit Download
6.62 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
16.45 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
1.79 KB lrw-r--r-- 2024-04-04 04:45:29
Edit Download
29.79 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
6.67 KB lrw-r--r-- 2023-08-09 04:35:47
Edit Download
8.98 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
19.25 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
12.01 KB lrw-r--r-- 2024-11-13 02:20:25
Edit Download
17.11 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
6.74 KB lrw-r--r-- 2024-07-17 01:21:12
Edit Download
30.86 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
4.95 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
4.25 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
24.59 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
29.95 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
6.33 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
159.50 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
6.72 KB lrw-r--r-- 2022-11-02 04:48:20
Edit Download
10.90 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
4.80 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
3.44 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
11.18 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
62.20 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.46 KB lrw-r--r-- 2023-11-08 04:28:29
Edit Download
9.10 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
39.65 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
35.93 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
7.15 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
3.47 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
1.87 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
30.74 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
7.28 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
7.38 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
13.04 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
19.12 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
18.12 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
39.80 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
5.14 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
979 B lrw-r--r-- 2024-04-04 04:45:29
Edit Download
18.49 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
10.24 KB lrw-r--r-- 2024-11-22 02:17:39
Edit Download
1.77 KB lrw-r--r-- 2024-07-17 01:21:12
Edit Download
34.86 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
7.19 KB lrw-r--r-- 2024-07-17 01:21:12
Edit Download
169.57 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
64.22 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
27.95 KB lrw-r--r-- 2024-11-13 02:20:25
Edit Download
4.69 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
2.88 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
43.07 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.25 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
22.48 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
13.01 KB lrw-r--r-- 2024-09-11 01:20:33
Edit Download
3.27 KB lrw-r--r-- 2022-11-02 04:48:20
Edit Download
17.99 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
209.98 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
25.75 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
115.86 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
373 B lrw-r--r-- 2022-11-02 04:48:19
Edit Download
343 B lrw-r--r-- 2022-11-02 04:48:20
Edit Download
338 B lrw-r--r-- 2022-11-02 04:48:20
Edit Download
2.11 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
100.79 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
130.94 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
19.10 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
15.69 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
23.52 KB lrw-r--r-- 2026-06-07 20:00:04
Edit Download
43.94 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
400 B lrw-r--r-- 2022-11-02 04:48:20
Edit Download
11.10 KB lrw-r--r-- 2024-11-13 02:20:25
Edit Download
36.54 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.24 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
189.43 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
338 B lrw-r--r-- 2022-11-02 04:48:19
Edit Download
37.99 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
4.00 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.50 KB lrw-r--r-- 2025-03-18 15:20:37
Edit Download
5.38 KB lrw-r--r-- 2024-04-04 04:45:28
Edit Download
3.05 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
2.61 KB lrw-r--r-- 2020-01-29 00:45:18
Edit Download
1.16 KB lrw-r--r-- 2020-01-29 00:45:18
Edit Download
4.04 KB lrw-r--r-- 2024-04-04 04:45:28
Edit Download
3.71 KB lrw-r--r-- 2020-01-29 00:45:18
Edit Download
24.60 KB lrw-r--r-- 2026-02-12 14:08:38
Edit Download
14.84 KB lrw-r--r-- 2025-05-20 12:00:00
Edit Download
9.56 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
346.38 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
283.52 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
20.01 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
8.45 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
170.83 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
20.29 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
26.62 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
5.72 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
4.63 KB lrw-r--r-- 2023-08-09 04:35:47
Edit Download
80.64 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
69.74 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
156.39 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
55.15 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
162 B lrw-r--r-- 2019-10-08 17:19:04
Edit Download
61.79 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
218.55 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
65.17 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
25.71 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
4.81 KB lrw-r--r-- 2024-07-17 01:21:13
Edit Download
6.48 KB lrw-r--r-- 2023-03-30 04:39:59
Edit Download
21.24 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.79 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
89.69 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
19.57 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
3.69 KB lrw-r--r-- 2023-08-09 04:35:47
Edit Download
4.11 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
40.75 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
25.38 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
43.23 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
102.62 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
6.18 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
124.57 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
35.65 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
6.90 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
67.01 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
10.62 KB lrw-r--r-- 2025-09-28 15:01:49
Edit Download
289.58 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
36.23 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
200 B lrw-r--r-- 2020-11-12 11:17:07
Edit Download
200 B lrw-r--r-- 2020-11-12 11:17:07
Edit Download
98.52 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
29.99 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
19.00 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
5.06 KB lrw-r--r-- 2022-08-22 15:30:42
Edit Download
255 B lrw-r--r-- 2020-11-16 22:52:05
Edit Download
22.66 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
159.30 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
11.66 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
258 B lrw-r--r-- 2020-02-06 06:33:11
Edit Download
23.47 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
3.16 KB lrw-r--r-- 2021-05-15 17:38:05
Edit Download
8.40 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
441 B lrw-r--r-- 2020-11-12 11:17:07
Edit Download
7.39 KB lrw-r--r-- 2024-07-17 01:21:12
Edit Download
172.99 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
544 B lrw-r--r-- 2023-11-08 04:28:28
Edit Download
4.17 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
35.96 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
1.85 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
2.82 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
3.96 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
8.83 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
131.48 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
37.38 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
174.63 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
7.09 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
6.45 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
1.08 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
602 B lrw-r--r-- 2026-06-07 20:00:05
Edit Download
69.17 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
445 B lrw-r--r-- 2022-11-02 04:48:19
Edit Download
799 B lrw-r--r-- 2025-09-28 15:01:49
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).
© 2026 0xNothings — Secure File Manager. All rights reserved. Built with ❤️ & Tailwind x Dark UI
Upload
Kotlin Archives - Weelorum https://weelorum.com/technology/kotlin/ Full Cycle Mobile App Development Services For Startups Sun, 01 Mar 2026 20:04:38 +0000 en-US hourly 1 https://wordpress.org/?v=7.0 PayFlow https://weelorum.com/portfolio-projects/payflow/ Sun, 01 Mar 2026 20:04:38 +0000 https://weelorum.com/success-stories/payflow/ PayFlow is a fintech application that simplifies international money transfers and currency exchange. Users can hold multiple currencies, send money globally with competitive rates, and receive instant notifications. The app features biometric authentication and real-time transaction tracking.

Сообщение PayFlow появились сначала на Weelorum.

]]>
PayFlow is a fintech application that simplifies international money transfers and currency exchange. Users can hold multiple currencies, send money globally with competitive rates, and receive instant notifications. The app features biometric authentication and real-time transaction tracking.

Сообщение PayFlow появились сначала на Weelorum.

]]>
Knock Knock https://weelorum.com/portfolio-projects/knock-knock/ Sun, 01 Mar 2026 20:04:37 +0000 https://weelorum.com/success-stories/knock-knock/ Knock Knock is a real-time restaurant discovery app. It shows users what’s happening inside venues, how crowded they are, and offers live previews via photos and video. The app uses geolocation to help people choose where to eat or socialize based on current ambiance.

Сообщение Knock Knock появились сначала на Weelorum.

]]>
Knock Knock is a real-time restaurant discovery app. It shows users what’s happening inside venues, how crowded they are, and offers live previews via photos and video. The app uses geolocation to help people choose where to eat or socialize based on current ambiance.

Сообщение Knock Knock появились сначала на Weelorum.

]]>