Instalar Librerias

library(foreign)       
library(ggplot2)        
library(dplyr)          
library(mapview)        
library(naniar)         
library(tmap)           
library(RColorBrewer)   
library(dlookr)         
library(regclass)      
library(mctest)         
library(lmtest)        
library(spdep)          
library(sf)            
library(spData)         
library(spatialreg)     
library(caret)          
library(e1071)         
library(SparseM)       
library(Metrics)        
library(randomForest)   
library(jtools)        
library(xgboost)        
library(DiagrammeR)    
library(effects)        
library(shinyjs)
library(sp)
library(geoR)
library(gstat)
library(caret)
library(readtext)
library(kableExtra)
library(nortest) 
library(rpart.plot)
library(neuralnet)

1.Preguntas

#1)¿Qué es Supervised Machine Learning y cuáles son algunas de sus aplicaciones en Inteligencia de Negocios? Un modelo de aprendizaje supervisado es aquel a el que se le entregan datos etiquetados, para realizar predicciones o clasificaciones de estos datos de manera precisa, algunas de sus principales aplicaciones son las investigaciones de mercado, para saber cual es el mejor publico, segmento, cual es la mejor ubicacion para tu producto e incluso cual es el mejor momento para vender tu producto, tambien ppueden ayudar a fijar precios dinamicos de vuelos o viajes, a travez de datos que estan en constante cambio como la epoca del año, clima, demanda, entre otros

#3) ¿Qué es la R2 Ajustada? ¿Qué es la métrica RMSE? ¿Cuál es la diferencia entre la R2 Ajustada y la métrica RMSE? La R2 y el RMSE son medidas o metodos de evaluacion, pero se centran en cosas distintas, la R2 evalua la calidad del modelo atraves de la varianza de las variables, nos ayuda a ver que variables no son significantes para el modelo, mientras que el RMSE evalua la precision del modelo ya que se centra en la diferencia entre los valores observados y los valores predichos por el modelo

#Obtener Base de datos

df <- read.csv("C:\\Users\\Luis Rodriguez\\Downloads\\health_insurance.csv")
#df

df[ , c("sex", "smoker", "region")] <- 
  lapply(df[ , c("sex", "smoker", "region")], as.factor) #Es necesario cambiar variables de tipo factor a una escala adecuada para poder manejar los datos de dichas variable.

2. Analisis Exploratorio de los datos (EDA):

Identificacion de NA’s:

# Identificación de NA's por columna
nas <- colSums(is.na(df))
nas
##      age      sex      bmi children   smoker   region expenses 
##        0        0        0        0        0        0        0

Remplazo de NA’s: En este caso no tenemos NA’s por lo cual no es necesario realizar un reemplazo

Medidas Descriptivas:

# Medidas descriptivas para todas las columnas numéricas
summary(df)
##       age            sex           bmi           children     smoker    
##  Min.   :18.00   female:662   Min.   :16.00   Min.   :0.000   no :1064  
##  1st Qu.:27.00   male  :676   1st Qu.:26.30   1st Qu.:0.000   yes: 274  
##  Median :39.00                Median :30.40   Median :1.000             
##  Mean   :39.21                Mean   :30.67   Mean   :1.095             
##  3rd Qu.:51.00                3rd Qu.:34.70   3rd Qu.:2.000             
##  Max.   :64.00                Max.   :53.10   Max.   :5.000             
##        region       expenses    
##  northeast:324   Min.   : 1122  
##  northwest:325   1st Qu.: 4740  
##  southeast:364   Median : 9382  
##  southwest:325   Mean   :13270  
##                  3rd Qu.:16640  
##                  Max.   :63770

Medidas de Dispersion:

varianza <- apply(df,2,var)
varianza
##          age          sex          bmi     children       smoker       region 
## 1.974014e+02           NA 3.719027e+01 1.453213e+00           NA           NA 
##     expenses 
## 1.466524e+08
desviacion <- apply(df,2,sd)
desviacion
##          age          sex          bmi     children       smoker       region 
##    14.049960           NA     6.098382     1.205493           NA           NA 
##     expenses 
## 12110.011240

Identifiacion de patrones y/o tendencias

Ejemplos de gráficos

boxplot(expenses ~ sex, data = df, col = c("red","green","blue","purple", main = "Expenses por sexo"))

# Diagrama de caja para la variable 'bmi' por género
boxplot(bmi ~ region, data = df, col = c("blue","purple", "cyan", "lightpink"), main = "BMI por Region", xlab = "Region", ylab = "BMI")

boxplot(expenses ~ region, data = df, col = c("blue","purple", "cyan", "lightpink"), main = "Expenses por Region", xlab = "Region", ylab = "Expenses")

# Gráfico de dispersión para la relación entre 'age' y 'expenses'
plot(df$children, df$expenses, main = "Children vs. Gastos Médicos", xlab = "Children", ylab = "Gastos Médicos", col = "blue")

# Gráfico de dispersión para la relación entre 'smoke' y 'expenses'
plot(df$age, df$expenses, main = "Edad vs. Gastos Médicos", xlab = "Edad", ylab = "Gastos Médicos", col = "darkgreen")

# Gráfico de dispersión para la relación entre 'bmi' y 'expenses' tomando en cuenta 'Expenses'
ggplot(df, aes(x=bmi, y=expenses, shape=smoker, color=smoker)) +
  geom_point() +
  theme_minimal() +
  scale_color_brewer(palette = "Greens")

3.Apartir de los resultados de EDA describir la especificación del modelo de regresión lineal a estimar. Brevemente, describir cómo es el posible impacto de cada una de las variables explicativas sobre la principal variable de estudio.

Basándonos en los resultados del Análisis Exploratorio de Datos (EDA), identificamos que las variables más relevantes para predecir los gastos médicos (expenses) son el índice de masa corporal (bmi), la edad (age) y si la persona es fumadora (smoker).

Al examinar los gráficos de dispersión, notamos que existe una tendencia clara: a medida que la edad aumenta, también lo hacen los gastos médicos. Además, observamos que las personas que fuman y tienen un índice de masa corporal elevado tienden a registrar gastos médicos más altos.

4. Estimación de cada uno de los siguientes modelos de Supervised Machine Learning (SML):

a.OLS Regresión

lets split data into training and test sets the training set is used to build the model and the test set to evaluate its predictive accuracy.

set.seed(123)
partition <- createDataPartition(y = df$expenses, p=0.8, list=F)
train = df[partition, ]
test  = df[-partition, ]
ols_model <- lm(expenses ~ age + bmi + smoker, data = df)
summary(ols_model)
## 
## Call:
## lm(formula = expenses ~ age + bmi + smoker, data = df)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -12413  -2970   -977   1476  28961 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -11679.05     937.53  -12.46   <2e-16 ***
## age            259.53      11.93   21.75   <2e-16 ***
## bmi            322.69      27.49   11.74   <2e-16 ***
## smokeryes    23822.61     412.86   57.70   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6092 on 1334 degrees of freedom
## Multiple R-squared:  0.7475, Adjusted R-squared:  0.7469 
## F-statistic:  1316 on 3 and 1334 DF,  p-value: < 2.2e-16
log_ols_model <- lm(log(expenses) ~ log(age) + log(bmi) + smoker, data = df)
summary(log_ols_model)
## 
## Call:
## lm(formula = log(expenses) ~ log(age) + log(bmi) + smoker, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.02436 -0.23021 -0.05241  0.09755  2.15745 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.98367    0.23094  12.920  < 2e-16 ***
## log(age)     1.27543    0.03232  39.468  < 2e-16 ***
## log(bmi)     0.35582    0.06233   5.708  1.4e-08 ***
## smokeryes    1.54369    0.03108  49.666  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4587 on 1334 degrees of freedom
## Multiple R-squared:  0.7517, Adjusted R-squared:  0.7512 
## F-statistic:  1346 on 3 and 1334 DF,  p-value: < 2.2e-16
AIC(ols_model)      # AIC = 27123.76
## [1] 27123.76
AIC(log_ols_model)  # AIC = 1717.374
## [1] 1717.374
RMSE_ols_model     <- sqrt(mean(ols_model$residuals^2)) #RMSE = 0.7475
RMSE_log_ols_model <- sqrt(mean(log_ols_model$residuals^2)) #RMSE = 7517

