<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def getHorsetail(self):
        '''Function that gets vectors of the horsetail plot at the last design
        evaluated.

        :return: upper_curve, lower_curve, CDFs - returns three parameters,
            the first two are tuples containing pairs of x/y vectors of the
            upper and lower bounds on the CDFs (the horsetail plot). The
            third parameter is a list of x/y tuples for individual CDFs
            propagated at each sampled value of the interval uncertainties

        *Example Usage*::

            >>> def myFunc(x, u): return x[0]*x[1] + u
            >>> u = UniformParameter()
            >>> theHM = HorsetailMatching(myFunc, u)
            >>> (x1, y1, t1), (x2, y2, t2), CDFs = theHM.getHorsetail()
            >>> matplotlib.pyplot(x1, y1, 'b')
            >>> matplotlib.pyplot(x2, y2, 'b')
            >>> for (x, y) in CDFs:
            ...     matplotlib.pyplot(x, y, 'k:')
            >>> matplotlib.pyplot.show()

        '''

        if hasattr(self, '_ql'):

            ql, qu, hl, hu = self._ql, self._qu, self._hl, self._hu
            qh, hh = self._qh, self._hh

            if self._qis is not None:
                ql, hl = _appendPlotArrays(ql, hl, self._qis)
                qu, hu = _appendPlotArrays(qu, hu, self._qis)

            CDFs = []
            for qi, hi in zip(qh, hh):
                CDFs.append((qi, hi))

            upper_target = [self._ftarg_u(h) for h in hu]
            upper_curve = (qu, hu, upper_target)
            lower_target = [self._ftarg_l(h) for h in hl]
            lower_curve = (ql, hl, lower_target)
            return upper_curve, lower_curve, CDFs

        else:
            raise ValueError('''The metric has not been evaluated at any
                    design point so the horsetail does not exist''')