Realizó: Wilmar Andrés Tróchez Andrade

Se realizó una encuesta en clase, donde se tomaron datos de todos los estudiantes y las profesoras del curso.

M<-read.csv("Matriz.csv",sep = ";")
NO <- M$X
PESO <- M$PESO
EDAD <- M$EDAD
ESTATURA <- M$ESTATURA
SEXO <- M$SEXO
EST.CIVIL <- M$EST..CIVIL
REGION <- M$REGIÓN
N.ACAD <- M$NIVEL.ACADÉMICO

Variables en la encuesta: de cada encuestado se recopilaron los siguientes datos

colnames(M)
 [1] "X"               "NOMBRE"          "EDAD"            "PESO"            "ESTATURA"        "ESTRATO"        
 [7] "NIVEL.ACADÉMICO" "X.HNOS"          "SEXO"            "X..HIJOS"        "EST..CIVIL"      "MATRICULADO.S.N"
[13] "REGIÓN"         

Tamaño de muestra: en total se recopilaron datos de 25 personas

length(NO)
[1] 25

Edad de Encuestados: se realizaron dos gráficas, la primera para ver la frecuencia por edades y la segunda ver la distribución de las edades de la muestra.

library(ggplot2)
library(dplyr)
library(scales)
mu<- mutate(M, GRUPO = ifelse(M$EDAD %in% 0:30,"(20,30]-76%",
        ifelse(M$EDAD %in% 31:40, "(30,40]-12%", "(40,50]-12%")))
tedad <- as.data.frame(table(mu$GRUPO))
tedad$fraction = tedad$Freq*100/sum(tedad$Freq)
q <- ggplot()
q+geom_bar(data=M,aes(EDAD,y = (..count..)),stat = "count",fill = "mediumpurple3", size = 4)+
geom_text(data=M,aes(EDAD,y= (..count..), label=(scales::percent((..count..)/sum(..count..)))),stat ="count",colour="black",vjust=-0.25, size = 3)+
theme_bw()+
ggtitle("FRECUENCIA EDAD ENCUESTADOS")+
ylab("Número de casos")+ 
xlab("Edad del encuestado")+
#theme(axis.text.y = element_blank(),
      #axis.ticks.y = element_blank())+
theme(panel.grid=element_blank())+
scale_x_continuous(breaks = round(seq(min(EDAD), max(EDAD), by = 1),1))

p <- ggplot()
p +geom_rect(data = data.frame(xmin=-Inf,xmax=Inf,ymin=-Inf,ymax=Inf),aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax),fill="steelblue1",alpha=0.5)+
geom_point(data=M,aes(EDAD,X,colour = factor(mu$GRUPO)), size = 4)+
geom_text(data=M,aes(EDAD,X, label = EDAD),hjust = -0.5, size = 3)+
guides(colour=guide_legend(title="Intervalo - Porcentaje"))+
coord_cartesian(xlim = c(20,50))+
coord_cartesian(ylim = c(0,30))+
theme_bw()+
ggtitle("DISTRIBUCION EDAD ENCUESTADOS")+
ylab("Número de casos")+ 
xlab("Edad del encuestado")+
theme(panel.grid=element_blank())+
theme(axis.text=element_blank())+
theme(axis.ticks=element_blank())

Sexo de Encuestados: en la siguiente gráfica se puede apreciar que el número de mujeres encuestadas es superior al de los hombres.

library(ggplot2)
library(scales)
ggplot(data=data.frame(SEXO),aes(x=SEXO))+
geom_bar(aes(y = (..count..)),colour = "black",fill = c("firebrick1","mediumturquoise"),width = .6)+
 #geom_bar(position=position_dodge(0.9), colour="black", stat="identity", width=0.9, , binwidth=0)  
  
  
geom_text(aes(y= (..count..), label=paste0("(",y= (..count..)," / ",scales::percent((..count..)/sum(..count..)),")")),stat ="count",colour="black",vjust=-0.25)+
ggtitle("SEXO")+
ylab("Número de casos")+ 
xlab("Sexo del encuestado")+
scale_x_continuous(breaks=c(1,2), labels=c("Masculino", "Femenino"),expand=c(0.4, 0))+
theme_bw()+
theme(panel.grid=element_blank())

