Teoría

Los Modelos de Ecuaciones Estructurales son una técnica de análisis de estadítica multivariada, que permite analizar patrones complejos de relaciones entre variables, realizar comparaciones entre untragruposm y validar modelos teóricos y empíricos.

Ejercicio 1. Holzinger y Swineford

Holdzinger y Swineford realizaron examenes de habilidad mental a adolecentes de 7 y 8 grado de dos escuelas (Pasteir y Grand-White).

La base de datos está incluida como paquete en R, e incluye las sigueintes columnas:

  • sex: Género (1=male, 2=female)
  • x1: Percepción Visual
  • x2: Juegos con cubos
  • x3: Juegos con pastillas/espacial
  • x4: Comprensión de párrafos
  • x5: Completar oraciones
  • x6: Significado de palabras
  • x7: Sumas aceleradas
  • x8: Conto acelerado de puntos
  • x9: Discriminación acelerada de mayúculas rectas y curvas

Se busca identidicar las relaciones entre las habilidades visual (x1, x2, x3), textual (x4, x5,x6) y velocidad (x7,x8,x9) de los adolescentes.

Instalar paquetes y llamar librerías

#install.packages("lavaan")
library(lavaan)
#install.packages("lavaanPlot")
library(lavaanPlot)
#install.packages("readxl")
library(readxl)

Importar la base de datos

df6 <- HolzingerSwineford1939

Entender la base de datos

summary(df6)
##        id             sex            ageyr        agemo       
##  Min.   :  1.0   Min.   :1.000   Min.   :11   Min.   : 0.000  
##  1st Qu.: 82.0   1st Qu.:1.000   1st Qu.:12   1st Qu.: 2.000  
##  Median :163.0   Median :2.000   Median :13   Median : 5.000  
##  Mean   :176.6   Mean   :1.515   Mean   :13   Mean   : 5.375  
##  3rd Qu.:272.0   3rd Qu.:2.000   3rd Qu.:14   3rd Qu.: 8.000  
##  Max.   :351.0   Max.   :2.000   Max.   :16   Max.   :11.000  
##                                                               
##          school        grade             x1               x2       
##  Grant-White:145   Min.   :7.000   Min.   :0.6667   Min.   :2.250  
##  Pasteur    :156   1st Qu.:7.000   1st Qu.:4.1667   1st Qu.:5.250  
##                    Median :7.000   Median :5.0000   Median :6.000  
##                    Mean   :7.477   Mean   :4.9358   Mean   :6.088  
##                    3rd Qu.:8.000   3rd Qu.:5.6667   3rd Qu.:6.750  
##                    Max.   :8.000   Max.   :8.5000   Max.   :9.250  
##                    NAs    :1                                       
##        x3              x4              x5              x6        
##  Min.   :0.250   Min.   :0.000   Min.   :1.000   Min.   :0.1429  
##  1st Qu.:1.375   1st Qu.:2.333   1st Qu.:3.500   1st Qu.:1.4286  
##  Median :2.125   Median :3.000   Median :4.500   Median :2.0000  
##  Mean   :2.250   Mean   :3.061   Mean   :4.341   Mean   :2.1856  
##  3rd Qu.:3.125   3rd Qu.:3.667   3rd Qu.:5.250   3rd Qu.:2.7143  
##  Max.   :4.500   Max.   :6.333   Max.   :7.000   Max.   :6.1429  
##                                                                  
##        x7              x8               x9       
##  Min.   :1.304   Min.   : 3.050   Min.   :2.778  
##  1st Qu.:3.478   1st Qu.: 4.850   1st Qu.:4.750  
##  Median :4.087   Median : 5.500   Median :5.417  
##  Mean   :4.186   Mean   : 5.527   Mean   :5.374  
##  3rd Qu.:4.913   3rd Qu.: 6.100   3rd Qu.:6.083  
##  Max.   :7.435   Max.   :10.000   Max.   :9.250  
## 
str(df6)
## 'data.frame':    301 obs. of  15 variables:
##  $ id    : int  1 2 3 4 5 6 7 8 9 11 ...
##  $ sex   : int  1 2 2 1 2 2 1 2 2 2 ...
##  $ ageyr : int  13 13 13 13 12 14 12 12 13 12 ...
##  $ agemo : int  1 7 1 2 2 1 1 2 0 5 ...
##  $ school: Factor w/ 2 levels "Grant-White",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ grade : int  7 7 7 7 7 7 7 7 7 7 ...
##  $ x1    : num  3.33 5.33 4.5 5.33 4.83 ...
##  $ x2    : num  7.75 5.25 5.25 7.75 4.75 5 6 6.25 5.75 5.25 ...
##  $ x3    : num  0.375 2.125 1.875 3 0.875 ...
##  $ x4    : num  2.33 1.67 1 2.67 2.67 ...
##  $ x5    : num  5.75 3 1.75 4.5 4 3 6 4.25 5.75 5 ...
##  $ x6    : num  1.286 1.286 0.429 2.429 2.571 ...
##  $ x7    : num  3.39 3.78 3.26 3 3.7 ...
##  $ x8    : num  5.75 6.25 3.9 5.3 6.3 6.65 6.2 5.15 4.65 4.55 ...
##  $ x9    : num  6.36 7.92 4.42 4.86 5.92 ...

Tipos de fórmilas

  1. Regresión (~) Variable que depende de otras.
  2. Variables latentes (=~) No se observa, se infiera a travez de otras.
  3. Varianzas y covarianzas () Relaciones entre variables latenes y las observadas (Varianza entre sí misma, Covarianza si es entre otras).
  4. Intercepto (~1) Valor esperado cuando las demás variables son cero.

Estructurar el modelo

modelo1 <- ' # Regresiones

              # Variables latentes
              visual =~ x1 + x2 + x3
              textual =~ x4 + x5 + x6
              velocidad =~ x7 + x8 + x9
              
              # Varianzas y covarianzas
              
              # Intercepto
              
              '

Generar el Análisis Factorial Confirmatorio (CFA)

fit1 <- sem(modelo1, df6) # ponemos el modelo y los datos
summary(fit1) 
## lavaan 0.7-2 ended normally after 35 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        21
## 
##   Number of observations                           301
## 
## Model Test User Model:
##                                                       
##   Test statistic                                85.306
##   Degrees of freedom                                24
##   P-value (Chi-square)                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   visual =~                                           
##     x1                1.000                           
##     x2                0.554    0.100    5.554    0.000
##     x3                0.729    0.109    6.685    0.000
##   textual =~                                          
##     x4                1.000                           
##     x5                1.113    0.065   17.014    0.000
##     x6                0.926    0.055   16.703    0.000
##   velocidad =~                                        
##     x7                1.000                           
##     x8                1.180    0.165    7.152    0.000
##     x9                1.082    0.151    7.155    0.000
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   visual ~~                                           
##     textual           0.408    0.074    5.552    0.000
##     velocidad         0.262    0.056    4.660    0.000
##   textual ~~                                          
##     velocidad         0.173    0.049    3.518    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .x1                0.549    0.114    4.833    0.000
##    .x2                1.134    0.102   11.146    0.000
##    .x3                0.844    0.091    9.317    0.000
##    .x4                0.371    0.048    7.779    0.000
##    .x5                0.446    0.058    7.642    0.000
##    .x6                0.356    0.043    8.277    0.000
##    .x7                0.799    0.081    9.823    0.000
##    .x8                0.488    0.074    6.573    0.000
##    .x9                0.566    0.071    8.003    0.000
##     visual            0.809    0.145    5.564    0.000
##     textual           0.979    0.112    8.737    0.000
##     velocidad         0.384    0.086    4.451    0.000
lavaanPlot(fit1, coef=TRUE, cov=TRUE) # le ponemos que nos muestro coeficientes y covarianzas

Generar el modelo de Ecuaciones Estructurales (SEM)

fit11 <- cfa(modelo1, df6) # ponemos el modelo y los datos
summary(fit11) 
## lavaan 0.7-2 ended normally after 35 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        21
## 
##   Number of observations                           301
## 
## Model Test User Model:
##                                                       
##   Test statistic                                85.306
##   Degrees of freedom                                24
##   P-value (Chi-square)                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   visual =~                                           
##     x1                1.000                           
##     x2                0.554    0.100    5.554    0.000
##     x3                0.729    0.109    6.685    0.000
##   textual =~                                          
##     x4                1.000                           
##     x5                1.113    0.065   17.014    0.000
##     x6                0.926    0.055   16.703    0.000
##   velocidad =~                                        
##     x7                1.000                           
##     x8                1.180    0.165    7.152    0.000
##     x9                1.082    0.151    7.155    0.000
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   visual ~~                                           
##     textual           0.408    0.074    5.552    0.000
##     velocidad         0.262    0.056    4.660    0.000
##   textual ~~                                          
##     velocidad         0.173    0.049    3.518    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .x1                0.549    0.114    4.833    0.000
##    .x2                1.134    0.102   11.146    0.000
##    .x3                0.844    0.091    9.317    0.000
##    .x4                0.371    0.048    7.779    0.000
##    .x5                0.446    0.058    7.642    0.000
##    .x6                0.356    0.043    8.277    0.000
##    .x7                0.799    0.081    9.823    0.000
##    .x8                0.488    0.074    6.573    0.000
##    .x9                0.566    0.071    8.003    0.000
##     visual            0.809    0.145    5.564    0.000
##     textual           0.979    0.112    8.737    0.000
##     velocidad         0.384    0.086    4.451    0.000
lavaanPlot(fit11, coef=TRUE, cov=TRUE)

