public static double[,] CreateCashExtendedTable(MaturityValuePairs input, aaSwap_crv3Parameters parameters)
        {
            var result = new double[input.Rows, 6];
            var spotDate = aaDateAdjustWrapper.RollDate(parameters.ValuationDate, parameters.SpotDelay, 1, 4, parameters.HolidayCentre);
            for(int i = 0; i < input.Rows; ++i)
            {
                var tenorString = input.ObjectTable[i, 0].ToString();
                DateTime effectiveDate = Tenor.IsON(tenorString) ? parameters.ValuationDate : spotDate;
                DateTime terminatingDate = DateTime.MinValue;
                Tenor tenor = Tenor.FromString(tenorString);
                switch(tenor.TenorType)
                {
                    case TenorType.Month:
                        terminatingDate = aaDateAdjustWrapper.RollDate(effectiveDate, tenor.Duration, 4, parameters.AdjustMethod, parameters.HolidayCentre);
                        break;
                    case TenorType.Week:
                        terminatingDate = aaDateAdjustWrapper.RollDate(effectiveDate, tenor.Duration, 3, parameters.AdjustMethod, parameters.HolidayCentre);
                        break;
                    case TenorType.CalendarDay:
                        terminatingDate = aaDateAdjustWrapper.RollDate(effectiveDate, tenor.Duration, 2, parameters.AdjustMethod, parameters.HolidayCentre);
                        break;
                    case TenorType.BusinessDay:
                        terminatingDate = aaDateAdjustWrapper.RollDate(effectiveDate, tenor.Duration, 1, parameters.AdjustMethod, parameters.HolidayCentre);
                        break;
                    default:
                        throw new System.Exception("Unsupported tenor type in money market rates: " + tenorString);
                }

                result[i, 0] = effectiveDate.ToOADate();
                result[i, 1] = terminatingDate.ToOADate();
                result[i, 2] = (double)((decimal)input.ObjectTable[i, 1]);
                result[i, 3] = parameters.CashQuoteRateQuotationBasis;
                result[i, 4] = parameters.CashQuoteAccrualMethod;
                result[i, 5] = (double)1;
            }
            return result;
        }
        public static double[,] CreateSwapsExtendedTable(MaturityValuePairs input, aaSwap_crv3Parameters parameters)
        {
            var result = new double[input.Rows, 10];
            var spotDate = aaDateAdjustWrapper.RollDate(parameters.ValuationDate, parameters.SpotDelay, 1, parameters.AdjustMethod, parameters.HolidayCentre);
            for (int i = 0; i < input.Rows; ++i)
            {
                var tenorString = input.ObjectTable[i, 0].ToString();
                DateTime effectiveDate = spotDate;
                DateTime terminatingDate = DateTime.MinValue;
                Tenor tenor = Tenor.FromString(tenorString);
                switch (tenor.TenorType)
                {
                    case TenorType.Month:
                        terminatingDate = aaDateAdjustWrapper.RollDate(effectiveDate, tenor.Duration, 4, parameters.AdjustMethod, parameters.HolidayCentre);
                        break;
                    case TenorType.Week:
                        terminatingDate = aaDateAdjustWrapper.RollDate(effectiveDate, tenor.Duration, 3, parameters.AdjustMethod, parameters.HolidayCentre);
                        break;
                    case TenorType.CalendarDay:
                        terminatingDate = aaDateAdjustWrapper.RollDate(effectiveDate, tenor.Duration, 2, parameters.AdjustMethod, parameters.HolidayCentre);
                        break;
                    case TenorType.BusinessDay:
                        terminatingDate = aaDateAdjustWrapper.RollDate(effectiveDate, tenor.Duration, 1, parameters.AdjustMethod, parameters.HolidayCentre);
                        break;
                    case TenorType.Year:
                        terminatingDate = aaDateAdjustWrapper.RollDate(effectiveDate, tenor.Duration, 5, parameters.AdjustMethod, parameters.HolidayCentre);
                        break;
                    default:
                        throw new System.Exception("Unsupported tenor type in swap rates: " + tenorString);
                }

                result[i, 0] = effectiveDate.ToOADate();
                result[i, 1] = terminatingDate.ToOADate();
                result[i, 2] = (double)((decimal)input.ObjectTable[i, 1]);
                result[i, 3] = parameters.SwapQuoteFixedPayFrequency;
                result[i, 4] = parameters.SwapQuoteFixedAccrualMethod;
                result[i, 5] = parameters.SwapQuoteBusinessDayConvention;
                result[i, 6] = (double)1;
                result[i, 7] = double.NaN;
                result[i, 8] = parameters.SwapQuoteFloatingPayFrequency;
                result[i, 9] = parameters.SwapQuoteFloatingAccrualMethod;
            }
            return result;
        }