library(rsm)
library(lmtest)
library(carData)
library(car)
library(nortest)
library(NlcOptim)
library(FrF2)
library(ggthemes)
library(rio)
library(ROI)
library(MASS)
library(nloptr)
DOE<-bbd(k=~x1+x2+x3,
block = F,
n0=5,
randomize = F,
coding = list(x1~(M-3)/2,
x2~(Mart-3)/1,
x3~(fixa-3)/1))
DOE
run.order std.order M Mart fixa
1 1 1 1 2 3
2 2 2 5 2 3
3 3 3 1 4 3
4 4 4 5 4 3
5 5 5 1 3 2
6 6 6 5 3 2
7 7 7 1 3 4
8 8 8 5 3 4
9 9 9 3 2 2
10 10 10 3 4 2
11 11 11 3 2 4
12 12 12 3 4 4
13 13 13 3 3 3
14 14 14 3 3 3
15 15 15 3 3 3
16 16 16 3 3 3
17 17 17 3 3 3
Data are stored in coded form using these coding formulas ...
x1 ~ (M - 3)/2
x2 ~ (Mart - 3)/1
x3 ~ (fixa - 3)/1
DOE$y1<-c(0.95, 1.35, 2.72, 4.40, 1.21, 1.76, 2.33, 4.82,
0.59,3.25, 3.47, 6.61, 3.11, 3.33, 3.50,
3.55, 3.28 )
DOE$y2<-c(1.31, 2.02, 2.86, 4.32, 1.52, 3.24, 3.13,
4.31, 1.05, 3.36, 3.21, 5.34, 3.36, 3.15,
3.64, 3.45, 3.44 )
DOE
run.order std.order M Mart fixa y1 y2
1 1 1 1 2 3 0.95 1.31
2 2 2 5 2 3 1.35 2.02
3 3 3 1 4 3 2.72 2.86
4 4 4 5 4 3 4.40 4.32
5 5 5 1 3 2 1.21 1.52
6 6 6 5 3 2 1.76 3.24
7 7 7 1 3 4 2.33 3.13
8 8 8 5 3 4 4.82 4.31
9 9 9 3 2 2 0.59 1.05
10 10 10 3 4 2 3.25 3.36
11 11 11 3 2 4 3.47 3.21
12 12 12 3 4 4 6.61 5.34
13 13 13 3 3 3 3.11 3.36
14 14 14 3 3 3 3.33 3.15
15 15 15 3 3 3 3.50 3.64
16 16 16 3 3 3 3.55 3.45
17 17 17 3 3 3 3.28 3.44
Data are stored in coded form using these coding formulas ...
x1 ~ (M - 3)/2
x2 ~ (Mart - 3)/1
x3 ~ (fixa - 3)/1
funcao<-rsm(y1~SO(x1,x2,x3),data = DOE)
summary(funcao)
Call:
rsm(formula = y1 ~ SO(x1, x2, x3), data = DOE)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.35400 0.15956 21.0210 1.387e-07 ***
x1 0.64000 0.12614 5.0738 0.0014410 **
x2 1.32750 0.12614 10.5241 1.526e-05 ***
x3 1.30250 0.12614 10.3259 1.731e-05 ***
x1:x2 0.32000 0.17839 1.7938 0.1159236
x1:x3 0.48500 0.17839 2.7188 0.0298173 *
x2:x3 0.12000 0.17839 0.6727 0.5227215
x1^2 -0.97450 0.17387 -5.6047 0.0008119 ***
x2^2 -0.02450 0.17387 -0.1409 0.8919109
x3^2 0.15050 0.17387 0.8656 0.4153954
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Multiple R-squared: 0.9761, Adjusted R-squared: 0.9454
F-statistic: 31.79 on 9 and 7 DF, p-value: 7.345e-05
Analysis of Variance Table
Response: y1
Df Sum Sq Mean Sq F value Pr(>F)
FO(x1, x2, x3) 3 30.9469 10.3156 81.0413 8.444e-06
TWI(x1, x2, x3) 3 1.4081 0.4694 3.6874 0.070431
PQ(x1, x2, x3) 3 4.0610 1.3537 10.6346 0.005334
Residuals 7 0.8910 0.1273
Lack of fit 3 0.7657 0.2552 8.1466 0.035303
Pure error 4 0.1253 0.0313
Stationary point of response surface:
x1 x2 x3
-0.1566316 8.1411610 -7.3205083
Stationary point in original units:
M Mart fixa
2.686737 11.141161 -4.320508
Eigenanalysis:
eigen() decomposition
$values
[1] 0.23474831 -0.03809012 -1.04515818
$vectors
[,1] [,2] [,3]
x1 -0.2285521 -0.06143486 0.9715913
x2 -0.3511963 -0.92560278 -0.1411405
x3 -0.9079786 0.37347725 -0.1899727
funcao<-rsm(y1~ FO(x1,x2,x3)+PQ(x1)+TWI(x1,x3),data = DOE)
summary(funcao)
Near-stationary-ridge situation detected -- stationary point altered
Change 'threshold' if this is not what you intend
Call:
rsm(formula = y1 ~ FO(x1, x2, x3) + PQ(x1) + TWI(x1, x3), data = DOE)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.41000 0.12122 28.1305 1.342e-11 ***
x1 0.64000 0.12857 4.9777 0.0004170 ***
x2 1.32750 0.12857 10.3248 5.367e-07 ***
x3 1.30250 0.12857 10.1304 6.495e-07 ***
x1^2 -0.96750 0.17671 -5.4751 0.0001934 ***
x1:x3 0.48500 0.18183 2.6673 0.0218989 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Multiple R-squared: 0.961, Adjusted R-squared: 0.9433
F-statistic: 54.22 on 5 and 11 DF, p-value: 2.23e-07
Analysis of Variance Table
Response: y1
Df Sum Sq Mean Sq F value Pr(>F)
FO(x1, x2, x3) 3 30.9469 10.3156 78.0010 1.07e-07
PQ(x1) 1 3.9645 3.9645 29.9771 0.0001934
TWI(x1, x3) 1 0.9409 0.9409 7.1146 0.0218989
Residuals 11 1.4547 0.1322
Lack of fit 7 1.3294 0.1899 6.0619 0.0504518
Pure error 4 0.1253 0.0313
Stationary point of response surface:
x1 x2 x3
-2.685567 0.000000 -12.034169
Stationary point in original units:
M Mart fixa
-2.371134 3.000000 -9.034169
Eigenanalysis:
eigen() decomposition
$values
[1] 0.05737874 0.00000000 -1.02487874
$vectors
[,1] [,2] [,3]
x1 -0.2302556 0 0.9731302
x2 0.0000000 -1 0.0000000
x3 -0.9731302 0 -0.2302556
persp(funcao,~x1+x2,zlab="Distância",
col = rainbow(250),
contours = ("colors"))

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

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