#Modelo OLS ABSOLUTO
residuos_ols <- resid(ols_model)
residuos_ols
##             1             2             3             4             5 
##  -9192.855413  -2173.965911  -1787.232004  17773.835103  -2084.928837 
##             6             7             8             9            10 
##   -903.023338  -2796.771202    419.286260  -1133.465742  16704.772732 
##            11            12            13            14            15 
##   -542.471511  -8912.654844  -3563.955387  -4607.195589   6875.502896 
##            16            17            18            19            20 
##    646.952319   -958.221027    424.903768  -5256.871304   5516.915847 
##            21            22            23            24            25 
##  -2280.969851  -2412.402994  -2859.313340   6440.345013   -755.131169 
##            26            27            28            29            30 
##   1429.181939   2326.140821   -910.912658   2870.148918   6808.221494 
##            31            32            33            34            35 
##   6244.481808    718.859812   2206.746600    -33.594614  20038.111122 
##            36            37            38            39            40 
##   1790.446323    551.378591    521.509286   6704.293227   7582.437560 
##            41            42            43            44            45 
##    -87.275159  -3227.219922    276.004001  -1548.807172  -4075.386103 
##            46            47            48            49            50 
##   5998.625909  -2087.343917  -3260.616578    831.031590   5863.697448 
##            51            52            53            54            55 
##  -2269.230485  -1033.746396 -10068.229342   5155.250592     96.166059 
##            56            57            58            59            60 
##   8360.438553    -28.079999   7258.700078 -10043.647669  -3191.942694 
##            61            62            63            64            65 
##    283.606147  -1179.317234  17265.081610    188.057147  -9850.765473 
##            66            67            68            69            70 
##   -834.650829  -2534.626207   -799.674509  -4463.599663  -9491.935150 
##            71            72            73            74            75 
## -10575.915370   1236.280658    597.902909  -1753.358285   -855.296777 
##            76            77            78            79            80 
##  -2729.178221  -1451.664067  -3694.220113  -4118.776184  -3039.600012 
##            81            82            83            84            85 
##   -605.663054  -4423.726284   7178.678948  -3039.760201   6860.581096 
##            86            87            88            89            90 
## -10113.624280   6574.031769   -558.823575  -1171.350053   -225.352365 
##            91            92            93            94            95 
##  -4490.485831    863.184627  -6887.266076  -2905.257043   8437.152161 
##            96            97            98            99           100 
##  -3954.192581   -169.306875  -4728.065521 -10718.581294 -12413.054667 
##           101           102           103           104           105 
##  -2972.722011   -690.482129  18639.292379  -6681.351067  -1015.236683 
##           106           107           108           109           110 
##  -8809.197479    -84.995114  -1162.674154  -1983.378636   7234.927651 
##           111           112           113           114           115 
##  -2352.912878   -297.839226  -3215.807172  -2886.498399   -719.009029 
##           116           117           118           119           120 
##  17138.096729  -7836.681733  -9565.324649  -1213.943109   1211.779408 
##           121           122           123           124           125 
##  -3971.913645   1033.018386   -612.182896   5860.971491  -1343.229841 
##           126           127           128           129           130 
##   -976.922152  -9125.771984  -4250.784463   6541.670020  -3298.186672 
##           131           132           133           134           135 
##    630.721655   2364.687241  -2497.250242    119.580889   -347.914610 
##           136           137           138           139           140 
##   -942.626457  -2994.416264   -116.811310  14693.142553  -3480.838751 
##           141           142           143           144           145 
##  23002.539609  -2065.730442 -10159.271551  12726.536790  -8444.800717 
##           146           147           148           149           150 
##  -3229.575220   6796.387931  -3844.988969  -3185.167387   -573.995114 
##           151           152           153           154           155 
##    -56.248746  -2572.828760  -2263.518561 -10630.171224    146.288634 
##           156           157           158           159           160 
##  -5538.013076 -11251.130195  -9428.795629   5565.167561   9480.959109 
##           161           162           163           164           165 
## -10278.823799   7427.014644  -4663.761456  -1090.081124  -2447.187456 
##           166           167           168           169           170 
##    788.191308   -620.564333  -1210.561985   -794.385975   3400.690078 
##           171           172           173           174           175 
##  -4657.831486  -2698.936541   3539.191538  -3388.217043  -2439.927738 
##           176           177           178           179           180 
##   8164.849934   -698.165807  -1322.220587   -761.969769  -1136.868298 
##           181           182           183           184           185 
##   -866.957424  -3719.807345   3520.914124   -839.975347  -1915.598495 
##           186           187           188           189           190 
##   8745.824869   -735.302725   -752.455849  -2576.506868  -1282.882641 
##           191           192           193           194           195 
##  -1791.900484  -1234.783672   -964.795796    605.951283  -2955.660769 
##           196           197           198           199           200 
##  -1486.876260  -3377.295879   -712.079416   2246.403054  -2711.313264 
##           201           202           203           204           205 
##  -1479.793404  -2298.047334   1374.687305   6333.791474   -308.376333 
##           206           207           208           209           210 
##   -575.917142   -409.149202  -9181.673906  -1052.164618  -5387.046812 
##           211           212           213           214           215 
##  -2180.358615   -510.715086   -208.748876   -758.153539  -1451.069704 
##           216           217           218           219           220 
##  -3561.884874   -304.149946   -298.773926  -1324.302725  23045.585702 
##           221           222           223           224           225 
##  -3007.303547  -2256.942525  -1311.382554   6475.273723 -11466.610939 
##           226           227           228           229           230 
##  -1547.333230  -5192.918296   7332.706561  -1800.672011    477.628169 
##           231           232           233           234           235 
##  -3459.125511   1397.072796   2731.804040   -173.579775    361.512988 
##           236           237           238           239           240 
## -10244.355661      7.363240  -4294.614496  -9112.325128  -4882.275075 
##           241           242           243           244           245 
##   8556.038311   1337.049961  23916.735920  -2896.407377  -7909.515769 
##           246           247           248           249           250 
##  12460.006269  -3538.771854  -4147.435456   1835.760608  -1164.899209 
##           251           252           253           254           255 
##  -9568.253334   8420.512798   7066.366251   -845.152220   5715.367377 
##           256           257           258           259           260 
##   2255.703922   6401.345262  -5754.419535   2089.297046   6381.748869 
##           261           262           263           264           265 
##    331.473437  -8897.077764  -8610.832747   7205.142577   6092.258612 
##           266           267           268           269           270 
##   8386.929917 -11734.646229    502.032219  -2304.165704    -81.025108 
##           271           272           273           274           275 
##   -760.233620   6700.587946  -3667.954874   -553.953462  -1192.389513 
##           276           277           278           279           280 
##    613.247596   2904.178037    278.390976   -966.192923   1327.863050 
##           281           282           283           284           285 
##  -9260.935096   9289.571101   -776.094131  -1171.366086  -2258.717599 
##           286           287           288           289           290 
##  -1100.949480  -6347.995219   1130.147389   8565.743916  15657.101263 
##           291           292           293           294           295 
##  -3193.748576  14878.735933   8797.897883  -1167.440457    448.723631 
##           296           297           298           299           300 
##   1290.121530  -9715.387127 -10559.288702   7456.695210   -854.815616 
##           301           302           303           304           305 
##    176.318327  -8318.250240  -2690.215301  -1887.232004  -2730.393940 
##           306           307           308           309           310 
##  12849.317643  15715.780859  -2701.535280  -2691.203431  -1893.729155 
##           311           312           313           314           315 
##  -1436.721175    514.823176   7204.153838  -4498.278548   5555.411194 
##           316           317           318           319           320 
##  -2839.519602  -2853.003182  -2484.939734  -1225.495063  -3994.786847 
##           321           322           323           324           325 
##   -414.415538  20051.184704   4585.065586  -4746.109086  -1758.524636 
##           326           327           328           329           330 
##  -3105.837661    747.106931   7159.722276   8267.393586  -4514.870463 
##           331           332           333           334           335 
##   8796.524640 -10087.396179   -791.393912   -489.929863   8143.627280 
##           336           337           338           339           340 
##  -2241.114401    -43.518125    619.392311   6375.961662   -965.380053 
##           341           342           343           344           345 
##  15499.193411   -740.637120    417.878158  -2564.721766  -3452.550554 
##           346           347           348           349           350 
##   -415.631256  -3547.892626  -2670.632059  -1834.571962   -587.170257 
##           351           352           353           354           355 
##   1229.839220   -626.419745  -1491.293274   4160.602232   8781.412655 
##           356           357           358           359           360 
##  15437.299090  -5481.501214   -514.874979  -5973.701110   1902.982675 
##           361           362           363           364           365 
##  -1158.216477  -2495.623896 -10232.578548    307.581898   2342.423331 
##           366           367           368           369           370 
##  -1198.612256    152.540133    728.438502  -1950.257353    679.504950 
##           371           372           373           374           375 
##   2453.789528   1751.210650  -2295.271222   6577.256973  -2865.706044 
##           376           377           378           379           380 
##  -9211.013679  -8640.429597   6781.705384   1811.637889  12424.205735 
##           381           382           383           384           385 
##  -9952.813648   5979.193332   7537.409056  -5530.224196   1430.657801 
##           386           387           388           389           390 
##  -3090.803693  -4134.687436  20790.678540    815.184712    323.055694 
##           391           392           393           394           395 
##  -1529.478195  -3182.667982  -1946.984190  -1880.437114  -1271.390630 
##           396           397           398           399           400 
##    845.683099  -2059.453861  12811.921321   1796.469323  -3687.688202 
##           401           402           403           404           405 
##   1060.224479  -7762.923285   -887.207257  -1191.539401    310.821239 
##           406           407           408           409           410 
##  -2811.115893   -541.841184    405.151885   1660.536772  -2232.299410 
##           411           412           413           414           415 
##   2722.161469 -10486.564496  -9986.067581   2558.498777  -2475.916836 
##           416           417           418           419           420 
##  -3622.953577  -3679.492745 -10171.310538  -3162.284121  -8256.331768 
##           421           422           423           424           425 
##   7196.354443   7039.420355   6016.175185  -1956.233802  -1555.484475 
##           426           427           428           429           430 
##   1947.533732   -437.610092   4908.594666   3975.099623  13666.588637 
##           431           432           433           434           435 
##  19149.795166   2540.635372  -1932.015215  -1096.816988  -1351.858485 
##           436           437           438           439           440 
##   -654.194705  -2005.195603   -803.537608  -4326.093902  -1690.886153 
##           441           442           443           444           445 
##  -2180.213346   5561.061650  -5718.877064  12876.267358  -9183.933873 
##           446           447           448           449           450 
##  -3335.940850   -713.594701    306.053569  -2342.996227  -5098.164476 
##           451           452           453           454           455 
##   -482.133304    148.435873   -131.112584  -1326.016897  -6944.768000 
##           456           457           458           459           460 
##   6094.945071   -426.305798  -1115.638217  -5031.967303  -1668.417088 
##           461           462           463           464           465 
##  -2467.092548 -10580.654660  -1476.217701    -47.084717    248.137461 
##           466           467           468           469           470 
##  -9572.013288     70.517586  -1118.387011  19859.653434   1431.690957 
##           471           472           473           474           475 
##  -3383.311652   -502.087621  -1123.813116   9614.155017  -8875.591738 
##           476           477           478           479           480 
##  -8238.574779   7578.475111  -3762.700950  -4144.158114  -2985.660814 
##           481           482           483           484           485 
##  -2443.493200  -3834.294835  -1502.866480  -4423.373542  -2283.819336 
##           486           487           488           489           490 
##  -2055.157059   3201.753422  -1259.382543  13027.588912  -1682.190523 
##           491           492           493           494           495 
##  -2119.856548  12261.073809   1104.369527  -5583.219355  -7944.810115 
##           496           497           498           499           500 
##   -547.682323    949.658664  -1233.208559    726.104084  -3590.638274 
##           501           502           503           504           505 
##   5427.101058  -1033.475852 -10648.069251   5696.105156  -1534.606379 
##           506           507           508           509           510 
##  -1097.976315  -1519.918175   1625.899615    330.373699   -920.293643 
##           511           512           513           514           515 
##  -1450.191581  -3704.633081    575.909906  -1805.597974 -10315.350458 
##           516           517           518           519           520 
##  -3531.186575  22821.671097  -1428.563133  -2167.269611  -2479.878773 
##           521           522           523           524           525 
##  15517.235681  -6894.787712  -2630.071536  -4951.050961   6779.401916 
##           526           527           528           529           530 
##   7550.844946  20933.243740    -21.540955  -4630.599781    486.822955 
##           531           532           533           534           535 
##   8153.275186   -597.832551   -291.440920   9609.609108  -4168.942980 
##           536           537           538           539           540 
##  -1151.434093  -3465.856058  -1179.658627  -1093.996625  15137.331191 
##           541           542           543           544           545 
##  -3210.896695   -716.808899  -2498.026051  22316.519379  -1849.512017 
##           546           547           548           549           550 
##  -9378.871121  -3742.301435  -5867.000607   -824.630942   7651.391255 
##           551           552           553           554           555 
##  -1219.863188  -1978.868837   1639.529175   -858.323314   9742.467900 
##           556           557           558           559           560 
##    579.739149  -2702.771202  -4245.939262   7752.440944  -3061.194265 
##           561           562           563           564           565 
##   2480.543956  -1963.810591  -2676.410506  -6695.445196   -549.680481 
##           566           567           568           569           570 
##   -965.737117  -4910.916107  -1579.440581    220.977171   7999.608643 
##           571           572           573           574           575 
##  -1995.504199  -2809.485915  -5261.301291  15300.692015   -958.585650 
##           576           577           578           579           580 
##     71.830578  -1013.807598  26087.446920  -1837.416169    813.965349 
##           581           582           583           584           585 
##   1051.963084  -1486.876260  -6736.657893  13352.446597   1311.028894 
##           586           587           588           589           590 
##  -1238.106903   3571.698762  13230.920444  -2101.443632  -2113.000953 
##           591           592           593           594           595 
##   -889.473996   1584.317604   -980.844898  -9301.592682  -6257.107449 
##           596           597           598           599           600 
##  -2310.178631  -1100.422932  -2295.846975  -2559.109288  19554.376394 
##           601           602           603           604           605 
##  -4009.009631  -2580.041247     51.650141  -1463.164978  -8737.871984 
##           606           607           608           609           610 
##  -3277.349822     98.454071  -9425.008355    134.546574   7114.157273 
##           611           612           613           614           615 
##  -1458.438407  -2841.325814  -1498.201053   3476.830470  -2280.358615 
##           616           617           618           619           620 
##   6817.737286   -425.651577  -9815.022835   6684.089153  -3853.475805 
##           621           622           623           624           625 
##  -2580.101564   7432.195097   1270.776326   6992.525505   -797.298634 
##           626           627           628           629           630 
##   -500.924920   -241.330532    726.784795  -4270.186863   6835.486626 
##           631           632           633           634           635 
##  -3639.508528  -2026.782020  -3936.283502   1145.994638  -4976.631828 
##           636           637           638           639           640 
##  -2846.942691   1551.091461  15215.901239 -10635.076742   -780.337868 
##           641           642           643           644           645 
##  -3901.416062    611.350771  -1947.840773  -1117.790245   7934.273852 
##           646           647           648           649           650 
##   -576.289333   -773.682443   1999.030637   -477.021334  -1591.729715 
##           651           652           653           654           655 
##  -5016.100270  -4275.068532  -2533.616761  -3186.103425  -2747.603784 
##           656           657           658           659           660 
##  -9135.944177  -5340.605596  -1982.987366  14029.104376   1986.557214 
##           661           662           663           664           665 
##  -6493.202618  11333.516076  -1642.236554  -2730.846768  -9137.658973 
##           666           667           668           669           670 
##   6962.411836  -1595.850254   6894.175185   7149.484007  -1818.234513 
##           671           672           673           674           675 
##  -1466.409850  -1971.780354  -2848.343676  -2779.917153   8471.828620 
##           676           677           678           679           680 
##    317.258878  -3275.274095   8282.484712  -2140.407299   1632.272609 
##           681           682           683           684           685 
##   3199.294765   1439.545466   6447.539534    -54.129658   1910.689108 
##           686           687           688           689           690 
##    649.128340     86.067929  -6719.752527  17940.716170   5619.818623 
##           691           692           693           694           695 
##   -508.779532  -4132.240129  -1604.583757    155.439987  -2980.003654 
##           696           697           698           699           700 
##  -4839.754451  16687.348904   5936.887972  -2753.247868  -3471.373393 
##           701           702           703           704           705 
##  -3012.525255  -6180.206053  -5963.582249   -278.786110  -1107.467550 
##           706           707           708           709           710 
##  -2127.047480   6726.128447    -34.870254    -95.332201  -1133.680816 
##           711           712           713           714           715 
##  -2623.743913   1226.372257  -1076.655571  -4596.164337    614.930559 
##           716           717           718           719           720 
##  -1071.740700   1236.097467   1378.269876  -2551.777539  -1920.146287 
##           721           722           723           724           725 
##  -4814.993258  -2622.164243  -3501.293700  -3412.105122     63.593110 
##           726           727           728           729           730 
##   8385.648414  -1461.549435 -10046.966928  -3779.410204  -3829.613444 
##           731           732           733           734           735 
##  -9738.882188   1083.615488    -27.825163   -140.759329     15.429648 
##           736           737           738           739           740 
##  -2683.837975   6281.391949    767.734139   7846.965460  13459.900485 
##           741           742           743           744           745 
##    859.951160 -10327.037661   6351.838318  -1192.225625   -989.442889 
##           746           747           748           749           750 
##  -1100.251179   5880.109032   1340.528322  -3578.981843  -2496.530002 
##           751           752           753           754           755 
## -10726.090894  -1222.835820  -2950.525262   1102.552868  11736.254833 
##           756           757           758           759           760 
##   -241.487055   2185.718418 -10247.008133  -2746.870142   7165.835785 
##           761           762           763           764           765 
##  -1270.040750  -3231.988531 -10412.203200   -647.509073    963.311445 
##           766           767           768           769           770 
##  -1533.297075  -2879.173553  -1528.747217  -3422.879836   2457.553060 
##           771           772           773           774           775 
##  12139.668082    458.720911   1278.571213  -8651.956842  -2736.109728 
##           776           777           778           779           780 
##  -1742.266678  -2138.503088  -5394.653429  -2538.541329  -1532.170235 
##           781           782           783           784           785 
##  -9543.997569  -5108.363348  -3787.863538  -9506.228618  -1470.822485 
##           786           787           788           789           790 
##     71.022107  -3091.341281  -3761.138114   2101.615084   -602.507977 
##           791           792           793           794           795 
##  -6269.008746   -905.951971   1214.791549 -11447.234810  -1527.103592 
##           796           797           798           799           800 
## -10036.913660  -6103.731864   1222.945588  -2206.808858 -10806.362912 
##           801           802           803           804           805 
##   -629.131214  -2234.101546   1135.916759   8359.960066  -1025.653093 
##           806           807           808           809           810 
##  -3820.427710  16415.034902  -2925.704838  -1574.047621    175.075061 
##           811           812           813           814           815 
##   -783.443485  -4368.011777   1901.459136   1580.458008  -3180.413395 
##           816           817           818           819           820 
##  -1798.461470    483.884272  -2664.462247  -9362.542702  22971.708790 
##           821           822           823           824           825 
##  -3428.715708   1900.502718  -1406.369051  -1137.406208    789.269876 
##           826           827           828           829           830 
##    876.432459   6874.879835  -9748.474258   6874.105120    607.810705 
##           831           832           833           834           835 
##  -1958.853476   -723.207100   1451.809149  -2730.517716  -3193.648537 
##           836           837           838           839           840 
##  -3677.897225  -3426.688249   -329.244148   1414.436112  -1143.726351 
##           841           842           843           844           845 
##  -2280.537822    720.066228   7323.914887  -9019.230229  -1846.226522 
##           846           847           848           849           850 
##   6805.954140  -2720.478965  -8115.798262   -131.075356  -2577.912658 
##           851           852           853           854           855 
##   5584.976815   -455.774485   6574.040782   1973.426057  -8433.818261 
##           856           857           858           859           860 
##  -1187.937754   5691.934366 -10590.755522  13018.219911  -1216.508786 
##           861           862           863           864           865 
##   9007.120796    -67.474093  -1135.736659   1372.352335   -971.024383 
##           866           867           868           869           870 
##  -1750.383656  -3887.485915  -5639.815089   1329.351810   1740.972205 
##           871           872           873           874           875 
##  -4521.208900  -1195.836153  -1289.462355  -2344.850713   2083.796087 
##           876           877           878           879           880 
##   -667.729380  16357.356034  -1009.643194  -1973.076007  -1131.118313 
##           881           882           883           884           885 
##  -1817.279035   -342.895379   1683.225045   8903.519876   1452.842774 
##           886           887           888           889           890 
## -10054.704850  -9076.547085  -2072.701105  -5094.388755  -2011.631649 
##           891           892           893           894           895 
##  -8103.085549    221.620325    342.594847   7308.346998  -1215.389123 
##           896           897           898           899           900 
##  -5287.004213  -9959.253286    708.580889  -4362.440204   1604.704321 
##           901           902           903           904           905 
##    390.236610   7759.946130    783.004993  -4819.599977  -2574.807564 
##           906           907           908           909           910 
##      8.252990  -1001.162509  -2529.614782  -2344.576055 -10890.511702 
##           911           912           913           914           915 
##   -523.804742   6688.220078   2133.453369   -987.425920    433.761387 
##           916           917           918           919           920 
##  -3047.921739 -10209.554151   3857.195720   -210.439623  -3195.422186 
##           921           922           923           924           925 
##    971.840028  -1662.829695  -2698.378382  -4377.015549   -716.869848 
##           926           927           928           929           930 
##  13677.335961   2110.512034   2431.902652  -3590.698274  -3708.099728 
##           931           932           933           934           935 
##  -7146.900458  -2691.908450   1512.063663  -4042.801995  -3956.737704 
##           936           937           938           939           940 
##   -273.579775  22784.322935   2713.930417    856.938955  -2107.955092 
##           941           942           943           944           945 
##    642.883244  -6624.104054  -3747.271061   1083.565178  -4304.512274 
##           946           947           948           949           950 
##  -2733.019871  -3613.598939   6264.965954  -2962.797505  -8282.357528 
##           951           952           953           954           955 
##   2515.287226   8239.689584   -744.197275   5690.261207  -9928.870125 
##           956           957           958           959           960 
##  -5237.055068   5902.287112   9412.016555   6436.545268  15847.611232 
##           961           962           963           964           965 
##  -3300.549127   -851.835777  -1555.585479   1238.355093  12775.390395 
##           966           967           968           969           970 
##  -1403.203035  -9415.105538   -418.733917   1215.555898   -914.223023 
##           971           972           973           974           975 
##    305.142537    231.789893   1978.775838  -4561.741414  -4169.465588 
##           976           977           978           979           980 
## -10920.887501  -5946.568772  -1588.488724  -3202.921715  -2423.571962 
##           981           982           983           984           985 
##  14952.747703    449.671038  -9346.847637  11593.710351   1690.436531 
##           986           987           988           989           990 
##   -441.210489   -783.830713  19433.972014  -3823.634977 -10415.633451 
##           991           992           993           994           995 
##   1920.810715     -9.165807  -1376.228324  -1830.901521  -9184.286507 
##           996           997           998           999          1000 
##   2025.032703  -2027.994737  -2690.870909  -2047.488341  -1076.717672 
##          1001          1002          1003          1004          1005 
##  -9989.679568   5548.481106   -902.232016  10901.980383   1912.864176 
##          1006          1007          1008          1009          1010 
##  -1643.336069   -604.473714  -8526.284705  20364.908205   -537.964672 
##          1011          1012          1013          1014          1015 
##    133.142105 -11021.832429  21682.194085  -2436.216477  -1705.947521 
##          1016          1017          1018          1019          1020 
##    262.963084   1518.952319  -2116.925872  -1392.794023  21695.795891 
##          1021          1022          1023          1024          1025 
##  -4698.124968   7738.872384   6220.373001   1199.774101  -6567.062140 
##          1026          1027          1028          1029          1030 
##  -2916.087826  -9013.771696  21270.840059  -2682.350018   3371.747129 
##          1031          1032          1033          1034          1035 
## -10052.580347   6647.191898   -972.511560 -10037.416482  -3593.742206 
##          1036          1037          1038          1039          1040 
##   2336.846277   7659.314663   6060.890854  -1105.619600  20432.105458 
##          1041          1042          1043          1044          1045 
## -10027.721334   1257.982387   6234.975661   -751.863710  -2559.932089 
##          1046          1047          1048          1049          1050 
##  -9393.133006   -255.373565   9674.547503   1524.336779   4895.772588 
##          1051          1052          1053          1054          1055 
##  -3656.844502    944.446179  -1366.240827  -8648.320992   1087.262361 
##          1056          1057          1058          1059          1060 
##   -907.047223  -1826.795616   7667.778009  -4815.074602  -3070.256843 
##          1061          1062          1063          1064          1065 
##  -2894.288880   -563.200500   8251.630768   -344.913103   1600.561652 
##          1066          1067          1068          1069          1070 
##   -339.928927  -3836.733626  -6464.251033   2675.918822  -1700.737447 
##          1071          1072          1073          1074          1075 
##   6153.570808   -829.578046  -1961.856108    435.136842   3406.108454 
##          1076          1077          1078          1079          1080 
##  -1614.832838  -2293.776125    -58.861530   5032.350841   -384.698334 
##          1081          1082          1083          1084          1085 
##  11856.831245  -1142.428264   1218.867345  -2714.286554    765.677165 
##          1086          1087          1088          1089          1090 
##  -9147.336161  -1156.965225  -1925.879647  -7460.136189    590.812716 
##          1091          1092          1093          1094          1095 
##   5653.043858   -924.928369  -1250.739957   6244.447242   -872.960326 
##          1096          1097          1098          1099          1100 
##   1436.133520   7967.261879  -3263.017606  11257.739830  -2553.664663 
##          1101          1102          1103          1104          1105 
## -10095.251763    -51.752806  -4928.694363  -3659.743147  12880.724258 
##          1106          1107          1108          1109          1110 
##  -2064.773447  -1698.379970    741.835397  -1845.461868   2022.520307 
##          1111          1112          1113          1114          1115 
##  -1246.254019   7552.079026  -8777.917340   1237.510575    199.949767 
##          1116          1117          1118          1119          1120 
##  -2339.783515    708.930849   6747.063325   6022.251361   3132.660735 
##          1121          1122          1123          1124          1125 
##   5920.942889  -4239.120065   8855.322315  13119.945777   8980.190590 
##          1126          1127          1128          1129          1130 
##   1483.527961  -2029.097512  -3152.707616   6629.008740   2474.760897 
##          1131          1132          1133          1134          1135 
##   2427.237846  -6446.448524   4590.225772   2269.121844  13178.494852 
##          1136          1137          1138          1139          1140 
##    720.361680   -184.167346    943.731284  -2958.739762   9336.574011 
##          1141          1142          1143          1144          1145 
##  -4221.421187  -1527.023440  17266.308408  -2527.590164  -2090.132324 
##          1146          1147          1148          1149          1150 
##  -1111.833887  14291.016711  -1543.898042   1258.830498  -4245.383508 
##          1151          1152          1153          1154          1155 
##   -566.355907  -2916.259719   7118.074699  -3326.498473   1233.545814 
##          1156          1157          1158          1159          1160 
##   2432.601190   8159.220283  12649.418625   -926.249183  -5898.784279 
##          1161          1162          1163          1164          1165 
##  -2918.742147  -5606.191557  10335.801856    108.386095   -940.420292 
##          1166          1167          1168          1169          1170 
##   -598.861605  -5168.563371    743.863082  -3314.104844  -2815.098890 
##          1171          1172          1173          1174          1175 
##  -8478.216774  -9440.735865  -5281.947592  -1180.222951  -1771.882641 
##          1176          1177          1178          1179          1180 
##   -621.255027  -9528.474461  -1047.125082  -2652.651102 -10454.914213 
##          1181          1182          1183          1184          1185 
##  -4897.721802  -1347.536877  -1953.836373   -172.898472  -8981.281965 
##          1186          1187          1188          1189          1190 
##    988.367732   8643.307655  -1119.203981  -9696.227864   9801.109763 
##          1191          1192          1193          1194          1195 
##  -1623.352489   7728.994001   -809.904857  -3917.849625    732.933237 
##          1196          1197          1198          1199          1200 
##  16583.530600   6552.122585  -4104.394870  -1795.797941    242.797519 
##          1201          1202          1203          1204          1205 
##    433.677121  -4562.971210  -2333.752175  -2016.005248  -7401.177631 
##          1206          1207          1208          1209          1210 
##   1935.718119  22047.552788   6150.832021  -9710.317751  -3258.077500 
##          1211          1212          1213          1214          1215 
##  -2261.943391  14116.505263   1772.048674  -1755.449602  -1472.513650 
##          1216          1217          1218          1219          1220 
##   7280.279512  -1386.164794  -3825.678076   6414.403069   -391.325238 
##          1221          1222          1223          1224          1225 
##   1544.317018   -176.045651  -1019.022317    917.781668    184.351998 
##          1226          1227          1228          1229          1230 
##  -4932.998345   3036.119920  -4063.446941  -3361.151869  -1213.152855 
##          1231          1232          1233          1234          1235 
##  23249.274670  -4201.550615   2205.769989    452.947153   -454.996272 
##          1236          1237          1238          1239          1240 
##  -2404.942440   2775.918822   -249.410852   1736.743409  -5156.145243 
##          1241          1242          1243          1244          1245 
##   8142.077233   8884.411011   3392.265265  -3097.351147  -2602.230196 
##          1246          1247          1248          1249          1250 
##   2186.093434    808.695730   -313.497476  -4201.704489   6316.485430 
##          1251          1252          1253          1254          1255 
##  -9340.133747   1600.201181  -9910.843478   7671.691201  -1668.464969 
##          1256          1257          1258          1259          1260 
##  -4977.330941  -1866.360110     63.915700  15302.849337    894.663838 
##          1261          1262          1263          1264          1265 
##   1303.049172  -4282.566866  -1259.242007  -1791.592427  -1412.780830 
##          1266          1267          1268          1269          1270 
##  -9507.212117  -1732.882369   5845.997394  -2376.746044   -258.648843 
##          1271          1272          1273          1274          1275 
##  -2715.518444  -2920.320378   6768.829863  -1563.838750 -10593.012735 
##          1276          1277          1278          1279          1280 
##    197.213505  -1098.546745  -1852.901981  -9451.776746    731.703631 
##          1281          1282          1283          1284          1285 
##  -3240.477907  -8712.189847  -9534.095625   -952.938478   7715.113783 
##          1286          1287          1288          1289          1290 
##    174.267884   2562.193442   -549.396243   8296.310222  -3661.247642 
##          1291          1292          1293          1294          1295 
##   2496.867345   6492.034580    257.754473    749.252806    425.443437 
##          1296          1297          1298          1299          1300 
##   1353.957112    294.138098    201.242289   -498.083759   1165.581746 
##          1301          1302          1303          1304          1305 
##  28960.509997   8512.394580   1687.532209   5555.423562  -9722.770939 
##          1306          1307          1308          1309          1310 
##  -1023.675732 -10621.656071  -8043.761706   5523.486757  -2476.506868 
##          1311          1312          1313          1314          1315 
##   -767.210357   -929.990615  -6452.274700   8125.502866  -8811.453568 
##          1316          1317          1318          1319          1320 
##   9147.616952   1832.158037  -8964.000504   9281.264951    272.178414 
##          1321          1322          1323          1324          1325 
##   -977.157059  -8749.131415  -3951.071702   7815.704471   -484.291624 
##          1326          1327          1328          1329          1330 
##  -1819.284201  -2787.863793  -1859.974960  20296.397196  -3947.344179 
##          1331          1332          1333          1334          1335 
##   1221.670646   5727.836042  -4829.281900   -700.483466  -1080.422195 
##          1336          1337          1338 
##  -3270.029343    -88.633245  -8224.027923
valores_ajustados_ols <- fitted(ols_model)