Ejercicio 2. Democracia Política e Industrialización

Contexto

La base de datos contiene distintas mediciones sobre la democracia política e industrialización en países de desarrollo durante 1960 y 1965.

La tabla incluye los siguientes datos.

  • y1: Calificaciones sobre libertad en prensa en 1960.
  • y2: Libertad de la oposición política en 1960.
  • y3: Imparcialidad de elecciones en 1960.
  • y4: Eficacia de la legislatura electa en 1960.
  • y5: Calificaciones sobre libertad en prensa en 1965.
  • y6: Libertad de la oposición política en 1965.
  • y7: Imparcialidad de elecciones en 1965.
  • y8: Eficacia de la legislatura electa en 1965.
  • x1: per percapita en 1960.
  • x2: Consumo de energía inanimada en 1960.
  • x3: Porcentaje de la fuerza laboral en la industria en 1960.
df2 <- PoliticalDemocracy

Entender la base de datos

summary(df2)
##        y1               y2               y3               y4        
##  Min.   : 1.250   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.: 2.900   1st Qu.: 0.000   1st Qu.: 3.767   1st Qu.: 1.581  
##  Median : 5.400   Median : 3.333   Median : 6.667   Median : 3.333  
##  Mean   : 5.465   Mean   : 4.256   Mean   : 6.563   Mean   : 4.453  
##  3rd Qu.: 7.500   3rd Qu.: 8.283   3rd Qu.:10.000   3rd Qu.: 6.667  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.000  
##        y5               y6               y7               y8        
##  Min.   : 0.000   Min.   : 0.000   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.: 3.692   1st Qu.: 0.000   1st Qu.: 3.478   1st Qu.: 1.301  
##  Median : 5.000   Median : 2.233   Median : 6.667   Median : 3.333  
##  Mean   : 5.136   Mean   : 2.978   Mean   : 6.196   Mean   : 4.043  
##  3rd Qu.: 7.500   3rd Qu.: 4.207   3rd Qu.:10.000   3rd Qu.: 6.667  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.000  
##        x1              x2              x3       
##  Min.   :3.784   Min.   :1.386   Min.   :1.002  
##  1st Qu.:4.477   1st Qu.:3.663   1st Qu.:2.300  
##  Median :5.075   Median :4.963   Median :3.568  
##  Mean   :5.054   Mean   :4.792   Mean   :3.558  
##  3rd Qu.:5.515   3rd Qu.:5.830   3rd Qu.:4.523  
##  Max.   :6.737   Max.   :7.872   Max.   :6.425
str(df2)
## 'data.frame':    75 obs. of  11 variables:
##  $ y1: num  2.5 1.25 7.5 8.9 10 7.5 7.5 7.5 2.5 10 ...
##  $ y2: num  0 0 8.8 8.8 3.33 ...
##  $ y3: num  3.33 3.33 10 10 10 ...
##  $ y4: num  0 0 9.2 9.2 6.67 ...
##  $ y5: num  1.25 6.25 8.75 8.91 7.5 ...
##  $ y6: num  0 1.1 8.09 8.13 3.33 ...
##  $ y7: num  3.73 6.67 10 10 10 ...
##  $ y8: num  3.333 0.737 8.212 4.615 6.667 ...
##  $ x1: num  4.44 5.38 5.96 6.29 5.86 ...
##  $ x2: num  3.64 5.06 6.26 7.57 6.82 ...
##  $ x3: num  2.56 3.57 5.22 6.27 4.57 ...

Estructurar el modelo

modelo2 <- ' # Regresiones

              # Variables latentes
              democracia1960 =~ y1 + y2 + y3 + y4
              democracia1965 =~ y5 + y6 + y7 + y8
              industria1960 =~ x1 + x2 + x3
          
              # Varianzas y covarianzas
              
              # Intercepto
              
              '

Generar el Análisis Factorial Confirmatorio (CFA)

fit2 <-cfa(modelo2, df2)
summary(fit2) 
## lavaan 0.7-2 ended normally after 47 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        25
## 
##   Number of observations                            75
## 
## Model Test User Model:
##                                                       
##   Test statistic                                72.462
##   Degrees of freedom                                41
##   P-value (Chi-square)                           0.002
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                     Estimate  Std.Err  z-value  P(>|z|)
##   democracia1960 =~                                    
##     y1                 1.000                           
##     y2                 1.354    0.175    7.755    0.000
##     y3                 1.044    0.150    6.961    0.000
##     y4                 1.300    0.138    9.412    0.000
##   democracia1965 =~                                    
##     y5                 1.000                           
##     y6                 1.258    0.164    7.651    0.000
##     y7                 1.282    0.158    8.137    0.000
##     y8                 1.310    0.154    8.529    0.000
##   industria1960 =~                                     
##     x1                 1.000                           
##     x2                 2.182    0.139   15.714    0.000
##     x3                 1.819    0.152   11.956    0.000
## 
## Covariances:
##                     Estimate  Std.Err  z-value  P(>|z|)
##   democracia1960 ~~                                    
##     democracia1965     4.487    0.911    4.924    0.000
##     industria1960      0.660    0.206    3.202    0.001
##   democracia1965 ~~                                    
##     industria1960      0.774    0.208    3.715    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .y1                1.942    0.395    4.910    0.000
##    .y2                6.490    1.185    5.479    0.000
##    .y3                5.340    0.943    5.662    0.000
##    .y4                2.887    0.610    4.731    0.000
##    .y5                2.390    0.447    5.351    0.000
##    .y6                4.343    0.796    5.456    0.000
##    .y7                3.510    0.668    5.252    0.000
##    .y8                2.940    0.586    5.019    0.000
##    .x1                0.082    0.020    4.180    0.000
##    .x2                0.118    0.070    1.689    0.091
##    .x3                0.467    0.090    5.174    0.000
##     democracia1960    4.845    1.088    4.453    0.000
##     democracia1965    4.345    1.051    4.134    0.000
##     industria1960     0.448    0.087    5.169    0.000
lavaanPlot(fit2, coef=TRUE, cov=TRUE) 

Conclusiones

La democracia cuenta con 8 derechos y libertades políticas: 1. Libertad de formar organizaciones y unirse a ellas. 2. Libertad de expresión. 3. Derecho al voto. 4. Derecho de elegir cargos publicos. 5. Derecho de los líderes a competir por votos. 6. Libertad de tener fuentes alternativas de información. 7. Derecho de elecciones libres y justas. 8. Derecho de instituciones para hacer que las políticas gubernamentales dependan de los votos y otras expresiones de preferencia.

Ejercicio 3. Motivación Laboral

df3 <- read_excel( "/Users/adriana/Downloads/Datos_SEM_Eng.xlsx")

Entender la base de datos

