library(tidyverse)
df<-readRDS("Energia_ambiental_diário.rds")
head(df)
NA
#amostragem
slice_sample(df,prop = 0.1)->df1

Estatisticas Descritivas

library(stargazer)
summary(df)
      Date                           cod_modalidadeoperacao  nom_subsistema  
 Min.   :2000-01-01   TIPO I                    :1066453    NORDESTE:280479  
 1st Qu.:2007-12-21   TIPO III                  : 153508    NORTE   : 64771  
 Median :2013-05-10   Pequenas Usinas (Tipo III): 125774    PARAGUAI:  8024  
 Mean   :2012-06-05   TIPO II-A                 :  66201    SUDESTE :901432  
 3rd Qu.:2017-02-13   Conjunto de Usinas        :  52636    SUL     :294171  
 Max.   :2021-12-31   (Other)                   :  84304                     
                      NA's                      :      1                     
             nom_estado           nom_tipousina          nom_tipocombustivel  preciptation   
 SAO PAULO        :253521   BOMBEAMENTO  :   737   Hidráulica      :948047   Min.   :  0.0   
 MINAS GERAIS     :219349   EOLIELÉTRICA : 69677   Gás             :158366   1st Qu.:  0.0   
 RIO GRANDE DO SUL:142434   FOTOVOLTAICA : 17813   Biomassa        : 99819   Median :  0.0   
 BAHIA            :109287   HIDROELÉTRICA:947310   Óleo Diesel     : 99602   Mean   :  3.5   
 GOIAS            :100989   NUCLEAR      :  8024   Óleo Combustível: 86652   3rd Qu.:  3.0   
 PARANA           : 91966   TÉRMICA      :505316   (Other)         :156184   Max.   :256.0   
 (Other)          :631331                          NA's            :   207   NA's   :454069  
  temperature        humidity        wind_speed         co_ppb           no2_ppb      
 Min.   : 1.2     Min.   : 21.0    Min.   : 0.3     Min.   :    0.0   Min.   : 0.0    
 1st Qu.:20.9     1st Qu.: 69.0    1st Qu.: 2.1     1st Qu.:   92.0   1st Qu.: 0.8    
 Median :23.7     Median : 79.0    Median : 2.7     Median :  118.5   Median : 1.2    
 Mean   :23.0     Mean   : 76.9    Mean   : 3.0     Mean   :  140.6   Mean   : 1.9    
 3rd Qu.:25.9     3rd Qu.: 87.5    3rd Qu.: 3.6     3rd Qu.:  155.2   3rd Qu.: 2.0    
 Max.   :34.5     Max.   :100.0    Max.   :13.3     Max.   :12303.9   Max.   :64.0    
 NA's   :454069   NA's   :454069   NA's   :454069   NA's   :454069    NA's   :545830  
     o3_ppb         pm25_ugm3         so2_ugm3       val_geracao    
 Min.   :  0.0    Min.   :   0.0   Min.   :  0.0    Min.   :     0  
 1st Qu.: 14.9    1st Qu.:   5.2   1st Qu.:  0.4    1st Qu.:   216  
 Median : 19.3    Median :   8.1   Median :  0.7    Median :  1440  
 Mean   : 20.0    Mean   :  12.9   Mean   :  1.8    Mean   :  6676  
 3rd Qu.: 24.5    3rd Qu.:  12.7   3rd Qu.:  1.6    3rd Qu.:  5144  
 Max.   :118.4    Max.   :1853.6   Max.   :110.9    Max.   :392779  
 NA's   :454069   NA's   :466094   NA's   :466142                   

visualização

modelo linear simples

for( i in 1:14){
  print(names(df)[i])
  formula <- as.formula(paste("val_geracao", "~", names(df)[i]))
  m<-lm(formula,df)
  print(summary(m))
}
[1] "Date"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
 -7626  -6240  -5248  -1512 386698 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) 9918.21230  102.59680   96.67   <2e-16 ***
Date          -0.20921    0.00656  -31.89   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17220 on 1548875 degrees of freedom
Multiple R-squared:  0.0006563, Adjusted R-squared:  0.0006556 
F-statistic:  1017 on 1 and 1548875 DF,  p-value: < 2.2e-16

