Integrantes del grupo:


1. Introducción

El presente caso se analiza desde la perspectiva de Marie Daer, quien se encuentra interesada en llevar un programa de MBA. Ella espera responder algunas preguntas importantes para ayudar a decidir si se matricula en dicho programa, en base a una encuesta realizada a los estudiantes del programa tres meses luego de su graduación.

En particular, está interesada en conocer respecto al salario inicial de los estudiantes graduados, si el género o edad tienen relación con el salario, y si los estudiantes están satisfechos con el programa. Asimismo, desea conocer si su puntaje en el GMAT tiene alguna relación con el puntaje logrado en el curso, dado que su resultado GMAT fue relativamente bajo al no ser el inglés su lengua materna.


2. Objetivo del caso

  1. ¿Cuál es el objetivo de aspirantes a postulantes como Marie Daer?
  • Objetivo general: Decidir sobre la inscripción al programa de MBA en esta escuela en particular.

  • Objetivos específicos

    • Conocer el nivel de salario que los estudiantes esperarian ganar al graduarse.

    • Determinar si existen algunas otras variables que influyen en el nivel de salario que esperarian recibir.

    • Determinar si el programa es bien calificado por los graduados.


3. Análisis

Base1 <- read.xlsx("W12513-XLS-ENG.xlsx", sheetName = "Base1")
attach(Base1)
glimpse(Base1) 
## Rows: 274
## Columns: 9
## $ ID       <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18…
## $ age      <dbl> 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 26, 2…
## $ sex      <dbl> 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 2…
## $ gmat_tot <dbl> 620, 610, 670, 570, 710, 640, 610, 650, 630, 680, 740, 610, 7…
## $ gmat_qpc <dbl> 77, 90, 99, 56, 93, 82, 89, 88, 79, 99, 99, 75, 95, 97, 84, 6…
## $ gmat_vpc <dbl> 87, 71, 78, 81, 98, 89, 74, 89, 91, 81, 98, 87, 95, 97, 93, 9…
## $ gmat_tpc <dbl> 87, 87, 95, 75, 98, 91, 87, 92, 89, 96, 99, 86, 98, 99, 94, 9…
## $ s_avg    <dbl> 3.40, 3.50, 3.30, 3.30, 3.60, 3.90, 3.40, 3.30, 3.30, 3.45, 3…
## $ f_avg    <dbl> 3.00, 4.00, 3.25, 2.67, 3.75, 3.75, 3.50, 3.75, 3.25, 3.67, 4…
Base2 <- read.xlsx("W12513-XLS-ENG.xlsx", sheetName = "Base2")
attach(Base2)
glimpse(Base2)
## Rows: 274
## Columns: 6
## $ ID       <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18…
## $ quarter  <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ work_yrs <dbl> 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, 2, 4, 3, 2, 4, 4…
## $ frstlang <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1…
## $ salary   <dbl> 0, 0, 0, 0, 999, 0, 0, 0, 999, 998, 998, 998, 998, 998, 998, …
## $ satis    <dbl> 7, 6, 6, 7, 5, 6, 5, 6, 4, 998, 998, 998, 998, 998, 998, 998,…
Base<-inner_join(Base1,Base2, by = "ID") %>%glimpse()
## Rows: 274
## Columns: 14
## $ ID       <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18…
## $ age      <dbl> 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 26, 2…
## $ sex      <dbl> 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 2…
## $ gmat_tot <dbl> 620, 610, 670, 570, 710, 640, 610, 650, 630, 680, 740, 610, 7…
## $ gmat_qpc <dbl> 77, 90, 99, 56, 93, 82, 89, 88, 79, 99, 99, 75, 95, 97, 84, 6…
## $ gmat_vpc <dbl> 87, 71, 78, 81, 98, 89, 74, 89, 91, 81, 98, 87, 95, 97, 93, 9…
## $ gmat_tpc <dbl> 87, 87, 95, 75, 98, 91, 87, 92, 89, 96, 99, 86, 98, 99, 94, 9…
## $ s_avg    <dbl> 3.40, 3.50, 3.30, 3.30, 3.60, 3.90, 3.40, 3.30, 3.30, 3.45, 3…
## $ f_avg    <dbl> 3.00, 4.00, 3.25, 2.67, 3.75, 3.75, 3.50, 3.75, 3.25, 3.67, 4…
## $ quarter  <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ work_yrs <dbl> 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, 2, 4, 3, 2, 4, 4…
## $ frstlang <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1…
## $ salary   <dbl> 0, 0, 0, 0, 999, 0, 0, 0, 999, 998, 998, 998, 998, 998, 998, …
## $ satis    <dbl> 7, 6, 6, 7, 5, 6, 5, 6, 4, 998, 998, 998, 998, 998, 998, 998,…
  • Cambio de nombres de columnas
names(Base)<-c("ID","Edad","Sexo","GMAT_Total","Perc_Cuant_GMAT",
                "Perc_Verbal_GMAT","Perc_Gral_GMAT","Prom_Primavera",
                "Prom_Otoño","QRanking","Exp_laboral","Lengua_materna",
                "Salario_Inicial","Grado_Satisfacción")
  • Validando la estructura y las estadísticas básicas
#tibble(Base)
df_status(Base)
##              variable q_zeros p_zeros q_na p_na q_inf p_inf    type unique
## 1                  ID       0    0.00    0    0     0     0 numeric    274
## 2                Edad       0    0.00    0    0     0     0 numeric     21
## 3                Sexo       0    0.00    0    0     0     0 numeric      2
## 4          GMAT_Total       0    0.00    0    0     0     0 numeric     31
## 5     Perc_Cuant_GMAT       0    0.00    0    0     0     0 numeric     48
## 6    Perc_Verbal_GMAT       0    0.00    0    0     0     0 numeric     34
## 7      Perc_Gral_GMAT       2    0.73    0    0     0     0 numeric     42
## 8      Prom_Primavera       0    0.00    0    0     0     0 numeric     36
## 9          Prom_Otoño       3    1.09    0    0     0     0 numeric     21
## 10           QRanking       0    0.00    0    0     0     0 numeric      4
## 11        Exp_laboral       3    1.09    0    0     0     0 numeric     18
## 12     Lengua_materna       0    0.00    0    0     0     0 numeric      2
## 13    Salario_Inicial      90   32.85    0    0     0     0 numeric     45
## 14 Grado_Satisfacción       0    0.00    0    0     0     0 numeric      8
  • Actualizando los tipos de variables
Base$Sexo<-as.factor(Base$Sexo)
levels(Base$Sexo)<-c("Hombre","Mujer")
attach(Base)
table(Sexo)
## Sexo
## Hombre  Mujer 
##    206     68
Base$QRanking<-as.factor(Base$QRanking)
levels(Base$QRanking)<-c("1°","2°","3°","4°")
attach(Base)
table(QRanking)
## QRanking
## 1° 2° 3° 4° 
## 69 70 70 65
Base$Lengua_materna <-as.factor(Base$Lengua_materna)
levels(Base$Lengua_materna)<-c("Inglés","Otro")
attach(Base)
table(Lengua_materna)
## Lengua_materna
## Inglés   Otro 
##    242     32
#Se agrupa por intervalos de años de 0 a 22


Base <-   Base %>% 
mutate(Rango_Años_Exp = case_when( between(Base$Exp_laboral , 0 ,2) ~ 'Cat_E1[0-2]', 
                                   between(Base$Exp_laboral , 3 ,4) ~ 'Cat_E2[3-4]', 
                                   between(Base$Exp_laboral , 5 ,22) ~ 'Cat_E3[5-22]', 
                                    ))

Base$Rango_Años_Exp <- as.factor(Base$Rango_Años_Exp)

summary(Base)
##        ID              Edad           Sexo       GMAT_Total    Perc_Cuant_GMAT
##  Min.   :  1.00   Min.   :22.00   Hombre:206   Min.   :450.0   Min.   :28.00  
##  1st Qu.: 69.25   1st Qu.:25.00   Mujer : 68   1st Qu.:580.0   1st Qu.:72.00  
##  Median :137.50   Median :27.00                Median :620.0   Median :83.00  
##  Mean   :137.50   Mean   :27.36                Mean   :619.5   Mean   :80.64  
##  3rd Qu.:205.75   3rd Qu.:29.00                3rd Qu.:660.0   3rd Qu.:93.00  
##  Max.   :274.00   Max.   :48.00                Max.   :790.0   Max.   :99.00  
##  Perc_Verbal_GMAT Perc_Gral_GMAT Prom_Primavera    Prom_Otoño    QRanking
##  Min.   :16.00    Min.   : 0.0   Min.   :2.000   Min.   :0.000   1°:69   
##  1st Qu.:71.00    1st Qu.:78.0   1st Qu.:2.708   1st Qu.:2.750   2°:70   
##  Median :81.00    Median :87.0   Median :3.000   Median :3.000   3°:70   
##  Mean   :78.32    Mean   :84.2   Mean   :3.025   Mean   :3.062   4°:65   
##  3rd Qu.:91.00    3rd Qu.:94.0   3rd Qu.:3.300   3rd Qu.:3.250           
##  Max.   :99.00    Max.   :99.0   Max.   :4.000   Max.   :4.000           
##   Exp_laboral     Lengua_materna Salario_Inicial  Grado_Satisfacción
##  Min.   : 0.000   Inglés:242     Min.   :     0   Min.   :  1.0     
##  1st Qu.: 2.000   Otro  : 32     1st Qu.:     0   1st Qu.:  5.0     
##  Median : 3.000                  Median :   999   Median :  6.0     
##  Mean   : 3.872                  Mean   : 39026   Mean   :172.2     
##  3rd Qu.: 4.000                  3rd Qu.: 97000   3rd Qu.:  7.0     
##  Max.   :22.000                  Max.   :220000   Max.   :998.0     
##       Rango_Años_Exp
##  Cat_E1[0-2] :109   
##  Cat_E2[3-4] : 99   
##  Cat_E3[5-22]: 66   
##                     
##                     
## 

