func: function safeTransferFrom(address _from, address _to, uint256 _tokenId) 
          external 
          payable 
          mustExist(_tokenId) 
          canOperate(_tokenId) 
          notZero(uint(_to)) 
      {
          address owner = ownerOf(_tokenId);
          
          require (
              _from == owner, 
              "TOY Token not owned by '_from'"
          );
                 
          
          
          ExternalNft memory externalNft = uidToExternalNft[_tokenId];
          if (externalNft.nftContractAddress != 0) {
              
              ERC721 externalContract = ERC721(externalNft.nftContractAddress);
              
              externalContract.transferFrom(_from, _to, externalNft.nftId);
          }
  
          
          idToApprovedAddress[_tokenId] = 0;
          
          toyArray[uidToToyIndex[_tokenId]].owner = _to;
  
          emit Transfer(_from, _to, _tokenId);
  
          
          
          uint size;
          assembly { size := extcodesize(_to) }
          if (size > 0) {
              bytes4 retval = TokenReceiverInterface(_to).onERC721Received(msg.sender, _from, _tokenId, "");
              require(
                  retval == 0x150b7a02, 
                  "Destination contract not equipped to receive TOY Tokens"
              );
          }
      }