Dinâmica da Catapulta
library(FrF2)
library(rsm)
library(lmtest)
library(car)
library(Rsolnp)
DOE<-expand.grid(x1=c(3,6),
x2=c(3,5),
x3=c(2,4))
DOE
DOE<- rbind(DOE,DOE) #Replicação
DOE$Bloco<- as.factor(c(rep(1,8),rep(2,8)))
DOE
DOE$y<-c(284,258,437,420,547,532,707,663,
264,239,445,425,521,522,691,628)
DOE
funcao<-lm(y~ x1*x2*x3+Bloco,data = DOE)
summary(funcao)
Call:
lm.default(formula = y ~ x1 * x2 * x3 + Bloco, data = DOE)
Residuals:
Min 1Q Median 3Q Max
-11.062 -3.688 0.000 3.688 11.062
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -97.687 107.113 -0.912 0.3921
x1 -44.917 22.575 -1.990 0.0869 .
x2 54.250 25.971 2.089 0.0751 .
x3 82.125 33.862 2.425 0.0457 *
Bloco2 -14.125 5.194 -2.719 0.0298 *
x1:x2 10.083 5.475 1.842 0.1081
x1:x3 16.458 7.139 2.305 0.0545 .
x2:x3 12.875 8.213 1.568 0.1609
x1:x2:x3 -4.458 1.731 -2.575 0.0367 *
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 10.39 on 7 degrees of freedom
Multiple R-squared: 0.9979, Adjusted R-squared: 0.9955
F-statistic: 420.3 on 8 and 7 DF, p-value: 1.09e-08
summary(aov(funcao))
Df Sum Sq Mean Sq F value Pr(>F)
x1 1 2730 2730 25.297 0.00151 **
x2 1 97500 97500 903.451 1.16e-08 ***
x3 1 259845 259845 2407.764 3.82e-10 ***
Bloco 1 798 798 7.395 0.02979 *
x1:x2 1 390 390 3.614 0.09904 .
x1:x3 1 68 68 0.631 0.45318
x2:x3 1 827 827 7.659 0.02779 *
x1:x2:x3 1 716 716 6.631 0.03674 *
Residuals 7 755 108
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
funcao<-lm(y~ x1+x2+x3+Bloco+x2*x3,data = DOE)
summary(funcao)
Call:
lm.default(formula = y ~ x1 + x2 + x3 + Bloco + x2 * x3, data = DOE)
Residuals:
Min 1Q Median 3Q Max
-24.125 -4.156 0.250 8.531 14.625
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -260.625 46.586 -5.594 0.000229 ***
x1 -8.708 2.315 -3.762 0.003711 **
x2 99.625 10.980 9.073 3.85e-06 ***
x3 156.187 14.317 10.909 7.12e-07 ***
Bloco2 -14.125 6.945 -2.034 0.069346 .
x2:x3 -7.187 3.472 -2.070 0.065290 .
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 13.89 on 10 degrees of freedom
Multiple R-squared: 0.9947, Adjusted R-squared: 0.992
F-statistic: 375 on 5 and 10 DF, p-value: 4.897e-11
summary(aov(funcao))
Df Sum Sq Mean Sq F value Pr(>F)
x1 1 2730 2730 14.152 0.00371 **
x2 1 97500 97500 505.411 6.82e-10 ***
x3 1 259845 259845 1346.958 5.37e-12 ***
Bloco 1 798 798 4.137 0.06935 .
x2:x3 1 827 827 4.285 0.06529 .
Residuals 10 1929 193
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#=================== Teste de Normalidade=======================================
hist(funcao$residuals,lwd=4,freq = F,col = "magenta",
main="Resíduos")
curve(dnorm(x,mean(funcao$residuals),sd(funcao$residuals)),
add = T,col="blue",lwd=6)

curve(dnorm(x,mean(funcao$residuals),sd(funcao$residuals)),
from = min(funcao$residuals),to=max(funcao$residuals),
col="purple", main="Curva normal dos resíduos")

qqnorm(funcao$residuals,col="blue",lwd=4)
qqline(funcao$residuals,col="red",lwd=2)

