Tema 4- T de Student

pagos <- c(107,92,97,95,105,101,91,99,95,104)

t.test(pagos, y = NULL, alternativa = "two.sided", mu=100, paired=FALSE,var.equal=FALSE, conf.level=0.90)
## 
##  One Sample t-test
## 
## data:  pagos
## t = -0.79888, df = 9, p-value = 0.4449
## alternative hypothesis: true mean is not equal to 100
## 90 percent confidence interval:
##   95.38755 101.81245
## sample estimates:
## mean of x 
##      98.6
# Si es de una cola, alternative puede ser "menor" o "mayor".

# Si p value es mayor a 0.10 no se rechaza H0

# Conclusion: no se rechaza H0
# Intervalo de confianza: entre 95 y 101 dólares

8-70

Drive-a-Lemon, renta automóviles en buenas condiciones mecánicas, pero más antiguos que aquellos que rentan las grandes cadenas nacionales de renta de coches. Como resultado, anuncia que sus tarifas son considerablemente más bajas que las de sus grandes competidores. Una encuesta en la industria estableció que el cargo total promedio por renta en una de las mayores compañías es de $77.38 dólares. Una muestra aleatoria de 18 transacciones realizadas por Drive-a-Lemon mostró un cargo total promedio de $87.61, con una desviación estándar de la muestra de $19.48. Verifique que, con un nivel de significancia de 0.025, el cargo total promedio de Drive-a-Lemon es más alto que el de las grandes compañías. ¿Indica este resultado que las tarifas de Drive-a-Lemon, no son más bajas que las de las grandes cadenas nacionales? Justifique su respuesta.

#Paso 1. Plantear Hipótesis
#H0: µ = xbar
#H1: µ > xbar

#Paso 2. Nivel de Confianza y Grados de Libertad
#alpha = 0.025
#GL = 17

#Paso 3. Zona de Acpetación/Rechazo
#t de Tabla = 2.110

#Paso 4. Fórmula
t <- (87.61-77.38)/(19.48/(sqrt(18)))
t
## [1] 2.22804
#Paso 5- Conclusión
#Se rechaza H0

Tema 5. Análisis de Varianza (ANOVA)

Se utiliza para determinar si existen diferencias estadisticamente significativas entre las medias de 3 o más grupos.
Factor: Característica que diferensia las poblaciones /tratamientos
Tipo de Caja
Niveles: Distintas poblaciones tratamientos
Observaciones: Partes en cada población/tratamiento.
Paso 1. Plantear Hipótesis
H0: M1 = M2 = M3 = M4
H1: Por lo menos dos de las Mi son diferentes
Paso 2. Nivel de Significancia
alpha = 0.05
Grados de Libertad de los Tratamientos = GLtrL = 17
Paso 3. Zona de Acpetación/Rechazo
t de Tabla = 2.110

Ejercicio 1

resistencia <- read.csv ("/Users/educamachopaz/Desktop/R codes/ANOVA Mezclas.csv")
resistencia
##    Mezcla Valor
## 1      M1 655.5
## 2      M1 788.3
## 3      M1 734.3
## 4      M1 721.4
## 5      M1 679.1
## 6      M1 699.4
## 7      M2 789.2
## 8      M2 772.5
## 9      M2 786.9
## 10     M2 686.1
## 11     M2 732.1
## 12     M2 774.8
## 13     M3 737.1
## 14     M3 639.0
## 15     M3 696.3
## 16     M3 671.7
## 17     M3 717.2
## 18     M3 727.1
## 19     M4 535.1
## 20     M4 628.7
## 21     M4 542.4
## 22     M4 559.0
## 23     M4 586.9
## 24     M4 520.0
resistencia$Mezcla <- as.factor(resistencia$Mezcla)
qf(.95,df1=3,df=20)
## [1] 3.098391
anova1 <- aov(Valor ~ Mezcla, data=resistencia)
summary(anova1)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Mezcla       3 127375   42458   25.09 5.53e-07 ***
## Residuals   20  33839    1692                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Ejercicio 2