curve(dnorm(x,mean(funcao$residuals),sd(funcao$residuals)),
from = min(funcao$residuals),to=max(funcao$residuals),
xlab = "Observações", ylab = "Densidade", lwd=4,
col="turquoise")
lines(density(funcao$residuals),col="blue", lwd=3,pch=2)
legend("topright", legend = c("Real","Estimada"),
col=c("turquoise","blue"),lwd=5)

hist(funcao$residuals,lwd=3,col="yellow",
main="Histograma dos Resíduos",xlab = "Resíduos")

#Normalidade
shapiro.test(funcao$residuals)
Shapiro-Wilk normality test
data: funcao$residuals
W = 0.94154, p-value = 0.3369
#Homocedasticidade
residualPlot(funcao)

bptest(funcao)
studentized Breusch-Pagan test
data: funcao
BP = 3.5118, df = 5, p-value = 0.6216
#Autocorrelação Residual
dwt(funcao)
Near-stationary-ridge situation detected -- stationary point altered
Change 'threshold' if this is not what you intend
lag Autocorrelation D-W Statistic p-value
1 -0.08429283 2.001873 0.91
Alternative hypothesis: rho != 0
dwtest(funcao)
Durbin-Watson test
data: funcao
DW = 2.0019, p-value = 0.5338
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 = 0.17193, df = 1, p-value = 0.6784
funcao2<-lm(y2~ SO(x1,x2,x3),data = DOE)
summary(funcao2)
Call:
lm.default(formula = y2 ~ SO(x1, x2, x3), data = DOE)
Residuals:
Min 1Q Median 3Q Max
-0.2737 -0.1087 0.0175 0.1087 0.2737
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.40800 0.11977 28.455 1.70e-08 ***
SO(x1, x2, x3)x1 0.63375 0.09469 6.693 0.000279 ***
SO(x1, x2, x3)x2 1.03625 0.09469 10.944 1.18e-05 ***
SO(x1, x2, x3)x3 0.85250 0.09469 9.004 4.25e-05 ***
SO(x1, x2, x3)x1:x2 0.18750 0.13390 1.400 0.204170
SO(x1, x2, x3)x1:x3 -0.13500 0.13390 -1.008 0.346941
SO(x1, x2, x3)x2:x3 -0.04500 0.13390 -0.336 0.746675
SO(x1, x2, x3)x1^2 -0.48525 0.13051 -3.718 0.007476 **
SO(x1, x2, x3)x2^2 -0.29525 0.13051 -2.262 0.058142 .
SO(x1, x2, x3)x3^2 0.12725 0.13051 0.975 0.362047
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2678 on 7 degrees of freedom
Multiple R-squared: 0.9746, Adjusted R-squared: 0.942
F-statistic: 29.89 on 9 and 7 DF, p-value: 9.025e-05
funcao2<-rsm(y2~ FO(x1,x2,x3)+PQ(x1,x2),data = DOE)
summary(funcao2)
Near-stationary-ridge situation detected -- stationary point altered
Change 'threshold' if this is not what you intend
Call:
rsm(formula = y2 ~ FO(x1, x2, x3) + PQ(x1, x2), data = DOE)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.46158 0.10661 32.4685 2.819e-12 ***
x1 0.63375 0.09486 6.6809 3.464e-05 ***
x2 1.03625 0.09486 10.9240 3.036e-07 ***
x3 0.85250 0.09486 8.9869 2.126e-06 ***
x1^2 -0.47855 0.13057 -3.6650 0.003722 **
x2^2 -0.28855 0.13057 -2.2099 0.049229 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Multiple R-squared: 0.96, Adjusted R-squared: 0.9418
F-statistic: 52.8 on 5 and 11 DF, p-value: 2.561e-07
Analysis of Variance Table
Response: y2
Df Sum Sq Mean Sq F value Pr(>F)
FO(x1, x2, x3) 3 17.6177 5.8726 81.5778 8.459e-08
PQ(x1, x2) 2 1.3876 0.6938 9.6375 0.003817
Residuals 11 0.7919 0.0720
Lack of fit 7 0.6664 0.0952 3.0347 0.150074
Pure error 4 0.1255 0.0314
Stationary point of response surface:
x1 x2 x3
0.6621529 1.7955996 0.0000000
Stationary point in original units:
M Mart fixa
4.324306 4.795600 3.000000
Eigenanalysis:
eigen() decomposition
$values
[1] 0.0000000 -0.2885526 -0.4785526
$vectors
[,1] [,2] [,3]
x1 0 0 1
x2 0 1 0
x3 1 0 0
persp(funcao2,~x1+x2,zlab="Distância",
col = rainbow(250),
contours = ("colors"))

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

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