Estado Cívil Encuestados: en la gráfica se evidencia que el 84% de la muestra son solteros.

library(ggplot2)
tablasex <- as.data.frame(table(EST.CIVIL))
dat = data.frame(category=c(1,2), count=tablasex$Freq)
# Add addition columns, needed for drawing with geom_rect.
dat$fraction = dat$count / sum(dat$count)
dat = dat[order(dat$fraction), ]
dat$pos = c(0.92,0.48)
dat$type = c("Casado","Soltero")
#plot
p <- ggplot(dat, aes(x=2, y=fraction, fill=type))+
geom_bar(stat="identity",colour ="black")+
geom_text(aes(y=pos,label=paste0("(",count," / ",(fraction*100),"%)")), stat = "identity")+
xlim(0.5, 2.5)+
coord_polar(theta = "y")+
labs(x=NULL, y=NULL)+
labs(fill="") +
scale_fill_manual(values = c( Casado = "#E69F00", Soltero= "#D55E00"), name="")+
ggtitle("ESTADO CIVIL")+
theme_bw()+
theme(plot.title = element_text(family=c("sans"),size=15),
legend.text=element_text(size=10),
axis.ticks=element_blank(),
axis.text=element_blank(),
axis.title=element_blank(),
panel.grid=element_blank(),
panel.border=element_blank())
 
p

Ciudad de Origen Encuestados: con un total de 19, se observa que la mayoría de los encuestrados proceden de la ciudad de Santiago de Cali.

library(plotly)
tablareg <- as.data.frame(table(REGION))
dat = data.frame(tablareg)
dat$Porcentaje = (dat$Freq / sum(dat$Freq))*100
dat$Ciudad = c("Cali","Popayan","Santander","Pasto","Palmira")  
  
 
p <- plot_ly(dat, labels = ~Ciudad, values = ~Freq, type = 'pie') %>%
  layout(title = 'CIUDAD DE ORIGEN',
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))
p

Nivel Académico Encuestados: en la gráfica se observa que el 48% de los encuestados sin estudiantes de posgrado.

library(ggplot2)
library(scales)
ggplot(data=data.frame(N.ACAD),aes(x=N.ACAD))+
geom_bar(aes(y = (..count..)),colour = "black",fill = c("firebrick1","mediumturquoise","azure2"),width = 0.4)+
geom_text(aes(y= (..count..), label=paste0("(",y= (..count..)," / ",scales::percent((..count..)/sum(..count..)),")")),stat ="count",colour="black",vjust = 0, hjust = -0.2)+
ggtitle("NIVEL ACADEMICO")+
xlab(NULL)+ 
ylab("Número de casos")+
ylim(0,15)+
scale_x_continuous(breaks=c(1,2,3), labels=c("Pregrado", "Maestria","Doctorado"))+
coord_flip()+
theme_bw()

Medidas de Tendencia Central - EDAD: se puede observar que la distribución de los datos es asimetrica debido a que la mediana=25 se encuentra algo distante a la media =28.56, tambien se observa que la moda=23 queda justo en el primer quintil.

#Media y Mediana
summary(EDAD)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  21.00   23.00   25.00   28.56   30.00   49.00 
#Moda
library(modeest)
mlv(EDAD, method = "discrete")
Mode (most frequent value): 23 
Bickel's modal skewness: 0.44 
Call: mlv.integer(x = EDAD, method = "discrete") 

Medidas de Dispersión - EDAD: debido a que los datos oscilan entre 21 y el maximo, la dispersión de los datos es alta, se puede evidenciar en el dato de la varianza.

#Varianza
round(var(EDAD),2)
[1] 74.92
#Desviación Estándar
round(sd(EDAD),2)
[1] 8.66
#Coeficiente de Variación
round((sd(EDAD)/28.56)*100,2)
[1] 30.31