manchado <- read.csv ("/Users/educamachopaz/Desktop/R codes/ANOVA Grado.csv")
manchado$Manchado <- as.factor(manchado$Manchado)
qf(.99,df1=2,df=12)
## [1] 6.926608
anova2 <- aov(Valor ~ Manchado, data=manchado)
summary(anova2)
##             Df Sum Sq Mean Sq F value Pr(>F)
## Manchado     2 0.0609 0.03043   0.987  0.401
## Residuals   12 0.3701 0.03084

Tema 6. Regresion Lineal

Ejercicio 1

x<- c(0.2,0.5,1,2,3) 
y <- c(8,10,18,35, 60) 
regresion <- lm(y~x) 
summary (regresion)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##       1       2       3       4       5 
##  3.0591 -0.5354 -1.8596 -3.5079  2.8437 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)    1.211      2.451   0.494  0.65510   
## x             18.648      1.450  12.863  0.00101 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.341 on 3 degrees of freedom
## Multiple R-squared:  0.9822, Adjusted R-squared:  0.9763 
## F-statistic: 165.5 on 1 and 3 DF,  p-value: 0.001014
plot(regresion)

Ejercicio 2

a <- c(-6,-3,0,3,6,9,12,15,20,25)
b <- c(2,2.8,3.9,4.2,5.8,6.2,7.5,8.2,9.3,10.9)
regresion2 <- lm (b~a)
summary(regresion2)
## 
## Call:
## lm(formula = b ~ a)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.41088 -0.12507 -0.03329  0.14807  0.32493 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 3.746694   0.101162   37.04 3.10e-10 ***
## a           0.288062   0.008087   35.62 4.22e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2438 on 8 degrees of freedom
## Multiple R-squared:  0.9937, Adjusted R-squared:  0.993 
## F-statistic:  1269 on 1 and 8 DF,  p-value: 4.223e-10
plot(regresion2)

Tema 7. Ejercicios del Mundo Real

11-26

En un estudio se compararon los efectos de cuatro promociones mensuales sobre las ventas. A continuación, presentamos las ventas unitarias de 5 tiendas que utilizaron las 4 promociones en meses diferentes:
Al nivel de significancia de 0.01 ¿las promociones producen diferentes efectos sobre las ventas?
knitr::kable(
ventas <- data.frame(
  A = c(4.4, 4.6, 4.5, 4.1, 3.8),
  B = c(5.8, 5.2, 4.9, 4.7, 4.6),
  C = c(4.8, 5.9, 4.9, 4.6, 4.3),
  D = c(2.9, 2.7, 2.9, 3.9, 4.3),
  E = c(4.6, 4.3, 3.8, 5.2, 4.4)
),
  format ="markdown"
)
A B C D E
4.4 5.8 4.8 2.9 4.6
4.6 5.2 5.9 2.7 4.3
4.5 4.9 4.9 2.9 3.8
4.1 4.7 4.6 3.9 5.2
3.8 4.6 4.3 4.3 4.4

a) Calcule el número medio de horas de alivio para cada marca y determine la gran media.

# a)
antiacidos <- read.csv("/Users/educamachopaz/Downloads/antiacidos.csv")
antiacidos$marca <- as.factor(antiacidos$marca)
qf(.95,df1=4, df2=20)
## [1] 2.866081
anova3 <- aov(horas ~ marca, data=antiacidos)
summary(anova3)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## marca        4  9.006  2.2514   7.653 0.000655 ***
## Residuals   20  5.884  0.2942                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## F  7.65, Fu  2.87, rechazamos H0. 
## Las marcas producen una cantidad de alivio significativamente diferente.

11-38