[1] "cod_modalidadeoperacao"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
 -8986  -7679  -3042    -57 383793 

Coefficients:
                                                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)                                       6872.29      73.43   93.59   <2e-16 ***
cod_modalidadeoperacaoPequenas Usinas (Tipo III) -5207.95      87.45  -59.55   <2e-16 ***
cod_modalidadeoperacaoTIPO I                      2113.53      75.22   28.10   <2e-16 ***
cod_modalidadeoperacaoTIPO II-A                  -6657.63      98.38  -67.67   <2e-16 ***
cod_modalidadeoperacaoTIPO II-B                  -5946.71     107.66  -55.23   <2e-16 ***
cod_modalidadeoperacaoTIPO II-C                  -5882.05     112.95  -52.08   <2e-16 ***
cod_modalidadeoperacaoTIPO III                   -6275.22      85.09  -73.75   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 16850 on 1548869 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.04362,   Adjusted R-squared:  0.04361 
F-statistic: 1.177e+04 on 6 and 1548869 DF,  p-value: < 2.2e-16

[1] "nom_subsistema"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-83655  -5373  -4469   -891 376088 

Coefficients:
                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)             5005.28      29.55  169.36   <2e-16 ***
nom_subsistemaNORTE    11686.12      68.23  171.27   <2e-16 ***
nom_subsistemaPARAGUAI 96447.04     177.21  544.24   <2e-16 ***
nom_subsistemaSUDESTE   1032.67      33.84   30.52   <2e-16 ***
nom_subsistemaSUL        428.78      41.31   10.38   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15650 on 1548872 degrees of freedom
Multiple R-squared:  0.1744,    Adjusted R-squared:  0.1744 
F-statistic: 8.182e+04 on 4 and 1548872 DF,  p-value: < 2.2e-16

[1] "nom_estado"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-83655  -4657  -2334    393 355352 

Coefficients:
                               Estimate Std. Error t value      Pr(>|t|)    
(Intercept)                       57.15     222.23   0.257      0.797064    
nom_estadoALAGOAS              29060.26     262.88 110.547       < 2e-16 ***
nom_estadoAMAPA                 4036.96     285.97  14.117       < 2e-16 ***
nom_estadoAMAZONAS              3281.37     246.29  13.323       < 2e-16 ***
nom_estadoBAHIA                 4704.44     226.63  20.758       < 2e-16 ***
nom_estadoCEARA                 2764.36     231.86  11.922       < 2e-16 ***
nom_estadoDISTRITO FEDERAL        87.74     254.72   0.344      0.730495    
nom_estadoESPIRITO SANTO        1929.15     232.60   8.294       < 2e-16 ***
nom_estadoGOIAS                 3148.79     226.99  13.872       < 2e-16 ***
nom_estadoMARANHAO              7260.96     245.52  29.574       < 2e-16 ***
nom_estadoMATO GROSSO           2910.00     229.50  12.680       < 2e-16 ***
nom_estadoMATO GROSSO DO SUL    1191.23     230.54   5.167 0.00000023760 ***
nom_estadoMINAS GERAIS          5352.31     224.43  23.848       < 2e-16 ***
nom_estadoPARA                 37370.45     241.63 154.658       < 2e-16 ***
nom_estadoPARAIBA               1419.42     263.64   5.384 0.00000007292 ***
nom_estadoPARANA               18434.25     227.45  81.047       < 2e-16 ***
nom_estadoPERNAMBUCO            4182.19     231.72  18.049       < 2e-16 ***
nom_estadoPIAUI                 3292.46     245.81  13.395       < 2e-16 ***
nom_estadoRIO DE JANEIRO        8384.39     227.71  36.820       < 2e-16 ***
nom_estadoRIO GRANDE DO NORTE   4482.72     239.22  18.739       < 2e-16 ***
nom_estadoRIO GRANDE DO SUL     2277.16     225.62  10.093       < 2e-16 ***
nom_estadoRONDONIA             10986.94     242.32  45.342       < 2e-16 ***
nom_estadoRORAIMA               3207.56     881.22   3.640      0.000273 ***
nom_estadoSANTA CATARINA        7292.64     229.29  31.806       < 2e-16 ***
nom_estadoSAO PAULO             5708.48     224.14  25.468       < 2e-16 ***
nom_estadoSERGIPE               2220.50     366.03   6.066 0.00000000131 ***
nom_estadoTOCANTINS             7697.16     249.67  30.829       < 2e-16 ***
nom_estadoz - INTERNACIONAL   101395.17     276.23 367.072       < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 14700 on 1548849 degrees of freedom
Multiple R-squared:  0.2722,    Adjusted R-squared:  0.2722 
F-statistic: 2.146e+04 on 27 and 1548849 DF,  p-value: < 2.2e-16

