Question No. 3.1:

For the following series, find an appropriate Box-Cox transformation in order to stabilise the variance.

Analysis

The author tasks us with transforming time series by applying the Box Cox transformation. BoX-Cox transformations are used to normalize dependent variables. It is done so that the errors of the data are normally distributed. This also improves the predictability of the model.

Using Box Cox on a Time Series dataset helps reduce variations that either increase or decrease over the time of the series.

usnetelec

## starting httpd help server ... done

usnetelec {expsmooth} R Documentation Annual US net electricity generation Description Annual US net electricity generation (billion kwh) for 1949-2003

Usage data(usnetelec)

## [1] 1

This series is collected on an annual basis, so there is no seasonality to this time series.

The BoxCox lambda is 0.517

## [1] 0.5167714

As stated, there is no seasonality in this time series, but there is an upwards trend with constant variation. Thus, there was no need for the Box Cox transformation. The two plots below show no real transformation from applying the Box Cox transformation.

usgdpc

Quarterly US GDP Description Quarterly US GDP. 1947:1 - 2006.1.

Usage data(usgdp) Format time series

Source Hyndman, R.J., Koehler, A.B., Ord, J.K., and Snyder, R.D., (2008) Forecasting with exponential smoothing: the state space approach, Springer

References http://www.exponentialsmoothing.net

## [1] 4

This time series is collected on a quarterly basis, and from the polar plot, no seasonality.

The BoxCox lambda is 0.366

## [1] 0.366352

As with the previous time series, there is no seasonality nor is there any variance that is not constant. Thus, there was no need for the Box Cox transformation.

mcopper

