function buyByAtom(uint _atomId) external payable onlyActive onlyOwnerOf(_atomId, false) onlyBuying(_atomId, true) {
  	    address owner = CaDataContract.atomOwner(_atomId);
  	    uint128 isBuy;
        (,,,,,,,,isBuy,) = CaDataContract.atoms(_atomId);
	    require(isBuy == msg.value);
	    if(buyFeeRate>0)
	    {
	        uint128 fee = uint128(isBuy/100) * buyFeeRate;
            isBuy = isBuy - fee;
	        CaDataAddress.transfer(fee);
	    }
	    owner.transfer(isBuy);
        CaDataContract.setAtomIsBuy(_atomId,0);
        CaDataContract.setAtomIsRent(_atomId,0);
        CaDataContract.setOwnerAtomsCount(tx.origin,CaDataContract.ownerAtomsCount(tx.origin)+1);
        CaDataContract.setOwnerAtomsCount(owner,CaDataContract.ownerAtomsCount(owner)-1);
        CaDataContract.setAtomOwner(_atomId,tx.origin);
        CaCoreContract.createTransferAtom(owner, tx.origin, _atomId);
        NewBuyAtom(tx.origin,_atomId,owner,isBuy);
  	}