[1] "nom_tipousina"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-37953  -7440  -2347   -685 383815 

Coefficients:
                             Estimate Std. Error t value Pr(>|t|)    
(Intercept)                    0.2537   618.3946   0.000  0.99967    
nom_tipousinaEOLIELÉTRICA   4850.5892   621.6565   7.803 6.06e-15 ***
nom_tipousinaFOTOVOLTAICA   1132.9926   631.0578   1.795  0.07259 .  
nom_tipousinaHIDROELÉTRICA  8963.9442   618.6351  14.490  < 2e-16 ***
nom_tipousinaNUCLEAR       37953.2025   646.1705  58.736  < 2e-16 ***
nom_tipousinaTÉRMICA        2346.4024   618.8454   3.792  0.00015 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 16790 on 1548871 degrees of freedom
Multiple R-squared:  0.05024,   Adjusted R-squared:  0.05024 
F-statistic: 1.639e+04 on 5 and 1548871 DF,  p-value: < 2.2e-16

[1] "nom_tipocombustivel"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-37953  -7438  -3985   -274 383822 

Coefficients:
                                            Estimate Std. Error t value        Pr(>|t|)    
(Intercept)                                   705.48      53.02  13.306         < 2e-16 ***
nom_tipocombustivelCarvão                    5587.60     105.26  53.083         < 2e-16 ***
nom_tipocombustivelEólica                    4159.56      82.88  50.189         < 2e-16 ***
nom_tipocombustivelFotovoltaica               481.09     134.58   3.575        0.000350 ***
nom_tipocombustivelGás                       3583.88      67.70  52.940         < 2e-16 ***
nom_tipocombustivelHidráulica                8251.75      55.74 148.039         < 2e-16 ***
nom_tipocombustivelNuclear                  37247.98     194.37 191.633         < 2e-16 ***
nom_tipocombustivelÓleo Combustível           131.23      77.78   1.687        0.091544 .  
nom_tipocombustivelÓleo Diesel               -258.93      75.02  -3.451        0.000558 ***
nom_tipocombustivelOutras Multi-Combustível  1445.16     221.13   6.535 0.0000000000635 ***
nom_tipocombustivelResíduos Industriais      3771.90     128.06  29.454         < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 16750 on 1548659 degrees of freedom
  (207 observations deleted due to missingness)
Multiple R-squared:  0.05455,   Adjusted R-squared:  0.05454 
F-statistic:  8936 on 10 and 1548659 DF,  p-value: < 2.2e-16

[1] "preciptation"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-19262  -6951  -5622  -1179 175877 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7264.336     17.877  406.34   <2e-16 ***
preciptation   46.867      1.996   23.48   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17180 on 1094806 degrees of freedom
  (454069 observations deleted due to missingness)
Multiple R-squared:  0.0005035, Adjusted R-squared:  0.0005026 
F-statistic: 551.5 on 1 and 1094806 DF,  p-value: < 2.2e-16

[1] "temperature"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
 -9100  -6905  -5477  -1164 175086 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 3920.673     95.779   40.94   <2e-16 ***
temperature  152.444      4.099   37.19   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17180 on 1094806 degrees of freedom
  (454069 observations deleted due to missingness)
Multiple R-squared:  0.001262,  Adjusted R-squared:  0.001261 
F-statistic:  1383 on 1 and 1094806 DF,  p-value: < 2.2e-16