En la ciudad de Bigville, una cadena de comida rápida está adquiriendo una mala reputación debido a que tardan mucho en servir a los clientes. Como la cadena tiene cuatro restaurantes en esa ciudad, quiere saber si los cuatro restaurantes tienen el mismo tiempo promedio de servicio. Uno de los dueños de la cadena ha decidido visitar cada local y registrar el tiempo de servicio para 5 clientes escogidos al azar. En sus cuatro visitas al medio día registró los siguientes tiempos de servicio en minutos:
knitr::kable(
  data.frame(
    "Restaurante 1" = c(3, 4, 5.5, 3.5, 4),
    "Restaurante 2" = c(3, 3.5, 4.5, 4, 5.5),
    "Restaurante 3" = c(2, 3.5, 5, 6.5, 6),
    "Restaurante 4" = c(3, 4, 5.5, 2.5, 3)
  ),
  format = "markdown"
)
Restaurante.1 Restaurante.2 Restaurante.3 Restaurante.4
3.0 3.0 2.0 3.0
4.0 3.5 3.5 4.0
5.5 4.5 5.0 5.5
3.5 4.0 6.5 2.5
4.0 5.5 6.0 3.0
a) Utilice un nivel de significancia de 0.05, ¿todos los restaurantes tienen el mismo tiempo medio de servicio?
b) Según sus resultados, ¿deberá el dueño hacer algunas recomendaciones a cualquiera de los administradores de los restaurantes?
# a)
restaurante <- read.csv("/Users/educamachopaz/Downloads/restaurante.csv")
restaurante$restaurante <- as.factor(restaurante$restaurante)
qf(.95, df1=3, df2=16)
## [1] 3.238872
anova4 <- aov(tiempo ~ restaurante, data=restaurante)
summary(anova4)
##             Df Sum Sq Mean Sq F value Pr(>F)
## restaurante  3  2.538  0.8458   0.509  0.682
## Residuals   16 26.600  1.6625
# No rechazamos H0
# Los tiempos medios de servicio no son significativamente diferentes.

# b)
# Ningun restaurante es peor, cualquier recomendación tendría que hacerse a todos los administradores.

12-64

Un arrendador está interesado en ver si las rentas de sus departamentos son las comunes. Para esto tomó una muestra aleatoria de 11 rentas y tamaños de departamentos en complejos de departamentos similares.
Los datos son los siguientes:
knitr::kable(
  data.frame(
    "Renta (dólares)" = c(230, 190, 450, 310, 218, 185, 340, 245, 125, 350, 280),
    "No.Recámaras" = c(2, 1, 3, 2, 2, 2, 2, 1, 1, 2, 2)
  ),
  format = "markdown"
)
Renta..dólares. No.Recámaras
230 2
190 1
450 3
310 2
218 2
185 2
340 2
245 1
125 1
350 2
280 2
a) Desarrolle la ecuación de estimación que mejor describa estos datos.
b) Calcule el coeficiente de determinación.
c) Pronostique la renta para un departamento de dos recámaras.
# a)
renta <- c(230,190,450,310, 218, 185, 340, 245, 125, 350, 280)
recamaras <- c(2, 1, 3, 2, 2, 2, 2, 1, 1, 2, 2)

regresion3 <- lm(renta  ~ recamaras)
summary(regresion3)
## 
## Call:
## lm(formula = renta ~ recamaras)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -101.80  -51.35   19.10   50.25   74.10 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)    55.00      63.19   0.870  0.40667   
## recamaras     115.90      33.13   3.498  0.00675 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 63.19 on 9 degrees of freedom
## Multiple R-squared:  0.5762, Adjusted R-squared:  0.5291 
## F-statistic: 12.23 on 1 and 9 DF,  p-value: 0.006746
# Renta = 55.00 + 115.90 Recamaras

# b)
# r2 = 0.5762