plot(valores_ajustados_ols, residuos_ols, main = "Residuos vs. Ajustes", xlab = "Valores Ajustados", ylab = "Residuos")

#Modelo LOG_OLS
residuos_log_ols <- resid(log_ols_model)
residuos_log_ols
##             1             2             3             4             5 
##  0.2670031558 -0.4694858711 -0.0772532082  1.4438703371 -0.3406981112 
##             6             7             8             9            10 
## -0.2873723967 -0.0984221194  0.1221176890 -0.0319233722  0.9101277680 
##            11            12            13            14            15 
## -0.3422712754 -0.7215004549 -0.7313417518 -0.1146548484  0.5251328550 
##            16            17            18            19            20 
## -0.3626773391  0.0442709592 -0.3294016825 -0.1641263716  0.3808251112 
##            21            22            23            24            25 
##  0.0093465807 -0.2284569458 -0.8897739292  0.2804188731 -0.0418753643 
##            26            27            28            29            30 
##  0.1807763746  0.1934119950  0.0780925332 -0.0706885588  0.3786724758 
##            31            32            33            34            35 
##  0.7388201577 -0.1381252140  0.5204137496  0.0728480956  0.7870199050 
##            36            37            38            39            40 
## -0.4185558819  0.1641377267 -0.4773776160  0.2470823001 -0.2785312929 
##            41            42            43            44            45 
## -0.1828650423 -0.1373554661 -0.0727503246 -0.0582353272 -0.1962486108 
##            46            47            48            49            50 
##  0.5520609751  0.1586184613 -0.3200384553  0.0999491741  0.1988571790 
##            51            52            53            54            55 
## -0.2399896475  0.0657867135 -0.5828106892  0.1817494154  0.1115996706 
##            56            57            58            59            60 
## -0.2225929848  0.1249375278  0.9993444474 -0.6514708493 -0.0712401235 
##            61            62            63            64            65 
##  0.1014646818  0.0721506578  0.8854108717 -0.0646751216  0.1419327433 
##            66            67            68            69            70 
## -0.4725343307  0.0321812397 -0.0895638802 -0.2795285942 -0.1289292738 
##            71            72            73            74            75 
## -0.1576288410  0.2691547937  0.1364703482 -0.0074556499 -0.0356407878 
##            76            77            78            79            80 
## -0.0574899724 -0.2030434576 -0.8022202152 -0.3156917410 -0.1737749476 
##            81            82            83            84            85 
## -0.1362030769 -0.1568511251  0.7628028955  0.0644944558  0.1966855236 
##            86            87            88            89            90 
## -0.5396494843 -0.2258256713  0.0192050464 -0.0581421410  0.0456609335 
##            91            92            93            94            95 
## -0.5605490823  0.1103927340 -0.6207057327 -0.1279949579 -0.2929525379 
##            96            97            98            99           100 
## -0.2902220640  0.1104809863 -0.1591518087 -0.7099716925 -0.5510329258 
##           101           102           103           104           105 
## -0.2187094003 -0.2729099414  2.0870309329 -0.6396385681 -0.1425874114 
##           106           107           108           109           110 
##  0.2395333429 -0.1755322355 -0.0969816771 -0.5017491918 -0.3186303410 
##           111           112           113           114           115 
## -0.0322430104  0.0813439978 -0.3647965033 -0.3536623877  0.0904852174 
##           116           117           118           119           120 
##  0.9186516404 -0.2082651206 -0.1486469880 -0.0630939786  0.0968849859 
##           121           122           123           124           125 
## -0.1417360559 -0.3562903865 -0.2806635756  0.0052166828  0.0738095501 
##           126           127           128           129           130 
## -0.2076057886  0.2734885272 -0.1387587749  0.4240392926 -0.1720017925 
##           131           132           133           134           135 
##  0.1080474456  0.1923692623 -0.0011872937 -0.4949703987 -0.1934237344 
##           136           137           138           139           140 
## -0.4371504240 -0.8548810330 -0.4507636624  0.9120687436 -0.5201915644 
##           141           142           143           144           145 
##  1.6298555162 -0.2200245504 -0.3238210042  1.3218014343 -0.1196878609 
##           146           147           148           149           150 
## -0.0356896925 -0.0121277191 -0.0919191016 -0.0341839983 -0.4109184510 
##           151           152           153           154           155 
## -0.1086342113 -0.1672049230  0.0639697713 -0.5145753084  0.0236672548 
##           156           157           158           159           160 
## -0.2719311585 -0.6386261037  0.2877697608  0.3818719768  0.7345804734 
##           161           162           163           164           165 
## -0.4931594364  0.9977220937 -0.1259319902 -0.0646425411 -0.2717742011 
##           166           167           168           169           170 
##  0.1677802771  0.3933786978  0.0705029497 -0.0619205580  0.2490744836 
##           171           172           173           174           175 
## -0.0902135489 -0.1594934729 -0.2213595450 -0.2160622864 -0.3274215267 
##           176           177           178           179           180 
## -0.3071540114 -0.0335280711 -0.0189115525  0.0213917835  0.0859667614 
##           181           182           183           184           185 
##  0.0147148437 -0.5698093047  0.3033836844 -0.0630040780 -0.0755118844 
##           186           187           188           189           190 
##  0.2593504618 -0.0586358867  0.0378987806 -0.1343307614 -0.0110517091 
##           191           192           193           194           195 
## -0.0174233314 -0.2225275884 -0.5768251593  0.1112107403 -0.8924861277 
##           196           197           198           199           200 
## -0.5541727336 -0.2588901406  0.0177878214  0.1452540614  0.0148879586 
##           201           202           203           204           205 
## -0.3091875720 -0.0659522465  0.1371070461  0.5152460842 -0.0970458804 
##           206           207           208           209           210 
## -0.0554773433  0.0220248715 -0.2922658538  0.0393757744 -0.2153172523 
##           211           212           213           214           215 
## -0.4577565711  0.0980227739 -0.0577862011 -0.1322966117 -0.0093589664 
##           216           217           218           219           220 
## -0.1004559833  0.0303721553 -0.4869741532 -0.2187064784  1.9740887816 
##           221           222           223           224           225 
## -0.2132085229 -0.0295573297 -0.0568987164  0.9109810361 -0.5551271356 
##           226           227           228           229           230 
##  0.0431466086 -0.6318142912  0.6036657637 -0.0452064700  0.0830492695 
##           231           232           233           234           235 
## -0.1127504548  0.1795055685 -0.3089739856  0.0565626404  0.0169433825 
##           236           237           238           239           240 
## -0.4600309415 -0.4513188467 -0.2579089322  0.2793451160 -0.2301597976 
##           241           242           243           244           245 
##  0.7503167848  0.0409225093  1.2028447074 -0.0752775602 -0.7005364429 
##           246           247           248           249           250 
##  0.8239128273 -0.0556723325 -0.7168072091 -0.3074867902 -0.1724331694 
##           251           252           253           254           255 
##  0.2313386429 -0.2826522083 -0.1740092891 -0.0438359736 -0.1241208456 
##           256           257           258           259           260 
##  0.2306061310 -0.2217974785 -0.3431731299  0.2167124966  0.9118988025 
##           261           262           263           264           265 
##  0.0683412413  0.2276906284 -0.5807155106  0.9297326971  0.5836122171 
##           266           267           268           269           270 
## -0.0041540068 -0.5431559625  0.1662517144 -0.1366135214  0.0319203137 
##           271           272           273           274           275 
## -0.4234082950 -0.1080837989 -0.1149491788  0.0189200135 -0.4363949503 
##           276           277           278           279           280 
##  0.1198342006  0.1231402586 -0.3878720655  0.0519798045  0.1039820595 
##           281           282           283           284           285 
## -0.4054405552 -0.1425683933 -0.1505634419  0.0501934261 -0.0751606705 
##           286           287           288           289           290 
## -0.0798193979 -0.0930640044  0.1349742499 -0.2340745187  0.9776413067 
##           291           292           293           294           295 
## -0.4199543729  1.4334240595  0.6568691876 -0.4454094100  0.0111021484 
##           296           297           298           299           300 
## -0.3447402357  0.2341753004 -0.5911104347  0.3987147663  0.0142857375 
##           301           302           303           304           305 
##  0.0820712328 -0.5790615224  0.0072081883 -0.0999842492  0.0104869937 
##           306           307           308           309           310 
##  1.3494410571  1.4994141534 -0.2378952190 -0.0384940902 -0.0099361792 
##           311           312           313           314           315 
## -0.0993293723 -0.4200070419  0.0487940001 -0.2188848372  0.5010809677 
##           316           317           318           319           320 
## -0.0883274034 -0.1220717956 -0.0603777527 -0.0785904316 -0.2432817029 
##           321           322           323           324           325 
## -0.1349630278  1.7688282724  0.2324922621 -0.1049432250 -0.4930672310 
##           326           327           328           329           330 
## -0.1495160811 -0.1279853584  0.0008867241 -0.3069154269 -0.1842302380 
##           331           332           333           334           335 
## -0.2598267458 -0.6427717653  0.0542021316  0.0503662378  0.8068465755 
##           336           337           338           339           340 
## -0.0139049708  0.0435859096  0.1142629665 -0.1098694126 -0.0328051471 
##           341           342           343           344           345 
##  1.6322340019  0.0416725983  0.1029995714 -0.0053424288  0.0304851481 
##           346           347           348           349           350 
##  0.0466593044 -0.2213789324 -0.0860284100 -0.1547215713 -0.5223656061 
##           351           352           353           354           355 
##  0.1193930371 -0.0295572741 -0.3276064634  0.7155327006  1.5890100576 
##           356           357           358           359           360 
##  1.0632454020 -0.1137639702  0.0695351405 -0.7958212393 -0.3675921931 
##           361           362           363           364           365 
##  0.0570407651 -0.2682385665  0.1578935638 -0.1690612170  0.0998177130 
##           366           367           368           369           370 
##  0.0209323929  0.1510425300  0.0931797531 -0.0416920224  0.2702611291 
##           371           372           373           374           375 
##  0.1923360861  0.1517247067 -0.0560070766  0.5677615737 -0.8137050150 
##           376           377           378           379           380 
##  0.0840965055 -0.3606675948  0.6535659949  0.2089940799  0.7285115950 
##           381           382           383           384           385 
## -0.1431731828 -0.2042209854  0.6029465790 -0.1853817622  0.1127082985 
##           386           387           388           389           390 
## -0.8576648221 -0.0863376660  1.1942248437 -0.1849374605  0.1881006258 
##           391           392           393           394           395 
##  0.0892100620 -0.3600996288 -0.0465815309 -0.0371496393  0.0463021375 
##           396           397           398           399           400 
## -0.0047798587  0.0106767943  1.6277178049  0.1732189664 -0.5689709834 
##           401           402           403           404           405 
##  0.0590788388 -0.2703571330  0.0629411578  0.0530159586 -0.3469248029 
##           406           407           408           409           410 
##  0.0198391350 -0.2391707289  0.0333779796  0.0946027467 -0.3016970663 
##           411           412           413           414           415 
## -0.3665160848 -0.5402874046 -0.1162657172  0.3146356433 -0.3400119555 
##           416           417           418           419           420 
## -0.1500557877 -0.1584807910 -0.3759517997 -0.0171718698 -0.7110179896 
##           421           422           423           424           425 
## -0.3298784523 -0.2952495887  0.1002974982 -0.3952771808 -0.0322404485 
##           426           427           428           429           430 
##  0.2149634340 -0.0118196402  1.0281416207  0.1900366485  1.4396582818 
##           431           432           433           434           435 
##  2.0625503706  0.1503950641 -0.2277559313  0.0226626112 -0.2035250985 
##           436           437           438           439           440 
##  0.0901439831 -0.4350883694 -0.0279421857  0.0492112817 -0.3718366444 
##           441           442           443           444           445 
## -0.1409311646  0.2844314622 -0.9614513725  0.7859090718 -0.6601118735 
##           446           447           448           449           450 
## -0.1822203558  0.0406362203  0.0732040452 -0.2094560335 -0.3496759632 
##           451           452           453           454           455 
##  0.0625679006 -0.1518770268 -0.5732712151 -0.5326854742 -0.3177098965 
##           456           457           458           459           460 
##  0.5165800582  0.0766351401  0.0229092100 -0.1579840148  0.0140168517 
##           461           462           463           464           465 
##  0.0193942925 -0.4993829750  0.0882402400  0.0449264832 -0.4896853960 
##           466           467           468           469           470 
## -0.1767613951  0.0896685151  0.0745132579  1.6868340466 -0.1057189189 
##           471           472           473           474           475 
## -0.6052959760 -0.1837461694 -0.4827236304  0.8048765105 -0.6199799690 
##           476           477           478           479           480 
## -0.6894337288  0.6946060094 -0.5225246956 -0.8147894655 -0.7136153215 
##           481           482           483           484           485 
##  0.0602428691 -0.0987533205 -0.5050474860 -0.1082657088 -0.0133323441 
##           486           487           488           489           490 
## -0.2092622159  0.2684941394 -0.7995009994  0.1481426172 -0.0161670590 
##           491           492           493           494           495 
## -0.5154751406  0.7333984741 -0.1222908253 -0.1290173560  0.2293086187 
##           496           497           498           499           500 
## -0.4046337831  0.0151131761 -0.0425666444  0.0722870606 -0.0446466022 
##           501           502           503           504           505 
##  0.4157337894 -0.1099558855 -0.6522141754  0.8939460242 -0.1248437677 
##           506           507           508           509           510 
##  0.0143406484 -0.2727494479  0.0371599448 -0.1656435880  0.0114548039 
##           511           512           513           514           515 
##  0.0207004932 -0.6154657403  0.0396369873 -0.8180965032 -0.4332471736 
##           516           517           518           519           520 
## -0.0964954467  2.1574466774 -0.0173098745 -0.1759257977 -0.3263704474 
##           521           522           523           524           525 
##  1.0014153377 -0.4594843190 -0.0552607064 -0.3209493690  0.0966295014 
##           526           527           528           529           530 
##  1.4247525813  2.1319367636  0.0413581359 -0.1448668867 -0.3794449772 
##           531           532           533           534           535 
## -0.2218374967  0.0725446352  0.0760647890  0.9972287770 -0.0703562802 
##           536           537           538           539           540 
## -0.0981813284 -0.0509752365  0.0059407290 -0.0378507149  0.9423833220 
##           541           542           543           544           545 
## -0.0438905430 -0.0104742831 -0.0072672892  0.0750437836 -0.0506928898 
##           546           547           548           549           550 
## -0.5699040392 -0.4105777478 -0.0855842421 -0.2071769205  0.0450642528 
##           551           552           553           554           555 
##  0.0147773594 -0.3136395787  0.1318424725  0.0695342286  1.3782983870 
##           556           557           558           559           560 
## -0.1062785634 -0.0870797379 -0.4604211463  0.2784723349 -0.6028421574 
##           561           562           563           564           565 
##  0.1935122487 -0.0135077333 -0.5817238871 -0.2145998086  0.0333995859 
##           566           567           568           569           570 
## -0.2920513153 -0.1811183588 -0.0476490279  0.1752119486 -0.0527790443 
##           571           572           573           574           575 
## -0.3303395931 -0.2528320817 -0.1941302509  0.8301290879  0.0916177562 
##           576           577           578           579           580 
##  0.0732337563 -0.6785771750  0.7755691369 -0.0533773365 -0.1395128882 
##           581           582           583           584           585 
##  0.1293950220 -0.5541727336 -0.2567254613  1.2468304555 -0.6921398237 
##           586           587           588           589           590 
## -0.1605661738  0.3225084033  0.4531084041  0.0195412588 -0.1459327551 
##           591           592           593           594           595 
##  0.0188117010  0.0863051871 -0.1772573536  0.1307989474 -0.3854804644 
##           596           597           598           599           600 
## -0.0332016292 -0.0138470950 -0.0990421579 -0.1057785610  1.1056449199 
##           601           602           603           604           605 
## -0.5773265176 -0.1029978350  0.0447324070  0.0931353894  0.2959438456 
##           606           607           608           609           610 
## -0.1182335838 -0.1583271523 -0.7008893700 -0.0090855050  0.4196955583 
##           611           612           613           614           615 
## -0.0438739121 -0.0956785293 -0.2167074059  0.2887609268 -0.5095797586 
##           616           617           618           619           620 
## -0.0506651304  0.0528235240 -0.5883903015  0.9189849656 -0.1012682160 
##           621           622           623           624           625 
## -0.3430619634  0.2125570519  0.0892541156  0.9888243679  0.0234312374 
##           626           627           628           629           630 
## -0.2118225954  0.0659685192  0.5575493923 -0.1184304989  0.0111770968 
##           631           632           633           634           635 
## -0.1046864203 -0.6491180737 -0.4268521495  0.0785510972 -0.1607933244 
##           636           637           638           639           640 
## -0.0084869568  0.0271277514  1.3096982029 -0.4537751514  0.0994647016 
##           641           642           643           644           645 
##  0.0282799305 -0.0861478515  0.0032054171  0.1565498695  0.7930201482 
##           646           647           648           649           650 
##  0.0836605343 -0.0984092317  0.2078598318 -0.4165477016  0.0213352961 
##           651           652           653           654           655 
## -0.0930057681 -0.0898080538 -0.1224710426 -0.0657879085 -0.0385415617 
##           656           657           658           659           660 
## -0.6032374929 -0.3378930722 -0.1249363054  0.9856113197  0.2386056527 
##           661           662           663           664           665 
## -0.1856939366  0.7363916557 -0.0850782019 -0.8861120598 -0.7423973861 
##           666           667           668           669           670 
##  0.0389156489 -0.0703906141  0.1224901156 -0.2943287882 -0.1168179050 
##           671           672           673           674           675 
## -0.0661920824 -0.2227407775 -0.3715377098 -0.2120193181  0.0412507503 
##           676           677           678           679           680 
## -0.0438218208  0.0179800715 -0.2366193718  0.0287077996  0.1597289527 
##           681           682           683           684           685 
## -0.0255495790 -0.6856474747  0.1311553527  0.0138573736 -0.0121557914 
##           686           687           688           689           690 
##  0.1153947473  0.0413501619 -0.4146604970  1.1483504342  0.5035664322 
##           691           692           693           694           695 
## -0.3930548884 -0.1756391881 -0.2747537003 -0.3999612018 -0.2677450449 
##           696           697           698           699           700 
## -0.3821992960  0.9974619601  0.0665899997 -0.0658323719 -0.1283759584 
##           701           702           703           704           705 
## -0.5196660254 -0.1618619480 -0.2136759220 -0.0545893212 -0.0012226669 
##           706           707           708           709           710 
## -0.0967472888 -0.1363816994  0.0945742328  0.1386342731 -0.1291774506 
##           711           712           713           714           715 
## -0.4827743119  0.1244987282  0.0260765116 -0.5284168048 -0.3395846192 
##           716           717           718           719           720 
##  0.0021917558  0.1092294349  0.1403723245  0.0113686484  0.0008825169 
##           721           722           723           724           725 
## -0.1193588945  0.0009454370 -0.0650893689 -0.8667599770  0.0736747570 
##           726           727           728           729           730 
##  0.4498534330 -0.1062055271 -0.1980821919 -0.2811915002 -0.1742151788 
##           731           732           733           734           735 
## -0.3275825626  0.0793435996  0.1026685556  0.0557055936  0.1287550557 
##           736           737           738           739           740 
## -0.0426013149  0.1761750185 -0.1094527532  0.7402278217  0.6129461856 
##           741           742           743           744           745 
##  0.0904205801 -0.1198330351 -0.1721256833 -0.2992950743 -0.0523167227 
##           746           747           748           749           750 
##  0.0167552642  0.7165526158 -0.4410359088 -0.1148579102 -0.4274054890 
##           751           752           753           754           755 
## -0.4173774822 -0.5119455543 -0.0196845364  0.1036672995  1.4609009554 
##           756           757           758           759           760 
## -0.0205983201  0.2165714796 -0.5749746165 -0.0108618668  0.9897722441 
##           761           762           763           764           765 
##  0.0882629495 -0.4595990155 -0.3066031525 -0.3168788737  0.1285096017 
##           766           767           768           769           770 
##  0.0082128297 -0.1357518979 -0.0880843486 -0.0285891064  0.1639921638 
##           771           772           773           774           775 
##  0.7349830490  0.1030151482  0.3668470407  0.3043536603 -0.0865337379 
##           776           777           778           779           780 
##  0.0190881500 -0.0733130629 -0.2338413024 -0.0876257107 -0.0471867818 
##           781           782           783           784           785 
## -0.1896162043 -0.9476357944 -0.1265354970 -0.5901581424 -0.1872456262 
##           786           787           788           789           790 
##  0.0661661157 -0.0379640751 -0.5919353388  0.1719828160  0.0507577209 
##           791           792           793           794           795 
## -0.3429530854 -0.7868159943 -0.1320744848 -0.7112303390 -0.0051981248 
##           796           797           798           799           800 
## -0.1076847187 -0.3112917096  0.0236814730 -0.0277597516 -0.3365799929 
##           801           802           803           804           805 
## -0.0525118491  0.0058596882 -0.3202612582  1.0205373024 -0.6445217490 
##           806           807           808           809           810 
## -0.1588030457  1.2434466151 -0.3529626674 -0.8502265360 -0.1410293356 
##           811           812           813           814           815 
##  0.0636376404 -0.0227634630  0.1522529109  0.0543891293 -0.1853932685 
##           816           817           818           819           820 
## -0.4941659363 -0.2182928012 -0.0805483549 -0.5380646809  0.6605296964 
##           821           822           823           824           825 
## -0.1749769637 -0.2676899183 -0.5018227111 -0.0037456981  0.0944135888 
##           826           827           828           829           830 
##  0.1656693610 -0.2046523692 -0.3421089276  0.1031833614 -0.0356138713 
##           831           832           833           834           835 
## -0.0106093103 -0.1416499529  0.0980073796 -0.0503014662 -0.2168770902 
##           836           837           838           839           840 
## -0.1495830581 -0.3919062484  0.0565412977  0.1228187898  0.0324828845 
##           841           842           843           844           845 
## -0.7591642062  0.0939693333  0.7234345785 -0.6686457772 -0.0460754931 
##           846           847           848           849           850 
## -0.2734844224 -0.0577472372 -0.5786265692 -0.3218674341 -0.0679453020 
##           851           852           853           854           855 
##  0.1735406958  0.0920190888 -0.0325514670  0.1945394818 -0.5286845705 
##           856           857           858           859           860 
## -0.4734094058 -0.0893092114 -0.0961979189  1.4856580920 -0.0247289427 
##           861           862           863           864           865 
##  0.2315592898  0.0661977881  0.0706651167 -0.0135094784 -0.0689150085 
##           866           867           868           869           870 
## -0.1027248373 -0.9177921152 -0.1276553689  0.1294819102  0.1631038551 
##           871           872           873           874           875 
## -0.2073947194 -0.2140940240 -0.2007400324 -0.1603541586  0.1844368262 
##           876           877           878           879           880 
## -0.2723697218  1.0497802294  0.1113064017 -0.1702789401 -0.0431775343 
##           881           882           883           884           885 
## -0.0449872409 -0.2272710837 -0.1104043188 -0.0859946178  0.2346164018 
##           886           887           888           889           890 
## -0.2552086270 -0.6704866692 -0.1942130508 -0.8060840115 -0.0027597343 
##           891           892           893           894           895 
## -0.7167257821  0.1355531522  0.0496062123 -0.0440648708  0.0326801428 
##           896           897           898           899           900 
## -0.0956868219 -0.4971066225 -0.1869100818 -0.5862372574 -0.1890310285 
##           901           902           903           904           905 
##  0.0145304647 -0.2770093589  0.1312466916 -0.2284920980 -0.0268154460 
##           906           907           908           909           910 
##  0.0838264617  0.0590312454 -0.1063077036  0.0483366812 -0.3175154672 
##           911           912           913           914           915 
## -0.2373649811  0.9825740745  0.2207481956 -0.0499450392 -0.0154097343 
##           916           917           918           919           920 
## -0.4784842100 -0.5074215292 -0.0315257022  0.0609233542 -0.2100302865 
##           921           922           923           924           925 
##  0.1139348511  0.0138452625 -0.2346720007 -0.3832963306 -0.1591635961 
##           926           927           928           929           930 
##  0.9324053394  0.1162320287  0.1873360495 -0.0446510563 -0.2302318832 
##           931           932           933           934           935 
## -0.5235442345 -0.1565189970  0.1966072808 -0.2047007050 -0.2410889273 
##           936           937           938           939           940 
##  0.0484218120  1.3601032297  0.3111173229 -0.0897572614 -0.0939891016 
##           941           942           943           944           945 
## -0.7661368864 -0.1720107627 -0.2803661000 -0.4531286045 -0.0878424936 
##           946           947           948           949           950 
## -0.0257002422 -0.1476342905  0.1828632400 -0.2185231531  0.0607106997 
##           951           952           953           954           955 
##  0.1784960145 -0.1119029216 -0.0945173275  0.0048762211 -0.3041273530 
##           956           957           958           959           960 
## -0.4090926222 -0.1891911860  1.2351021055  0.0325941046  1.0535114320 
##           961           962           963           964           965 
## -0.1359993553 -0.3186510883  0.0451152287  0.1497895397  0.8775437370 
##           966           967           968           969           970 
## -0.2271792761 -0.6001582460 -0.0360690069  0.0736472787  0.1449862830 
##           971           972           973           974           975 
##  0.1168655936 -0.0904635037 -0.1604480095 -0.5833987970 -0.6578005121 
##           976           977           978           979           980 
## -0.2472480350 -0.2730562876 -0.3662721064  0.0289831065 -0.2684729789 
##           981           982           983           984           985 
##  0.9233767733 -0.1594043116 -0.2024285002  1.3243807068  0.4841443149 
##           986           987           988           989           990 
## -0.0275491376  0.0449662242  1.2326885043 -0.3272890383 -0.0686189001 
##           991           992           993           994           995 
## -0.0762014698  0.0678769005  0.0202279218 -0.2029386152 -0.0906213291 
##           996           997           998           999          1000 
##  0.2089353940 -0.0003468499 -0.0130450803  0.0662257921 -0.1562307591 
##          1001          1002          1003          1004          1005 
## -0.2189907144  0.6263085802 -0.6063185499  0.8367184533  0.1170335411 
##          1006          1007          1008          1009          1010 
## -0.1113272868 -0.0374594767 -0.5029135024  1.8192319422  0.0258318501 
##          1011          1012          1013          1014          1015 
## -0.0134072881 -0.5523252963  1.0331140726 -0.0790649615 -0.2126010616 
##          1016          1017          1018          1019          1020 
##  0.0663524143  0.0257263681 -0.1049532197  0.0886606756  2.0589573688 
##          1021          1022          1023          1024          1025 
## -0.2009293673  0.7883320325 -0.0635852403 -0.3455687024 -0.1951087290 
##          1026          1027          1028          1029          1030 
## -0.5167773190  0.2660578180  1.9554336594 -0.1047730054  0.2325978663 
##          1031          1032          1033          1034          1035 
## -0.5528398544 -0.2039901429 -0.1781997548  0.2214912330 -0.0559983241 
##          1036          1037          1038          1039          1040 
##  0.2134916733  0.7761206962 -0.0088342130 -0.4039417333  2.1052365781 
##          1041          1042          1043          1044          1045 
## -0.3324569414 -0.3462076607  0.8519554244 -0.3314262340 -0.0209871236 
##          1046          1047          1048          1049          1050 
## -0.4721827714 -0.0285240059  0.8234989002 -0.0099038325 -0.1220306764 
##          1051          1052          1053          1054          1055 
## -0.1048914268  0.1218415992 -0.0187676089 -0.5068493395 -0.1612034047 
##          1056          1057          1058          1059          1060 
## -0.0071990965 -0.0967403519  0.7244418039 -0.5287476070 -0.2531106329 
##          1061          1062          1063          1064          1065 
## -0.6785837053  0.0301139530 -0.2512317403  0.0395380600  0.2175765622 
##          1066          1067          1068          1069          1070 
## -0.0402473203 -0.1062734024 -0.3338630446  0.2085757007 -0.0042441313 
##          1071          1072          1073          1074          1075 
##  0.1747959473  0.0505938594 -0.5374410271  0.1324206408  0.2482421031 
##          1076          1077          1078          1079          1080 
## -0.1837114263 -0.0735983946 -0.3752730312  0.4465161826  0.1069709236 
##          1081          1082          1083          1084          1085 
##  1.6162103663 -0.1854407699 -0.0138939409 -0.3185545465  0.1534841429 
##          1086          1087          1088          1089          1090 
## -0.3808886087 -0.0059319473 -0.0306170527 -0.2135147335  0.0472515424 
##          1091          1092          1093          1094          1095 
## -0.0773263512  0.0287880447 -0.0373316180  0.7467023295  0.1077210356 
##          1096          1097          1098          1099          1100 
##  0.5287589802 -0.1007761523 -0.7553811268  0.8012913253 -0.2645251766 
##          1101          1102          1103          1104          1105 
## -0.3087424305  0.0877176299 -0.4287592225 -0.1004142873  1.1273217714 
##          1106          1107          1108          1109          1110 
## -0.0518389393 -0.0527779537  0.1233490459 -0.3754830275  0.1483502420 
##          1111          1112          1113          1114          1115 
##  0.0433414265  0.1793213545 -0.5294074669  0.1807136400 -0.3393278057 
##          1116          1117          1118          1119          1120 
## -0.0476271802  0.2038806748  0.6145747888  0.2927428307  0.2594668544 
##          1121          1122          1123          1124          1125 
##  0.6860921649 -0.1333519995 -0.1243861751  1.4222240198  0.7558779815 
##          1126          1127          1128          1129          1130 
##  0.1501250673 -0.0721928613 -0.1204760386  0.8488268115 -0.3239746867 
##          1131          1132          1133          1134          1135 
##  0.2718404805 -0.3345012694  0.4827889427  0.1519042947  1.4007054422 
##          1136          1137          1138          1139          1140 
##  0.1532852339 -0.0164868909 -0.1787502204 -0.4397126837  0.9944565580 
##          1141          1142          1143          1144          1145 
## -0.1486772829  0.0216356166  1.0408323936 -0.1384543996 -0.0370008846 
##          1146          1147          1148          1149          1150 
##  0.0664237337 -0.1210736542 -0.3127666752  0.1001377911 -0.3104706278 
##          1151          1152          1153          1154          1155 
## -0.1859800717 -0.0303529563  0.0556027503 -0.1554271000  0.2015198035 
##          1156          1157          1158          1159          1160 
##  0.2300812767  0.9532034689  1.4752663396 -0.2139741912 -0.4346974866 
##          1161          1162          1163          1164          1165 
## -0.0892839454 -0.2703524492  1.2268553878 -0.1617444339 -0.0341651347 
##          1166          1167          1168          1169          1170 
## -0.1171479412 -0.1523591476  0.0003405481 -0.2220140030 -0.1268716528 
##          1171          1172          1173          1174          1175 
##  0.3596448628 -0.4729336961 -0.1326892523 -0.0519202638 -0.1156694908 
##          1176          1177          1178          1179          1180 
## -0.4248695280 -0.6180686540 -0.0874568887 -0.2745291594 -0.2445332787 
##          1181          1182          1183          1184          1185 
## -0.1322023405 -0.2907685427 -0.4270002341  0.0544183675  0.0977765627 
##          1186          1187          1188          1189          1190 
##  0.0963241724  0.9118574716  0.0472449335 -0.4857388760  1.3139635133 
##          1191          1192          1193          1194          1195 
## -0.0248264130  0.7103310956  0.0740970643 -0.1343246390 -0.1330660733 
##          1196          1197          1198          1199          1200 
##  1.9201808411  0.9205442745 -0.3224172495 -0.1285510702 -0.0159799312 
##          1201          1202          1203          1204          1205 
##  0.0077238028 -0.1080619204 -0.5321798373 -0.0281979155  0.4199859957 
##          1206          1207          1208          1209          1210 
## -0.0045123891  1.0689447274  0.2099176683 -0.3683868847 -0.0488997250 
##          1211          1212          1213          1214          1215 
## -0.1857211754  1.1553521077 -0.3219819324  0.0173813062 -0.1295813138 
##          1216          1217          1218          1219          1220 
##  1.4895955081 -0.2382892037 -0.2576555164 -0.0341591952  0.0918651862 
##          1221          1222          1223          1224          1225 
##  0.0392891799 -0.0400776897 -0.0817135715  0.6857748327 -0.0161604690 
##          1226          1227          1228          1229          1230 
## -0.2785479399  0.1738879696 -0.1610157160 -0.1085719010  0.0112670280 
##          1231          1232          1233          1234          1235 
##  0.1756211741  0.4670122429  0.2209169987  0.0538133695  0.0277570256 
##          1236          1237          1238          1239          1240 
## -0.4613238284  0.2155202453  0.0605055164  0.1514495172 -0.3370576089 
##          1241          1242          1243          1244          1245 
## -0.1315022415 -0.3052620071  0.3510747869 -0.4168732136 -0.8822682879 
##          1246          1247          1248          1249          1250 
##  0.2643633872  0.1222585057  0.0630813757 -0.5821682659  0.3367615756 
##          1251          1252          1253          1254          1255 
##  0.0449420085 -0.6773293056  0.1699336500  0.7791961020 -0.2703293671 
##          1256          1257          1258          1259          1260 
## -0.2686439946  0.0671274728  0.0811963353  0.9248201047  0.0879660759 
##          1261          1262          1263          1264          1265 
## -0.0570882812 -0.4247285593 -0.0867211674 -0.0890568005  0.0519972937 
##          1266          1267          1268          1269          1270 
## -0.7586919906 -0.0324229284  0.6377921045 -0.5125764950  0.0432388002 
##          1271          1272          1273          1274          1275 
## -0.2934342594 -0.3354538222  0.6472033411 -0.2335348053 -0.1133550360 
##          1276          1277          1278          1279          1280 
##  0.0353068889 -0.2245806914 -0.2310638019 -0.3894164719  0.0810433353 
##          1281          1282          1283          1284          1285 
## -0.1464216820 -0.5106108383  0.2580660437 -0.4300677090 -0.2820695871 
##          1286          1287          1288          1289          1290 
##  0.0223918318 -0.0231342966 -0.1046413390  0.8989668885 -0.1935014958 
##          1291          1292          1293          1294          1295 
##  0.1835144286  0.9113687735 -0.6621025686  0.1159713320  0.0762484563 
##          1296          1297          1298          1299          1300 
## -0.3212361203 -0.3871758727 -0.0240066639 -0.0543091723  0.0107479154 
##          1301          1302          1303          1304          1305 
##  0.4469918963 -0.2600710565 -0.0953690000  0.0332322909 -0.4695399971 
##          1306          1307          1308          1309          1310 
## -0.4090945870 -0.2328153004 -0.1600655707  0.5858047988 -0.1196805454 
##          1311          1312          1313          1314          1315 
## -0.0689967238 -0.1843932786 -0.3989200045  0.9574756835 -0.1518888127 
##          1316          1317          1318          1319          1320 
##  1.4705125153 -0.3587076793 -1.0243627672  1.0498350999  0.0624071135 
##          1321          1322          1323          1324          1325 
##  0.0122688173 -0.7164045104 -0.0780122620  0.0789775515 -0.1691129922 
##          1326          1327          1328          1329          1330 
##  0.0073892799 -0.1330684563 -0.0625423489  1.9000844088 -0.0807621928 
##          1331          1332          1333          1334          1335 
##  0.1482979104  1.0557375974 -0.0329186663  0.0735973121 -0.2032739967 
##          1336          1337          1338 
## -0.5577794189 -0.4184240324 -0.6899507897
valores_ajustados_log_ols <- fitted(ols_model)

