TAB 5: Proporción de hogares con acceso a servicios de comunicación

SOBRE EL TAB

El objetivo de los datos en este tab es mostrar qué porcentaje de la población guatemalteca tiene acceso a los servicios de comunicación de teléfono fijo, teléfono celular, internet y TV por cable. En el excel recuperado del Instituto Nacional de Estadística, aparece un porcentaje total, aparece porcentaje por área (rural y urbana), porcentaje por nivel de pobreza (pobreza extrema, pobreza y no pobreza) y porcentaje por los 22 departamentos. Dado que este tab fue el desarrollado en clase por el profesor, lo que se estará haciendo es explicar que se hizo en cada paso.

REPRODUCCIÓN DE RESULTADOS

En primer lugar se importaron las librerías y se seleccionaron las preguntas que correspondian al tab del Excel.

library(dplyr)
library(haven)
library(ggplot2)
library(corrplot)
library(RColorBrewer)
encovi.hogares <- read_sav("~/Data Science/ENCOVI/hogares.sav")
comunicaciones <- encovi.hogares %>% select(DEPTO, AREA, POBREZA, P01D19A, P01D19B, P01D19C, P01D19D)
levels(comunicaciones$DEPTO)<- c("Guatemala", "El Progreso", "Sacatepequez", "Chimaltenango", "Escuintla", "Santa Rosa", "Solola", "Totonicapan", "Quetzaltenango", "Suchitepequez", "Retalhuleu", "San Marcos", "Huehuetenango", "Quiche", "Baja Verapaz", "Alta Verapaz", "Peten", "Izabal", "Zacapa", "Chiquimula", "Jalapa", "Jutiapa")
levels(comunicaciones$AREA)<- c("Urbana", "Rural")
levels(comunicaciones$POBREZA) <- c ("Pobre extremo", "Pobre no extremo", "No pobre")
comunicaciones$DEPTO <- as.factor(vivienda$Departamento)
comunicaciones$AREA <- as.factor(vivienda$Area)
comunicaciones$POBREZA <- as.factor(vivienda$Pobreza)

El siguiente paso fue cambiar los nombres de las preguntas por lo que representaban. Al mismo se estableció que 1 iba a ser que sí tenían ese servicio (era verdadero) y que 2 era que no tenían el servicio (lógicamente falso).

comunicaciones$telefono.fijo <- ifelse(comunicaciones$P01D19A == 1, TRUE, FALSE)
comunicaciones$telefono.celular <- ifelse(comunicaciones$P01D19B == 1, TRUE, FALSE)
comunicaciones$internet <- ifelse(comunicaciones$P01D19C == 1, TRUE, FALSE)
comunicaciones$tv.cable <- ifelse(comunicaciones$P01D19D == 1, TRUE, FALSE)

Lo primero que aparecía en el excel era el porcentaje de la toda la población de Guatemala que tiene acceso a los cuatro servicios de comuniación. Lo que se hizo fue usar la función de summarize, donde se crea un nuevo data frame contando como porcentaje cuántas veces sale 1.

total <- comunicaciones %>% summarise(telefono.fijo_total = sum(telefono.fijo, na.rm = TRUE)/n(), telefono.celular_total = sum(telefono.celular, na.rm = TRUE)/n(), internet_total = sum(internet, na.rm = TRUE)/n(), tv.cable_total = sum(tv.cable, na.rm = TRUE)/n())
total

Luego, se volvió a copiar el código solo que ahora se agrupo por área (rural y urbana), pobreza (extrema, no extrema y no pobre) y departamento.