[1] "humidity"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
 -7743  -6975  -5652  -1204 175782 

Coefficients:
            Estimate Std. Error t value   Pr(>|t|)    
(Intercept)  7860.70      92.96  84.561    < 2e-16 ***
humidity       -5.60       1.19  -4.705 0.00000253 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17190 on 1094806 degrees of freedom
  (454069 observations deleted due to missingness)
Multiple R-squared:  2.022e-05, Adjusted R-squared:  1.931e-05 
F-statistic: 22.14 on 1 and 1094806 DF,  p-value: 0.000002533

[1] "wind_speed"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
 -8395  -6930  -5618  -1161 175317 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8523.43      42.49   200.6   <2e-16 ***
wind_speed   -367.96      13.19   -27.9   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17180 on 1094806 degrees of freedom
  (454069 observations deleted due to missingness)
Multiple R-squared:  0.0007105, Adjusted R-squared:  0.0007096 
F-statistic: 778.4 on 1 and 1094806 DF,  p-value: < 2.2e-16

[1] "co_ppb"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-21116  -6973  -5654  -1200 175783 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 7259.4715    26.0830 278.322   <2e-16 ***
co_ppb         1.2137     0.1441   8.425   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17190 on 1094806 degrees of freedom
  (454069 observations deleted due to missingness)
Multiple R-squared:  6.483e-05, Adjusted R-squared:  6.392e-05 
F-statistic: 70.98 on 1 and 1094806 DF,  p-value: < 2.2e-16

[1] "no2_ppb"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
 -8069  -6797  -5301   -996 175162 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 8069.189     21.213   380.4   <2e-16 ***
no2_ppb     -512.292      6.999   -73.2   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 16820 on 1003045 degrees of freedom
  (545830 observations deleted due to missingness)
Multiple R-squared:  0.005313,  Adjusted R-squared:  0.005312 
F-statistic:  5358 on 1 and 1003045 DF,  p-value: < 2.2e-16

[1] "o3_ppb"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
 -9553  -6891  -5466  -1140 174711 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 9553.073     47.523   201.0   <2e-16 ***
o3_ppb      -105.907      2.225   -47.6   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17170 on 1094806 degrees of freedom
  (454069 observations deleted due to missingness)
Multiple R-squared:  0.002065,  Adjusted R-squared:  0.002064 
F-statistic:  2266 on 1 and 1094806 DF,  p-value: < 2.2e-16

[1] "pm25_ugm3"