plot(valores_ajustados_log_ols, residuos_log_ols, main = "Residuos vs. Ajustes del LOG", xlab = "Valores Ajustados", ylab = "Residuos")

# Pruebas del modelo ols y ols log

# Prueba de multicolinealidad
vif_result <- car::vif(ols_model)# Factor de inflación de la varianza
vif_result
##      age      bmi   smoker 
## 1.012764 1.012146 1.000672
#No hay multicolinealidad entre la variable predictora y el resto de las variables predictoras.

# Prueba de heterocedasticidad (Test de Breusch-Pagan)
bp_test <- bptest(ols_model)
bp_test
## 
##  studentized Breusch-Pagan test
## 
## data:  ols_model
## BP = 112.59, df = 3, p-value < 2.2e-16
#El valor p es menor que el nivel de significancia (p < 0.05), hay evidencia de heterocedasticidad y se rechaza la hipótesis nula de homocedasticidad.

# Prueba de autocorrelación serial (Test de Durbin-Watson)
dw_test <- dwtest(ols_model)
dw_test
## 
##  Durbin-Watson test
## 
## data:  ols_model
## DW = 2.0765, p-value = 0.9191
## alternative hypothesis: true autocorrelation is greater than 0
#El valor del estadístico de prueba está cerca de 2, lo que sugiere que los residuos del modelo de regresión no muestran una autocorrelación serial significativa. Un valor de DW cercano a 2 indica que no hay autocorrelación serial.