summary(df3)
##        ID             GEN             EXPER            EDAD      
##  Min.   :  1.0   Min.   :0.0000   Min.   : 0.00   Min.   :22.00  
##  1st Qu.: 56.5   1st Qu.:0.0000   1st Qu.:15.00   1st Qu.:37.50  
##  Median :112.0   Median :1.0000   Median :20.00   Median :44.00  
##  Mean   :112.0   Mean   :0.5919   Mean   :21.05   Mean   :43.95  
##  3rd Qu.:167.5   3rd Qu.:1.0000   3rd Qu.:27.50   3rd Qu.:51.00  
##  Max.   :223.0   Max.   :1.0000   Max.   :50.00   Max.   :72.00  
##      RPD01           RPD02          RPD03           RPD05           RPD06      
##  Min.   :1.000   Min.   :1.00   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:3.000   1st Qu.:3.00   1st Qu.:3.000   1st Qu.:3.000   1st Qu.:3.000  
##  Median :5.000   Median :4.00   Median :5.000   Median :5.000   Median :5.000  
##  Mean   :4.596   Mean   :4.09   Mean   :4.789   Mean   :4.327   Mean   :4.798  
##  3rd Qu.:6.000   3rd Qu.:6.00   3rd Qu.:7.000   3rd Qu.:6.000   3rd Qu.:7.000  
##  Max.   :7.000   Max.   :7.00   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##      RPD07           RPD08           RPD09           RPD10      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:2.000   1st Qu.:3.000   1st Qu.:3.000   1st Qu.:2.500  
##  Median :4.000   Median :5.000   Median :5.000   Median :5.000  
##  Mean   :3.794   Mean   :4.735   Mean   :4.466   Mean   :4.435  
##  3rd Qu.:5.500   3rd Qu.:7.000   3rd Qu.:6.000   3rd Qu.:6.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##      RRE02           RRE03           RRE04           RRE05           RRE06    
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.0  
##  1st Qu.:5.000   1st Qu.:5.000   1st Qu.:5.000   1st Qu.:5.000   1st Qu.:4.0  
##  Median :6.000   Median :6.000   Median :6.000   Median :6.000   Median :6.0  
##  Mean   :5.691   Mean   :5.534   Mean   :5.668   Mean   :5.623   Mean   :5.3  
##  3rd Qu.:7.000   3rd Qu.:7.000   3rd Qu.:7.000   3rd Qu.:7.000   3rd Qu.:7.0  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.0  
##      RRE07           RRE10           RMA02           RMA03      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:4.000   1st Qu.:5.000   1st Qu.:3.000   1st Qu.:3.000  
##  Median :6.000   Median :6.000   Median :4.000   Median :5.000  
##  Mean   :5.305   Mean   :5.664   Mean   :4.215   Mean   :4.377  
##  3rd Qu.:7.000   3rd Qu.:7.000   3rd Qu.:6.000   3rd Qu.:6.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##      RMA04           RMA05           RMA06           RMA07      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:3.000   1st Qu.:3.000   1st Qu.:5.000   1st Qu.:4.000  
##  Median :5.000   Median :5.000   Median :6.000   Median :5.000  
##  Mean   :4.686   Mean   :4.637   Mean   :5.511   Mean   :4.767  
##  3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:7.000   3rd Qu.:6.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##      RMA08           RMA09           RMA10          RCO02           RCO03      
##  Min.   :1.000   Min.   :1.000   Min.   :1.00   Min.   :1.000   Min.   :1.000  
##  1st Qu.:4.000   1st Qu.:3.000   1st Qu.:3.00   1st Qu.:5.000   1st Qu.:5.000  
##  Median :5.000   Median :5.000   Median :5.00   Median :6.000   Median :6.000  
##  Mean   :4.942   Mean   :4.614   Mean   :4.43   Mean   :5.336   Mean   :5.574  
##  3rd Qu.:6.500   3rd Qu.:6.000   3rd Qu.:6.00   3rd Qu.:7.000   3rd Qu.:7.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.00   Max.   :7.000   Max.   :7.000  
##      RCO04           RCO05           RCO06           RCO07      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:5.000   1st Qu.:5.000   1st Qu.:5.000   1st Qu.:5.000  
##  Median :6.000   Median :6.000   Median :6.000   Median :6.000  
##  Mean   :5.704   Mean   :5.668   Mean   :5.619   Mean   :5.632  
##  3rd Qu.:7.000   3rd Qu.:7.000   3rd Qu.:7.000   3rd Qu.:7.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##       EN01            EN02            EN04            EN05      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:3.000   1st Qu.:4.000   1st Qu.:4.000   1st Qu.:4.000  
##  Median :5.000   Median :6.000   Median :5.000   Median :5.000  
##  Mean   :4.717   Mean   :5.004   Mean   :4.883   Mean   :4.928  
##  3rd Qu.:6.000   3rd Qu.:7.000   3rd Qu.:6.000   3rd Qu.:6.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##       EN06            EN07            EN08           EVI01      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :0.000  
##  1st Qu.:3.000   1st Qu.:3.000   1st Qu.:4.000   1st Qu.:4.000  
##  Median :5.000   Median :5.000   Median :5.000   Median :5.000  
##  Mean   :4.767   Mean   :4.578   Mean   :4.776   Mean   :5.013  
##  3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##      EVI02           EVI03           EDE01           EDE02      
##  Min.   :0.000   Min.   :0.000   Min.   :0.000   Min.   :0.000  
##  1st Qu.:4.000   1st Qu.:4.000   1st Qu.:5.000   1st Qu.:5.000  
##  Median :6.000   Median :6.000   Median :6.000   Median :6.000  
##  Mean   :5.076   Mean   :4.973   Mean   :5.305   Mean   :5.543  
##  3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:7.000   3rd Qu.:7.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##      EDE03           EAB01           EAB02           EAB03      
##  Min.   :0.000   Min.   :0.000   Min.   :0.000   Min.   :0.000  
##  1st Qu.:6.000   1st Qu.:5.000   1st Qu.:5.000   1st Qu.:5.000  
##  Median :7.000   Median :6.000   Median :6.000   Median :6.000  
##  Mean   :6.135   Mean   :5.605   Mean   :5.821   Mean   :5.363  
##  3rd Qu.:7.000   3rd Qu.:7.000   3rd Qu.:7.000   3rd Qu.:7.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000
str(df3)
## tibble [223 × 51] (S3: tbl_df/tbl/data.frame)
##  $ ID   : num [1:223] 1 2 3 4 5 6 7 8 9 10 ...
##  $ GEN  : num [1:223] 1 1 1 1 1 0 0 1 1 1 ...
##  $ EXPER: num [1:223] 22 22 30 17 23 31 26 30 15 15 ...
##  $ EDAD : num [1:223] 45 44 52 41 51 52 53 48 40 38 ...
##  $ RPD01: num [1:223] 5 4 7 5 7 3 5 6 4 2 ...
##  $ RPD02: num [1:223] 1 4 7 5 6 4 5 7 4 3 ...
##  $ RPD03: num [1:223] 3 6 7 1 7 5 4 6 4 2 ...
##  $ RPD05: num [1:223] 2 5 7 1 6 4 4 7 4 3 ...
##  $ RPD06: num [1:223] 3 3 7 3 7 3 5 2 6 7 ...
##  $ RPD07: num [1:223] 1 2 6 5 6 5 6 5 4 1 ...
##  $ RPD08: num [1:223] 3 3 7 3 7 4 6 2 5 3 ...
##  $ RPD09: num [1:223] 2 4 7 2 6 4 7 4 4 2 ...
##  $ RPD10: num [1:223] 4 4 7 2 6 4 7 1 6 2 ...
##  $ RRE02: num [1:223] 6 6 7 6 7 5 7 5 6 7 ...
##  $ RRE03: num [1:223] 6 6 7 6 7 4 7 4 4 7 ...
##  $ RRE04: num [1:223] 6 6 7 6 7 4 7 4 6 7 ...
##  $ RRE05: num [1:223] 6 6 7 6 7 5 7 4 6 7 ...
##  $ RRE06: num [1:223] 6 6 7 6 7 4 7 4 6 7 ...
##  $ RRE07: num [1:223] 6 6 7 6 7 4 7 4 6 7 ...
##  $ RRE10: num [1:223] 6 6 7 6 7 4 7 4 6 7 ...
##  $ RMA02: num [1:223] 4 6 4 3 4 7 5 2 6 7 ...
##  $ RMA03: num [1:223] 5 6 5 4 4 7 5 1 2 7 ...
##  $ RMA04: num [1:223] 5 5 6 4 4 5 5 1 4 7 ...
##  $ RMA05: num [1:223] 5 5 6 4 4 6 5 3 4 7 ...
##  $ RMA06: num [1:223] 6 6 7 6 5 4 5 7 6 7 ...
##  $ RMA07: num [1:223] 4 6 6 5 4 5 7 4 6 7 ...
##  $ RMA08: num [1:223] 5 6 4 4 4 6 6 4 2 7 ...
##  $ RMA09: num [1:223] 3 5 4 3 5 4 5 2 4 7 ...
##  $ RMA10: num [1:223] 7 5 5 4 5 5 6 4 3 7 ...
##  $ RCO02: num [1:223] 7 7 7 5 7 6 7 7 3 7 ...
##  $ RCO03: num [1:223] 7 7 7 5 7 5 7 7 3 7 ...
##  $ RCO04: num [1:223] 7 7 7 6 7 4 7 7 3 7 ...
##  $ RCO05: num [1:223] 7 7 7 6 7 4 7 7 3 7 ...
##  $ RCO06: num [1:223] 7 7 7 6 7 4 7 7 4 7 ...
##  $ RCO07: num [1:223] 5 7 7 6 7 4 7 7 7 7 ...
##  $ EN01 : num [1:223] 6 6 7 4 6 4 7 7 4 7 ...
##  $ EN02 : num [1:223] 7 6 7 4 6 4 7 7 4 7 ...
##  $ EN04 : num [1:223] 6 6 7 4 6 4 7 6 4 7 ...
##  $ EN05 : num [1:223] 5 5 7 5 6 5 7 6 4 7 ...
##  $ EN06 : num [1:223] 5 5 7 5 6 3 7 5 5 7 ...
##  $ EN07 : num [1:223] 5 5 7 2 6 4 7 4 4 7 ...
##  $ EN08 : num [1:223] 6 5 7 5 6 4 7 4 4 7 ...
##  $ EVI01: num [1:223] 6 5 7 5 6 4 7 6 6 0 ...
##  $ EVI02: num [1:223] 6 5 7 6 6 4 6 5 5 1 ...
##  $ EVI03: num [1:223] 6 6 6 7 6 4 6 6 7 0 ...
##  $ EDE01: num [1:223] 6 6 6 5 7 6 7 7 7 1 ...
##  $ EDE02: num [1:223] 7 6 7 6 7 5 7 7 7 5 ...
##  $ EDE03: num [1:223] 7 7 7 7 7 5 7 7 7 6 ...
##  $ EAB01: num [1:223] 7 7 7 6 7 5 7 7 7 0 ...
##  $ EAB02: num [1:223] 7 7 7 6 7 5 7 2 5 1 ...
##  $ EAB03: num [1:223] 6 5 6 5 6 5 7 3 5 0 ...

Parte 1. Experiencias de Recuperación

Este es un análisis factorial confirmatorio de segundo orden: los cuatro dominios (desapego, relajación, control y dominio) son factores de primer orden que a su vez cargan sobre un factor latente de segundo orden, “experiencias de recuperación”.

modelo3 <- ' # Regresiones

              # Variables latentes de primer orden
              desapego =~ RPD01 + RPD02 + RPD03 + RPD05 + RPD06 + RPD07 + RPD08 + RPD09 + RPD10
              relajacion =~ RRE02 + RRE03 + RRE04 + RRE05 + RRE06 + RRE07 + RRE10
              control =~ RCO02 + RCO03 + RCO04 + RCO05 + RCO06 + RCO07
              dominio =~ RMA02 + RMA03 + RMA04 + RMA05 + RMA06 + RMA07 + RMA08 + RMA09 + RMA10
              
              # Variable latente de segundo orden
              recuperacion =~ desapego + relajacion + control + dominio
          
              # Varianzas y covarianzas
              
              # Intercepto
              
              '