Call:
lm(formula = formula, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-43278  -6940  -5589  -1179 175784 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 7109.5911    18.9254  375.66   <2e-16 ***
pm25_ugm3     23.0642     0.7203   32.02   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17170 on 1082781 degrees of freedom
  (466094 observations deleted due to missingness)
Multiple R-squared:  0.0009461, Adjusted R-squared:  0.0009452 
F-statistic:  1025 on 1 and 1082781 DF,  p-value: < 2.2e-16

modelo linear multivariado

modelo por tipo de usina

modelo de penalidade

library(glmnet)
# Ajustar um modelo de regressão ridge (alpha = 0) ou lasso (alpha = 1) com glmnet
#x<-subset_df %>% select(,Date ,  preciptation , temperature , humidity , wind_speed , co_ppb , no2_ppb , o3_ppb , pm25_ugm3,cod_modalidadeoperacao , nom_subsistema , nom_estado , nom_tipousina , nom_tipocombustivel) %>% as.matrix()

modelo_penalizado <- glmnet(x, subset_df$val_geracao, alpha = 0)
# Coeficientes do modelo não penalizado (Regressão Linear)
coeficientes_nao_penalizados <- coef(n)

# Coeficientes do modelo penalizado (Regressão Ridge ou Lasso)
coeficientes_penalizados <- coef(modelo_penalizado)
print(coeficientes_penalizados)
# Selecionar apenas as variáveis numéricas relevantes para o PCA
data_for_pca <- df´´[,7:16] %>% na.omit()
Error: unexpected input in "data_for_pca <- df´"
library(factoextra)
library(FactoMineR)

pca_result2$eig
        eigenvalue percentage of variance cumulative percentage of variance
comp 1  3.11417223             31.1417223                          31.14172
comp 2  1.73448227             17.3448227                          48.48654
comp 3  1.18468509             11.8468509                          60.33340
comp 4  1.01108316             10.1108316                          70.44423
comp 5  0.94508154              9.4508154                          79.89504
comp 6  0.72615665              7.2615665                          87.15661
comp 7  0.64244777              6.4244777                          93.58109
comp 8  0.47017946              4.7017946                          98.28288
comp 9  0.09698142              0.9698142                          99.25270
comp 10 0.07473041              0.7473041                         100.00000
pca_result2$call$centre
 [1]  3.245838e-14 -5.644361e-16  1.112571e-14  1.203773e-15 -7.553955e-16 -1.800661e-14  2.204141e-15  1.065543e-15
 [9] -1.046605e-14 -3.113405e-14
options(scipen = 9)
pca_result2$var$contrib
                   Dim.1       Dim.2     Dim.3      Dim.4      Dim.5
preciptation  0.33570051 14.77439845  1.977472 32.4149955 19.0418272
temperature   0.00715783  6.70824396 34.732898  1.0588626 26.3239537
humidity      0.85974240 32.04779814  5.862930  1.7087800  0.2447823
wind_speed    0.93741864 16.96662224 18.841506 18.1503456  2.4859583
co_ppb       22.95036247  0.07958316  4.694254  1.8644901  1.6063753
no2_ppb      26.38160434  0.72372272  1.895669  0.9155119  0.7291454
o3_ppb        2.21921996 27.84300927 10.515181  4.1749070  0.2300643
pm25_ugm3    25.54276466  0.29480425  1.381312  2.4549985  1.4972474
so2_ugm3     20.69374250  0.48744757  6.028877  0.2797480  1.1663384
val_geracao   0.07228668  0.07437025 14.069902 36.9773609 46.6743078
LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gR2VyYcOnw6NvIEFuYWxpc2UgRXhwbG9yYXTDs3JpYSINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KZWRpdG9yX29wdGlvbnM6DQogIG1hcmtkb3duOg0KICAgIHdyYXA6IDgwDQotLS0NCg0KIyMgDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpkZjwtcmVhZFJEUygiRW5lcmdpYV9hbWJpZW50YWxfZGnDoXJpby5yZHMiKQ0KaGVhZChkZikNCg0KYGBgDQoNCmBgYHtyfQ0KI2Ftb3N0cmFnZW0NCnNsaWNlX3NhbXBsZShkZiwgcHJvcCA9IDAuMjUpLT5hDQoNCmBgYA0KDQojIyBFc3RhdGlzdGljYXMgRGVzY3JpdGl2YXMNCg0KYGBge3J9DQpsaWJyYXJ5KHN0YXJnYXplcikNCnN1bW1hcnkoZGYpDQpgYGANCg0KIyMgdmlzdWFsaXphw6fDo28NCg0KYGBge3IgZWNobz1GQUxTRX0NCiN2aXN1YWxpemHDp8Ojbw0KbGlicmFyeSh0aWR5dmVyc2UpDQpkZiAlPiUgZ2dwbG90KGFlcyh0ZW1wZXJhdHVyZSx2YWxfZ2VyYWNhbykpICtnZW9tX3Ntb290aCgpK2ZhY2V0X3dyYXAofm5vbV90aXBvY29tYnVzdGl2ZWwsc2NhbGU9ImZyZWUiKQ0KZGYgJT4lIGdncGxvdChhZXMoRGF0ZSx2YWxfZ2VyYWNhbykpICtnZW9tX3Ntb290aCgpK2ZhY2V0X3dyYXAofm5vbV90aXBvY29tYnVzdGl2ZWwsc2NhbGU9ImZyZWUiKQ0KZGYgJT4lIGdncGxvdChhZXMocHJlY2lwdGF0aW9uLHZhbF9nZXJhY2FvKSkgK2dlb21fc21vb3RoKCkrZmFjZXRfd3JhcCh+bm9tX3RpcG9jb21idXN0aXZlbCxzY2FsZT0iZnJlZSIpDQpkZiAlPiUgZ2dwbG90KGFlcyhwbTI1X3VnbTMsdmFsX2dlcmFjYW8pKSArZ2VvbV9zbW9vdGgoKStmYWNldF93cmFwKH5ub21fdGlwb2NvbWJ1c3RpdmVsLHNjYWxlPSJmcmVlIikNCmRmICU+JSBnZ3Bsb3QoYWVzKHdpbmRfc3BlZWQsdmFsX2dlcmFjYW8pKSArZ2VvbV9zbW9vdGgoKStmYWNldF93cmFwKH5ub21fdGlwb2NvbWJ1c3RpdmVsLHNjYWxlPSJmcmVlIikNCg0KYGBgDQoNCiMgbW9kZWxvIGxpbmVhciBzaW1wbGVzDQoNCmBgYHtyfQ0KZm9yKCBpIGluIDE6MTQpew0KICBwcmludChuYW1lcyhkZilbaV0pDQogIGZvcm11bGEgPC0gYXMuZm9ybXVsYShwYXN0ZSgidmFsX2dlcmFjYW8iLCAifiIsIG5hbWVzKGRmKVtpXSkpDQogIG08LWxtKGZvcm11bGEsZGYpDQogIHByaW50KHN1bW1hcnkobSkpDQp9DQoNCmBgYA0KDQojIG1vZGVsbyBsaW5lYXIgbXVsdGl2YXJpYWRvDQoNCmBgYHtyfQ0KDQojZm9ybXVsYTwtInZhbF9nZXJhY2FvfiINCiNmb3IoIGkgaW4gMToxNCl7DQojICBwcmludChuYW1lcyhkZilbaV0pDQojICBmb3JtdWxhIDwtIHBhc3RlKGZvcm11bGEsIisiLG5hbWVzKGRmKVtpXSkNCiMgDQojfQ0KbTwtbG0odmFsX2dlcmFjYW9+IERhdGUgKyAgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zK2NvZF9tb2RhbGlkYWRlb3BlcmFjYW8gKyBub21fc3Vic2lzdGVtYSArIG5vbV9lc3RhZG8gKyBub21fdGlwb3VzaW5hICsgbm9tX3RpcG9jb21idXN0aXZlbCAsZGYpDQpzdW1tYXJ5KG0pDQpgYGANCg0KIyMgbW9kZWxvIHBvciB0aXBvIGRlIHVzaW5hDQoNCmBgYHtyfQ0KYTwtdW5pcXVlKGRmJG5vbV90aXBvdXNpbmEpDQoNCmZvciAoaSBpbiBhKSB7DQogIHByaW50KGkpDQogIHN1YnNldF9kZiA8LSBzdWJzZXQoZGYsIG5vbV90aXBvdXNpbmEgPT0gaSkNCg0KIG08LWxtKHZhbF9nZXJhY2FvfiBEYXRlICsgIHByZWNpcHRhdGlvbiArIHRlbXBlcmF0dXJlICsgaHVtaWRpdHkgKyB3aW5kX3NwZWVkICsgY29fcHBiICsgbm8yX3BwYiArIG8zX3BwYiArIHBtMjVfdWdtMyArIG5vbV9zdWJzaXN0ZW1hICsgbm9tX2VzdGFkbyAsc3Vic2V0X2RmKQ0KIHByaW50KHN1bW1hcnkobSkpDQp9DQojbTwtbG0odmFsX2dlcmFjYW9+IERhdGUgKyAgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zK2NvZF9tb2RhbGlkYWRlb3BlcmFjYW8gKyBub21fc3Vic2lzdGVtYSArIG5vbV9lc3RhZG8gKyBub21fdGlwb3VzaW5hICsgbm9tX3RpcG9jb21idXN0aXZlbCAsZGYpDQojc3VtbWFyeShtKQ0KYGBgDQoNCmBgYHtyfQ0KI2ENCiAgc3Vic2V0X2RmIDwtIHN1YnNldChkZiwgbm9tX3RpcG91c2luYSA9PSAiTlVDTEVBUiIpDQojc3VtbWFyeShzdWJzZXRfZGYpDQogbTwtbG0odmFsX2dlcmFjYW9+IERhdGUgKyAgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zICxzdWJzZXRfZGYpDQogcHJpbnQoc3VtbWFyeShtKSkNCmBgYA0KDQpgYGB7cn0NCmENCiAgc3Vic2V0X2RmIDwtIHN1YnNldChkZiwgbm9tX3RpcG91c2luYSA9PSAiQk9NQkVBTUVOVE8iKQ0Kc3VtbWFyeShzdWJzZXRfZGYpDQogbTwtbG0odmFsX2dlcmFjYW8gfiBEYXRlICsgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyANCiAgICBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zICxzdWJzZXRfZGYpDQogcHJpbnQoc3VtbWFyeShtKSkNCmBgYA0KDQpgYGB7cn0NCiAgc3Vic2V0X2RmIDwtIHN1YnNldChkZiwgbm9tX3RpcG91c2luYSA9PSAiRk9UT1ZPTFRBSUNBIikgJT4lIGRyb3BfbmEoKQ0KI3N1bW1hcnkoc3Vic2V0X2RmKQ0KIG08LWxtKHZhbF9nZXJhY2FvIH4gRGF0ZSArIHByZWNpcHRhdGlvbiArIHRlbXBlcmF0dXJlICsgDQogICAgaHVtaWRpdHkgKyB3aW5kX3NwZWVkICsgY29fcHBiICsgbm8yX3BwYiArIG8zX3BwYiArIHBtMjVfdWdtMyAsc3Vic2V0X2RmKQ0KIHByaW50KHN1bW1hcnkobSkpDQpgYGANCg0KYGBge3J9DQoNCg0KICBzdWJzZXRfZGYgPC0gc3Vic2V0KGRmLCBub21fdGlwb3VzaW5hID09ICJFT0xJRUzDiVRSSUNBIikNCiNzdW1tYXJ5KHN1YnNldF9kZikNCiBtPC1sbSh2YWxfZ2VyYWNhbyB+IERhdGUgKyBwcmVjaXB0YXRpb24gKyB0ZW1wZXJhdHVyZSArIA0KICAgIGh1bWlkaXR5ICsgd2luZF9zcGVlZCArIGNvX3BwYiArIG5vMl9wcGIgKyBvM19wcGIgKyBwbTI1X3VnbTMgKyANCiAgICBub21fc3Vic2lzdGVtYSArIG5vbV9lc3RhZG8gLHN1YnNldF9kZikNCiBwcmludChzdW1tYXJ5KG0pKQ0KYGBgDQoNCiMgbW9kZWxvIGRlIHBlbmFsaWRhZGUNCg0KYGBge3J9DQojIEFqdXN0YXIgdW0gbW9kZWxvIGRlIHJlZ3Jlc3PDo28gbGluZWFyIHNpbXBsZXMNCmRmICU+JSAgZHJvcF9uYSgpIC0+c3Vic2V0X2RmDQptPC1sbSh2YWxfZ2VyYWNhb34gRGF0ZSArICBwcmVjaXB0YXRpb24gKyB0ZW1wZXJhdHVyZSArIGh1bWlkaXR5ICsgd2luZF9zcGVlZCArIGNvX3BwYiArIG5vMl9wcGIgKyBvM19wcGIgKyBwbTI1X3VnbTMrY29kX21vZGFsaWRhZGVvcGVyYWNhbyArIG5vbV9zdWJzaXN0ZW1hICsgbm9tX2VzdGFkbyArIG5vbV90aXBvdXNpbmEgKyBub21fdGlwb2NvbWJ1c3RpdmVsICxzdWJzZXRfZGYpDQpzdW1tYXJ5KG0pDQojKG1vZGVsb19uYW9fcGVuYWxpemFkbykNCg0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShnbG1uZXQpDQoNCmBgYA0KDQpgYGB7cn0NCiMgQWp1c3RhciB1bSBtb2RlbG8gZGUgcmVncmVzc8OjbyByaWRnZSAoYWxwaGEgPSAwKSBvdSBsYXNzbyAoYWxwaGEgPSAxKSBjb20gZ2xtbmV0DQojeDwtc3Vic2V0X2RmICU+JSBzZWxlY3QoLERhdGUgLCAgcHJlY2lwdGF0aW9uICwgdGVtcGVyYXR1cmUgLCBodW1pZGl0eSAsIHdpbmRfc3BlZWQgLCBjb19wcGIgLCBubzJfcHBiICwgbzNfcHBiICwgcG0yNV91Z20zLGNvZF9tb2RhbGlkYWRlb3BlcmFjYW8gLCBub21fc3Vic2lzdGVtYSAsIG5vbV9lc3RhZG8gLCBub21fdGlwb3VzaW5hICwgbm9tX3RpcG9jb21idXN0aXZlbCkgJT4lIGFzLm1hdHJpeCgpDQoNCm1vZGVsb19wZW5hbGl6YWRvIDwtIGdsbW5ldCh4LCBzdWJzZXRfZGYkdmFsX2dlcmFjYW8sIGFscGhhID0gMCkNCiMgQ29lZmljaWVudGVzIGRvIG1vZGVsbyBuw6NvIHBlbmFsaXphZG8gKFJlZ3Jlc3PDo28gTGluZWFyKQ0KY29lZmljaWVudGVzX25hb19wZW5hbGl6YWRvcyA8LSBjb2VmKG4pDQoNCiMgQ29lZmljaWVudGVzIGRvIG1vZGVsbyBwZW5hbGl6YWRvIChSZWdyZXNzw6NvIFJpZGdlIG91IExhc3NvKQ0KY29lZmljaWVudGVzX3BlbmFsaXphZG9zIDwtIGNvZWYobW9kZWxvX3BlbmFsaXphZG8pDQpwcmludChjb2VmaWNpZW50ZXNfcGVuYWxpemFkb3MpDQpgYGANCg0KYGBge3J9DQojUENBDQojIFN1cG9uZG8gcXVlIHZvY8OqIHRlbmhhIHVtIGNvbmp1bnRvIGRlIGRhZG9zIEFtYl9PcmMNCg0KIyBTZWxlY2lvbmFyIGFwZW5hcyBhcyB2YXJpw6F2ZWlzIG51bcOpcmljYXMgcmVsZXZhbnRlcyBwYXJhIG8gUENBDQpkYXRhX2Zvcl9wY2EgPC0gZGZbLDc6MTZdICU+JSBuYS5vbWl0KCkNCg0KDQojIE5vcm1hbGl6YXIgb3MgZGFkb3MgKHNlIG5lY2Vzc8OhcmlvKQ0Kbm9ybWFsaXplZF9kYXRhIDwtIHNjYWxlKGRhdGFfZm9yX3BjYSkNCiMgUmVtb3ZlciBsaW5oYXMgY29tIHZhbG9yZXMgaW5maW5pdG9zDQpub3JtYWxpemVkX2RhdGEgPC0gbm9ybWFsaXplZF9kYXRhW2lzLmZpbml0ZShyb3dTdW1zKG5vcm1hbGl6ZWRfZGF0YSkpLCBdDQoNCiMgUmVhbGl6YXIgbyBQQ0ENCiNwY2FfcmVzdWx0IDwtIHByY29tcChub3JtYWxpemVkX2RhdGEsIHNjYWxlLiA9IFRSVUUsY2VudGVyID0gVCkNCg0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShmYWN0b2V4dHJhKQ0KbGlicmFyeShGYWN0b01pbmVSKQ0KDQpgYGANCg0KYGBge3J9DQpwY2FfcmVzdWx0MjwtUENBKG5vcm1hbGl6ZWRfZGF0YSkNCg0KYGBgDQoNCmBgYHtyfQ0KcGNhX3Jlc3VsdDIkZWlnDQpwY2FfcmVzdWx0MiRjYWxsJGNlbnRyZQ0Kb3B0aW9ucyhzY2lwZW4gPSA5KQ0KcGNhX3Jlc3VsdDIkdmFyJGNvbnRyaWINCmBgYA0K