# Prueba de normalidad de los residuos (Anderson-Darling)
ad_test <- ad.test(ols_model$residuals)
ad_test
## 
##  Anderson-Darling normality test
## 
## data:  ols_model$residuals
## A = 41.885, p-value < 2.2e-16
#Dado que el valor p es extremadamente bajo, se rechaza la hipótesis nula de que los residuos siguen una distribución normal. Los residuos del modelo de regresión no se ajustan a una distribución normal según el test de Anderson-Darling. 

# Imprimir resultados
print("Prueba de Multicolinealidad (VIF):")
## [1] "Prueba de Multicolinealidad (VIF):"
print(vif_result)
##      age      bmi   smoker 
## 1.012764 1.012146 1.000672
print("Prueba de Heterocedasticidad (Breusch-Pagan):")
## [1] "Prueba de Heterocedasticidad (Breusch-Pagan):"
print(bp_test)
## 
##  studentized Breusch-Pagan test
## 
## data:  ols_model
## BP = 112.59, df = 3, p-value < 2.2e-16
print("Prueba de Autocorrelación Serial (Durbin-Watson):")
## [1] "Prueba de Autocorrelación Serial (Durbin-Watson):"
print(dw_test)
## 
##  Durbin-Watson test
## 
## data:  ols_model
## DW = 2.0765, p-value = 0.9191
## alternative hypothesis: true autocorrelation is greater than 0
#print("Prueba de Autocorrelación Espacial (Moran's I):")
#print(moran_test)
print("Prueba de Normalidad de los Residuos (Anderson-Darling):")
## [1] "Prueba de Normalidad de los Residuos (Anderson-Darling):"
print(ad_test)
## 
##  Anderson-Darling normality test
## 
## data:  ols_model$residuals
## A = 41.885, p-value < 2.2e-16
# Prueba de multicolinealidad
vif_result <- car::vif(log_ols_model)# Factor de inflación de la varianza
vif_result
## log(age) log(bmi)   smoker 
## 1.012653 1.012136 1.000521
#Los valores de VIF cercanos a 1 para todas las variables indican que no hay evidencia sustancial de multicolinealidad entre las variables incluidas en el modelo. 

# Prueba de heterocedasticidad (Test de Breusch-Pagan)
bp_test <- bptest(log_ols_model)
bp_test
## 
##  studentized Breusch-Pagan test
## 
## data:  log_ols_model
## BP = 102.39, df = 3, p-value < 2.2e-16
#Dado que el valor p es muy pequeño, se rechaza la hipótesis nula de que no hay heterocedasticidad en los residuos. En otras palabras, hay evidencia de heterocedasticidad en los residuos del modelo de regresión. Podriamos utilizar métodos de ponderación para dar más peso a las observaciones con menor varianza y menos peso a las observaciones con mayor varianza. Esto puede ayudar a compensar la heterocedasticidad y mejorar la precisión de las estimaciones.

# Prueba de autocorrelación serial (Test de Durbin-Watson)
dw_test <- dwtest(log_ols_model)
dw_test
## 
##  Durbin-Watson test
## 
## data:  log_ols_model
## DW = 2.0265, p-value = 0.6861
## alternative hypothesis: true autocorrelation is greater than 0
#El valor del estadístico de prueba está cerca de 2, lo que sugiere que los residuos del modelo de regresión no muestran una autocorrelación serial significativa. Un valor de DW cercano a 2 indica que no hay autocorrelación serial.

# Prueba de normalidad de los residuos (Anderson-Darling)
ad_test <- ad.test(log_ols_model$residuals)
ad_test
## 
##  Anderson-Darling normality test
## 
## data:  log_ols_model$residuals
## A = 55.307, p-value < 2.2e-16
#Dado que el valor p es mayor que el nivel de significancia, no hay suficiente evidencia para rechazar la hipótesis nula de que no hay autocorrelación serial en los residuos del modelo. En este caso, la hipótesis nula sugiere que no hay autocorrelación positiva en los residuos del modelo.

# Imprimir resultados
print("Prueba de Multicolinealidad (VIF):")
## [1] "Prueba de Multicolinealidad (VIF):"
print(vif_result)
## log(age) log(bmi)   smoker 
## 1.012653 1.012136 1.000521
print("Prueba de Heterocedasticidad (Breusch-Pagan):")
## [1] "Prueba de Heterocedasticidad (Breusch-Pagan):"
print(bp_test)
## 
##  studentized Breusch-Pagan test
## 
## data:  log_ols_model
## BP = 102.39, df = 3, p-value < 2.2e-16
print("Prueba de Autocorrelación Serial (Durbin-Watson):")
## [1] "Prueba de Autocorrelación Serial (Durbin-Watson):"
print(dw_test)
## 
##  Durbin-Watson test
## 
## data:  log_ols_model
## DW = 2.0265, p-value = 0.6861
## alternative hypothesis: true autocorrelation is greater than 0
#print("Prueba de Autocorrelación Espacial (Moran's I):")
#print(moran_test)
print("Prueba de Normalidad de los Residuos (Anderson-Darling):")
## [1] "Prueba de Normalidad de los Residuos (Anderson-Darling):"
print(ad_test)
## 
##  Anderson-Darling normality test
## 
## data:  log_ols_model$residuals
## A = 55.307, p-value < 2.2e-16

b.SAR

No podemos realizar este modelo

c.SEM

No podemos realizar este modelo

d.XGBoost Regresión

df_alt <- df %>% select(age,bmi,smoker,expenses,children,sex, region)

df_alt$bmi <- as.numeric(df_alt$bmi)
df_alt$expenses <- as.numeric(df_alt$expenses)
df_alt$smoker_numeric <- as.numeric(df_alt$smoker == "yes")
df_alt$sex_numeric <- as.numeric(df_alt$sex == "yes")
df_alt$reg_numeric <- as.numeric(df_alt$region == "yes")

df_alt$age     <- log(df_alt$age)
df_alt$bmi <- log(df_alt$bmi)
df_alt$smoker_numeric <- log(df_alt$smoker_numeric) 
df_alt$expenses <- log(df_alt$expenses)
df_alt$children <- log(df_alt$children + 0.01)
df_alt$sex_numeric <- log(df_alt$sex_numeric) 
df_alt$reg_numeric     <- log(df_alt$reg_numeric)

summary(df_alt)
##       age             bmi        smoker        expenses         children       
##  Min.   :2.890   Min.   :2.773   no :1064   Min.   : 7.023   Min.   :-4.60517  
##  1st Qu.:3.296   1st Qu.:3.270   yes: 274   1st Qu.: 8.464   1st Qu.:-4.60517  
##  Median :3.664   Median :3.414              Median : 9.147   Median : 0.00995  
##  Mean   :3.597   Mean   :3.403              Mean   : 9.099   Mean   :-1.67105  
##  3rd Qu.:3.932   3rd Qu.:3.547              3rd Qu.: 9.720   3rd Qu.: 0.69813  
##  Max.   :4.159   Max.   :3.972              Max.   :11.063   Max.   : 1.61144  
##      sex            region    smoker_numeric  sex_numeric    reg_numeric  
##  female:662   northeast:324   Min.   :-Inf   Min.   :-Inf   Min.   :-Inf  
##  male  :676   northwest:325   1st Qu.:-Inf   1st Qu.:-Inf   1st Qu.:-Inf  
##               southeast:364   Median :-Inf   Median :-Inf   Median :-Inf  
##               southwest:325   Mean   :-Inf   Mean   :-Inf   Mean   :-Inf  
##                               3rd Qu.:-Inf   3rd Qu.:-Inf   3rd Qu.:-Inf  
##                               Max.   :   0   Max.   :-Inf   Max.   :-Inf
set.seed(123) # What is set.seed()? We want to make sure that we get the same results for randomization each time you run the script.   
cv_data   <- createDataPartition(y = df$expenses, p=0.7, list=F)
cv_train = df_alt[cv_data, ]
cv_test = df_alt[-cv_data, ]

# define explanatory variables (X's) and dependent variable (Y) in training set
train_x = data.matrix(cv_train[, -7])
train_y = cv_train[,7]

# define explanatory variables (X's) and dependent variable (Y) in testing set
test_x = data.matrix(cv_test[, -7])
test_y = cv_test[, 7]

any(is.infinite(test_y))
## [1] FALSE
train_x[is.infinite(train_x)] <- NA
test_x[is.infinite(test_x)] <- NA

# Calcular la media de cada columna
means <- colMeans(train_x, na.rm = TRUE)

# Imputar los valores NA con la media de cada columna
for (i in 1:ncol(train_x)) {
  train_x[is.na(train_x[, i]), i] <- means[i]
}

# Calcular la media de cada columna
means2 <- colMeans(test_x, na.rm = TRUE)

# Imputar los valores NA con la media de cada columna
for (i in 1:ncol(test_x)) {
  test_x[is.na(test_x[, i]), i] <- means2[i]
}

any(is.na(train_x))
## [1] TRUE
any(is.infinite(train_x))
## [1] FALSE
any(is.na(train_y))
## [1] FALSE
any(is.infinite(train_y))
## [1] FALSE
any(is.na(test_x))
## [1] TRUE
any(is.infinite(test_x))
## [1] FALSE
any(is.na(test_y))
## [1] FALSE
# define final training and testing sets
xgb_train = xgb.DMatrix(data = train_x, label = train_y)
xgb_test  = xgb.DMatrix(data = test_x, label = test_y)

# Lets fit XGBoost regression model and display RMSE for both training and testing data at each round
watchlist = list(train=xgb_train, test=xgb_test)
model_xgb = xgb.train(data=xgb_train, max.depth=3, watchlist=watchlist, nrounds=70) # the more the number of rounds selected, the longer the time to display the results. 
## [1]  train-rmse:1.786677 test-rmse:1.777907 
## [2]  train-rmse:1.465217 test-rmse:1.468778 
## [3]  train-rmse:1.269669 test-rmse:1.282215 
## [4]  train-rmse:1.158307 test-rmse:1.183643 
## [5]  train-rmse:1.094564 test-rmse:1.134762 
## [6]  train-rmse:1.061324 test-rmse:1.107692 
## [7]  train-rmse:1.035595 test-rmse:1.101080 
## [8]  train-rmse:1.023131 test-rmse:1.092040 
## [9]  train-rmse:1.014099 test-rmse:1.092320 
## [10] train-rmse:1.007996 test-rmse:1.090938 
## [11] train-rmse:1.002551 test-rmse:1.092058 
## [12] train-rmse:0.997948 test-rmse:1.094961 
## [13] train-rmse:0.993285 test-rmse:1.093392 
## [14] train-rmse:0.990637 test-rmse:1.093819 
## [15] train-rmse:0.984490 test-rmse:1.093381 
## [16] train-rmse:0.977267 test-rmse:1.095828 
## [17] train-rmse:0.975728 test-rmse:1.095132 
## [18] train-rmse:0.968872 test-rmse:1.095716 
## [19] train-rmse:0.964503 test-rmse:1.096894 
## [20] train-rmse:0.958036 test-rmse:1.099029 
## [21] train-rmse:0.956294 test-rmse:1.098408 
## [22] train-rmse:0.955054 test-rmse:1.099032 
## [23] train-rmse:0.952409 test-rmse:1.099591 
## [24] train-rmse:0.945499 test-rmse:1.098905 
## [25] train-rmse:0.937576 test-rmse:1.099639 
## [26] train-rmse:0.932956 test-rmse:1.097553 
## [27] train-rmse:0.931134 test-rmse:1.097739 
## [28] train-rmse:0.925727 test-rmse:1.099623 
## [29] train-rmse:0.919428 test-rmse:1.100694 
## [30] train-rmse:0.916376 test-rmse:1.097990 
## [31] train-rmse:0.915067 test-rmse:1.097510 
## [32] train-rmse:0.912523 test-rmse:1.096620 
## [33] train-rmse:0.911708 test-rmse:1.098472 
## [34] train-rmse:0.904880 test-rmse:1.098580 
## [35] train-rmse:0.903390 test-rmse:1.098503 
## [36] train-rmse:0.898203 test-rmse:1.098510 
## [37] train-rmse:0.890675 test-rmse:1.106326 
## [38] train-rmse:0.886732 test-rmse:1.107119 
## [39] train-rmse:0.881864 test-rmse:1.108591 
## [40] train-rmse:0.881127 test-rmse:1.109747 
## [41] train-rmse:0.878628 test-rmse:1.110082 
## [42] train-rmse:0.873657 test-rmse:1.111683 
## [43] train-rmse:0.872837 test-rmse:1.112750 
## [44] train-rmse:0.870946 test-rmse:1.113360 
## [45] train-rmse:0.866501 test-rmse:1.114206 
## [46] train-rmse:0.863333 test-rmse:1.114701 
## [47] train-rmse:0.859833 test-rmse:1.113659 
## [48] train-rmse:0.856513 test-rmse:1.109477 
## [49] train-rmse:0.855377 test-rmse:1.109559 
## [50] train-rmse:0.849853 test-rmse:1.109603 
## [51] train-rmse:0.847040 test-rmse:1.108344 
## [52] train-rmse:0.838973 test-rmse:1.112409 
## [53] train-rmse:0.835755 test-rmse:1.109960 
## [54] train-rmse:0.833828 test-rmse:1.110243 
## [55] train-rmse:0.832112 test-rmse:1.109300 
## [56] train-rmse:0.827406 test-rmse:1.109738 
## [57] train-rmse:0.825360 test-rmse:1.109940 
## [58] train-rmse:0.821850 test-rmse:1.110381 
## [59] train-rmse:0.819852 test-rmse:1.108141 
## [60] train-rmse:0.818262 test-rmse:1.108806 
## [61] train-rmse:0.816802 test-rmse:1.109459 
## [62] train-rmse:0.814251 test-rmse:1.110088 
## [63] train-rmse:0.811915 test-rmse:1.109807 
## [64] train-rmse:0.807707 test-rmse:1.112655 
## [65] train-rmse:0.804693 test-rmse:1.114469 
## [66] train-rmse:0.803032 test-rmse:1.113363 
## [67] train-rmse:0.797515 test-rmse:1.110922 
## [68] train-rmse:0.796676 test-rmse:1.111487 
## [69] train-rmse:0.793327 test-rmse:1.110766 
## [70] train-rmse:0.788872 test-rmse:1.108805
# Looks like the lowest RMSE for both training and test dataset is achieved at 59 round. 
# Lets estimate our final regression model
reg_xgb = xgboost(data = xgb_train, max.depth = 3, nrounds = 59, verbose = 0) # setting verbose = 0 avoids to display the training and testing error for each round. 
prediction_xgb_test<-predict(reg_xgb, xgb_test)
rmse(prediction_xgb_test, cv_test$expenses)
## [1] 6.662972
# Lets do some diagnostic check of regression residuals 
xgb_reg_residuals<-cv_test$expenses - prediction_xgb_test
plot(xgb_reg_residuals, xlab= "Dependent Variable", ylab = "Residuals", main = 'XGBoost Regression Residuals')
abline(0,0)

# Plot first 3 trees of model
xgb.plot.tree(model=reg_xgb, trees=0:2)
importance_matrix <- xgb.importance(model = reg_xgb)
xgb.plot.importance(importance_matrix, xlab = "Explanatory Variables X's Importance")

e.Decision Trees

decision_tree_model <- rpart(log(expenses) ~ log(bmi) + log(age) + log(children + 0.01) + smoker , data = train)

# summary(decision_tree_regression)
plot(decision_tree_model, compress = TRUE)
text(decision_tree_model, use.n = TRUE)

rpart.plot(decision_tree_model)

# Hacer predicciones con el modelo de árbol de decisión en los datos de entrenamiento
decision_tree_predictions <- predict(decision_tree_model, train)

# Calcular los residuos
residuals <- decision_tree_predictions - log(train$expenses)

# Calcular el RMSE
rmsedt <- sqrt(mean(residuals^2))

# Mostrar el valor del RMSE
print(rmsedt) #0.4010
## [1] 0.4010215

f.Random Forest

rf_model <- randomForest(expenses ~ age + bmi  +  children + smoker + sex + region, data = train, proximity=TRUE)

print(rf_model)
## 
## Call:
##  randomForest(formula = expenses ~ age + bmi + children + smoker +      sex + region, data = train, proximity = TRUE) 
##                Type of random forest: regression
##                      Number of trees: 500
## No. of variables tried at each split: 2
## 
##           Mean of squared residuals: 21873431
##                     % Var explained: 85.31
# Prediction & Confusion Matrix – test data
rf_prediction <- predict(rf_model,cv_test)

# confusionMatrix(rf_prediction_train_data, train$MEDV) # a confusion matrix is essentially a table that categorizes predictions against actual values.
RMSE_rf <- rmse(rf_prediction, cv_test$expenses)
RMSE_rf #8521.414
## [1] 8303.481
# Evalute Variables' Importance
# How to interpret varImpPlot()? The higher the value of mean decrease accuracy, the higher the importance of the variable in the model. 
# In other words, mean decrease accuracy represents how much removing each variable reduces the accuracy of the model.
varImpPlot(rf_model, n.var = 5, main = "Top 5 - Variable") # It displays a variable importance plot from the random forest model. 

importance(rf_model)                                        # It is worth mentioning that IncNodePurity by how much the model error increases by dropping each of the specified explanatory variables. 
##          IncNodePurity
## age        19733986905
## bmi        21699766084
## children    3102584526
## smoker     98443051346
## sex         1307424273
## region      3137177082
                                                            # Briefly, varImpPlot() indicates each variable's importance in explaining the performance of the dependent variable (Y).

g.Neural Networks Regresión

# Lets estimate a Neural Network Regression
summary(train)
##       age            sex           bmi           children     smoker   
##  Min.   :18.00   female:530   Min.   :16.00   Min.   :0.000   no :850  
##  1st Qu.:27.00   male  :542   1st Qu.:26.40   1st Qu.:0.000   yes:222  
##  Median :39.00                Median :30.50   Median :1.000            
##  Mean   :39.19                Mean   :30.76   Mean   :1.081            
##  3rd Qu.:51.00                3rd Qu.:34.80   3rd Qu.:2.000            
##  Max.   :64.00                Max.   :53.10   Max.   :5.000            
##        region       expenses    
##  northeast:254   Min.   : 1122  
##  northwest:257   1st Qu.: 4745  
##  southeast:309   Median : 9382  
##  southwest:252   Mean   :13318  
##                  3rd Qu.:16604  
##                  Max.   :63770
train$bmi <- as.numeric(train$bmi)
train$expenses <- as.numeric(train$expenses)
train$smoker_numeric <- as.numeric(train$smoker == "yes")
train$sex_numeric <- as.numeric(train$sex == "yes")
train$reg_numeric <- as.numeric(train$region == "yes")