Monthly copper prices Description Monthly copper prices. Copper, grade A, electrolytic wire bars/cathodes,LME,cash (pounds/ton) Source: UNCTAD (http://stats.unctad.org/Handbook).

Usage data(mcopper) Format time series

Source Hyndman, R.J., Koehler, A.B., Ord, J.K., and Snyder, R.D., (2008) Forecasting with exponential smoothing: the state space approach, Springer

References http://www.exponentialsmoothing.net

## [1] 12

The frequency of this time series is monthly.

The BoxCox lambda is 0.192

## [1] 0.1919047

In the mcopper time series, there is some seasonality, but the variance does not increase with the trend. Box Cox transformation was not needed.

enplanements

Monthly US domestic enplanements Description "Domestic Revenue Enplanements (millions): 1996-2000. SOURCE: Department of Transportation, Bureau of Transportation Statistics, Air Carrier Traffic Statistic Monthly.

Usage data(enplanements) Format time series

Source Hyndman, R.J., Koehler, A.B., Ord, J.K., and Snyder, R.D., (2008) Forecasting with exponential smoothing: the state space approach, Springer

References http://www.exponentialsmoothing.

## [1] 12

## [1] -0.2269461

We see here that the Box Cox transformation did transform the seasonality of the enplanements data which does show a seasonal jump in the summer months.

Question No. 3.2:

Why is a Box-Cox transformation unhelpful for the cangas data?

cangas

Monthly Canadian gas production Description Monthly Canadian gas production, billions of cubic metres, January 1960 - February 2005

Usage data(cangas) Format time series

Source Hyndman, R.J., Koehler, A.B., Ord, J.K., and Snyder, R.D., (2008) Forecasting with exponential smoothing: the state space approach, Springer.

References http://www.exponentialsmoothing.net

## [1] 12
##         Jan    Feb    Mar    Apr    May    Jun
## 1960 1.4306 1.3059 1.4022 1.1699 1.1161 1.0113
##          Jan     Feb Mar Apr May Jun Jul Aug     Sep     Oct     Nov     Dec
## 2004                                         16.9067 17.8268 17.8322 19.4526
## 2005 19.5284 16.9441

## [1] 0.5767759

Answer

The cangas time series shows a long term, increasing trend from 1960 to 2005 without much seasonality but with cycles. It also shows Homoscedasticity, where variation in the data neither increases nor decreases with the level of the series in general.

Box Cox transformations work best for data that shows Heteroscedasticity where the variation is inconsistent with the level of the series.

Question No. 3.3:

What Box-Cox transformation would you select for your retail data (from Exercise 3 in Section 2.10)?

Setting the polar attribute to TRUE for the ggseasonplot further deomonstrates the seasonal nature of liquor sales with a spike in December sales

Over the next two plots, the gglagplot and the ggACF plot, we see how observations are plotted against earlier observations or lags against itself. Lag 12 supports the finding that sales spike in the 12 month which is shown in the ggacf plot.

## [1] -0.04159144

### Answer

Given that the best Lambda chosen was 0, the best Box Cox transform would be a simple log transform. In the plots below, the log transform of the time series is the same as the Box Cox transform.

Question No. 3.8

For your retail time series (from Exercise 3 in Section 2.10):

b. Check that your data have been split appropriately by producing the following plot.

c. Calculate forecasts using snaive applied to myts.train.

d. Compare the accuracy of your forecasts against the actual values stored in myts.test.

##                     ME      RMSE       MAE      MPE      MAPE     MASE
## Training set  4.455255  8.699864  5.818619  6.15400  9.948117 1.000000
## Test set     19.170833 22.956217 19.520833 11.59039 11.813322 3.354891
##                   ACF1 Theil's U
## Training set 0.7261600        NA
## Test set     0.5801161 0.7479721

e. Check the residuals.

## 
##  Ljung-Box test
## 
## data:  Residuals from Seasonal naive method
## Q* = 783.91, df = 24, p-value < 2.2e-16
## 
## Model df: 0.   Total lags used: 24

Answer

The ACF plot shows siginificant correlations between time lags of the residuals. Multiple periods exceed the upper bound of the period which mean that the correlations are significant. According to the authors, “If there are correlations between residuals, then there is information left in the residuals which should be used in computing forecasts.”

The histogram plot shows a normal distribution of the residuals even though there is a little bit of a right tail to the distribution.

LS0tDQp0aXRsZTogIkRBVEE2MjQgU3ByaW5nIDIwMjEgSFcyIC0tIEZvcmVjYXN0aW5nLCBDaGFwdGVyIDMiDQphdXRob3I6ICJKb2huIEsuIEhhbmNvY2siDQpkYXRlOiAiMi8yMC8yMDIxIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGhpZ2hsaWdodDogcHlnbWVudHMNCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vDQogICAgdGhlbWU6IGZsYXRseQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoJ2ZwcDInKQ0KbGlicmFyeShzdHJpbmdyKSANCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KZGF0YSgidXNuZXRlbGVjIikNCmRhdGEoInVzZ2RwIikNCmRhdGEoIm1jb3BwZXIiKSANCmRhdGEoImVucGxhbmVtZW50cyIpDQpkYXRhKCJjYW5nYXMiKQ0KDQpgYGANCg0KDQojIyBRdWVzdGlvbiBOby4gMy4xOg0KRm9yIHRoZSBmb2xsb3dpbmcgc2VyaWVzLCBmaW5kIGFuIGFwcHJvcHJpYXRlIEJveC1Db3ggdHJhbnNmb3JtYXRpb24gaW4gb3JkZXIgdG8gc3RhYmlsaXNlIHRoZSB2YXJpYW5jZS4NCg0KDQo8dT48Yj5BbmFseXNpczwvYj48L3U+DQoNClRoZSBhdXRob3IgdGFza3MgdXMgd2l0aCB0cmFuc2Zvcm1pbmcgdGltZSBzZXJpZXMgYnkgYXBwbHlpbmcgdGhlIEJveCBDb3ggdHJhbnNmb3JtYXRpb24uICBCb1gtQ294IHRyYW5zZm9ybWF0aW9ucyBhcmUgdXNlZCB0byBub3JtYWxpemUgZGVwZW5kZW50IHZhcmlhYmxlcy4gSXQgaXMgZG9uZSBzbyB0aGF0IHRoZSBlcnJvcnMgb2YgdGhlIGRhdGEgYXJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkLiBUaGlzIGFsc28gaW1wcm92ZXMgdGhlIHByZWRpY3RhYmlsaXR5IG9mIHRoZSBtb2RlbC4gDQoNClVzaW5nIEJveCBDb3ggb24gYSBUaW1lIFNlcmllcyBkYXRhc2V0IGhlbHBzIHJlZHVjZSB2YXJpYXRpb25zIHRoYXQgZWl0aGVyIGluY3JlYXNlIG9yIGRlY3JlYXNlIG92ZXIgdGhlIHRpbWUgb2YgdGhlIHNlcmllcy4NCg0KIyMjIDx1PjxiPnVzbmV0ZWxlYzwvYj48L3U+DQoNCmBgYHtyfQ0KaGVscCgidXNuZXRlbGVjIikNCmBgYA0KDQp1c25ldGVsZWMge2V4cHNtb290aH0JUiBEb2N1bWVudGF0aW9uDQpBbm51YWwgVVMgbmV0IGVsZWN0cmljaXR5IGdlbmVyYXRpb24NCkRlc2NyaXB0aW9uDQpBbm51YWwgVVMgbmV0IGVsZWN0cmljaXR5IGdlbmVyYXRpb24gKGJpbGxpb24ga3doKSBmb3IgMTk0OS0yMDAzDQoNClVzYWdlDQpkYXRhKHVzbmV0ZWxlYykNCg0KDQpgYGB7cn0NCmZyZXF1ZW5jeSh1c25ldGVsZWMpDQpgYGANCg0KVGhpcyBzZXJpZXMgaXMgY29sbGVjdGVkIG9uIGFuIGFubnVhbCBiYXNpcywgc28gdGhlcmUgaXMgbm8gc2Vhc29uYWxpdHkgdG8gdGhpcyB0aW1lIHNlcmllcy4NCg0KYGBge3J9DQojZ2dzZWFzb25wbG90KHVzbmV0ZWxlYykNCmBgYA0KDQpgYGB7cn0NCiNnZ3N1YnNlcmllc3Bsb3QodXNuZXRlbGVjKQ0KYGBgDQoNClRoZSBCb3hDb3ggbGFtYmRhIGlzIDAuNTE3DQoNCmBgYHtyfQ0KbGFtYmRhIDwtIEJveENveC5sYW1iZGEodXNuZXRlbGVjKQ0KbGFtYmRhDQp0aXRsZSA8LSBwYXN0ZTAoIlRyYW5zZm9ybWVkIHcvIExhbWJkYSA9ICIscm91bmQobGFtYmRhLDMpKQ0KYGBgDQoNCkFzIHN0YXRlZCwgdGhlcmUgaXMgbm8gc2Vhc29uYWxpdHkgaW4gdGhpcyB0aW1lIHNlcmllcywgYnV0IHRoZXJlIGlzIGFuIHVwd2FyZHMgdHJlbmQgd2l0aCBjb25zdGFudCB2YXJpYXRpb24uICBUaHVzLCB0aGVyZSB3YXMgbm8gbmVlZCBmb3IgdGhlIEJveCBDb3ggdHJhbnNmb3JtYXRpb24uIFRoZSB0d28gcGxvdHMgYmVsb3cgc2hvdyBubyByZWFsIHRyYW5zZm9ybWF0aW9uIGZyb20gYXBwbHlpbmcgdGhlIEJveCBDb3ggdHJhbnNmb3JtYXRpb24uDQoNCg0KYGBge3J9DQoNCk5vdF9UcmFuc2Zvcm1lZCA8LSBhdXRvcGxvdCh1c25ldGVsZWMpICsgbGFicyh0aXRsZT0iTm9uIHRyYW5zZm9ybWVkIikNClRyYW5zZm9ybWVkIDwtIGF1dG9wbG90KEJveENveCh1c25ldGVsZWMsbGFtYmRhKSkgKyBsYWJzKHRpdGxlPXRpdGxlKSANCmdyaWQuYXJyYW5nZShOb3RfVHJhbnNmb3JtZWQsIFRyYW5zZm9ybWVkLCBuY29sPTEpDQpgYGANCg0KDQoNCg0KIyMjIDx1PjxiPnVzZ2RwYzwvYj48L3U+DQoNCmBgYHtyfQ0KaGVscCgidXNnZHAiKQ0KYGBgDQpRdWFydGVybHkgVVMgR0RQDQpEZXNjcmlwdGlvbg0KUXVhcnRlcmx5IFVTIEdEUC4gMTk0NzoxIC0gMjAwNi4xLg0KDQpVc2FnZQ0KZGF0YSh1c2dkcCkNCkZvcm1hdA0KdGltZSBzZXJpZXMNCg0KU291cmNlDQpIeW5kbWFuLCBSLkouLCBLb2VobGVyLCBBLkIuLCBPcmQsIEouSy4sIGFuZCBTbnlkZXIsIFIuRC4sICgyMDA4KSBGb3JlY2FzdGluZyB3aXRoIGV4cG9uZW50aWFsIHNtb290aGluZzogdGhlIHN0YXRlIHNwYWNlIGFwcHJvYWNoLCBTcHJpbmdlcg0KDQpSZWZlcmVuY2VzDQpodHRwOi8vd3d3LmV4cG9uZW50aWFsc21vb3RoaW5nLm5ldA0KDQoNCmBgYHtyfQ0KZnJlcXVlbmN5KHVzZ2RwKQ0KYGBgDQoNClRoaXMgdGltZSBzZXJpZXMgaXMgY29sbGVjdGVkIG9uIGEgcXVhcnRlcmx5IGJhc2lzLCBhbmQgZnJvbSB0aGUgcG9sYXIgcGxvdCwgbm8gc2Vhc29uYWxpdHkuDQoNCmBgYHtyfQ0KZ2dzZWFzb25wbG90KHVzZ2RwLCB5ZWFyLmxhYmVscz1GQUxTRSwgY29udGludW91cz1UUlVFLCBwb2xhciA9IFRSVUUpDQoNCmBgYA0KDQpgYGB7cn0NCmdnc3Vic2VyaWVzcGxvdCh1c2dkcCkNCmBgYA0KDQoNClRoZSBCb3hDb3ggbGFtYmRhIGlzIDAuMzY2DQoNCg0KYGBge3J9DQpsYW1iZGEgPC0gQm94Q294LmxhbWJkYSh1c2dkcCkNCmxhbWJkYQ0KdGl0bGUgPC0gcGFzdGUwKCJUcmFuc2Zvcm1lZCB3LyBMYW1iZGEgPSAiLHJvdW5kKGxhbWJkYSwzKSkNCg0KYGBgDQoNCmBgYHtyfQ0KTm90X1RyYW5zZm9ybWVkIDwtIGF1dG9wbG90KHVzZ2RwKSArIGxhYnModGl0bGU9Ik5vbiB0cmFuc2Zvcm1lZCIpDQpUcmFuc2Zvcm1lZCA8LSBhdXRvcGxvdChCb3hDb3godXNnZHAsbGFtYmRhKSkgKyBsYWJzKHRpdGxlPXRpdGxlKQ0KZ3JpZC5hcnJhbmdlKE5vdF9UcmFuc2Zvcm1lZCwgVHJhbnNmb3JtZWQsIG5jb2w9MSkNCmBgYA0KQXMgd2l0aCB0aGUgcHJldmlvdXMgdGltZSBzZXJpZXMsIHRoZXJlIGlzIG5vIHNlYXNvbmFsaXR5IG5vciBpcyB0aGVyZSBhbnkgdmFyaWFuY2UgdGhhdCBpcyBub3QgY29uc3RhbnQuIFRodXMsIHRoZXJlIHdhcyBubyBuZWVkIGZvciB0aGUgQm94IENveCB0cmFuc2Zvcm1hdGlvbi4NCg0KDQojIyMgPHU+PGI+bWNvcHBlcjwvYj48L3U+DQoNCg0KYGBge3J9DQpoZWxwKCJtY29wcGVyIikNCmBgYA0KTW9udGhseSBjb3BwZXIgcHJpY2VzDQpEZXNjcmlwdGlvbg0KTW9udGhseSBjb3BwZXIgcHJpY2VzLiBDb3BwZXIsIGdyYWRlIEEsIGVsZWN0cm9seXRpYyB3aXJlIGJhcnMvY2F0aG9kZXMsTE1FLGNhc2ggKHBvdW5kcy90b24pIFNvdXJjZTogVU5DVEFEIChodHRwOi8vc3RhdHMudW5jdGFkLm9yZy9IYW5kYm9vaykuDQoNClVzYWdlDQpkYXRhKG1jb3BwZXIpDQpGb3JtYXQNCnRpbWUgc2VyaWVzDQoNClNvdXJjZQ0KSHluZG1hbiwgUi5KLiwgS29laGxlciwgQS5CLiwgT3JkLCBKLksuLCBhbmQgU255ZGVyLCBSLkQuLCAoMjAwOCkgRm9yZWNhc3Rpbmcgd2l0aCBleHBvbmVudGlhbCBzbW9vdGhpbmc6IHRoZSBzdGF0ZSBzcGFjZSBhcHByb2FjaCwgU3ByaW5nZXINCg0KUmVmZXJlbmNlcw0KaHR0cDovL3d3dy5leHBvbmVudGlhbHNtb290aGluZy5uZXQNCg0KYGBge3J9DQpmcmVxdWVuY3kobWNvcHBlcikNCmBgYA0KDQpUaGUgZnJlcXVlbmN5IG9mIHRoaXMgdGltZSBzZXJpZXMgaXMgbW9udGhseS4gDQoNCmBgYHtyfQ0KZ2dzZWFzb25wbG90KG1jb3BwZXIsIHllYXIubGFiZWxzPUZBTFNFLCBjb250aW51b3VzPVRSVUUsIHBvbGFyID0gVFJVRSkNCg0KYGBgDQoNCmBgYHtyfQ0KZ2dzdWJzZXJpZXNwbG90KG1jb3BwZXIpDQpgYGANCg0KVGhlIEJveENveCBsYW1iZGEgaXMgMC4xOTINCg0KYGBge3J9DQpsYW1iZGEgPC0gQm94Q294LmxhbWJkYShtY29wcGVyKQ0KbGFtYmRhDQp0aXRsZSA8LSBwYXN0ZTAoIlRyYW5zZm9ybWVkIHcvIExhbWJkYSA9ICIscm91bmQobGFtYmRhLDMpKQ0KDQpgYGANCg0KYGBge3J9DQpOb3RfVHJhbnNmb3JtZWQgPC0gYXV0b3Bsb3QobWNvcHBlcikgKyBsYWJzKHRpdGxlPSJOb24gdHJhbnNmb3JtZWQiKQ0KVHJhbnNmb3JtZWQgPC0gYXV0b3Bsb3QoQm94Q294KG1jb3BwZXIsbGFtYmRhKSkgKyBsYWJzKHRpdGxlPXRpdGxlKQ0KZ3JpZC5hcnJhbmdlKE5vdF9UcmFuc2Zvcm1lZCwgVHJhbnNmb3JtZWQsIG5jb2w9MSkNCmBgYA0KSW4gdGhlIG1jb3BwZXIgdGltZSBzZXJpZXMsIHRoZXJlIGlzIHNvbWUgc2Vhc29uYWxpdHksIGJ1dCB0aGUgdmFyaWFuY2UgZG9lcyBub3QgaW5jcmVhc2Ugd2l0aCB0aGUgdHJlbmQuICBCb3ggQ294IHRyYW5zZm9ybWF0aW9uIHdhcyBub3QgbmVlZGVkLiANCg0KDQojIyMgPHU+PGI+ZW5wbGFuZW1lbnRzPC9iPjwvdT4NCg0KDQoNCmBgYHtyfQ0KaGVscCgiZW5wbGFuZW1lbnRzIikNCmBgYA0KTW9udGhseSBVUyBkb21lc3RpYyBlbnBsYW5lbWVudHMNCkRlc2NyaXB0aW9uDQoiRG9tZXN0aWMgUmV2ZW51ZSBFbnBsYW5lbWVudHMgKG1pbGxpb25zKTogMTk5Ni0yMDAwLiBTT1VSQ0U6IERlcGFydG1lbnQgb2YgVHJhbnNwb3J0YXRpb24sIEJ1cmVhdSBvZiBUcmFuc3BvcnRhdGlvbiBTdGF0aXN0aWNzLCBBaXIgQ2FycmllciBUcmFmZmljIFN0YXRpc3RpYyBNb250aGx5Lg0KDQpVc2FnZQ0KZGF0YShlbnBsYW5lbWVudHMpDQpGb3JtYXQNCnRpbWUgc2VyaWVzDQoNClNvdXJjZQ0KSHluZG1hbiwgUi5KLiwgS29laGxlciwgQS5CLiwgT3JkLCBKLksuLCBhbmQgU255ZGVyLCBSLkQuLCAoMjAwOCkgRm9yZWNhc3Rpbmcgd2l0aCBleHBvbmVudGlhbCBzbW9vdGhpbmc6IHRoZSBzdGF0ZSBzcGFjZSBhcHByb2FjaCwgU3ByaW5nZXINCg0KUmVmZXJlbmNlcw0KaHR0cDovL3d3dy5leHBvbmVudGlhbHNtb290aGluZy4NCg0KYGBge3J9DQpmcmVxdWVuY3koZW5wbGFuZW1lbnRzKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ3NlYXNvbnBsb3QoZW5wbGFuZW1lbnRzLCB5ZWFyLmxhYmVscz1GQUxTRSwgY29udGludW91cz1UUlVFLCBwb2xhciA9IFRSVUUpDQoNCmBgYA0KDQpgYGB7cn0NCmdnc3Vic2VyaWVzcGxvdChlbnBsYW5lbWVudHMpDQpgYGANCg0KYGBge3J9DQpsYW1iZGEgPC0gQm94Q294LmxhbWJkYShlbnBsYW5lbWVudHMpDQpsYW1iZGENCnRpdGxlIDwtIHBhc3RlMCgiVHJhbnNmb3JtZWQgdy8gTGFtYmRhID0gIixyb3VuZChsYW1iZGEsMykpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KTm90X1RyYW5zZm9ybWVkIDwtIGF1dG9wbG90KGVucGxhbmVtZW50cykgKyBsYWJzKHRpdGxlPSJOb24gdHJhbnNmb3JtZWQiKQ0KVHJhbnNmb3JtZWQgPC0gYXV0b3Bsb3QoQm94Q294KGVucGxhbmVtZW50cyxsYW1iZGEpKSArIGxhYnModGl0bGU9dGl0bGUpDQpncmlkLmFycmFuZ2UoTm90X1RyYW5zZm9ybWVkLCBUcmFuc2Zvcm1lZCwgbmNvbD0xKQ0KYGBgDQoNCldlIHNlZSBoZXJlIHRoYXQgdGhlIEJveCBDb3ggdHJhbnNmb3JtYXRpb24gZGlkIHRyYW5zZm9ybSB0aGUgc2Vhc29uYWxpdHkgb2YgdGhlIGVucGxhbmVtZW50cyBkYXRhIHdoaWNoIGRvZXMgc2hvdyBhIHNlYXNvbmFsIGp1bXAgaW4gdGhlIHN1bW1lciBtb250aHMuDQoNCg0KDQoNCiMjIFF1ZXN0aW9uIE5vLiAzLjI6DQpXaHkgaXMgYSBCb3gtQ294IHRyYW5zZm9ybWF0aW9uIHVuaGVscGZ1bCBmb3IgdGhlIGNhbmdhcyBkYXRhPw0KDQoNCiMjIyA8dT48Yj5jYW5nYXM8L2I+PC91Pg0KDQoNCmBgYHtyfQ0KaGVscCgiY2FuZ2FzIikNCmBgYA0KTW9udGhseSBDYW5hZGlhbiBnYXMgcHJvZHVjdGlvbg0KRGVzY3JpcHRpb24NCk1vbnRobHkgQ2FuYWRpYW4gZ2FzIHByb2R1Y3Rpb24sIGJpbGxpb25zIG9mIGN1YmljIG1ldHJlcywgSmFudWFyeSAxOTYwIC0gRmVicnVhcnkgMjAwNQ0KDQpVc2FnZQ0KZGF0YShjYW5nYXMpDQpGb3JtYXQNCnRpbWUgc2VyaWVzDQoNClNvdXJjZQ0KSHluZG1hbiwgUi5KLiwgS29laGxlciwgQS5CLiwgT3JkLCBKLksuLCBhbmQgU255ZGVyLCBSLkQuLCAoMjAwOCkgRm9yZWNhc3Rpbmcgd2l0aCBleHBvbmVudGlhbCBzbW9vdGhpbmc6IHRoZSBzdGF0ZSBzcGFjZSBhcHByb2FjaCwgU3ByaW5nZXIuDQoNClJlZmVyZW5jZXMNCmh0dHA6Ly93d3cuZXhwb25lbnRpYWxzbW9vdGhpbmcubmV0DQoNCmBgYHtyfQ0KZnJlcXVlbmN5KGNhbmdhcykNCmBgYA0KDQpgYGB7cn0NCmhlYWQoY2FuZ2FzKQ0KYGBgDQoNCmBgYHtyfQ0KdGFpbChjYW5nYXMpDQpgYGANCg0KDQoNCg0KYGBge3J9DQpnZ3NlYXNvbnBsb3QoY2FuZ2FzLCB5ZWFyLmxhYmVscz1GQUxTRSwgY29udGludW91cz1UUlVFLCBwb2xhciA9IFRSVUUpDQoNCmBgYA0KDQpgYGB7cn0NCmdnc3Vic2VyaWVzcGxvdChjYW5nYXMpDQpgYGANCmBgYHtyfQ0KZ2dsYWdwbG90KGNhbmdhcykNCmBgYA0KDQpgYGB7cn0NCmdnQWNmKGNhbmdhcykNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmxhbWJkYSA8LSBCb3hDb3gubGFtYmRhKGNhbmdhcykNCmxhbWJkYQ0KdGl0bGUgPC0gcGFzdGUwKCJUcmFuc2Zvcm1lZCB3LyBMYW1iZGEgPSAiLHJvdW5kKGxhbWJkYSwzKSkNCg0KYGBgDQoNCg0KYGBge3J9DQpOb3RfVHJhbnNmb3JtZWQgPC0gYXV0b3Bsb3QoY2FuZ2FzKSArIGxhYnModGl0bGU9Ik5vbiB0cmFuc2Zvcm1lZCIpDQpUcmFuc2Zvcm1lZCA8LSBhdXRvcGxvdChCb3hDb3goZW5wbGFuZW1lbnRzLGxhbWJkYSkpICsgbGFicyh0aXRsZT10aXRsZSkNCmdyaWQuYXJyYW5nZShOb3RfVHJhbnNmb3JtZWQsIFRyYW5zZm9ybWVkLCBuY29sPTEpDQpgYGANCg0KIyMjIDxpPjxiPkFuc3dlcjwvYj48L2k+DQoNClRoZSBjYW5nYXMgdGltZSBzZXJpZXMgc2hvd3MgYSBsb25nIHRlcm0sIGluY3JlYXNpbmcgdHJlbmQgZnJvbSAxOTYwIHRvIDIwMDUgd2l0aG91dCBtdWNoIHNlYXNvbmFsaXR5IGJ1dCB3aXRoIGN5Y2xlcy4gSXQgYWxzbyBzaG93cyBIb21vc2NlZGFzdGljaXR5LCB3aGVyZSB2YXJpYXRpb24gaW4gdGhlIGRhdGEgbmVpdGhlciBpbmNyZWFzZXMgbm9yIGRlY3JlYXNlcyB3aXRoIHRoZSBsZXZlbCBvZiB0aGUgc2VyaWVzIGluIGdlbmVyYWwuIA0KDQpCb3ggQ294IHRyYW5zZm9ybWF0aW9ucyB3b3JrIGJlc3QgZm9yIGRhdGEgdGhhdCBzaG93cyBIZXRlcm9zY2VkYXN0aWNpdHkgd2hlcmUgdGhlIHZhcmlhdGlvbiBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbGV2ZWwgb2YgdGhlIHNlcmllcy4NCg0KDQoNCiMjIFF1ZXN0aW9uIE5vLiAzLjM6DQpXaGF0IEJveC1Db3ggdHJhbnNmb3JtYXRpb24gd291bGQgeW91IHNlbGVjdCBmb3IgeW91ciByZXRhaWwgZGF0YSAoZnJvbSBFeGVyY2lzZSAzIGluIFNlY3Rpb24gMi4xMCk/DQoNCg0KDQpgYGB7cn0NCnJldGFpbGRhdGEgPC0gcmVhZHhsOjpyZWFkX2V4Y2VsKCJyZXRhaWwueGxzeCIsIHNraXA9MSkNCmBgYA0KDQpgYGB7cn0NCmxpcXVvcl9zYWxlcyA8LSB0cyhyZXRhaWxkYXRhWywiQTMzNDk0MTRSIl0sDQogIGZyZXF1ZW5jeT0xMiwgc3RhcnQ9YygxOTgyLDQpKQ0KYGBgDQoNCg0KYGBge3J9DQphdXRvcGxvdChsaXF1b3Jfc2FsZXMpICsNCiAgICBnZ3RpdGxlKHN0cl90b190aXRsZSgiVmljdG9yaWEsIEF1c3RyYWxpYSAgbW9udGhseSBsaXF1b3Igc2FsZXMiKSkgKw0KICAgIHhsYWIoc3RyX3RvX3RpdGxlKCJBcHJpbCAxOTgyIHRvIERlY2VtYmVyIDIwMTMiKSkgKw0KICAgIHlsYWIoIlVuaXRzLiIpDQpgYGANCg0KDQoNCmBgYHtyfQ0KZ2dzZWFzb25wbG90KGxpcXVvcl9zYWxlcykNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmdnc3Vic2VyaWVzcGxvdChsaXF1b3Jfc2FsZXMpDQpgYGANCg0KU2V0dGluZyB0aGUgcG9sYXIgYXR0cmlidXRlIHRvIFRSVUUgZm9yIHRoZSBnZ3NlYXNvbnBsb3QgZnVydGhlciBkZW9tb25zdHJhdGVzIHRoZSBzZWFzb25hbCBuYXR1cmUgb2YgbGlxdW9yIHNhbGVzIHdpdGggYSBzcGlrZSBpbiBEZWNlbWJlciBzYWxlcw0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChsaXF1b3Jfc2FsZXMsIHllYXIubGFiZWxzPUZBTFNFLCBjb250aW51b3VzPVRSVUUsIHBvbGFyID0gVFJVRSkNCmBgYA0KDQoNCk92ZXIgdGhlIG5leHQgdHdvIHBsb3RzLCB0aGUgZ2dsYWdwbG90IGFuZCB0aGUgZ2dBQ0YgcGxvdCwgd2Ugc2VlIGhvdyBvYnNlcnZhdGlvbnMgYXJlIHBsb3R0ZWQgYWdhaW5zdCBlYXJsaWVyIG9ic2VydmF0aW9ucyBvciBsYWdzIGFnYWluc3QgaXRzZWxmLiBMYWcgMTIgc3VwcG9ydHMgdGhlIGZpbmRpbmcgdGhhdCBzYWxlcyBzcGlrZSBpbiB0aGUgMTIgbW9udGggd2hpY2ggaXMgc2hvd24gaW4gdGhlIGdnYWNmIHBsb3QuICAgDQoNCg0KYGBge3J9DQpnZ2xhZ3Bsb3QobGlxdW9yX3NhbGVzKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dBY2YobGlxdW9yX3NhbGVzKQ0KYGBgDQoNCmBgYHtyfQ0KbGFtYmRhIDwtIEJveENveC5sYW1iZGEobGlxdW9yX3NhbGVzKQ0KbGFtYmRhDQp0aXRsZSA8LSBwYXN0ZTAoIlRyYW5zZm9ybWVkIHcvIExhbWJkYSA9ICIscm91bmQobGFtYmRhLDEpKQ0KYGBgDQoNCmBgYHtyfQ0KTm90X1RyYW5zZm9ybWVkIDwtIGF1dG9wbG90KGxpcXVvcl9zYWxlcykgKyBsYWJzKHRpdGxlPSJOb24gdHJhbnNmb3JtZWQiKQ0KVHJhbnNmb3JtZWQgPC0gYXV0b3Bsb3QoQm94Q294KGxpcXVvcl9zYWxlcyxsYW1iZGEpKSArIGxhYnModGl0bGU9dGl0bGUpDQpncmlkLmFycmFuZ2UoTm90X1RyYW5zZm9ybWVkLCBUcmFuc2Zvcm1lZCwgbmNvbD0xKQ0KYGBgDQojIyMgPGk+PGI+QW5zd2VyPC9iPjwvaT4NCg0KDQpHaXZlbiB0aGF0IHRoZSBiZXN0IExhbWJkYSBjaG9zZW4gd2FzIDAsIHRoZSBiZXN0IEJveCBDb3ggdHJhbnNmb3JtIHdvdWxkIGJlIGEgc2ltcGxlIGxvZyB0cmFuc2Zvcm0uIEluIHRoZSBwbG90cyBiZWxvdywgdGhlIGxvZyB0cmFuc2Zvcm0gb2YgdGhlIHRpbWUgc2VyaWVzIGlzIHRoZSBzYW1lIGFzIHRoZSBCb3ggQ294IHRyYW5zZm9ybS4NCg0KYGBge3J9DQpsaXF1b3Jfc2FsZXNfbG9nIDwtIGxvZyhsaXF1b3Jfc2FsZXMpDQp0bSA8LWNiaW5kKGxpcXVvcl9zYWxlcywgbGlxdW9yX3NhbGVzX2xvZykNCnBsb3QudHModG0pDQpgYGANCg0KIyMgUXVlc3Rpb24gTm8uIDMuOA0KRm9yIHlvdXIgcmV0YWlsIHRpbWUgc2VyaWVzIChmcm9tIEV4ZXJjaXNlIDMgaW4gU2VjdGlvbiAyLjEwKToNCg0KIyMjIGEuU3BsaXQgdGhlIGRhdGEgaW50byB0d28gcGFydHMgdXNpbmcNCg0KDQpgYGB7cn0NCmxpcXVvcl9zYWxlc190cmFpbiA8LSB3aW5kb3cobGlxdW9yX3NhbGVzLCBlbmQ9YygyMDEwLDEyKSkNCmxpcXVvcl9zYWxlc190ZXN0IDwtIHdpbmRvdyhsaXF1b3Jfc2FsZXMsIHN0YXJ0PTIwMTEpDQoNCmBgYA0KDQojIyMgYi4gQ2hlY2sgdGhhdCB5b3VyIGRhdGEgaGF2ZSBiZWVuIHNwbGl0IGFwcHJvcHJpYXRlbHkgYnkgcHJvZHVjaW5nIHRoZSBmb2xsb3dpbmcgcGxvdC4NCg0KYGBge3J9DQphdXRvcGxvdChsaXF1b3Jfc2FsZXMpICsNCiAgYXV0b2xheWVyKGxpcXVvcl9zYWxlc190cmFpbiwgc2VyaWVzPSJUcmFpbmluZyIpICsNCiAgYXV0b2xheWVyKGxpcXVvcl9zYWxlc190ZXN0LCBzZXJpZXM9IlRlc3QiKQ0KYGBgDQoNCiMjIyBjLiBDYWxjdWxhdGUgZm9yZWNhc3RzIHVzaW5nIHNuYWl2ZSBhcHBsaWVkIHRvIG15dHMudHJhaW4uDQoNCg0KYGBge3J9DQoNCmZvcmVjYXN0X2xpcXVvcl9zYWxlcyA8LSBzbmFpdmUobGlxdW9yX3NhbGVzX3RyYWluKQ0KYXV0b3Bsb3QoZm9yZWNhc3RfbGlxdW9yX3NhbGVzKQ0KDQpgYGANCg0KIyMjIGQuIENvbXBhcmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgZm9yZWNhc3RzIGFnYWluc3QgdGhlIGFjdHVhbCB2YWx1ZXMgc3RvcmVkIGluIG15dHMudGVzdC4NCg0KYGBge3J9DQphY2N1cmFjeShmb3JlY2FzdF9saXF1b3Jfc2FsZXMsbGlxdW9yX3NhbGVzX3Rlc3QpDQpgYGANCiMjIyBlLiBDaGVjayB0aGUgcmVzaWR1YWxzLg0KDQpgYGB7cn0NCmNoZWNrcmVzaWR1YWxzKGZvcmVjYXN0X2xpcXVvcl9zYWxlcykNCmBgYA0KIyMjIDxpPjxiPkFuc3dlcjwvYj48L2k+DQoNClRoZSBBQ0YgcGxvdCBzaG93cyBzaWdpbmlmaWNhbnQgY29ycmVsYXRpb25zIGJldHdlZW4gdGltZSBsYWdzIG9mIHRoZSByZXNpZHVhbHMuIE11bHRpcGxlIHBlcmlvZHMgZXhjZWVkIHRoZSB1cHBlciBib3VuZCBvZiB0aGUgcGVyaW9kIHdoaWNoIG1lYW4gdGhhdCB0aGUgY29ycmVsYXRpb25zIGFyZSBzaWduaWZpY2FudC4gQWNjb3JkaW5nIHRvIHRoZSBhdXRob3JzLCAiSWYgdGhlcmUgYXJlIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIHJlc2lkdWFscywgdGhlbiB0aGVyZSBpcyBpbmZvcm1hdGlvbiBsZWZ0IGluIHRoZSByZXNpZHVhbHMgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW4gY29tcHV0aW5nIGZvcmVjYXN0cy4iDQoNClRoZSBoaXN0b2dyYW0gcGxvdCBzaG93cyBhIG5vcm1hbCBkaXN0cmlidXRpb24gb2YgdGhlIHJlc2lkdWFscyBldmVuIHRob3VnaCB0aGVyZSBpcyBhIGxpdHRsZSBiaXQgb2YgYSByaWdodCB0YWlsIHRvIHRoZSBkaXN0cmlidXRpb24uIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K