area <- comunicaciones %>% group_by(as_factor(AREA)) %>% summarise(telefono.fijo_total = sum(telefono.fijo, na.rm = TRUE)/n(), telefono.celular_total = sum(telefono.celular, na.rm = TRUE)/n(), internet_total = sum(internet, na.rm = TRUE)/n(), tv.cable_total = sum(tv.cable, na.rm = TRUE)/n())
area
pobreza <- comunicaciones %>% group_by(POBREZA) %>% summarise(telefono.fijo_total = sum(telefono.fijo, na.rm = TRUE)/n(), telefono.celular_total = sum(telefono.celular, na.rm = TRUE)/n(), internet_total = sum(internet, na.rm = TRUE)/n(), tv.cable_total = sum(tv.cable, na.rm = TRUE)/n())
pobreza
departamento <- comunicaciones %>% group_by(DEPTO) %>% summarise(telefono.fijo_total = sum(telefono.fijo, na.rm = TRUE)/n(), telefono.celular_total = sum(telefono.celular, na.rm = TRUE)/n(), internet_total = sum(internet, na.rm = TRUE)/n(), tv.cable_total = sum(tv.cable, na.rm = TRUE)/n())
departamento

ANÁLISIS

Se decidió analizar la structure de las distintas tablas que se crearon.

summary(area)
 as_factor(AREA) telefono.fijo_total telefono.celular_total internet_total    tv.cable_total  
 Urbana:1        Min.   :0.01542     Min.   :0.7846         Min.   :0.01765   Min.   :0.2580  
 Rural :1        1st Qu.:0.04659     1st Qu.:0.8041         1st Qu.:0.04250   1st Qu.:0.3395  
                 Median :0.07776     Median :0.8237         Median :0.06734   Median :0.4210  
                 Mean   :0.07776     Mean   :0.8237         Mean   :0.06734   Mean   :0.4210  
                 3rd Qu.:0.10894     3rd Qu.:0.8432         3rd Qu.:0.09219   3rd Qu.:0.5026  
                 Max.   :0.14011     Max.   :0.8628         Max.   :0.11704   Max.   :0.5841  
summary(departamento)
           DEPTO    telefono.fijo_total telefono.celular_total internet_total    tv.cable_total  
 Guatemala    : 1   Min.   :0.01977     Min.   :0.6126         Min.   :0.01647   Min.   :0.1414  
 El Progreso  : 1   1st Qu.:0.03675     1st Qu.:0.7846         1st Qu.:0.02954   1st Qu.:0.2836  
 Sacatepequez : 1   Median :0.05546     Median :0.8046         Median :0.04661   Median :0.4035  
 Chimaltenango: 1   Mean   :0.06208     Mean   :0.8077         Mean   :0.05385   Mean   :0.3832  
 Escuintla    : 1   3rd Qu.:0.06783     3rd Qu.:0.8496         3rd Qu.:0.05731   3rd Qu.:0.4741  
 Santa Rosa   : 1   Max.   :0.22414     Max.   :0.9243         Max.   :0.19923   Max.   :0.6159  
 (Other)      :16                                                                                
summary(pobreza)
             POBREZA  telefono.fijo_total telefono.celular_total internet_total     tv.cable_total   
 Pobre extremo   :1   Min.   :0.003145    Min.   :0.6614         Min.   :0.002096   Min.   :0.09853  
 Pobre no extremo:1   1st Qu.:0.008090    1st Qu.:0.7302         1st Qu.:0.005561   1st Qu.:0.19078  
 No pobre        :1   Median :0.013036    Median :0.7989         Median :0.009025   Median :0.28303  
                      Mean   :0.051146    Mean   :0.7831         Mean   :0.044199   Mean   :0.32639  
                      3rd Qu.:0.075147    3rd Qu.:0.8439         3rd Qu.:0.065250   3rd Qu.:0.44033  
                      Max.   :0.137258    Max.   :0.8888         Max.   :0.121475   Max.   :0.59762  
str(area)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   2 obs. of  5 variables:
 $ as_factor(AREA)       : Factor w/ 2 levels "Urbana","Rural": 1 2
 $ telefono.fijo_total   : num  0.1401 0.0154
 $ telefono.celular_total: num  0.863 0.785
 $ internet_total        : num  0.117 0.0176
 $ tv.cable_total        : num  0.584 0.258
