Tirupati.java

package org.drip.sample.securitysuite;

import org.drip.analytics.cashflow.CompositePeriod;
import org.drip.analytics.date.*;
import org.drip.numerical.common.FormatUtil;
import org.drip.numerical.linearalgebra.Matrix;
import org.drip.product.creator.BondBuilder;
import org.drip.product.credit.BondComponent;
import org.drip.service.env.EnvManager;
import org.drip.service.scenario.*;

/*
 * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 */

/*!
 * Copyright (C) 2018 Lakshmi Krishnamurthy
 * Copyright (C) 2017 Lakshmi Krishnamurthy
 * 
 *  This file is part of DRIP, a free-software/open-source library for buy/side financial/trading model
 *  	libraries targeting analysts and developers
 *  	https://lakshmidrip.github.io/DRIP/
 *  
 *  DRIP is composed of four main libraries:
 *  
 *  - DRIP Fixed Income - https://lakshmidrip.github.io/DRIP-Fixed-Income/
 *  - DRIP Asset Allocation - https://lakshmidrip.github.io/DRIP-Asset-Allocation/
 *  - DRIP Numerical Optimizer - https://lakshmidrip.github.io/DRIP-Numerical-Optimizer/
 *  - DRIP Statistical Learning - https://lakshmidrip.github.io/DRIP-Statistical-Learning/
 * 
 *  - DRIP Fixed Income: Library for Instrument/Trading Conventions, Treasury Futures/Options,
 *  	Funding/Forward/Overnight Curves, Multi-Curve Construction/Valuation, Collateral Valuation and XVA
 *  	Metric Generation, Calibration and Hedge Attributions, Statistical Curve Construction, Bond RV
 *  	Metrics, Stochastic Evolution and Option Pricing, Interest Rate Dynamics and Option Pricing, LMM
 *  	Extensions/Calibrations/Greeks, Algorithmic Differentiation, and Asset Backed Models and Analytics.
 * 
 *  - DRIP Asset Allocation: Library for model libraries for MPT framework, Black Litterman Strategy
 *  	Incorporator, Holdings Constraint, and Transaction Costs.
 * 
 *  - DRIP Numerical Optimizer: Library for Numerical Optimization and Spline Functionality.
 * 
 *  - DRIP Statistical Learning: Library for Statistical Evaluation and Machine Learning.
 * 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *   	you may not use this file except in compliance with the License.
 *   
 *  You may obtain a copy of the License at
 *  	http://www.apache.org/licenses/LICENSE-2.0
 *  
 *  Unless required by applicable law or agreed to in writing, software
 *  	distributed under the License is distributed on an "AS IS" BASIS,
 *  	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  
 *  See the License for the specific language governing permissions and
 *  	limitations under the License.
 */

/**
 * Tirupati generates the Full Suite of Replication Metrics for Bond Tirupati.
 * 
 * @author Lakshmi Krishnamurthy
 */

public class Tirupati {

