Licença

This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

License: CC BY-SA 4.0
License: CC BY-SA 4.0

Citação

Sugestão de citação: FIGUEIREDO, Adriano Marcos Rodrigues. Séries Temporais: decomposição clássica e a abordagem X11. Campo Grande-MS,Brasil: RStudio/Rpubs, 2019. Disponível em http://rpubs.com/amrofi/decompose_x11_varejoms.

1 Introdução

Neste arquivo utilizo a série do Índice de volume de vendas no varejo Total de Mato Grosso do Sul, série mensal a partir de jan/2000 até maio/2026 obtida no Sidra-IBGE, https://sidra.ibge.gov.br/tabela/8880#resultado. Portanto, são 317 observações mensais.
É um exercício rápido de decomposição clássica nos componentes de tendência, sazonalidade e irregularidades. O modelo aditivo é descrito como \[ Y = T + S + I \] e o multiplicativo \[ Y = T * S * I \] em que \(Y\) é a série analisada; \(T\) é a tendência (rolling mean de 12 meses); \(S\) é a sazonalidade; e \(I\) é a irregularidade.
Sugerimos assistir, para maiores esclarecimentos acerca dos aspectos teoricos do modelo de decomposição, ao vídeo Decomposição de séries temporais, de nossa autoria.

2 Dados

Eu gerei a estrutura idêntica pela função dput().