str(departamento)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   22 obs. of  5 variables:
 $ DEPTO                 : Factor w/ 22 levels "Guatemala","El Progreso",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ telefono.fijo_total   : num  0.2241 0.072 0.105 0.0593 0.0573 ...
 $ telefono.celular_total: num  0.924 0.852 0.869 0.811 0.885 ...
 $ internet_total        : num  0.1992 0.0473 0.0991 0.0459 0.0368 ...
 $ tv.cable_total        : num  0.616 0.459 0.505 0.312 0.475 ...
str(pobreza)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   3 obs. of  5 variables:
 $ POBREZA               : Factor w/ 3 levels "Pobre extremo",..: 1 2 3
 $ telefono.fijo_total   : num  0.00314 0.01304 0.13726
 $ telefono.celular_total: num  0.661 0.799 0.889
 $ internet_total        : num  0.0021 0.00902 0.12148
 $ tv.cable_total        : num  0.0985 0.283 0.5976

GRÁFICAS

Primero se reordenó el dataset para poder hacer las gráficas. Luego, se hicieron boxplots por servicio para ver la distribución de los datos. También se hizo una “stacked graph” donde se muestra la frecuencia del servicio por departamento.

grafica_dep <- departamento %>% gather(Servicio.Comunicacion, Cantidad, -DEPTO)
grafica_dep$Servicio.Comunicacion <- factor(grafica_dep$Servicio.Comunicacion)
grafica_dep$Cantidad <- as.numeric(grafica_dep$Cantidad) / 100
ggplot(grafica_dep, aes(Servicio.Comunicacion, Cantidad)) +
    geom_boxplot()

grafica_dep %>% ggplot(aes(DEPTO, Cantidad)) +
    geom_col(aes(fill = Servicio.Comunicacion, group = Servicio.Comunicacion), position = "dodge") +
    theme(axis.text.x = element_text(angle = 90))

grafica_dep %>% filter(Servicio.Comunicacion == "tv.cable_total") %>% arrange(desc(Cantidad)) %>% ggplot(aes(DEPTO, Cantidad)) +
    geom_col(aes(fill=DEPTO), color="black") +
    labs(title = "Cable de TV en Guatemala") +
    theme(axis.text.x = element_text(angle = 90))

CONCLUSIONES

  1. El servicio al que más tiene acceso la población guatemalteca es al teléfono celular, más del 80% de la población tiene este dispositivo. Luego, un 70% tiene acceso a teléfono fijo y un 60% a internet. El acceso con menos penetración en el país es el cable de TV ya que solo un 40% tiene acceso al mismo. Algo importante que aclarar es que aunque una gran mayoría de personas tengan teléfono celular, esto no garantiza conectividad entre la población ya que la mayoría de celulares son prepagos (dependen de tarjetas de saldo), y mucha gente los tiene solo para recibir llamadas.
  2. Los departamentos con mejores servicios de comunicación son Guatemala y Sacatepéquez. Una gran mayoría de la población en estas áreas tiene acceso a los 4 servicios analizados. Esto se debe a que en la ciudad hay mejor infraestuctura y capital para invertir en comunicación. Por las mismas razones hay mejores servicios en el área urbana que en el área rural.
  3. En Guatemala no hay un 100% de conectividad respecto a los servicios de teléfono fijo, teléfono celular, internet y cable de TV. Sin embargo se puede decir que Guatemala no está atrasada en los servicios de comunicación ya que desde los años 90 se ha invertido en los mismos y se ha permitido el libre mercado en el servicio.