	public static final void main (
		final String[] astArgs)
		throws Exception
	{
		EnvManager.InitEnv ("");

		JulianDate dtSpot = DateUtil.CreateFromYMD (
			2017,
			DateUtil.OCTOBER,
			5
		);

		String[] astrDepositTenor = new String[] {
			"2D"
		};

		double[] adblDepositQuote = new double[] {
			0.0130411 // 2D
		};

		double[] adblFuturesQuote = new double[] {
			0.01345,	// 98.655
			0.01470,	// 98.530
			0.01575,	// 98.425
			0.01660,	// 98.340
			0.01745,    // 98.255
			0.01845     // 98.155
		};

		String[] astrFixFloatTenor = new String[] {
			"02Y",
			"03Y",
			"04Y",
			"05Y",
			"06Y",
			"07Y",
			"08Y",
			"09Y",
			"10Y",
			"11Y",
			"12Y",
			"15Y",
			"20Y",
			"25Y",
			"30Y",
			"40Y",
			"50Y"
		};

		String[] astrGovvieTenor = new String[] {
			"1Y",
			"2Y",
			"3Y",
			"5Y",
			"7Y",
			"10Y",
			"20Y",
			"30Y"
		};

		double[] adblFixFloatQuote = new double[] {
			0.016410, //  2Y
			0.017863, //  3Y
			0.019030, //  4Y
			0.020035, //  5Y
			0.020902, //  6Y
			0.021660, //  7Y
			0.022307, //  8Y
			0.022879, //  9Y
			0.023363, // 10Y
			0.023820, // 11Y
			0.024172, // 12Y
			0.024934, // 15Y
			0.025581, // 20Y
			0.025906, // 25Y
			0.025973, // 30Y
			0.025838, // 40Y
			0.025560  // 50Y
		};

		double[] adblGovvieYield = new double[] {
			0.01219, //  1Y
			0.01391, //  2Y
			0.01590, //  3Y
			0.01937, //  5Y
			0.02200, //  7Y
			0.02378, // 10Y
			0.02677, // 20Y
			0.02927  // 30Y
		};

		String[] astrCreditTenor = new String[] {
			"06M",
			"01Y",
			"02Y",
			"03Y",
			"04Y",
			"05Y",
			"07Y",
			"10Y"
		};

		double[] adblCreditQuote = new double[] {
			 60.,	//  6M
			 68.,	//  1Y
			 88.,	//  2Y
			102.,	//  3Y
			121.,	//  4Y
			138.,	//  5Y
			168.,	//  7Y
			188.	// 10Y
		};

		double dblFX = 1.;
		int iSettleLag = 3;
		int iCouponFreq = 12;
		String strName = "Tirupati";
		double dblCleanPrice = 0.95;
		double dblIssuePrice = 1.;
		String strCurrency = "USD";
		double dblSpreadBump = 20.;
		double dblCouponRate = 0.03; 
		String strTreasuryCode = "UST";
		String strCouponDayCount = "30/360";
		double dblSpreadDurationMultiplier = 5.;

		org.drip.analytics.date.JulianDate[] adtPeriodEnd = new org.drip.analytics.date.JulianDate[] {
			DateUtil.CreateFromYMD (2017, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2017, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2017, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2018, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2019, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2020, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2021, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2022, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2023, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2024, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2025, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2026, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2027, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2028, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2029, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2030, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2031, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2032, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2033, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2034, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2035, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2036, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2037, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2038, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2039, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2040, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2041, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2042, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2043, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2044, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2045, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2046, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2047, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2048, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2049, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2050, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2051, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2052, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2053, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2054, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2055, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2056, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.NOVEMBER , 25),
		};

		double[] adblPrincipalPayDown = new double[] {
			217350.70,
			203908.42,
			202631.56,
			195957.39,
			178857.66,
			181354.46,
			173715.67,
			170408.51,
			164761.17,
			161664.07,
			153221.95,
			158639.07,
			153953.13,
			147363.66,
			147849.35,
			146306.70,
			141575.60,
			145385.54,
			138676.46,
			132353.55,
			139524.66,
			134678.63,
			130463.98,
			132475.98,
			129736.41,
			127476.10,
			126858.11,
			124509.24,
			128708.93,
			129180.76,
			121723.68,
			127444.00,
			125587.84,
			121428.61,
			126008.04,
			121807.22,
			120927.24,
			122671.09,
			116365.97,
			123266.68,
			117850.15,
			120931.84,
			114630.67,
			117707.97,
			113914.77,
			112200.87,
			112116.41,
			106786.98,
			112282.69,
			103468.39,
			103340.68,
			104757.67,
			98672.47,
			101660.82,
			95101.32,
			95095.03,
			87713.36,
			93758.68,
			87435.23,
			84060.79,
			86320.39,
			82404.21,
			79206.79,
			82316.21,
			74774.21,
			80412.86,
			77714.97,
			74658.45,
			70150.47,
			73347.22,
			69628.08,
			68466.86,
			68399.16,
			62964.04,
			67228.59,
			64704.07,
			60425.11,
			65059.71,
			59765.37,
			55537.06,
			61562.94,
			57380.49,
			53576.06,
			55412.08,
			54688.64,
			52320.77,
			51366.25,
			48670.33,
			51926.23,
			52366.11,
			47289.16,
			44664.05,
			47935.22,
			45646.84,
			43400.55,
			42219.96,
			40003.57,
			43261.40,
			39664.93,
			38844.20,
			39100.13,
			41009.48,
			33402.37,
			38042.93,
			35893.32,
			32408.89,
			35438.42,
			31956.91,
			31219.63,
			31814.69,
			27013.55,
			33016.89,
			28263.58,
			31572.88,
			25237.64,
			28559.32,
			25173.91,
			24499.07,
			25149.98,
			20455.36,
			26467.80,
			20449.64,
			21140.20,
			23148.11,
			19828.51,
			19178.53,
			20998.57,
			19038.54,
			15755.90,
			19141.40,
			15873.64,
			15263.85,
			15987.66,
			11413.17,
			16119.29,
			14208.34,
			10979.71,
			15693.15,
			12479.55,
			11912.41,
			10047.78,
			10809.69,
			6297.07,
			11024.85,
			9164.88,
			5988.28,
			8090.42,
			7561.47,
			5570.12,
			9008.02,
			4550.47,
			1409.32,
			7489.76,
			4362.91,
			1471.35,
			3611.01,
			3141.64,
			1340.36,
			857.78,
			0.00,
			1599.33,
			3385.49,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			27279819.36,
		};

		double[] adblCouponAmount = new double[] {
			48423.05,
			52966.10,
			46299.25,
			47642.15,
			59644.75,
			51942.65,
			55385.04,
			55128.52,
			56706.11,
			54633.58,
			59834.34,
			52362.98,
			53934.34,
			57287.47,
			53489.40,
			53271.07,
			54823.53,
			49322.90,
			54385.66,
			57669.15,
			48748.99,
			52025.03,
			55281.23,
			51633.50,
			51437.88,
			52954.51,
			52760.00,
			54262.12,
			48997.31,
			48813.59,
			55336.67,
			48455.44,
			49938.12,
			53069.52,
			47920.92,
			51033.53,
			50847.67,
			49028.85,
			53732.48,
			45430.82,
			50110.31,
			45098.50,
			51350.66,
			46372.91,
			49391.43,
			49217.61,
			47464.26,
			52028.58,
			43998.28,
			50106.89,
			48383.17,
			45114.16,
			48065.64,
			43278.13,
			47759.95,
			46078.87,
			50532.30,
			42755.00,
			47192.83,
			48577.45,
			43903.33,
			46799.43,
			48179.29,
			43549.42,
			49422.53,
			41831.21,
			43210.40,
			44585.65,
			47440.43,
			42892.75,
			45738.96,
			45632.71,
			44059.59,
			48354.44,
			42403.42,
			43766.33,
			46582.17,
			40676.12,
			44935.00,
			47736.96,
			40427.54,
			43224.31,
			46015.56,
			43060.47,
			42978.64,
			44327.82,
			44247.98,
			45594.43,
			41250.48,
			39756.48,
			43936.20,
			45279.01,
			40970.35,
			42312.33,
			43653.09,
			43586.87,
			44926.39,
			40657.44,
			43395.39,
			43334.87,
			41879.61,
			39033.75,
			45937.44,
			40321.59,
			41655.81,
			44376.33,
			40169.79,
			42886.04,
			42837.28,
			41409.33,
			45498.59,
			38567.63,
			42649.50,
			38483.17,
			43931.04,
			39776.48,
			42476.10,
			42437.69,
			41032.56,
			45094.96,
			38234.20,
			43654.54,
			42259.13,
			39502.56,
			42191.55,
			42161.29,
			39413.83,
			40741.92,
			43428.06,
			39334.19,
			42017.69,
			41993.47,
			40616.30,
			44651.96,
			39223.31,
			40552.03,
			43233.12,
			37813.85,
			40491.67,
			40473.24,
			41804.17,
			40440.81,
			44467.33,
			39068.36,
			40399.27,
			43078.12,
			40376.89,
			40364.95,
			41698.91,
			37655.85,
			41676.66,
			44358.09,
			37635.22,
			40312.39,
			42993.01,
			40303.78,
			40298.45,
			41636.93,
			41634.89,
			42020.62,
			39904.89,
			37602.32,
			40583.36,
			40113.31,
			39649.05,
			39188.50,
			38733.63,
			38282.46,
			37836.84,
			37394.87,
			36958.33,
			36524.57,
			36096.99,
			35672.96,
			35254.16,
			34838.88,
			34428.71,
			34022.04,
			33620.40,
			33222.23,
			32828.28,
			32438.64,
			32054.15,
			31647.08,
			31255.39,
			30882.38,
			30513.48,
			30149.14,
			29741.80,
			29363.43,
			29011.15,
			28662.06,
			28316.67,
			27975.18,
			27638.04,
			27304.08,
			26974.43,
			26647.34,
			26325.28,
			26006.63,
			25689.81,
			25323.52,
			25016.08,
			24712.58,
			24413.35,
			24117.52,
			23825.50,
			23537.82,
			23255.05,
			22956.22,
			22618.50,
			22346.78,
			22082.84,
			21824.32,
			21572.97,
			21329.56,
			21078.01,
			20863.47,
			20477.29,
			19718.39,
			74683.29,
			10724.18,
			10584.36,
			10468.23,
			10353.26,
			10239.43,
			10126.73,
			10015.15,
			9904.69,
			9795.33,
			9687.06,
			9579.87,
			9473.76,
			9368.71,
			9264.70,
			9161.74,
			9059.82,
			8958.91,
			8859.03,
			8760.14,
			8662.25,
			8565.35,
			8469.43,
			8374.47,
			8280.48,
			8187.44,
			8095.34,
			8004.18,
			7913.95,
			7824.65,
			7736.26,
			7648.78,
			7562.21,
			7476.54,
			7391.79,
			7307.94,
			7225.03,
			7143.12,
			7062.44,
			6949.32,
			6853.40,
			6775.26,
			6698.10,
			6610.06,
			6518.18,
			6443.50,
			6369.65,
			6295.71,
			6217.89,
			6138.36,
			6067.97,
			5998.86,
			5881.78,
			5813.80,
			5746.55,
			5680.02,
			5614.25,
			5546.32,
			5475.65,
			5412.04,
			5349.17,
			5298.52,
			5196.81,
			5130.26,
			5070.48,
			5007.77,
			4998.87,
			4824.42,
			4715.89,
			4660.66,
			4597.86,
			4510.38,
			4457.04,
			4404.28,
			4352.09,
			6471.57,
			4199.45,
			4149.80,
			4101.14,
			4013.25,
			3965.36,
			3918.00,
			3871.14,
			3824.81,
			3779.00,
			3733.73,
			3689.01,
			3644.88,
			3601.46,
			3551.67,
			3463.74,
			3422.15,
			3369.01,
			3325.30,
			3285.04,
			3245.25,
			3205.95,
			3165.64,
			3122.60,
			3081.78,
			3028.14,
			2991.23,
			2954.77,
			2918.75,
			3777.65,
			2813.56,
			2773.27,
			2736.29,
			2703.12,
			2670.52,
			2629.66,
			2587.71,
			2556.63,
			2526.13,
			2496.33,
			2467.38,
			2432.74,
			2393.24,
			2367.95,
			17484.80,
			1793.34,
			932.22,
			921.26,
			910.42,
			899.70,
			889.10,
			878.62,
			868.26,
			858.03,
			845.49,
			835.59,
			823.05,
			804.22,
			794.68,
			785.26,
			775.95,
			766.76,
			756.71,
			745.46,
			736.83,
			721.07,
			691.07,
			682.80,
			674.61,
			666.51,
			658.50,
			650.58,
			642.73,
			634.98,
			627.30,
			619.71,
			612.20,
			604.78,
			597.43,
			590.17,
			582.98,
			575.88,
			568.85,
			561.91,
			555.05,
			548.27,
			541.59,
			535.01,
			527.73,
			516.64,
			507.00,
			499.11,
			492.96,
			486.88,
			480.88,
			474.97,
			469.17,
			459.36,
			450.18,
			442.62,
			434.25,
			427.13,
			421.77,
			416.47,
			411.24,
			406.06,
			400.95,
			395.91,
			390.92,
			386.01,
			381.17,
			376.40,
			371.75,
			364.12,
			354.06,
			349.64,
			344.87,
			335.47,
			331.09,
			320.42,
			316.39,
			312.42,
			308.52,
			303.66,
			291.88,
			282.34,
			265.91,
			259.07,
			250.51,
			245.99,
			242.56,
			239.56,
			234.71,
			220.03,
			215.50,
			212.72,
			209.99,
			207.30,
			204.68,
			202.17,
			192.19,
			189.81,
			178.72,
			176.42,
			174.17,
			171.98,
			169.85,
			167.81,
			165.92,
			164.35,
			142.62,
			122.53,
			118.83,
			112.93,
			100.59,
			99.33,
			92.37,
			195.65,
			80.50,
			77.24,
			76.36,
			71.93,
			71.13,
			67.30,
			64.92,
			64.27,
			62.16,
			49.11,
			46.33,
			45.85,
			45.42,
			52.84,
			30.13,
			25.82,
			4.88,
		};

		double dblIssueAmount = Matrix.Sum (adblPrincipalPayDown);

		JulianDate dtEffective = DateUtil.CreateFromYMD (
			2017,
			DateUtil.SEPTEMBER,
			25
		);

		BondComponent bond = BondBuilder.CreateBondFromCF (
			strName,
			dtEffective,
			strCurrency,
			strName,
			strCouponDayCount,
			dblIssueAmount,
			dblCouponRate,
			iCouponFreq,
			adtPeriodEnd,
			adblCouponAmount,
			adblPrincipalPayDown,
			true
		);

		BondReplicator abr = BondReplicator.CorporateSenior (
			dblCleanPrice,
			dblIssuePrice,
			dblIssueAmount,
			dtSpot,
			astrDepositTenor,
			adblDepositQuote,
			adblFuturesQuote,
			astrFixFloatTenor,
			adblFixFloatQuote,
			dblSpreadBump,
			dblSpreadDurationMultiplier,
			strTreasuryCode,
			astrGovvieTenor,
			adblGovvieYield,
			astrCreditTenor,
			adblCreditQuote,
			dblFX,
			Double.NaN,
			iSettleLag,
			bond
		);

		BondReplicationRun abrr = abr.generateRun();

		System.out.println (abrr.display());

		double dblBalance = 1.;

		for (CompositePeriod p : bond.couponPeriods()) {
			int iEndDate = p.endDate();

			int iStartDate = p.startDate();

			double dblPrincipalPayDown = bond.notional (iStartDate) - bond.notional (iEndDate);

			double dblInterest = dblCouponRate * p.couponDCF() * bond.notional (iStartDate) * bond.couponFactor (iEndDate);

			dblBalance -= dblPrincipalPayDown;

			System.out.println (
				"\t" + new JulianDate (iEndDate) + " => " +
				FormatUtil.FormatDouble (dblPrincipalPayDown, 8, 2, dblIssueAmount) + " | " +
				FormatUtil.FormatDouble (dblInterest, 6, 2, dblIssueAmount) + " | " +
				FormatUtil.FormatDouble (dblPrincipalPayDown + dblInterest, 8, 2, dblIssueAmount) + " | " +
				FormatUtil.FormatDouble (dblBalance, 8, 2, dblIssueAmount) + " ||"
			);
		}
	}
}