1 Preguntas del caso

a. ¿Cuánto pueden esperar ganar los estudiantes al graduarse?

attach(Base)

Base <- Base %>% 
mutate(CAT_Salario = case_when(Base$Salario_Inicial==998 |  Base$Salario_Inicial==999 ~ 1,
Base$Salario_Inicial==0 ~ 2,
Base$Salario_Inicial>0 & Base$Salario_Inicial<=100000 ~ 3,
                                      TRUE ~ 4))
Base$CAT_Salario <- as.factor(Base$CAT_Salario)
levels(Base$CAT_Salario) <- c("1. S.I.","2. Sin salario","3.<0 - 100k]","4.>100k")
table(Base$CAT_Salario)
## 
##        1. S.I. 2. Sin salario   3.<0 - 100k]        4.>100k 
##             81             90             55             48
attach(Base)
Base %>% 
  group_by(CAT_Salario) %>% 
  summarise(Mínimo=min(Salario_Inicial) , 
            Máximo=max(Salario_Inicial),
            Promedio=mean(Salario_Inicial),
            Mediana=median(Salario_Inicial))
## # A tibble: 4 × 5
##   CAT_Salario    Mínimo Máximo Promedio Mediana
##   <fct>           <dbl>  <dbl>    <dbl>   <dbl>
## 1 1. S.I.           998    999     998.     998
## 2 2. Sin salario      0      0       0        0
## 3 3.<0 - 100k]    64000 100000   93332.   95000
## 4 4.>100k        100400 220000  114144.  107150
Base %>% 
  group_by(CAT_Salario) %>% 
  summarise(SD=sd(Salario_Inicial),
            Ngraduados = n(),
            Pgraduados = n()/nrow(Base))
## # A tibble: 4 × 4
##   CAT_Salario           SD Ngraduados Pgraduados
##   <fct>              <dbl>      <int>      <dbl>
## 1 1. S.I.            0.498         81      0.296
## 2 2. Sin salario     0             90      0.328
## 3 3.<0 - 100k]    7063.            55      0.201
## 4 4.>100k        19985.            48      0.175
# Si filtramos a los graduados que no contestaron y a los que no pusieron su salario

BaseF<-Base%>%
       filter(Salario_Inicial!=998 & Salario_Inicial!=999)
attach(BaseF)


mean(Salario_Inicial)
## [1] 54985.32
median(Salario_Inicial)
## [1] 85000
sd(Salario_Inicial)
## [1] 53152.39
# Si filtramos a los graduados que no contestaron, no pusieron su salario y a los que no tienen salario inicial

BaseF<-Base%>%
       filter(Salario_Inicial!=0 & Salario_Inicial!=998 & Salario_Inicial!=999)
attach(BaseF)

mean(Salario_Inicial)
## [1] 103030.7
median(Salario_Inicial)
## [1] 1e+05
sd(Salario_Inicial)
## [1] 17868.8

Cuando la media es mayor que la mediana, esto quiere decir que la distribución presenta asimetría positiva.

  1. ¿Existe alguna variable (por ejemplo, edad, sexo, cuartil, idioma hablado, experiencia laboral) que afecte cuánto puede esperar ganar un estudiante?

2. Análisis de la variable Años de Experiencia Laboral

  • Empezamos analizando los cuartiles: Variable Rango_Años_Exp Se agrupa las variables discretas en 3 rangos , de 0 a 2 años es la primera categoría , de 3 a 4 años , será la segunda categoría y de 5 a 22 años de experiencia laboral será la categoría 3 .
#Se agrupa por intervalos de años de 0 a 22


Base <-   Base %>% 
mutate(Rango_Años_Exp = case_when( between(Base$Exp_laboral , 0 ,2) ~ 'Cat_E1[0-2]', 
                                   between(Base$Exp_laboral , 3 ,4) ~ 'Cat_E2[3-4]', 
                                   between(Base$Exp_laboral , 5 ,22) ~ 'Cat_E3[5-22]', 
                                    ))

Base$Rango_Años_Exp <- as.factor(Base$Rango_Años_Exp)

summary(Base)
##        ID              Edad           Sexo       GMAT_Total    Perc_Cuant_GMAT
##  Min.   :  1.00   Min.   :22.00   Hombre:206   Min.   :450.0   Min.   :28.00  
##  1st Qu.: 69.25   1st Qu.:25.00   Mujer : 68   1st Qu.:580.0   1st Qu.:72.00  
##  Median :137.50   Median :27.00                Median :620.0   Median :83.00  
##  Mean   :137.50   Mean   :27.36                Mean   :619.5   Mean   :80.64  
##  3rd Qu.:205.75   3rd Qu.:29.00                3rd Qu.:660.0   3rd Qu.:93.00  
##  Max.   :274.00   Max.   :48.00                Max.   :790.0   Max.   :99.00  
##  Perc_Verbal_GMAT Perc_Gral_GMAT Prom_Primavera    Prom_Otoño    QRanking
##  Min.   :16.00    Min.   : 0.0   Min.   :2.000   Min.   :0.000   1°:69   
##  1st Qu.:71.00    1st Qu.:78.0   1st Qu.:2.708   1st Qu.:2.750   2°:70   
##  Median :81.00    Median :87.0   Median :3.000   Median :3.000   3°:70   
##  Mean   :78.32    Mean   :84.2   Mean   :3.025   Mean   :3.062   4°:65   
##  3rd Qu.:91.00    3rd Qu.:94.0   3rd Qu.:3.300   3rd Qu.:3.250           
##  Max.   :99.00    Max.   :99.0   Max.   :4.000   Max.   :4.000           
##   Exp_laboral     Lengua_materna Salario_Inicial  Grado_Satisfacción
##  Min.   : 0.000   Inglés:242     Min.   :     0   Min.   :  1.0     
##  1st Qu.: 2.000   Otro  : 32     1st Qu.:     0   1st Qu.:  5.0     
##  Median : 3.000                  Median :   999   Median :  6.0     
##  Mean   : 3.872                  Mean   : 39026   Mean   :172.2     
##  3rd Qu.: 4.000                  3rd Qu.: 97000   3rd Qu.:  7.0     
##  Max.   :22.000                  Max.   :220000   Max.   :998.0     
##       Rango_Años_Exp         CAT_Salario
##  Cat_E1[0-2] :109    1. S.I.       :81  
##  Cat_E2[3-4] : 99    2. Sin salario:90  
##  Cat_E3[5-22]: 66    3.<0 - 100k]  :55  
##                      4.>100k       :48  
##                                         
## 
attach(BaseF)
BaseF %>% 
  group_by(Rango_Años_Exp) %>% 
  summarise(Mínimo=min(Salario_Inicial) , 
            Máximo=max(Salario_Inicial),
            Promedio=mean(Salario_Inicial),
            Mediana=median(Salario_Inicial))
## # A tibble: 3 × 5
##   Rango_Años_Exp Mínimo Máximo Promedio Mediana
##   <fct>           <dbl>  <dbl>    <dbl>   <dbl>
## 1 Cat_E1[0-2]     64000 162000   98614.   98000
## 2 Cat_E2[3-4]     85000 130000  102960.  102300
## 3 Cat_E3[5-22]    90000 220000  111775   105500
BaseF %>% 
  group_by(Rango_Años_Exp) %>% 
  summarise(SD=sd(Salario_Inicial),
            Rango=max(Salario_Inicial)-min(Salario_Inicial),
            Ngraduados = n(),
            Pgraduados = n()/nrow(BaseF))
## # A tibble: 3 × 5
##   Rango_Años_Exp     SD  Rango Ngraduados Pgraduados
##   <fct>           <dbl>  <dbl>      <int>      <dbl>
## 1 Cat_E1[0-2]    15268.  98000         47      0.456
## 2 Cat_E2[3-4]    10738.  45000         32      0.311
## 3 Cat_E3[5-22]   25976. 130000         24      0.233
BaseF1<-BaseF %>% 
        filter(Salario_Inicial!=220000)

attach(BaseF1)
BaseF1 %>% 
  group_by(Rango_Años_Exp) %>% 
  summarise(Mínimo=min(Salario_Inicial) , 
            Máximo=max(Salario_Inicial),
            Promedio=mean(Salario_Inicial),
            Mediana=median(Salario_Inicial))
## # A tibble: 3 × 5
##   Rango_Años_Exp Mínimo Máximo Promedio Mediana
##   <fct>           <dbl>  <dbl>    <dbl>   <dbl>
## 1 Cat_E1[0-2]     64000 162000   98614.   98000
## 2 Cat_E2[3-4]     85000 130000  102960.  102300
## 3 Cat_E3[5-22]    90000 146000  107070.  105000
BaseF1 %>% 
  group_by(Rango_Años_Exp) %>% 
  summarise(SD=sd(Salario_Inicial),
            Rango=max(Salario_Inicial)-min(Salario_Inicial),
            Ngraduados = n(),
            Pgraduados = n()/nrow(BaseF1))