shapiro.test(funcao$residuals)
Shapiro-Wilk normality test
data: funcao$residuals
W = 0.93796, p-value = 0.3248
library(FrF2)
library(rsm)
library(lmtest)
library(olsrr)
library(car)
residualPlots(funcao)
Test stat Pr(>|Test stat|)
x1 -0.2148 0.83471
x2 -2.2174 0.05379 .
x3 -0.0827 0.93593
Bloco
Tukey test 1.3075 0.19105
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

residualPlot(funcao)

ols_test_breusch_pagan(funcao,rhs = T,multiple = T)
Breusch Pagan Test for Heteroskedasticity
-----------------------------------------
Ho: the variance is constant
Ha: the variance is not constant
Data
--------------------------------
Response : y
Variables: x1 x2 x3 Bloco2 x2:x3
Test Summary (Unadjusted p values)
------------------------------------------------
Variable chi2 df p
------------------------------------------------
x1 0.01622404 1 0.89864471
x2 2.06663816 1 0.15055307
x3 1.73542325 1 0.18771978
Bloco2 1.38914089 1 0.23855024
x2:x3 3.60532371 1 0.05759485
------------------------------------------------
simultaneous 5.21736635 5 0.38993270
------------------------------------------------
bptest(funcao)
studentized Breusch-Pagan test
data: funcao
BP = 7.08, df = 5, p-value = 0.2148
dwt(funcao)
lag Autocorrelation D-W Statistic p-value
1 -0.1763429 2.047415 0.634
Alternative hypothesis: rho != 0
dwtest(funcao)
Durbin-Watson test
data: funcao
DW = 2.0474, p-value = 0.3185
alternative hypothesis: true autocorrelation is greater than 0
bgtest(funcao)
Breusch-Godfrey test for serial correlation of
order up to 1
data: funcao
LM test = 1.3679, df = 1, p-value = 0.2422
#========= Gráficos de Superfície e de Contorno=================================
persp(funcao,~x1+x2,zlab = "Distância",col=rainbow(250),
contours = "colors")

persp(funcao,~x1+x3,zlab = "Distância",col=rainbow(250),
contours = "colors")

persp(funcao,~x2+x3,zlab = "Distância",col=rainbow(250),
contours = "colors")

contour(funcao,~x1+x2,image = T)

contour(funcao,~x1+x3,image = T)

contour(funcao,~x2+x3,image = T)

#========= Gráfico das interações ==============================================
IAPlot(funcao)

#===== Gráfico das médias dos efeitos ==========================================
funcao2<-lm(y~x1+x2+x3+Bloco,data = DOE)
MEPlot(funcao2)