Medidas de Tendencia Central - PESO: se observa que la media=67.64 se encuentra por debajo de la mediana=70 y la moda=57 está de nuevo en el primer quintil.

#Media y Mediana
summary(PESO)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  50.00   57.00   70.00   67.64   75.00   98.00 
#Moda
library(modeest)
mlv(PESO, method = "discrete")
Mode (most frequent value): 57 
Bickel's modal skewness: 0.52 
Call: mlv.integer(x = PESO, method = "discrete") 

Medidas de Dispersión - PESO: la varianza tiene un valor muy alto por lo que indica que los datos se encuentran muy dispersos en la muestra.

rr #Varianza round(var(PESO),2)

[1] 156.16

rr #Desviación Estándar round(sd(PESO),2)

[1] 12.5

rr #Coeficiente de Variación round((sd(PESO)/67.64)*100,2)

[1] 18.47

Medidas de Tendencia Central - ESTATURA: la media de estatura de los encuestados se encuentra por encima de la mediana de la muestra, sin embargo, son muy cercanos por lo que tiene una distribución simétrica.

#Media y Mediana
summary(ESTATURA)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.520   1.600   1.670   1.677   1.750   1.880 
#Moda
library(modeest)
mlv(ESTATURA, method = "discrete")
Mode (most frequent value): 1.6 
Bickel's modal skewness: 0.4 
Call: mlv.default(x = ESTATURA, method = "discrete") 

Medidas de Dispersión - ESTATURA: la dispersión de los datos es muy baja, por lo que los datos obtenidos en la muestra son homogéneos.

rr #Varianza round(var(ESTATURA),2)

[1] 0.01

rr #Desviación Estándar round(sd(ESTATURA),2)

[1] 0.1

rr #Coeficiente de Variación round((sd(ESTATURA)/1.677)*100,2)