## # A tibble: 3 × 5
##   Rango_Años_Exp     SD Rango Ngraduados Pgraduados
##   <fct>           <dbl> <dbl>      <int>      <dbl>
## 1 Cat_E1[0-2]    15268. 98000         47      0.461
## 2 Cat_E2[3-4]    10738. 45000         32      0.314
## 3 Cat_E3[5-22]   12242. 56000         23      0.225

Gráfico de densidad

ggplot(data = BaseF1,        
             aes(x =  Salario_Inicial,color=Rango_Años_Exp))+
             geom_density() +        
             labs(list(x = "Salario Inicial", y = "Densidad", color = "Rango_Años_Exp"))+
             theme(axis.title = element_text(face = "bold", colour = "#990000",
                   size = 10), axis.text = element_text(size = 7),        
                   plot.title = element_text(size = rel(1.2), colour = "blue")) 

Se identifica que los graduados que tienen entre 1 y 2 años de experiencia de haber egresado del MBA presentan una densidad del tipo leptocurtica , es decir la distribución de sus respuestas lo que puede implicar una mayor probabilidad de observar valores extremos o atípicos en comparación con una distribución normal. Sin embargo las personas que tienen desde 3 años a experiencia a más , se observa su grafica de densidad del tipo mesocurtica , muy parecida a una gráfica normal, esto es , que sus respuestas fueron muy homogéneas , no existiría una cantidad considerable de valores atípicos. Esto se evidenciará con las pruebas de hipótesis de normalidad ( Kolmogorov-Smirnov).

Diagrama de Cajas

ggplot(data = BaseF1, aes(x = Rango_Años_Exp, y = Salario_Inicial))+  geom_boxplot(aes(fill = Rango_Años_Exp)) +         
labs(list(x = "Rango_Años_Exp", y = "Salario Inicial"))  

Se observa una mayor variabilidad en las personas con una mayor cantidad de años de experiencia laboral. Mientras que, la variabilidad es menor en aquellas con una experiencia laboral no mayor a 2 años, sin embargo, en este grupo existe una mayor cantidad de outliers. Con respecto al grupo 2, con experiencia entre 2 y 4 años, la variabilidad es mayor al primer grupo pero menor al tercero. En términos comparativos, la mediana nos muestra que se espera que los salarios sean mayores para aquellos con una mayor cantidad de años de experiencia laboral.

Diagrama de barras

Tabla<-BaseF1 %>% 
  select(Rango_Años_Exp,Salario_Inicial) %>% 
  group_by(Rango_Años_Exp) %>% 
  summarise(NGraduados=n(),
            Promedio=mean(Salario_Inicial,na.rm = TRUE),.groups="drop") 

Resumen<-BaseF1 %>% 
  select(Salario_Inicial ) %>% 
  summarise(NGraduados=n(),                         
            Promedio=mean(Salario_Inicial,na.rm = T))

Resumen1<-cbind(Rango_Años_Exp="Total",Resumen)

Tabla<-rbind(Tabla,Resumen1)

Tabla$Promedio<-round(Tabla$Promedio,2)

ggplot(as.data.frame(Tabla[1:3,]),aes(Rango_Años_Exp,NGraduados , fill=Rango_Años_Exp)) +
  geom_bar(stat= "identity",show.legend = FALSE) +
  geom_text(aes(label=Promedio), position = position_stack(vjust = 0.5),size = 3)+
  theme (text = element_text(size=14)) +
  ggtitle ("Salario Inicial por Años de Experiencia laboral ") + 
  theme(plot.title = element_text(hjust = 0.5,face="bold"))+ # centra el título y en negrita
  theme (axis.title = element_text(face="bold", colour="black", size=rel(1.0))) + # formato a los ejes
  labs(x = NULL)+theme(aspect.ratio =0.5) #Tamaño de las barras

Existe una mayor cantidad de individuos con experiencia laboral no mayor a 2 años. Sin embargo, este grupo posee un menor promedio de ingresos con respecto a los otros grupos. El grupo con individuos de una mayor experiencia laboral (>4) tienen el mayor promedio de ingresos.

Diagrama GMAT

Tabla<-BaseF1 %>% 
  select(Rango_Años_Exp,Perc_Cuant_GMAT,Perc_Verbal_GMAT,Perc_Gral_GMAT) %>% 
  group_by(Rango_Años_Exp) %>% 
  summarise(Prom_Cuant.=mean(Perc_Cuant_GMAT),
            Prom_Verb.=mean(Perc_Verbal_GMAT),
            Prom_Gral=mean(Perc_Gral_GMAT),
            .groups="drop") 

Tabla1<-gather(Tabla,Tipo_GMAT,Promedio,Prom_Cuant.:Prom_Gral)
Tabla1$Promedio<-round(Tabla1$Promedio,2)
# Individuales
fig1<-ggplot(as.data.frame(Tabla1),aes(Rango_Años_Exp, Promedio , fill= Rango_Años_Exp)) +
  geom_bar(stat= "identity",position = "dodge") + 
  facet_grid(.~Tipo_GMAT)+
  geom_text(aes(label=Promedio), position = position_stack(vjust = 0.5),size = 3)+
  theme (text = element_text(size=14)) +
  ggtitle ("Promedio de Tipos de GMAT por Años de Experiencia") + 
  theme(plot.title = element_text(hjust = 0.5,face="bold"))+ # centra el título y en negrita
  theme (axis.title = element_text(face="bold", colour="black", size=rel(1.2)))+  # formato a los ejes
  labs(x = NULL)
fig1 + coord_polar()  

En las tres evaluaciones se observan distribuciones distintas. En la evaluación cuantitativa, los individuos con menor experiencia laboral obtuvieron un mejor puntaje, que se entiende por la proximidad del egreso profesional. Con respecto a la evaluación de aptitudes verbales, el comportamiento es distinto, ya que los individuos con mayor experiencia laboral obtuvieron puntajes mayores, que coincide con la adquisición de soft-skills en la misma práctica. Finalmente, los puntajes en aptitudes verbales tuvieron un mayor peso en comparación a las aptitudes cuantitativas, ya que, en general, los individuos con más años de experiencia laboral obtuvieron un mayor puntaje.

Prueba de normalidad

# Test de Lilliefors
by(data = BaseF1,INDICES = BaseF1$Rango_Años_Exp,FUN = function(x){ lillie.test(x$Salario_Inicial)})
## BaseF1$Rango_Años_Exp: Cat_E1[0-2]
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Salario_Inicial
## D = 0.20386, p-value = 3.934e-05
## 
## ------------------------------------------------------------ 
## BaseF1$Rango_Años_Exp: Cat_E2[3-4]
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Salario_Inicial
## D = 0.1434, p-value = 0.09263
## 
## ------------------------------------------------------------ 
## BaseF1$Rango_Años_Exp: Cat_E3[5-22]
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Salario_Inicial
## D = 0.18699, p-value = 0.03606

En 2 de los grupos Cat_E1[0-2] yCat_E3[5-22] se observa falta de normalidad. Por lo tanto vamos a realizar la prueba de homogeneidad de varianzas

Análisis de Varianza

  • Varianza constante entre grupos
  • Test de Fligner
  • Test de Levene
#attach(prueba)
fligner.test(Salario_Inicial ~ Rango_Años_Exp,BaseF1)
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  Salario_Inicial by Rango_Años_Exp
## Fligner-Killeen:med chi-squared = 0.051184, df = 2, p-value = 0.9747
require(car)
leveneTest(Salario_Inicial ~ Rango_Años_Exp,BaseF1,center = "median")
## Levene's Test for Homogeneity of Variance (center = "median")
##       Df F value Pr(>F)
## group  2  0.0705  0.932
##       99

No hay evidencias significativas de falta de homocedasticidad en ninguno de los dos test. Las varianzas son homogéneas

Dado que se evidencia la falta de normalidad en nuestros grupos categóricos, se realizará las pruebas no paramétricas para comparar las medianas de los grupos

Prueba de Kruskal Wallis

  • Prueba de medianas
kruskal.test(Salario_Inicial ~ Rango_Años_Exp, data = BaseF1)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  Salario_Inicial by Rango_Años_Exp
## Kruskal-Wallis chi-squared = 11.391, df = 2, p-value = 0.003361

Pvalue (0.003361) < 0.05. Existe diferencia significativa en las medianas de por lo menos dos grupos.

Test de Wilcoxon

  • Comparaciones múltiples
pairwise.wilcox.test(BaseF1$Salario_Inicial, BaseF1$Rango_Años_Exp, p.adjust.method = "bonf", paired = F)  
## Warning in wilcox.test.default(xi, xj, paired = paired, ...): cannot compute
## exact p-value with ties

## Warning in wilcox.test.default(xi, xj, paired = paired, ...): cannot compute
## exact p-value with ties

## Warning in wilcox.test.default(xi, xj, paired = paired, ...): cannot compute
## exact p-value with ties
## 
##  Pairwise comparisons using Wilcoxon rank sum test with continuity correction 
## 
## data:  BaseF1$Salario_Inicial and BaseF1$Rango_Años_Exp 
## 
##              Cat_E1[0-2] Cat_E2[3-4]
## Cat_E2[3-4]  0.0966      -          
## Cat_E3[5-22] 0.0049      0.5644     
## 
## P value adjustment method: bonferroni

Se encuentran diferencias significativas entre 2 de los grupos , los que tienen de 0 a 2 años de experiencia labora con los que tienend e 5 a 22 años de expeiencia laboral. Por tanto las medianas de ambos grupos diferen, es decir hay una diferencia significativa entre los salarios percibidos. Por tanto la variable experiencia laboral si implica diferenciación entre los salarios iniciales de los egresados del MBA.