LS0tDQp0aXRsZTogIlJlc3VsdGFkb3MgRW5jb3ZpIDIwMTQiDQphdXRob3I6ICJTaGFyaXMgQmFycmlvcywgU2l1IExpbmcgQ2hhbmcsIFJvZG9sZm8gUm9qYXMsIEppbWVuYSBT4W5jaGV6LCBTdWNlbHkgVGV5dWwiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KI1RBQiA1OiBQcm9wb3JjafNuIGRlIGhvZ2FyZXMgY29uIGFjY2VzbyBhIHNlcnZpY2lvcyBkZSBjb211bmljYWNp824NCg0KIyMjIFNPQlJFIEVMIFRBQiANCkVsIG9iamV0aXZvIGRlIGxvcyBkYXRvcyBlbiBlc3RlIHRhYiBlcyBtb3N0cmFyIHF16SBwb3JjZW50YWplIGRlIGxhIHBvYmxhY2nzbiBndWF0ZW1hbHRlY2EgdGllbmUgYWNjZXNvIGEgbG9zIHNlcnZpY2lvcyBkZSBjb211bmljYWNp824gZGUgdGVs6WZvbm8gZmlqbywgdGVs6WZvbm8gY2VsdWxhciwgaW50ZXJuZXQgeSBUViBwb3IgY2FibGUuIEVuIGVsIGV4Y2VsIHJlY3VwZXJhZG8gZGVsIEluc3RpdHV0byBOYWNpb25hbCBkZSBFc3RhZO1zdGljYSwgYXBhcmVjZSB1biBwb3JjZW50YWplIHRvdGFsLCBhcGFyZWNlIHBvcmNlbnRhamUgcG9yIOFyZWEgKHJ1cmFsIHkgdXJiYW5hKSwgcG9yY2VudGFqZSBwb3Igbml2ZWwgZGUgcG9icmV6YSAocG9icmV6YSBleHRyZW1hLCBwb2JyZXphIHkgbm8gcG9icmV6YSkgeSBwb3JjZW50YWplIHBvciBsb3MgMjIgZGVwYXJ0YW1lbnRvcy4NCkRhZG8gcXVlIGVzdGUgdGFiIGZ1ZSBlbCBkZXNhcnJvbGxhZG8gZW4gY2xhc2UgcG9yIGVsIHByb2Zlc29yLCBsbyBxdWUgc2UgZXN0YXLhIGhhY2llbmRvIGVzIGV4cGxpY2FyIHF1ZSBzZSBoaXpvIGVuIGNhZGEgcGFzby4NCg0KIyMjIFJFUFJPRFVDQ0nTTiBERSBSRVNVTFRBRE9TDQpFbiBwcmltZXIgbHVnYXIgc2UgaW1wb3J0YXJvbiBsYXMgbGlicmVy7WFzIHkgc2Ugc2VsZWNjaW9uYXJvbiBsYXMgcHJlZ3VudGFzIHF1ZSBjb3JyZXNwb25kaWFuIGFsIHRhYiBkZWwgRXhjZWwuDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGhhdmVuKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShjb3JycGxvdCkNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KDQplbmNvdmkuaG9nYXJlcyA8LSByZWFkX3Nhdigifi9EYXRhIFNjaWVuY2UvRU5DT1ZJL2hvZ2FyZXMuc2F2IikNCmNvbXVuaWNhY2lvbmVzIDwtIGVuY292aS5ob2dhcmVzICU+JSBzZWxlY3QoREVQVE8sIEFSRUEsIFBPQlJFWkEsIFAwMUQxOUEsIFAwMUQxOUIsIFAwMUQxOUMsIFAwMUQxOUQpDQoNCmxldmVscyhjb211bmljYWNpb25lcyRERVBUTyk8LSBjKCJHdWF0ZW1hbGEiLCAiRWwgUHJvZ3Jlc28iLCAiU2FjYXRlcGVxdWV6IiwgIkNoaW1hbHRlbmFuZ28iLCAiRXNjdWludGxhIiwgIlNhbnRhIFJvc2EiLCAiU29sb2xhIiwgIlRvdG9uaWNhcGFuIiwgIlF1ZXR6YWx0ZW5hbmdvIiwgIlN1Y2hpdGVwZXF1ZXoiLCAiUmV0YWxodWxldSIsICJTYW4gTWFyY29zIiwgIkh1ZWh1ZXRlbmFuZ28iLCAiUXVpY2hlIiwgIkJhamEgVmVyYXBheiIsICJBbHRhIFZlcmFwYXoiLCAiUGV0ZW4iLCAiSXphYmFsIiwgIlphY2FwYSIsICJDaGlxdWltdWxhIiwgIkphbGFwYSIsICJKdXRpYXBhIikNCmxldmVscyhjb211bmljYWNpb25lcyRBUkVBKTwtIGMoIlVyYmFuYSIsICJSdXJhbCIpDQpsZXZlbHMoY29tdW5pY2FjaW9uZXMkUE9CUkVaQSkgPC0gYyAoIlBvYnJlIGV4dHJlbW8iLCAiUG9icmUgbm8gZXh0cmVtbyIsICJObyBwb2JyZSIpDQpjb211bmljYWNpb25lcyRERVBUTyA8LSBhcy5mYWN0b3Iodml2aWVuZGEkRGVwYXJ0YW1lbnRvKQ0KY29tdW5pY2FjaW9uZXMkQVJFQSA8LSBhcy5mYWN0b3Iodml2aWVuZGEkQXJlYSkNCmNvbXVuaWNhY2lvbmVzJFBPQlJFWkEgPC0gYXMuZmFjdG9yKHZpdmllbmRhJFBvYnJlemEpDQpgYGANCkVsIHNpZ3VpZW50ZSBwYXNvIGZ1ZSBjYW1iaWFyIGxvcyBub21icmVzIGRlIGxhcyBwcmVndW50YXMgcG9yIGxvIHF1ZSByZXByZXNlbnRhYmFuLiBBbCBtaXNtbyBzZSBlc3RhYmxlY2nzIHF1ZSAxIGliYSBhIHNlciBxdWUgc+0gdGVu7WFuIGVzZSBzZXJ2aWNpbyAoZXJhIHZlcmRhZGVybykgeSBxdWUgMiBlcmEgcXVlIG5vIHRlbu1hbiBlbCBzZXJ2aWNpbyAobPNnaWNhbWVudGUgZmFsc28pLg0KYGBge3J9DQpjb211bmljYWNpb25lcyR0ZWxlZm9uby5maWpvIDwtIGlmZWxzZShjb211bmljYWNpb25lcyRQMDFEMTlBID09IDEsIFRSVUUsIEZBTFNFKQ0KY29tdW5pY2FjaW9uZXMkdGVsZWZvbm8uY2VsdWxhciA8LSBpZmVsc2UoY29tdW5pY2FjaW9uZXMkUDAxRDE5QiA9PSAxLCBUUlVFLCBGQUxTRSkNCmNvbXVuaWNhY2lvbmVzJGludGVybmV0IDwtIGlmZWxzZShjb211bmljYWNpb25lcyRQMDFEMTlDID09IDEsIFRSVUUsIEZBTFNFKQ0KY29tdW5pY2FjaW9uZXMkdHYuY2FibGUgPC0gaWZlbHNlKGNvbXVuaWNhY2lvbmVzJFAwMUQxOUQgPT0gMSwgVFJVRSwgRkFMU0UpDQpgYGANCkxvIHByaW1lcm8gcXVlIGFwYXJlY+1hIGVuIGVsIGV4Y2VsIGVyYSBlbCBwb3JjZW50YWplIGRlIGxhIHRvZGEgbGEgcG9ibGFjafNuIGRlIEd1YXRlbWFsYSBxdWUgdGllbmUgYWNjZXNvIGEgbG9zIGN1YXRybyBzZXJ2aWNpb3MgZGUgY29tdW5pYWNp824uIExvIHF1ZSBzZSBoaXpvIGZ1ZSB1c2FyIGxhIGZ1bmNp824gZGUgc3VtbWFyaXplLCBkb25kZSBzZSBjcmVhIHVuIG51ZXZvIGRhdGEgZnJhbWUgY29udGFuZG8gY29tbyBwb3JjZW50YWplIGN14W50YXMgdmVjZXMgc2FsZSAxLg0KYGBge3J9DQp0b3RhbCA8LSBjb211bmljYWNpb25lcyAlPiUgc3VtbWFyaXNlKHRlbGVmb25vLmZpam9fdG90YWwgPSBzdW0odGVsZWZvbm8uZmlqbywgbmEucm0gPSBUUlVFKS9uKCksIHRlbGVmb25vLmNlbHVsYXJfdG90YWwgPSBzdW0odGVsZWZvbm8uY2VsdWxhciwgbmEucm0gPSBUUlVFKS9uKCksIGludGVybmV0X3RvdGFsID0gc3VtKGludGVybmV0LCBuYS5ybSA9IFRSVUUpL24oKSwgdHYuY2FibGVfdG90YWwgPSBzdW0odHYuY2FibGUsIG5hLnJtID0gVFJVRSkvbigpKQ0KdG90YWwNCmBgYA0KTHVlZ28sIHNlIHZvbHZp8yBhIGNvcGlhciBlbCBj82RpZ28gc29sbyBxdWUgYWhvcmEgc2UgYWdydXBvIHBvciDhcmVhIChydXJhbCB5IHVyYmFuYSksIHBvYnJlemEgKGV4dHJlbWEsIG5vIGV4dHJlbWEgeSBubyBwb2JyZSkgeSBkZXBhcnRhbWVudG8uDQpgYGB7cn0NCmFyZWEgPC0gY29tdW5pY2FjaW9uZXMgJT4lIGdyb3VwX2J5KGFzX2ZhY3RvcihBUkVBKSkgJT4lIHN1bW1hcmlzZSh0ZWxlZm9uby5maWpvX3RvdGFsID0gc3VtKHRlbGVmb25vLmZpam8sIG5hLnJtID0gVFJVRSkvbigpLCB0ZWxlZm9uby5jZWx1bGFyX3RvdGFsID0gc3VtKHRlbGVmb25vLmNlbHVsYXIsIG5hLnJtID0gVFJVRSkvbigpLCBpbnRlcm5ldF90b3RhbCA9IHN1bShpbnRlcm5ldCwgbmEucm0gPSBUUlVFKS9uKCksIHR2LmNhYmxlX3RvdGFsID0gc3VtKHR2LmNhYmxlLCBuYS5ybSA9IFRSVUUpL24oKSkNCmFyZWENCg0KcG9icmV6YSA8LSBjb211bmljYWNpb25lcyAlPiUgZ3JvdXBfYnkoUE9CUkVaQSkgJT4lIHN1bW1hcmlzZSh0ZWxlZm9uby5maWpvX3RvdGFsID0gc3VtKHRlbGVmb25vLmZpam8sIG5hLnJtID0gVFJVRSkvbigpLCB0ZWxlZm9uby5jZWx1bGFyX3RvdGFsID0gc3VtKHRlbGVmb25vLmNlbHVsYXIsIG5hLnJtID0gVFJVRSkvbigpLCBpbnRlcm5ldF90b3RhbCA9IHN1bShpbnRlcm5ldCwgbmEucm0gPSBUUlVFKS9uKCksIHR2LmNhYmxlX3RvdGFsID0gc3VtKHR2LmNhYmxlLCBuYS5ybSA9IFRSVUUpL24oKSkNCnBvYnJlemENCg0KZGVwYXJ0YW1lbnRvIDwtIGNvbXVuaWNhY2lvbmVzICU+JSBncm91cF9ieShERVBUTykgJT4lIHN1bW1hcmlzZSh0ZWxlZm9uby5maWpvX3RvdGFsID0gc3VtKHRlbGVmb25vLmZpam8sIG5hLnJtID0gVFJVRSkvbigpLCB0ZWxlZm9uby5jZWx1bGFyX3RvdGFsID0gc3VtKHRlbGVmb25vLmNlbHVsYXIsIG5hLnJtID0gVFJVRSkvbigpLCBpbnRlcm5ldF90b3RhbCA9IHN1bShpbnRlcm5ldCwgbmEucm0gPSBUUlVFKS9uKCksIHR2LmNhYmxlX3RvdGFsID0gc3VtKHR2LmNhYmxlLCBuYS5ybSA9IFRSVUUpL24oKSkNCmRlcGFydGFtZW50bw0KYGBgDQoNCg0KIyMjQU7BTElTSVMNClNlIGRlY2lkafMgYW5hbGl6YXIgbGEgc3RydWN0dXJlIGRlIGxhcyBkaXN0aW50YXMgdGFibGFzIHF1ZSBzZSBjcmVhcm9uLg0KYGBge3J9DQpzdW1tYXJ5KGFyZWEpDQpzdW1tYXJ5KGRlcGFydGFtZW50bykNCnN1bW1hcnkocG9icmV6YSkNCnN0cihhcmVhKQ0Kc3RyKGRlcGFydGFtZW50bykNCnN0cihwb2JyZXphKQ0KYGBgDQoNCiMjIyBHUsFGSUNBUyANClByaW1lcm8gc2UgcmVvcmRlbvMgZWwgZGF0YXNldCBwYXJhIHBvZGVyIGhhY2VyIGxhcyBncuFmaWNhcy4gTHVlZ28sIHNlIGhpY2llcm9uIGJveHBsb3RzIHBvciBzZXJ2aWNpbyBwYXJhIHZlciBsYSBkaXN0cmlidWNp824gZGUgbG9zIGRhdG9zLiBUYW1iaeluIHNlIGhpem8gdW5hICJzdGFja2VkIGdyYXBoIiBkb25kZSBzZSBtdWVzdHJhIGxhIGZyZWN1ZW5jaWEgZGVsIHNlcnZpY2lvIHBvciBkZXBhcnRhbWVudG8uIA0KYGBge3J9DQpncmFmaWNhX2RlcCA8LSBkZXBhcnRhbWVudG8gJT4lIGdhdGhlcihTZXJ2aWNpby5Db211bmljYWNpb24sIENhbnRpZGFkLCAtREVQVE8pDQpncmFmaWNhX2RlcCRTZXJ2aWNpby5Db211bmljYWNpb24gPC0gZmFjdG9yKGdyYWZpY2FfZGVwJFNlcnZpY2lvLkNvbXVuaWNhY2lvbikNCmdyYWZpY2FfZGVwJENhbnRpZGFkIDwtIGFzLm51bWVyaWMoZ3JhZmljYV9kZXAkQ2FudGlkYWQpIC8gMTAwDQoNCmdncGxvdChncmFmaWNhX2RlcCwgYWVzKFNlcnZpY2lvLkNvbXVuaWNhY2lvbiwgQ2FudGlkYWQpKSArDQogICAgZ2VvbV9ib3hwbG90KCkNCg0KZ3JhZmljYV9kZXAgJT4lIGdncGxvdChhZXMoREVQVE8sIENhbnRpZGFkKSkgKw0KICAgIGdlb21fY29sKGFlcyhmaWxsID0gU2VydmljaW8uQ29tdW5pY2FjaW9uLCBncm91cCA9IFNlcnZpY2lvLkNvbXVuaWNhY2lvbiksIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KDQpncmFmaWNhX2RlcCAlPiUgZmlsdGVyKFNlcnZpY2lvLkNvbXVuaWNhY2lvbiA9PSAidHYuY2FibGVfdG90YWwiKSAlPiUgYXJyYW5nZShkZXNjKENhbnRpZGFkKSkgJT4lIGdncGxvdChhZXMoREVQVE8sIENhbnRpZGFkKSkgKw0KICAgIGdlb21fY29sKGFlcyhmaWxsPURFUFRPKSwgY29sb3I9ImJsYWNrIikgKw0KICAgIGxhYnModGl0bGUgPSAiQ2FibGUgZGUgVFYgZW4gR3VhdGVtYWxhIikgKw0KICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KYGBgDQoNCiMjIyBDT05DTFVTSU9ORVMNCjEuIEVsIHNlcnZpY2lvIGFsIHF1ZSBt4XMgdGllbmUgYWNjZXNvIGxhIHBvYmxhY2nzbiBndWF0ZW1hbHRlY2EgZXMgYWwgdGVs6WZvbm8gY2VsdWxhciwgbeFzIGRlbCA4MCUgZGUgbGEgcG9ibGFjafNuIHRpZW5lIGVzdGUgZGlzcG9zaXRpdm8uIEx1ZWdvLCB1biA3MCUgdGllbmUgYWNjZXNvIGEgdGVs6WZvbm8gZmlqbyB5IHVuIDYwJSBhIGludGVybmV0LiBFbCBhY2Nlc28gY29uIG1lbm9zIHBlbmV0cmFjafNuIGVuIGVsIHBh7XMgZXMgZWwgY2FibGUgZGUgVFYgeWEgcXVlIHNvbG8gdW4gNDAlIHRpZW5lIGFjY2VzbyBhbCBtaXNtby4gQWxnbyBpbXBvcnRhbnRlIHF1ZSBhY2xhcmFyIGVzIHF1ZSBhdW5xdWUgdW5hIGdyYW4gbWF5b3LtYSBkZSBwZXJzb25hcyB0ZW5nYW4gdGVs6WZvbm8gY2VsdWxhciwgZXN0byBubyBnYXJhbnRpemEgY29uZWN0aXZpZGFkIGVudHJlIGxhIHBvYmxhY2nzbiB5YSBxdWUgbGEgbWF5b3LtYSBkZSBjZWx1bGFyZXMgc29uIHByZXBhZ29zIChkZXBlbmRlbiBkZSB0YXJqZXRhcyBkZSBzYWxkbyksIHkgbXVjaGEgZ2VudGUgbG9zIHRpZW5lIHNvbG8gcGFyYSByZWNpYmlyIGxsYW1hZGFzLg0KMi4gTG9zIGRlcGFydGFtZW50b3MgY29uIG1lam9yZXMgc2VydmljaW9zIGRlIGNvbXVuaWNhY2nzbiBzb24gR3VhdGVtYWxhIHkgU2FjYXRlcOlxdWV6LiBVbmEgZ3JhbiBtYXlvcu1hIGRlIGxhIHBvYmxhY2nzbiBlbiBlc3RhcyDhcmVhcyB0aWVuZSBhY2Nlc28gYSBsb3MgNCBzZXJ2aWNpb3MgYW5hbGl6YWRvcy4gRXN0byBzZSBkZWJlIGEgcXVlIGVuIGxhIGNpdWRhZCBoYXkgbWVqb3IgaW5mcmFlc3R1Y3R1cmEgeSBjYXBpdGFsIHBhcmEgaW52ZXJ0aXIgZW4gY29tdW5pY2FjafNuLiBQb3IgbGFzIG1pc21hcyByYXpvbmVzIGhheSBtZWpvcmVzIHNlcnZpY2lvcyBlbiBlbCDhcmVhIHVyYmFuYSBxdWUgZW4gZWwg4XJlYSBydXJhbC4NCjMuIEVuIEd1YXRlbWFsYSBubyBoYXkgdW4gMTAwJSBkZSBjb25lY3RpdmlkYWQgcmVzcGVjdG8gYSBsb3Mgc2VydmljaW9zIGRlIHRlbOlmb25vIGZpam8sIHRlbOlmb25vIGNlbHVsYXIsIGludGVybmV0IHkgY2FibGUgZGUgVFYuIFNpbiBlbWJhcmdvIHNlIHB1ZWRlIGRlY2lyIHF1ZSBHdWF0ZW1hbGEgbm8gZXN04SBhdHJhc2FkYSBlbiBsb3Mgc2VydmljaW9zIGRlIGNvbXVuaWNhY2nzbiB5YSBxdWUgZGVzZGUgbG9zIGHxb3MgOTAgc2UgaGEgaW52ZXJ0aWRvIGVuIGxvcyBtaXNtb3MgeSBzZSBoYSBwZXJtaXRpZG8gZWwgbGlicmUgbWVyY2FkbyBlbiBlbCBzZXJ2aWNpby4=