<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def FindUnspentCoinsByAssetAndTotal(self, asset_id, amount, from_addr=None, use_standard=False, watch_only_val=0, reverse=False):
 """ Finds unspent coin objects totalling a requested value in the wallet limited to those of a certain asset type. Args: asset_id (UInt256):
 a bytearray (len 32) representing an asset on the blockchain. amount (int):
 the amount of unspent coins that are being requested. from_addr (UInt160):
 a bytearray (len 20) representing an address. use_standard (bool):
 whether or not to only include standard contracts ( i.e not a smart contract addr ). watch_only_val (int):
 a flag ( 0 or 64 ) indicating whether or not to find coins that are in 'watch only' addresses. Returns: list: a list of ``neo.Wallet.Coin`` in the wallet that are not spent. this list is empty if there are not enough coins to satisfy the request. """

        coins = self.FindUnspentCoinsByAsset(asset_id, from_addr=from_addr,
                                             use_standard=use_standard, watch_only_val=watch_only_val)

        sum = Fixed8(0)

        for coin in coins:
            sum = sum + coin.Output.Value

        if sum < amount:
            return None

        coins = sorted(coins, key=lambda coin: coin.Output.Value.value)

        if reverse:
            coins.reverse()

        total = Fixed8(0)

        # go through all coins, see if one is an exact match. then we'll use that
        for coin in coins:
            if coin.Output.Value == amount:
                return [coin]

        to_ret = []
        for coin in coins:
            total = total + coin.Output.Value
            to_ret.append(coin)
            if total >= amount:
                break

        return to_ret