#========== Predição ===========================================================
predict(funcao,newdata = data.frame(x1=3,
x2=5,
x3=4,
Bloco="1"),se.fit = T,interval = "pred")
$fit
fit lwr upr
1 692.375 656.0861 728.6639
$se.fit
[1] 8.505421
$df
[1] 10
$residual.scale
[1] 13.88929
predict(funcao,newdata = data.frame(x1=3,
x2=5,
x3=4,
Bloco="2"),se.fit = T,interval = "pred")
$fit
fit lwr upr
1 678.25 641.9611 714.5389
$se.fit
[1] 8.505421
$df
[1] 10
$residual.scale
[1] 13.88929
obj=function(x){a<-
predict(funcao,newdata = data.frame(x1=x[1],
x2=x[2],
x3=x[3],
Bloco="2"))
return(-a)}
x0<-c(0,0,0)
optim(par = x0,fn=obj,lower = c(3,3,2),
upper = c(6,5,4),method = "L-BFGS-B")
$par
[1] 3 5 4
$value
[1] -678.25
$counts
function gradient
2 2
$convergence
[1] 0
$message
[1] "CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL"
#======= Usando pacotes do R para DoE fatorial =================================
DOE<- FrF2(nruns = 8,
nfactors = 3,
factor.names = c("x1","x2","x3"),
replications = 2,
randomize = F,
blocks = 1)
creating full factorial with 8 runs ...
DOE$y<-c(284,258,437,420,547,532,707,663,
264,239,445,425,521,522,691,628)
DOE
class=design, type= full factorial
NOTE: columns run.no and run.no.std.rp
are annotation, not part of the data frame
funcao3<-lm(y~x1*x2*x3+Blocks,data = DOE)
summary(funcao3)
Call:
lm.default(formula = y ~ x1 * x2 * x3 + Blocks, data = DOE)
Residuals:
Min 1Q Median 3Q Max
-11.062 -3.688 0.000 3.688 11.062
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 481.000 3.673 130.960 3.99e-13 ***
x11 -13.062 2.597 -5.030 0.00151 **
x21 78.062 2.597 30.057 1.16e-08 ***
x31 127.438 2.597 49.069 3.82e-10 ***
Blocks.2 -14.125 5.194 -2.719 0.02979 *
x11:x21 -4.938 2.597 -1.901 0.09904 .
x11:x31 -2.062 2.597 -0.794 0.45318
x21:x31 -7.187 2.597 -2.767 0.02779 *
x11:x21:x31 -6.687 2.597 -2.575 0.03674 *
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 10.39 on 7 degrees of freedom
Multiple R-squared: 0.9979, Adjusted R-squared: 0.9955
F-statistic: 420.3 on 8 and 7 DF, p-value: 1.09e-08
funcao3<-lm(y~x1+x2+x3+Blocks+x2*x3,data = DOE)
summary(funcao3)
Call:
lm.default(formula = y ~ x1 + x2 + x3 + Blocks + x2 * x3, data = DOE)
Residuals:
Min 1Q Median 3Q Max
-24.125 -4.156 0.250 8.531 14.625
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 481.000 4.911 97.951 3.01e-16 ***
x11 -13.062 3.472 -3.762 0.00371 **
x21 78.062 3.472 22.481 6.82e-10 ***
x31 127.438 3.472 36.701 5.37e-12 ***
Blocks.2 -14.125 6.945 -2.034 0.06935 .
x21:x31 -7.187 3.472 -2.070 0.06529 .
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 13.89 on 10 degrees of freedom
Multiple R-squared: 0.9947, Adjusted R-squared: 0.992
F-statistic: 375 on 5 and 10 DF, p-value: 4.897e-11
IAPlot(funcao3)

funcao4<-lm(y~x1+x2+x3+Blocks,data = DOE)
MEPlot(funcao4)

DOE<- FrF2(nruns = 8,
nfactors = 3,
factor.names = list(x1=c(3,6),
x2=c(3,5),
x3=c(2,4)),
replications = 2,
randomize = F,
blocks = 1)
creating full factorial with 8 runs ...
DOE
class=design, type= full factorial
NOTE: columns run.no and run.no.std.rp
are annotation, not part of the data frame
DOE$y<-c(284,258,437,420,547,532,707,663,
264,239,445,425,521,522,691,628)
DOE
class=design, type= full factorial
NOTE: columns run.no and run.no.std.rp
are annotation, not part of the data frame
funcao3<-lm(y~x1*x2*x3+Blocks,data = DOE)
summary(funcao3)
Call:
lm.default(formula = y ~ x1 * x2 * x3 + Blocks, data = DOE)
Residuals:
Min 1Q Median 3Q Max
-11.062 -3.688 0.000 3.688 11.062
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 481.000 3.673 130.960 3.99e-13 ***
x11 -13.062 2.597 -5.030 0.00151 **
x21 78.062 2.597 30.057 1.16e-08 ***
x31 127.438 2.597 49.069 3.82e-10 ***
Blocks.2 -14.125 5.194 -2.719 0.02979 *
x11:x21 -4.938 2.597 -1.901 0.09904 .
x11:x31 -2.062 2.597 -0.794 0.45318
x21:x31 -7.187 2.597 -2.767 0.02779 *
x11:x21:x31 -6.687 2.597 -2.575 0.03674 *
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 10.39 on 7 degrees of freedom
Multiple R-squared: 0.9979, Adjusted R-squared: 0.9955
F-statistic: 420.3 on 8 and 7 DF, p-value: 1.09e-08
funcao3<-lm(y~x1+x2+x3+Blocks+x2*x3,data = DOE)
summary(funcao3)
Call:
lm.default(formula = y ~ x1 + x2 + x3 + Blocks + x2 * x3, data = DOE)
Residuals:
Min 1Q Median 3Q Max
-24.125 -4.156 0.250 8.531 14.625
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 481.000 4.911 97.951 3.01e-16 ***
x11 -13.062 3.472 -3.762 0.00371 **
x21 78.062 3.472 22.481 6.82e-10 ***
x31 127.438 3.472 36.701 5.37e-12 ***
Blocks.2 -14.125 6.945 -2.034 0.06935 .
x21:x31 -7.187 3.472 -2.070 0.06529 .
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 13.89 on 10 degrees of freedom
Multiple R-squared: 0.9947, Adjusted R-squared: 0.992
F-statistic: 375 on 5 and 10 DF, p-value: 4.897e-11
IAPlot(funcao3)

