Presentación

La idea de este artículo es analizar tanto la actividad discursiva del Presidente de Argentina Alberto Fernández como las repercusiones de sus palabras. A través de la descarga de todos sus tweets emitidos durante el período que va desde el 13/3 hasta el 13/4, se espera recuperar las principales cifras y elementos que describan las formas por las cuales elige comunicar sus mensajes en la red y el alcance de los mismos en el contexto de la crisis del COVID-19. Por otra parte, tambien se incluye en este análisis los discursos emitidos y el análisis de algunas menciones de usuarios al Presidente. Las bases de trabajo fueron conformadas mediante la descarga de tweets a través del paquete Rtweet y del paquete twarc. Los discursos fueron descargados del sitio

Descriptivos

Luego de la descarga y posterior limpieza de los datos, procederemos a analizar la cantidad de tweets emitidos considerando variables temporales. La Base contiene un total de 251 de tweets publicados desde 2020-03-13 hasta 2020-04-13.

Se aprecia una fuerte actividad durante los días posteriores a la enunciación de la Cuarentena y en los primeros días de abril.

Se puede ver picos de actividad durante las horas nocturnas, donde el Presidente dedica tiempo a responder saludos y consultas.

Otro dato relevante es evaluar la proporción de mensajes que se envían según el dispositivo. Tambien es posible analizar la evolución de esta variable

Iphone representa la plataforma mayoritaria en relación al envio de mensajes con el 92.03%.

Por otra parte, tambien es representativo de la efectividad de un mensaje el denominado ratio de los tweets. Consiste en un cálculo que es basicamente el cociente entre la cantidad de respuestas del tweet y la suma del número de favs y rt. De esta manera, si el ratio es álto es señal de una mala difusión de los mensajes.

El gráfico muestra una muy buena performance de los mensajes emitidos teniendo en cuenta que no se supera el 0,5 de ratio. Esto significa que los mensajes del Presidente tuvieron menos respuestas en comparación con retwits o favs.

A continuación se muestra el mensaje mas retuiteado y el mas faveado.


Tweet con mayor cantidad de favs

Tweet con mayor cantidad de Retweets

Nube de palabras

Una buena manera de representar las palabras utilizadas consiste en conformar las nubes de palabras o bag of words. Basicamente se trata de visualizar cuales son los términos de mayor uso mostrando su peso en relación a los otros.

Esta es la nube de palabras del año en Twitter de Alberto Fernández

Palabras positivas

Palabras negativas

Las palabras positivas están vinculadas a sentimientos de cariño y saludos, mientras que en las negativas se encuentra “distancia” debido a las recomendaciones de aislamiento.

Discursos

Luego de analizar los tweets emitidos por el Presidente, llega el turno de ver que dicen sus discursos. Tomaremos los discursos del dia 13, 20 y 30 de marzo, con el objetivo de analizar cuales son las palabras que fueron tomando mayor protagonismo.

La cantidad de palabras emitidas creció considerablemente en relación al primer discurso. Veamos ahora las nubes de palabras de todos los discursos

Discurso 13-03

Se observa una fuerte y lógica presencia de la palabra “Coronavirus” al igual que “personas”. El 20 de marzo, el Presidente dió inicio formal a la cuartentena obligatoria. Estas fueron las palabras más utilizadas

Discurso 20-03

Tal cual se aprecia, la palabra “economía” comienza a tomar mayor protagonismo. El dia 30 de marzo se prolongó la cuarentena, con los siguientes términos.

Discurso 30-03

En este último discurso, la palabra protagonista es “cuarentena”. Tambien puede resultar significativo evaluar el peso de la economia y la salud en cada uno de los discursos analizados.

Puede apreciarse que la palabra “economía” no aparece en el primer discurso, sino en los siguientes.

Menciones

Cerramos el informe con un breve análisis de las menciones a la cuenta de Alberto Fernandez. Estos tweets pueden ser respuestas a mensajes del Presidente como asi tambien mensajes hacia su figura. La base de trabajo contiene 184968 tweets recolectados entre el 13 y el 19 de marzo. Veamos como se distribuye esta muestra si tomamos en consideración el dispositivo por el cual fueron emitidos los mensajes.

Mas del 60 % de los mensajes recolectados fueron emitidos desde un dispositivo Android.

Veamos ahora la nube de palabras de estos mensajes

A continuación, la nube de palabras positivas.

A continuación, la nube de palabras negativas.

Para cerrar, clasificaremos todas las palabras de esta recolección con el diccionario NRC. Este diccionario clasifica palabras según una mayor cantidad de sentimientos.

#carga de diccionario NRC
hashnrc_data <- get_nrc_sentiment(char_v = BaseTokens$word, language = 'spanish')

hashnrc_data <- hashnrc_data %>% 
  rename('anticipación'=anticipation,
           'ira'=anger,
           'disgusto'=disgust,
           'miedo'=fear,
           'alegría'=joy,
           'tristeza'=sadness,
           'sorpresa'=surprise,
           'confianza'=trust,
           'negativa'=negative,
           'positiva'=positive)

#Manipulación de data
base_emocionhash <- data.frame(t(hashnrc_data))
base_emocionhash <- data.frame(rowSums(base_emocionhash))
names(base_emocionhash)[1] <- "total"
base_emocionhash <- cbind('sentimiento'=rownames(base_emocionhash),base_emocionhash)
rownames(base_emocionhash) <- NULL

#Graficamos
# ggplot(base_emocionhash[1:8,], aes(x = sentimiento, y = round(cuenta/sum(cuenta)*100, 1), fill = sentimiento)) + 
#   geom_bar(stat = "identity") +
#   labs(title='Elecciones Alberto Fernandez - Sentiment Analysis (NRC)',
#        subtitle = 'Trabajo Final Taller de Análisis de Texto del CPS',
#        caption='Fuente: Twitter',
#        x = "Sentimiento", 
#        y = "Frecuencia") +
#   geom_text(aes(label = paste(round(cuenta/sum(cuenta)*100, 1), '%')),
#             vjust = 1.5, color = "black",
#             size = 4)

base_emocionhash2 <- base_emocionhash %>% 
  head(8) %>% 
  mutate(color = case_when(sentimiento == "miedo"~ "#ff4d4d",
                           sentimiento == "ira"~ "#ff4d4d",
                           sentimiento == "disgusto"~ "#ff4d4d",
                           sentimiento == "tristeza"~ "#ff4d4d",
                           sentimiento == "anticipación"~ "#36b336",
                           sentimiento == "alegría"~ "#36b336",
                           sentimiento == "sorpresa"~ "#36b336",
                           sentimiento == "confianza"~ "#36b336",)) %>% 
  arrange(total) %>% 
  mutate("%" = round((total/sum(total)*100),2))

x <- c("total", "%")
y <- sprintf("{point.%s}", c("total", "%"))
tltip <- tooltip_table(x, y)

Grafico11 <-  highchart() %>% 
  hc_title(text="Sentimientos")%>%
  #hc_chart(type="column") %>%
  hc_xAxis(categories = base_emocionhash2$sentimiento) %>%
  hc_add_series(base_emocionhash2,"column", hcaes(base_emocionhash2$sentimiento,base_emocionhash2$`%`, color = base_emocionhash2$color), name = "Sentimientos") %>% 
  hc_tooltip(useHTML = TRUE,
    headerFormat = as.character(tags$small("{point.x: %Y %b}")),
    pointFormat = tltip
  )



Grafico11

Las palabras vinculadas con el sentimiento de confianza son las mayoritarias.


  1. Soy sociólogo (FSOC-UBA). Me dedico al analisis de datos en temas como el estudio de la opinión pública, comportamiento electoral, analisis de texto, redes sociales y consumos culturales, todo mediante R y Python. Dirijo el Observatorio de Opinión Publica en ACDES y escribo en mi blog de temas de R y en mi blog de temas de generales. Contacto:

LS0tDQp0aXRsZTogIkFuw6FsaXNpcyBkZSBUd2VldHMiDQphdXRob3I6ICJGZXJjaGVybyBKdWFuIEd1aWxsZXJtbyAoQGd1aWxsZWFkaG9ub3JlbSleWyBfU295IHNvY2nDs2xvZ28gKEZTT0MtVUJBKS4gTWUgZGVkaWNvIGFsIGFuYWxpc2lzIGRlIGRhdG9zIGVuIHRlbWFzIGNvbW8gZWwgZXN0dWRpbyBkZSBsYSBvcGluacOzbiBww7pibGljYSwgY29tcG9ydGFtaWVudG8gZWxlY3RvcmFsLCBhbmFsaXNpcyBkZSB0ZXh0bywgcmVkZXMgc29jaWFsZXMgeSBjb25zdW1vcyBjdWx0dXJhbGVzLCB0b2RvIG1lZGlhbnRlIFIgeSBQeXRob24uIERpcmlqbyBlbCBPYnNlcnZhdG9yaW8gZGUgT3BpbmnDs24gUHVibGljYSAgZW5fIFtBQ0RFU10oaHR0cDovL3d3dy5hY2Rlc3dlYi5vcmcvKSBfeSBlc2NyaWJvIGVuXyBbbWkgYmxvZyBkZSB0ZW1hcyBkZSBSXShodHRwczovL3JwdWJzLmNvbS9ndWlsbGVmZXJjaGVybykgX3kgZW5fIFttaSBibG9nIGRlIHRlbWFzIGRlIGdlbmVyYWxlc10oaHR0cHM6Ly9iaXRhY29yYW1vZGVybmFibG9nLndvcmRwcmVzcy5jb20pLiBfQ29udGFjdG9fOiBndWlsbGVmZXJjaGVyb0BnbWFpbC5jb21dIg0KZGF0ZTogIk1hcnpvIGRlIDIwMjAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIHRvYzogVFJVRQ0KICAgIGRlcHRoOiA1DQogICAgYWx3YXlzX2FsbG93X2h0bWw6IHRydWUNCnN1YnRpdGxlOiBFeHBsb3JhbmRvIGxvcyBkaXNjdXJzb3MgZGUgQWxiZXJ0byB5IHN1cyByZXBlcmN1c2lvbmVzDQotLS0NCiAgICANCjxicj4NCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCmBgYA0KICAgICANCiMgUHJlc2VudGFjacOzbg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQoNCiMgc2UgYm9ycmFuIHRvZG9zIGxvcyBvYmpldG9zIGRlIGxhIG1lbW9yaWENCg0Kcm0obGlzdCA9bHMoKSkNCg0KIyBzZSBjYXJnYW4gbGlicmVyaWFzIGRlIHRyYWJham8NCmxpYnJhcnkocnR3ZWV0KQ0KbGlicmFyeSgidGlkeXZlcnNlIikNCmxpYnJhcnkodG0pDQpsaWJyYXJ5KGdnd29yZGNsb3VkKQ0KbGlicmFyeShwcm91c3RyKQ0KbGlicmFyeShzeXV6aGV0KQ0KbGlicmFyeShTbm93YmFsbEMpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeSh0aWR5dGV4dCkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkod29yZGNsb3VkKQ0KbGlicmFyeShnZ3Rlcm4pDQoNCg0KI0xldmFudGFtb3MgdW5hIHZlcnNpw7NuIGRlIFNEQUwgDQoNCnNkYWwgPC0gcmVhZC5jc3YoJ3NkYWwuY3N2JywgZW5jb2RpbmcgPSAnVVRGLTgnKQ0KDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpMYSBpZGVhIGRlIGVzdGUgYXJ0w61jdWxvIGVzIGFuYWxpemFyIHRhbnRvIGxhIGFjdGl2aWRhZCBkaXNjdXJzaXZhIGRlbCBQcmVzaWRlbnRlIGRlIEFyZ2VudGluYSBBbGJlcnRvIEZlcm7DoW5kZXogY29tbyBsYXMgcmVwZXJjdXNpb25lcyBkZSBzdXMgcGFsYWJyYXMuIEEgdHJhdsOpcyBkZSBsYSBkZXNjYXJnYSBkZSB0b2RvcyBzdXMgdHdlZXRzIGVtaXRpZG9zIGR1cmFudGUgZWwgcGVyw61vZG8gcXVlIHZhIGRlc2RlIGVsIDEzLzMgaGFzdGEgZWwgMTMvNCwgc2UgZXNwZXJhIHJlY3VwZXJhciBsYXMgcHJpbmNpcGFsZXMgY2lmcmFzIHkgZWxlbWVudG9zIHF1ZSBkZXNjcmliYW4gbGFzIGZvcm1hcyBwb3IgbGFzIGN1YWxlcyBlbGlnZSBjb211bmljYXIgc3VzIG1lbnNhamVzIGVuIGxhIHJlZCB5IGVsIGFsY2FuY2UgZGUgbG9zIG1pc21vcyBlbiBlbCBjb250ZXh0byBkZSBsYSBjcmlzaXMgZGVsIENPVklELTE5LiBQb3Igb3RyYSBwYXJ0ZSwgdGFtYmllbiBzZSBpbmNsdXllIGVuIGVzdGUgYW7DoWxpc2lzIGxvcyBkaXNjdXJzb3MgZW1pdGlkb3MgeSBlbCBhbsOhbGlzaXMgZGUgYWxndW5hcyBtZW5jaW9uZXMgZGUgdXN1YXJpb3MgYWwgUHJlc2lkZW50ZS4NCkxhcyBiYXNlcyBkZSB0cmFiYWpvIGZ1ZXJvbiBjb25mb3JtYWRhcyBtZWRpYW50ZSBsYSBkZXNjYXJnYSBkZSB0d2VldHMgYSB0cmF2w6lzIGRlbCBwYXF1ZXRlIFtSdHdlZXRdKGh0dHBzOi8vcnR3ZWV0LmluZm8vKSB5IGRlbCBwYXF1ZXRlIFt0d2FyY10oaHR0cHM6Ly9naXRodWIuY29tL0RvY05vdy90d2FyYykuIExvcyBkaXNjdXJzb3MgZnVlcm9uIGRlc2NhcmdhZG9zIGRlbCBbc2l0aW9dKGh0dHBzOi8vd3d3LmNhc2Fyb3NhZGEuZ29iLmFyL2luZm9ybWFjaW9uL2Rpc2N1cnNvcykNCg0KDQo8ZGl2Lz4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNMZXZhbnRhbW9zIGxhIGJhc2UgY29uIFR3ZWV0cyBkZSBBbGJlcnRvDQoNCkJhc2UgPC0gcmVhZC5jc3YoImFsYmVydG8uY3N2IiwgZW5jb2RpbmcgPSAiVVRGLTgiKQ0KDQpCYXNlQyA8LSBCYXNlICU+JQ0KICBtdXRhdGUoZmVjaGEgPSBhcy5EYXRlKGRhdGUpKSAlPiUgDQogIGZpbHRlcihmZWNoYSA+PSAnMjAyMC0wMy0xMycpICU+JSANCiAgbXV0YXRlKGhvcmE9YXMubnVtZXJpYyhzdWJzdHIodGltZSwxLDIpKSkNCg0KDQoNCmNhbnRpZGFkIDwtIG5yb3coQmFzZUMpDQoNCmRlc2RlIDwtIG1pbihCYXNlQyRmZWNoYSkNCg0KaGFzdGEgPC0gbWF4KEJhc2VDJGZlY2hhKQ0KDQpgYGANCg0KDQojIyBEZXNjcmlwdGl2b3MNCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkx1ZWdvIGRlIGxhIGRlc2NhcmdhIHkgcG9zdGVyaW9yIGxpbXBpZXphIGRlIGxvcyBkYXRvcywgcHJvY2VkZXJlbW9zIGEgYW5hbGl6YXIgbGEgY2FudGlkYWQgZGUgdHdlZXRzIGVtaXRpZG9zIGNvbnNpZGVyYW5kbyB2YXJpYWJsZXMgdGVtcG9yYWxlcy4gTGEgQmFzZSBjb250aWVuZSB1biB0b3RhbCBkZSBgciBjYW50aWRhZGAgZGUgdHdlZXRzIHB1YmxpY2Fkb3MgZGVzZGUgYHIgZGVzZGVgIGhhc3RhIGByIGhhc3RhYC4NCg0KPGRpdi8+DQoNCg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQojVkVSU0lPTiBISUdIQ0hBUlQNCm9wdGlvbnMoaGlnaGNoYXJ0ZXIudGhlbWUgPSBoY190aGVtZV9nZ3Bsb3QyKCkpDQpUYWJsYV8xIDwtIEJhc2VDICU+JSANCiAgc2VsZWN0KGZlY2hhKSAlPiUNCiAgZ3JvdXBfYnkoZmVjaGEpICU+JQ0KICBhcnJhbmdlKGZlY2hhKSAlPiUNCiAgc3VtbWFyaXNlKHRvdGFsID0gbigpKSANCg0KDQoNCkdyYWZpY28xIDwtICBoaWdoY2hhcnQoKSAlPiUgDQogIGhjX3RpdGxlKHRleHQ9IkNhbnRpZGFkIGRlIHR3ZWV0cyBwb3IgZMOtYSIpJT4lDQogIGhjX2NoYXJ0KHR5cGU9ImxpbmUiKSAlPiUNCiAgaGNfeEF4aXMoY2F0ZWdvcmllcyA9IFRhYmxhXzEkZmVjaGEpICU+JQ0KICBoY19hZGRfc2VyaWVzKFRhYmxhXzEkdG90YWwsIG5hbWU9IkNhbnRpZGFkIGRlIFR3ZWV0cyIpIA0KDQpHcmFmaWNvMQ0KDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpTZSBhcHJlY2lhIHVuYSBmdWVydGUgYWN0aXZpZGFkIGR1cmFudGUgbG9zIGTDrWFzIHBvc3RlcmlvcmVzIGEgbGEgZW51bmNpYWNpw7NuIGRlIGxhIEN1YXJlbnRlbmEgeSBlbiBsb3MgcHJpbWVyb3MgZMOtYXMgZGUgYWJyaWwuDQoNCjxkaXYvPg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI1ZFUlNJT04gSElHSENIQVJUDQpvcHRpb25zKGhpZ2hjaGFydGVyLnRoZW1lID0gaGNfdGhlbWVfZ2dwbG90MigpKQ0KVGFibGFfMiA8LSBCYXNlQyAlPiUgDQogIHNlbGVjdChob3JhKSAlPiUNCiAgZ3JvdXBfYnkoaG9yYSkgJT4lDQogIGFycmFuZ2UoaG9yYSkgJT4lDQogIHN1bW1hcmlzZSh0b3RhbCA9IG4oKSkgDQoNCg0KDQpHcmFmaWNvMiA8LSAgaGlnaGNoYXJ0KCkgJT4lIA0KICBoY190aXRsZSh0ZXh0PSJOw7ptZXJvIGRlIHR3ZWV0cyBzZWfDum4gaG9yYSIpJT4lDQogIGhjX2NoYXJ0KHR5cGU9ImxpbmUiKSAlPiUNCiAgaGNfY29sb3JzKGNvbG9yID0gIiNCNzFDMUMiKSAlPiUgDQogIGhjX3hBeGlzKGNhdGVnb3JpZXMgPSBUYWJsYV8yJGhvcmEpICU+JQ0KICBoY19hZGRfc2VyaWVzKFRhYmxhXzIkdG90YWwsIG5hbWU9IkNhbnRpZGFkIGRlIFR3ZWV0cyIpIA0KDQpHcmFmaWNvMg0KYGBgDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KU2UgcHVlZGUgdmVyIHBpY29zIGRlIGFjdGl2aWRhZCBkdXJhbnRlIGxhcyBob3JhcyBub2N0dXJuYXMsIGRvbmRlIGVsIFByZXNpZGVudGUgZGVkaWNhIHRpZW1wbyBhIHJlc3BvbmRlciBzYWx1ZG9zIHkgY29uc3VsdGFzLg0KDQpPdHJvIGRhdG8gcmVsZXZhbnRlIGVzIGV2YWx1YXIgbGEgcHJvcG9yY2nDs24gZGUgbWVuc2FqZXMgcXVlIHNlIGVudsOtYW4gc2Vnw7puIGVsIGRpc3Bvc2l0aXZvLiBUYW1iaWVuIGVzIHBvc2libGUgYW5hbGl6YXIgbGEgZXZvbHVjacOzbiBkZSBlc3RhIHZhcmlhYmxlDQoNCjxkaXYvPg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpvcHRpb25zKHNjaXBlbj05OTkpDQoNCkJhc2VBbGJlcnRvIDwtIHJlYWQuY3N2KCJCYXNlVHdlZXRzYWxiZXJ0by5jc3YiKQ0KDQpCYXNlU291cmNlIDwtIEJhc2VBbGJlcnRvICU+JSANCiAgc2VsZWN0KHN0YXR1c19pZCxzb3VyY2UpICU+JSANCiAgcmVuYW1lKGlkID0gc3RhdHVzX2lkLCBkaXNwID0gc291cmNlKQ0KDQpCYXNlQ1MgPC0gbGVmdF9qb2luKEJhc2VDLEJhc2VTb3VyY2UsIGJ5ID0gJ2lkJykNCg0KDQojVkVSU0lPTiBISUdIQ0hBUlQNCm9wdGlvbnMoaGlnaGNoYXJ0ZXIudGhlbWUgPSBoY190aGVtZV9nZ3Bsb3QyKCkpDQpUYWJsYV8zIDwtIEJhc2VDUyAlPiUgDQogIHNlbGVjdChkaXNwKSAlPiUNCiAgZ3JvdXBfYnkoZGlzcCkgJT4lDQogIHN1bW1hcmlzZSh0b3RhbCA9IG4oKSkgJT4lIA0KICBtdXRhdGUocHJvcCA9IHJvdW5kKCh0b3RhbC9zdW0odG90YWwpKjEwMCksMikpICU+JSANCiAgYXJyYW5nZSgtdG90YWwsIC1kaXNwKQ0KDQpQb3JjZW50YWplaXBob25lIDwtIFRhYmxhXzMgJT4lIA0KICBzZWxlY3QoZGlzcCxwcm9wKSAlPiUgDQogIGhlYWQoMSkgJT4lIA0KICBzZWxlY3QocHJvcCkNCg0KZGF0bzEgPC0gUG9yY2VudGFqZWlwaG9uZSRwcm9wDQoNCg0KR3JhZmljbzMgPC0gIGhjaGFydChUYWJsYV8zLCAidHJlZW1hcCIsIGhjYWVzKHggPSBkaXNwLCB2YWx1ZSA9IHRvdGFsLCBjb2xvciA9ICBwcm9wKSklPiUgDQogIGhjX3RpdGxlKHRleHQ9IkNhbnRpZGFkIGRlIHR3ZWV0cyBwb3IgZGlzcG9zaXRpdm8iKQ0KDQpHcmFmaWNvMw0KDQpUYWJsYV80IDwtIEJhc2VDUyAlPiUgDQogIHNlbGVjdChkaXNwLCBmZWNoYSkgJT4lDQogIGdyb3VwX2J5KGRpc3AsZmVjaGEpICU+JQ0KICBhcnJhbmdlKGZlY2hhKSAlPiUNCiAgc3VtbWFyaXNlKHRvdGFsID0gbigpKSANCg0KDQpHcmFmaWNvNCA8LSAgVGFibGFfNCAlPiUgDQogIGhjaGFydCgibGluZSIsaGNhZXMoeCA9IGZlY2hhLCB5ID0gdG90YWwsIGdyb3VwID0gZGlzcCkpICU+JSANCiAgaGNfdGl0bGUodGV4dD0iQ2FudGlkYWQgZGUgdHdlZXRzIHNlZ8O6biBtw6lzIHBvciBkaXNwb3NpdGl2byIpDQogIA0KR3JhZmljbzQgIA0KDQoNCmBgYA0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCklwaG9uZSByZXByZXNlbnRhIGxhIHBsYXRhZm9ybWEgbWF5b3JpdGFyaWEgZW4gcmVsYWNpw7NuIGFsIGVudmlvIGRlIG1lbnNhamVzIGNvbiBlbCBgciBkYXRvMWAlLiANCg0KUG9yIG90cmEgcGFydGUsIHRhbWJpZW4gZXMgcmVwcmVzZW50YXRpdm8gZGUgbGEgZWZlY3RpdmlkYWQgZGUgdW4gbWVuc2FqZSBlbCBkZW5vbWluYWRvIHJhdGlvIGRlIGxvcyB0d2VldHMuIENvbnNpc3RlIGVuIHVuIGPDoWxjdWxvIHF1ZSBlcyBiYXNpY2FtZW50ZSBlbCBjb2NpZW50ZSBlbnRyZSBsYSBjYW50aWRhZCBkZSByZXNwdWVzdGFzIGRlbCB0d2VldCB5IGxhIHN1bWEgZGVsIG7Dum1lcm8gZGUgZmF2cyB5IHJ0LiBEZSBlc3RhIG1hbmVyYSwgc2kgZWwgcmF0aW8gZXMgw6FsdG8gZXMgc2XDsWFsIGRlIHVuYSBtYWxhIGRpZnVzacOzbiBkZSBsb3MgbWVuc2FqZXMuDQoNCjxkaXYvPg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KQmFzZVJhdGlvc2VsIDwtIEJhc2VDICU+JSANCiAgc2VsZWN0KGlkLGRhdGUsdGltZSx0d2VldCxyZXBsaWVzX2NvdW50LCByZXR3ZWV0c19jb3VudCwgbGlrZXNfY291bnQpICU+JSANCiAgbXV0YXRlKGZlY2hhID0gYXMuRGF0ZShkYXRlKSkgJT4lIA0KICBtdXRhdGUocmF0aW8gPSByb3VuZChyZXBsaWVzX2NvdW50LyhyZXR3ZWV0c19jb3VudCArIGxpa2VzX2NvdW50KSwyKSwNCiAgICAgICAgIGxhYmVsID0gcmF0aW8pICU+JSANCiAgZmlsdGVyKHJldHdlZXRzX2NvdW50ICE9ICcwJyAmIGxpa2VzX2NvdW50ICE9ICcwJykNCg0KVGFibGFfNSA8LSBCYXNlUmF0aW9zZWwgJT4lIA0KICBzZWxlY3QoZmVjaGEscmF0aW8pICU+JSANCiAgYXJyYW5nZShmZWNoYSkNCg0KDQpHcmFmaWNvNSA8LSAgaGlnaGNoYXJ0KCkgJT4lIA0KICBoY190aXRsZSh0ZXh0PSJFdm9sdWNpw7NuIGRlIFJhdGlvIiklPiUNCiAgaGNfY2hhcnQodHlwZT0ibGluZSIpICU+JQ0KICBoY194QXhpcyhjYXRlZ29yaWVzID0gVGFibGFfNSRmZWNoYSkgJT4lDQogIGhjX2FkZF9zZXJpZXMoVGFibGFfNSRyYXRpbywgbmFtZT0iUmF0aW8iKSAlPiUgDQogIGhjX2NvbG9ycygiIzEyMmM5MSIpDQoNCkdyYWZpY281DQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpFbCBncsOhZmljbyBtdWVzdHJhIHVuYSBtdXkgYnVlbmEgcGVyZm9ybWFuY2UgZGUgbG9zIG1lbnNhamVzIGVtaXRpZG9zIHRlbmllbmRvIGVuIGN1ZW50YSBxdWUgbm8gc2Ugc3VwZXJhIGVsIDAsNSBkZSByYXRpby4gRXN0byBzaWduaWZpY2EgcXVlIGxvcyBtZW5zYWplcyBkZWwgUHJlc2lkZW50ZSB0dXZpZXJvbiBtZW5vcyByZXNwdWVzdGFzIGVuIGNvbXBhcmFjacOzbiBjb24gcmV0d2l0cyBvIGZhdnMuDQoNCjxkaXYvPg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpUYWJsYV82IDwtIEJhc2VSYXRpb3NlbCAlPiUgDQogIHNlbGVjdChmZWNoYSxyZXR3ZWV0c19jb3VudCkgJT4lIA0KICBncm91cF9ieShmZWNoYSkgJT4lIA0KICBzdW1tYXJpc2UoUlQ9c3VtKHJldHdlZXRzX2NvdW50KSkgJT4lIA0KICBhcnJhbmdlKGZlY2hhKQ0KDQoNCkdyYWZpY282IDwtICBoaWdoY2hhcnQoKSAlPiUgDQogIGhjX3RpdGxlKHRleHQ9IkV2b2x1Y2nDs24gZGUgUmV0d2VldHMiKSU+JQ0KICBoY19jaGFydCh0eXBlPSJsaW5lIikgJT4lDQogIGhjX3hBeGlzKGNhdGVnb3JpZXMgPSBUYWJsYV82JGZlY2hhKSAlPiUNCiAgaGNfYWRkX3NlcmllcyhUYWJsYV82JFJULCBuYW1lPSJSZXR3ZWV0cyIpICU+JSANCiAgaGNfY29sb3JzKCIjRDU1RTAwIikNCg0KR3JhZmljbzYNCmBgYA0KDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpUYWJsYV83IDwtIEJhc2VSYXRpb3NlbCAlPiUgDQogIHNlbGVjdChmZWNoYSxsaWtlc19jb3VudCkgJT4lIA0KICBncm91cF9ieShmZWNoYSkgJT4lIA0KICBzdW1tYXJpc2UoRkFWUz1zdW0obGlrZXNfY291bnQpKSAlPiUgDQogIGFycmFuZ2UoZmVjaGEpDQoNCg0KR3JhZmljbzcgPC0gIGhpZ2hjaGFydCgpICU+JSANCiAgaGNfdGl0bGUodGV4dD0iRXZvbHVjacOzbiBkZSBGYXZzIiklPiUNCiAgaGNfY2hhcnQodHlwZT0ibGluZSIpICU+JQ0KICBoY194QXhpcyhjYXRlZ29yaWVzID0gVGFibGFfNyRmZWNoYSkgJT4lDQogIGhjX2FkZF9zZXJpZXMoVGFibGFfNyRGQVZTLCBuYW1lPSJGYXZzIikgJT4lIA0KICBoY19jb2xvcnMoIiMwMDEyNDciKQ0KDQpHcmFmaWNvNw0KDQpgYGANCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQpBIGNvbnRpbnVhY2nDs24gc2UgbXVlc3RyYSBlbCBtZW5zYWplIG1hcyByZXR1aXRlYWRvIHkgZWwgbWFzIGZhdmVhZG8uDQo8ZGl2Lz4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0Kb3B0aW9ucyhzY2lwZW49OTk5KQ0KDQpNZW5zYWplTWFzUmV0dWl0ZWFkbyA8LSBCYXNlQyAlPiUgDQogIHNlbGVjdChpZCwgdHdlZXQsIHJldHdlZXRzX2NvdW50KSAlPiUgDQogIGFycmFuZ2UoZGVzYyhyZXR3ZWV0c19jb3VudCkpICU+JSANCiAgaGVhZCgxKQ0KDQpNZW5zYWplTWFzRmF2ZWFkbyA8LSBCYXNlQyAlPiUgDQogIHNlbGVjdChpZCwgdHdlZXQsIGxpa2VzX2NvdW50KSAlPiUgDQogIGFycmFuZ2UoZGVzYyhsaWtlc19jb3VudCkpICU+JSANCiAgaGVhZCgxKQ0KDQoNCmZhdiA8LSBNZW5zYWplTWFzRmF2ZWFkbyRpZA0KUlQgPC0gTWVuc2FqZU1hc1JldHVpdGVhZG8kaWQNCg0KIyBrYWJsZShNZW5zYWplTWFzRmF2ZWFkbywgYWxpZ24gPSAiciIpICU+JQ0KIyAgIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGLCBwb3NpdGlvbiA9ICJjZW50ZXIiKSANCiMgDQojIGthYmxlKE1lbnNhamVNYXNSZXR1aXRlYWRvLCBhbGlnbiA9ICJyIikgJT4lDQojICAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImNlbnRlciIpDQoNCmBgYA0KPGJyPg0KDQojIyMgVHdlZXQgY29uIG1heW9yIGNhbnRpZGFkIGRlIGZhdnMNCg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLG91dC53aWR0aCA9ICI4MDBweCIsIG91dC5oZWlnaHQ9IjUwMHB4IixmaWcuYWxpZ249J2xlZnQnfQ0KDQpsaWJyYXJ5KHR3ZWV0cm1kKQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygidHdlZXRmYXZzYWxiZXJ0by5qcGciKQ0KDQoNCg0KYGBgDQoNCg0KDQojIyMgVHdlZXQgY29uIG1heW9yIGNhbnRpZGFkIGRlIFJldHdlZXRzDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCnR3ZWV0X3NjcmVlbnNob3QodHdlZXRfdXJsKCJhbGZlcmRleiIsIFJUKSkNCg0KYGBgDQoNCiMjIE51YmUgZGUgcGFsYWJyYXMNCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQpVbmEgYnVlbmEgbWFuZXJhIGRlIHJlcHJlc2VudGFyIGxhcyBwYWxhYnJhcyB1dGlsaXphZGFzIGNvbnNpc3RlIGVuIGNvbmZvcm1hciBsYXMgbnViZXMgZGUgcGFsYWJyYXMgbyBiYWcgb2Ygd29yZHMuIEJhc2ljYW1lbnRlIHNlIHRyYXRhIGRlIHZpc3VhbGl6YXIgY3VhbGVzIHNvbiBsb3MgdMOpcm1pbm9zIGRlIG1heW9yIHVzbyBtb3N0cmFuZG8gc3UgcGVzbyBlbiByZWxhY2nDs24gYSBsb3Mgb3Ryb3MuDQoNCkVzdGEgZXMgbGEgbnViZSBkZSBwYWxhYnJhcyBkZWwgYcOxbyBlbiBUd2l0dGVyIGRlIEFsYmVydG8gRmVybsOhbmRleg0KDQo8ZGl2Lz4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCnBhbGFicmFzX2ludXRpbGVzIDwtIGMoJ3J0JywndScgLCd0LmNvJywgJ2h0dHBzJywgJ3RhbicsICdBbGJlcnRvJywgJ0Zlcm5hbmRleicsICdhbGJlcnRvJywgJ2Zlcm5hbmRleicsICdmZXJuw6FuZGV6JywgJ2NhZGEnKQ0KDQpCYXNlMSA8LSBhcy5kYXRhLmZyYW1lKEJhc2VDUykNCkJhc2UxJHR3ZWV0IDwtIGFzLmNoYXJhY3RlcihCYXNlMSR0d2VldCkNCg0KDQpCYXNlVG9rZW5zIDwtIEJhc2UxICU+JQ0KICBmaWx0ZXIocmV0d2VldD09IkZhbHNlIikgJT4lIA0KICB1bm5lc3RfdG9rZW5zKHBhbGFicmEsIHR3ZWV0KSAlPiUNCiAgICBjb3VudChwYWxhYnJhLCBzb3J0PVRSVUUpICU+JQ0KICAgIGZpbHRlcighcGFsYWJyYSVpbiVzdG9wd29yZHMoJ2VzJykpICU+JQ0KICAgIGZpbHRlcighcGFsYWJyYSVpbiVwYWxhYnJhc19pbnV0aWxlcykgJT4lDQogICAgZmlsdGVyKHN0cl9kZXRlY3QocGFsYWJyYSwgIl5bYS16QS16XXxeI3xeQCIpKSU+JQ0KICAgIGFycmFuZ2UoZGVzYyhuKSkgJT4lIA0KICAgIHJlbmFtZSgnd29yZCc9cGFsYWJyYSkNCg0Kd29yZGNsb3VkKEJhc2VUb2tlbnMkd29yZCxCYXNlVG9rZW5zJG4sc2NhbGU9Yyg0LC4xKSxyYW5kb20ub3JkZXI9RkFMU0UscmFuZG9tLmNvbG9yPVRSVUUscm90LnBlcj0wLjQsY29sb3JzPWJyZXdlci5wYWwoNywiRGFyazIiKSkNCg0KDQpgYGANCg0KDQojIyMgUGFsYWJyYXMgcG9zaXRpdmFzDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpCYXNlVG9rZW5zU0RBTCA8LSBsZWZ0X2pvaW4oQmFzZVRva2Vucywgc2RhbCkNCg0KVHdlZXRzUG9zIDwtIEJhc2VUb2tlbnNTREFMICU+JSANCiAgZmlsdGVyKCFpcy5uYShtZWRpYV9hZ3JhZG8pKSAlPiUNCiAgYXJyYW5nZShkZXNjKG1lZGlhX2FncmFkbyksIGRlc2MobikpDQogDQpUb2tlblBvcyA8LSBUd2VldHNQb3MgJT4lIA0KICBoZWFkKDEwMCkNCg0KDQp3b3JkY2xvdWQoVG9rZW5Qb3Mkd29yZCxUb2tlblBvcyRuLHNjYWxlPWMoNCwuMSkscmFuZG9tLm9yZGVyPUZBTFNFLHJhbmRvbS5jb2xvcj1UUlVFLHJvdC5wZXI9MC40LGNvbG9ycz1icmV3ZXIucGFsKDcsIkRhcmsyIikpDQpgYGANCg0KDQojIyMgUGFsYWJyYXMgbmVnYXRpdmFzDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpCYXNlVG9rZW5zU0RBTCA8LSBsZWZ0X2pvaW4oQmFzZVRva2Vucywgc2RhbCkNCiAgVHdlZXRzTmVnIDwtIEJhc2VUb2tlbnNTREFMICU+JSANCiAgZmlsdGVyKCFpcy5uYShtZWRpYV9hZ3JhZG8pKSAlPiUNCiAgYXJyYW5nZShtZWRpYV9hZ3JhZG8sIGRlc2MobikpDQogIA0KICANClRva2VuTmVnIDwtIFR3ZWV0c05lZyAlPiUgDQpoZWFkKDEwMCkNCg0KDQp3b3JkY2xvdWQoVG9rZW5OZWckd29yZCxUb2tlbk5lZyRuLHNjYWxlPWMoNCwuMSkscmFuZG9tLm9yZGVyPUZBTFNFLHJhbmRvbS5jb2xvcj1UUlVFLHJvdC5wZXI9MC40LGNvbG9ycz1icmV3ZXIucGFsKDcsIkRhcmsyIikpDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpMYXMgcGFsYWJyYXMgcG9zaXRpdmFzIGVzdMOhbiB2aW5jdWxhZGFzIGEgc2VudGltaWVudG9zIGRlIGNhcmnDsW8geSBzYWx1ZG9zLCBtaWVudHJhcyBxdWUgZW4gbGFzIG5lZ2F0aXZhcyBzZSBlbmN1ZW50cmEgImRpc3RhbmNpYSIgZGViaWRvIGEgbGFzIHJlY29tZW5kYWNpb25lcyBkZSBhaXNsYW1pZW50by4gIA0KIA0KPGRpdi8+DQoNCg0KIyMgRGlzY3Vyc29zDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KTHVlZ28gZGUgYW5hbGl6YXIgbG9zIHR3ZWV0cyBlbWl0aWRvcyBwb3IgZWwgUHJlc2lkZW50ZSwgbGxlZ2EgZWwgdHVybm8gZGUgdmVyIHF1ZSBkaWNlbiBzdXMgZGlzY3Vyc29zLiBUb21hcmVtb3MgbG9zIGRpc2N1cnNvcyBkZWwgZGlhIDEzLCAyMCB5IDMwIGRlIG1hcnpvLCBjb24gZWwgb2JqZXRpdm8gZGUgYW5hbGl6YXIgY3VhbGVzIHNvbiBsYXMgcGFsYWJyYXMgcXVlIGZ1ZXJvbiB0b21hbmRvIG1heW9yIHByb3RhZ29uaXNtby4gDQoNCjxkaXYvPg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0xldmFudGFtb3MgbG9zIGRpc2N1cnNvcw0KDQojdHJhYmFqYW1vcyBlbCBwcmltZXIgZGlzY3Vyc28NCg0KRGlzY3Vyc28xIDwtIHJlYWQudGFibGUoIkRpc2N1cnNvMTMtMDMudHh0Iiwgc2VwPSJcciIsIGVuY29kaW5nID0gIlVURi04IikNCg0KQmFzZUQxIDwtIGFzLmRhdGEuZnJhbWUoRGlzY3Vyc28xKQ0KQmFzZUQxJFYxIDwtIGFzLmNoYXJhY3RlcihCYXNlRDEkVjEpDQpwYWxhYnJhczEgPC0gQmFzZUQxICU+JSANCiAgdW5uZXN0X3Rva2VucyhwYWxhYnJhLCBWMSkgJT4lIA0KICBtdXRhdGUoRmVjaGEgPSAiMTMtMDMiKQ0KDQpjYW50ZDEgPC0gbnJvdyhwYWxhYnJhczEpDQoNCnBhbGFicmFzMS4xIDwtIHBhbGFicmFzMSAlPiUgDQpjb3VudChwYWxhYnJhLCBzb3J0PVRSVUUpICU+JQ0KICAgIGZpbHRlcighcGFsYWJyYSVpbiVzdG9wd29yZHMoJ2VzJykpICU+JQ0KICAgIGZpbHRlcighcGFsYWJyYSVpbiVwYWxhYnJhc19pbnV0aWxlcykgJT4lDQogICAgZmlsdGVyKHN0cl9kZXRlY3QocGFsYWJyYSwgIl5bYS16QS16XXxeI3xeQCIpKSU+JQ0KICAgIGFycmFuZ2UoZGVzYyhuKSkgJT4lIA0KICAgIHJlbmFtZSgnd29yZCc9cGFsYWJyYSklPiUgDQogICAgbXV0YXRlKEZlY2hhID0gIjEzLTAzIikNCg0KI3RyYWJhamFtb3MgZWwgc2VndW5kbyBkaXNjdXJzbw0KDQpEaXNjdXJzbzIgPC0gcmVhZC50YWJsZSgiRGlzY3Vyc28yMC0wMy50eHQiLCBzZXA9IlxyIiwgZW5jb2RpbmcgPSAiVVRGLTgiKQ0KDQpCYXNlRDIgPC0gYXMuZGF0YS5mcmFtZShEaXNjdXJzbzIpDQpCYXNlRDIkVjEgPC0gYXMuY2hhcmFjdGVyKEJhc2VEMiRWMSkNCnBhbGFicmFzMiA8LSBCYXNlRDIgJT4lIA0KICB1bm5lc3RfdG9rZW5zKHBhbGFicmEsIFYxKSAlPiUgDQogIG11dGF0ZShGZWNoYSA9ICIyMC0wMyIpDQoNCmNhbnRkMiA8LSBucm93KHBhbGFicmFzMikNCg0KcGFsYWJyYXMyLjEgPC0gcGFsYWJyYXMyICU+JSANCmNvdW50KHBhbGFicmEsIHNvcnQ9VFJVRSkgJT4lDQogICAgZmlsdGVyKCFwYWxhYnJhJWluJXN0b3B3b3JkcygnZXMnKSkgJT4lDQogICAgZmlsdGVyKCFwYWxhYnJhJWluJXBhbGFicmFzX2ludXRpbGVzKSAlPiUNCiAgICBmaWx0ZXIoc3RyX2RldGVjdChwYWxhYnJhLCAiXlthLXpBLXpdfF4jfF5AIikpJT4lDQogICAgYXJyYW5nZShkZXNjKG4pKSAlPiUgDQogICAgcmVuYW1lKCd3b3JkJz1wYWxhYnJhKSU+JSANCiAgICBtdXRhdGUoRmVjaGEgPSAiMjAtMDMiKQ0KDQojdHJhYmFqYW1vcyBlbCB0ZXJjZXIgZGlzY3Vyc28NCg0KRGlzY3Vyc28zIDwtIHJlYWQudGFibGUoIkRpc2N1cnNvMzAtMDMudHh0Iiwgc2VwPSJcciIsIGVuY29kaW5nID0gIlVURi04IikNCg0KQmFzZUQzIDwtIGFzLmRhdGEuZnJhbWUoRGlzY3Vyc28zKQ0KQmFzZUQzJFYxIDwtIGFzLmNoYXJhY3RlcihCYXNlRDMkVjEpDQpwYWxhYnJhczMgPC0gQmFzZUQzICU+JSANCiAgdW5uZXN0X3Rva2VucyhwYWxhYnJhLCBWMSkgJT4lIA0KICBtdXRhdGUoRmVjaGEgPSAiMzAtMDMiKQ0KDQpjYW50ZDMgPC0gbnJvdyhwYWxhYnJhczMpDQoNCnBhbGFicmFzMy4xIDwtIHBhbGFicmFzMyAlPiUgDQpjb3VudChwYWxhYnJhLCBzb3J0PVRSVUUpICU+JQ0KICAgIGZpbHRlcighcGFsYWJyYSVpbiVzdG9wd29yZHMoJ2VzJykpICU+JQ0KICAgIGZpbHRlcighcGFsYWJyYSVpbiVwYWxhYnJhc19pbnV0aWxlcykgJT4lDQogICAgZmlsdGVyKHN0cl9kZXRlY3QocGFsYWJyYSwgIl5bYS16QS16XXxeI3xeQCIpKSU+JQ0KICAgIGFycmFuZ2UoZGVzYyhuKSkgJT4lIA0KICAgIHJlbmFtZSgnd29yZCc9cGFsYWJyYSklPiUgDQogICAgbXV0YXRlKEZlY2hhID0gIjMwLTAzIikNCg0KDQojZ3JhZmljb3MgZGVzY3JpcHRpdm9zDQoNCmRpc2N1cnNvc3RvZG9zIDwtIHJiaW5kKHBhbGFicmFzMSxwYWxhYnJhczIscGFsYWJyYXMzKQ0KcGFsYWJyYXN0b2RvcyA8LSByYmluZChwYWxhYnJhczEuMSxwYWxhYnJhczIuMSxwYWxhYnJhczMuMSkNCg0KVGFibGFfOCA8LSBkaXNjdXJzb3N0b2RvcyAlPiUgDQogIHNlbGVjdChGZWNoYSkgJT4lIA0KICBncm91cF9ieShGZWNoYSkgJT4lIA0KICBzdW1tYXJpc2UocGFsYWJyYXM9bigpKSAlPiUgDQogIGFycmFuZ2UoRmVjaGEpDQoNCg0KR3JhZmljbzggPC0gIGhpZ2hjaGFydCgpICU+JSANCiAgaGNfdGl0bGUodGV4dD0iQ2FudGlkYWQgZGUgUGFsYWJyYXMiKSU+JQ0KICBoY19jaGFydCh0eXBlPSJiYXIiKSAlPiUNCiAgaGNfeEF4aXMoY2F0ZWdvcmllcyA9IFRhYmxhXzgkRmVjaGEpICU+JQ0KICBoY19hZGRfc2VyaWVzKFRhYmxhXzgkcGFsYWJyYXMsIG5hbWU9IlBhbGFicmFzIikgJT4lIA0KICBoY19jb2xvcnMoIiMzMTliOTUiKQ0KDQpHcmFmaWNvOA0KDQoNCmBgYA0KDQoNCkxhIGNhbnRpZGFkIGRlIHBhbGFicmFzIGVtaXRpZGFzIGNyZWNpw7MgY29uc2lkZXJhYmxlbWVudGUgZW4gcmVsYWNpw7NuIGFsIHByaW1lciBkaXNjdXJzby4gVmVhbW9zIGFob3JhIGxhcyBudWJlcyBkZSBwYWxhYnJhcyBkZSB0b2RvcyBsb3MgZGlzY3Vyc29zDQoNCiMjIyBEaXNjdXJzbyAxMy0wMw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQojbnViZSBkZSBwYWxhYnJhcyBkaXNjdXJzbyAxDQoNCndvcmRjbG91ZChwYWxhYnJhczEuMSR3b3JkLEJhc2VUb2tlbnMkbixzY2FsZT1jKDQsLjEpLHJhbmRvbS5vcmRlcj1GQUxTRSxyYW5kb20uY29sb3I9VFJVRSxyb3QucGVyPTAuNCxjb2xvcnM9YnJld2VyLnBhbCg3LCJEYXJrMiIpKQ0KDQoNCg0KYGBgDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpTZSBvYnNlcnZhIHVuYSBmdWVydGUgeSBsw7NnaWNhIHByZXNlbmNpYSBkZSBsYSBwYWxhYnJhICJDb3JvbmF2aXJ1cyIgYWwgaWd1YWwgcXVlICJwZXJzb25hcyIuIEVsIDIwIGRlIG1hcnpvLCBlbCBQcmVzaWRlbnRlIGRpw7MgaW5pY2lvIGZvcm1hbCBhIGxhIGN1YXJ0ZW50ZW5hIG9ibGlnYXRvcmlhLiBFc3RhcyBmdWVyb24gbGFzIHBhbGFicmFzIG3DoXMgdXRpbGl6YWRhcw0KDQo8ZGl2Lz4NCg0KIyMjIERpc2N1cnNvIDIwLTAzDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQojbnViZSBkZSBwYWxhYnJhcyBkaXNjdXJzbyAyDQoNCndvcmRjbG91ZChwYWxhYnJhczIuMSR3b3JkLEJhc2VUb2tlbnMkbixzY2FsZT1jKDQsLjEpLHJhbmRvbS5vcmRlcj1GQUxTRSxyYW5kb20uY29sb3I9VFJVRSxyb3QucGVyPTAuNCxjb2xvcnM9YnJld2VyLnBhbCg3LCJEYXJrMiIpKQ0KDQoNCmBgYA0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KVGFsIGN1YWwgc2UgYXByZWNpYSwgbGEgcGFsYWJyYSAiZWNvbm9tw61hIiBjb21pZW56YSBhIHRvbWFyIG1heW9yIHByb3RhZ29uaXNtby4gRWwgZGlhIDMwIGRlIG1hcnpvIHNlIHByb2xvbmfDsyBsYSBjdWFyZW50ZW5hLCBjb24gbG9zIHNpZ3VpZW50ZXMgdMOpcm1pbm9zLiANCg0KPGRpdi8+DQoNCiMjIyBEaXNjdXJzbyAzMC0wMw0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KDQoNCndvcmRjbG91ZChwYWxhYnJhczMuMSR3b3JkLEJhc2VUb2tlbnMkbixzY2FsZT1jKDQsLjEpLHJhbmRvbS5vcmRlcj1GQUxTRSxyYW5kb20uY29sb3I9VFJVRSxyb3QucGVyPTAuNCxjb2xvcnM9YnJld2VyLnBhbCg3LCJEYXJrMiIpKQ0KDQoNCg0KYGBgDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpFbiBlc3RlIMO6bHRpbW8gZGlzY3Vyc28sIGxhIHBhbGFicmEgcHJvdGFnb25pc3RhIGVzICJjdWFyZW50ZW5hIi4gVGFtYmllbiBwdWVkZSByZXN1bHRhciBzaWduaWZpY2F0aXZvIGV2YWx1YXIgZWwgcGVzbyBkZSBsYSBlY29ub21pYSB5IGxhIHNhbHVkIGVuIGNhZGEgdW5vIGRlIGxvcyBkaXNjdXJzb3MgYW5hbGl6YWRvcy4NCg0KPGRpdi8+DQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzkgPC0gcGFsYWJyYXN0b2RvcyAlPiUgDQogIGZpbHRlcih3b3JkICVpbiUgYygnc2FsdWQnLCdlY29ub23DrWEnKSkgJT4lIA0KICBhcnJhbmdlKEZlY2hhKSAlPiUgDQogIHNwcmVhZChrZXkgPSB3b3JkLHZhbHVlID0gbikNCg0KDQoNCkdyYWZpY285IDwtICBoaWdoY2hhcnQoKSAlPiUgDQogIGhjX3RpdGxlKHRleHQ9IkV2b2x1Y2nDs24gZGUgcGFsYWJyYXMgY2xhdmUiKSU+JQ0KICBoY19jaGFydCh0eXBlPSJjb2x1bW4iKSAlPiUNCiAgaGNfeEF4aXMoY2F0ZWdvcmllcyA9IFRhYmxhXzkkRmVjaGEpICU+JQ0KICBoY19hZGRfc2VyaWVzKFRhYmxhXzkkc2FsdWQsIG5hbWU9IlNhbHVkIiwgY29sb3IgPSAiIzJjNjk4ZCIgKSAlPiUgDQogIGhjX2FkZF9zZXJpZXMoVGFibGFfOSRlY29ub23DrWEsIG5hbWU9IkVjb25vbcOtYSIsIGNvbG9yID0gIiMyNzI2NDMiICkNCkdyYWZpY285DQoNCmBgYA0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KUHVlZGUgYXByZWNpYXJzZSBxdWUgbGEgcGFsYWJyYSAiZWNvbm9tw61hIiBubyBhcGFyZWNlIGVuIGVsIHByaW1lciBkaXNjdXJzbywgc2lubyBlbiBsb3Mgc2lndWllbnRlcy4NCg0KDQo8ZGl2Lz4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KI2xldmFudGFtb3MgYmFzZSBjb24gbWVuY2lvbmVzDQoNCmJhc2VoYXNoIDwtIHJlYWQuY3N2KCJ0d2VldHNBbGJlcnRvaGFzaC5jc3YiLCBlbmNvZGluZyA9ICJVVEYtOCIpDQoNCmNhbnQyIDwtIG5yb3coYmFzZWhhc2gpDQoNCg0KYGBgDQoNCiMjIE1lbmNpb25lcw0KDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpDZXJyYW1vcyBlbCBpbmZvcm1lIGNvbiB1biBicmV2ZSBhbsOhbGlzaXMgZGUgbGFzIG1lbmNpb25lcyBhIGxhIGN1ZW50YSBkZSBBbGJlcnRvIEZlcm5hbmRlei4gRXN0b3MgdHdlZXRzIHB1ZWRlbiBzZXIgcmVzcHVlc3RhcyBhIG1lbnNhamVzIGRlbCBQcmVzaWRlbnRlIGNvbW8gYXNpIHRhbWJpZW4gbWVuc2FqZXMgaGFjaWEgc3UgZmlndXJhLiBMYSBiYXNlIGRlIHRyYWJham8gY29udGllbmUgYHIgY2FudDJgIHR3ZWV0cyByZWNvbGVjdGFkb3MgZW50cmUgZWwgMTMgeSBlbCAxOSBkZSBtYXJ6by4NClZlYW1vcyBjb21vIHNlIGRpc3RyaWJ1eWUgZXN0YSBtdWVzdHJhIHNpIHRvbWFtb3MgZW4gY29uc2lkZXJhY2nDs24gZWwgZGlzcG9zaXRpdm8gcG9yIGVsIGN1YWwgZnVlcm9uIGVtaXRpZG9zIGxvcyBtZW5zYWplcy4NCg0KPGRpdi8+DQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzEwIDwtIGJhc2VoYXNoICU+JSANCiAgc2VsZWN0KHNvdXJjZSkgJT4lDQogIGdyb3VwX2J5KHNvdXJjZSkgJT4lDQogIHN1bW1hcmlzZSh0b3RhbCA9IG4oKSkgJT4lIA0KICBtdXRhdGUocHJvcCA9IHJvdW5kKCh0b3RhbC9zdW0odG90YWwpKjEwMCksMikpICU+JSANCiAgYXJyYW5nZSgtdG90YWwsIC1zb3VyY2UpICU+JSANCiAgaGVhZCg2KQ0KDQojIFBvcmNlbnRhamVpcGhvbmUgPC0gVGFibGFfMyAlPiUgDQojICAgc2VsZWN0KGRpc3AscHJvcCkgJT4lIA0KIyAgIGhlYWQoMSkgJT4lIA0KIyAgIHNlbGVjdChwcm9wKQ0KIyANCiMgZGF0bzEgPC0gUG9yY2VudGFqZWlwaG9uZSRwcm9wDQoNCg0KR3JhZmljbzEwIDwtICBoY2hhcnQoVGFibGFfMTAsICJ0cmVlbWFwIiwgaGNhZXMoeCA9IHNvdXJjZSwgdmFsdWUgPSB0b3RhbCwgY29sb3IgPSAgcHJvcCkpJT4lIA0KICBoY190aXRsZSh0ZXh0PSJDYW50aWRhZCBkZSB0d2VldHMgcG9yIGRpc3Bvc2l0aXZvIikNCg0KR3JhZmljbzEwDQoNCg0KYGBgDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpNYXMgZGVsIDYwICUgZGUgbG9zIG1lbnNhamVzIHJlY29sZWN0YWRvcyBmdWVyb24gZW1pdGlkb3MgZGVzZGUgdW4gZGlzcG9zaXRpdm8gQW5kcm9pZC4NCg0KVmVhbW9zIGFob3JhIGxhIG51YmUgZGUgcGFsYWJyYXMgZGUgZXN0b3MgbWVuc2FqZXMNCg0KPGRpdi8+DQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCnBhbGFicmFzX2ludXRpbGVzIDwtIGMoJ3J0JywndScgLCd0LmNvJywgJ2h0dHBzJywgJ3RhbicsICdBbGJlcnRvJywgJ0Zlcm5hbmRleicsICdhbGJlcnRvJywgJ2Zlcm5hbmRleicsICdmZXJuw6FuZGV6JywgJ2NhZGEnLCAnYWxmZXJkZXonLCAnbicsJ3MnLCdxJywnbScsJ2QnLCdlc3QnLCdhcycsJ2FsZmVyZGV6cHJlbnNhJywgJ2RhbnRlZm9yZXNpJykNCg0KYmFzZWhhc2ggPC0gYXMuZGF0YS5mcmFtZShiYXNlaGFzaCkNCmJhc2VoYXNoJHRleHQgPC0gYXMuY2hhcmFjdGVyKGJhc2VoYXNoJHRleHQpDQoNCg0KQmFzZVRva2VucyA8LSBiYXNlaGFzaCAlPiUNCiAgdW5uZXN0X3Rva2VucyhwYWxhYnJhLCB0ZXh0KSAlPiUNCiAgICBjb3VudChwYWxhYnJhLCBzb3J0PVRSVUUpICU+JQ0KICAgIGZpbHRlcighcGFsYWJyYSVpbiVzdG9wd29yZHMoJ2VzJykpICU+JQ0KICAgIGZpbHRlcighcGFsYWJyYSVpbiVwYWxhYnJhc19pbnV0aWxlcykgJT4lDQogICAgZmlsdGVyKHN0cl9kZXRlY3QocGFsYWJyYSwgIl5bYS16QS16XXxeI3xeQCIpKSU+JQ0KICAgIGFycmFuZ2UoZGVzYyhuKSkgJT4lIA0KICAgIHJlbmFtZSgnd29yZCc9cGFsYWJyYSkNCg0Kd29yZGNsb3VkKEJhc2VUb2tlbnMkd29yZCxCYXNlVG9rZW5zJG4sc2NhbGU9Yyg0LC4xKSxyYW5kb20ub3JkZXI9RkFMU0UscmFuZG9tLmNvbG9yPUZBTFNFLHJvdC5wZXI9MC40LGNvbG9ycz1icmV3ZXIucGFsKDcsIkRhcmsyIiksbWF4LndvcmRzID0gMTAwKQ0KDQoNCmBgYA0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KQSBjb250aW51YWNpw7NuLCBsYSBudWJlIGRlIHBhbGFicmFzIHBvc2l0aXZhcy4NCg0KPGRpdi8+DQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCkJhc2VUb2tlbnNTREFMMiA8LSBsZWZ0X2pvaW4oQmFzZVRva2Vucywgc2RhbCkNCg0KVHdlZXRzUG9zIDwtIEJhc2VUb2tlbnNTREFMMiAlPiUgDQogIGZpbHRlcighaXMubmEobWVkaWFfYWdyYWRvKSkgJT4lDQogIGFycmFuZ2UoZGVzYyhtZWRpYV9hZ3JhZG8pLCBkZXNjKG4pKQ0KIA0KVG9rZW5Qb3MgPC0gVHdlZXRzUG9zICU+JSANCiAgaGVhZCgxMDApDQoNCg0Kd29yZGNsb3VkKFRva2VuUG9zJHdvcmQsVG9rZW5Qb3MkbixzY2FsZT1jKDQsLjEpLHJhbmRvbS5vcmRlcj1GQUxTRSxyYW5kb20uY29sb3I9VFJVRSxyb3QucGVyPTAuNCxjb2xvcnM9YnJld2VyLnBhbCg3LCJEYXJrMiIpKQ0KDQpgYGANCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkEgY29udGludWFjacOzbiwgbGEgbnViZSBkZSBwYWxhYnJhcyBuZWdhdGl2YXMuDQoNCjxkaXYvPg0KDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCkJhc2VUb2tlbnNTREFMMiA8LSBsZWZ0X2pvaW4oQmFzZVRva2Vucywgc2RhbCkNCg0KVHdlZXRzTmVnIDwtIEJhc2VUb2tlbnNTREFMMiAlPiUgDQogIGZpbHRlcighaXMubmEobWVkaWFfYWdyYWRvKSkgJT4lDQogIGFycmFuZ2UobWVkaWFfYWdyYWRvLCBkZXNjKG4pKQ0KIA0KVG9rZW5OZWcgPC0gVHdlZXRzTmVnICU+JSANCiAgaGVhZCgxMDApDQoNCg0Kd29yZGNsb3VkKFRva2VuTmVnJHdvcmQsVG9rZW5OZWckbixzY2FsZT1jKDQsLjEpLHJhbmRvbS5vcmRlcj1GQUxTRSxyYW5kb20uY29sb3I9VFJVRSxyb3QucGVyPTAuNCxjb2xvcnM9YnJld2VyLnBhbCg3LCJEYXJrMiIpKQ0KDQpgYGANCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNClBhcmEgY2VycmFyLCBjbGFzaWZpY2FyZW1vcyB0b2RhcyBsYXMgcGFsYWJyYXMgZGUgZXN0YSByZWNvbGVjY2nDs24gY29uIGVsIGRpY2Npb25hcmlvIE5SQy4gRXN0ZSBkaWNjaW9uYXJpbyBjbGFzaWZpY2EgcGFsYWJyYXMgc2Vnw7puIHVuYSBtYXlvciBjYW50aWRhZCBkZSBzZW50aW1pZW50b3MuDQoNCjxkaXYvPg0KDQpgYGB7cn0NCiNjYXJnYSBkZSBkaWNjaW9uYXJpbyBOUkMNCmhhc2hucmNfZGF0YSA8LSBnZXRfbnJjX3NlbnRpbWVudChjaGFyX3YgPSBCYXNlVG9rZW5zJHdvcmQsIGxhbmd1YWdlID0gJ3NwYW5pc2gnKQ0KDQpoYXNobnJjX2RhdGEgPC0gaGFzaG5yY19kYXRhICU+JSANCiAgcmVuYW1lKCdhbnRpY2lwYWNpw7NuJz1hbnRpY2lwYXRpb24sDQogICAgICAgICAgICdpcmEnPWFuZ2VyLA0KICAgICAgICAgICAnZGlzZ3VzdG8nPWRpc2d1c3QsDQogICAgICAgICAgICdtaWVkbyc9ZmVhciwNCiAgICAgICAgICAgJ2FsZWdyw61hJz1qb3ksDQogICAgICAgICAgICd0cmlzdGV6YSc9c2FkbmVzcywNCiAgICAgICAgICAgJ3NvcnByZXNhJz1zdXJwcmlzZSwNCiAgICAgICAgICAgJ2NvbmZpYW56YSc9dHJ1c3QsDQogICAgICAgICAgICduZWdhdGl2YSc9bmVnYXRpdmUsDQogICAgICAgICAgICdwb3NpdGl2YSc9cG9zaXRpdmUpDQoNCiNNYW5pcHVsYWNpw7NuIGRlIGRhdGENCmJhc2VfZW1vY2lvbmhhc2ggPC0gZGF0YS5mcmFtZSh0KGhhc2hucmNfZGF0YSkpDQpiYXNlX2Vtb2Npb25oYXNoIDwtIGRhdGEuZnJhbWUocm93U3VtcyhiYXNlX2Vtb2Npb25oYXNoKSkNCm5hbWVzKGJhc2VfZW1vY2lvbmhhc2gpWzFdIDwtICJ0b3RhbCINCmJhc2VfZW1vY2lvbmhhc2ggPC0gY2JpbmQoJ3NlbnRpbWllbnRvJz1yb3duYW1lcyhiYXNlX2Vtb2Npb25oYXNoKSxiYXNlX2Vtb2Npb25oYXNoKQ0Kcm93bmFtZXMoYmFzZV9lbW9jaW9uaGFzaCkgPC0gTlVMTA0KDQojR3JhZmljYW1vcw0KIyBnZ3Bsb3QoYmFzZV9lbW9jaW9uaGFzaFsxOjgsXSwgYWVzKHggPSBzZW50aW1pZW50bywgeSA9IHJvdW5kKGN1ZW50YS9zdW0oY3VlbnRhKSoxMDAsIDEpLCBmaWxsID0gc2VudGltaWVudG8pKSArIA0KIyAgIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArDQojICAgbGFicyh0aXRsZT0nRWxlY2Npb25lcyBBbGJlcnRvIEZlcm5hbmRleiAtIFNlbnRpbWVudCBBbmFseXNpcyAoTlJDKScsDQojICAgICAgICBzdWJ0aXRsZSA9ICdUcmFiYWpvIEZpbmFsIFRhbGxlciBkZSBBbsOhbGlzaXMgZGUgVGV4dG8gZGVsIENQUycsDQojICAgICAgICBjYXB0aW9uPSdGdWVudGU6IFR3aXR0ZXInLA0KIyAgICAgICAgeCA9ICJTZW50aW1pZW50byIsIA0KIyAgICAgICAgeSA9ICJGcmVjdWVuY2lhIikgKw0KIyAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZShyb3VuZChjdWVudGEvc3VtKGN1ZW50YSkqMTAwLCAxKSwgJyUnKSksDQojICAgICAgICAgICAgIHZqdXN0ID0gMS41LCBjb2xvciA9ICJibGFjayIsDQojICAgICAgICAgICAgIHNpemUgPSA0KQ0KDQpiYXNlX2Vtb2Npb25oYXNoMiA8LSBiYXNlX2Vtb2Npb25oYXNoICU+JSANCiAgaGVhZCg4KSAlPiUgDQogIG11dGF0ZShjb2xvciA9IGNhc2Vfd2hlbihzZW50aW1pZW50byA9PSAibWllZG8ifiAiI2ZmNGQ0ZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50aW1pZW50byA9PSAiaXJhIn4gIiNmZjRkNGQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudGltaWVudG8gPT0gImRpc2d1c3RvIn4gIiNmZjRkNGQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudGltaWVudG8gPT0gInRyaXN0ZXphIn4gIiNmZjRkNGQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudGltaWVudG8gPT0gImFudGljaXBhY2nDs24ifiAiIzM2YjMzNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50aW1pZW50byA9PSAiYWxlZ3LDrWEifiAiIzM2YjMzNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50aW1pZW50byA9PSAic29ycHJlc2EifiAiIzM2YjMzNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50aW1pZW50byA9PSAiY29uZmlhbnphIn4gIiMzNmIzMzYiLCkpICU+JSANCiAgYXJyYW5nZSh0b3RhbCkgJT4lIA0KICBtdXRhdGUoIiUiID0gcm91bmQoKHRvdGFsL3N1bSh0b3RhbCkqMTAwKSwyKSkNCg0KeCA8LSBjKCJ0b3RhbCIsICIlIikNCnkgPC0gc3ByaW50Zigie3BvaW50LiVzfSIsIGMoInRvdGFsIiwgIiUiKSkNCnRsdGlwIDwtIHRvb2x0aXBfdGFibGUoeCwgeSkNCg0KR3JhZmljbzExIDwtICBoaWdoY2hhcnQoKSAlPiUgDQogIGhjX3RpdGxlKHRleHQ9IlNlbnRpbWllbnRvcyIpJT4lDQogICNoY19jaGFydCh0eXBlPSJjb2x1bW4iKSAlPiUNCiAgaGNfeEF4aXMoY2F0ZWdvcmllcyA9IGJhc2VfZW1vY2lvbmhhc2gyJHNlbnRpbWllbnRvKSAlPiUNCiAgaGNfYWRkX3NlcmllcyhiYXNlX2Vtb2Npb25oYXNoMiwiY29sdW1uIiwgaGNhZXMoYmFzZV9lbW9jaW9uaGFzaDIkc2VudGltaWVudG8sYmFzZV9lbW9jaW9uaGFzaDIkYCVgLCBjb2xvciA9IGJhc2VfZW1vY2lvbmhhc2gyJGNvbG9yKSwgbmFtZSA9ICJTZW50aW1pZW50b3MiKSAlPiUgDQogIGhjX3Rvb2x0aXAodXNlSFRNTCA9IFRSVUUsDQogICAgaGVhZGVyRm9ybWF0ID0gYXMuY2hhcmFjdGVyKHRhZ3Mkc21hbGwoIntwb2ludC54OiAlWSAlYn0iKSksDQogICAgcG9pbnRGb3JtYXQgPSB0bHRpcA0KICApDQoNCg0KDQpHcmFmaWNvMTENCg0KDQpgYGANCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkxhcyBwYWxhYnJhcyB2aW5jdWxhZGFzIGNvbiBlbCBzZW50aW1pZW50byBkZSBjb25maWFuemEgc29uIGxhcyBtYXlvcml0YXJpYXMuIA0KDQo8ZGl2Lz4NCg==