Generar el Análisis Factorial Confirmatorio (CFA)

fit3 <-cfa(modelo3, df3)
summary(fit3) 
## lavaan 0.7-2 ended normally after 47 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        66
## 
##   Number of observations                           223
## 
## Model Test User Model:
##                                                       
##   Test statistic                              1221.031
##   Degrees of freedom                               430
##   P-value (Chi-square)                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   desapego =~                                         
##     RPD01             1.000                           
##     RPD02             1.206    0.082   14.780    0.000
##     RPD03             1.143    0.085   13.374    0.000
##     RPD05             1.312    0.086   15.244    0.000
##     RPD06             1.088    0.089   12.266    0.000
##     RPD07             1.229    0.085   14.440    0.000
##     RPD08             1.164    0.087   13.447    0.000
##     RPD09             1.317    0.087   15.153    0.000
##     RPD10             1.346    0.088   15.258    0.000
##   relajacion =~                                       
##     RRE02             1.000                           
##     RRE03             1.120    0.065   17.227    0.000
##     RRE04             1.025    0.058   17.713    0.000
##     RRE05             1.055    0.056   18.758    0.000
##     RRE06             1.245    0.074   16.869    0.000
##     RRE07             1.117    0.071   15.689    0.000
##     RRE10             0.815    0.067   12.120    0.000
##   control =~                                          
##     RCO02             1.000                           
##     RCO03             0.948    0.049   19.182    0.000
##     RCO04             0.796    0.044   18.110    0.000
##     RCO05             0.818    0.043   18.990    0.000
##     RCO06             0.834    0.046   18.216    0.000
##     RCO07             0.835    0.046   18.057    0.000
##   dominio =~                                          
##     RMA02             1.000                           
##     RMA03             1.155    0.096   12.079    0.000
##     RMA04             1.178    0.089   13.274    0.000
##     RMA05             1.141    0.087   13.072    0.000
##     RMA06             0.645    0.075    8.597    0.000
##     RMA07             1.103    0.084   13.061    0.000
##     RMA08             1.109    0.085   12.994    0.000
##     RMA09             1.028    0.084   12.246    0.000
##     RMA10             1.055    0.088   12.044    0.000
##   recuperacion =~                                     
##     desapego          1.000                           
##     relajacion        1.149    0.131    8.787    0.000
##     control           1.341    0.156    8.605    0.000
##     dominio           0.858    0.129    6.666    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .RPD01             1.172    0.120    9.782    0.000
##    .RPD02             0.999    0.108    9.228    0.000
##    .RPD03             1.441    0.148    9.733    0.000
##    .RPD05             0.987    0.110    8.964    0.000
##    .RPD06             1.817    0.182    9.967    0.000
##    .RPD07             1.173    0.125    9.383    0.000
##    .RPD08             1.460    0.150    9.714    0.000
##    .RPD09             1.032    0.114    9.021    0.000
##    .RPD10             1.034    0.115    8.955    0.000
##    .RRE02             0.626    0.068    9.274    0.000
##    .RRE03             0.653    0.073    9.011    0.000
##    .RRE04             0.481    0.055    8.794    0.000
##    .RRE05             0.374    0.046    8.153    0.000
##    .RRE06             0.886    0.097    9.149    0.000
##    .RRE07             0.950    0.100    9.505    0.000
##    .RRE10             1.137    0.113   10.093    0.000
##    .RCO02             0.983    0.105    9.379    0.000
##    .RCO03             0.484    0.058    8.391    0.000
##    .RCO04             0.462    0.052    8.963    0.000
##    .RCO05             0.382    0.045    8.513    0.000
##    .RCO06             0.494    0.055    8.917    0.000
##    .RCO07             0.515    0.057    8.985    0.000
##    .RMA02             1.740    0.175    9.931    0.000
##    .RMA03             1.485    0.155    9.575    0.000
##    .RMA04             0.855    0.097    8.772    0.000
##    .RMA05             0.899    0.100    8.967    0.000
##    .RMA06             1.631    0.159   10.281    0.000
##    .RMA07             0.845    0.094    8.977    0.000
##    .RMA08             0.886    0.098    9.034    0.000
##    .RMA09             1.094    0.115    9.500    0.000
##    .RMA10             1.259    0.131    9.590    0.000
##    .desapego          0.943    0.152    6.207    0.000
##    .relajacion        0.333    0.089    3.757    0.000
##    .control           0.900    0.159    5.666    0.000
##    .dominio           1.260    0.212    5.942    0.000
##     recuperacion      0.978    0.202    4.833    0.000
lavaanPlot(fit3, coef=TRUE, cov=TRUE) 

Parte 2. Energía Recuperada

modelo4 <- ' # Regresiones

              # Variables latentes
              energia =~ EN01 + EN02 + EN04 + EN05 + EN06 + EN07 + EN08
          
              # Varianzas y covarianzas
            
              # Intercepto
              
              '

Generar el Análisis Factorial Confirmatorio (CFA)

fit4 <-cfa(modelo4, df3)
summary(fit4) 
## lavaan 0.7-2 ended normally after 32 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        14
## 
##   Number of observations                           223
## 
## Model Test User Model:
##                                                       
##   Test statistic                                47.222
##   Degrees of freedom                                14
##   P-value (Chi-square)                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   energia =~                                          
##     EN01              1.000                           
##     EN02              1.029    0.044   23.192    0.000
##     EN04              0.999    0.044   22.583    0.000
##     EN05              0.999    0.042   23.649    0.000
##     EN06              0.986    0.042   23.722    0.000
##     EN07              1.049    0.046   22.856    0.000
##     EN08              1.036    0.043   24.173    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .EN01              0.711    0.074    9.651    0.000
##    .EN02              0.444    0.049    9.012    0.000
##    .EN04              0.481    0.052    9.214    0.000
##    .EN05              0.375    0.042    8.830    0.000
##    .EN06              0.359    0.041    8.798    0.000
##    .EN07              0.499    0.055    9.129    0.000
##    .EN08              0.353    0.041    8.580    0.000
##     energia           2.801    0.327    8.565    0.000
lavaanPlot(fit4, coef=TRUE, cov=TRUE) 

Parte 3. Engagment Laboral

modelo5 <- ' # Regresiones

              # Variables latentes
              vigor =~ EVI01 + EVI02 + EVI03
              dedicacion =~ EDE01 + EDE02 + EDE03 
              absorcion =~ EAB01 + EAB02 + EAB03
          
              # Varianzas y covarianzas
            
              # Intercepto
              
              '

Generar el Análisis Factorial Confirmatorio (CFA)

fit5 <-cfa(modelo5, df3)
summary(fit5) 
## lavaan 0.7-2 ended normally after 44 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        21
## 
##   Number of observations                           223
## 
## Model Test User Model:
##                                                       
##   Test statistic                               271.168
##   Degrees of freedom                                24
##   P-value (Chi-square)                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   vigor =~                                            
##     EVI01             1.000                           
##     EVI02             0.986    0.028   35.166    0.000
##     EVI03             0.995    0.049   20.456    0.000
##   dedicacion =~                                       
##     EDE01             1.000                           
##     EDE02             0.914    0.035   26.126    0.000
##     EDE03             0.583    0.037   15.913    0.000
##   absorcion =~                                        
##     EAB01             1.000                           
##     EAB02             0.708    0.051   13.891    0.000
##     EAB03             0.732    0.063   11.644    0.000
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   vigor ~~                                            
##     dedicacion        2.754    0.293    9.404    0.000
##     absorcion         2.125    0.247    8.600    0.000
##   dedicacion ~~                                       
##     absorcion         2.728    0.293    9.311    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .EVI01             0.200    0.040    4.947    0.000
##    .EVI02             0.220    0.041    5.437    0.000
##    .EVI03             1.220    0.125    9.772    0.000
##    .EDE01             0.405    0.066    6.130    0.000
##    .EDE02             0.495    0.066    7.521    0.000
##    .EDE03             0.829    0.084    9.869    0.000
##    .EAB01             0.481    0.100    4.816    0.000
##    .EAB02             1.010    0.109    9.271    0.000
##    .EAB03             1.711    0.175    9.764    0.000
##     vigor             2.836    0.289    9.811    0.000
##     dedicacion        3.448    0.367    9.399    0.000
##     absorcion         2.592    0.301    8.615    0.000
lavaanPlot(fit5, coef=TRUE, cov=TRUE) 

Conclusión

Lo relevante es lo que estos modelos dicen del bienestar organizacional: si los colaboradores no logran desapegarse psicológicamente del trabajo ni recuperar energía en su tiempo libre, es poco probable que sostengan niveles altos de vigor, dedicación y absorción en el trabajo. Esto respalda la idea de que el descanso y la desconexión no son un lujo, sino una condición necesaria para el engagement, y da a las organizaciones un argumento medible para invertir en políticas de desconexión, manejo de carga laboral y respeto al tiempo libre de sus colaboradores.

Ejercicio 4. Modelo de Características del Puesto de Trabajo

Contexto

El artículo de Behson, Eddy y Lorenzet (2000) retoma el Job Characteristics Model (JCM) de Hackman y Oldham (1976), que propone tres etapas: las características núcleo del puesto (CJC) influyen en los estados psicológicos críticos (CPS), y estos, a su vez, influyen en los resultados afectivos y motivacionales. Los autores señalan que la mayoría de estudios previos habían probado solo un modelo de dos etapas, saltándose los CPS y probando el efecto directo de las características del puesto sobre los resultados, sin justificación teórica sólida para omitirlos.