funcao4<-lm(y~x1+x2+x3+Blocks,data = DOE)
MEPlot(funcao4)

LS0tDQp0aXRsZTogIkRvRSBGYXRvcmlhbCBDb21wbGV0byINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQpEaW7Dom1pY2EgZGEgQ2F0YXB1bHRhDQotLS0NCg0KYGBge3J9DQpsaWJyYXJ5KEZyRjIpDQpsaWJyYXJ5KHJzbSkNCmxpYnJhcnkobG10ZXN0KQ0KbGlicmFyeShjYXIpDQpsaWJyYXJ5KFJzb2xucCkNCg0KRE9FPC1leHBhbmQuZ3JpZCh4MT1jKDMsNiksDQogICAgICAgICAgICAgICAgIHgyPWMoMyw1KSwNCiAgICAgICAgICAgICAgICAgeDM9YygyLDQpKQ0KRE9FDQpET0U8LSByYmluZChET0UsRE9FKSAjUmVwbGljYcOnw6NvDQpET0UkQmxvY288LSBhcy5mYWN0b3IoYyhyZXAoMSw4KSxyZXAoMiw4KSkpDQpET0UNCkRPRSR5PC1jKDI4NCwyNTgsNDM3LDQyMCw1NDcsNTMyLDcwNyw2NjMsDQogICAgICAgICAyNjQsMjM5LDQ0NSw0MjUsNTIxLDUyMiw2OTEsNjI4KQ0KRE9FDQpmdW5jYW88LWxtKHl+IHgxKngyKngzK0Jsb2NvLGRhdGEgPSBET0UpDQpzdW1tYXJ5KGZ1bmNhbykNCnN1bW1hcnkoYW92KGZ1bmNhbykpDQpmdW5jYW88LWxtKHl+IHgxK3gyK3gzK0Jsb2NvK3gyKngzLGRhdGEgPSBET0UpDQpzdW1tYXJ5KGZ1bmNhbykNCnN1bW1hcnkoYW92KGZ1bmNhbykpDQojPT09PT09PT09PT09PT09PT09PSBUZXN0ZSBkZSBOb3JtYWxpZGFkZT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KaGlzdChmdW5jYW8kcmVzaWR1YWxzLGx3ZD00LGZyZXEgPSBGLGNvbCA9ICJtYWdlbnRhIiwNCiAgICAgbWFpbj0iUmVzw61kdW9zIikNCmN1cnZlKGRub3JtKHgsbWVhbihmdW5jYW8kcmVzaWR1YWxzKSxzZChmdW5jYW8kcmVzaWR1YWxzKSksDQogICAgICBhZGQgPSBULGNvbD0iYmx1ZSIsbHdkPTYpDQpjdXJ2ZShkbm9ybSh4LG1lYW4oZnVuY2FvJHJlc2lkdWFscyksc2QoZnVuY2FvJHJlc2lkdWFscykpLA0KICAgICAgZnJvbSA9IG1pbihmdW5jYW8kcmVzaWR1YWxzKSx0bz1tYXgoZnVuY2FvJHJlc2lkdWFscyksDQogICAgICBjb2w9InB1cnBsZSIsIG1haW49IkN1cnZhIG5vcm1hbCBkb3MgcmVzw61kdW9zIikNCiAgcXFub3JtKGZ1bmNhbyRyZXNpZHVhbHMsY29sPSJibHVlIixsd2Q9NCkNCiAgcXFsaW5lKGZ1bmNhbyRyZXNpZHVhbHMsY29sPSJyZWQiLGx3ZD0yKQ0Kc2hhcGlyby50ZXN0KGZ1bmNhbyRyZXNpZHVhbHMpDQpsaWJyYXJ5KEZyRjIpDQpsaWJyYXJ5KHJzbSkNCmxpYnJhcnkobG10ZXN0KQ0KbGlicmFyeShvbHNycikNCmxpYnJhcnkoY2FyKQ0KcmVzaWR1YWxQbG90cyhmdW5jYW8pDQpyZXNpZHVhbFBsb3QoZnVuY2FvKQ0Kb2xzX3Rlc3RfYnJldXNjaF9wYWdhbihmdW5jYW8scmhzID0gVCxtdWx0aXBsZSA9IFQpDQpicHRlc3QoZnVuY2FvKQ0KZHd0KGZ1bmNhbykNCmR3dGVzdChmdW5jYW8pDQpiZ3Rlc3QoZnVuY2FvKQ0KYGBgDQoNCmBgYHtyfQ0KIz09PT09PT09PSBHcsOhZmljb3MgZGUgU3VwZXJmw61jaWUgZSBkZSBDb250b3Jubz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KcGVyc3AoZnVuY2FvLH54MSt4Mix6bGFiID0gIkRpc3TDom5jaWEiLGNvbD1yYWluYm93KDI1MCksDQogICAgICBjb250b3VycyA9ICJjb2xvcnMiKQ0KcGVyc3AoZnVuY2FvLH54MSt4Myx6bGFiID0gIkRpc3TDom5jaWEiLGNvbD1yYWluYm93KDI1MCksDQogICAgICBjb250b3VycyA9ICJjb2xvcnMiKQ0KcGVyc3AoZnVuY2FvLH54Mit4Myx6bGFiID0gIkRpc3TDom5jaWEiLGNvbD1yYWluYm93KDI1MCksDQogICAgICBjb250b3VycyA9ICJjb2xvcnMiKQ0KY29udG91cihmdW5jYW8sfngxK3gyLGltYWdlID0gVCkNCmNvbnRvdXIoZnVuY2FvLH54MSt4MyxpbWFnZSA9IFQpDQpjb250b3VyKGZ1bmNhbyx+eDIreDMsaW1hZ2UgPSBUKQ0KDQojPT09PT09PT09IEdyw6FmaWNvIGRhcyBpbnRlcmHDp8O1ZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KSUFQbG90KGZ1bmNhbykNCiM9PT09PSBHcsOhZmljbyBkYXMgbcOpZGlhcyBkb3MgZWZlaXRvcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCmZ1bmNhbzI8LWxtKHl+eDEreDIreDMrQmxvY28sZGF0YSA9IERPRSkNCk1FUGxvdChmdW5jYW8yKQ0KIz09PT09PT09PT0gUHJlZGnDp8OjbyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KcHJlZGljdChmdW5jYW8sbmV3ZGF0YSA9IGRhdGEuZnJhbWUoeDE9MywNCiAgICAgICAgICAgICAgICAgICAgeDI9NSwNCiAgICAgICAgICAgICAgICAgICAgeDM9NCwNCiBCbG9jbz0iMSIpLHNlLmZpdCA9IFQsaW50ZXJ2YWwgPSAicHJlZCIpDQoNCnByZWRpY3QoZnVuY2FvLG5ld2RhdGEgPSBkYXRhLmZyYW1lKHgxPTMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj01LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDM9NCwNCiAgICBCbG9jbz0iMiIpLHNlLmZpdCA9IFQsaW50ZXJ2YWwgPSAicHJlZCIpDQpgYGANCg0KDQpgYGB7cn0NCm9iaj1mdW5jdGlvbih4KXthPC0NCiAgcHJlZGljdChmdW5jYW8sbmV3ZGF0YSA9IGRhdGEuZnJhbWUoeDE9eFsxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9eFsyXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDM9eFszXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY289IjIiKSkNCnJldHVybigtYSl9DQp4MDwtYygwLDAsMCkNCm9wdGltKHBhciA9IHgwLGZuPW9iaixsb3dlciA9IGMoMywzLDIpLA0KICAgICAgdXBwZXIgPSBjKDYsNSw0KSxtZXRob2QgPSAiTC1CRkdTLUIiKQ0KDQojPT09PT09PSBVc2FuZG8gcGFjb3RlcyBkbyBSIHBhcmEgRG9FIGZhdG9yaWFsID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpET0U8LSBGckYyKG5ydW5zID0gOCwNCiAgICAgICAgICAgbmZhY3RvcnMgPSAzLA0KICAgICAgICAgICBmYWN0b3IubmFtZXMgPSBjKCJ4MSIsIngyIiwieDMiKSwNCiAgICAgICAgICAgcmVwbGljYXRpb25zID0gMiwNCiAgICAgICAgICAgcmFuZG9taXplID0gRiwNCiAgICAgICAgICAgYmxvY2tzID0gMSkNCiAgDQogIERPRSR5PC1jKDI4NCwyNTgsNDM3LDQyMCw1NDcsNTMyLDcwNyw2NjMsDQogICAgICAgICAgIDI2NCwyMzksNDQ1LDQyNSw1MjEsNTIyLDY5MSw2MjgpDQpET0UNCg0KZnVuY2FvMzwtbG0oeX54MSp4Mip4MytCbG9ja3MsZGF0YSA9IERPRSkNCnN1bW1hcnkoZnVuY2FvMykNCmZ1bmNhbzM8LWxtKHl+eDEreDIreDMrQmxvY2tzK3gyKngzLGRhdGEgPSBET0UpDQpzdW1tYXJ5KGZ1bmNhbzMpDQpJQVBsb3QoZnVuY2FvMykNCmZ1bmNhbzQ8LWxtKHl+eDEreDIreDMrQmxvY2tzLGRhdGEgPSBET0UpIA0KTUVQbG90KGZ1bmNhbzQpDQoNCmBgYA0KDQpgYGB7cn0NCkRPRTwtIEZyRjIobnJ1bnMgPSA4LA0KICAgICAgICAgICBuZmFjdG9ycyA9IDMsDQogICAgICAgICAgIGZhY3Rvci5uYW1lcyA9IGxpc3QoeDE9YygzLDYpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9YygzLDUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDM9YygyLDQpKSwNCiAgICAgICAgICAgcmVwbGljYXRpb25zID0gMiwNCiAgICAgICAgICAgcmFuZG9taXplID0gRiwNCiAgICAgICAgICAgYmxvY2tzID0gMSkNCkRPRQ0KICANCiAgRE9FJHk8LWMoMjg0LDI1OCw0MzcsNDIwLDU0Nyw1MzIsNzA3LDY2MywNCiAgICAgICAgICAgMjY0LDIzOSw0NDUsNDI1LDUyMSw1MjIsNjkxLDYyOCkNCkRPRQ0KDQpmdW5jYW8zPC1sbSh5fngxKngyKngzK0Jsb2NrcyxkYXRhID0gRE9FKQ0Kc3VtbWFyeShmdW5jYW8zKQ0KZnVuY2FvMzwtbG0oeX54MSt4Mit4MytCbG9ja3MreDIqeDMsZGF0YSA9IERPRSkNCnN1bW1hcnkoZnVuY2FvMykNCklBUGxvdChmdW5jYW8zKQ0KZnVuY2FvNDwtbG0oeX54MSt4Mit4MytCbG9ja3MsZGF0YSA9IERPRSkgDQpNRVBsb3QoZnVuY2FvNCkNCmBgYA0KDQo=