Preguntas:

- ¿Existe diferencia significativa en cuánto puede esperar ganar un estudiante, por la experiencia laboral?

4. Conclusiones

4.1. Conclusión general:

  • Sugerir a Marie que sí se matricule en el MBA. La cantidad de años de experiencia laboral sí será una factor que impacte en el salario inicial que tenga expectante percibir. En tanto se dedude que que hay un 32.8% que no se encuentran laborando como mínimo luego de los 3 meses de haber acabado el MBA , luego de este tiempo hay altas probabilidades de encontrar un trabajo en el q sea bien remunerada.

4.2. Conclusiones específicas

  • Conforme se incrementan los años de experiencia laboral, el nivel de ingresos también se incrementará. Sin embargo, eso no quita que uno pueda obtener niveles altos de ingresos con apenas una experiencia laboral no mayor a 2 años.

  • En general, cuando se analizan a los graduados que contestaron el dato del salario; observamos que los graduados pueden esperar ganar USD \(85,000\). Pero, si analizamos a los graduados que tienen un salario inicial, entonces pueden esperar ganar USD \(100,000\) .

  • Cuando analizamos si existen diferencias en el salario por Esperiencia laboral. Si observamos los datos de manera descriptiva, vemos que hay diferencias entre los promedios de los salarios por Esperiencia laboral. Sin embargo, para poder tener hipótesis preliminares generalizando a la población, existe suficiente evidencia para decir que no hay diferencias significativas entre los grupos de Experiencia laboral.