Usando datos meta-analíticos de 13 estudios y modelado de ecuaciones estructurales (LISREL), los autores comparan:

  • Modelo 1: el JCM original de tres etapas, con los CPS como mediadores.
  • Modelo 2: el modelo de dos etapas comúnmente probado en la literatura, sin los CPS.

Comparación de los índices de ajuste

# Tabla de referencia con los resultados reportados en el artículo (Tabla 4)
modelos_ajuste <- data.frame(
  Modelo = c("Modelo 1: JCM original (con CPS)", "Modelo 2: JCM de dos etapas (sin CPS)"),
  Chi2 = c(124.25, 12.09),
  df = c(25, 3),
  Rutas_significativas = c("12/14", "7/15"),
  RMSEA = c(0.14, 0.16),
  GFI = c(0.91, 0.99),
  CFI = c(0.89, 0.98),
  AIC = c(294.48, 80.09),
  CIAC = c(446.29, 227.56)
)
modelos_ajuste
##                                  Modelo   Chi2 df Rutas_significativas RMSEA
## 1      Modelo 1: JCM original (con CPS) 124.25 25                12/14  0.14
## 2 Modelo 2: JCM de dos etapas (sin CPS)  12.09  3                 7/15  0.16
##    GFI  CFI    AIC   CIAC
## 1 0.91 0.89 294.48 446.29
## 2 0.99 0.98  80.09 227.56

Si solo se compararan estos números, el Modelo 2 parece ganar: tiene mejor GFI, CFI, AIC y CIAC. Sin embargo, los autores seleccionaron el Modelo 1 (el original, con los estados psicológicos críticos) como modelo final.

¿Por qué eligieron el Modelo 1 si el Modelo 2 ajustó mejor?

Con base en la discusión del artículo, se pueden identificar varias razones:

  1. El ajuste estadístico no es el único criterio para elegir un modelo. Los autores señalan que la comparación entre modelos requiere algo más que comparar índices de ajuste: la razonabilidad de los valores del modelo y su correspondencia con la teoría son igual o más importantes.

  2. El Modelo 2 viola relaciones teóricas bien establecidas. Ocho de las nueve rutas entre variedad de habilidades, importancia de la tarea e identidad de la tarea hacia las tres variables de resultado resultaron no significativas en el Modelo 2, mientras que en el Modelo 1 esas mismas variables sí muestran relaciones indirectas significativas, mediadas por el significado experimentado del trabajo (una de las CPS). En otras palabras, el Modelo 2 “esconde” relaciones reales que solo aparecen cuando se incluye el estado psicológico mediador.

  3. El Modelo 1 explica más varianza y tiene más rutas significativas en términos absolutos. El Modelo 1 explica más varianza en satisfacción, satisfacción de crecimiento y motivación, y tiene 12 de 14 rutas significativas frente a solo 7 de 15 en el Modelo 2.

  4. Los CPS son, según la teoría original de Hackman y Oldham, el “núcleo causal” del modelo. El modelo fue construido identificando primero los estados psicológicos importantes para la motivación y luego buscando qué características del puesto los provocan; omitirlos rompe la lógica causal del modelo, aunque estadísticamente “ajuste mejor”.

  5. AIC y CIAC deben interpretarse con cautela en modelos no anidados. Los autores usan estos índices porque los dos modelos no están anidados y el estadístico Chi-cuadrado no permite compararlos directamente, pero dejan claro que estos índices son un criterio más entre varios, no el criterio decisivo.