nn_model <- neuralnet(expenses ~ age + sex_numeric + bmi + children + reg_numeric + smoker_numeric, data = train, hidden = c(5, 3), linear.output = TRUE) 

# Plot the neural network 
plot(nn_model)

# Hacer predicciones con el modelo de red neuronal en los datos de entrenamiento
nn_predictions <- predict(nn_model, train)

# Calcular los residuos
residuals <- nn_predictions - train$expenses

# Calcular el RMSE
rmsenn <- sqrt(mean(residuals^2))

# Lets do some diagnostic check of regression residuals 
residuals<-train$expenses - nn_predictions
plot(residuals, xlab= "Dependent Variable", ylab = "Residuals", main = 'Neural Net Regression Residuals')
abline(0,0)

# Mostrar el valor del RMSE
print(rmsenn) #12201.58
## [1] 12201.58

Principales hallagazos encontrados durante el EDA:

A travez del EDA pudimos observar:

  • Al examinar los gráficos de dispersión, notamos que existe una tendencia clara: a medida que la edad aumenta, también lo hacen los gastos médicos.

  • Observamos que las personas que fuman y tienen un índice de masa corporal elevado tienden a registrar gastos médicos más altos.

  • Observamos que la base de datos no presenta NA’s.

  • Podemos observar que el gasto entre hombres y mujeres es casi el mismo porque sus medias se encuentran igual pero el grupo de los homres presenta una dispersion mayor

  • Podemos observar que la region southeast es la que genera mayor expenses,a traves del analisis del boxplot

  • Ademas que tambien podemos obversar que la region southeast es la que genera un BMI mas alto lo que puede ser un factor importante

RMSE de los diferentes modelos

# Datos 
model_names <- c("OLS", "OLS Log", "XGBoost", "DT", "RF", "NN")  # Nombres de los modelos
rmse_values <- c(0.7475, 7517,6.6629 , 0.4010, 8521.414, 12201.58)  # Valores de RMSE correspondientes a cada modelo

# Crear un dataframe con los datos
rmse_data <- data.frame(Modelo = model_names, RMSE = rmse_values)

# Crear el gráfico de barras
barplot(rmse_data$RMSE, names.arg = rmse_data$Modelo, col = "skyblue", 
        main = "RMSE de Modelos Estimados", xlab = "Modelo", ylab = "RMSE")

# Seleccion del Modelo

El modelo que mejor se ajusta según el RMSE es el modelo de Decision Tree (DT) ya que tiene el valor de RMSE más bajo (0.4010).ya que un RMSE más bajo indica un mejor ajuste del modelo a los datos.otro modelo que pudiera ser buena opcion seria el ols ya que su rmse es bajo igaul pero presenta un aic alto, ademas de que hay evidencia de que presenta heterocedasticidad.

