func: function transferFrom(
      address _from,
      address _to,
      uint256 _tokenId
    )
      public
    {
      address tokenOwner = ownerOf(_tokenId);
      require(isSenderApprovedFor(_tokenId) || 
        (approvedContractAddresses[msg.sender] && tokenOwner == tx.origin), "not an approved sender");
      require(tokenOwner == _from, "wrong owner");
      _clearApprovalAndTransfer(ownerOf(_tokenId), _to, _tokenId);
    }