# c)
recamaras1 <- 2
renta1 <- 55+115.90*recamaras1
renta1
## [1] 286.8
# $286.80
LS0tCnRpdGxlOiAiRGlhZ27Ds3N0aWNvX1dPUktTSE9QMiIKYXV0aG9yOiAiRWR1YXJkb19DYW1hY2hvIgpkYXRlOiAiMjAyMy0wNS0yMyIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKLS0tCgojIyBUZW1hIDQtIFQgZGUgU3R1ZGVudAoKIVtdKC9Vc2Vycy9lZHVjYW1hY2hvcGF6L0Rvd25sb2Fkcy9lMTdkMDEyYzc5OTE5YmM3MzEzMTZiZTk5YTA1MDZiZS5naWYpCgoKYGBge3J9CnBhZ29zIDwtIGMoMTA3LDkyLDk3LDk1LDEwNSwxMDEsOTEsOTksOTUsMTA0KQoKdC50ZXN0KHBhZ29zLCB5ID0gTlVMTCwgYWx0ZXJuYXRpdmEgPSAidHdvLnNpZGVkIiwgbXU9MTAwLCBwYWlyZWQ9RkFMU0UsdmFyLmVxdWFsPUZBTFNFLCBjb25mLmxldmVsPTAuOTApCmBgYAoKYGBge3J9CiMgU2kgZXMgZGUgdW5hIGNvbGEsIGFsdGVybmF0aXZlIHB1ZWRlIHNlciAibWVub3IiIG8gIm1heW9yIi4KCiMgU2kgcCB2YWx1ZSBlcyBtYXlvciBhIDAuMTAgbm8gc2UgcmVjaGF6YSBIMAoKIyBDb25jbHVzaW9uOiBubyBzZSByZWNoYXphIEgwCiMgSW50ZXJ2YWxvIGRlIGNvbmZpYW56YTogZW50cmUgOTUgeSAxMDEgZMOzbGFyZXMKYGBgCgoKIyMjIyAqKjgtNzAqKgoKIyMjIyBEcml2ZS1hLUxlbW9uLCByZW50YSBhdXRvbcOzdmlsZXMgZW4gYnVlbmFzIGNvbmRpY2lvbmVzIG1lY8OhbmljYXMsIHBlcm8gbcOhcyBhbnRpZ3VvcyBxdWUgYXF1ZWxsb3MgcXVlIHJlbnRhbiBsYXMgZ3JhbmRlcyBjYWRlbmFzIG5hY2lvbmFsZXMgZGUgcmVudGEgZGUgY29jaGVzLiBDb21vIHJlc3VsdGFkbywgYW51bmNpYSBxdWUgc3VzIHRhcmlmYXMgc29uIGNvbnNpZGVyYWJsZW1lbnRlIG3DoXMgYmFqYXMgcXVlIGxhcyBkZSBzdXMgZ3JhbmRlcyBjb21wZXRpZG9yZXMuIFVuYSBlbmN1ZXN0YSBlbiBsYSBpbmR1c3RyaWEgZXN0YWJsZWNpw7MgcXVlIGVsIGNhcmdvIHRvdGFsIHByb21lZGlvIHBvciByZW50YSBlbiB1bmEgZGUgbGFzIG1heW9yZXMgY29tcGHDscOtYXMgZXMgZGUgJDc3LjM4IGTDs2xhcmVzLiBVbmEgbXVlc3RyYSBhbGVhdG9yaWEgZGUgMTggdHJhbnNhY2Npb25lcyByZWFsaXphZGFzIHBvciBEcml2ZS1hLUxlbW9uIG1vc3Ryw7MgdW4gY2FyZ28gdG90YWwgcHJvbWVkaW8gZGUgJDg3LjYxLCBjb24gdW5hIGRlc3ZpYWNpw7NuIGVzdMOhbmRhciBkZSBsYSBtdWVzdHJhIGRlICQxOS40OC4gVmVyaWZpcXVlIHF1ZSwgY29uIHVuIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgZGUgMC4wMjUsIGVsIGNhcmdvIHRvdGFsIHByb21lZGlvIGRlIERyaXZlLWEtTGVtb24gZXMgbcOhcyBhbHRvIHF1ZSBlbCBkZSBsYXMgZ3JhbmRlcyBjb21wYcOxw61hcy4gwr9JbmRpY2EgZXN0ZSByZXN1bHRhZG8gcXVlIGxhcyB0YXJpZmFzIGRlIERyaXZlLWEtTGVtb24sIG5vIHNvbiBtw6FzIGJhamFzIHF1ZSBsYXMgZGUgbGFzIGdyYW5kZXMgY2FkZW5hcyBuYWNpb25hbGVzPyBKdXN0aWZpcXVlIHN1IHJlc3B1ZXN0YS4KCgpgYGB7cn0KI1Bhc28gMS4gUGxhbnRlYXIgSGlww7N0ZXNpcwojSDA6IMK1ID0geGJhcgojSDE6IMK1ID4geGJhcgoKI1Bhc28gMi4gTml2ZWwgZGUgQ29uZmlhbnphIHkgR3JhZG9zIGRlIExpYmVydGFkCiNhbHBoYSA9IDAuMDI1CiNHTCA9IDE3CgojUGFzbyAzLiBab25hIGRlIEFjcGV0YWNpw7NuL1JlY2hhem8KI3QgZGUgVGFibGEgPSAyLjExMAoKI1Bhc28gNC4gRsOzcm11bGEKdCA8LSAoODcuNjEtNzcuMzgpLygxOS40OC8oc3FydCgxOCkpKQp0CgojUGFzbyA1LSBDb25jbHVzacOzbgojU2UgcmVjaGF6YSBIMApgYGAKCiMjIFRlbWEgNS4gQW7DoWxpc2lzIGRlIFZhcmlhbnphIChBTk9WQSkKCiFbXSgvVXNlcnMvZWR1Y2FtYWNob3Bhei9Eb3dubG9hZHMvZ2lwaHkuZ2lmKQogCiMjIyMjIFNlIHV0aWxpemEgcGFyYSBkZXRlcm1pbmFyIHNpIGV4aXN0ZW4gZGlmZXJlbmNpYXMgZXN0YWRpc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZhcyBlbnRyZSBsYXMgbWVkaWFzIGRlIDMgbyBtw6FzIGdydXBvcy4KCiMjIyMjIEZhY3RvcjogQ2FyYWN0ZXLDrXN0aWNhIHF1ZSBkaWZlcmVuc2lhIGxhcyBwb2JsYWNpb25lcyAvdHJhdGFtaWVudG9zCiMjIyMjIFRpcG8gZGUgQ2FqYSAKIyMjIyMgTml2ZWxlczogRGlzdGludGFzIHBvYmxhY2lvbmVzIHRyYXRhbWllbnRvcwojIyMjIyBPYnNlcnZhY2lvbmVzOiBQYXJ0ZXMgZW4gY2FkYSBwb2JsYWNpw7NuL3RyYXRhbWllbnRvLgoKCiMjIyMjIFBhc28gMS4gUGxhbnRlYXIgSGlww7N0ZXNpcwojIyMjIyBIMDogTTEgPSBNMiA9IE0zID0gTTQKIyMjIyMgSDE6IFBvciBsbyBtZW5vcyBkb3MgZGUgbGFzIE1pIHNvbiBkaWZlcmVudGVzCgojIyMjIyBQYXNvIDIuIE5pdmVsIGRlIFNpZ25pZmljYW5jaWEKIyMjIyMgYWxwaGEgPSAwLjA1CiMjIyMjIEdyYWRvcyBkZSBMaWJlcnRhZCBkZSBsb3MgVHJhdGFtaWVudG9zID0gR0x0ckwgPSAxNwoKIyMjIyMgUGFzbyAzLiBab25hIGRlIEFjcGV0YWNpw7NuL1JlY2hhem8KIyMjIyMgdCBkZSBUYWJsYSA9IDIuMTEwCgojIyMgRWplcmNpY2lvIDEKCmBgYHtyfQpyZXNpc3RlbmNpYSA8LSByZWFkLmNzdiAoIi9Vc2Vycy9lZHVjYW1hY2hvcGF6L0Rlc2t0b3AvUiBjb2Rlcy9BTk9WQSBNZXpjbGFzLmNzdiIpCnJlc2lzdGVuY2lhCgpgYGAKCmBgYHtyfQpyZXNpc3RlbmNpYSRNZXpjbGEgPC0gYXMuZmFjdG9yKHJlc2lzdGVuY2lhJE1lemNsYSkKcWYoLjk1LGRmMT0zLGRmPTIwKQphbm92YTEgPC0gYW92KFZhbG9yIH4gTWV6Y2xhLCBkYXRhPXJlc2lzdGVuY2lhKQpzdW1tYXJ5KGFub3ZhMSkKYGBgCgojIyMgRWplcmNpY2lvIDIKYGBge3J9Cm1hbmNoYWRvIDwtIHJlYWQuY3N2ICgiL1VzZXJzL2VkdWNhbWFjaG9wYXovRGVza3RvcC9SIGNvZGVzL0FOT1ZBIEdyYWRvLmNzdiIpCm1hbmNoYWRvJE1hbmNoYWRvIDwtIGFzLmZhY3RvcihtYW5jaGFkbyRNYW5jaGFkbykKcWYoLjk5LGRmMT0yLGRmPTEyKQphbm92YTIgPC0gYW92KFZhbG9yIH4gTWFuY2hhZG8sIGRhdGE9bWFuY2hhZG8pCnN1bW1hcnkoYW5vdmEyKQpgYGAKCiMjIFRlbWEgNi4gUmVncmVzaW9uIExpbmVhbAoKIyMjIEVqZXJjaWNpbyAxCgpgYGB7cn0KeDwtIGMoMC4yLDAuNSwxLDIsMykgCnkgPC0gYyg4LDEwLDE4LDM1LCA2MCkgCnJlZ3Jlc2lvbiA8LSBsbSh5fngpIApzdW1tYXJ5IChyZWdyZXNpb24pCnBsb3QocmVncmVzaW9uKQpgYGAKCiMjIyBFamVyY2ljaW8gMgoKYGBge3J9CmEgPC0gYygtNiwtMywwLDMsNiw5LDEyLDE1LDIwLDI1KQpiIDwtIGMoMiwyLjgsMy45LDQuMiw1LjgsNi4yLDcuNSw4LjIsOS4zLDEwLjkpCnJlZ3Jlc2lvbjIgPC0gbG0gKGJ+YSkKc3VtbWFyeShyZWdyZXNpb24yKQpwbG90KHJlZ3Jlc2lvbjIpCmBgYAoKIyMgVGVtYSA3LiBFamVyY2ljaW9zIGRlbCBNdW5kbyBSZWFsCgojIyMgKioxMS0yNioqCiMjIyMjIEVuIHVuIGVzdHVkaW8gc2UgY29tcGFyYXJvbiBsb3MgZWZlY3RvcyBkZSBjdWF0cm8gcHJvbW9jaW9uZXMgbWVuc3VhbGVzIHNvYnJlIGxhcyB2ZW50YXMuIEEgY29udGludWFjacOzbiwgcHJlc2VudGFtb3MgbGFzIHZlbnRhcyB1bml0YXJpYXMgZGUgNSB0aWVuZGFzIHF1ZSB1dGlsaXphcm9uIGxhcyA0IHByb21vY2lvbmVzIGVuIG1lc2VzIGRpZmVyZW50ZXM6CiMjIyMjIEFsIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgZGUgMC4wMSDCv2xhcyBwcm9tb2Npb25lcyBwcm9kdWNlbiBkaWZlcmVudGVzIGVmZWN0b3Mgc29icmUgbGFzIHZlbnRhcz8KCmBgYHtyfQprbml0cjo6a2FibGUoCnZlbnRhcyA8LSBkYXRhLmZyYW1lKAogIEEgPSBjKDQuNCwgNC42LCA0LjUsIDQuMSwgMy44KSwKICBCID0gYyg1LjgsIDUuMiwgNC45LCA0LjcsIDQuNiksCiAgQyA9IGMoNC44LCA1LjksIDQuOSwgNC42LCA0LjMpLAogIEQgPSBjKDIuOSwgMi43LCAyLjksIDMuOSwgNC4zKSwKICBFID0gYyg0LjYsIDQuMywgMy44LCA1LjIsIDQuNCkKKSwKICBmb3JtYXQgPSJtYXJrZG93biIKKQpgYGAKIyMjIyBhKSBDYWxjdWxlIGVsIG7Dum1lcm8gbWVkaW8gZGUgaG9yYXMgZGUgYWxpdmlvIHBhcmEgY2FkYSBtYXJjYSB5IGRldGVybWluZSBsYSBncmFuIG1lZGlhLgoKYGBge3J9CiMgYSkKYW50aWFjaWRvcyA8LSByZWFkLmNzdigiL1VzZXJzL2VkdWNhbWFjaG9wYXovRG93bmxvYWRzL2FudGlhY2lkb3MuY3N2IikKYW50aWFjaWRvcyRtYXJjYSA8LSBhcy5mYWN0b3IoYW50aWFjaWRvcyRtYXJjYSkKcWYoLjk1LGRmMT00LCBkZjI9MjApCmBgYAoKYGBge3J9CmFub3ZhMyA8LSBhb3YoaG9yYXMgfiBtYXJjYSwgZGF0YT1hbnRpYWNpZG9zKQpzdW1tYXJ5KGFub3ZhMykKYGBgCgpgYGB7cn0KIyMgRiAgNy42NSwgRnUgIDIuODcsIHJlY2hhemFtb3MgSDAuIAojIyBMYXMgbWFyY2FzIHByb2R1Y2VuIHVuYSBjYW50aWRhZCBkZSBhbGl2aW8gc2lnbmlmaWNhdGl2YW1lbnRlIGRpZmVyZW50ZS4KYGBgCgojIyMgKioxMS0zOCoqCgojIyMjIyBFbiBsYSBjaXVkYWQgZGUgQmlndmlsbGUsIHVuYSBjYWRlbmEgZGUgY29taWRhIHLDoXBpZGEgZXN0w6EgYWRxdWlyaWVuZG8gdW5hIG1hbGEgcmVwdXRhY2nDs24gZGViaWRvIGEgcXVlIHRhcmRhbiBtdWNobyBlbiBzZXJ2aXIgYSBsb3MgY2xpZW50ZXMuIENvbW8gbGEgY2FkZW5hIHRpZW5lIGN1YXRybyByZXN0YXVyYW50ZXMgZW4gZXNhIGNpdWRhZCwgcXVpZXJlIHNhYmVyIHNpIGxvcyBjdWF0cm8gcmVzdGF1cmFudGVzIHRpZW5lbiBlbCBtaXNtbyB0aWVtcG8gcHJvbWVkaW8gZGUgc2VydmljaW8uIFVubyBkZSBsb3MgZHVlw7FvcyBkZSBsYSBjYWRlbmEgaGEgZGVjaWRpZG8gdmlzaXRhciBjYWRhIGxvY2FsIHkgcmVnaXN0cmFyIGVsIHRpZW1wbyBkZSBzZXJ2aWNpbyBwYXJhIDUgY2xpZW50ZXMgZXNjb2dpZG9zIGFsIGF6YXIuIEVuIHN1cyBjdWF0cm8gdmlzaXRhcyBhbCBtZWRpbyBkw61hIHJlZ2lzdHLDsyBsb3Mgc2lndWllbnRlcyB0aWVtcG9zIGRlIHNlcnZpY2lvIGVuIG1pbnV0b3M6CgpgYGB7cn0Ka25pdHI6OmthYmxlKAogIGRhdGEuZnJhbWUoCiAgICAiUmVzdGF1cmFudGUgMSIgPSBjKDMsIDQsIDUuNSwgMy41LCA0KSwKICAgICJSZXN0YXVyYW50ZSAyIiA9IGMoMywgMy41LCA0LjUsIDQsIDUuNSksCiAgICAiUmVzdGF1cmFudGUgMyIgPSBjKDIsIDMuNSwgNSwgNi41LCA2KSwKICAgICJSZXN0YXVyYW50ZSA0IiA9IGMoMywgNCwgNS41LCAyLjUsIDMpCiAgKSwKICBmb3JtYXQgPSAibWFya2Rvd24iCikKYGBgCgojIyMjIyBhKSBVdGlsaWNlIHVuIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgZGUgMC4wNSwgwr90b2RvcyBsb3MgcmVzdGF1cmFudGVzIHRpZW5lbiBlbCBtaXNtbyB0aWVtcG8gbWVkaW8gZGUgc2VydmljaW8/CgojIyMjIyBiKSBTZWfDum4gc3VzIHJlc3VsdGFkb3MsIMK/ZGViZXLDoSBlbCBkdWXDsW8gaGFjZXIgYWxndW5hcyByZWNvbWVuZGFjaW9uZXMgYSBjdWFscXVpZXJhIGRlIGxvcyBhZG1pbmlzdHJhZG9yZXMgZGUgbG9zIHJlc3RhdXJhbnRlcz8KCmBgYHtyfQojIGEpCnJlc3RhdXJhbnRlIDwtIHJlYWQuY3N2KCIvVXNlcnMvZWR1Y2FtYWNob3Bhei9Eb3dubG9hZHMvcmVzdGF1cmFudGUuY3N2IikKcmVzdGF1cmFudGUkcmVzdGF1cmFudGUgPC0gYXMuZmFjdG9yKHJlc3RhdXJhbnRlJHJlc3RhdXJhbnRlKQpxZiguOTUsIGRmMT0zLCBkZjI9MTYpCmBgYAoKYGBge3J9CmFub3ZhNCA8LSBhb3YodGllbXBvIH4gcmVzdGF1cmFudGUsIGRhdGE9cmVzdGF1cmFudGUpCnN1bW1hcnkoYW5vdmE0KQpgYGAKCmBgYHtyfQojIE5vIHJlY2hhemFtb3MgSDAKIyBMb3MgdGllbXBvcyBtZWRpb3MgZGUgc2VydmljaW8gbm8gc29uIHNpZ25pZmljYXRpdmFtZW50ZSBkaWZlcmVudGVzLgoKIyBiKQojIE5pbmd1biByZXN0YXVyYW50ZSBlcyBwZW9yLCBjdWFscXVpZXIgcmVjb21lbmRhY2nDs24gdGVuZHLDrWEgcXVlIGhhY2Vyc2UgYSB0b2RvcyBsb3MgYWRtaW5pc3RyYWRvcmVzLgpgYGAKCiMjIyAqKjEyLTY0KioKCiMjIyMjIFVuIGFycmVuZGFkb3IgZXN0w6EgaW50ZXJlc2FkbyBlbiB2ZXIgc2kgbGFzIHJlbnRhcyBkZSBzdXMgZGVwYXJ0YW1lbnRvcyBzb24gbGFzIGNvbXVuZXMuIFBhcmEgZXN0byB0b23DsyB1bmEgbXVlc3RyYSBhbGVhdG9yaWEgZGUgMTEgcmVudGFzIHkgdGFtYcOxb3MgZGUgZGVwYXJ0YW1lbnRvcyBlbiBjb21wbGVqb3MgZGUgZGVwYXJ0YW1lbnRvcyBzaW1pbGFyZXMuIAoKIyMjIyMgTG9zIGRhdG9zIHNvbiBsb3Mgc2lndWllbnRlczoKCmBgYHtyfQprbml0cjo6a2FibGUoCiAgZGF0YS5mcmFtZSgKICAgICJSZW50YSAoZMOzbGFyZXMpIiA9IGMoMjMwLCAxOTAsIDQ1MCwgMzEwLCAyMTgsIDE4NSwgMzQwLCAyNDUsIDEyNSwgMzUwLCAyODApLAogICAgIk5vLlJlY8OhbWFyYXMiID0gYygyLCAxLCAzLCAyLCAyLCAyLCAyLCAxLCAxLCAyLCAyKQogICksCiAgZm9ybWF0ID0gIm1hcmtkb3duIgopCmBgYAoKIyMjIyMgYSkgRGVzYXJyb2xsZSBsYSBlY3VhY2nDs24gZGUgZXN0aW1hY2nDs24gcXVlIG1lam9yIGRlc2NyaWJhIGVzdG9zIGRhdG9zLgojIyMjIyBiKSBDYWxjdWxlIGVsIGNvZWZpY2llbnRlIGRlIGRldGVybWluYWNpw7NuLgojIyMjIyBjKSBQcm9ub3N0aXF1ZSBsYSByZW50YSBwYXJhIHVuIGRlcGFydGFtZW50byBkZSBkb3MgcmVjw6FtYXJhcy4KCmBgYHtyfQojIGEpCnJlbnRhIDwtIGMoMjMwLDE5MCw0NTAsMzEwLCAyMTgsIDE4NSwgMzQwLCAyNDUsIDEyNSwgMzUwLCAyODApCnJlY2FtYXJhcyA8LSBjKDIsIDEsIDMsIDIsIDIsIDIsIDIsIDEsIDEsIDIsIDIpCgpyZWdyZXNpb24zIDwtIGxtKHJlbnRhICB+IHJlY2FtYXJhcykKc3VtbWFyeShyZWdyZXNpb24zKQpgYGAKCmBgYHtyfQojIFJlbnRhID0gNTUuMDAgKyAxMTUuOTAgUmVjYW1hcmFzCgojIGIpCiMgcjIgPSAwLjU3NjIKCiMgYykKcmVjYW1hcmFzMSA8LSAyCnJlbnRhMSA8LSA1NSsxMTUuOTAqcmVjYW1hcmFzMQpyZW50YTEKYGBgCgpgYGB7cn0KIyAkMjg2LjgwCmBgYAoK