[1] 6.24
LS0tDQp0aXRsZTogIkFOQUxJU0lTIEVOQ1VFU1RBIENVUlNPIFNFTUlOQVJJTyBERSBDT05TVFJVQ0NJT05FUy0gQ09SUkVDQ0lPTiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQpSZWFsaXrzOiBXaWxtYXIgQW5kculzIFRy82NoZXogQW5kcmFkZQ0KDQpTZSByZWFsaXrzIHVuYSBlbmN1ZXN0YSBlbiBjbGFzZSwgZG9uZGUgc2UgdG9tYXJvbiBkYXRvcyBkZSB0b2RvcyBsb3MgZXN0dWRpYW50ZXMgeSBsYXMgcHJvZmVzb3JhcyBkZWwgY3Vyc28uDQoNCmBgYHtyfQ0KTTwtcmVhZC5jc3YoIk1hdHJpei5jc3YiLHNlcCA9ICI7IikNCg0KTk8gPC0gTSRYDQpQRVNPIDwtIE0kUEVTTw0KRURBRCA8LSBNJEVEQUQNCkVTVEFUVVJBIDwtIE0kRVNUQVRVUkENClNFWE8gPC0gTSRTRVhPDQpFU1QuQ0lWSUwgPC0gTSRFU1QuLkNJVklMDQpSRUdJT04gPC0gTSRSRUdJ004NCk4uQUNBRCA8LSBNJE5JVkVMLkFDQUTJTUlDTw0KYGBgDQoNCl9fVmFyaWFibGVzIGVuIGxhIGVuY3Vlc3RhX186DQpkZSBjYWRhIGVuY3Vlc3RhZG8gc2UgcmVjb3BpbGFyb24gbG9zIHNpZ3VpZW50ZXMgZGF0b3MNCmBgYHtyfQ0KDQpjb2xuYW1lcyhNKQ0KYGBgDQpfX1RhbWHxbyBkZSBtdWVzdHJhX186IGVuIHRvdGFsIHNlIHJlY29waWxhcm9uIGRhdG9zIGRlIDI1IHBlcnNvbmFzDQpgYGB7cn0NCg0KbGVuZ3RoKE5PKQ0KYGBgDQpfX0VkYWQgZGUgRW5jdWVzdGFkb3NfXzogc2UgcmVhbGl6YXJvbiBkb3MgZ3LhZmljYXMsIGxhIHByaW1lcmEgcGFyYSB2ZXIgbGEgZnJlY3VlbmNpYSBwb3IgZWRhZGVzIHkgbGEgc2VndW5kYSB2ZXIgbGEgZGlzdHJpYnVjafNuIGRlIGxhcyBlZGFkZXMgZGUgbGEgbXVlc3RyYS4gIA0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShzY2FsZXMpDQoNCm11PC0gbXV0YXRlKE0sIEdSVVBPID0gaWZlbHNlKE0kRURBRCAlaW4lIDA6MzAsIigyMCwzMF0tNzYlIiwNCiAgICAgICAgaWZlbHNlKE0kRURBRCAlaW4lIDMxOjQwLCAiKDMwLDQwXS0xMiUiLCAiKDQwLDUwXS0xMiUiKSkpDQoNCnRlZGFkIDwtIGFzLmRhdGEuZnJhbWUodGFibGUobXUkR1JVUE8pKQ0KdGVkYWQkZnJhY3Rpb24gPSB0ZWRhZCRGcmVxKjEwMC9zdW0odGVkYWQkRnJlcSkNCg0KcSA8LSBnZ3Bsb3QoKQ0KcStnZW9tX2JhcihkYXRhPU0sYWVzKEVEQUQseSA9ICguLmNvdW50Li4pKSxzdGF0ID0gImNvdW50IixmaWxsID0gIm1lZGl1bXB1cnBsZTMiLCBzaXplID0gNCkrDQpnZW9tX3RleHQoZGF0YT1NLGFlcyhFREFELHk9ICguLmNvdW50Li4pLCBsYWJlbD0oc2NhbGVzOjpwZXJjZW50KCguLmNvdW50Li4pL3N1bSguLmNvdW50Li4pKSkpLHN0YXQgPSJjb3VudCIsY29sb3VyPSJibGFjayIsdmp1c3Q9LTAuMjUsIHNpemUgPSAzKSsNCnRoZW1lX2J3KCkrDQpnZ3RpdGxlKCJGUkVDVUVOQ0lBIEVEQUQgRU5DVUVTVEFET1MiKSsNCnlsYWIoIk76bWVybyBkZSBjYXNvcyIpKyANCnhsYWIoIkVkYWQgZGVsIGVuY3Vlc3RhZG8iKSsNCiN0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICNheGlzLnRpY2tzLnkgPSBlbGVtZW50X2JsYW5rKCkpKw0KdGhlbWUocGFuZWwuZ3JpZD1lbGVtZW50X2JsYW5rKCkpKw0Kc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHJvdW5kKHNlcShtaW4oRURBRCksIG1heChFREFEKSwgYnkgPSAxKSwxKSkNCg0KcCA8LSBnZ3Bsb3QoKQ0KcCArZ2VvbV9yZWN0KGRhdGEgPSBkYXRhLmZyYW1lKHhtaW49LUluZix4bWF4PUluZix5bWluPS1JbmYseW1heD1JbmYpLGFlcyh4bWluPXhtaW4seG1heD14bWF4LHltaW49eW1pbix5bWF4PXltYXgpLGZpbGw9InN0ZWVsYmx1ZTEiLGFscGhhPTAuNSkrDQpnZW9tX3BvaW50KGRhdGE9TSxhZXMoRURBRCxYLGNvbG91ciA9IGZhY3RvcihtdSRHUlVQTykpLCBzaXplID0gNCkrDQpnZW9tX3RleHQoZGF0YT1NLGFlcyhFREFELFgsIGxhYmVsID0gRURBRCksaGp1c3QgPSAtMC41LCBzaXplID0gMykrDQpndWlkZXMoY29sb3VyPWd1aWRlX2xlZ2VuZCh0aXRsZT0iSW50ZXJ2YWxvIC0gUG9yY2VudGFqZSIpKSsNCmNvb3JkX2NhcnRlc2lhbih4bGltID0gYygyMCw1MCkpKw0KY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsMzApKSsNCnRoZW1lX2J3KCkrDQpnZ3RpdGxlKCJESVNUUklCVUNJT04gRURBRCBFTkNVRVNUQURPUyIpKw0KeWxhYigiTvptZXJvIGRlIGNhc29zIikrIA0KeGxhYigiRWRhZCBkZWwgZW5jdWVzdGFkbyIpKw0KdGhlbWUocGFuZWwuZ3JpZD1lbGVtZW50X2JsYW5rKCkpKw0KdGhlbWUoYXhpcy50ZXh0PWVsZW1lbnRfYmxhbmsoKSkrDQp0aGVtZShheGlzLnRpY2tzPWVsZW1lbnRfYmxhbmsoKSkNCmBgYA0KX19TZXhvIGRlIEVuY3Vlc3RhZG9zX186IGVuIGxhIHNpZ3VpZW50ZSBncuFmaWNhIHNlIHB1ZWRlIGFwcmVjaWFyIHF1ZSBlbCBu+m1lcm8gZGUgbXVqZXJlcyBlbmN1ZXN0YWRhcyBlcyBzdXBlcmlvciBhbCBkZSBsb3MgaG9tYnJlcy4NCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShzY2FsZXMpDQoNCmdncGxvdChkYXRhPWRhdGEuZnJhbWUoU0VYTyksYWVzKHg9U0VYTykpKw0KZ2VvbV9iYXIoYWVzKHkgPSAoLi5jb3VudC4uKSksY29sb3VyID0gImJsYWNrIixmaWxsID0gYygiZmlyZWJyaWNrMSIsIm1lZGl1bXR1cnF1b2lzZSIpLHdpZHRoID0gLjYpKw0KDQogI2dlb21fYmFyKHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuOSksIGNvbG91cj0iYmxhY2siLCBzdGF0PSJpZGVudGl0eSIsIHdpZHRoPTAuOSwgLCBiaW53aWR0aD0wKSAgDQogIA0KICANCmdlb21fdGV4dChhZXMoeT0gKC4uY291bnQuLiksIGxhYmVsPXBhc3RlMCgiKCIseT0gKC4uY291bnQuLiksIiAvICIsc2NhbGVzOjpwZXJjZW50KCguLmNvdW50Li4pL3N1bSguLmNvdW50Li4pKSwiKSIpKSxzdGF0ID0iY291bnQiLGNvbG91cj0iYmxhY2siLHZqdXN0PS0wLjI1KSsNCg0KZ2d0aXRsZSgiU0VYTyIpKw0KeWxhYigiTvptZXJvIGRlIGNhc29zIikrIA0KeGxhYigiU2V4byBkZWwgZW5jdWVzdGFkbyIpKw0Kc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1jKDEsMiksIGxhYmVscz1jKCJNYXNjdWxpbm8iLCAiRmVtZW5pbm8iKSxleHBhbmQ9YygwLjQsIDApKSsNCnRoZW1lX2J3KCkrDQp0aGVtZShwYW5lbC5ncmlkPWVsZW1lbnRfYmxhbmsoKSkNCmBgYA0KX19Fc3RhZG8gQ+12aWwgRW5jdWVzdGFkb3NfXzogZW4gbGEgZ3LhZmljYSBzZSBldmlkZW5jaWEgcXVlIGVsIDg0JSBkZSBsYSBtdWVzdHJhIHNvbiBzb2x0ZXJvcy4NCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQp0YWJsYXNleCA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlKEVTVC5DSVZJTCkpDQpkYXQgPSBkYXRhLmZyYW1lKGNhdGVnb3J5PWMoMSwyKSwgY291bnQ9dGFibGFzZXgkRnJlcSkNCg0KIyBBZGQgYWRkaXRpb24gY29sdW1ucywgbmVlZGVkIGZvciBkcmF3aW5nIHdpdGggZ2VvbV9yZWN0Lg0KDQpkYXQkZnJhY3Rpb24gPSBkYXQkY291bnQgLyBzdW0oZGF0JGNvdW50KQ0KZGF0ID0gZGF0W29yZGVyKGRhdCRmcmFjdGlvbiksIF0NCmRhdCRwb3MgPSBjKDAuOTIsMC40OCkNCmRhdCR0eXBlID0gYygiQ2FzYWRvIiwiU29sdGVybyIpDQoNCiNwbG90DQpwIDwtIGdncGxvdChkYXQsIGFlcyh4PTIsIHk9ZnJhY3Rpb24sIGZpbGw9dHlwZSkpKw0KZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLGNvbG91ciA9ImJsYWNrIikrDQpnZW9tX3RleHQoYWVzKHk9cG9zLGxhYmVsPXBhc3RlMCgiKCIsY291bnQsIiAvICIsKGZyYWN0aW9uKjEwMCksIiUpIikpLCBzdGF0ID0gImlkZW50aXR5IikrDQp4bGltKDAuNSwgMi41KSsNCmNvb3JkX3BvbGFyKHRoZXRhID0gInkiKSsNCmxhYnMoeD1OVUxMLCB5PU5VTEwpKw0KbGFicyhmaWxsPSIiKSArDQpzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCBDYXNhZG8gPSAiI0U2OUYwMCIsIFNvbHRlcm89ICIjRDU1RTAwIiksIG5hbWU9IiIpKw0KZ2d0aXRsZSgiRVNUQURPIENJVklMIikrDQp0aGVtZV9idygpKw0KdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHk9Yygic2FucyIpLHNpemU9MTUpLA0KbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MTApLA0KYXhpcy50aWNrcz1lbGVtZW50X2JsYW5rKCksDQpheGlzLnRleHQ9ZWxlbWVudF9ibGFuaygpLA0KYXhpcy50aXRsZT1lbGVtZW50X2JsYW5rKCksDQpwYW5lbC5ncmlkPWVsZW1lbnRfYmxhbmsoKSwNCnBhbmVsLmJvcmRlcj1lbGVtZW50X2JsYW5rKCkpDQogDQpwDQpgYGANCl9fQ2l1ZGFkIGRlIE9yaWdlbiBFbmN1ZXN0YWRvc19fOiBjb24gdW4gdG90YWwgZGUgMTksIHNlIG9ic2VydmEgcXVlIGxhIG1heW9y7WEgZGUgbG9zIGVuY3Vlc3RyYWRvcyBwcm9jZWRlbiBkZSBsYSBjaXVkYWQgZGUgU2FudGlhZ28gZGUgQ2FsaS4NCmBgYHtyfQ0KbGlicmFyeShwbG90bHkpDQoNCnRhYmxhcmVnIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoUkVHSU9OKSkNCmRhdCA9IGRhdGEuZnJhbWUodGFibGFyZWcpDQpkYXQkUG9yY2VudGFqZSA9IChkYXQkRnJlcSAvIHN1bShkYXQkRnJlcSkpKjEwMA0KZGF0JENpdWRhZCA9IGMoIkNhbGkiLCJQb3BheWFuIiwiU2FudGFuZGVyIiwiUGFzdG8iLCJQYWxtaXJhIikgIA0KICANCiANCnAgPC0gcGxvdF9seShkYXQsIGxhYmVscyA9IH5DaXVkYWQsIHZhbHVlcyA9IH5GcmVxLCB0eXBlID0gJ3BpZScpICU+JQ0KICBsYXlvdXQodGl0bGUgPSAnQ0lVREFEIERFIE9SSUdFTicsDQogICAgICAgICB4YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwgemVyb2xpbmUgPSBGQUxTRSwgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSksDQogICAgICAgICB5YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSwgemVyb2xpbmUgPSBGQUxTRSwgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSkpDQoNCnANCg0KYGBgDQpfX05pdmVsIEFjYWTpbWljbyBFbmN1ZXN0YWRvc19fOiBlbiBsYSBncuFmaWNhIHNlIG9ic2VydmEgcXVlIGVsIDQ4JSBkZSBsb3MgZW5jdWVzdGFkb3Mgc2luIGVzdHVkaWFudGVzIGRlIHBvc2dyYWRvLg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHNjYWxlcykNCg0KDQpnZ3Bsb3QoZGF0YT1kYXRhLmZyYW1lKE4uQUNBRCksYWVzKHg9Ti5BQ0FEKSkrDQpnZW9tX2JhcihhZXMoeSA9ICguLmNvdW50Li4pKSxjb2xvdXIgPSAiYmxhY2siLGZpbGwgPSBjKCJmaXJlYnJpY2sxIiwibWVkaXVtdHVycXVvaXNlIiwiYXp1cmUyIiksd2lkdGggPSAwLjQpKw0KDQpnZW9tX3RleHQoYWVzKHk9ICguLmNvdW50Li4pLCBsYWJlbD1wYXN0ZTAoIigiLHk9ICguLmNvdW50Li4pLCIgLyAiLHNjYWxlczo6cGVyY2VudCgoLi5jb3VudC4uKS9zdW0oLi5jb3VudC4uKSksIikiKSksc3RhdCA9ImNvdW50Iixjb2xvdXI9ImJsYWNrIix2anVzdCA9IDAsIGhqdXN0ID0gLTAuMikrDQpnZ3RpdGxlKCJOSVZFTCBBQ0FERU1JQ08iKSsNCnhsYWIoTlVMTCkrIA0KeWxhYigiTvptZXJvIGRlIGNhc29zIikrDQp5bGltKDAsMTUpKw0Kc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1jKDEsMiwzKSwgbGFiZWxzPWMoIlByZWdyYWRvIiwgIk1hZXN0cmlhIiwiRG9jdG9yYWRvIikpKw0KY29vcmRfZmxpcCgpKw0KdGhlbWVfYncoKQ0KYGBgDQpfX01lZGlkYXMgZGUgVGVuZGVuY2lhIENlbnRyYWwgLSBFREFEX186IHNlIHB1ZWRlIG9ic2VydmFyIHF1ZSBsYSBkaXN0cmlidWNp824gZGUgbG9zIGRhdG9zIGVzIGFzaW1ldHJpY2EgZGViaWRvIGEgcXVlIGxhIG1lZGlhbmE9MjUgc2UgZW5jdWVudHJhIGFsZ28gZGlzdGFudGUgYSBsYSBtZWRpYSA9MjguNTYsIHRhbWJpZW4gc2Ugb2JzZXJ2YSBxdWUgbGEgbW9kYT0yMyBxdWVkYSBqdXN0byBlbiBlbCBwcmltZXIgcXVpbnRpbC4NCmBgYHtyfQ0KI01lZGlhIHkgTWVkaWFuYQ0Kc3VtbWFyeShFREFEKQ0KI01vZGENCmxpYnJhcnkobW9kZWVzdCkNCm1sdihFREFELCBtZXRob2QgPSAiZGlzY3JldGUiKQ0KYGBgDQpfX01lZGlkYXMgZGUgRGlzcGVyc2nzbiAtIEVEQURfXzogZGViaWRvIGEgcXVlIGxvcyBkYXRvcyBvc2NpbGFuIGVudHJlIDIxIHkgZWwgbWF4aW1vLCBsYSBkaXNwZXJzafNuIGRlIGxvcyBkYXRvcyBlcyBhbHRhLCBzZSBwdWVkZSBldmlkZW5jaWFyIGVuIGVsIGRhdG8gZGUgbGEgdmFyaWFuemEuDQoNCmBgYHtyfQ0KI1ZhcmlhbnphDQpyb3VuZCh2YXIoRURBRCksMikNCiNEZXN2aWFjafNuIEVzdOFuZGFyDQpyb3VuZChzZChFREFEKSwyKQ0KI0NvZWZpY2llbnRlIGRlIFZhcmlhY2nzbg0Kcm91bmQoKHNkKEVEQUQpLzI4LjU2KSoxMDAsMikNCmBgYA0KX19NZWRpZGFzIGRlIFRlbmRlbmNpYSBDZW50cmFsIC0gUEVTT19fOiBzZSBvYnNlcnZhIHF1ZSBsYSBtZWRpYT02Ny42NCBzZSBlbmN1ZW50cmEgcG9yIGRlYmFqbyBkZSBsYSBtZWRpYW5hPTcwIHkgbGEgbW9kYT01NyBlc3ThIGRlIG51ZXZvIGVuIGVsIHByaW1lciBxdWludGlsLg0KYGBge3J9DQojTWVkaWEgeSBNZWRpYW5hDQpzdW1tYXJ5KFBFU08pDQojTW9kYQ0KbGlicmFyeShtb2RlZXN0KQ0KbWx2KFBFU08sIG1ldGhvZCA9ICJkaXNjcmV0ZSIpDQpgYGANCl9fTWVkaWRhcyBkZSBEaXNwZXJzafNuIC0gUEVTT19fOiBsYSB2YXJpYW56YSAgdGllbmUgdW4gdmFsb3IgbXV5IGFsdG8gcG9yIGxvIHF1ZSBpbmRpY2EgcXVlIGxvcyBkYXRvcyBzZSBlbmN1ZW50cmFuIG11eSBkaXNwZXJzb3MgZW4gbGEgbXVlc3RyYS4gDQpgYGB7cn0NCiNWYXJpYW56YQ0Kcm91bmQodmFyKFBFU08pLDIpDQojRGVzdmlhY2nzbiBFc3ThbmRhcg0Kcm91bmQoc2QoUEVTTyksMikNCiNDb2VmaWNpZW50ZSBkZSBWYXJpYWNp824NCnJvdW5kKChzZChQRVNPKS82Ny42NCkqMTAwLDIpDQpgYGANCl9fTWVkaWRhcyBkZSBUZW5kZW5jaWEgQ2VudHJhbCAtIEVTVEFUVVJBX186IGxhIG1lZGlhIGRlIGVzdGF0dXJhIGRlIGxvcyBlbmN1ZXN0YWRvcyBzZSBlbmN1ZW50cmEgcG9yIGVuY2ltYSBkZSBsYSBtZWRpYW5hIGRlIGxhIG11ZXN0cmEsIHNpbiBlbWJhcmdvLCBzb24gbXV5IGNlcmNhbm9zIHBvciBsbyBxdWUgdGllbmUgdW5hIGRpc3RyaWJ1Y2nzbiBzaW3pdHJpY2EuDQpgYGB7cn0NCiNNZWRpYSB5IE1lZGlhbmENCnN1bW1hcnkoRVNUQVRVUkEpDQojTW9kYQ0KbGlicmFyeShtb2RlZXN0KQ0KbWx2KEVTVEFUVVJBLCBtZXRob2QgPSAiZGlzY3JldGUiKQ0KYGBgDQpfX01lZGlkYXMgZGUgRGlzcGVyc2nzbiAtIEVTVEFUVVJBX186IGxhIGRpc3BlcnNp824gZGUgbG9zIGRhdG9zIGVzIG11eSBiYWphLCBwb3IgbG8gcXVlIGxvcyBkYXRvcyBvYnRlbmlkb3MgZW4gbGEgbXVlc3RyYSBzb24gaG9tb2fpbmVvcy4NCmBgYHtyfQ0KI1ZhcmlhbnphDQpyb3VuZCh2YXIoRVNUQVRVUkEpLDIpDQojRGVzdmlhY2nzbiBFc3ThbmRhcg0Kcm91bmQoc2QoRVNUQVRVUkEpLDIpDQojQ29lZmljaWVudGUgZGUgVmFyaWFjafNuDQpyb3VuZCgoc2QoRVNUQVRVUkEpLzEuNjc3KSoxMDAsMikgDQpgYGANCg0K