# uso a opção abaixo para quando a internet por algum motivo falha
varejoms_2022<-structure(list(Mês = structure(c(946684800, 949363200, 951868800, 
954547200, 957139200, 959817600, 962409600, 965088000, 967766400, 
970358400, 973036800, 975628800, 978307200, 980985600, 983404800, 
986083200, 988675200, 991353600, 993945600, 996624000, 999302400, 
1001894400, 1004572800, 1007164800, 1009843200, 1012521600, 1014940800, 
1017619200, 1020211200, 1022889600, 1025481600, 1028160000, 1030838400, 
1033430400, 1036108800, 1038700800, 1041379200, 1044057600, 1046476800, 
1049155200, 1051747200, 1054425600, 1057017600, 1059696000, 1062374400, 
1064966400, 1067644800, 1070236800, 1072915200, 1075593600, 1078099200, 
1080777600, 1083369600, 1086048000, 1088640000, 1091318400, 1093996800, 
1096588800, 1099267200, 1101859200, 1104537600, 1107216000, 1109635200, 
1112313600, 1114905600, 1117584000, 1120176000, 1122854400, 1125532800, 
1128124800, 1130803200, 1133395200, 1136073600, 1138752000, 1141171200, 
1143849600, 1146441600, 1149120000, 1151712000, 1154390400, 1157068800, 
1159660800, 1162339200, 1164931200, 1167609600, 1170288000, 1172707200, 
1175385600, 1177977600, 1180656000, 1183248000, 1185926400, 1188604800, 
1191196800, 1193875200, 1196467200, 1199145600, 1201824000, 1204329600, 
1207008000, 1209600000, 1212278400, 1214870400, 1217548800, 1220227200, 
1222819200, 1225497600, 1228089600, 1230768000, 1233446400, 1235865600, 
1238544000, 1241136000, 1243814400, 1246406400, 1249084800, 1251763200, 
1254355200, 1257033600, 1259625600, 1262304000, 1264982400, 1267401600, 
1270080000, 1272672000, 1275350400, 1277942400, 1280620800, 1283299200, 
1285891200, 1288569600, 1291161600, 1293840000, 1296518400, 1298937600, 
1301616000, 1304208000, 1306886400, 1309478400, 1312156800, 1314835200, 
1317427200, 1320105600, 1322697600, 1325376000, 1328054400, 1330560000, 
1333238400, 1335830400, 1338508800, 1341100800, 1343779200, 1346457600, 
1349049600, 1351728000, 1354320000, 1356998400, 1359676800, 1362096000, 
1364774400, 1367366400, 1370044800, 1372636800, 1375315200, 1377993600, 
1380585600, 1383264000, 1385856000, 1388534400, 1391212800, 1393632000, 
1396310400, 1398902400, 1401580800, 1404172800, 1406851200, 1409529600, 
1412121600, 1414800000, 1417392000, 1420070400, 1422748800, 1425168000, 
1427846400, 1430438400, 1433116800, 1435708800, 1438387200, 1441065600, 
1443657600, 1446336000, 1448928000, 1451606400, 1454284800, 1456790400, 
1459468800, 1462060800, 1464739200, 1467331200, 1470009600, 1472688000, 
1475280000, 1477958400, 1480550400, 1483228800, 1485907200, 1488326400, 
1491004800, 1493596800, 1496275200, 1498867200, 1501545600, 1504224000, 
1506816000, 1509494400, 1512086400, 1514764800, 1517443200, 1519862400, 
1522540800, 1525132800, 1527811200, 1530403200, 1533081600, 1535760000, 
1538352000, 1541030400, 1543622400, 1546300800, 1548979200, 1551398400, 
1554076800, 1556668800, 1559347200, 1561939200, 1564617600, 1567296000, 
1569888000, 1572566400, 1575158400, 1577836800, 1580515200, 1583020800, 
1585699200, 1588291200, 1590969600, 1593561600, 1596240000, 1598918400, 
1601510400, 1604188800, 1606780800, 1609459200, 1612137600, 1614556800, 
1617235200, 1619827200, 1622505600, 1625097600, 1627776000, 1630454400, 
1633046400, 1635724800, 1638316800, 1640995200, 1643673600, 1646092800, 
1648771200, 1651363200, 1654041600, 1656633600, 1659312000, 1661990400, 
1664582400, 1667260800, 1669852800, 1672531200, 1675209600, 1677628800, 
1680307200, 1682899200, 1685577600, 1688169600, 1690848000, 1693526400, 
1696118400, 1698796800, 1701388800, 1704067200, 1706745600, 1709251200, 
1711929600, 1714521600, 1717200000, 1719792000, 1722470400, 1725148800, 
1727740800, 1730419200, 1733011200, 1735689600, 1738368000, 1740787200, 
1743465600, 1746057600, 1748736000, 1751328000, 1754006400, 1756684800, 
1759276800, 1761955200, 1764547200, 1767225600, 1769904000, 1772323200, 
1775001600, 1777593600), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    varejoms_2022 = c(8.08726, 8.05285, 8.87878, 9.22292, 9.29175, 
    9.11968, 9.77354, 9.70471, 9.22292, 9.39499, 8.91319, 12.01044, 
    8.80995, 8.32816, 9.87678, 9.6703, 9.9112, 9.01644, 10.04885, 
    10.6683, 10.04885, 10.6683, 9.9112, 12.66431, 9.73913, 9.05085, 
    10.49623, 10.42741, 10.73713, 9.87678, 10.46182, 10.73713, 
    10.08327, 11.39099, 11.28775, 14.6259, 10.77154, 11.01244, 
    12.35458, 12.76755, 13.07727, 11.87279, 12.87079, 12.73314, 
    12.59548, 13.42141, 12.80196, 16.69073, 12.35458, 12.28576, 
    13.83438, 14.10969, 15.383, 14.6259, 16.07128, 15.31418, 
    15.24535, 16.17452, 15.45183, 21.74957, 14.8668, 14.66031, 
    17.17253, 16.8628, 17.55108, 16.58749, 18.13611, 17.65432, 
    17.48225, 17.68873, 17.31018, 24.12413, 16.65632, 15.93363, 
    17.92963, 17.75756, 18.96205, 17.65432, 18.37701, 19.3406, 
    18.99646, 19.78798, 19.51267, 25.98248, 18.44584, 18.44584, 
    20.40743, 20.30419, 22.12812, 20.64833, 21.06129, 21.5775, 
    21.30219, 22.43785, 22.57551, 30.28421, 22.64433, 21.54309, 
    23.2982, 23.33261, 25.08772, 23.22937, 25.50068, 25.87924, 
    25.43186, 27.11814, 24.88124, 33.7256, 26.49869, 22.33461, 
    24.88124, 25.22537, 27.11814, 25.15655, 26.5331, 26.67076, 
    26.25779, 28.46028, 27.59993, 36.78844, 28.15055, 26.49869, 
    29.66476, 29.14856, 31.41987, 29.28621, 30.4907, 29.87125, 
    30.45628, 31.93608, 30.80042, 42.56997, 30.52511, 29.35504, 
    32.10815, 32.65877, 36.27223, 32.65877, 34.24181, 33.79443, 
    33.14057, 35.37747, 35.17099, 47.62881, 37.71761, 35.75602, 
    38.9221, 36.75402, 39.98893, 39.30065, 39.98893, 41.88169, 
    41.12459, 44.04977, 44.8757, 54.51159, 45.83929, 41.91611, 
    46.66522, 44.56597, 47.49115, 44.80687, 48.1106, 48.28267, 
    47.07819, 50.45075, 51.89613, 67.31355, 51.00137, 47.38791, 
    50.20985, 50.72606, 54.47717, 49.41833, 51.75848, 52.92855, 
    52.03379, 56.74849, 56.64525, 72.16591, 55.85373, 50.03778, 
    55.68166, 54.75248, 57.19587, 54.16745, 57.33352, 56.67966, 
    54.51159, 60.08663, 59.0198, 76.19233, 56.95497, 53.82331, 
    58.5036, 56.81732, 59.15746, 56.61083, 59.0198, 57.7809, 
    55.88814, 58.95098, 60.91257, 76.26116, 59.28061, 54.45646, 
    57.99825, 55.84009, 58.1767, 56.25647, 58.29341, 60.15194, 
    60.36021, 59.641, 60.9048, 74.07934, 57.88598, 53.43484, 
    62.16572, 54.85668, 59.35817, 59.81062, 60.36437, 63.42607, 
    63.99756, 66.35103, 68.68178, 79.63475, 63.2806, 58.44752, 
    61.78688, 60.13546, 62.74632, 59.48465, 62.93183, 65.05181, 
    64.8418, 66.81777, 71.49391, 81.79571, 67.54694, 63.75461, 
    63.088, 53.61223, 63.75057, 64.04583, 66.60284, 70.1589, 
    74.24245, 80.42799, 80.94556, 91.15727, 72.68549, 69.21801, 
    76.29981, 74.62662, 80.43653, 76.8345, 90.91029, 87.72293, 
    88.17381, 93.42122, 93.55142, 106.84707, 84.7813, 84.81402, 
    95.42621, 94.92551, 101.81559, 99.16038, 104.73258, 103.44467, 
    101.53137, 104.26279, 103.5199, 121.58566, 94.61484, 92.17375, 
    101.9617, 99.34905, 101.88628, 99.45497, 103.70068, 105.45477, 
    107.92888, 108.965, 111.65595, 128.40961, 104.65797, 104.90476, 
    112.50722, 106.81307, 114.33497, 109.14151, 112.21131, 113.48524, 
    111.26311, 120.04339, 120.46722, 135.43413, 111.57071, 109.1719, 
    117.24231, 118.55443, 123.24018, 114.25778, 119.86609, 117.69651, 
    116.26685, 124.53461, 126.09211, 142.92153, 117.34711, 111.48763, 
    123.99372, 123.06564, 127.29538)), row.names = c(NA, -317L
), class = c("tbl_df", "tbl", "data.frame"))
class(varejoms_2022)
[1] "tbl_df"     "tbl"        "data.frame"

3 Primeiras análises

Inicialmente olharei as estatísticas descritivas da série. Em seguida farei um plot básico da série e o plot pelo pacote dygraphs, útil para ver os pontos de picos e momentos específicos.

# estatisticas basicas
summary(varejoms_2022)
      Mês                      varejoms_2022    
 Min.   :2000-01-01 00:00:00   Min.   :  8.053  
 1st Qu.:2006-08-01 00:00:00   1st Qu.: 18.996  
 Median :2013-03-01 00:00:00   Median : 46.665  
 Mean   :2013-03-01 19:36:31   Mean   : 50.118  
 3rd Qu.:2019-10-01 00:00:00   3rd Qu.: 67.314  
 Max.   :2026-05-01 00:00:00   Max.   :142.922  
varejoms_2022<-ts(varejoms_2022$varejoms_2022, start=c(2000,1), frequency=12)
plot(varejoms_2022, main="Índice de volume de vendas no varejo Total de Mato Grosso do Sul",
     xlab="Ano", ylab="Índice", col="blue", lwd=2, type="l") 

# pelo pacote dygraph dá mais opções
library(dygraphs)
dygraph(varejoms_2022)

É possivel visualizar nos plots acima: sazonalidade (por exemplo, picos em dezembro de cada ano); a tendência aparentemente crescente até 2014 e decresce com a “crise” brasileira; e uma aparente não-estacionariedade (média e variância mudam no tempo). Em outra postagem aplicarei o teste de raiz unitária na série para avaliar a estacionariedade de modo mais explícito.

4 Decomposição da série

Farei as decomposicoes aditiva e multiplicativa pela função decompose. Ela aplica uma rolling mean na frequência da série (mensal será igual a 12 meses) obtendo a tendência (trend), o fator sazonal médio (que será a componente da sazonalidade) e o componente de irregularidade. Nos objetos decomposicao.ad e decomposicao.mult estarão os vários componentes calculados e que podem ser plotados.

decomposicao.ad<-decompose(varejoms_2022)   # aditiva
decomposicao.mult<-decompose(varejoms_2022,type = "multiplicative")   # multiplicativa

# grafico da decomposicao aditiva
plot(decomposicao.ad)

# grafico da decomposicao multiplicativa
plot(decomposicao.mult)

4.1 Tendência

Podemos verificar que a série trend foi obtida da mesma forma que uma rolling mean de 12 meses como o código abaixo apresenta. O leitor pode verificar que é a mesma independente de ser aditiva ou multiplicativa.

# obtendo a tendencia
library(fpp2)
tend<-ma(varejoms_2022, 12)
print(cbind(tend,decomposicao.ad$trend,decomposicao.mult$trend))
               tend decomposicao.ad$trend decomposicao.mult$trend
Jan 2000         NA                    NA                      NA
Feb 2000         NA                    NA                      NA
Mar 2000         NA                    NA                      NA
Apr 2000         NA                    NA                      NA
May 2000         NA                    NA                      NA
Jun 2000         NA                    NA                      NA
Jul 2000   9.336198              9.336198                9.336198
Aug 2000   9.377781              9.377781                9.377781
Sep 2000   9.430836              9.430836                9.430836
Oct 2000   9.491060              9.491060                9.491060
Nov 2000   9.535511              9.535511                9.535511
Dec 2000   9.557020              9.557020                9.557020
Jan 2001   9.564190              9.564190                9.564190
Feb 2001   9.615810              9.615810                9.615810
Mar 2001   9.690374              9.690374                9.690374
Apr 2001   9.777842              9.777842                9.777842
May 2001   9.872480              9.872480                9.872480
Jun 2001   9.941309              9.941309                9.941309
Jul 2001  10.007269             10.007269               10.007269
Aug 2001  10.076097             10.076097               10.076097
Sep 2001  10.132020             10.132020               10.132020
Oct 2001  10.189376             10.189376               10.189376
Nov 2001  10.255336             10.255336               10.255336
Dec 2001  10.325598             10.325598               10.325598
Jan 2002  10.378652             10.378652               10.378652
Feb 2002  10.398727             10.398727               10.398727
Mar 2002  10.403029             10.403029               10.403029
Apr 2002  10.434575             10.434575               10.434575
May 2002  10.522044             10.522044               10.522044
Jun 2002  10.661133             10.661133               10.661133
Jul 2002  10.785883             10.785883               10.785883
Aug 2002  10.910633             10.910633               10.910633
Sep 2002  11.069797             11.069797               11.069797
 [ reached 'max' / getOption("max.print") -- omitted 284 rows ]
# plot conjunto com função autoplot do fpp2
autoplot(varejoms_2022, series="Dados") +
  autolayer(tend, series="tend") +
  xlab("Ano") + ylab("Índice") +
  ggtitle("Índice de volume de vendas no varejo Total 
          de Mato Grosso do Sul") +
  scale_colour_manual(values=c("Dados"="grey50","tend"="red"),
                      breaks=c("Dados","tend"))

4.2 Decomposição X11

Um método mais comum (mais atual, pois o de decomposição clássico é dos anos 1920) é por meio da metodologia do Census Bureau dos Estados Unidos da América, e chamado de X11 (US BUREAU OF THE CENSUS, 2013). Em outra postagem farei um exemplo de análise do método X13-ARIMA SEATS, a versão mais recente que utiliza outras abordagens além do X11.
O primeiro passo é chamar o pacote seasonal (SAX e EDDELBUETTEL, 2018). Crio o objeto fit que contém as saídas da função seas(x11="") com a opção X11 aplicada sobre a série varejoms. Na sequência, faço o plot pela função autoplot do pacote fpp2 (HYNDMAN, 2018).

# decomposição pelo X11 do Census Bureau
library(seasonal)
fit<- seas(varejoms_2022,x11="")
#varejoms_2022 %>% seas(x11="") -> fit   # uso a serie 'varejoms_2022', aplico o 'seas' x11 e gero 'fit'
library(fpp2)
autoplot(fit) +
  ggtitle("Decomposição X11 de Mato Grosso do Sul
  do Índice de volume de vendas no varejo total")

names(fit)   # para entender o que esta dentro de fit
 [1] "series"      "udg"         "data"        "err"         "est"        
 [6] "model"       "fivebestmdl" "wdir"        "iofile"      "call"       
[11] "list"        "x"           "spc"        

Dentro do objeto fit, existe o local em que estão as séries (fit$series) e dados (fit$data, que gerarão os gráficos). Um print da parte armazenada em fit$series mostrará as várias séries em sua nomenclatura como consta no documento original do US Census Bureau. Para melhor entender as legendas do X11, recomendo usar o manual de referência do X13-ARIMA SEATS (US BUREAU OF THE CENSUS, 2013). Descrevo abaixo apenas os códigos que aparecem nas saídas do seas.

Legendas do X11

# fit$data[,'final'] é a fit$data[,'seasonaladj']  É A SÉRIE COM AJUSTE SAZONAL
# final = série com ajuste sazonal = dessazonalizada
# d10 = seasonal        É O COMPONENTE SAZONAL - fator sazonal
# d11 = seasonaladj     É A SÉRIE DESSAZONALIZADA
# d12 = trend           É A TENDÊNCIA = ROLLING MEAN
# d13 = irregular       É A IRREGULARIDADE
# d16 = adjustfac       É O FATOR SAZONAL AJUSTADO PARA SAZONALIDADE E TRADING DAYS
# e18 = final adjustment ratios (original series / seasonally adjusted series)
# d16 = e18 (parece que sim)
# rsd = residuos estimados
print(fit$series)
$d10
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000 0.9314775 0.8839755 1.0059871 1.0072874 1.0122657 0.9499938 1.0063704
2001 0.9291849 0.8847396 1.0056420 1.0056404 1.0149140 0.9504655 1.0070395
2002 0.9252300 0.8854216 1.0056452 1.0026590 1.0192969 0.9507674 1.0073798
2003 0.9219157 0.8857736 1.0034629 0.9975598 1.0253524 0.9506577 1.0065054
2004 0.9190336 0.8870957 0.9995464 0.9914834 1.0299394 0.9503326 1.0036381
2005 0.9206137 0.8873454 0.9928148 0.9843347 1.0331533 0.9492497 1.0002312
2006 0.9253003 0.8877760 0.9862050 0.9780491 1.0332956 0.9480955 0.9961152
2007 0.9344542 0.8883120 0.9808447 0.9723261 1.0335471 0.9471427 0.9911386
           Aug       Sep       Oct       Nov       Dec
2000 1.0018798 0.9639494 1.0209666 0.9587986 1.2584158
2001 1.0000361 0.9641408 1.0202475 0.9596795 1.2612252
2002 0.9967472 0.9645409 1.0187074 0.9616328 1.2670767
2003 0.9948421 0.9640072 1.0161385 0.9651018 1.2758497
2004 0.9930037 0.9652137 1.0132574 0.9689518 1.2862503
2005 0.9930307 0.9662593 1.0116109 0.9720833 1.2955307
2006 0.9932134 0.9675969 1.0109486 0.9748792 1.3000279
2007 0.9927991 0.9673615 1.0119595 0.9780153 1.2988986
 [ reached 'max' / getOption("max.print") -- omitted 19 rows ]

$d11
            Jan        Feb        Mar        Apr        May        Jun
2000   8.761988   8.839694   8.862387   9.105831   9.224902   9.515349
2001   9.528622   9.497165   9.759727   9.679903   9.725894   9.385713
2002  10.483420  10.313348  10.326265  10.513403  10.478679  10.428370
2003  11.622662  12.543572  12.542124  12.675302  12.571426  12.674404
2004  13.250649  13.619233  13.952689  14.062272  15.073113  15.385353
2005  16.297226  16.669051  17.064128  17.110785  17.172969  17.471307
2006  18.197120  18.108053  18.255511  18.056233  18.442486  18.457157
2007  19.838060  20.950450  20.494343  21.206418  21.322926  21.569401
            Jul        Aug        Sep        Oct        Nov        Dec
2000   9.800938   9.647160   9.466355   9.302316   9.294605   9.532437
2001  10.087328  10.612032  10.462880  10.508687  10.236840  10.133571
2002  10.436930  10.618026  10.609127  11.136393  11.613594  11.668794
2003  12.735665  12.783523  13.083986  13.139058  13.316150  13.147240
2004  15.783884  15.590110  15.792072  15.943395  15.969208  16.820705
2005  18.109771  17.866813  17.933684  17.646426  17.801583  18.354583
2006  18.618252  19.393666  19.424362  19.786941  20.012026  19.961681
2007  21.481118  21.620153  22.106033  22.283166  22.880093  23.529603
 [ reached 'max' / getOption("max.print") -- omitted 19 rows ]

$d12
            Jan        Feb        Mar        Apr        May        Jun
2000   8.729934   8.818973   8.937742   9.088338   9.281884   9.473317
2001   9.516152   9.591589   9.643280   9.701564   9.788934   9.913758
2002  10.334553  10.367486  10.408036  10.427085  10.445760  10.451554
2003  12.100931  12.354764  12.537730  12.629267  12.642395  12.663223
2004  13.335692  13.569467  13.947942  14.447619  14.952758  15.361951
2005  16.467164  16.699440  16.909188  17.102790  17.302602  17.514130
2006  18.182973  18.198474  18.179064  18.192392  18.306028  18.512143
2007  20.162440  20.400463  20.731867  21.068255  21.306319  21.456915
            Jul        Aug        Sep        Oct        Nov        Dec
2000   9.583263   9.566895   9.473628   9.390222   9.370870   9.424314
2001  10.093871  10.280064  10.380896  10.400379  10.376490  10.341164
2002  10.458687  10.562697  10.793290  11.100845  11.445334  11.786968
2003  12.734756  12.866480  13.022320  13.132681  13.188640  13.235799
2004  15.622985  15.732903  15.804900  15.918354  16.065890  16.252783
2005  17.716919  17.817875  17.830947  17.855531  17.947195  18.089250
2006  18.808703  19.165419  19.510203  19.753486  19.897322  20.002366
2007  21.575011  21.714726  21.991099  22.439398  22.950140  23.352466
 [ reached 'max' / getOption("max.print") -- omitted 19 rows ]

$d13
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000 1.0036718 1.0023496 0.9915689 1.0019248 0.9938609 1.0044368 1.0227141
2001 1.0013104 0.9901556 1.0120755 0.9977672 0.9935601 0.9467361 0.9993519
2002 1.0144048 0.9947781 0.9921435 1.0082782 1.0031514 0.9977818 0.9979197
2003 0.9604767 1.0152822 1.0003505 1.0036451 0.9943865 1.0008829 1.0000714
2004 0.9936229 1.0036675 1.0003404 0.9733280 1.0080490 1.0015234 1.0102989
2005 0.9896802 0.9981803 1.0091630 1.0004675 0.9925079 0.9975550 1.0221738
2006 1.0007780 0.9950314 1.0042052 0.9925156 1.0074543 0.9970297 0.9898744
2007 0.9839117 1.0269595 0.9885430 1.0065579 1.0007794 1.0052424 0.9956481
           Aug       Sep       Oct       Nov       Dec
2000 1.0083899 0.9992323 0.9906386 0.9918614 1.0114727
2001 1.0322924 1.0078976 1.0104139 0.9865417 0.9799255
2002 1.0052381 0.9829373 1.0032023 1.0147012 0.9899742
2003 0.9935524 1.0047354 1.0004856 1.0096682 0.9933091
2004 0.9909239 0.9991884 1.0015731 0.9939821 1.0349431
2005 1.0027466 1.0057617 0.9882890 0.9918867 1.0146680
2006 1.0119093 0.9956002 1.0016936 1.0057648 0.9979660
2007 0.9956448 1.0052264 0.9930376 0.9969479 1.0075854
 [ reached 'max' / getOption("max.print") -- omitted 19 rows ]

$d16
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000 0.9229937 0.9109874 1.0018497 1.0128587 1.0072464 0.9584178 0.9972045
2001 0.9245776 0.8769101 1.0119934 0.9990080 1.0190529 0.9606558 0.9961855
2002 0.9290031 0.8775860 1.0164595 0.9918206 1.0246645 0.9471068 1.0023848
2003 0.9267705 0.8779349 0.9850468 1.0072778 1.0402376 0.9367533 1.0106100
2004 0.9323754 0.9020890 0.9915207 1.0033720 1.0205589 0.9506379 1.0182082
2005 0.9122288 0.8794928 1.0063526 0.9855071 1.0220178 0.9494132 1.0014544
2006 0.9153273 0.8799195 0.9821489 0.9834588 1.0281721 0.9565027 0.9870427
2007 0.9298208 0.8804508 0.9957592 0.9574549 1.0377619 0.9572973 0.9804560
           Aug       Sep       Oct       Nov       Dec
2000 1.0059655 0.9742842 1.0099625 0.9589638 1.2599549
2001 1.0053023 0.9604287 1.0151887 0.9681894 1.2497381
2002 1.0112172 0.9504335 1.0228617 0.9719429 1.2534200
2003 0.9960588 0.9626638 1.0214895 0.9613860 1.2695235
2004 0.9823010 0.9653800 1.0144966 0.9676015 1.2930237
2005 0.9881068 0.9748276 1.0023973 0.9723955 1.3143382
2006 0.9972638 0.9779709 1.0000525 0.9750472 1.3016178
2007 0.9980272 0.9636369 1.0069417 0.9866879 1.2870684
 [ reached 'max' / getOption("max.print") -- omitted 19 rows ]

$e18
           Jan       Feb       Mar       Apr       May       Jun       Jul
2000 0.9229937 0.9109874 1.0018497 1.0128587 1.0072464 0.9584178 0.9972045
2001 0.9245776 0.8769101 1.0119934 0.9990080 1.0190529 0.9606558 0.9961855
2002 0.9290031 0.8775860 1.0164595 0.9918206 1.0246645 0.9471068 1.0023848
2003 0.9267705 0.8779349 0.9850468 1.0072778 1.0402376 0.9367533 1.0106100
2004 0.9323754 0.9020890 0.9915207 1.0033720 1.0205589 0.9506379 1.0182082
2005 0.9122288 0.8794928 1.0063526 0.9855071 1.0220178 0.9494132 1.0014544
2006 0.9153273 0.8799195 0.9821489 0.9834588 1.0281721 0.9565027 0.9870427
2007 0.9298208 0.8804508 0.9957592 0.9574549 1.0377619 0.9572973 0.9804560
           Aug       Sep       Oct       Nov       Dec
2000 1.0059655 0.9742842 1.0099625 0.9589638 1.2599549
2001 1.0053023 0.9604287 1.0151887 0.9681894 1.2497381
2002 1.0112172 0.9504335 1.0228617 0.9719429 1.2534200
2003 0.9960588 0.9626638 1.0214895 0.9613860 1.2695235
2004 0.9823010 0.9653800 1.0144966 0.9676015 1.2930237
2005 0.9881068 0.9748276 1.0023973 0.9723955 1.3143382
2006 0.9972638 0.9779709 1.0000525 0.9750472 1.3016178
2007 0.9980272 0.9636369 1.0069417 0.9866879 1.2870684
 [ reached 'max' / getOption("max.print") -- omitted 19 rows ]

$rsd
               Jan           Feb           Mar           Apr           May
2000  9.143991e-04 -3.610172e-03 -5.279395e-03  1.453978e-02 -1.491622e-03
2001  1.571109e-03 -1.058817e-02  1.858363e-02 -2.353322e-02 -1.208202e-02
2002  2.000098e-02 -9.573018e-03 -1.720829e-02  3.701019e-03 -3.677747e-03
2003 -2.665015e-02  8.257432e-02  6.530557e-03 -4.552969e-03  2.525727e-03
2004 -1.807991e-02  1.348107e-03  1.229127e-02 -5.515130e-03  8.895666e-02
2005 -4.050627e-02 -1.250484e-02 -3.949544e-03 -1.113906e-02 -7.441758e-03
2006 -5.514744e-03 -3.513568e-02 -3.112452e-02 -2.628434e-02  1.532998e-02
2007 -1.005122e-03  3.101605e-02 -4.201881e-02  2.436620e-02  7.952011e-03
               Jun           Jul           Aug           Sep           Oct
2000  2.846082e-02  3.221584e-03 -2.091427e-02 -1.746945e-02 -2.032022e-02
2001 -5.534607e-02  2.819078e-02  5.833310e-02  1.303644e-02  1.478070e-02
2002 -3.500984e-03 -4.916751e-02 -1.931207e-02  1.244012e-02  5.166485e-02
2003  6.019341e-03 -2.247202e-02 -2.415587e-02  2.934986e-02 -1.221282e-02
2004  3.092954e-02  1.195264e-02 -2.302128e-02  7.012804e-03 -7.752154e-03
2005 -3.305475e-03  1.003615e-02 -9.859864e-03 -3.456644e-03 -3.442490e-02
2006 -1.517573e-02 -2.753248e-02  4.551304e-02  8.778877e-03  1.576765e-02
2007  8.014085e-04 -3.009188e-02 -7.617156e-03  1.816299e-02  2.591729e-03
               Nov           Dec
2000 -1.025718e-02  8.709151e-03
2001 -2.352063e-02 -3.327897e-02
2002  6.845458e-02  1.749874e-02
2003  6.495445e-03 -1.168921e-02
2004 -1.518930e-03  6.112340e-02
2005  4.259608e-03  1.801830e-02
2006  1.648602e-02 -1.919912e-02
2007  2.514562e-02  1.931216e-02
 [ reached 'max' / getOption("max.print") -- omitted 19 rows ]

Primeiro aplico o attach para que o R entenda os nomes dentro do objeto criado fit$series (d11, d16, e18 etc). Depois faço um teste para verificar se a série e18 pode ser dada pela fórmula (e18 = ‘série original’ / ‘série ajustada para sazonalidade’). Faço os prints para ver que os valores calculados conferem e ver que a têndencia obtida pela rolling mean difere da tendência obtida pelo X11.

attach(fit$series)    # para que o R entenda os nomes dentro de fit$series
teste = varejoms_2022 / d11   # conferencia de e18
print(cbind(varejoms_2022,d11,teste,e18,fit$data,d16))
         varejoms_2022        d11     teste       e18 fit$data.final
Jan 2000       8.08726   8.761988 0.9229937 0.9229937       8.761988
Feb 2000       8.05285   8.839694 0.9109874 0.9109874       8.839694
Mar 2000       8.87878   8.862387 1.0018497 1.0018497       8.862387
Apr 2000       9.22292   9.105831 1.0128587 1.0128587       9.105831
May 2000       9.29175   9.224902 1.0072464 1.0072464       9.224902
Jun 2000       9.11968   9.515349 0.9584178 0.9584178       9.515349
Jul 2000       9.77354   9.800938 0.9972045 0.9972045       9.800938
Aug 2000       9.70471   9.647160 1.0059655 1.0059655       9.647160
Sep 2000       9.22292   9.466355 0.9742842 0.9742842       9.466355
         fit$data.seasonal fit$data.seasonaladj fit$data.trend
Jan 2000         0.9314775             8.761988       8.729934
Feb 2000         0.8839755             8.839694       8.818973
Mar 2000         1.0059871             8.862387       8.937742
Apr 2000         1.0072874             9.105831       9.088338
May 2000         1.0122657             9.224902       9.281884
Jun 2000         0.9499938             9.515349       9.473317
Jul 2000         1.0063704             9.800938       9.583263
Aug 2000         1.0018798             9.647160       9.566895
Sep 2000         0.9639494             9.466355       9.473628
         fit$data.irregular fit$data.adjustfac       d16
Jan 2000          1.0036718          0.9229937 0.9229937
Feb 2000          1.0023496          0.9109874 0.9109874
Mar 2000          0.9915689          1.0018497 1.0018497
Apr 2000          1.0019248          1.0128587 1.0128587
May 2000          0.9938609          1.0072464 1.0072464
Jun 2000          1.0044368          0.9584178 0.9584178
Jul 2000          1.0227141          0.9972045 0.9972045
Aug 2000          1.0083899          1.0059655 1.0059655
Sep 2000          0.9992323          0.9742842 0.9742842
 [ reached 'max' / getOption("max.print") -- omitted 308 rows ]
print(cbind(tend,decomposicao.ad$trend,fit$data[,'trend']))
               tend decomposicao.ad$trend fit$data[, "trend"]
Jan 2000         NA                    NA            8.729934
Feb 2000         NA                    NA            8.818973
Mar 2000         NA                    NA            8.937742
Apr 2000         NA                    NA            9.088338
May 2000         NA                    NA            9.281884
Jun 2000         NA                    NA            9.473317
Jul 2000   9.336198              9.336198            9.583263
Aug 2000   9.377781              9.377781            9.566895
Sep 2000   9.430836              9.430836            9.473628
Oct 2000   9.491060              9.491060            9.390222
Nov 2000   9.535511              9.535511            9.370870
Dec 2000   9.557020              9.557020            9.424314
Jan 2001   9.564190              9.564190            9.516152
Feb 2001   9.615810              9.615810            9.591589
Mar 2001   9.690374              9.690374            9.643280
Apr 2001   9.777842              9.777842            9.701564
May 2001   9.872480              9.872480            9.788934
Jun 2001   9.941309              9.941309            9.913758
Jul 2001  10.007269             10.007269           10.093871
Aug 2001  10.076097             10.076097           10.280064
Sep 2001  10.132020             10.132020           10.380896
Oct 2001  10.189376             10.189376           10.400379
Nov 2001  10.255336             10.255336           10.376490
Dec 2001  10.325598             10.325598           10.341164
Jan 2002  10.378652             10.378652           10.334553
Feb 2002  10.398727             10.398727           10.367486
Mar 2002  10.403029             10.403029           10.408036
Apr 2002  10.434575             10.434575           10.427085
May 2002  10.522044             10.522044           10.445760
Jun 2002  10.661133             10.661133           10.451554
Jul 2002  10.785883             10.785883           10.458687
Aug 2002  10.910633             10.910633           10.562697
Sep 2002  11.069797             11.069797           10.793290
 [ reached 'max' / getOption("max.print") -- omitted 284 rows ]

Agora então faço o gráfico das série da decomposição X11 para visualização.

autoplot(varejoms_2022, series="Data") +
  autolayer(trendcycle(fit), series="Trend") +
  autolayer(seasadj(fit), series="Seasonally Adjusted") +
  xlab("Ano") + ylab("Index") +
  ggtitle("Índice de volume de vendas no varejo Total de Mato Grosso do Sul") +
  scale_colour_manual(values=c("gray","blue","red"),
             breaks=c("Data","Seasonally Adjusted","Trend"))

Referências

FERREIRA, Pedro Costa; SPERANZA, Talitha; COSTA, Jonatha (2018). BETS: Brazilian Economic Time Series. R package version 0.4.9. Disponível em: https://CRAN.R-project.org/package=BETS.

HYNDMAN, Rob. (2018). fpp2: Data for “Forecasting: Principles and Practice” (2nd Edition). R package version 2.3. Disponível em: https://CRAN.R-project.org/package=fpp2.

SAX C.; EDDELBUETTEL, D. (2018). “Seasonal Adjustment by X-13ARIMA-SEATS in R.” Journal of Statistical Software, 87(11), 1-17. doi: 10.18637/jss.v087.i11 (URL: https://doi.org/10.18637/jss.v087.i11).

US BUREAU OF THE CENSUS (2013). X-13ARIMA-SEATS Reference Manual Accessible HTML Output Version. Staff Statistical Research Division, US Bureau of the Census, disponível em: http://www.census.gov/ts/x13as/docX13ASHTML.pdf.

LS0tDQp0aXRsZTogIlPDqXJpZXMgVGVtcG9yYWlzOiBkZWNvbXBvc2nDp8OjbyBjbMOhc3NpY2EgZSBhIGFib3JkYWdlbSBYMTEsIHZhcmVqbyBiYXNlIDIwMjI9MTAwIg0KYXV0aG9yOiAiQWRyaWFubyBNYXJjb3MgUm9kcmlndWVzIEZpZ3VlaXJlZG8sICplLW1haWw6IGFkcmlhbm8uZmlndWVpcmVkb0B1Zm1zLmJyKiINCmxpbmtjb2xvcjogYmx1ZQ0KYWJzdHJhY3Q6IA0KICBUaGlzIGlzIGFuIHVuZGVyZ3JhZCBzdHVkZW50IGxldmVsIGluc3RydWN0aW9uIGZvciBjbGFzcyB1c2UuICANCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVkICVCICVZJylgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICB0aGVtZTogZGVmYXVsdA0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiBubw0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGZpZ19jYXB0aW9uOiB0cnVlDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KZWRpdG9yX29wdGlvbnM6IA0KICBtYXJrZG93bjogDQogICAgd3JhcDogNzINCi0tLQ0KDQpgYGB7ciBrbml0cl9pbml0LCBlY2hvPUZBTFNFLCBjYWNoZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtYXJrZG93bikNCmxpYnJhcnkocm1kZm9ybWF0cykNCg0KIyMgR2xvYmFsIG9wdGlvbnMNCm9wdGlvbnMobWF4LnByaW50PSIxMDAiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1UUlVFLA0KCSAgICAgICAgICAgICBjYWNoZT1GLA0KICAgICAgICAgICAgICAgcHJvbXB0PUZBTFNFLA0KICAgICAgICAgICAgICAgdGlkeT1UUlVFLA0KICAgICAgICAgICAgICAgY29tbWVudD1OQSwNCiAgICAgICAgICAgICAgIG1lc3NhZ2U9RkFMU0UsDQogICAgICAgICAgICAgICB3YXJuaW5nPUZBTFNFKQ0Kb3B0c19rbml0JHNldCh3aWR0aD0xMDApDQpgYGANCg0KIyBMaWNlbsOnYSB7I0xpY2Vuw6dhIC51bm51bWJlcmVkfQ0KDQpUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZQ0KNC4wIEludGVybmF0aW9uYWwgTGljZW5zZS4gVG8gdmlldyBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlLCB2aXNpdA0KPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8+IG9yIHNlbmQgYSBsZXR0ZXIgdG8NCkNyZWF0aXZlIENvbW1vbnMsIFBPIEJveCAxODY2LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0MiwgVVNBLg0KDQohW0xpY2Vuc2U6IENDIEJZLVNBDQo0LjBdKGh0dHBzOi8vbWlycm9ycy5jcmVhdGl2ZWNvbW1vbnMub3JnL3ByZXNza2l0L2J1dHRvbnMvODh4MzEvcG5nL2J5LXNhLnBuZyl7d2lkdGg9IjI1JSJ9DQoNCiMgQ2l0YcOnw6NvIHsjQ2l0YcOnw6NvIC51bm51bWJlcmVkfQ0KDQpTdWdlc3TDo28gZGUgY2l0YcOnw6NvOiBGSUdVRUlSRURPLCBBZHJpYW5vIE1hcmNvcyBSb2RyaWd1ZXMuIFPDqXJpZXMNClRlbXBvcmFpczogZGVjb21wb3Npw6fDo28gY2zDoXNzaWNhIGUgYSBhYm9yZGFnZW0gWDExLiBDYW1wbw0KR3JhbmRlLU1TLEJyYXNpbDogUlN0dWRpby9ScHVicywgMjAxOS4gRGlzcG9uw612ZWwgZW0NCjxodHRwOi8vcnB1YnMuY29tL2Ftcm9maS9kZWNvbXBvc2VfeDExX3ZhcmVqb21zPi4NCg0KIyBJbnRyb2R1w6fDo28NCg0KTmVzdGUgYXJxdWl2byB1dGlsaXpvIGEgc8OpcmllIGRvIMONbmRpY2UgZGUgdm9sdW1lIGRlIHZlbmRhcyBubyB2YXJlam8NClRvdGFsIGRlIE1hdG8gR3Jvc3NvIGRvIFN1bCwgc8OpcmllIG1lbnNhbCBhIHBhcnRpciBkZSBqYW4vMjAwMCBhdMOpDQptYWlvLzIwMjYgb2J0aWRhIG5vIFNpZHJhLUlCR0UsIGh0dHBzOi8vc2lkcmEuaWJnZS5nb3YuYnIvdGFiZWxhLzg4ODAjcmVzdWx0YWRvLiBQb3J0YW50bywgc8OjbyAzMTcgb2JzZXJ2YcOnw7VlcyBtZW5zYWlzLlwNCsOJIHVtIGV4ZXJjw61jaW8gcsOhcGlkbyBkZSBkZWNvbXBvc2nDp8OjbyBjbMOhc3NpY2Egbm9zIGNvbXBvbmVudGVzIGRlDQp0ZW5kw6puY2lhLCBzYXpvbmFsaWRhZGUgZSBpcnJlZ3VsYXJpZGFkZXMuIE8gbW9kZWxvIGFkaXRpdm8gw6kgZGVzY3JpdG8NCmNvbW8gJCQNClkgPSBUICsgUyArIEkgIA0KJCQgZSBvIG11bHRpcGxpY2F0aXZvICQkDQpZID0gVCAqIFMgKiBJIA0KJCQgZW0gcXVlICRZJCDDqSBhIHPDqXJpZSBhbmFsaXNhZGE7ICRUJCDDqSBhIHRlbmTDqm5jaWEgKCoqcm9sbGluZyBtZWFuKioNCmRlIDEyIG1lc2VzKTsgJFMkIMOpIGEgc2F6b25hbGlkYWRlOyBlICRJJCDDqSBhIGlycmVndWxhcmlkYWRlLlwNClN1Z2VyaW1vcyBhc3Npc3RpciwgcGFyYSBtYWlvcmVzIGVzY2xhcmVjaW1lbnRvcyBhY2VyY2EgZG9zIGFzcGVjdG9zDQp0ZW9yaWNvcyBkbyBtb2RlbG8gZGUgZGVjb21wb3Npw6fDo28sIGFvIHbDrWRlbyBbRGVjb21wb3Npw6fDo28gZGUgc8Opcmllcw0KdGVtcG9yYWlzXShodHRwczovL3lvdXR1LmJlL1BQdW1IRFdCQ2NBICJTw4lSSUVTIFRFTVBPUkFJUyAtUFBHQ0MtMjAyMS4xOiAwM0IgRGVjb21wb3Npw6fDo28gZGUgc8OpcmllcyB0ZW1wb3JhaXMiKSwNCmRlIG5vc3NhIGF1dG9yaWEuDQoNCiMgRGFkb3MNCg0KRXUgZ2VyZWkgYSBlc3RydXR1cmEgaWTDqm50aWNhIHBlbGEgZnVuw6fDo28gYGRwdXQoKWAuIA0KDQpgYGB7cn0NCiMgdXNvIGEgb3DDp8OjbyBhYmFpeG8gcGFyYSBxdWFuZG8gYSBpbnRlcm5ldCBwb3IgYWxndW0gbW90aXZvIGZhbGhhDQp2YXJlam9tc18yMDIyPC1zdHJ1Y3R1cmUobGlzdChNw6pzID0gc3RydWN0dXJlKGMoOTQ2Njg0ODAwLCA5NDkzNjMyMDAsIDk1MTg2ODgwMCwgDQo5NTQ1NDcyMDAsIDk1NzEzOTIwMCwgOTU5ODE3NjAwLCA5NjI0MDk2MDAsIDk2NTA4ODAwMCwgOTY3NzY2NDAwLCANCjk3MDM1ODQwMCwgOTczMDM2ODAwLCA5NzU2Mjg4MDAsIDk3ODMwNzIwMCwgOTgwOTg1NjAwLCA5ODM0MDQ4MDAsIA0KOTg2MDgzMjAwLCA5ODg2NzUyMDAsIDk5MTM1MzYwMCwgOTkzOTQ1NjAwLCA5OTY2MjQwMDAsIDk5OTMwMjQwMCwgDQoxMDAxODk0NDAwLCAxMDA0NTcyODAwLCAxMDA3MTY0ODAwLCAxMDA5ODQzMjAwLCAxMDEyNTIxNjAwLCAxMDE0OTQwODAwLCANCjEwMTc2MTkyMDAsIDEwMjAyMTEyMDAsIDEwMjI4ODk2MDAsIDEwMjU0ODE2MDAsIDEwMjgxNjAwMDAsIDEwMzA4Mzg0MDAsIA0KMTAzMzQzMDQwMCwgMTAzNjEwODgwMCwgMTAzODcwMDgwMCwgMTA0MTM3OTIwMCwgMTA0NDA1NzYwMCwgMTA0NjQ3NjgwMCwgDQoxMDQ5MTU1MjAwLCAxMDUxNzQ3MjAwLCAxMDU0NDI1NjAwLCAxMDU3MDE3NjAwLCAxMDU5Njk2MDAwLCAxMDYyMzc0NDAwLCANCjEwNjQ5NjY0MDAsIDEwNjc2NDQ4MDAsIDEwNzAyMzY4MDAsIDEwNzI5MTUyMDAsIDEwNzU1OTM2MDAsIDEwNzgwOTkyMDAsIA0KMTA4MDc3NzYwMCwgMTA4MzM2OTYwMCwgMTA4NjA0ODAwMCwgMTA4ODY0MDAwMCwgMTA5MTMxODQwMCwgMTA5Mzk5NjgwMCwgDQoxMDk2NTg4ODAwLCAxMDk5MjY3MjAwLCAxMTAxODU5MjAwLCAxMTA0NTM3NjAwLCAxMTA3MjE2MDAwLCAxMTA5NjM1MjAwLCANCjExMTIzMTM2MDAsIDExMTQ5MDU2MDAsIDExMTc1ODQwMDAsIDExMjAxNzYwMDAsIDExMjI4NTQ0MDAsIDExMjU1MzI4MDAsIA0KMTEyODEyNDgwMCwgMTEzMDgwMzIwMCwgMTEzMzM5NTIwMCwgMTEzNjA3MzYwMCwgMTEzODc1MjAwMCwgMTE0MTE3MTIwMCwgDQoxMTQzODQ5NjAwLCAxMTQ2NDQxNjAwLCAxMTQ5MTIwMDAwLCAxMTUxNzEyMDAwLCAxMTU0MzkwNDAwLCAxMTU3MDY4ODAwLCANCjExNTk2NjA4MDAsIDExNjIzMzkyMDAsIDExNjQ5MzEyMDAsIDExNjc2MDk2MDAsIDExNzAyODgwMDAsIDExNzI3MDcyMDAsIA0KMTE3NTM4NTYwMCwgMTE3Nzk3NzYwMCwgMTE4MDY1NjAwMCwgMTE4MzI0ODAwMCwgMTE4NTkyNjQwMCwgMTE4ODYwNDgwMCwgDQoxMTkxMTk2ODAwLCAxMTkzODc1MjAwLCAxMTk2NDY3MjAwLCAxMTk5MTQ1NjAwLCAxMjAxODI0MDAwLCAxMjA0MzI5NjAwLCANCjEyMDcwMDgwMDAsIDEyMDk2MDAwMDAsIDEyMTIyNzg0MDAsIDEyMTQ4NzA0MDAsIDEyMTc1NDg4MDAsIDEyMjAyMjcyMDAsIA0KMTIyMjgxOTIwMCwgMTIyNTQ5NzYwMCwgMTIyODA4OTYwMCwgMTIzMDc2ODAwMCwgMTIzMzQ0NjQwMCwgMTIzNTg2NTYwMCwgDQoxMjM4NTQ0MDAwLCAxMjQxMTM2MDAwLCAxMjQzODE0NDAwLCAxMjQ2NDA2NDAwLCAxMjQ5MDg0ODAwLCAxMjUxNzYzMjAwLCANCjEyNTQzNTUyMDAsIDEyNTcwMzM2MDAsIDEyNTk2MjU2MDAsIDEyNjIzMDQwMDAsIDEyNjQ5ODI0MDAsIDEyNjc0MDE2MDAsIA0KMTI3MDA4MDAwMCwgMTI3MjY3MjAwMCwgMTI3NTM1MDQwMCwgMTI3Nzk0MjQwMCwgMTI4MDYyMDgwMCwgMTI4MzI5OTIwMCwgDQoxMjg1ODkxMjAwLCAxMjg4NTY5NjAwLCAxMjkxMTYxNjAwLCAxMjkzODQwMDAwLCAxMjk2NTE4NDAwLCAxMjk4OTM3NjAwLCANCjEzMDE2MTYwMDAsIDEzMDQyMDgwMDAsIDEzMDY4ODY0MDAsIDEzMDk0Nzg0MDAsIDEzMTIxNTY4MDAsIDEzMTQ4MzUyMDAsIA0KMTMxNzQyNzIwMCwgMTMyMDEwNTYwMCwgMTMyMjY5NzYwMCwgMTMyNTM3NjAwMCwgMTMyODA1NDQwMCwgMTMzMDU2MDAwMCwgDQoxMzMzMjM4NDAwLCAxMzM1ODMwNDAwLCAxMzM4NTA4ODAwLCAxMzQxMTAwODAwLCAxMzQzNzc5MjAwLCAxMzQ2NDU3NjAwLCANCjEzNDkwNDk2MDAsIDEzNTE3MjgwMDAsIDEzNTQzMjAwMDAsIDEzNTY5OTg0MDAsIDEzNTk2NzY4MDAsIDEzNjIwOTYwMDAsIA0KMTM2NDc3NDQwMCwgMTM2NzM2NjQwMCwgMTM3MDA0NDgwMCwgMTM3MjYzNjgwMCwgMTM3NTMxNTIwMCwgMTM3Nzk5MzYwMCwgDQoxMzgwNTg1NjAwLCAxMzgzMjY0MDAwLCAxMzg1ODU2MDAwLCAxMzg4NTM0NDAwLCAxMzkxMjEyODAwLCAxMzkzNjMyMDAwLCANCjEzOTYzMTA0MDAsIDEzOTg5MDI0MDAsIDE0MDE1ODA4MDAsIDE0MDQxNzI4MDAsIDE0MDY4NTEyMDAsIDE0MDk1Mjk2MDAsIA0KMTQxMjEyMTYwMCwgMTQxNDgwMDAwMCwgMTQxNzM5MjAwMCwgMTQyMDA3MDQwMCwgMTQyMjc0ODgwMCwgMTQyNTE2ODAwMCwgDQoxNDI3ODQ2NDAwLCAxNDMwNDM4NDAwLCAxNDMzMTE2ODAwLCAxNDM1NzA4ODAwLCAxNDM4Mzg3MjAwLCAxNDQxMDY1NjAwLCANCjE0NDM2NTc2MDAsIDE0NDYzMzYwMDAsIDE0NDg5MjgwMDAsIDE0NTE2MDY0MDAsIDE0NTQyODQ4MDAsIDE0NTY3OTA0MDAsIA0KMTQ1OTQ2ODgwMCwgMTQ2MjA2MDgwMCwgMTQ2NDczOTIwMCwgMTQ2NzMzMTIwMCwgMTQ3MDAwOTYwMCwgMTQ3MjY4ODAwMCwgDQoxNDc1MjgwMDAwLCAxNDc3OTU4NDAwLCAxNDgwNTUwNDAwLCAxNDgzMjI4ODAwLCAxNDg1OTA3MjAwLCAxNDg4MzI2NDAwLCANCjE0OTEwMDQ4MDAsIDE0OTM1OTY4MDAsIDE0OTYyNzUyMDAsIDE0OTg4NjcyMDAsIDE1MDE1NDU2MDAsIDE1MDQyMjQwMDAsIA0KMTUwNjgxNjAwMCwgMTUwOTQ5NDQwMCwgMTUxMjA4NjQwMCwgMTUxNDc2NDgwMCwgMTUxNzQ0MzIwMCwgMTUxOTg2MjQwMCwgDQoxNTIyNTQwODAwLCAxNTI1MTMyODAwLCAxNTI3ODExMjAwLCAxNTMwNDAzMjAwLCAxNTMzMDgxNjAwLCAxNTM1NzYwMDAwLCANCjE1MzgzNTIwMDAsIDE1NDEwMzA0MDAsIDE1NDM2MjI0MDAsIDE1NDYzMDA4MDAsIDE1NDg5NzkyMDAsIDE1NTEzOTg0MDAsIA0KMTU1NDA3NjgwMCwgMTU1NjY2ODgwMCwgMTU1OTM0NzIwMCwgMTU2MTkzOTIwMCwgMTU2NDYxNzYwMCwgMTU2NzI5NjAwMCwgDQoxNTY5ODg4MDAwLCAxNTcyNTY2NDAwLCAxNTc1MTU4NDAwLCAxNTc3ODM2ODAwLCAxNTgwNTE1MjAwLCAxNTgzMDIwODAwLCANCjE1ODU2OTkyMDAsIDE1ODgyOTEyMDAsIDE1OTA5Njk2MDAsIDE1OTM1NjE2MDAsIDE1OTYyNDAwMDAsIDE1OTg5MTg0MDAsIA0KMTYwMTUxMDQwMCwgMTYwNDE4ODgwMCwgMTYwNjc4MDgwMCwgMTYwOTQ1OTIwMCwgMTYxMjEzNzYwMCwgMTYxNDU1NjgwMCwgDQoxNjE3MjM1MjAwLCAxNjE5ODI3MjAwLCAxNjIyNTA1NjAwLCAxNjI1MDk3NjAwLCAxNjI3Nzc2MDAwLCAxNjMwNDU0NDAwLCANCjE2MzMwNDY0MDAsIDE2MzU3MjQ4MDAsIDE2MzgzMTY4MDAsIDE2NDA5OTUyMDAsIDE2NDM2NzM2MDAsIDE2NDYwOTI4MDAsIA0KMTY0ODc3MTIwMCwgMTY1MTM2MzIwMCwgMTY1NDA0MTYwMCwgMTY1NjYzMzYwMCwgMTY1OTMxMjAwMCwgMTY2MTk5MDQwMCwgDQoxNjY0NTgyNDAwLCAxNjY3MjYwODAwLCAxNjY5ODUyODAwLCAxNjcyNTMxMjAwLCAxNjc1MjA5NjAwLCAxNjc3NjI4ODAwLCANCjE2ODAzMDcyMDAsIDE2ODI4OTkyMDAsIDE2ODU1Nzc2MDAsIDE2ODgxNjk2MDAsIDE2OTA4NDgwMDAsIDE2OTM1MjY0MDAsIA0KMTY5NjExODQwMCwgMTY5ODc5NjgwMCwgMTcwMTM4ODgwMCwgMTcwNDA2NzIwMCwgMTcwNjc0NTYwMCwgMTcwOTI1MTIwMCwgDQoxNzExOTI5NjAwLCAxNzE0NTIxNjAwLCAxNzE3MjAwMDAwLCAxNzE5NzkyMDAwLCAxNzIyNDcwNDAwLCAxNzI1MTQ4ODAwLCANCjE3Mjc3NDA4MDAsIDE3MzA0MTkyMDAsIDE3MzMwMTEyMDAsIDE3MzU2ODk2MDAsIDE3MzgzNjgwMDAsIDE3NDA3ODcyMDAsIA0KMTc0MzQ2NTYwMCwgMTc0NjA1NzYwMCwgMTc0ODczNjAwMCwgMTc1MTMyODAwMCwgMTc1NDAwNjQwMCwgMTc1NjY4NDgwMCwgDQoxNzU5Mjc2ODAwLCAxNzYxOTU1MjAwLCAxNzY0NTQ3MjAwLCAxNzY3MjI1NjAwLCAxNzY5OTA0MDAwLCAxNzcyMzIzMjAwLCANCjE3NzUwMDE2MDAsIDE3Nzc1OTM2MDApLCBjbGFzcyA9IGMoIlBPU0lYY3QiLCAiUE9TSVh0IiksIHR6b25lID0gIlVUQyIpLCANCiAgICB2YXJlam9tc18yMDIyID0gYyg4LjA4NzI2LCA4LjA1Mjg1LCA4Ljg3ODc4LCA5LjIyMjkyLCA5LjI5MTc1LCANCiAgICA5LjExOTY4LCA5Ljc3MzU0LCA5LjcwNDcxLCA5LjIyMjkyLCA5LjM5NDk5LCA4LjkxMzE5LCAxMi4wMTA0NCwgDQogICAgOC44MDk5NSwgOC4zMjgxNiwgOS44NzY3OCwgOS42NzAzLCA5LjkxMTIsIDkuMDE2NDQsIDEwLjA0ODg1LCANCiAgICAxMC42NjgzLCAxMC4wNDg4NSwgMTAuNjY4MywgOS45MTEyLCAxMi42NjQzMSwgOS43MzkxMywgOS4wNTA4NSwgDQogICAgMTAuNDk2MjMsIDEwLjQyNzQxLCAxMC43MzcxMywgOS44NzY3OCwgMTAuNDYxODIsIDEwLjczNzEzLCANCiAgICAxMC4wODMyNywgMTEuMzkwOTksIDExLjI4Nzc1LCAxNC42MjU5LCAxMC43NzE1NCwgMTEuMDEyNDQsIA0KICAgIDEyLjM1NDU4LCAxMi43Njc1NSwgMTMuMDc3MjcsIDExLjg3Mjc5LCAxMi44NzA3OSwgMTIuNzMzMTQsIA0KICAgIDEyLjU5NTQ4LCAxMy40MjE0MSwgMTIuODAxOTYsIDE2LjY5MDczLCAxMi4zNTQ1OCwgMTIuMjg1NzYsIA0KICAgIDEzLjgzNDM4LCAxNC4xMDk2OSwgMTUuMzgzLCAxNC42MjU5LCAxNi4wNzEyOCwgMTUuMzE0MTgsIA0KICAgIDE1LjI0NTM1LCAxNi4xNzQ1MiwgMTUuNDUxODMsIDIxLjc0OTU3LCAxNC44NjY4LCAxNC42NjAzMSwgDQogICAgMTcuMTcyNTMsIDE2Ljg2MjgsIDE3LjU1MTA4LCAxNi41ODc0OSwgMTguMTM2MTEsIDE3LjY1NDMyLCANCiAgICAxNy40ODIyNSwgMTcuNjg4NzMsIDE3LjMxMDE4LCAyNC4xMjQxMywgMTYuNjU2MzIsIDE1LjkzMzYzLCANCiAgICAxNy45Mjk2MywgMTcuNzU3NTYsIDE4Ljk2MjA1LCAxNy42NTQzMiwgMTguMzc3MDEsIDE5LjM0MDYsIA0KICAgIDE4Ljk5NjQ2LCAxOS43ODc5OCwgMTkuNTEyNjcsIDI1Ljk4MjQ4LCAxOC40NDU4NCwgMTguNDQ1ODQsIA0KICAgIDIwLjQwNzQzLCAyMC4zMDQxOSwgMjIuMTI4MTIsIDIwLjY0ODMzLCAyMS4wNjEyOSwgMjEuNTc3NSwgDQogICAgMjEuMzAyMTksIDIyLjQzNzg1LCAyMi41NzU1MSwgMzAuMjg0MjEsIDIyLjY0NDMzLCAyMS41NDMwOSwgDQogICAgMjMuMjk4MiwgMjMuMzMyNjEsIDI1LjA4NzcyLCAyMy4yMjkzNywgMjUuNTAwNjgsIDI1Ljg3OTI0LCANCiAgICAyNS40MzE4NiwgMjcuMTE4MTQsIDI0Ljg4MTI0LCAzMy43MjU2LCAyNi40OTg2OSwgMjIuMzM0NjEsIA0KICAgIDI0Ljg4MTI0LCAyNS4yMjUzNywgMjcuMTE4MTQsIDI1LjE1NjU1LCAyNi41MzMxLCAyNi42NzA3NiwgDQogICAgMjYuMjU3NzksIDI4LjQ2MDI4LCAyNy41OTk5MywgMzYuNzg4NDQsIDI4LjE1MDU1LCAyNi40OTg2OSwgDQogICAgMjkuNjY0NzYsIDI5LjE0ODU2LCAzMS40MTk4NywgMjkuMjg2MjEsIDMwLjQ5MDcsIDI5Ljg3MTI1LCANCiAgICAzMC40NTYyOCwgMzEuOTM2MDgsIDMwLjgwMDQyLCA0Mi41Njk5NywgMzAuNTI1MTEsIDI5LjM1NTA0LCANCiAgICAzMi4xMDgxNSwgMzIuNjU4NzcsIDM2LjI3MjIzLCAzMi42NTg3NywgMzQuMjQxODEsIDMzLjc5NDQzLCANCiAgICAzMy4xNDA1NywgMzUuMzc3NDcsIDM1LjE3MDk5LCA0Ny42Mjg4MSwgMzcuNzE3NjEsIDM1Ljc1NjAyLCANCiAgICAzOC45MjIxLCAzNi43NTQwMiwgMzkuOTg4OTMsIDM5LjMwMDY1LCAzOS45ODg5MywgNDEuODgxNjksIA0KICAgIDQxLjEyNDU5LCA0NC4wNDk3NywgNDQuODc1NywgNTQuNTExNTksIDQ1LjgzOTI5LCA0MS45MTYxMSwgDQogICAgNDYuNjY1MjIsIDQ0LjU2NTk3LCA0Ny40OTExNSwgNDQuODA2ODcsIDQ4LjExMDYsIDQ4LjI4MjY3LCANCiAgICA0Ny4wNzgxOSwgNTAuNDUwNzUsIDUxLjg5NjEzLCA2Ny4zMTM1NSwgNTEuMDAxMzcsIDQ3LjM4NzkxLCANCiAgICA1MC4yMDk4NSwgNTAuNzI2MDYsIDU0LjQ3NzE3LCA0OS40MTgzMywgNTEuNzU4NDgsIDUyLjkyODU1LCANCiAgICA1Mi4wMzM3OSwgNTYuNzQ4NDksIDU2LjY0NTI1LCA3Mi4xNjU5MSwgNTUuODUzNzMsIDUwLjAzNzc4LCANCiAgICA1NS42ODE2NiwgNTQuNzUyNDgsIDU3LjE5NTg3LCA1NC4xNjc0NSwgNTcuMzMzNTIsIDU2LjY3OTY2LCANCiAgICA1NC41MTE1OSwgNjAuMDg2NjMsIDU5LjAxOTgsIDc2LjE5MjMzLCA1Ni45NTQ5NywgNTMuODIzMzEsIA0KICAgIDU4LjUwMzYsIDU2LjgxNzMyLCA1OS4xNTc0NiwgNTYuNjEwODMsIDU5LjAxOTgsIDU3Ljc4MDksIA0KICAgIDU1Ljg4ODE0LCA1OC45NTA5OCwgNjAuOTEyNTcsIDc2LjI2MTE2LCA1OS4yODA2MSwgNTQuNDU2NDYsIA0KICAgIDU3Ljk5ODI1LCA1NS44NDAwOSwgNTguMTc2NywgNTYuMjU2NDcsIDU4LjI5MzQxLCA2MC4xNTE5NCwgDQogICAgNjAuMzYwMjEsIDU5LjY0MSwgNjAuOTA0OCwgNzQuMDc5MzQsIDU3Ljg4NTk4LCA1My40MzQ4NCwgDQogICAgNjIuMTY1NzIsIDU0Ljg1NjY4LCA1OS4zNTgxNywgNTkuODEwNjIsIDYwLjM2NDM3LCA2My40MjYwNywgDQogICAgNjMuOTk3NTYsIDY2LjM1MTAzLCA2OC42ODE3OCwgNzkuNjM0NzUsIDYzLjI4MDYsIDU4LjQ0NzUyLCANCiAgICA2MS43ODY4OCwgNjAuMTM1NDYsIDYyLjc0NjMyLCA1OS40ODQ2NSwgNjIuOTMxODMsIDY1LjA1MTgxLCANCiAgICA2NC44NDE4LCA2Ni44MTc3NywgNzEuNDkzOTEsIDgxLjc5NTcxLCA2Ny41NDY5NCwgNjMuNzU0NjEsIA0KICAgIDYzLjA4OCwgNTMuNjEyMjMsIDYzLjc1MDU3LCA2NC4wNDU4MywgNjYuNjAyODQsIDcwLjE1ODksIA0KICAgIDc0LjI0MjQ1LCA4MC40Mjc5OSwgODAuOTQ1NTYsIDkxLjE1NzI3LCA3Mi42ODU0OSwgNjkuMjE4MDEsIA0KICAgIDc2LjI5OTgxLCA3NC42MjY2MiwgODAuNDM2NTMsIDc2LjgzNDUsIDkwLjkxMDI5LCA4Ny43MjI5MywgDQogICAgODguMTczODEsIDkzLjQyMTIyLCA5My41NTE0MiwgMTA2Ljg0NzA3LCA4NC43ODEzLCA4NC44MTQwMiwgDQogICAgOTUuNDI2MjEsIDk0LjkyNTUxLCAxMDEuODE1NTksIDk5LjE2MDM4LCAxMDQuNzMyNTgsIDEwMy40NDQ2NywgDQogICAgMTAxLjUzMTM3LCAxMDQuMjYyNzksIDEwMy41MTk5LCAxMjEuNTg1NjYsIDk0LjYxNDg0LCA5Mi4xNzM3NSwgDQogICAgMTAxLjk2MTcsIDk5LjM0OTA1LCAxMDEuODg2MjgsIDk5LjQ1NDk3LCAxMDMuNzAwNjgsIDEwNS40NTQ3NywgDQogICAgMTA3LjkyODg4LCAxMDguOTY1LCAxMTEuNjU1OTUsIDEyOC40MDk2MSwgMTA0LjY1Nzk3LCAxMDQuOTA0NzYsIA0KICAgIDExMi41MDcyMiwgMTA2LjgxMzA3LCAxMTQuMzM0OTcsIDEwOS4xNDE1MSwgMTEyLjIxMTMxLCAxMTMuNDg1MjQsIA0KICAgIDExMS4yNjMxMSwgMTIwLjA0MzM5LCAxMjAuNDY3MjIsIDEzNS40MzQxMywgMTExLjU3MDcxLCAxMDkuMTcxOSwgDQogICAgMTE3LjI0MjMxLCAxMTguNTU0NDMsIDEyMy4yNDAxOCwgMTE0LjI1Nzc4LCAxMTkuODY2MDksIDExNy42OTY1MSwgDQogICAgMTE2LjI2Njg1LCAxMjQuNTM0NjEsIDEyNi4wOTIxMSwgMTQyLjkyMTUzLCAxMTcuMzQ3MTEsIDExMS40ODc2MywgDQogICAgMTIzLjk5MzcyLCAxMjMuMDY1NjQsIDEyNy4yOTUzOCkpLCByb3cubmFtZXMgPSBjKE5BLCAtMzE3TA0KKSwgY2xhc3MgPSBjKCJ0YmxfZGYiLCAidGJsIiwgImRhdGEuZnJhbWUiKSkNCmNsYXNzKHZhcmVqb21zXzIwMjIpDQpgYGANCg0KIyBQcmltZWlyYXMgYW7DoWxpc2VzDQoNCkluaWNpYWxtZW50ZSBvbGhhcmVpIGFzIGVzdGF0w61zdGljYXMgZGVzY3JpdGl2YXMgZGEgc8OpcmllLiBFbSBzZWd1aWRhDQpmYXJlaSB1bSBwbG90IGLDoXNpY28gZGEgc8OpcmllIGUgbyBwbG90IHBlbG8gcGFjb3RlIGBkeWdyYXBoc2AsIMO6dGlsIHBhcmENCnZlciBvcyBwb250b3MgZGUgcGljb3MgZSBtb21lbnRvcyBlc3BlY8OtZmljb3MuDQoNCmBgYHtyfQ0KIyBlc3RhdGlzdGljYXMgYmFzaWNhcw0Kc3VtbWFyeSh2YXJlam9tc18yMDIyKQ0KdmFyZWpvbXNfMjAyMjwtdHModmFyZWpvbXNfMjAyMiR2YXJlam9tc18yMDIyLCBzdGFydD1jKDIwMDAsMSksIGZyZXF1ZW5jeT0xMikNCnBsb3QodmFyZWpvbXNfMjAyMiwgbWFpbj0iw41uZGljZSBkZSB2b2x1bWUgZGUgdmVuZGFzIG5vIHZhcmVqbyBUb3RhbCBkZSBNYXRvIEdyb3NzbyBkbyBTdWwiLA0KICAgICB4bGFiPSJBbm8iLCB5bGFiPSLDjW5kaWNlIiwgY29sPSJibHVlIiwgbHdkPTIsIHR5cGU9ImwiKSANCiMgcGVsbyBwYWNvdGUgZHlncmFwaCBkw6EgbWFpcyBvcMOnw7Vlcw0KbGlicmFyeShkeWdyYXBocykNCmR5Z3JhcGgodmFyZWpvbXNfMjAyMikNCmBgYA0KDQrDiSBwb3NzaXZlbCB2aXN1YWxpemFyIG5vcyBwbG90cyBhY2ltYTogc2F6b25hbGlkYWRlIChwb3IgZXhlbXBsbywgcGljb3MNCmVtIGRlemVtYnJvIGRlIGNhZGEgYW5vKTsgYSB0ZW5kw6puY2lhIGFwYXJlbnRlbWVudGUgY3Jlc2NlbnRlIGF0w6kgMjAxNCBlDQpkZWNyZXNjZSBjb20gYSAiY3Jpc2UiIGJyYXNpbGVpcmE7IGUgdW1hIGFwYXJlbnRlIG7Do28tZXN0YWNpb25hcmllZGFkZQ0KKG3DqWRpYSBlIHZhcmnDom5jaWEgbXVkYW0gbm8gdGVtcG8pLiBFbSBvdXRyYSBwb3N0YWdlbSBhcGxpY2FyZWkgbyB0ZXN0ZQ0KZGUgcmFpeiB1bml0w6FyaWEgbmEgc8OpcmllIHBhcmEgYXZhbGlhciBhIGVzdGFjaW9uYXJpZWRhZGUgZGUgbW9kbyBtYWlzDQpleHBsw61jaXRvLg0KDQojIERlY29tcG9zacOnw6NvIGRhIHPDqXJpZQ0KDQpGYXJlaSBhcyBkZWNvbXBvc2ljb2VzIGFkaXRpdmEgZSBtdWx0aXBsaWNhdGl2YSBwZWxhIGZ1bsOnw6NvIGBkZWNvbXBvc2VgLg0KRWxhIGFwbGljYSB1bWEgYHJvbGxpbmcgbWVhbmAgbmEgZnJlcXXDqm5jaWEgZGEgc8OpcmllIChtZW5zYWwgc2Vyw6EgaWd1YWwNCmEgMTIgbWVzZXMpIG9idGVuZG8gYSB0ZW5kw6puY2lhICgqdHJlbmQqKSwgbyBmYXRvciBzYXpvbmFsIG3DqWRpbyAocXVlDQpzZXLDoSBhIGNvbXBvbmVudGUgZGEgc2F6b25hbGlkYWRlKSBlIG8gY29tcG9uZW50ZSBkZSBpcnJlZ3VsYXJpZGFkZS4gTm9zDQpvYmpldG9zIGRlY29tcG9zaWNhby5hZCBlIGRlY29tcG9zaWNhby5tdWx0IGVzdGFyw6NvIG9zIHbDoXJpb3MNCmNvbXBvbmVudGVzIGNhbGN1bGFkb3MgZSBxdWUgcG9kZW0gc2VyIHBsb3RhZG9zLg0KDQpgYGB7cn0NCmRlY29tcG9zaWNhby5hZDwtZGVjb21wb3NlKHZhcmVqb21zXzIwMjIpICAgIyBhZGl0aXZhDQpkZWNvbXBvc2ljYW8ubXVsdDwtZGVjb21wb3NlKHZhcmVqb21zXzIwMjIsdHlwZSA9ICJtdWx0aXBsaWNhdGl2ZSIpICAgIyBtdWx0aXBsaWNhdGl2YQ0KDQojIGdyYWZpY28gZGEgZGVjb21wb3NpY2FvIGFkaXRpdmENCnBsb3QoZGVjb21wb3NpY2FvLmFkKQ0KDQojIGdyYWZpY28gZGEgZGVjb21wb3NpY2FvIG11bHRpcGxpY2F0aXZhDQpwbG90KGRlY29tcG9zaWNhby5tdWx0KQ0KYGBgDQoNCiMjIFRlbmTDqm5jaWENCg0KUG9kZW1vcyB2ZXJpZmljYXIgcXVlIGEgc8OpcmllIGB0cmVuZGAgZm9pIG9idGlkYSBkYSBtZXNtYSBmb3JtYSBxdWUgdW1hDQoqcm9sbGluZyBtZWFuKiBkZSAxMiBtZXNlcyBjb21vIG8gY8OzZGlnbyBhYmFpeG8gYXByZXNlbnRhLiBPIGxlaXRvciBwb2RlDQp2ZXJpZmljYXIgcXVlIMOpIGEgbWVzbWEgaW5kZXBlbmRlbnRlIGRlIHNlciBhZGl0aXZhIG91IG11bHRpcGxpY2F0aXZhLg0KDQpgYGB7cn0NCiMgb2J0ZW5kbyBhIHRlbmRlbmNpYQ0KbGlicmFyeShmcHAyKQ0KdGVuZDwtbWEodmFyZWpvbXNfMjAyMiwgMTIpDQpwcmludChjYmluZCh0ZW5kLGRlY29tcG9zaWNhby5hZCR0cmVuZCxkZWNvbXBvc2ljYW8ubXVsdCR0cmVuZCkpDQoNCiMgcGxvdCBjb25qdW50byBjb20gZnVuw6fDo28gYXV0b3Bsb3QgZG8gZnBwMg0KYXV0b3Bsb3QodmFyZWpvbXNfMjAyMiwgc2VyaWVzPSJEYWRvcyIpICsNCiAgYXV0b2xheWVyKHRlbmQsIHNlcmllcz0idGVuZCIpICsNCiAgeGxhYigiQW5vIikgKyB5bGFiKCLDjW5kaWNlIikgKw0KICBnZ3RpdGxlKCLDjW5kaWNlIGRlIHZvbHVtZSBkZSB2ZW5kYXMgbm8gdmFyZWpvIFRvdGFsIA0KICAgICAgICAgIGRlIE1hdG8gR3Jvc3NvIGRvIFN1bCIpICsNCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9YygiRGFkb3MiPSJncmV5NTAiLCJ0ZW5kIj0icmVkIiksDQogICAgICAgICAgICAgICAgICAgICAgYnJlYWtzPWMoIkRhZG9zIiwidGVuZCIpKQ0KYGBgDQoNCiMjIERlY29tcG9zacOnw6NvIFgxMQ0KDQpVbSBtw6l0b2RvIG1haXMgY29tdW0gKG1haXMgYXR1YWwsIHBvaXMgbyBkZSBkZWNvbXBvc2nDp8OjbyBjbMOhc3NpY28gw6kgZG9zDQphbm9zIDE5MjApIMOpIHBvciBtZWlvIGRhIG1ldG9kb2xvZ2lhIGRvIENlbnN1cyBCdXJlYXUgZG9zIEVzdGFkb3MgVW5pZG9zDQpkYSBBbcOpcmljYSwgZSBjaGFtYWRvIGRlIFgxMSAoVVMgQlVSRUFVIE9GIFRIRSBDRU5TVVMsIDIwMTMpLiBFbSBvdXRyYQ0KcG9zdGFnZW0gZmFyZWkgdW0gZXhlbXBsbyBkZSBhbsOhbGlzZSBkbyBtw6l0b2RvIFgxMy1BUklNQSBTRUFUUywgYSB2ZXJzw6NvDQptYWlzIHJlY2VudGUgcXVlIHV0aWxpemEgb3V0cmFzIGFib3JkYWdlbnMgYWzDqW0gZG8gWDExLlwNCk8gcHJpbWVpcm8gcGFzc28gw6kgY2hhbWFyIG8gcGFjb3RlIGBzZWFzb25hbGAgKFNBWCBlIEVEREVMQlVFVFRFTCwNCjIwMTgpLiBDcmlvIG8gb2JqZXRvIGZpdCBxdWUgY29udMOpbSBhcyBzYcOtZGFzIGRhIGZ1bsOnw6NvIGBzZWFzKHgxMT0iIilgDQpjb20gYSBvcMOnw6NvIFgxMSBhcGxpY2FkYSBzb2JyZSBhIHPDqXJpZSB2YXJlam9tcy4gTmEgc2VxdcOqbmNpYSwgZmHDp28gbw0KcGxvdCBwZWxhIGZ1bsOnw6NvIGBhdXRvcGxvdGAgZG8gcGFjb3RlIGBmcHAyYCAoSFlORE1BTiwgMjAxOCkuDQoNCmBgYHtyfQ0KIyBkZWNvbXBvc2nDp8OjbyBwZWxvIFgxMSBkbyBDZW5zdXMgQnVyZWF1DQpsaWJyYXJ5KHNlYXNvbmFsKQ0KZml0PC0gc2Vhcyh2YXJlam9tc18yMDIyLHgxMT0iIikNCiN2YXJlam9tc18yMDIyICU+JSBzZWFzKHgxMT0iIikgLT4gZml0ICAgIyB1c28gYSBzZXJpZSAndmFyZWpvbXNfMjAyMicsIGFwbGljbyBvICdzZWFzJyB4MTEgZSBnZXJvICdmaXQnDQpsaWJyYXJ5KGZwcDIpDQphdXRvcGxvdChmaXQpICsNCiAgZ2d0aXRsZSgiRGVjb21wb3Npw6fDo28gWDExIGRlIE1hdG8gR3Jvc3NvIGRvIFN1bA0KICBkbyDDjW5kaWNlIGRlIHZvbHVtZSBkZSB2ZW5kYXMgbm8gdmFyZWpvIHRvdGFsIikNCm5hbWVzKGZpdCkgICAjIHBhcmEgZW50ZW5kZXIgbyBxdWUgZXN0YSBkZW50cm8gZGUgZml0DQpgYGANCg0KRGVudHJvIGRvIG9iamV0byBmaXQsIGV4aXN0ZSBvIGxvY2FsIGVtIHF1ZSBlc3TDo28gYXMgc8Opcmllcw0KKGBmaXQkc2VyaWVzYCkgZSBkYWRvcyAoYGZpdCRkYXRhYCwgcXVlIGdlcmFyw6NvIG9zIGdyw6FmaWNvcykuIFVtIHByaW50DQpkYSBwYXJ0ZSBhcm1hemVuYWRhIGVtIGBmaXQkc2VyaWVzYCBtb3N0cmFyw6EgYXMgdsOhcmlhcyBzw6lyaWVzIGVtIHN1YQ0Kbm9tZW5jbGF0dXJhIGNvbW8gY29uc3RhIG5vIGRvY3VtZW50byBvcmlnaW5hbCBkbyBVUyBDZW5zdXMgQnVyZWF1LiBQYXJhDQptZWxob3IgZW50ZW5kZXIgYXMgbGVnZW5kYXMgZG8gWDExLCByZWNvbWVuZG8gdXNhciBvIG1hbnVhbCBkZQ0KcmVmZXLDqm5jaWEgZG8gWDEzLUFSSU1BIFNFQVRTIChVUyBCVVJFQVUgT0YgVEhFIENFTlNVUywgMjAxMykuIERlc2NyZXZvDQphYmFpeG8gYXBlbmFzIG9zIGPDs2RpZ29zIHF1ZSBhcGFyZWNlbSBuYXMgc2HDrWRhcyBkbyBgc2Vhc2AuDQoNCioqTGVnZW5kYXMgZG8gWDExKioNCg0KICAgICMgZml0JGRhdGFbLCdmaW5hbCddIMOpIGEgZml0JGRhdGFbLCdzZWFzb25hbGFkaiddICDDiSBBIFPDiVJJRSBDT00gQUpVU1RFIFNBWk9OQUwNCiAgICAjIGZpbmFsID0gc8OpcmllIGNvbSBhanVzdGUgc2F6b25hbCA9IGRlc3Nhem9uYWxpemFkYQ0KICAgICMgZDEwID0gc2Vhc29uYWwgICAgICAgIMOJIE8gQ09NUE9ORU5URSBTQVpPTkFMIC0gZmF0b3Igc2F6b25hbA0KICAgICMgZDExID0gc2Vhc29uYWxhZGogICAgIMOJIEEgU8OJUklFIERFU1NBWk9OQUxJWkFEQQ0KICAgICMgZDEyID0gdHJlbmQgICAgICAgICAgIMOJIEEgVEVORMOKTkNJQSA9IFJPTExJTkcgTUVBTg0KICAgICMgZDEzID0gaXJyZWd1bGFyICAgICAgIMOJIEEgSVJSRUdVTEFSSURBREUNCiAgICAjIGQxNiA9IGFkanVzdGZhYyAgICAgICDDiSBPIEZBVE9SIFNBWk9OQUwgQUpVU1RBRE8gUEFSQSBTQVpPTkFMSURBREUgRSBUUkFESU5HIERBWVMNCiAgICAjIGUxOCA9IGZpbmFsIGFkanVzdG1lbnQgcmF0aW9zIChvcmlnaW5hbCBzZXJpZXMgLyBzZWFzb25hbGx5IGFkanVzdGVkIHNlcmllcykNCiAgICAjIGQxNiA9IGUxOCAocGFyZWNlIHF1ZSBzaW0pDQogICAgIyByc2QgPSByZXNpZHVvcyBlc3RpbWFkb3MNCg0KYGBge3J9DQpwcmludChmaXQkc2VyaWVzKQ0KYGBgDQoNClByaW1laXJvIGFwbGljbyBvIGBhdHRhY2hgIHBhcmEgcXVlIG8gUiBlbnRlbmRhIG9zIG5vbWVzIGRlbnRybyBkbw0Kb2JqZXRvIGNyaWFkbyBgZml0JHNlcmllc2AgKGQxMSwgZDE2LCBlMTggZXRjKS4gRGVwb2lzIGZhw6dvIHVtIHRlc3RlDQpwYXJhIHZlcmlmaWNhciBzZSBhIHPDqXJpZSBlMTggcG9kZSBzZXIgZGFkYSBwZWxhIGbDs3JtdWxhIChlMTggPSAnc8OpcmllDQpvcmlnaW5hbCcgLyAnc8OpcmllIGFqdXN0YWRhIHBhcmEgc2F6b25hbGlkYWRlJykuIEZhw6dvIG9zIHByaW50cyBwYXJhIHZlcg0KcXVlIG9zIHZhbG9yZXMgY2FsY3VsYWRvcyBjb25mZXJlbSBlIHZlciBxdWUgYSB0w6puZGVuY2lhIG9idGlkYSBwZWxhDQoqcm9sbGluZyBtZWFuKiBkaWZlcmUgZGEgdGVuZMOqbmNpYSBvYnRpZGEgcGVsbyBYMTEuDQoNCmBgYHtyfQ0KYXR0YWNoKGZpdCRzZXJpZXMpICAgICMgcGFyYSBxdWUgbyBSIGVudGVuZGEgb3Mgbm9tZXMgZGVudHJvIGRlIGZpdCRzZXJpZXMNCnRlc3RlID0gdmFyZWpvbXNfMjAyMiAvIGQxMSAgICMgY29uZmVyZW5jaWEgZGUgZTE4DQpwcmludChjYmluZCh2YXJlam9tc18yMDIyLGQxMSx0ZXN0ZSxlMTgsZml0JGRhdGEsZDE2KSkNCmBgYA0KDQpgYGB7cn0NCnByaW50KGNiaW5kKHRlbmQsZGVjb21wb3NpY2FvLmFkJHRyZW5kLGZpdCRkYXRhWywndHJlbmQnXSkpDQpgYGANCg0KQWdvcmEgZW50w6NvIGZhw6dvIG8gZ3LDoWZpY28gZGFzIHPDqXJpZSBkYSBkZWNvbXBvc2nDp8OjbyBYMTEgcGFyYQ0KdmlzdWFsaXphw6fDo28uDQoNCmBgYHtyfQ0KYXV0b3Bsb3QodmFyZWpvbXNfMjAyMiwgc2VyaWVzPSJEYXRhIikgKw0KICBhdXRvbGF5ZXIodHJlbmRjeWNsZShmaXQpLCBzZXJpZXM9IlRyZW5kIikgKw0KICBhdXRvbGF5ZXIoc2Vhc2FkaihmaXQpLCBzZXJpZXM9IlNlYXNvbmFsbHkgQWRqdXN0ZWQiKSArDQogIHhsYWIoIkFubyIpICsgeWxhYigiSW5kZXgiKSArDQogIGdndGl0bGUoIsONbmRpY2UgZGUgdm9sdW1lIGRlIHZlbmRhcyBubyB2YXJlam8gVG90YWwgZGUgTWF0byBHcm9zc28gZG8gU3VsIikgKw0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1jKCJncmF5IiwiYmx1ZSIsInJlZCIpLA0KICAgICAgICAgICAgIGJyZWFrcz1jKCJEYXRhIiwiU2Vhc29uYWxseSBBZGp1c3RlZCIsIlRyZW5kIikpDQpgYGANCg0KDQojIFJlZmVyw6puY2lhcyB7I1JlZmVyw6puY2lhcyAudW5udW1iZXJlZH0NCg0KRkVSUkVJUkEsIFBlZHJvIENvc3RhOyBTUEVSQU5aQSwgVGFsaXRoYTsgQ09TVEEsIEpvbmF0aGEgKDIwMTgpLiBCRVRTOg0KQnJhemlsaWFuIEVjb25vbWljIFRpbWUgU2VyaWVzLiBSIHBhY2thZ2UgdmVyc2lvbiAwLjQuOS4gRGlzcG9uw612ZWwgZW06DQo8aHR0cHM6Ly9DUkFOLlItcHJvamVjdC5vcmcvcGFja2FnZT1CRVRTPi4NCg0KSFlORE1BTiwgUm9iLiAoMjAxOCkuIGZwcDI6IERhdGEgZm9yICJGb3JlY2FzdGluZzogUHJpbmNpcGxlcyBhbmQNClByYWN0aWNlIiAoMm5kIEVkaXRpb24pLiBSIHBhY2thZ2UgdmVyc2lvbiAyLjMuIERpc3BvbsOtdmVsIGVtOg0KPGh0dHBzOi8vQ1JBTi5SLXByb2plY3Qub3JnL3BhY2thZ2U9ZnBwMj4uDQoNClNBWCBDLjsgRURERUxCVUVUVEVMLCBELiAoMjAxOCkuICJTZWFzb25hbCBBZGp1c3RtZW50IGJ5IFgtMTNBUklNQS1TRUFUUw0KaW4gUi4iICpKb3VybmFsIG9mIFN0YXRpc3RpY2FsIFNvZnR3YXJlKiwgKjg3KigxMSksIDEtMTcuIGRvaToNCjEwLjE4NjM3L2pzcy52MDg3LmkxMSAoVVJMOiA8aHR0cHM6Ly9kb2kub3JnLzEwLjE4NjM3L2pzcy52MDg3LmkxMT4pLg0KDQpVUyBCVVJFQVUgT0YgVEhFIENFTlNVUyAoMjAxMykuIFgtMTNBUklNQS1TRUFUUyBSZWZlcmVuY2UgTWFudWFsDQpBY2Nlc3NpYmxlIEhUTUwgT3V0cHV0IFZlcnNpb24uIFN0YWZmIFN0YXRpc3RpY2FsIFJlc2VhcmNoIERpdmlzaW9uLCBVUw0KQnVyZWF1IG9mIHRoZSBDZW5zdXMsIGRpc3BvbsOtdmVsIGVtOg0KPGh0dHA6Ly93d3cuY2Vuc3VzLmdvdi90cy94MTNhcy9kb2NYMTNBU0hUTUwucGRmPi4NCg==