LS0tDQp0aXRsZTogIlNvbHZpbmcgY2FzZSBNQkEgU3RhcnRpbmcgU2FsYXJpZXMiDQphdXRob3I6ICJHcnVwbyAzIg0Kb3V0cHV0OiBvaWxhYnM6OmxhYl9yZXBvcnQNCi0tLQ0KDQoqKkludGVncmFudGVzIGRlbCBncnVwbzoqKg0KDQotICAgW0RpZWdvIEN1YmFzIENoYXZlel0oaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL2RpZWdvY3ViYXNjaGF2ZXovKQ0KDQotICAgSnVhbiDDgW5nZWwgR2FyY8OtYSBOZWdyw7NuDQoNCi0gICBOaWNvbCBNZW5kbw0KDQotICAgQW50b255IFBlw7FhDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KDQpsaWJyYXJ5KCJkZXZ0b29scyIpDQpsaWJyYXJ5KCJkcGx5ciIpDQpsaWJyYXJ5KCJvaWxhYnMiKQ0KbGlicmFyeSgidGlkeXZlcnNlIikNCmxpYnJhcnkoIlJDb2xvckJyZXdlciIpIA0KbGlicmFyeSgiZ3JpZEV4dHJhIikgIA0KcmVxdWlyZSgia25pdHIiKQ0KbGlicmFyeSgieGxzeCIpDQpsaWJyYXJ5KCJmdW5Nb2RlbGluZyIpDQpsaWJyYXJ5KCJub3J0ZXN0IikgDQpyZXF1aXJlKG5vcnRlc3QpDQpgYGANCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMgKioxLiBJbnRyb2R1Y2Npw7NuKioNCg0KRWwgcHJlc2VudGUgY2FzbyBzZSBhbmFsaXphIGRlc2RlIGxhIHBlcnNwZWN0aXZhIGRlIE1hcmllIERhZXIsIHF1aWVuIHNlIGVuY3VlbnRyYSBpbnRlcmVzYWRhIGVuIGxsZXZhciB1biBwcm9ncmFtYSBkZSBNQkEuIEVsbGEgZXNwZXJhIHJlc3BvbmRlciBhbGd1bmFzIHByZWd1bnRhcyBpbXBvcnRhbnRlcyBwYXJhIGF5dWRhciBhIGRlY2lkaXIgc2kgc2UgbWF0cmljdWxhIGVuIGRpY2hvIHByb2dyYW1hLCBlbiBiYXNlIGEgdW5hIGVuY3Vlc3RhIHJlYWxpemFkYSBhIGxvcyBlc3R1ZGlhbnRlcyBkZWwgcHJvZ3JhbWEgdHJlcyBtZXNlcyBsdWVnbyBkZSBzdSBncmFkdWFjacOzbi4NCg0KRW4gcGFydGljdWxhciwgZXN0w6EgaW50ZXJlc2FkYSBlbiBjb25vY2VyIHJlc3BlY3RvIGFsIHNhbGFyaW8gaW5pY2lhbCBkZSBsb3MgZXN0dWRpYW50ZXMgZ3JhZHVhZG9zLCBzaSBlbCBnw6luZXJvIG8gZWRhZCB0aWVuZW4gcmVsYWNpw7NuIGNvbiBlbCBzYWxhcmlvLCB5IHNpIGxvcyBlc3R1ZGlhbnRlcyBlc3TDoW4gc2F0aXNmZWNob3MgY29uIGVsIHByb2dyYW1hLiBBc2ltaXNtbywgZGVzZWEgY29ub2NlciBzaSBzdSBwdW50YWplIGVuIGVsIEdNQVQgdGllbmUgYWxndW5hIHJlbGFjacOzbiBjb24gZWwgcHVudGFqZSBsb2dyYWRvIGVuIGVsIGN1cnNvLCBkYWRvIHF1ZSBzdSByZXN1bHRhZG8gR01BVCBmdWUgcmVsYXRpdmFtZW50ZSBiYWpvIGFsIG5vIHNlciBlbCBpbmdsw6lzIHN1IGxlbmd1YSBtYXRlcm5hLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyAqKjIuIE9iamV0aXZvIGRlbCBjYXNvKioNCg0KYS4gIMK/Q3XDoWwgZXMgZWwgb2JqZXRpdm8gZGUgYXNwaXJhbnRlcyBhIHBvc3R1bGFudGVzIGNvbW8gTWFyaWUgRGFlcj8NCg0KLSAgIE9iamV0aXZvIGdlbmVyYWw6IERlY2lkaXIgc29icmUgbGEgaW5zY3JpcGNpw7NuIGFsIHByb2dyYW1hIGRlIE1CQSBlbiBlc3RhIGVzY3VlbGEgZW4gcGFydGljdWxhci4NCg0KLSAgIE9iamV0aXZvcyBlc3BlY8OtZmljb3MNCg0KICAgIC0gICBDb25vY2VyIGVsIG5pdmVsIGRlIHNhbGFyaW8gcXVlIGxvcyBlc3R1ZGlhbnRlcyBlc3BlcmFyaWFuIGdhbmFyIGFsIGdyYWR1YXJzZS4NCg0KICAgIC0gICBEZXRlcm1pbmFyIHNpIGV4aXN0ZW4gYWxndW5hcyBvdHJhcyB2YXJpYWJsZXMgcXVlIGluZmx1eWVuIGVuIGVsIG5pdmVsIGRlIHNhbGFyaW8gcXVlIGVzcGVyYXJpYW4gcmVjaWJpci4NCg0KICAgIC0gICBEZXRlcm1pbmFyIHNpIGVsIHByb2dyYW1hIGVzIGJpZW4gY2FsaWZpY2FkbyBwb3IgbG9zIGdyYWR1YWRvcy4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMgKiozLiBBbsOhbGlzaXMqKg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRX0NCkJhc2UxIDwtIHJlYWQueGxzeCgiVzEyNTEzLVhMUy1FTkcueGxzeCIsIHNoZWV0TmFtZSA9ICJCYXNlMSIpDQphdHRhY2goQmFzZTEpDQpnbGltcHNlKEJhc2UxKSANCg0KQmFzZTIgPC0gcmVhZC54bHN4KCJXMTI1MTMtWExTLUVORy54bHN4Iiwgc2hlZXROYW1lID0gIkJhc2UyIikNCmF0dGFjaChCYXNlMikNCmdsaW1wc2UoQmFzZTIpDQoNCkJhc2U8LWlubmVyX2pvaW4oQmFzZTEsQmFzZTIsIGJ5ID0gIklEIikgJT4lZ2xpbXBzZSgpDQpgYGANCg0KLSAgIENhbWJpbyBkZSBub21icmVzIGRlIGNvbHVtbmFzDQoNCmBgYHtyIGVjaG89VCAsZXZhbD1ULCB3YXJuaW5nPUYsbWVzc2FnZT1UfQ0KbmFtZXMoQmFzZSk8LWMoIklEIiwiRWRhZCIsIlNleG8iLCJHTUFUX1RvdGFsIiwiUGVyY19DdWFudF9HTUFUIiwNCiAgICAgICAgICAgICAgICAiUGVyY19WZXJiYWxfR01BVCIsIlBlcmNfR3JhbF9HTUFUIiwiUHJvbV9QcmltYXZlcmEiLA0KICAgICAgICAgICAgICAgICJQcm9tX090b8OxbyIsIlFSYW5raW5nIiwiRXhwX2xhYm9yYWwiLCJMZW5ndWFfbWF0ZXJuYSIsDQogICAgICAgICAgICAgICAgIlNhbGFyaW9fSW5pY2lhbCIsIkdyYWRvX1NhdGlzZmFjY2nDs24iKQ0KYGBgDQoNCi0gICBWYWxpZGFuZG8gbGEgZXN0cnVjdHVyYSB5IGxhcyBlc3RhZMOtc3RpY2FzIGLDoXNpY2FzDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KDQojdGliYmxlKEJhc2UpDQpkZl9zdGF0dXMoQmFzZSkNCmBgYA0KDQotICAgQWN0dWFsaXphbmRvIGxvcyB0aXBvcyBkZSB2YXJpYWJsZXMNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0V9DQoNCkJhc2UkU2V4bzwtYXMuZmFjdG9yKEJhc2UkU2V4bykNCmxldmVscyhCYXNlJFNleG8pPC1jKCJIb21icmUiLCJNdWplciIpDQphdHRhY2goQmFzZSkNCnRhYmxlKFNleG8pDQoNCkJhc2UkUVJhbmtpbmc8LWFzLmZhY3RvcihCYXNlJFFSYW5raW5nKQ0KbGV2ZWxzKEJhc2UkUVJhbmtpbmcpPC1jKCIxwrAiLCIywrAiLCIzwrAiLCI0wrAiKQ0KYXR0YWNoKEJhc2UpDQp0YWJsZShRUmFua2luZykNCg0KDQpCYXNlJExlbmd1YV9tYXRlcm5hIDwtYXMuZmFjdG9yKEJhc2UkTGVuZ3VhX21hdGVybmEpDQpsZXZlbHMoQmFzZSRMZW5ndWFfbWF0ZXJuYSk8LWMoIkluZ2zDqXMiLCJPdHJvIikNCmF0dGFjaChCYXNlKQ0KdGFibGUoTGVuZ3VhX21hdGVybmEpDQoNCiNTZSBhZ3J1cGEgcG9yIGludGVydmFsb3MgZGUgYcOxb3MgZGUgMCBhIDIyDQoNCg0KQmFzZSA8LSAgIEJhc2UgJT4lIA0KbXV0YXRlKFJhbmdvX0HDsW9zX0V4cCA9IGNhc2Vfd2hlbiggYmV0d2VlbihCYXNlJEV4cF9sYWJvcmFsICwgMCAsMikgfiAnQ2F0X0UxWzAtMl0nLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbihCYXNlJEV4cF9sYWJvcmFsICwgMyAsNCkgfiAnQ2F0X0UyWzMtNF0nLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbihCYXNlJEV4cF9sYWJvcmFsICwgNSAsMjIpIH4gJ0NhdF9FM1s1LTIyXScsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KQmFzZSRSYW5nb19Bw7Fvc19FeHAgPC0gYXMuZmFjdG9yKEJhc2UkUmFuZ29fQcOxb3NfRXhwKQ0KDQpzdW1tYXJ5KEJhc2UpDQpgYGANCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjICoqMSBQcmVndW50YXMgZGVsIGNhc28qKg0KDQoqKmEuIMK/Q3XDoW50byBwdWVkZW4gZXNwZXJhciBnYW5hciBsb3MgZXN0dWRpYW50ZXMgYWwgZ3JhZHVhcnNlPyoqDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KYXR0YWNoKEJhc2UpDQoNCkJhc2UgPC0gQmFzZSAlPiUgDQptdXRhdGUoQ0FUX1NhbGFyaW8gPSBjYXNlX3doZW4oQmFzZSRTYWxhcmlvX0luaWNpYWw9PTk5OCB8ICBCYXNlJFNhbGFyaW9fSW5pY2lhbD09OTk5IH4gMSwNCkJhc2UkU2FsYXJpb19JbmljaWFsPT0wIH4gMiwNCkJhc2UkU2FsYXJpb19JbmljaWFsPjAgJiBCYXNlJFNhbGFyaW9fSW5pY2lhbDw9MTAwMDAwIH4gMywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IDQpKQ0KQmFzZSRDQVRfU2FsYXJpbyA8LSBhcy5mYWN0b3IoQmFzZSRDQVRfU2FsYXJpbykNCmxldmVscyhCYXNlJENBVF9TYWxhcmlvKSA8LSBjKCIxLiBTLkkuIiwiMi4gU2luIHNhbGFyaW8iLCIzLjwwIC0gMTAwa10iLCI0Lj4xMDBrIikNCnRhYmxlKEJhc2UkQ0FUX1NhbGFyaW8pDQphdHRhY2goQmFzZSkNCkJhc2UgJT4lIA0KICBncm91cF9ieShDQVRfU2FsYXJpbykgJT4lIA0KICBzdW1tYXJpc2UoTcOtbmltbz1taW4oU2FsYXJpb19JbmljaWFsKSAsIA0KICAgICAgICAgICAgTcOheGltbz1tYXgoU2FsYXJpb19JbmljaWFsKSwNCiAgICAgICAgICAgIFByb21lZGlvPW1lYW4oU2FsYXJpb19JbmljaWFsKSwNCiAgICAgICAgICAgIE1lZGlhbmE9bWVkaWFuKFNhbGFyaW9fSW5pY2lhbCkpDQoNCkJhc2UgJT4lIA0KICBncm91cF9ieShDQVRfU2FsYXJpbykgJT4lIA0KICBzdW1tYXJpc2UoU0Q9c2QoU2FsYXJpb19JbmljaWFsKSwNCiAgICAgICAgICAgIE5ncmFkdWFkb3MgPSBuKCksDQogICAgICAgICAgICBQZ3JhZHVhZG9zID0gbigpL25yb3coQmFzZSkpDQoNCiMgU2kgZmlsdHJhbW9zIGEgbG9zIGdyYWR1YWRvcyBxdWUgbm8gY29udGVzdGFyb24geSBhIGxvcyBxdWUgbm8gcHVzaWVyb24gc3Ugc2FsYXJpbw0KDQpCYXNlRjwtQmFzZSU+JQ0KICAgICAgIGZpbHRlcihTYWxhcmlvX0luaWNpYWwhPTk5OCAmIFNhbGFyaW9fSW5pY2lhbCE9OTk5KQ0KYXR0YWNoKEJhc2VGKQ0KDQoNCm1lYW4oU2FsYXJpb19JbmljaWFsKQ0KbWVkaWFuKFNhbGFyaW9fSW5pY2lhbCkNCnNkKFNhbGFyaW9fSW5pY2lhbCkNCg0KIyBTaSBmaWx0cmFtb3MgYSBsb3MgZ3JhZHVhZG9zIHF1ZSBubyBjb250ZXN0YXJvbiwgbm8gcHVzaWVyb24gc3Ugc2FsYXJpbyB5IGEgbG9zIHF1ZSBubyB0aWVuZW4gc2FsYXJpbyBpbmljaWFsDQoNCkJhc2VGPC1CYXNlJT4lDQogICAgICAgZmlsdGVyKFNhbGFyaW9fSW5pY2lhbCE9MCAmIFNhbGFyaW9fSW5pY2lhbCE9OTk4ICYgU2FsYXJpb19JbmljaWFsIT05OTkpDQphdHRhY2goQmFzZUYpDQoNCm1lYW4oU2FsYXJpb19JbmljaWFsKQ0KbWVkaWFuKFNhbGFyaW9fSW5pY2lhbCkNCnNkKFNhbGFyaW9fSW5pY2lhbCkNCg0KYGBgDQoNCkN1YW5kbyBsYSBtZWRpYSBlcyBtYXlvciBxdWUgbGEgbWVkaWFuYSwgZXN0byBxdWllcmUgZGVjaXIgcXVlIGxhIGRpc3RyaWJ1Y2nDs24gcHJlc2VudGEgYXNpbWV0csOtYSBwb3NpdGl2YS4NCg0KYi4gIMK/RXhpc3RlIGFsZ3VuYSB2YXJpYWJsZSAocG9yIGVqZW1wbG8sIGVkYWQsIHNleG8sIGN1YXJ0aWwsIGlkaW9tYSBoYWJsYWRvLCBleHBlcmllbmNpYSBsYWJvcmFsKSBxdWUgYWZlY3RlIGN1w6FudG8gcHVlZGUgZXNwZXJhciBnYW5hciB1biBlc3R1ZGlhbnRlPw0KDQojIyAqKjIuIEFuw6FsaXNpcyBkZSBsYSB2YXJpYWJsZSBBw7FvcyBkZSBFeHBlcmllbmNpYSBMYWJvcmFsKioNCg0KLSAgIEVtcGV6YW1vcyBhbmFsaXphbmRvIGxvcyBjdWFydGlsZXM6IFZhcmlhYmxlIFJhbmdvX0HDsW9zX0V4cCBTZSBhZ3J1cGEgbGFzIHZhcmlhYmxlcyBkaXNjcmV0YXMgZW4gMyByYW5nb3MgLCBkZSAwIGEgMiBhw7FvcyBlcyBsYSBwcmltZXJhIGNhdGVnb3LDrWEgLCBkZSAzIGEgNCBhw7FvcyAsIHNlcsOhIGxhIHNlZ3VuZGEgY2F0ZWdvcsOtYSB5IGRlIDUgYSAyMiBhw7FvcyBkZSBleHBlcmllbmNpYSBsYWJvcmFsIHNlcsOhIGxhIGNhdGVnb3LDrWEgMyAuDQoNCmBgYHtyfQ0KI1NlIGFncnVwYSBwb3IgaW50ZXJ2YWxvcyBkZSBhw7FvcyBkZSAwIGEgMjINCg0KDQpCYXNlIDwtICAgQmFzZSAlPiUgDQptdXRhdGUoUmFuZ29fQcOxb3NfRXhwID0gY2FzZV93aGVuKCBiZXR3ZWVuKEJhc2UkRXhwX2xhYm9yYWwgLCAwICwyKSB+ICdDYXRfRTFbMC0yXScsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuKEJhc2UkRXhwX2xhYm9yYWwgLCAzICw0KSB+ICdDYXRfRTJbMy00XScsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuKEJhc2UkRXhwX2xhYm9yYWwgLCA1ICwyMikgfiAnQ2F0X0UzWzUtMjJdJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQpCYXNlJFJhbmdvX0HDsW9zX0V4cCA8LSBhcy5mYWN0b3IoQmFzZSRSYW5nb19Bw7Fvc19FeHApDQoNCnN1bW1hcnkoQmFzZSkNCmBgYA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRX0NCmF0dGFjaChCYXNlRikNCkJhc2VGICU+JSANCiAgZ3JvdXBfYnkoUmFuZ29fQcOxb3NfRXhwKSAlPiUgDQogIHN1bW1hcmlzZShNw61uaW1vPW1pbihTYWxhcmlvX0luaWNpYWwpICwgDQogICAgICAgICAgICBNw6F4aW1vPW1heChTYWxhcmlvX0luaWNpYWwpLA0KICAgICAgICAgICAgUHJvbWVkaW89bWVhbihTYWxhcmlvX0luaWNpYWwpLA0KICAgICAgICAgICAgTWVkaWFuYT1tZWRpYW4oU2FsYXJpb19JbmljaWFsKSkNCg0KDQpCYXNlRiAlPiUgDQogIGdyb3VwX2J5KFJhbmdvX0HDsW9zX0V4cCkgJT4lIA0KICBzdW1tYXJpc2UoU0Q9c2QoU2FsYXJpb19JbmljaWFsKSwNCiAgICAgICAgICAgIFJhbmdvPW1heChTYWxhcmlvX0luaWNpYWwpLW1pbihTYWxhcmlvX0luaWNpYWwpLA0KICAgICAgICAgICAgTmdyYWR1YWRvcyA9IG4oKSwNCiAgICAgICAgICAgIFBncmFkdWFkb3MgPSBuKCkvbnJvdyhCYXNlRikpDQoNCkJhc2VGMTwtQmFzZUYgJT4lIA0KICAgICAgICBmaWx0ZXIoU2FsYXJpb19JbmljaWFsIT0yMjAwMDApDQoNCmF0dGFjaChCYXNlRjEpDQpCYXNlRjEgJT4lIA0KICBncm91cF9ieShSYW5nb19Bw7Fvc19FeHApICU+JSANCiAgc3VtbWFyaXNlKE3DrW5pbW89bWluKFNhbGFyaW9fSW5pY2lhbCkgLCANCiAgICAgICAgICAgIE3DoXhpbW89bWF4KFNhbGFyaW9fSW5pY2lhbCksDQogICAgICAgICAgICBQcm9tZWRpbz1tZWFuKFNhbGFyaW9fSW5pY2lhbCksDQogICAgICAgICAgICBNZWRpYW5hPW1lZGlhbihTYWxhcmlvX0luaWNpYWwpKQ0KDQpCYXNlRjEgJT4lIA0KICBncm91cF9ieShSYW5nb19Bw7Fvc19FeHApICU+JSANCiAgc3VtbWFyaXNlKFNEPXNkKFNhbGFyaW9fSW5pY2lhbCksDQogICAgICAgICAgICBSYW5nbz1tYXgoU2FsYXJpb19JbmljaWFsKS1taW4oU2FsYXJpb19JbmljaWFsKSwNCiAgICAgICAgICAgIE5ncmFkdWFkb3MgPSBuKCksDQogICAgICAgICAgICBQZ3JhZHVhZG9zID0gbigpL25yb3coQmFzZUYxKSkNCg0KYGBgDQoNCiMjIyAqKkdyw6FmaWNvIGRlIGRlbnNpZGFkKiogDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBCYXNlRjEsICAgICAgICANCiAgICAgICAgICAgICBhZXMoeCA9ICBTYWxhcmlvX0luaWNpYWwsY29sb3I9UmFuZ29fQcOxb3NfRXhwKSkrDQogICAgICAgICAgICAgZ2VvbV9kZW5zaXR5KCkgKyAgICAgICAgDQogICAgICAgICAgICAgbGFicyhsaXN0KHggPSAiU2FsYXJpbyBJbmljaWFsIiwgeSA9ICJEZW5zaWRhZCIsIGNvbG9yID0gIlJhbmdvX0HDsW9zX0V4cCIpKSsNCiAgICAgICAgICAgICB0aGVtZShheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGNvbG91ciA9ICIjOTkwMDAwIiwNCiAgICAgICAgICAgICAgICAgICBzaXplID0gMTApLCBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDcpLCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuMiksIGNvbG91ciA9ICJibHVlIikpIA0KYGBgDQoNCioqU2UgaWRlbnRpZmljYSBxdWUgbG9zIGdyYWR1YWRvcyBxdWUgdGllbmVuIGVudHJlIDEgeSAyIGHDsW9zIGRlIGV4cGVyaWVuY2lhIGRlIGhhYmVyIGVncmVzYWRvIGRlbCBNQkEgcHJlc2VudGFuIHVuYSBkZW5zaWRhZCBkZWwgdGlwbyBsZXB0b2N1cnRpY2EgLCBlcyBkZWNpciBsYSBkaXN0cmlidWNpw7NuIGRlIHN1cyByZXNwdWVzdGFzIGxvIHF1ZSBwdWVkZSBpbXBsaWNhciB1bmEgbWF5b3IgcHJvYmFiaWxpZGFkIGRlIG9ic2VydmFyIHZhbG9yZXMgZXh0cmVtb3MgbyBhdMOtcGljb3MgZW4gY29tcGFyYWNpw7NuIGNvbiB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwuIFNpbiBlbWJhcmdvIGxhcyBwZXJzb25hcyBxdWUgdGllbmVuIGRlc2RlIDMgYcOxb3MgYSBleHBlcmllbmNpYSBhIG3DoXMgLCBzZSBvYnNlcnZhIHN1IGdyYWZpY2EgZGUgZGVuc2lkYWQgZGVsIHRpcG8gbWVzb2N1cnRpY2EgLCBtdXkgcGFyZWNpZGEgYSB1bmEgZ3LDoWZpY2Egbm9ybWFsLCBlc3RvIGVzICwgcXVlIHN1cyByZXNwdWVzdGFzIGZ1ZXJvbiBtdXkgaG9tb2fDqW5lYXMgLCBubyBleGlzdGlyw61hIHVuYSBjYW50aWRhZCBjb25zaWRlcmFibGUgZGUgdmFsb3JlcyBhdMOtcGljb3MuIEVzdG8gc2UgZXZpZGVuY2lhcsOhIGNvbiBsYXMgcHJ1ZWJhcyBkZSBoaXDDs3Rlc2lzIGRlIG5vcm1hbGlkYWQgKCBLb2xtb2dvcm92LVNtaXJub3YpLioqDQoNCiMjIyAqKkRpYWdyYW1hIGRlIENhamFzKiogDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBCYXNlRjEsIGFlcyh4ID0gUmFuZ29fQcOxb3NfRXhwLCB5ID0gU2FsYXJpb19JbmljaWFsKSkrICBnZW9tX2JveHBsb3QoYWVzKGZpbGwgPSBSYW5nb19Bw7Fvc19FeHApKSArICAgICAgICAgDQpsYWJzKGxpc3QoeCA9ICJSYW5nb19Bw7Fvc19FeHAiLCB5ID0gIlNhbGFyaW8gSW5pY2lhbCIpKSAgDQpgYGANCg0KKipTZSBvYnNlcnZhIHVuYSBtYXlvciB2YXJpYWJpbGlkYWQgZW4gbGFzIHBlcnNvbmFzIGNvbiB1bmEgbWF5b3IgY2FudGlkYWQgZGUgYcOxb3MgZGUgZXhwZXJpZW5jaWEgbGFib3JhbC4gTWllbnRyYXMgcXVlLCBsYSB2YXJpYWJpbGlkYWQgZXMgbWVub3IgZW4gYXF1ZWxsYXMgY29uIHVuYSBleHBlcmllbmNpYSBsYWJvcmFsIG5vIG1heW9yIGEgMiBhw7Fvcywgc2luIGVtYmFyZ28sIGVuIGVzdGUgZ3J1cG8gZXhpc3RlIHVuYSBtYXlvciBjYW50aWRhZCBkZSBvdXRsaWVycy4gQ29uIHJlc3BlY3RvIGFsIGdydXBvIDIsIGNvbiBleHBlcmllbmNpYSBlbnRyZSAyIHkgNCBhw7FvcywgbGEgdmFyaWFiaWxpZGFkIGVzIG1heW9yIGFsIHByaW1lciBncnVwbyBwZXJvIG1lbm9yIGFsIHRlcmNlcm8uIEVuIHTDqXJtaW5vcyBjb21wYXJhdGl2b3MsIGxhIG1lZGlhbmEgbm9zIG11ZXN0cmEgcXVlIHNlIGVzcGVyYSBxdWUgbG9zIHNhbGFyaW9zIHNlYW4gbWF5b3JlcyBwYXJhIGFxdWVsbG9zIGNvbiB1bmEgbWF5b3IgY2FudGlkYWQgZGUgYcOxb3MgZGUgZXhwZXJpZW5jaWEgbGFib3JhbC4qKg0KDQojIyMgKipEaWFncmFtYSBkZSBiYXJyYXMqKiANCg0KYGBge3J9DQpUYWJsYTwtQmFzZUYxICU+JSANCiAgc2VsZWN0KFJhbmdvX0HDsW9zX0V4cCxTYWxhcmlvX0luaWNpYWwpICU+JSANCiAgZ3JvdXBfYnkoUmFuZ29fQcOxb3NfRXhwKSAlPiUgDQogIHN1bW1hcmlzZShOR3JhZHVhZG9zPW4oKSwNCiAgICAgICAgICAgIFByb21lZGlvPW1lYW4oU2FsYXJpb19JbmljaWFsLG5hLnJtID0gVFJVRSksLmdyb3Vwcz0iZHJvcCIpIA0KDQpSZXN1bWVuPC1CYXNlRjEgJT4lIA0KICBzZWxlY3QoU2FsYXJpb19JbmljaWFsICkgJT4lIA0KICBzdW1tYXJpc2UoTkdyYWR1YWRvcz1uKCksICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgUHJvbWVkaW89bWVhbihTYWxhcmlvX0luaWNpYWwsbmEucm0gPSBUKSkNCg0KUmVzdW1lbjE8LWNiaW5kKFJhbmdvX0HDsW9zX0V4cD0iVG90YWwiLFJlc3VtZW4pDQoNClRhYmxhPC1yYmluZChUYWJsYSxSZXN1bWVuMSkNCg0KVGFibGEkUHJvbWVkaW88LXJvdW5kKFRhYmxhJFByb21lZGlvLDIpDQoNCmdncGxvdChhcy5kYXRhLmZyYW1lKFRhYmxhWzE6MyxdKSxhZXMoUmFuZ29fQcOxb3NfRXhwLE5HcmFkdWFkb3MgLCBmaWxsPVJhbmdvX0HDsW9zX0V4cCkpICsNCiAgZ2VvbV9iYXIoc3RhdD0gImlkZW50aXR5IixzaG93LmxlZ2VuZCA9IEZBTFNFKSArDQogIGdlb21fdGV4dChhZXMobGFiZWw9UHJvbWVkaW8pLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSxzaXplID0gMykrDQogIHRoZW1lICh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTQpKSArDQogIGdndGl0bGUgKCJTYWxhcmlvIEluaWNpYWwgcG9yIEHDsW9zIGRlIEV4cGVyaWVuY2lhIGxhYm9yYWwgIikgKyANCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSxmYWNlPSJib2xkIikpKyAjIGNlbnRyYSBlbCB0w610dWxvIHkgZW4gbmVncml0YQ0KICB0aGVtZSAoYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlPSJib2xkIiwgY29sb3VyPSJibGFjayIsIHNpemU9cmVsKDEuMCkpKSArICMgZm9ybWF0byBhIGxvcyBlamVzDQogIGxhYnMoeCA9IE5VTEwpK3RoZW1lKGFzcGVjdC5yYXRpbyA9MC41KSAjVGFtYcOxbyBkZSBsYXMgYmFycmFzDQpgYGANCg0KKipFeGlzdGUgdW5hIG1heW9yIGNhbnRpZGFkIGRlIGluZGl2aWR1b3MgY29uIGV4cGVyaWVuY2lhIGxhYm9yYWwgbm8gbWF5b3IgYSAyIGHDsW9zLiBTaW4gZW1iYXJnbywgZXN0ZSBncnVwbyBwb3NlZSB1biBtZW5vciBwcm9tZWRpbyBkZSBpbmdyZXNvcyBjb24gcmVzcGVjdG8gYSBsb3Mgb3Ryb3MgZ3J1cG9zLiBFbCBncnVwbyBjb24gaW5kaXZpZHVvcyBkZSB1bmEgbWF5b3IgZXhwZXJpZW5jaWEgbGFib3JhbCAoXD40KSB0aWVuZW4gZWwgbWF5b3IgcHJvbWVkaW8gZGUgaW5ncmVzb3MuKioNCg0KIyMjICoqRGlhZ3JhbWEgR01BVCoqDQoNCmBgYHtyfQ0KVGFibGE8LUJhc2VGMSAlPiUgDQogIHNlbGVjdChSYW5nb19Bw7Fvc19FeHAsUGVyY19DdWFudF9HTUFULFBlcmNfVmVyYmFsX0dNQVQsUGVyY19HcmFsX0dNQVQpICU+JSANCiAgZ3JvdXBfYnkoUmFuZ29fQcOxb3NfRXhwKSAlPiUgDQogIHN1bW1hcmlzZShQcm9tX0N1YW50Lj1tZWFuKFBlcmNfQ3VhbnRfR01BVCksDQogICAgICAgICAgICBQcm9tX1ZlcmIuPW1lYW4oUGVyY19WZXJiYWxfR01BVCksDQogICAgICAgICAgICBQcm9tX0dyYWw9bWVhbihQZXJjX0dyYWxfR01BVCksDQogICAgICAgICAgICAuZ3JvdXBzPSJkcm9wIikgDQoNClRhYmxhMTwtZ2F0aGVyKFRhYmxhLFRpcG9fR01BVCxQcm9tZWRpbyxQcm9tX0N1YW50LjpQcm9tX0dyYWwpDQpUYWJsYTEkUHJvbWVkaW88LXJvdW5kKFRhYmxhMSRQcm9tZWRpbywyKQ0KIyBJbmRpdmlkdWFsZXMNCmZpZzE8LWdncGxvdChhcy5kYXRhLmZyYW1lKFRhYmxhMSksYWVzKFJhbmdvX0HDsW9zX0V4cCwgUHJvbWVkaW8gLCBmaWxsPSBSYW5nb19Bw7Fvc19FeHApKSArDQogIGdlb21fYmFyKHN0YXQ9ICJpZGVudGl0eSIscG9zaXRpb24gPSAiZG9kZ2UiKSArIA0KICBmYWNldF9ncmlkKC5+VGlwb19HTUFUKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1Qcm9tZWRpbyksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLHNpemUgPSAzKSsNCiAgdGhlbWUgKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCkpICsNCiAgZ2d0aXRsZSAoIlByb21lZGlvIGRlIFRpcG9zIGRlIEdNQVQgcG9yIEHDsW9zIGRlIEV4cGVyaWVuY2lhIikgKyANCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSxmYWNlPSJib2xkIikpKyAjIGNlbnRyYSBlbCB0w610dWxvIHkgZW4gbmVncml0YQ0KICB0aGVtZSAoYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlPSJib2xkIiwgY29sb3VyPSJibGFjayIsIHNpemU9cmVsKDEuMikpKSsgICMgZm9ybWF0byBhIGxvcyBlamVzDQogIGxhYnMoeCA9IE5VTEwpDQpmaWcxICsgY29vcmRfcG9sYXIoKSAgDQpgYGANCg0KKipFbiBsYXMgdHJlcyBldmFsdWFjaW9uZXMgc2Ugb2JzZXJ2YW4gZGlzdHJpYnVjaW9uZXMgZGlzdGludGFzLiBFbiBsYSBldmFsdWFjacOzbiBjdWFudGl0YXRpdmEsIGxvcyBpbmRpdmlkdW9zIGNvbiBtZW5vciBleHBlcmllbmNpYSBsYWJvcmFsIG9idHV2aWVyb24gdW4gbWVqb3IgcHVudGFqZSwgcXVlIHNlIGVudGllbmRlIHBvciBsYSBwcm94aW1pZGFkIGRlbCBlZ3Jlc28gcHJvZmVzaW9uYWwuIENvbiByZXNwZWN0byBhIGxhIGV2YWx1YWNpw7NuIGRlIGFwdGl0dWRlcyB2ZXJiYWxlcywgZWwgY29tcG9ydGFtaWVudG8gZXMgZGlzdGludG8sIHlhIHF1ZSBsb3MgaW5kaXZpZHVvcyBjb24gbWF5b3IgZXhwZXJpZW5jaWEgbGFib3JhbCBvYnR1dmllcm9uIHB1bnRhamVzIG1heW9yZXMsIHF1ZSBjb2luY2lkZSBjb24gbGEgYWRxdWlzaWNpw7NuIGRlIHNvZnQtc2tpbGxzIGVuIGxhIG1pc21hIHByw6FjdGljYS4gRmluYWxtZW50ZSwgbG9zIHB1bnRhamVzIGVuIGFwdGl0dWRlcyB2ZXJiYWxlcyB0dXZpZXJvbiB1biBtYXlvciBwZXNvIGVuIGNvbXBhcmFjacOzbiBhIGxhcyBhcHRpdHVkZXMgY3VhbnRpdGF0aXZhcywgeWEgcXVlLCBlbiBnZW5lcmFsLCBsb3MgaW5kaXZpZHVvcyBjb24gbcOhcyBhw7FvcyBkZSBleHBlcmllbmNpYSBsYWJvcmFsIG9idHV2aWVyb24gdW4gbWF5b3IgcHVudGFqZS4qKg0KDQojIyMgKipQcnVlYmEgZGUgbm9ybWFsaWRhZCoqDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KIyBUZXN0IGRlIExpbGxpZWZvcnMNCmJ5KGRhdGEgPSBCYXNlRjEsSU5ESUNFUyA9IEJhc2VGMSRSYW5nb19Bw7Fvc19FeHAsRlVOID0gZnVuY3Rpb24oeCl7IGxpbGxpZS50ZXN0KHgkU2FsYXJpb19JbmljaWFsKX0pDQpgYGANCg0KKipFbiAyIGRlIGxvcyBncnVwb3MgQ2F0X0UxWzAtMl0geUNhdF9FM1s1LTIyXSBzZSBvYnNlcnZhIGZhbHRhIGRlIG5vcm1hbGlkYWQuKiogKipQb3IgbG8gdGFudG8gdmFtb3MgYSByZWFsaXphciBsYSBwcnVlYmEgZGUgaG9tb2dlbmVpZGFkIGRlIHZhcmlhbnphcyoqDQoNCiMjIyAqKkFuw6FsaXNpcyBkZSBWYXJpYW56YSoqDQoNCi0gICAqKlZhcmlhbnphIGNvbnN0YW50ZSBlbnRyZSBncnVwb3MqKg0KLSAgICoqVGVzdCBkZSBGbGlnbmVyKioNCi0gICAqKlRlc3QgZGUgTGV2ZW5lKioNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0V9DQoNCiNhdHRhY2gocHJ1ZWJhKQ0KZmxpZ25lci50ZXN0KFNhbGFyaW9fSW5pY2lhbCB+IFJhbmdvX0HDsW9zX0V4cCxCYXNlRjEpDQoNCnJlcXVpcmUoY2FyKQ0KbGV2ZW5lVGVzdChTYWxhcmlvX0luaWNpYWwgfiBSYW5nb19Bw7Fvc19FeHAsQmFzZUYxLGNlbnRlciA9ICJtZWRpYW4iKQ0KYGBgDQoNCioqTm8gaGF5IGV2aWRlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZGUgZmFsdGEgZGUgaG9tb2NlZGFzdGljaWRhZCBlbiBuaW5ndW5vIGRlIGxvcyBkb3MgdGVzdC4gTGFzIHZhcmlhbnphcyBzb24gaG9tb2fDqW5lYXMqKg0KDQoqKkRhZG8gcXVlIHNlIGV2aWRlbmNpYSBsYSBmYWx0YSBkZSBub3JtYWxpZGFkIGVuIG51ZXN0cm9zIGdydXBvcyBjYXRlZ8Ozcmljb3MsIHNlIHJlYWxpemFyw6EgbGFzIHBydWViYXMgbm8gcGFyYW3DqXRyaWNhcyBwYXJhIGNvbXBhcmFyIGxhcyBtZWRpYW5hcyBkZSBsb3MgZ3J1cG9zKioNCg0KIyMjICoqUHJ1ZWJhIGRlIEtydXNrYWwgV2FsbGlzKioNCg0KLSAgICoqUHJ1ZWJhIGRlIG1lZGlhbmFzKioNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0V9DQprcnVza2FsLnRlc3QoU2FsYXJpb19JbmljaWFsIH4gUmFuZ29fQcOxb3NfRXhwLCBkYXRhID0gQmFzZUYxKQ0KYGBgDQoNCioqUHZhbHVlICgwLjAwMzM2MSkgXDwgMC4wNS4gRXhpc3RlIGRpZmVyZW5jaWEgc2lnbmlmaWNhdGl2YSBlbiBsYXMgbWVkaWFuYXMgZGUgcG9yIGxvIG1lbm9zIGRvcyBncnVwb3MuKioNCg0KIyMjICoqVGVzdCBkZSBXaWxjb3hvbioqDQoNCi0gICBDb21wYXJhY2lvbmVzIG3Dumx0aXBsZXMNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0V9DQpwYWlyd2lzZS53aWxjb3gudGVzdChCYXNlRjEkU2FsYXJpb19JbmljaWFsLCBCYXNlRjEkUmFuZ29fQcOxb3NfRXhwLCBwLmFkanVzdC5tZXRob2QgPSAiYm9uZiIsIHBhaXJlZCA9IEYpICANCmBgYA0KDQoqKlNlIGVuY3VlbnRyYW4gZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZW50cmUgMiBkZSBsb3MgZ3J1cG9zICwgbG9zIHF1ZSB0aWVuZW4gZGUgMCBhIDIgYcOxb3MgZGUgZXhwZXJpZW5jaWEgbGFib3JhIGNvbiBsb3MgcXVlIHRpZW5lbmQgZSA1IGEgMjIgYcOxb3MgZGUgZXhwZWllbmNpYSBsYWJvcmFsLiBQb3IgdGFudG8gbGFzIG1lZGlhbmFzIGRlIGFtYm9zIGdydXBvcyBkaWZlcmVuLCBlcyBkZWNpciBoYXkgdW5hIGRpZmVyZW5jaWEgc2lnbmlmaWNhdGl2YSBlbnRyZSBsb3Mgc2FsYXJpb3MgcGVyY2liaWRvcy4gUG9yIHRhbnRvIGxhIHZhcmlhYmxlIGV4cGVyaWVuY2lhIGxhYm9yYWwgc2kgaW1wbGljYSBkaWZlcmVuY2lhY2nDs24gZW50cmUgbG9zIHNhbGFyaW9zIGluaWNpYWxlcyBkZSBsb3MgZWdyZXNhZG9zIGRlbCBNQkEuKioNCg0KKipQcmVndW50YXM6KioNCg0KKiotIMK/RXhpc3RlIGRpZmVyZW5jaWEgc2lnbmlmaWNhdGl2YSBlbiBjdcOhbnRvIHB1ZWRlIGVzcGVyYXIgZ2FuYXIgdW4gZXN0dWRpYW50ZSwgcG9yIGxhIGV4cGVyaWVuY2lhIGxhYm9yYWw/KioNCg0KIyAqKjQuIENvbmNsdXNpb25lcyoqDQoNCiMjICoqNC4xLiBDb25jbHVzacOzbiBnZW5lcmFsOioqDQoNCi0gICBTdWdlcmlyIGEgTWFyaWUgcXVlIHPDrSBzZSBtYXRyaWN1bGUgZW4gZWwgTUJBLiBMYSBjYW50aWRhZCBkZSBhw7FvcyBkZSBleHBlcmllbmNpYSBsYWJvcmFsIHPDrSBzZXLDoSB1bmEgZmFjdG9yIHF1ZSBpbXBhY3RlIGVuIGVsIHNhbGFyaW8gaW5pY2lhbCBxdWUgdGVuZ2EgZXhwZWN0YW50ZSBwZXJjaWJpci4gRW4gdGFudG8gc2UgZGVkdWRlIHF1ZSBxdWUgaGF5IHVuIDMyLjglIHF1ZSBubyBzZSBlbmN1ZW50cmFuIGxhYm9yYW5kbyBjb21vIG3DrW5pbW8gbHVlZ28gZGUgbG9zIDMgbWVzZXMgZGUgaGFiZXIgYWNhYmFkbyBlbCBNQkEgLCBsdWVnbyBkZSBlc3RlIHRpZW1wbyBoYXkgYWx0YXMgcHJvYmFiaWxpZGFkZXMgZGUgZW5jb250cmFyIHVuIHRyYWJham8gZW4gZWwgcSBzZWEgYmllbiByZW11bmVyYWRhLg0KDQojIyAqKjQuMi4gQ29uY2x1c2lvbmVzIGVzcGVjw61maWNhcyoqDQoNCi0gICBDb25mb3JtZSBzZSBpbmNyZW1lbnRhbiBsb3MgYcOxb3MgZGUgZXhwZXJpZW5jaWEgbGFib3JhbCwgZWwgbml2ZWwgZGUgaW5ncmVzb3MgdGFtYmnDqW4gc2UgaW5jcmVtZW50YXLDoS4gU2luIGVtYmFyZ28sIGVzbyBubyBxdWl0YSBxdWUgdW5vIHB1ZWRhIG9idGVuZXIgbml2ZWxlcyBhbHRvcyBkZSBpbmdyZXNvcyBjb24gYXBlbmFzIHVuYSBleHBlcmllbmNpYSBsYWJvcmFsIG5vIG1heW9yIGEgMiBhw7Fvcy4NCg0KLSAgIEVuIGdlbmVyYWwsIGN1YW5kbyBzZSBhbmFsaXphbiBhIGxvcyBncmFkdWFkb3MgcXVlIGNvbnRlc3Rhcm9uIGVsIGRhdG8gZGVsIHNhbGFyaW87IG9ic2VydmFtb3MgcXVlIGxvcyBncmFkdWFkb3MgcHVlZGVuIGVzcGVyYXIgZ2FuYXIgVVNEICQ4NSwwMDAkLiBQZXJvLCBzaSBhbmFsaXphbW9zIGEgbG9zIGdyYWR1YWRvcyBxdWUgdGllbmVuIHVuIHNhbGFyaW8gaW5pY2lhbCwgZW50b25jZXMgcHVlZGVuIGVzcGVyYXIgZ2FuYXIgVVNEICQxMDAsMDAwJCAuDQoNCi0gICBDdWFuZG8gYW5hbGl6YW1vcyBzaSBleGlzdGVuIGRpZmVyZW5jaWFzIGVuIGVsIHNhbGFyaW8gcG9yIEVzcGVyaWVuY2lhIGxhYm9yYWwuIFNpIG9ic2VydmFtb3MgbG9zIGRhdG9zIGRlIG1hbmVyYSBkZXNjcmlwdGl2YSwgdmVtb3MgcXVlIGhheSBkaWZlcmVuY2lhcyBlbnRyZSBsb3MgcHJvbWVkaW9zIGRlIGxvcyBzYWxhcmlvcyBwb3IgRXNwZXJpZW5jaWEgbGFib3JhbC4gU2luIGVtYmFyZ28sIHBhcmEgcG9kZXIgdGVuZXIgaGlww7N0ZXNpcyBwcmVsaW1pbmFyZXMgZ2VuZXJhbGl6YW5kbyBhIGxhIHBvYmxhY2nDs24sIGV4aXN0ZSBzdWZpY2llbnRlIGV2aWRlbmNpYSBwYXJhIGRlY2lyIHF1ZSBubyBoYXkgZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZW50cmUgbG9zIGdydXBvcyBkZSBFeHBlcmllbmNpYSBsYWJvcmFsLg0K