curve(dnorm(x,mean(funcao2$residuals),sd(funcao2$residuals)),
from = min(funcao2$residuals),to=max(funcao2$residuals),
xlab = "Observações", ylab = "Densidade", lwd=4,
col="turquoise")
lines(density(funcao2$residuals),col="blue", lwd=3,pch=2)
legend("topright", legend = c("Real","Estimada"),
col=c("turquoise","blue"),lwd=5)

hist(funcao2$residuals,lwd=3,col="yellow",main="Histograma dos Resíduos",
xlab="Resíduos")

shapiro.test(funcao2$residuals)
Shapiro-Wilk normality test
data: funcao2$residuals
W = 0.94864, p-value = 0.4353
residualPlot(funcao2)

bptest(funcao2)
studentized Breusch-Pagan test
data: funcao2
BP = 3.4055, df = 5, p-value = 0.6377
dwt(funcao2)
Near-stationary-ridge situation detected -- stationary point altered
Change 'threshold' if this is not what you intend
lag Autocorrelation D-W Statistic p-value
1 0.03699807 1.822462 0.516
Alternative hypothesis: rho != 0
dwtest(funcao2)
Durbin-Watson test
data: funcao2
DW = 1.8225, p-value = 0.2515
alternative hypothesis: true autocorrelation is greater than 0
bgtest(funcao2)
Breusch-Godfrey test for serial correlation of order up to 1
data: funcao2
LM test = 0.033273, df = 1, p-value = 0.8553
obj=function(x){a<- predict(funcao, newdata = data.frame(x1=x[1],
x2=x[2],
x3=x[3]))
return(-a)}
obj2=function(x){a<- predict(funcao2, newdata = data.frame(x1=x[1],
x2=x[2],
x3=x[3]))
return(-a)}
x0<-c(0,0,0)
optim(par = x0,fn=obj,lower = -1,
upper = 1,method = c("L-BFGS-B"),control =T)
$par
[1] 0.5813953 1.0000000 1.0000000
$value
[1] -6.367035
$counts
function gradient
10 10
$convergence
[1] 0
$message
[1] "CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL"
ANE<- optim(par = x0,fn=obj2,lower = -1,
upper = 1,method = c("L-BFGS-B"),control =T)
ANE
$par
[1] 0.6621529 1.0000000 1.0000000
$value
[1] -5.271596
$counts
function gradient
6 6
$convergence
[1] 0
$message
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
cat("Valor ótimo de x:", ANE$par, "\n")
Valor ótimo de x: 0.6621529 1 1
cat("Valor ótimo da função objetivo:", ANE$value, "\n")
Valor ótimo da função objetivo: -5.271596
library(nloptr)
constraint <- function(x) {
return(as.integer(x)-x)}
x0<-c(1,1,1)
nloptr(x0,eval_f =obj,lb=c(-1,-1,-1),ub=c(1,1,1),
eval_g_ineq = constraint,
#eval_jac_g_eq = constraint,
opts = list("algorithm"="NLOPT_GN_ISRES",
xtol_rel=1.0e-8))
Call:
nloptr(x0 = x0, eval_f = obj, lb = c(-1, -1, -1), ub = c(1, 1,
1), eval_g_ineq = constraint, opts = list(algorithm = "NLOPT_GN_ISRES",
xtol_rel = 1e-08))
Minimization using NLopt version 2.7.1
NLopt solver status: 5 ( NLOPT_MAXEVAL_REACHED: Optimization stopped
because maxeval (above) was reached. )
Number of Iterations....: 100
Termination conditions: xtol_rel: 1e-08
Number of inequality constraints: 3
Number of equality constraints: 0
Current value of objective function: -6.1975
Current value of controls: 1 1 1
cat("Valor ótimo de x:", ANE$solution, "\n")
Valor ótimo de x:
cat("Valor ótimo da função objetivo:", ANE$objective, "\n")
Valor ótimo da função objetivo:
predict(funcao, newdata = data.frame(x1=1,x2=1,x3=1),
se.fit = T,interval = "pred")
$fit
fit lwr upr
1 6.1975 5.138651 7.256349
$se.fit
[1] 0.3149405
$df
[1] 11
$residual.scale
[1] 0.3636619
LS0tDQp0aXRsZTogIkNJX0NBVEFQVUxUQV9BTkVJUlNPTiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyfQ0KbGlicmFyeShyc20pDQpsaWJyYXJ5KGxtdGVzdCkNCmxpYnJhcnkoY2FyRGF0YSkNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShub3J0ZXN0KQ0KbGlicmFyeShObGNPcHRpbSkNCmxpYnJhcnkoRnJGMikNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KHJpbykNCmxpYnJhcnkoUk9JKQ0KbGlicmFyeShNQVNTKQ0KbGlicmFyeShubG9wdHIpDQpET0U8LWJiZChrPX54MSt4Mit4MywNCiAgICAgICAgIGJsb2NrID0gRiwNCiAgICAgICAgIG4wPTUsDQogICAgICAgICByYW5kb21pemUgPSBGLA0KICAgICAgICAgY29kaW5nID0gbGlzdCh4MX4oTS0zKS8yLA0KICAgICAgICAgICAgICAgICAgICAgICB4Mn4oTWFydC0zKS8xLA0KICAgICAgICAgICAgICAgICAgICAgICB4M34oZml4YS0zKS8xKSkNCkRPRQ0KDQpET0UkeTE8LWMoMC45NSwgMS4zNSwgMi43MiwgNC40MCwgMS4yMSwgMS43NiwgMi4zMywgNC44MiwNCiAgICAgICAgICAwLjU5LDMuMjUsIDMuNDcsIDYuNjEsIDMuMTEsIDMuMzMsIDMuNTAsDQogICAgICAgICAgMy41NSwgMy4yOCApDQoNCkRPRSR5MjwtYygxLjMxLCAyLjAyLCAyLjg2LCA0LjMyLCAxLjUyLCAzLjI0LCAzLjEzLCANCiAgICAgICAgICA0LjMxLCAxLjA1LCAzLjM2LCAzLjIxLCA1LjM0LCAzLjM2LCAzLjE1LCANCiAgICAgICAgICAzLjY0LCAzLjQ1LCAzLjQ0ICApDQpET0UNCmBgYA0KYGBge3J9DQpmdW5jYW88LXJzbSh5MX5TTyh4MSx4Mix4MyksZGF0YSA9IERPRSkNCnN1bW1hcnkoZnVuY2FvKQ0KZnVuY2FvPC1yc20oeTF+IEZPKHgxLHgyLHgzKStQUSh4MSkrVFdJKHgxLHgzKSxkYXRhID0gRE9FKQ0Kc3VtbWFyeShmdW5jYW8pDQpwZXJzcChmdW5jYW8sfngxK3gyLHpsYWI9IkRpc3TDom5jaWEiLA0KICAgICAgY29sID0gcmFpbmJvdygyNTApLA0KICAgICAgY29udG91cnMgPSAoImNvbG9ycyIpKQ0KcGVyc3AoZnVuY2FvLH54MSt4Myx6bGFiPSJEaXN0w6JuY2lhIiwNCiAgICAgIGNvbCA9IHJhaW5ib3coMzUwKSwNCiAgICAgIGNvbnRvdXJzID0gKCJjb2xvcnMiKSkNCnBlcnNwKGZ1bmNhbyx+eDIreDMsemxhYj0iRGlzdMOibmNpYSIsDQogICAgICBjb2wgPSByYWluYm93KDQ1MCksDQogICAgICBjb250b3VycyA9ICgiY29sb3JzIikpDQoNCmN1cnZlKGRub3JtKHgsbWVhbihmdW5jYW8kcmVzaWR1YWxzKSxzZChmdW5jYW8kcmVzaWR1YWxzKSksDQogICAgICBmcm9tID0gbWluKGZ1bmNhbyRyZXNpZHVhbHMpLHRvPW1heChmdW5jYW8kcmVzaWR1YWxzKSwNCiAgICAgIHhsYWIgPSAiT2JzZXJ2YcOnw7VlcyIsIHlsYWIgPSAiRGVuc2lkYWRlIiwgbHdkPTQsDQogICAgICBjb2w9InR1cnF1b2lzZSIpDQoNCmxpbmVzKGRlbnNpdHkoZnVuY2FvJHJlc2lkdWFscyksY29sPSJibHVlIiwgbHdkPTMscGNoPTIpDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gYygiUmVhbCIsIkVzdGltYWRhIiksDQogICAgICAgY29sPWMoInR1cnF1b2lzZSIsImJsdWUiKSxsd2Q9NSkNCmhpc3QoZnVuY2FvJHJlc2lkdWFscyxsd2Q9Myxjb2w9InllbGxvdyIsDQogICAgIG1haW49Ikhpc3RvZ3JhbWEgZG9zIFJlc8OtZHVvcyIseGxhYiA9ICJSZXPDrWR1b3MiKQ0KI05vcm1hbGlkYWRlDQpzaGFwaXJvLnRlc3QoZnVuY2FvJHJlc2lkdWFscykNCiNIb21vY2VkYXN0aWNpZGFkZQ0KcmVzaWR1YWxQbG90KGZ1bmNhbykNCmJwdGVzdChmdW5jYW8pDQojQXV0b2NvcnJlbGHDp8OjbyBSZXNpZHVhbA0KZHd0KGZ1bmNhbykNCmR3dGVzdChmdW5jYW8pDQpiZ3Rlc3QoZnVuY2FvKQ0KYGBgDQoNCmBgYHtyfQ0KZnVuY2FvMjwtbG0oeTJ+IFNPKHgxLHgyLHgzKSxkYXRhID0gRE9FKQ0Kc3VtbWFyeShmdW5jYW8yKQ0KZnVuY2FvMjwtcnNtKHkyfiBGTyh4MSx4Mix4MykrUFEoeDEseDIpLGRhdGEgPSBET0UpDQpzdW1tYXJ5KGZ1bmNhbzIpDQpwZXJzcChmdW5jYW8yLH54MSt4Mix6bGFiPSJEaXN0w6JuY2lhIiwNCiAgICAgIGNvbCA9IHJhaW5ib3coMjUwKSwNCiAgICAgIGNvbnRvdXJzID0gKCJjb2xvcnMiKSkNCnBlcnNwKGZ1bmNhbzIsfngxK3gzLHpsYWI9IkRpc3TDom5jaWEiLA0KICAgICAgY29sID0gcmFpbmJvdygyNTApLA0KICAgICAgY29udG91cnMgPSAoImNvbG9ycyIpKQ0KcGVyc3AoZnVuY2FvMix+eDIreDMsemxhYj0iRGlzdMOibmNpYSIsDQogICAgICBjb2wgPSByYWluYm93KDI1MCksDQogICAgICBjb250b3VycyA9ICgiY29sb3JzIikpDQpgYGANCmBgYHtyfQ0KY3VydmUoZG5vcm0oeCxtZWFuKGZ1bmNhbzIkcmVzaWR1YWxzKSxzZChmdW5jYW8yJHJlc2lkdWFscykpLA0KICAgICAgZnJvbSA9IG1pbihmdW5jYW8yJHJlc2lkdWFscyksdG89bWF4KGZ1bmNhbzIkcmVzaWR1YWxzKSwNCiAgICAgIHhsYWIgPSAiT2JzZXJ2YcOnw7VlcyIsIHlsYWIgPSAiRGVuc2lkYWRlIiwgbHdkPTQsDQogICAgICBjb2w9InR1cnF1b2lzZSIpDQpsaW5lcyhkZW5zaXR5KGZ1bmNhbzIkcmVzaWR1YWxzKSxjb2w9ImJsdWUiLCBsd2Q9MyxwY2g9MikNCmxlZ2VuZCgidG9wcmlnaHQiLCBsZWdlbmQgPSBjKCJSZWFsIiwiRXN0aW1hZGEiKSwNCiAgICAgICBjb2w9YygidHVycXVvaXNlIiwiYmx1ZSIpLGx3ZD01KQ0KaGlzdChmdW5jYW8yJHJlc2lkdWFscyxsd2Q9Myxjb2w9InllbGxvdyIsbWFpbj0iSGlzdG9ncmFtYSBkb3MgUmVzw61kdW9zIiwNCiAgICAgeGxhYj0iUmVzw61kdW9zIikNCnNoYXBpcm8udGVzdChmdW5jYW8yJHJlc2lkdWFscykNCg0KcmVzaWR1YWxQbG90KGZ1bmNhbzIpDQpicHRlc3QoZnVuY2FvMikNCmR3dChmdW5jYW8yKQ0KZHd0ZXN0KGZ1bmNhbzIpDQpiZ3Rlc3QoZnVuY2FvMikNCmBgYA0KYGBge3J9DQpvYmo9ZnVuY3Rpb24oeCl7YTwtIHByZWRpY3QoZnVuY2FvLCBuZXdkYXRhID0gZGF0YS5mcmFtZSh4MT14WzFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9eFsyXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgzPXhbM10pKQ0KcmV0dXJuKC1hKX0NCg0Kb2JqMj1mdW5jdGlvbih4KXthPC0gcHJlZGljdChmdW5jYW8yLCBuZXdkYXRhID0gZGF0YS5mcmFtZSh4MT14WzFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9eFsyXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgzPXhbM10pKQ0KcmV0dXJuKC1hKX0NCg0KeDA8LWMoMCwwLDApDQpvcHRpbShwYXIgPSB4MCxmbj1vYmosbG93ZXIgPSAtMSwNCiAgICAgIHVwcGVyID0gMSxtZXRob2QgPSBjKCJMLUJGR1MtQiIpLGNvbnRyb2wgPVQpDQoNCkFORTwtIG9wdGltKHBhciA9IHgwLGZuPW9iajIsbG93ZXIgPSAtMSwNCiAgICAgIHVwcGVyID0gMSxtZXRob2QgPSBjKCJMLUJGR1MtQiIpLGNvbnRyb2wgPVQpDQpBTkUNCmNhdCgiVmFsb3Igw7N0aW1vIGRlIHg6IiwgQU5FJHBhciwgIlxuIikNCmNhdCgiVmFsb3Igw7N0aW1vIGRhIGZ1bsOnw6NvIG9iamV0aXZvOiIsIEFORSR2YWx1ZSwgIlxuIikNCg0KbGlicmFyeShubG9wdHIpDQoNCg0KY29uc3RyYWludCA8LSBmdW5jdGlvbih4KSB7DQogIHJldHVybihhcy5pbnRlZ2VyKHgpLXgpfQ0KeDA8LWMoMSwxLDEpDQoNCm5sb3B0cih4MCxldmFsX2YgPW9iaixsYj1jKC0xLC0xLC0xKSx1Yj1jKDEsMSwxKSwNCiAgICAgICBldmFsX2dfaW5lcSA9IGNvbnN0cmFpbnQsDQogICAgICAgICAgICAgI2V2YWxfamFjX2dfZXEgPSBjb25zdHJhaW50LA0KICAgICAgIG9wdHMgPSBsaXN0KCJhbGdvcml0aG0iPSJOTE9QVF9HTl9JU1JFUyIsDQogICAgICAgICAgICAgICAgICAgeHRvbF9yZWw9MS4wZS04KSkNCg0KY2F0KCJWYWxvciDDs3RpbW8gZGUgeDoiLCBBTkUkc29sdXRpb24sICJcbiIpDQpjYXQoIlZhbG9yIMOzdGltbyBkYSBmdW7Dp8OjbyBvYmpldGl2bzoiLCBBTkUkb2JqZWN0aXZlLCAiXG4iKQ0KDQpwcmVkaWN0KGZ1bmNhbywgbmV3ZGF0YSA9IGRhdGEuZnJhbWUoeDE9MSx4Mj0xLHgzPTEpLA0KICAgICAgICBzZS5maXQgPSBULGludGVydmFsID0gInByZWQiKQ0KYGBgDQoNCg0K