LS0tCnRpdGxlOiAiQWN0aXZpZGFkIDM6IEFwbGljYWNpw7NuIGRlIG1vZGVsb3MgZGUgZWN1YWNpb25lcyBlc3RydWN0dXJhbGVzIgphdXRob3I6ICJBZHJpYW5hIE1hZHJpZ2FsIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVHJ1ZQogICAgY29kZV9kb3dubG9hZDogVFJVRQpkYXRlOiAiMjAyNi0wOC0yNSIKLS0tCgohW10oaHR0cHM6Ly90ZW5vci5jb20vc2VhcmNoL3NjaG9vbC1vdmVyLWdpZnMpCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj4gVGVvcsOtYTwvc3Bhbj4KCkxvcyAqTW9kZWxvcyBkZSBFY3VhY2lvbmVzIEVzdHJ1Y3R1cmFsZXMqIHNvbiB1bmEgdMOpY25pY2EgZGUgYW7DoWxpc2lzIGRlIGVzdGFkw610aWNhIG11bHRpdmFyaWFkYSwgcXVlIHBlcm1pdGUgYW5hbGl6YXIgcGF0cm9uZXMgY29tcGxlam9zIGRlIHJlbGFjaW9uZXMgZW50cmUgdmFyaWFibGVzLCByZWFsaXphciBjb21wYXJhY2lvbmVzIGVudHJlIHVudHJhZ3J1cG9zbSB5IHZhbGlkYXIgbW9kZWxvcyB0ZcOzcmljb3MgeSBlbXDDrXJpY29zLgoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+IEVqZXJjaWNpbyAxLiBIb2x6aW5nZXIgeSBTd2luZWZvcmQ8L3NwYW4+CgpIb2xkemluZ2VyIHkgU3dpbmVmb3JkIHJlYWxpemFyb24gZXhhbWVuZXMgZGUgaGFiaWxpZGFkIG1lbnRhbCBhIGFkb2xlY2VudGVzIGRlIDcgeSA4IGdyYWRvIGRlIGRvcyBlc2N1ZWxhcyAoUGFzdGVpciB5IEdyYW5kLVdoaXRlKS4KCkxhIGJhc2UgZGUgZGF0b3MgZXN0w6EgaW5jbHVpZGEgY29tbyBwYXF1ZXRlIGVuIFIsIGUgaW5jbHV5ZSBsYXMgc2lndWVpbnRlcyBjb2x1bW5hczoKCiogc2V4OiBHw6luZXJvICgxPW1hbGUsIDI9ZmVtYWxlKQoqIHgxOiBQZXJjZXBjacOzbiBWaXN1YWwKKiB4MjogSnVlZ29zIGNvbiBjdWJvcwoqIHgzOiBKdWVnb3MgY29uIHBhc3RpbGxhcy9lc3BhY2lhbAoqIHg0OiBDb21wcmVuc2nDs24gZGUgcMOhcnJhZm9zCiogeDU6IENvbXBsZXRhciBvcmFjaW9uZXMKKiB4NjogU2lnbmlmaWNhZG8gZGUgcGFsYWJyYXMKKiB4NzogU3VtYXMgYWNlbGVyYWRhcwoqIHg4OiBDb250byBhY2VsZXJhZG8gZGUgcHVudG9zCiogeDk6IERpc2NyaW1pbmFjacOzbiBhY2VsZXJhZGEgZGUgbWF5w7pjdWxhcyByZWN0YXMgeSBjdXJ2YXMKClNlIGJ1c2NhIGlkZW50aWRpY2FyIGxhcyByZWxhY2lvbmVzIGVudHJlIGxhcyBoYWJpbGlkYWRlcyB2aXN1YWwgKHgxLCB4MiwgeDMpLCB0ZXh0dWFsICh4NCwgeDUseDYpIHkgdmVsb2NpZGFkICh4Nyx4OCx4OSkgZGUgbG9zIGFkb2xlc2NlbnRlcy4KCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI2luc3RhbGwucGFja2FnZXMoImxhdmFhbiIpCmxpYnJhcnkobGF2YWFuKQojaW5zdGFsbC5wYWNrYWdlcygibGF2YWFuUGxvdCIpCmxpYnJhcnkobGF2YWFuUGxvdCkKI2luc3RhbGwucGFja2FnZXMoInJlYWR4bCIpCmxpYnJhcnkocmVhZHhsKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj4gSW1wb3J0YXIgbGEgYmFzZSBkZSBkYXRvczwvc3Bhbj4KYGBge3J9CmRmNiA8LSBIb2x6aW5nZXJTd2luZWZvcmQxOTM5CmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBFbnRlbmRlciBsYSBiYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0Kc3VtbWFyeShkZjYpCnN0cihkZjYpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBUaXBvcyBkZSBmw7NybWlsYXM8L3NwYW4+CjEuIFJlZ3Jlc2nDs24gKH4pIFZhcmlhYmxlIHF1ZSBkZXBlbmRlIGRlIG90cmFzLiAgCjIuIFZhcmlhYmxlcyBsYXRlbnRlcyAoPX4pIE5vIHNlIG9ic2VydmEsIHNlIGluZmllcmEgYSB0cmF2ZXogZGUgb3RyYXMuICAKMy4gVmFyaWFuemFzIHkgY292YXJpYW56YXMgKH5+KSBSZWxhY2lvbmVzIGVudHJlIHZhcmlhYmxlcyBsYXRlbmVzIHkgbGFzIG9ic2VydmFkYXMgKFZhcmlhbnphIGVudHJlIHPDrSBtaXNtYSwgQ292YXJpYW56YSBzaSBlcyBlbnRyZSBvdHJhcykuICAKNC4gSW50ZXJjZXB0byAofjEpIFZhbG9yIGVzcGVyYWRvIGN1YW5kbyBsYXMgZGVtw6FzIHZhcmlhYmxlcyBzb24gY2Vyby4gIAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBFc3RydWN0dXJhciBlbCBtb2RlbG88L3NwYW4+CmBgYHtyfQptb2RlbG8xIDwtICcgIyBSZWdyZXNpb25lcwoKICAgICAgICAgICAgICAjIFZhcmlhYmxlcyBsYXRlbnRlcwogICAgICAgICAgICAgIHZpc3VhbCA9fiB4MSArIHgyICsgeDMKICAgICAgICAgICAgICB0ZXh0dWFsID1+IHg0ICsgeDUgKyB4NgogICAgICAgICAgICAgIHZlbG9jaWRhZCA9fiB4NyArIHg4ICsgeDkKICAgICAgICAgICAgICAKICAgICAgICAgICAgICAjIFZhcmlhbnphcyB5IGNvdmFyaWFuemFzCiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIyBJbnRlcmNlcHRvCiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgJwpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj4gR2VuZXJhciBlbCBBbsOhbGlzaXMgRmFjdG9yaWFsIENvbmZpcm1hdG9yaW8gKENGQSk8L3NwYW4+CmBgYHtyfQpmaXQxIDwtIHNlbShtb2RlbG8xLCBkZjYpICMgcG9uZW1vcyBlbCBtb2RlbG8geSBsb3MgZGF0b3MKc3VtbWFyeShmaXQxKSAKbGF2YWFuUGxvdChmaXQxLCBjb2VmPVRSVUUsIGNvdj1UUlVFKSAjIGxlIHBvbmVtb3MgcXVlIG5vcyBtdWVzdHJvIGNvZWZpY2llbnRlcyB5IGNvdmFyaWFuemFzCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBHZW5lcmFyIGVsIG1vZGVsbyBkZSBFY3VhY2lvbmVzIEVzdHJ1Y3R1cmFsZXMgKFNFTSk8L3NwYW4+CmBgYHtyfQpmaXQxMSA8LSBjZmEobW9kZWxvMSwgZGY2KSAjIHBvbmVtb3MgZWwgbW9kZWxvIHkgbG9zIGRhdG9zCnN1bW1hcnkoZml0MTEpIApsYXZhYW5QbG90KGZpdDExLCBjb2VmPVRSVUUsIGNvdj1UUlVFKQpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBFamVyY2ljaW8gMi4gRGVtb2NyYWNpYSBQb2zDrXRpY2EgZSBJbmR1c3RyaWFsaXphY2nDs248L3NwYW4+CgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBDb250ZXh0bzwvc3Bhbj4KTGEgYmFzZSBkZSBkYXRvcyBjb250aWVuZSBkaXN0aW50YXMgbWVkaWNpb25lcyBzb2JyZSBsYSBkZW1vY3JhY2lhIHBvbMOtdGljYSBlIGluZHVzdHJpYWxpemFjacOzbiBlbiBwYcOtc2VzIGRlIGRlc2Fycm9sbG8gZHVyYW50ZSAxOTYwIHkgMTk2NS4KCkxhIHRhYmxhIGluY2x1eWUgbG9zIHNpZ3VpZW50ZXMgZGF0b3MuIAoKKiB5MTogQ2FsaWZpY2FjaW9uZXMgc29icmUgbGliZXJ0YWQgZW4gcHJlbnNhIGVuIDE5NjAuIAoqIHkyOiBMaWJlcnRhZCBkZSBsYSBvcG9zaWNpw7NuIHBvbMOtdGljYSBlbiAxOTYwLiAKKiB5MzogSW1wYXJjaWFsaWRhZCBkZSBlbGVjY2lvbmVzIGVuIDE5NjAuIAoqIHk0OiBFZmljYWNpYSBkZSBsYSBsZWdpc2xhdHVyYSBlbGVjdGEgZW4gMTk2MC4gCiogeTU6IENhbGlmaWNhY2lvbmVzIHNvYnJlIGxpYmVydGFkIGVuIHByZW5zYSBlbiAxOTY1LiAKKiB5NjogTGliZXJ0YWQgZGUgbGEgb3Bvc2ljacOzbiBwb2zDrXRpY2EgZW4gMTk2NS4gCiogeTc6IEltcGFyY2lhbGlkYWQgZGUgZWxlY2Npb25lcyBlbiAxOTY1LiAKKiB5ODogRWZpY2FjaWEgZGUgbGEgbGVnaXNsYXR1cmEgZWxlY3RhIGVuIDE5NjUuIAoqIHgxOiBwZXIgcGVyY2FwaXRhIGVuIDE5NjAuCiogeDI6IENvbnN1bW8gZGUgZW5lcmfDrWEgaW5hbmltYWRhIGVuIDE5NjAuIAoqIHgzOiBQb3JjZW50YWplIGRlIGxhIGZ1ZXJ6YSBsYWJvcmFsIGVuIGxhIGluZHVzdHJpYSBlbiAxOTYwLiAKCmBgYHtyfQpkZjIgPC0gUG9saXRpY2FsRGVtb2NyYWN5CmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBFbnRlbmRlciBsYSBiYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0Kc3VtbWFyeShkZjIpCnN0cihkZjIpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBFc3RydWN0dXJhciBlbCBtb2RlbG88L3NwYW4+CmBgYHtyfQptb2RlbG8yIDwtICcgIyBSZWdyZXNpb25lcwoKICAgICAgICAgICAgICAjIFZhcmlhYmxlcyBsYXRlbnRlcwogICAgICAgICAgICAgIGRlbW9jcmFjaWExOTYwID1+IHkxICsgeTIgKyB5MyArIHk0CiAgICAgICAgICAgICAgZGVtb2NyYWNpYTE5NjUgPX4geTUgKyB5NiArIHk3ICsgeTgKICAgICAgICAgICAgICBpbmR1c3RyaWExOTYwID1+IHgxICsgeDIgKyB4MwogICAgICAgICAgCiAgICAgICAgICAgICAgIyBWYXJpYW56YXMgeSBjb3ZhcmlhbnphcwogICAgICAgICAgICAgIAogICAgICAgICAgICAgICMgSW50ZXJjZXB0bwogICAgICAgICAgICAgIAogICAgICAgICAgICAgICcKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+IEdlbmVyYXIgZWwgQW7DoWxpc2lzIEZhY3RvcmlhbCBDb25maXJtYXRvcmlvIChDRkEpPC9zcGFuPgpgYGB7cn0KZml0MiA8LWNmYShtb2RlbG8yLCBkZjIpCnN1bW1hcnkoZml0MikgCmxhdmFhblBsb3QoZml0MiwgY29lZj1UUlVFLCBjb3Y9VFJVRSkgCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBDb25jbHVzaW9uZXM8L3NwYW4+CkxhIGRlbW9jcmFjaWEgY3VlbnRhIGNvbiA4IGRlcmVjaG9zIHkgbGliZXJ0YWRlcyBwb2zDrXRpY2FzOiAKMS4gTGliZXJ0YWQgZGUgZm9ybWFyIG9yZ2FuaXphY2lvbmVzIHkgdW5pcnNlIGEgZWxsYXMuIAoyLiBMaWJlcnRhZCBkZSBleHByZXNpw7NuLiAKMy4gRGVyZWNobyBhbCB2b3RvLiAKNC4gRGVyZWNobyBkZSBlbGVnaXIgY2FyZ29zIHB1YmxpY29zLiAKNS4gRGVyZWNobyBkZSBsb3MgbMOtZGVyZXMgYSBjb21wZXRpciBwb3Igdm90b3MuIAo2LiBMaWJlcnRhZCBkZSB0ZW5lciBmdWVudGVzIGFsdGVybmF0aXZhcyBkZSBpbmZvcm1hY2nDs24uIAo3LiBEZXJlY2hvIGRlIGVsZWNjaW9uZXMgbGlicmVzIHkganVzdGFzLiAKOC4gRGVyZWNobyBkZSBpbnN0aXR1Y2lvbmVzIHBhcmEgaGFjZXIgcXVlIGxhcyBwb2zDrXRpY2FzIGd1YmVybmFtZW50YWxlcyBkZXBlbmRhbiBkZSBsb3Mgdm90b3MgeSBvdHJhcyBleHByZXNpb25lcyBkZSBwcmVmZXJlbmNpYS4gCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj4gRWplcmNpY2lvIDMuIE1vdGl2YWNpw7NuIExhYm9yYWw8L3NwYW4+CgpgYGB7cn0KZGYzIDwtIHJlYWRfZXhjZWwoICIvVXNlcnMvYWRyaWFuYS9Eb3dubG9hZHMvRGF0b3NfU0VNX0VuZy54bHN4IikKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+IEVudGVuZGVyIGxhIGJhc2UgZGUgZGF0b3M8L3NwYW4+CmBgYHtyfQpzdW1tYXJ5KGRmMykKc3RyKGRmMykKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+IFBhcnRlIDEuIEV4cGVyaWVuY2lhcyBkZSBSZWN1cGVyYWNpw7NuPC9zcGFuPgoKRXN0ZSBlcyB1biBhbsOhbGlzaXMgZmFjdG9yaWFsIGNvbmZpcm1hdG9yaW8gZGUgKipzZWd1bmRvIG9yZGVuKio6IGxvcyBjdWF0cm8gZG9taW5pb3MgKGRlc2FwZWdvLCByZWxhamFjacOzbiwgY29udHJvbCB5IGRvbWluaW8pIHNvbiBmYWN0b3JlcyBkZSBwcmltZXIgb3JkZW4gcXVlIGEgc3UgdmV6IGNhcmdhbiBzb2JyZSB1biBmYWN0b3IgbGF0ZW50ZSBkZSBzZWd1bmRvIG9yZGVuLCAiZXhwZXJpZW5jaWFzIGRlIHJlY3VwZXJhY2nDs24iLgoKYGBge3J9Cm1vZGVsbzMgPC0gJyAjIFJlZ3Jlc2lvbmVzCgogICAgICAgICAgICAgICMgVmFyaWFibGVzIGxhdGVudGVzIGRlIHByaW1lciBvcmRlbgogICAgICAgICAgICAgIGRlc2FwZWdvID1+IFJQRDAxICsgUlBEMDIgKyBSUEQwMyArIFJQRDA1ICsgUlBEMDYgKyBSUEQwNyArIFJQRDA4ICsgUlBEMDkgKyBSUEQxMAogICAgICAgICAgICAgIHJlbGFqYWNpb24gPX4gUlJFMDIgKyBSUkUwMyArIFJSRTA0ICsgUlJFMDUgKyBSUkUwNiArIFJSRTA3ICsgUlJFMTAKICAgICAgICAgICAgICBjb250cm9sID1+IFJDTzAyICsgUkNPMDMgKyBSQ08wNCArIFJDTzA1ICsgUkNPMDYgKyBSQ08wNwogICAgICAgICAgICAgIGRvbWluaW8gPX4gUk1BMDIgKyBSTUEwMyArIFJNQTA0ICsgUk1BMDUgKyBSTUEwNiArIFJNQTA3ICsgUk1BMDggKyBSTUEwOSArIFJNQTEwCiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIyBWYXJpYWJsZSBsYXRlbnRlIGRlIHNlZ3VuZG8gb3JkZW4KICAgICAgICAgICAgICByZWN1cGVyYWNpb24gPX4gZGVzYXBlZ28gKyByZWxhamFjaW9uICsgY29udHJvbCArIGRvbWluaW8KICAgICAgICAgIAogICAgICAgICAgICAgICMgVmFyaWFuemFzIHkgY292YXJpYW56YXMKICAgICAgICAgICAgICAKICAgICAgICAgICAgICAjIEludGVyY2VwdG8KICAgICAgICAgICAgICAKICAgICAgICAgICAgICAnCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBHZW5lcmFyIGVsIEFuw6FsaXNpcyBGYWN0b3JpYWwgQ29uZmlybWF0b3JpbyAoQ0ZBKTwvc3Bhbj4KYGBge3J9CmZpdDMgPC1jZmEobW9kZWxvMywgZGYzKQpzdW1tYXJ5KGZpdDMpIApsYXZhYW5QbG90KGZpdDMsIGNvZWY9VFJVRSwgY292PVRSVUUpIApgYGAKCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+IFBhcnRlIDIuIEVuZXJnw61hIFJlY3VwZXJhZGE8L3NwYW4+CmBgYHtyfQptb2RlbG80IDwtICcgIyBSZWdyZXNpb25lcwoKICAgICAgICAgICAgICAjIFZhcmlhYmxlcyBsYXRlbnRlcwogICAgICAgICAgICAgIGVuZXJnaWEgPX4gRU4wMSArIEVOMDIgKyBFTjA0ICsgRU4wNSArIEVOMDYgKyBFTjA3ICsgRU4wOAogICAgICAgICAgCiAgICAgICAgICAgICAgIyBWYXJpYW56YXMgeSBjb3ZhcmlhbnphcwogICAgICAgICAgICAKICAgICAgICAgICAgICAjIEludGVyY2VwdG8KICAgICAgICAgICAgICAKICAgICAgICAgICAgICAnCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPiBHZW5lcmFyIGVsIEFuw6FsaXNpcyBGYWN0b3JpYWwgQ29uZmlybWF0b3JpbyAoQ0ZBKTwvc3Bhbj4KYGBge3J9CmZpdDQgPC1jZmEobW9kZWxvNCwgZGYzKQpzdW1tYXJ5KGZpdDQpIApsYXZhYW5QbG90KGZpdDQsIGNvZWY9VFJVRSwgY292PVRSVUUpIApgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj4gUGFydGUgMy4gRW5nYWdtZW50IExhYm9yYWw8L3NwYW4+CmBgYHtyfQptb2RlbG81IDwtICcgIyBSZWdyZXNpb25lcwoKICAgICAgICAgICAgICAjIFZhcmlhYmxlcyBsYXRlbnRlcwogICAgICAgICAgICAgIHZpZ29yID1+IEVWSTAxICsgRVZJMDIgKyBFVkkwMwogICAgICAgICAgICAgIGRlZGljYWNpb24gPX4gRURFMDEgKyBFREUwMiArIEVERTAzIAogICAgICAgICAgICAgIGFic29yY2lvbiA9fiBFQUIwMSArIEVBQjAyICsgRUFCMDMKICAgICAgICAgIAogICAgICAgICAgICAgICMgVmFyaWFuemFzIHkgY292YXJpYW56YXMKICAgICAgICAgICAgCiAgICAgICAgICAgICAgIyBJbnRlcmNlcHRvCiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgJwpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj4gR2VuZXJhciBlbCBBbsOhbGlzaXMgRmFjdG9yaWFsIENvbmZpcm1hdG9yaW8gKENGQSk8L3NwYW4+CmBgYHtyfQpmaXQ1IDwtY2ZhKG1vZGVsbzUsIGRmMykKc3VtbWFyeShmaXQ1KSAKbGF2YWFuUGxvdChmaXQ1LCBjb2VmPVRSVUUsIGNvdj1UUlVFKSAKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+IENvbmNsdXNpw7NuPC9zcGFuPgoKTG8gcmVsZXZhbnRlIGVzIGxvIHF1ZSBlc3RvcyBtb2RlbG9zIGRpY2VuIGRlbCBiaWVuZXN0YXIgb3JnYW5pemFjaW9uYWw6IHNpIGxvcyBjb2xhYm9yYWRvcmVzIG5vIGxvZ3JhbiBkZXNhcGVnYXJzZSBwc2ljb2zDs2dpY2FtZW50ZSBkZWwgdHJhYmFqbyBuaSByZWN1cGVyYXIgZW5lcmfDrWEgZW4gc3UgdGllbXBvIGxpYnJlLCBlcyBwb2NvIHByb2JhYmxlIHF1ZSBzb3N0ZW5nYW4gbml2ZWxlcyBhbHRvcyBkZSB2aWdvciwgZGVkaWNhY2nDs24geSBhYnNvcmNpw7NuIGVuIGVsIHRyYWJham8uIEVzdG8gcmVzcGFsZGEgbGEgaWRlYSBkZSBxdWUgZWwgZGVzY2Fuc28geSBsYSBkZXNjb25leGnDs24gbm8gc29uIHVuIGx1am8sIHNpbm8gdW5hIGNvbmRpY2nDs24gbmVjZXNhcmlhIHBhcmEgZWwgZW5nYWdlbWVudCwgeSBkYSBhIGxhcyBvcmdhbml6YWNpb25lcyB1biBhcmd1bWVudG8gbWVkaWJsZSBwYXJhIGludmVydGlyIGVuIHBvbMOtdGljYXMgZGUgZGVzY29uZXhpw7NuLCBtYW5lam8gZGUgY2FyZ2EgbGFib3JhbCB5IHJlc3BldG8gYWwgdGllbXBvIGxpYnJlIGRlIHN1cyBjb2xhYm9yYWRvcmVzLgoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+IEVqZXJjaWNpbyA0LiBNb2RlbG8gZGUgQ2FyYWN0ZXLDrXN0aWNhcyBkZWwgUHVlc3RvIGRlIFRyYWJham88L3NwYW4+CgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBDb250ZXh0bzwvc3Bhbj4KCkVsIGFydMOtY3VsbyBkZSBCZWhzb24sIEVkZHkgeSBMb3JlbnpldCAoMjAwMCkgcmV0b21hIGVsICpKb2IgQ2hhcmFjdGVyaXN0aWNzIE1vZGVsKiAoSkNNKSBkZSBIYWNrbWFuIHkgT2xkaGFtICgxOTc2KSwgcXVlIHByb3BvbmUgdHJlcyBldGFwYXM6IGxhcyBjYXJhY3RlcsOtc3RpY2FzIG7DumNsZW8gZGVsIHB1ZXN0byAoQ0pDKSBpbmZsdXllbiBlbiBsb3MgZXN0YWRvcyBwc2ljb2zDs2dpY29zIGNyw610aWNvcyAoQ1BTKSwgeSBlc3RvcywgYSBzdSB2ZXosIGluZmx1eWVuIGVuIGxvcyByZXN1bHRhZG9zIGFmZWN0aXZvcyB5IG1vdGl2YWNpb25hbGVzLiBMb3MgYXV0b3JlcyBzZcOxYWxhbiBxdWUgbGEgbWF5b3LDrWEgZGUgZXN0dWRpb3MgcHJldmlvcyBoYWLDrWFuIHByb2JhZG8gc29sbyB1biBtb2RlbG8gZGUgZG9zIGV0YXBhcywgc2FsdMOhbmRvc2UgbG9zIENQUyB5IHByb2JhbmRvIGVsIGVmZWN0byBkaXJlY3RvIGRlIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlbCBwdWVzdG8gc29icmUgbG9zIHJlc3VsdGFkb3MsIHNpbiBqdXN0aWZpY2FjacOzbiB0ZcOzcmljYSBzw7NsaWRhIHBhcmEgb21pdGlybG9zLgoKVXNhbmRvIGRhdG9zIG1ldGEtYW5hbMOtdGljb3MgZGUgMTMgZXN0dWRpb3MgeSBtb2RlbGFkbyBkZSBlY3VhY2lvbmVzIGVzdHJ1Y3R1cmFsZXMgKExJU1JFTCksIGxvcyBhdXRvcmVzIGNvbXBhcmFuOgoKKiAqKk1vZGVsbyAxKio6IGVsIEpDTSBvcmlnaW5hbCBkZSB0cmVzIGV0YXBhcywgY29uIGxvcyBDUFMgY29tbyBtZWRpYWRvcmVzLgoqICoqTW9kZWxvIDIqKjogZWwgbW9kZWxvIGRlIGRvcyBldGFwYXMgY29tw7pubWVudGUgcHJvYmFkbyBlbiBsYSBsaXRlcmF0dXJhLCBzaW4gbG9zIENQUy4KCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZSI+IENvbXBhcmFjacOzbiBkZSBsb3Mgw61uZGljZXMgZGUgYWp1c3RlPC9zcGFuPgoKYGBge3J9CiMgVGFibGEgZGUgcmVmZXJlbmNpYSBjb24gbG9zIHJlc3VsdGFkb3MgcmVwb3J0YWRvcyBlbiBlbCBhcnTDrWN1bG8gKFRhYmxhIDQpCm1vZGVsb3NfYWp1c3RlIDwtIGRhdGEuZnJhbWUoCiAgTW9kZWxvID0gYygiTW9kZWxvIDE6IEpDTSBvcmlnaW5hbCAoY29uIENQUykiLCAiTW9kZWxvIDI6IEpDTSBkZSBkb3MgZXRhcGFzIChzaW4gQ1BTKSIpLAogIENoaTIgPSBjKDEyNC4yNSwgMTIuMDkpLAogIGRmID0gYygyNSwgMyksCiAgUnV0YXNfc2lnbmlmaWNhdGl2YXMgPSBjKCIxMi8xNCIsICI3LzE1IiksCiAgUk1TRUEgPSBjKDAuMTQsIDAuMTYpLAogIEdGSSA9IGMoMC45MSwgMC45OSksCiAgQ0ZJID0gYygwLjg5LCAwLjk4KSwKICBBSUMgPSBjKDI5NC40OCwgODAuMDkpLAogIENJQUMgPSBjKDQ0Ni4yOSwgMjI3LjU2KQopCm1vZGVsb3NfYWp1c3RlCmBgYAoKU2kgc29sbyBzZSBjb21wYXJhcmFuIGVzdG9zIG7Dum1lcm9zLCBlbCBNb2RlbG8gMiBwYXJlY2UgZ2FuYXI6IHRpZW5lIG1lam9yIEdGSSwgQ0ZJLCBBSUMgeSBDSUFDLiBTaW4gZW1iYXJnbywgbG9zIGF1dG9yZXMgc2VsZWNjaW9uYXJvbiBlbCAqKk1vZGVsbyAxKiogKGVsIG9yaWdpbmFsLCBjb24gbG9zIGVzdGFkb3MgcHNpY29sw7NnaWNvcyBjcsOtdGljb3MpIGNvbW8gbW9kZWxvIGZpbmFsLgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gwr9Qb3IgcXXDqSBlbGlnaWVyb24gZWwgTW9kZWxvIDEgc2kgZWwgTW9kZWxvIDIgYWp1c3TDsyBtZWpvcj88L3NwYW4+CgpDb24gYmFzZSBlbiBsYSBkaXNjdXNpw7NuIGRlbCBhcnTDrWN1bG8sIHNlIHB1ZWRlbiBpZGVudGlmaWNhciB2YXJpYXMgcmF6b25lczoKCjEuICoqRWwgYWp1c3RlIGVzdGFkw61zdGljbyBubyBlcyBlbCDDum5pY28gY3JpdGVyaW8gcGFyYSBlbGVnaXIgdW4gbW9kZWxvLioqIExvcyBhdXRvcmVzIHNlw7FhbGFuIHF1ZSBsYSBjb21wYXJhY2nDs24gZW50cmUgbW9kZWxvcyByZXF1aWVyZSBhbGdvIG3DoXMgcXVlIGNvbXBhcmFyIMOtbmRpY2VzIGRlIGFqdXN0ZTogbGEgcmF6b25hYmlsaWRhZCBkZSBsb3MgdmFsb3JlcyBkZWwgbW9kZWxvIHkgc3UgY29ycmVzcG9uZGVuY2lhIGNvbiBsYSB0ZW9yw61hIHNvbiBpZ3VhbCBvIG3DoXMgaW1wb3J0YW50ZXMuCgoyLiAqKkVsIE1vZGVsbyAyIHZpb2xhIHJlbGFjaW9uZXMgdGXDs3JpY2FzIGJpZW4gZXN0YWJsZWNpZGFzLioqIE9jaG8gZGUgbGFzIG51ZXZlIHJ1dGFzIGVudHJlIHZhcmllZGFkIGRlIGhhYmlsaWRhZGVzLCBpbXBvcnRhbmNpYSBkZSBsYSB0YXJlYSBlIGlkZW50aWRhZCBkZSBsYSB0YXJlYSBoYWNpYSBsYXMgdHJlcyB2YXJpYWJsZXMgZGUgcmVzdWx0YWRvIHJlc3VsdGFyb24gbm8gc2lnbmlmaWNhdGl2YXMgZW4gZWwgTW9kZWxvIDIsIG1pZW50cmFzIHF1ZSBlbiBlbCBNb2RlbG8gMSBlc2FzIG1pc21hcyB2YXJpYWJsZXMgc8OtIG11ZXN0cmFuIHJlbGFjaW9uZXMgaW5kaXJlY3RhcyBzaWduaWZpY2F0aXZhcywgbWVkaWFkYXMgcG9yIGVsIHNpZ25pZmljYWRvIGV4cGVyaW1lbnRhZG8gZGVsIHRyYWJham8gKHVuYSBkZSBsYXMgQ1BTKS4gRW4gb3RyYXMgcGFsYWJyYXMsIGVsIE1vZGVsbyAyICJlc2NvbmRlIiByZWxhY2lvbmVzIHJlYWxlcyBxdWUgc29sbyBhcGFyZWNlbiBjdWFuZG8gc2UgaW5jbHV5ZSBlbCBlc3RhZG8gcHNpY29sw7NnaWNvIG1lZGlhZG9yLgoKMy4gKipFbCBNb2RlbG8gMSBleHBsaWNhIG3DoXMgdmFyaWFuemEgeSB0aWVuZSBtw6FzIHJ1dGFzIHNpZ25pZmljYXRpdmFzIGVuIHTDqXJtaW5vcyBhYnNvbHV0b3MuKiogRWwgTW9kZWxvIDEgZXhwbGljYSBtw6FzIHZhcmlhbnphIGVuIHNhdGlzZmFjY2nDs24sIHNhdGlzZmFjY2nDs24gZGUgY3JlY2ltaWVudG8geSBtb3RpdmFjacOzbiwgeSB0aWVuZSAxMiBkZSAxNCBydXRhcyBzaWduaWZpY2F0aXZhcyBmcmVudGUgYSBzb2xvIDcgZGUgMTUgZW4gZWwgTW9kZWxvIDIuCgo0LiAqKkxvcyBDUFMgc29uLCBzZWfDum4gbGEgdGVvcsOtYSBvcmlnaW5hbCBkZSBIYWNrbWFuIHkgT2xkaGFtLCBlbCAibsO6Y2xlbyBjYXVzYWwiIGRlbCBtb2RlbG8uKiogRWwgbW9kZWxvIGZ1ZSBjb25zdHJ1aWRvIGlkZW50aWZpY2FuZG8gcHJpbWVybyBsb3MgZXN0YWRvcyBwc2ljb2zDs2dpY29zIGltcG9ydGFudGVzIHBhcmEgbGEgbW90aXZhY2nDs24geSBsdWVnbyBidXNjYW5kbyBxdcOpIGNhcmFjdGVyw61zdGljYXMgZGVsIHB1ZXN0byBsb3MgcHJvdm9jYW47IG9taXRpcmxvcyByb21wZSBsYSBsw7NnaWNhIGNhdXNhbCBkZWwgbW9kZWxvLCBhdW5xdWUgZXN0YWTDrXN0aWNhbWVudGUgImFqdXN0ZSBtZWpvciIuCgo1LiAqKkFJQyB5IENJQUMgZGViZW4gaW50ZXJwcmV0YXJzZSBjb24gY2F1dGVsYSBlbiBtb2RlbG9zIG5vIGFuaWRhZG9zLioqIExvcyBhdXRvcmVzIHVzYW4gZXN0b3Mgw61uZGljZXMgcG9ycXVlIGxvcyBkb3MgbW9kZWxvcyBubyBlc3TDoW4gYW5pZGFkb3MgeSBlbCBlc3RhZMOtc3RpY28gQ2hpLWN1YWRyYWRvIG5vIHBlcm1pdGUgY29tcGFyYXJsb3MgZGlyZWN0YW1lbnRlLCBwZXJvIGRlamFuIGNsYXJvIHF1ZSBlc3RvcyDDrW5kaWNlcyBzb24gdW4gY3JpdGVyaW8gbcOhcyBlbnRyZSB2YXJpb3MsIG5vIGVsIGNyaXRlcmlvIGRlY2lzaXZvLgoK