LS0tDQp0aXRsZTogIkFjdGl2aWRhZCAxIENvbmNlbnRyYWNpb24iDQphdXRob3I6ICJMdWlzIE1lbmRvemEgLSBBMDA4MjkwOTkiDQpkYXRlOiAiMjAyNC0wMy01Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQotLS0NCg0KIVtdKEM6XFxVc2Vyc1xcTHVpcyBSb2RyaWd1ZXpcXERvd25sb2Fkc1xcaW50ZWxpZ2VuY2lhLWFydGlmaWNpYWwtMS5qcGcpICANCg0KIyBJbnN0YWxhciBMaWJyZXJpYXMNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGZvcmVpZ24pICAgICAgIA0KbGlicmFyeShnZ3Bsb3QyKSAgICAgICAgDQpsaWJyYXJ5KGRwbHlyKSAgICAgICAgICANCmxpYnJhcnkobWFwdmlldykgICAgICAgIA0KbGlicmFyeShuYW5pYXIpICAgICAgICAgDQpsaWJyYXJ5KHRtYXApICAgICAgICAgICANCmxpYnJhcnkoUkNvbG9yQnJld2VyKSAgIA0KbGlicmFyeShkbG9va3IpICAgICAgICAgDQpsaWJyYXJ5KHJlZ2NsYXNzKSAgICAgIA0KbGlicmFyeShtY3Rlc3QpICAgICAgICAgDQpsaWJyYXJ5KGxtdGVzdCkgICAgICAgIA0KbGlicmFyeShzcGRlcCkgICAgICAgICAgDQpsaWJyYXJ5KHNmKSAgICAgICAgICAgIA0KbGlicmFyeShzcERhdGEpICAgICAgICAgDQpsaWJyYXJ5KHNwYXRpYWxyZWcpICAgICANCmxpYnJhcnkoY2FyZXQpICAgICAgICAgIA0KbGlicmFyeShlMTA3MSkgICAgICAgICANCmxpYnJhcnkoU3BhcnNlTSkgICAgICAgDQpsaWJyYXJ5KE1ldHJpY3MpICAgICAgICANCmxpYnJhcnkocmFuZG9tRm9yZXN0KSAgIA0KbGlicmFyeShqdG9vbHMpICAgICAgICANCmxpYnJhcnkoeGdib29zdCkgICAgICAgIA0KbGlicmFyeShEaWFncmFtbWVSKSAgICANCmxpYnJhcnkoZWZmZWN0cykgICAgICAgIA0KbGlicmFyeShzaGlueWpzKQ0KbGlicmFyeShzcCkNCmxpYnJhcnkoZ2VvUikNCmxpYnJhcnkoZ3N0YXQpDQpsaWJyYXJ5KGNhcmV0KQ0KbGlicmFyeShyZWFkdGV4dCkNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkobm9ydGVzdCkgDQpsaWJyYXJ5KHJwYXJ0LnBsb3QpDQpsaWJyYXJ5KG5ldXJhbG5ldCkNCmBgYA0KDQojIDEuUHJlZ3VudGFzDQojMSnCv1F1w6kgZXMgU3VwZXJ2aXNlZCBNYWNoaW5lIExlYXJuaW5nIHkgY3XDoWxlcyBzb24gYWxndW5hcyBkZSBzdXMgYXBsaWNhY2lvbmVzIGVuIEludGVsaWdlbmNpYSBkZSBOZWdvY2lvcz8NClVuIG1vZGVsbyBkZSBhcHJlbmRpemFqZSBzdXBlcnZpc2FkbyBlcyBhcXVlbCBhIGVsIHF1ZSBzZSBsZSBlbnRyZWdhbiBkYXRvcyBldGlxdWV0YWRvcywgcGFyYSByZWFsaXphciBwcmVkaWNjaW9uZXMgbyBjbGFzaWZpY2FjaW9uZXMgZGUgZXN0b3MgZGF0b3MgZGUgbWFuZXJhIHByZWNpc2EsIGFsZ3VuYXMgZGUgc3VzIHByaW5jaXBhbGVzIGFwbGljYWNpb25lcyBzb24gbGFzIGludmVzdGlnYWNpb25lcyBkZSBtZXJjYWRvLCBwYXJhIHNhYmVyIGN1YWwgZXMgZWwgbWVqb3IgcHVibGljbywgc2VnbWVudG8sIGN1YWwgZXMgbGEgbWVqb3IgdWJpY2FjaW9uIHBhcmEgdHUgcHJvZHVjdG8gZSBpbmNsdXNvIGN1YWwgZXMgZWwgbWVqb3IgbW9tZW50byBwYXJhIHZlbmRlciB0dSBwcm9kdWN0bywgdGFtYmllbiBwcHVlZGVuIGF5dWRhciBhIGZpamFyIHByZWNpb3MgZGluYW1pY29zIGRlIHZ1ZWxvcyBvIHZpYWplcywgYSB0cmF2ZXogZGUgZGF0b3MgcXVlIGVzdGFuIGVuIGNvbnN0YW50ZSBjYW1iaW8gY29tbyBsYSBlcG9jYSBkZWwgYcOxbywgY2xpbWEsIGRlbWFuZGEsIGVudHJlIG90cm9zDQoNCiMzKSDCv1F1w6kgZXMgbGEgUjIgQWp1c3RhZGE/IMK/UXXDqSBlcyBsYSBtw6l0cmljYSBSTVNFPyDCv0N1w6FsIGVzIGxhIGRpZmVyZW5jaWEgZW50cmUgbGEgUjIgQWp1c3RhZGEgeSBsYSBtw6l0cmljYSBSTVNFPyANCkxhIFIyIHkgZWwgUk1TRSBzb24gbWVkaWRhcyBvIG1ldG9kb3MgZGUgZXZhbHVhY2lvbiwgcGVybyBzZSBjZW50cmFuIGVuIGNvc2FzIGRpc3RpbnRhcywgbGEgUjIgZXZhbHVhIGxhIGNhbGlkYWQgZGVsIG1vZGVsbyBhdHJhdmVzIGRlIGxhIHZhcmlhbnphIGRlIGxhcyB2YXJpYWJsZXMsIG5vcyBheXVkYSBhIHZlciBxdWUgdmFyaWFibGVzIG5vIHNvbiBzaWduaWZpY2FudGVzIHBhcmEgZWwgbW9kZWxvLCBtaWVudHJhcyBxdWUgZWwgUk1TRSBldmFsdWEgbGEgcHJlY2lzaW9uIGRlbCBtb2RlbG8geWEgcXVlIHNlIGNlbnRyYSBlbiBsYSBkaWZlcmVuY2lhIGVudHJlIGxvcyB2YWxvcmVzIG9ic2VydmFkb3MgeSBsb3MgdmFsb3JlcyBwcmVkaWNob3MgcG9yIGVsIG1vZGVsbw0KDQojT2J0ZW5lciBCYXNlIGRlIGRhdG9zDQpgYGB7cn0NCmRmIDwtIHJlYWQuY3N2KCJDOlxcVXNlcnNcXEx1aXMgUm9kcmlndWV6XFxEb3dubG9hZHNcXGhlYWx0aF9pbnN1cmFuY2UuY3N2IikNCiNkZg0KDQpkZlsgLCBjKCJzZXgiLCAic21va2VyIiwgInJlZ2lvbiIpXSA8LSANCiAgbGFwcGx5KGRmWyAsIGMoInNleCIsICJzbW9rZXIiLCAicmVnaW9uIildLCBhcy5mYWN0b3IpICNFcyBuZWNlc2FyaW8gY2FtYmlhciB2YXJpYWJsZXMgZGUgdGlwbyBmYWN0b3IgYSB1bmEgZXNjYWxhIGFkZWN1YWRhIHBhcmEgcG9kZXIgbWFuZWphciBsb3MgZGF0b3MgZGUgZGljaGFzIHZhcmlhYmxlLg0KDQpgYGANCg0KIyAyLiBBbmFsaXNpcyBFeHBsb3JhdG9yaW8gZGUgbG9zIGRhdG9zIChFREEpOg0KDQpJZGVudGlmaWNhY2lvbiBkZSBOQeKAmXM6DQpgYGB7cn0NCiMgSWRlbnRpZmljYWNpw7NuIGRlIE5BJ3MgcG9yIGNvbHVtbmENCm5hcyA8LSBjb2xTdW1zKGlzLm5hKGRmKSkNCm5hcw0KYGBgDQoNClJlbXBsYXpvIGRlIE5B4oCZczogIEVuIGVzdGUgY2FzbyBubyB0ZW5lbW9zIE5B4oCZcyBwb3IgbG8gY3VhbCBubyBlcyBuZWNlc2FyaW8gcmVhbGl6YXIgdW4gcmVlbXBsYXpvDQoNCiMgTWVkaWRhcyBEZXNjcmlwdGl2YXM6DQpgYGB7cn0NCiMgTWVkaWRhcyBkZXNjcmlwdGl2YXMgcGFyYSB0b2RhcyBsYXMgY29sdW1uYXMgbnVtw6lyaWNhcw0Kc3VtbWFyeShkZikNCmBgYA0KIyBNZWRpZGFzIGRlIERpc3BlcnNpb246IA0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnZhcmlhbnphIDwtIGFwcGx5KGRmLDIsdmFyKQ0KdmFyaWFuemENCg0KZGVzdmlhY2lvbiA8LSBhcHBseShkZiwyLHNkKQ0KZGVzdmlhY2lvbg0KYGBgDQojIElkZW50aWZpYWNpb24gZGUgcGF0cm9uZXMgeS9vIHRlbmRlbmNpYXMNCkVqZW1wbG9zIGRlIGdyw6FmaWNvcw0KYGBge3J9DQpib3hwbG90KGV4cGVuc2VzIH4gc2V4LCBkYXRhID0gZGYsIGNvbCA9IGMoInJlZCIsImdyZWVuIiwiYmx1ZSIsInB1cnBsZSIsIG1haW4gPSAiRXhwZW5zZXMgcG9yIHNleG8iKSkNCiMgRGlhZ3JhbWEgZGUgY2FqYSBwYXJhIGxhIHZhcmlhYmxlICdibWknIHBvciBnw6luZXJvDQpib3hwbG90KGJtaSB+IHJlZ2lvbiwgZGF0YSA9IGRmLCBjb2wgPSBjKCJibHVlIiwicHVycGxlIiwgImN5YW4iLCAibGlnaHRwaW5rIiksIG1haW4gPSAiQk1JIHBvciBSZWdpb24iLCB4bGFiID0gIlJlZ2lvbiIsIHlsYWIgPSAiQk1JIikNCmJveHBsb3QoZXhwZW5zZXMgfiByZWdpb24sIGRhdGEgPSBkZiwgY29sID0gYygiYmx1ZSIsInB1cnBsZSIsICJjeWFuIiwgImxpZ2h0cGluayIpLCBtYWluID0gIkV4cGVuc2VzIHBvciBSZWdpb24iLCB4bGFiID0gIlJlZ2lvbiIsIHlsYWIgPSAiRXhwZW5zZXMiKQ0KIyBHcsOhZmljbyBkZSBkaXNwZXJzacOzbiBwYXJhIGxhIHJlbGFjacOzbiBlbnRyZSAnYWdlJyB5ICdleHBlbnNlcycNCnBsb3QoZGYkY2hpbGRyZW4sIGRmJGV4cGVuc2VzLCBtYWluID0gIkNoaWxkcmVuIHZzLiBHYXN0b3MgTcOpZGljb3MiLCB4bGFiID0gIkNoaWxkcmVuIiwgeWxhYiA9ICJHYXN0b3MgTcOpZGljb3MiLCBjb2wgPSAiYmx1ZSIpDQojIEdyw6FmaWNvIGRlIGRpc3BlcnNpw7NuIHBhcmEgbGEgcmVsYWNpw7NuIGVudHJlICdzbW9rZScgeSAnZXhwZW5zZXMnDQpwbG90KGRmJGFnZSwgZGYkZXhwZW5zZXMsIG1haW4gPSAiRWRhZCB2cy4gR2FzdG9zIE3DqWRpY29zIiwgeGxhYiA9ICJFZGFkIiwgeWxhYiA9ICJHYXN0b3MgTcOpZGljb3MiLCBjb2wgPSAiZGFya2dyZWVuIikNCiMgR3LDoWZpY28gZGUgZGlzcGVyc2nDs24gcGFyYSBsYSByZWxhY2nDs24gZW50cmUgJ2JtaScgeSAnZXhwZW5zZXMnIHRvbWFuZG8gZW4gY3VlbnRhICdFeHBlbnNlcycNCmdncGxvdChkZiwgYWVzKHg9Ym1pLCB5PWV4cGVuc2VzLCBzaGFwZT1zbW9rZXIsIGNvbG9yPXNtb2tlcikpICsNCiAgZ2VvbV9wb2ludCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiR3JlZW5zIikNCmBgYA0KDQojIDMuQXBhcnRpciBkZSBsb3MgcmVzdWx0YWRvcyBkZSBFREEgZGVzY3JpYmlyIGxhIGVzcGVjaWZpY2FjacOzbiBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsICBhIGVzdGltYXIuIEJyZXZlbWVudGUsIGRlc2NyaWJpciBjw7NtbyBlcyBlbCBwb3NpYmxlIGltcGFjdG8gZGUgY2FkYSB1bmEgZGUgbGFzIHZhcmlhYmxlcyAgZXhwbGljYXRpdmFzIHNvYnJlIGxhIHByaW5jaXBhbCB2YXJpYWJsZSBkZSBlc3R1ZGlvLg0KDQpCYXPDoW5kb25vcyBlbiBsb3MgcmVzdWx0YWRvcyBkZWwgQW7DoWxpc2lzIEV4cGxvcmF0b3JpbyBkZSBEYXRvcyAoRURBKSwgaWRlbnRpZmljYW1vcyBxdWUgbGFzIHZhcmlhYmxlcyBtw6FzIHJlbGV2YW50ZXMgcGFyYSBwcmVkZWNpciBsb3MgZ2FzdG9zIG3DqWRpY29zIChleHBlbnNlcykgc29uIGVsIMOtbmRpY2UgZGUgbWFzYSBjb3Jwb3JhbCAoYm1pKSwgbGEgZWRhZCAoYWdlKSB5IHNpIGxhIHBlcnNvbmEgZXMgZnVtYWRvcmEgKHNtb2tlcikuDQoNCkFsIGV4YW1pbmFyIGxvcyBncsOhZmljb3MgZGUgZGlzcGVyc2nDs24sIG5vdGFtb3MgcXVlIGV4aXN0ZSB1bmEgdGVuZGVuY2lhIGNsYXJhOiBhIG1lZGlkYSBxdWUgbGEgZWRhZCBhdW1lbnRhLCB0YW1iacOpbiBsbyBoYWNlbiBsb3MgZ2FzdG9zIG3DqWRpY29zLiBBZGVtw6FzLCBvYnNlcnZhbW9zIHF1ZSBsYXMgcGVyc29uYXMgcXVlIGZ1bWFuIHkgdGllbmVuIHVuIMOtbmRpY2UgZGUgbWFzYSBjb3Jwb3JhbCBlbGV2YWRvIHRpZW5kZW4gYSByZWdpc3RyYXIgZ2FzdG9zIG3DqWRpY29zIG3DoXMgYWx0b3MuDQoNCiMgNC4gIEVzdGltYWNpw7NuIGRlIGNhZGEgdW5vIGRlIGxvcyBzaWd1aWVudGVzIG1vZGVsb3MgZGUgU3VwZXJ2aXNlZCBNYWNoaW5lIExlYXJuaW5nIChTTUwpOiANCiMgYS5PTFMgUmVncmVzacOzbg0KDQpsZXRzIHNwbGl0IGRhdGEgaW50byB0cmFpbmluZyBhbmQgdGVzdCBzZXRzIHRoZSB0cmFpbmluZyBzZXQgaXMgdXNlZCB0byBidWlsZCB0aGUgbW9kZWwgYW5kIHRoZSB0ZXN0IHNldCB0byBldmFsdWF0ZSBpdHMgcHJlZGljdGl2ZSBhY2N1cmFjeS4NCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0KcGFydGl0aW9uIDwtIGNyZWF0ZURhdGFQYXJ0aXRpb24oeSA9IGRmJGV4cGVuc2VzLCBwPTAuOCwgbGlzdD1GKQ0KdHJhaW4gPSBkZltwYXJ0aXRpb24sIF0NCnRlc3QgID0gZGZbLXBhcnRpdGlvbiwgXQ0KYGBgDQoNCmBgYHtyfQ0Kb2xzX21vZGVsIDwtIGxtKGV4cGVuc2VzIH4gYWdlICsgYm1pICsgc21va2VyLCBkYXRhID0gZGYpDQpzdW1tYXJ5KG9sc19tb2RlbCkNCg0KbG9nX29sc19tb2RlbCA8LSBsbShsb2coZXhwZW5zZXMpIH4gbG9nKGFnZSkgKyBsb2coYm1pKSArIHNtb2tlciwgZGF0YSA9IGRmKQ0Kc3VtbWFyeShsb2dfb2xzX21vZGVsKQ0KDQpBSUMob2xzX21vZGVsKSAgICAgICMgQUlDID0gMjcxMjMuNzYNCkFJQyhsb2dfb2xzX21vZGVsKSAgIyBBSUMgPSAxNzE3LjM3NA0KDQpSTVNFX29sc19tb2RlbCAgICAgPC0gc3FydChtZWFuKG9sc19tb2RlbCRyZXNpZHVhbHNeMikpICNSTVNFID0gMC43NDc1DQpSTVNFX2xvZ19vbHNfbW9kZWwgPC0gc3FydChtZWFuKGxvZ19vbHNfbW9kZWwkcmVzaWR1YWxzXjIpKSAjUk1TRSA9IDc1MTcNCg0KI01vZGVsbyBPTFMgQUJTT0xVVE8NCnJlc2lkdW9zX29scyA8LSByZXNpZChvbHNfbW9kZWwpDQpyZXNpZHVvc19vbHMNCnZhbG9yZXNfYWp1c3RhZG9zX29scyA8LSBmaXR0ZWQob2xzX21vZGVsKQ0KDQpwbG90KHZhbG9yZXNfYWp1c3RhZG9zX29scywgcmVzaWR1b3Nfb2xzLCBtYWluID0gIlJlc2lkdW9zIHZzLiBBanVzdGVzIiwgeGxhYiA9ICJWYWxvcmVzIEFqdXN0YWRvcyIsIHlsYWIgPSAiUmVzaWR1b3MiKQ0KDQojTW9kZWxvIExPR19PTFMNCnJlc2lkdW9zX2xvZ19vbHMgPC0gcmVzaWQobG9nX29sc19tb2RlbCkNCnJlc2lkdW9zX2xvZ19vbHMNCnZhbG9yZXNfYWp1c3RhZG9zX2xvZ19vbHMgPC0gZml0dGVkKG9sc19tb2RlbCkNCg0KcGxvdCh2YWxvcmVzX2FqdXN0YWRvc19sb2dfb2xzLCByZXNpZHVvc19sb2dfb2xzLCBtYWluID0gIlJlc2lkdW9zIHZzLiBBanVzdGVzIGRlbCBMT0ciLCB4bGFiID0gIlZhbG9yZXMgQWp1c3RhZG9zIiwgeWxhYiA9ICJSZXNpZHVvcyIpDQpgYGANCiMgUHJ1ZWJhcyBkZWwgbW9kZWxvIG9scyB5IG9scyBsb2cNCmBgYHtyfQ0KIyBQcnVlYmEgZGUgbXVsdGljb2xpbmVhbGlkYWQNCnZpZl9yZXN1bHQgPC0gY2FyOjp2aWYob2xzX21vZGVsKSMgRmFjdG9yIGRlIGluZmxhY2nDs24gZGUgbGEgdmFyaWFuemENCnZpZl9yZXN1bHQNCg0KI05vIGhheSBtdWx0aWNvbGluZWFsaWRhZCBlbnRyZSBsYSB2YXJpYWJsZSBwcmVkaWN0b3JhIHkgZWwgcmVzdG8gZGUgbGFzIHZhcmlhYmxlcyBwcmVkaWN0b3Jhcy4NCg0KIyBQcnVlYmEgZGUgaGV0ZXJvY2VkYXN0aWNpZGFkIChUZXN0IGRlIEJyZXVzY2gtUGFnYW4pDQpicF90ZXN0IDwtIGJwdGVzdChvbHNfbW9kZWwpDQpicF90ZXN0DQoNCiNFbCB2YWxvciBwIGVzIG1lbm9yIHF1ZSBlbCBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIChwIDwgMC4wNSksIGhheSBldmlkZW5jaWEgZGUgaGV0ZXJvY2VkYXN0aWNpZGFkIHkgc2UgcmVjaGF6YSBsYSBoaXDDs3Rlc2lzIG51bGEgZGUgaG9tb2NlZGFzdGljaWRhZC4NCg0KIyBQcnVlYmEgZGUgYXV0b2NvcnJlbGFjacOzbiBzZXJpYWwgKFRlc3QgZGUgRHVyYmluLVdhdHNvbikNCmR3X3Rlc3QgPC0gZHd0ZXN0KG9sc19tb2RlbCkNCmR3X3Rlc3QNCg0KI0VsIHZhbG9yIGRlbCBlc3RhZMOtc3RpY28gZGUgcHJ1ZWJhIGVzdMOhIGNlcmNhIGRlIDIsIGxvIHF1ZSBzdWdpZXJlIHF1ZSBsb3MgcmVzaWR1b3MgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIG5vIG11ZXN0cmFuIHVuYSBhdXRvY29ycmVsYWNpw7NuIHNlcmlhbCBzaWduaWZpY2F0aXZhLiBVbiB2YWxvciBkZSBEVyBjZXJjYW5vIGEgMiBpbmRpY2EgcXVlIG5vIGhheSBhdXRvY29ycmVsYWNpw7NuIHNlcmlhbC4NCg0KIyBQcnVlYmEgZGUgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MgKEFuZGVyc29uLURhcmxpbmcpDQphZF90ZXN0IDwtIGFkLnRlc3Qob2xzX21vZGVsJHJlc2lkdWFscykNCmFkX3Rlc3QNCg0KI0RhZG8gcXVlIGVsIHZhbG9yIHAgZXMgZXh0cmVtYWRhbWVudGUgYmFqbywgc2UgcmVjaGF6YSBsYSBoaXDDs3Rlc2lzIG51bGEgZGUgcXVlIGxvcyByZXNpZHVvcyBzaWd1ZW4gdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsLiBMb3MgcmVzaWR1b3MgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIG5vIHNlIGFqdXN0YW4gYSB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwgc2Vnw7puIGVsIHRlc3QgZGUgQW5kZXJzb24tRGFybGluZy4gDQoNCiMgSW1wcmltaXIgcmVzdWx0YWRvcw0KcHJpbnQoIlBydWViYSBkZSBNdWx0aWNvbGluZWFsaWRhZCAoVklGKToiKQ0KcHJpbnQodmlmX3Jlc3VsdCkNCnByaW50KCJQcnVlYmEgZGUgSGV0ZXJvY2VkYXN0aWNpZGFkIChCcmV1c2NoLVBhZ2FuKToiKQ0KcHJpbnQoYnBfdGVzdCkNCnByaW50KCJQcnVlYmEgZGUgQXV0b2NvcnJlbGFjacOzbiBTZXJpYWwgKER1cmJpbi1XYXRzb24pOiIpDQpwcmludChkd190ZXN0KQ0KI3ByaW50KCJQcnVlYmEgZGUgQXV0b2NvcnJlbGFjacOzbiBFc3BhY2lhbCAoTW9yYW4ncyBJKToiKQ0KI3ByaW50KG1vcmFuX3Rlc3QpDQpwcmludCgiUHJ1ZWJhIGRlIE5vcm1hbGlkYWQgZGUgbG9zIFJlc2lkdW9zIChBbmRlcnNvbi1EYXJsaW5nKToiKQ0KcHJpbnQoYWRfdGVzdCkNCg0KIyBQcnVlYmEgZGUgbXVsdGljb2xpbmVhbGlkYWQNCnZpZl9yZXN1bHQgPC0gY2FyOjp2aWYobG9nX29sc19tb2RlbCkjIEZhY3RvciBkZSBpbmZsYWNpw7NuIGRlIGxhIHZhcmlhbnphDQp2aWZfcmVzdWx0DQoNCiNMb3MgdmFsb3JlcyBkZSBWSUYgY2VyY2Fub3MgYSAxIHBhcmEgdG9kYXMgbGFzIHZhcmlhYmxlcyBpbmRpY2FuIHF1ZSBubyBoYXkgZXZpZGVuY2lhIHN1c3RhbmNpYWwgZGUgbXVsdGljb2xpbmVhbGlkYWQgZW50cmUgbGFzIHZhcmlhYmxlcyBpbmNsdWlkYXMgZW4gZWwgbW9kZWxvLiANCg0KIyBQcnVlYmEgZGUgaGV0ZXJvY2VkYXN0aWNpZGFkIChUZXN0IGRlIEJyZXVzY2gtUGFnYW4pDQpicF90ZXN0IDwtIGJwdGVzdChsb2dfb2xzX21vZGVsKQ0KYnBfdGVzdA0KDQojRGFkbyBxdWUgZWwgdmFsb3IgcCBlcyBtdXkgcGVxdWXDsW8sIHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBudWxhIGRlIHF1ZSBubyBoYXkgaGV0ZXJvY2VkYXN0aWNpZGFkIGVuIGxvcyByZXNpZHVvcy4gRW4gb3RyYXMgcGFsYWJyYXMsIGhheSBldmlkZW5jaWEgZGUgaGV0ZXJvY2VkYXN0aWNpZGFkIGVuIGxvcyByZXNpZHVvcyBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24uIFBvZHJpYW1vcyB1dGlsaXphciBtw6l0b2RvcyBkZSBwb25kZXJhY2nDs24gcGFyYSBkYXIgbcOhcyBwZXNvIGEgbGFzIG9ic2VydmFjaW9uZXMgY29uIG1lbm9yIHZhcmlhbnphIHkgbWVub3MgcGVzbyBhIGxhcyBvYnNlcnZhY2lvbmVzIGNvbiBtYXlvciB2YXJpYW56YS4gRXN0byBwdWVkZSBheXVkYXIgYSBjb21wZW5zYXIgbGEgaGV0ZXJvY2VkYXN0aWNpZGFkIHkgbWVqb3JhciBsYSBwcmVjaXNpw7NuIGRlIGxhcyBlc3RpbWFjaW9uZXMuDQoNCiMgUHJ1ZWJhIGRlIGF1dG9jb3JyZWxhY2nDs24gc2VyaWFsIChUZXN0IGRlIER1cmJpbi1XYXRzb24pDQpkd190ZXN0IDwtIGR3dGVzdChsb2dfb2xzX21vZGVsKQ0KZHdfdGVzdA0KDQojRWwgdmFsb3IgZGVsIGVzdGFkw61zdGljbyBkZSBwcnVlYmEgZXN0w6EgY2VyY2EgZGUgMiwgbG8gcXVlIHN1Z2llcmUgcXVlIGxvcyByZXNpZHVvcyBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbm8gbXVlc3RyYW4gdW5hIGF1dG9jb3JyZWxhY2nDs24gc2VyaWFsIHNpZ25pZmljYXRpdmEuIFVuIHZhbG9yIGRlIERXIGNlcmNhbm8gYSAyIGluZGljYSBxdWUgbm8gaGF5IGF1dG9jb3JyZWxhY2nDs24gc2VyaWFsLg0KDQojIFBydWViYSBkZSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcyAoQW5kZXJzb24tRGFybGluZykNCmFkX3Rlc3QgPC0gYWQudGVzdChsb2dfb2xzX21vZGVsJHJlc2lkdWFscykNCmFkX3Rlc3QNCg0KI0RhZG8gcXVlIGVsIHZhbG9yIHAgZXMgbWF5b3IgcXVlIGVsIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEsIG5vIGhheSBzdWZpY2llbnRlIGV2aWRlbmNpYSBwYXJhIHJlY2hhemFyIGxhIGhpcMOzdGVzaXMgbnVsYSBkZSBxdWUgbm8gaGF5IGF1dG9jb3JyZWxhY2nDs24gc2VyaWFsIGVuIGxvcyByZXNpZHVvcyBkZWwgbW9kZWxvLiBFbiBlc3RlIGNhc28sIGxhIGhpcMOzdGVzaXMgbnVsYSBzdWdpZXJlIHF1ZSBubyBoYXkgYXV0b2NvcnJlbGFjacOzbiBwb3NpdGl2YSBlbiBsb3MgcmVzaWR1b3MgZGVsIG1vZGVsby4NCg0KIyBJbXByaW1pciByZXN1bHRhZG9zDQpwcmludCgiUHJ1ZWJhIGRlIE11bHRpY29saW5lYWxpZGFkIChWSUYpOiIpDQpwcmludCh2aWZfcmVzdWx0KQ0KcHJpbnQoIlBydWViYSBkZSBIZXRlcm9jZWRhc3RpY2lkYWQgKEJyZXVzY2gtUGFnYW4pOiIpDQpwcmludChicF90ZXN0KQ0KcHJpbnQoIlBydWViYSBkZSBBdXRvY29ycmVsYWNpw7NuIFNlcmlhbCAoRHVyYmluLVdhdHNvbik6IikNCnByaW50KGR3X3Rlc3QpDQojcHJpbnQoIlBydWViYSBkZSBBdXRvY29ycmVsYWNpw7NuIEVzcGFjaWFsIChNb3JhbidzIEkpOiIpDQojcHJpbnQobW9yYW5fdGVzdCkNCnByaW50KCJQcnVlYmEgZGUgTm9ybWFsaWRhZCBkZSBsb3MgUmVzaWR1b3MgKEFuZGVyc29uLURhcmxpbmcpOiIpDQpwcmludChhZF90ZXN0KQ0KYGBgDQoNCiMgYi5TQVINCk5vIHBvZGVtb3MgcmVhbGl6YXIgZXN0ZSBtb2RlbG8NCg0KIyBjLlNFTQ0KTm8gcG9kZW1vcyByZWFsaXphciBlc3RlIG1vZGVsbw0KDQojIGQuWEdCb29zdCBSZWdyZXNpw7NuIA0KYGBge3J9DQpkZl9hbHQgPC0gZGYgJT4lIHNlbGVjdChhZ2UsYm1pLHNtb2tlcixleHBlbnNlcyxjaGlsZHJlbixzZXgsIHJlZ2lvbikNCg0KZGZfYWx0JGJtaSA8LSBhcy5udW1lcmljKGRmX2FsdCRibWkpDQpkZl9hbHQkZXhwZW5zZXMgPC0gYXMubnVtZXJpYyhkZl9hbHQkZXhwZW5zZXMpDQpkZl9hbHQkc21va2VyX251bWVyaWMgPC0gYXMubnVtZXJpYyhkZl9hbHQkc21va2VyID09ICJ5ZXMiKQ0KZGZfYWx0JHNleF9udW1lcmljIDwtIGFzLm51bWVyaWMoZGZfYWx0JHNleCA9PSAieWVzIikNCmRmX2FsdCRyZWdfbnVtZXJpYyA8LSBhcy5udW1lcmljKGRmX2FsdCRyZWdpb24gPT0gInllcyIpDQoNCmRmX2FsdCRhZ2UgICAgIDwtIGxvZyhkZl9hbHQkYWdlKQ0KZGZfYWx0JGJtaSA8LSBsb2coZGZfYWx0JGJtaSkNCmRmX2FsdCRzbW9rZXJfbnVtZXJpYyA8LSBsb2coZGZfYWx0JHNtb2tlcl9udW1lcmljKSANCmRmX2FsdCRleHBlbnNlcyA8LSBsb2coZGZfYWx0JGV4cGVuc2VzKQ0KZGZfYWx0JGNoaWxkcmVuIDwtIGxvZyhkZl9hbHQkY2hpbGRyZW4gKyAwLjAxKQ0KZGZfYWx0JHNleF9udW1lcmljIDwtIGxvZyhkZl9hbHQkc2V4X251bWVyaWMpIA0KZGZfYWx0JHJlZ19udW1lcmljICAgICA8LSBsb2coZGZfYWx0JHJlZ19udW1lcmljKQ0KDQpzdW1tYXJ5KGRmX2FsdCkNCg0KDQpzZXQuc2VlZCgxMjMpICMgV2hhdCBpcyBzZXQuc2VlZCgpPyBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGdldCB0aGUgc2FtZSByZXN1bHRzIGZvciByYW5kb21pemF0aW9uIGVhY2ggdGltZSB5b3UgcnVuIHRoZSBzY3JpcHQuICAgDQpjdl9kYXRhICAgPC0gY3JlYXRlRGF0YVBhcnRpdGlvbih5ID0gZGYkZXhwZW5zZXMsIHA9MC43LCBsaXN0PUYpDQpjdl90cmFpbiA9IGRmX2FsdFtjdl9kYXRhLCBdDQpjdl90ZXN0ID0gZGZfYWx0Wy1jdl9kYXRhLCBdDQoNCiMgZGVmaW5lIGV4cGxhbmF0b3J5IHZhcmlhYmxlcyAoWCdzKSBhbmQgZGVwZW5kZW50IHZhcmlhYmxlIChZKSBpbiB0cmFpbmluZyBzZXQNCnRyYWluX3ggPSBkYXRhLm1hdHJpeChjdl90cmFpblssIC03XSkNCnRyYWluX3kgPSBjdl90cmFpblssN10NCg0KIyBkZWZpbmUgZXhwbGFuYXRvcnkgdmFyaWFibGVzIChYJ3MpIGFuZCBkZXBlbmRlbnQgdmFyaWFibGUgKFkpIGluIHRlc3Rpbmcgc2V0DQp0ZXN0X3ggPSBkYXRhLm1hdHJpeChjdl90ZXN0WywgLTddKQ0KdGVzdF95ID0gY3ZfdGVzdFssIDddDQoNCmFueShpcy5pbmZpbml0ZSh0ZXN0X3kpKQ0KdHJhaW5feFtpcy5pbmZpbml0ZSh0cmFpbl94KV0gPC0gTkENCnRlc3RfeFtpcy5pbmZpbml0ZSh0ZXN0X3gpXSA8LSBOQQ0KDQojIENhbGN1bGFyIGxhIG1lZGlhIGRlIGNhZGEgY29sdW1uYQ0KbWVhbnMgPC0gY29sTWVhbnModHJhaW5feCwgbmEucm0gPSBUUlVFKQ0KDQojIEltcHV0YXIgbG9zIHZhbG9yZXMgTkEgY29uIGxhIG1lZGlhIGRlIGNhZGEgY29sdW1uYQ0KZm9yIChpIGluIDE6bmNvbCh0cmFpbl94KSkgew0KICB0cmFpbl94W2lzLm5hKHRyYWluX3hbLCBpXSksIGldIDwtIG1lYW5zW2ldDQp9DQoNCiMgQ2FsY3VsYXIgbGEgbWVkaWEgZGUgY2FkYSBjb2x1bW5hDQptZWFuczIgPC0gY29sTWVhbnModGVzdF94LCBuYS5ybSA9IFRSVUUpDQoNCiMgSW1wdXRhciBsb3MgdmFsb3JlcyBOQSBjb24gbGEgbWVkaWEgZGUgY2FkYSBjb2x1bW5hDQpmb3IgKGkgaW4gMTpuY29sKHRlc3RfeCkpIHsNCiAgdGVzdF94W2lzLm5hKHRlc3RfeFssIGldKSwgaV0gPC0gbWVhbnMyW2ldDQp9DQoNCmFueShpcy5uYSh0cmFpbl94KSkNCmFueShpcy5pbmZpbml0ZSh0cmFpbl94KSkNCmFueShpcy5uYSh0cmFpbl95KSkNCmFueShpcy5pbmZpbml0ZSh0cmFpbl95KSkNCmFueShpcy5uYSh0ZXN0X3gpKQ0KYW55KGlzLmluZmluaXRlKHRlc3RfeCkpDQphbnkoaXMubmEodGVzdF95KSkNCg0KIyBkZWZpbmUgZmluYWwgdHJhaW5pbmcgYW5kIHRlc3Rpbmcgc2V0cw0KeGdiX3RyYWluID0geGdiLkRNYXRyaXgoZGF0YSA9IHRyYWluX3gsIGxhYmVsID0gdHJhaW5feSkNCnhnYl90ZXN0ICA9IHhnYi5ETWF0cml4KGRhdGEgPSB0ZXN0X3gsIGxhYmVsID0gdGVzdF95KQ0KDQojIExldHMgZml0IFhHQm9vc3QgcmVncmVzc2lvbiBtb2RlbCBhbmQgZGlzcGxheSBSTVNFIGZvciBib3RoIHRyYWluaW5nIGFuZCB0ZXN0aW5nIGRhdGEgYXQgZWFjaCByb3VuZA0Kd2F0Y2hsaXN0ID0gbGlzdCh0cmFpbj14Z2JfdHJhaW4sIHRlc3Q9eGdiX3Rlc3QpDQptb2RlbF94Z2IgPSB4Z2IudHJhaW4oZGF0YT14Z2JfdHJhaW4sIG1heC5kZXB0aD0zLCB3YXRjaGxpc3Q9d2F0Y2hsaXN0LCBucm91bmRzPTcwKSAjIHRoZSBtb3JlIHRoZSBudW1iZXIgb2Ygcm91bmRzIHNlbGVjdGVkLCB0aGUgbG9uZ2VyIHRoZSB0aW1lIHRvIGRpc3BsYXkgdGhlIHJlc3VsdHMuIA0KDQojIExvb2tzIGxpa2UgdGhlIGxvd2VzdCBSTVNFIGZvciBib3RoIHRyYWluaW5nIGFuZCB0ZXN0IGRhdGFzZXQgaXMgYWNoaWV2ZWQgYXQgNTkgcm91bmQuIA0KIyBMZXRzIGVzdGltYXRlIG91ciBmaW5hbCByZWdyZXNzaW9uIG1vZGVsDQpyZWdfeGdiID0geGdib29zdChkYXRhID0geGdiX3RyYWluLCBtYXguZGVwdGggPSAzLCBucm91bmRzID0gNTksIHZlcmJvc2UgPSAwKSAjIHNldHRpbmcgdmVyYm9zZSA9IDAgYXZvaWRzIHRvIGRpc3BsYXkgdGhlIHRyYWluaW5nIGFuZCB0ZXN0aW5nIGVycm9yIGZvciBlYWNoIHJvdW5kLiANCnByZWRpY3Rpb25feGdiX3Rlc3Q8LXByZWRpY3QocmVnX3hnYiwgeGdiX3Rlc3QpDQpybXNlKHByZWRpY3Rpb25feGdiX3Rlc3QsIGN2X3Rlc3QkZXhwZW5zZXMpDQoNCiMgTGV0cyBkbyBzb21lIGRpYWdub3N0aWMgY2hlY2sgb2YgcmVncmVzc2lvbiByZXNpZHVhbHMgDQp4Z2JfcmVnX3Jlc2lkdWFsczwtY3ZfdGVzdCRleHBlbnNlcyAtIHByZWRpY3Rpb25feGdiX3Rlc3QNCnBsb3QoeGdiX3JlZ19yZXNpZHVhbHMsIHhsYWI9ICJEZXBlbmRlbnQgVmFyaWFibGUiLCB5bGFiID0gIlJlc2lkdWFscyIsIG1haW4gPSAnWEdCb29zdCBSZWdyZXNzaW9uIFJlc2lkdWFscycpDQphYmxpbmUoMCwwKQ0KDQojIFBsb3QgZmlyc3QgMyB0cmVlcyBvZiBtb2RlbA0KeGdiLnBsb3QudHJlZShtb2RlbD1yZWdfeGdiLCB0cmVlcz0wOjIpDQppbXBvcnRhbmNlX21hdHJpeCA8LSB4Z2IuaW1wb3J0YW5jZShtb2RlbCA9IHJlZ194Z2IpDQp4Z2IucGxvdC5pbXBvcnRhbmNlKGltcG9ydGFuY2VfbWF0cml4LCB4bGFiID0gIkV4cGxhbmF0b3J5IFZhcmlhYmxlcyBYJ3MgSW1wb3J0YW5jZSIpDQpgYGANCg0KIyBlLkRlY2lzaW9uIFRyZWVzDQpgYGB7cn0NCmRlY2lzaW9uX3RyZWVfbW9kZWwgPC0gcnBhcnQobG9nKGV4cGVuc2VzKSB+IGxvZyhibWkpICsgbG9nKGFnZSkgKyBsb2coY2hpbGRyZW4gKyAwLjAxKSArIHNtb2tlciAsIGRhdGEgPSB0cmFpbikNCg0KIyBzdW1tYXJ5KGRlY2lzaW9uX3RyZWVfcmVncmVzc2lvbikNCnBsb3QoZGVjaXNpb25fdHJlZV9tb2RlbCwgY29tcHJlc3MgPSBUUlVFKQ0KdGV4dChkZWNpc2lvbl90cmVlX21vZGVsLCB1c2UubiA9IFRSVUUpDQpycGFydC5wbG90KGRlY2lzaW9uX3RyZWVfbW9kZWwpDQoNCiMgSGFjZXIgcHJlZGljY2lvbmVzIGNvbiBlbCBtb2RlbG8gZGUgw6FyYm9sIGRlIGRlY2lzacOzbiBlbiBsb3MgZGF0b3MgZGUgZW50cmVuYW1pZW50bw0KZGVjaXNpb25fdHJlZV9wcmVkaWN0aW9ucyA8LSBwcmVkaWN0KGRlY2lzaW9uX3RyZWVfbW9kZWwsIHRyYWluKQ0KDQojIENhbGN1bGFyIGxvcyByZXNpZHVvcw0KcmVzaWR1YWxzIDwtIGRlY2lzaW9uX3RyZWVfcHJlZGljdGlvbnMgLSBsb2codHJhaW4kZXhwZW5zZXMpDQoNCiMgQ2FsY3VsYXIgZWwgUk1TRQ0Kcm1zZWR0IDwtIHNxcnQobWVhbihyZXNpZHVhbHNeMikpDQoNCiMgTW9zdHJhciBlbCB2YWxvciBkZWwgUk1TRQ0KcHJpbnQocm1zZWR0KSAjMC40MDEwDQoNCmBgYA0KDQojIGYuUmFuZG9tIEZvcmVzdCANCmBgYHtyfQ0KcmZfbW9kZWwgPC0gcmFuZG9tRm9yZXN0KGV4cGVuc2VzIH4gYWdlICsgYm1pICArICBjaGlsZHJlbiArIHNtb2tlciArIHNleCArIHJlZ2lvbiwgZGF0YSA9IHRyYWluLCBwcm94aW1pdHk9VFJVRSkNCg0KcHJpbnQocmZfbW9kZWwpDQoNCiMgUHJlZGljdGlvbiAmIENvbmZ1c2lvbiBNYXRyaXgg4oCTIHRlc3QgZGF0YQ0KcmZfcHJlZGljdGlvbiA8LSBwcmVkaWN0KHJmX21vZGVsLGN2X3Rlc3QpDQoNCiMgY29uZnVzaW9uTWF0cml4KHJmX3ByZWRpY3Rpb25fdHJhaW5fZGF0YSwgdHJhaW4kTUVEVikgIyBhIGNvbmZ1c2lvbiBtYXRyaXggaXMgZXNzZW50aWFsbHkgYSB0YWJsZSB0aGF0IGNhdGVnb3JpemVzIHByZWRpY3Rpb25zIGFnYWluc3QgYWN0dWFsIHZhbHVlcy4NClJNU0VfcmYgPC0gcm1zZShyZl9wcmVkaWN0aW9uLCBjdl90ZXN0JGV4cGVuc2VzKQ0KUk1TRV9yZiAjODUyMS40MTQNCg0KIyBFdmFsdXRlIFZhcmlhYmxlcycgSW1wb3J0YW5jZQ0KIyBIb3cgdG8gaW50ZXJwcmV0IHZhckltcFBsb3QoKT8gVGhlIGhpZ2hlciB0aGUgdmFsdWUgb2YgbWVhbiBkZWNyZWFzZSBhY2N1cmFjeSwgdGhlIGhpZ2hlciB0aGUgaW1wb3J0YW5jZSBvZiB0aGUgdmFyaWFibGUgaW4gdGhlIG1vZGVsLiANCiMgSW4gb3RoZXIgd29yZHMsIG1lYW4gZGVjcmVhc2UgYWNjdXJhY3kgcmVwcmVzZW50cyBob3cgbXVjaCByZW1vdmluZyBlYWNoIHZhcmlhYmxlIHJlZHVjZXMgdGhlIGFjY3VyYWN5IG9mIHRoZSBtb2RlbC4NCnZhckltcFBsb3QocmZfbW9kZWwsIG4udmFyID0gNSwgbWFpbiA9ICJUb3AgNSAtIFZhcmlhYmxlIikgIyBJdCBkaXNwbGF5cyBhIHZhcmlhYmxlIGltcG9ydGFuY2UgcGxvdCBmcm9tIHRoZSByYW5kb20gZm9yZXN0IG1vZGVsLiANCmltcG9ydGFuY2UocmZfbW9kZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSXQgaXMgd29ydGggbWVudGlvbmluZyB0aGF0IEluY05vZGVQdXJpdHkgYnkgaG93IG11Y2ggdGhlIG1vZGVsIGVycm9yIGluY3JlYXNlcyBieSBkcm9wcGluZyBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgZXhwbGFuYXRvcnkgdmFyaWFibGVzLiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQnJpZWZseSwgdmFySW1wUGxvdCgpIGluZGljYXRlcyBlYWNoIHZhcmlhYmxlJ3MgaW1wb3J0YW5jZSBpbiBleHBsYWluaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIChZKS4NCg0KYGBgDQoNCg0KIyBnLk5ldXJhbCBOZXR3b3JrcyBSZWdyZXNpw7NuIA0KYGBge3J9DQojIExldHMgZXN0aW1hdGUgYSBOZXVyYWwgTmV0d29yayBSZWdyZXNzaW9uDQpzdW1tYXJ5KHRyYWluKQ0KdHJhaW4kYm1pIDwtIGFzLm51bWVyaWModHJhaW4kYm1pKQ0KdHJhaW4kZXhwZW5zZXMgPC0gYXMubnVtZXJpYyh0cmFpbiRleHBlbnNlcykNCnRyYWluJHNtb2tlcl9udW1lcmljIDwtIGFzLm51bWVyaWModHJhaW4kc21va2VyID09ICJ5ZXMiKQ0KdHJhaW4kc2V4X251bWVyaWMgPC0gYXMubnVtZXJpYyh0cmFpbiRzZXggPT0gInllcyIpDQp0cmFpbiRyZWdfbnVtZXJpYyA8LSBhcy5udW1lcmljKHRyYWluJHJlZ2lvbiA9PSAieWVzIikNCg0Kbm5fbW9kZWwgPC0gbmV1cmFsbmV0KGV4cGVuc2VzIH4gYWdlICsgc2V4X251bWVyaWMgKyBibWkgKyBjaGlsZHJlbiArIHJlZ19udW1lcmljICsgc21va2VyX251bWVyaWMsIGRhdGEgPSB0cmFpbiwgaGlkZGVuID0gYyg1LCAzKSwgbGluZWFyLm91dHB1dCA9IFRSVUUpIA0KDQojIFBsb3QgdGhlIG5ldXJhbCBuZXR3b3JrIA0KcGxvdChubl9tb2RlbCkNCg0KIyBIYWNlciBwcmVkaWNjaW9uZXMgY29uIGVsIG1vZGVsbyBkZSByZWQgbmV1cm9uYWwgZW4gbG9zIGRhdG9zIGRlIGVudHJlbmFtaWVudG8NCm5uX3ByZWRpY3Rpb25zIDwtIHByZWRpY3Qobm5fbW9kZWwsIHRyYWluKQ0KDQojIENhbGN1bGFyIGxvcyByZXNpZHVvcw0KcmVzaWR1YWxzIDwtIG5uX3ByZWRpY3Rpb25zIC0gdHJhaW4kZXhwZW5zZXMNCg0KIyBDYWxjdWxhciBlbCBSTVNFDQpybXNlbm4gPC0gc3FydChtZWFuKHJlc2lkdWFsc14yKSkNCg0KIyBMZXRzIGRvIHNvbWUgZGlhZ25vc3RpYyBjaGVjayBvZiByZWdyZXNzaW9uIHJlc2lkdWFscyANCnJlc2lkdWFsczwtdHJhaW4kZXhwZW5zZXMgLSBubl9wcmVkaWN0aW9ucw0KcGxvdChyZXNpZHVhbHMsIHhsYWI9ICJEZXBlbmRlbnQgVmFyaWFibGUiLCB5bGFiID0gIlJlc2lkdWFscyIsIG1haW4gPSAnTmV1cmFsIE5ldCBSZWdyZXNzaW9uIFJlc2lkdWFscycpDQphYmxpbmUoMCwwKQ0KDQojIE1vc3RyYXIgZWwgdmFsb3IgZGVsIFJNU0UNCnByaW50KHJtc2VubikgIzEyMjAxLjU4DQpgYGANCiMgUHJpbmNpcGFsZXMgaGFsbGFnYXpvcyBlbmNvbnRyYWRvcyBkdXJhbnRlIGVsIEVEQToNCg0KQSB0cmF2ZXogZGVsIEVEQSBwdWRpbW9zIG9ic2VydmFyOiAgDQoNCiogQWwgZXhhbWluYXIgbG9zIGdyw6FmaWNvcyBkZSBkaXNwZXJzacOzbiwgbm90YW1vcyBxdWUgZXhpc3RlIHVuYSB0ZW5kZW5jaWEgY2xhcmE6IGEgbWVkaWRhIHF1ZSBsYSBlZGFkIGF1bWVudGEsIHRhbWJpw6luIGxvIGhhY2VuIGxvcyBnYXN0b3MgbcOpZGljb3MuICANCg0KKiBPYnNlcnZhbW9zIHF1ZSBsYXMgcGVyc29uYXMgcXVlIGZ1bWFuIHkgdGllbmVuIHVuIMOtbmRpY2UgZGUgbWFzYSBjb3Jwb3JhbCBlbGV2YWRvIHRpZW5kZW4gYSByZWdpc3RyYXIgZ2FzdG9zIG3DqWRpY29zIG3DoXMgYWx0b3MuICANCg0KKiBPYnNlcnZhbW9zIHF1ZSBsYSBiYXNlIGRlIGRhdG9zIG5vIHByZXNlbnRhIE5BJ3MuICANCg0KKiBQb2RlbW9zIG9ic2VydmFyIHF1ZSBlbCBnYXN0byBlbnRyZSBob21icmVzIHkgbXVqZXJlcyBlcyBjYXNpIGVsIG1pc21vIHBvcnF1ZSBzdXMgbWVkaWFzIHNlIGVuY3VlbnRyYW4gaWd1YWwgcGVybyBlbCBncnVwbyBkZSBsb3MgaG9tcmVzIHByZXNlbnRhIHVuYSBkaXNwZXJzaW9uIG1heW9yIA0KDQoqIFBvZGVtb3Mgb2JzZXJ2YXIgcXVlIGxhIHJlZ2lvbiBzb3V0aGVhc3QgZXMgbGEgcXVlIGdlbmVyYSBtYXlvciBleHBlbnNlcyxhIHRyYXZlcyBkZWwgYW5hbGlzaXMgZGVsIGJveHBsb3QgIA0KDQoqIEFkZW1hcyBxdWUgdGFtYmllbiBwb2RlbW9zIG9idmVyc2FyIHF1ZSBsYSByZWdpb24gc291dGhlYXN0IGVzIGxhIHF1ZSBnZW5lcmEgdW4gQk1JIG1hcyBhbHRvIGxvIHF1ZSBwdWVkZSBzZXIgdW4gZmFjdG9yIGltcG9ydGFudGUgIA0KDQojIFJNU0UgZGUgbG9zIGRpZmVyZW50ZXMgbW9kZWxvcw0KYGBge3J9DQojIERhdG9zIA0KbW9kZWxfbmFtZXMgPC0gYygiT0xTIiwgIk9MUyBMb2ciLCAiWEdCb29zdCIsICJEVCIsICJSRiIsICJOTiIpICAjIE5vbWJyZXMgZGUgbG9zIG1vZGVsb3MNCnJtc2VfdmFsdWVzIDwtIGMoMC43NDc1LCA3NTE3LDYuNjYyOSAsIDAuNDAxMCwgODUyMS40MTQsIDEyMjAxLjU4KSAgIyBWYWxvcmVzIGRlIFJNU0UgY29ycmVzcG9uZGllbnRlcyBhIGNhZGEgbW9kZWxvDQoNCiMgQ3JlYXIgdW4gZGF0YWZyYW1lIGNvbiBsb3MgZGF0b3MNCnJtc2VfZGF0YSA8LSBkYXRhLmZyYW1lKE1vZGVsbyA9IG1vZGVsX25hbWVzLCBSTVNFID0gcm1zZV92YWx1ZXMpDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgYmFycmFzDQpiYXJwbG90KHJtc2VfZGF0YSRSTVNFLCBuYW1lcy5hcmcgPSBybXNlX2RhdGEkTW9kZWxvLCBjb2wgPSAic2t5Ymx1ZSIsIA0KICAgICAgICBtYWluID0gIlJNU0UgZGUgTW9kZWxvcyBFc3RpbWFkb3MiLCB4bGFiID0gIk1vZGVsbyIsIHlsYWIgPSAiUk1TRSIpDQpgYGANCiMgU2VsZWNjaW9uIGRlbCBNb2RlbG8NCg0KRWwgbW9kZWxvIHF1ZSBtZWpvciBzZSBhanVzdGEgc2Vnw7puIGVsIFJNU0UgZXMgZWwgbW9kZWxvIGRlIERlY2lzaW9uIFRyZWUgKERUKSB5YSBxdWUgdGllbmUgZWwgdmFsb3IgZGUgUk1TRSBtw6FzIGJham8gKDAuNDAxMCkueWEgcXVlIHVuIFJNU0UgbcOhcyBiYWpvIGluZGljYSB1biBtZWpvciBhanVzdGUgZGVsIG1vZGVsbyBhIGxvcyBkYXRvcy5vdHJvIG1vZGVsbyBxdWUgcHVkaWVyYSBzZXIgYnVlbmEgb3BjaW9uIHNlcmlhIGVsIG9scyB5YSBxdWUgc3Ugcm1zZSBlcyBiYWpvIGlnYXVsIHBlcm8gcHJlc2VudGEgdW4gYWljIGFsdG8sIGFkZW1hcyBkZSBxdWUgaGF5IGV2aWRlbmNpYSBkZSBxdWUgcHJlc2VudGEgaGV0ZXJvY2VkYXN0aWNpZGFkLg0KDQo=