
Paso previo
Instalar paquetes y llamar librerías
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6 ✔ purrr 0.3.4
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.2.1 ✔ stringr 1.4.1
## ✔ readr 2.1.2 ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
#install.packages("gtrendsR")
library(gtrendsR)
Herramienta: “El generador de valor de datos”
Paso 1. Definir el área del negocio que buscamos
impactar o mejorar y su KPI.
Lo que se busca principalmente es poder revelar lo invisible dentro del
negocio que se desee, y ver los diferentes patrones de búsqueda dentro
de la variable de interés. En este caso nos enfocamos en el último caso:
BMW. Se queire trabajar con el departamento de
mercadotecnia y crecer las búsquedas y conocimiento de la marca en
México.
Paso 2. Seleccionar la plantilla (-s) para crear valor
a partir de los datos de los clientes.
Indicadores de búsqueda de BMW en México, en la web, desde el
2010.
Vision | Segmentacion | Personalización |
Contextualizacion
Paso 3. Generar ideas o conceptos
específicos.
Crear gráficas para conocer el nivel de interés en BMW en la ubicación y
el tiempo establecido.
Paso 4. Reunir los datos requeridos.
Mediante las librerías llamadas previamente, y lo que se quiere buscar,
cuándp y dónde.
Paso 5. Plan de ejecucion.
Hecho por el departamento de mercadotecnia:
1. Crear la gráfica de interés hacia BMW dentro de México.
2. Determinar las razones por las cuáles la marca había hecho
ruido anteriormente.
3. Buscar y diseñar estrategias para el tener un mayor interés por parte
de los mexicanos. ### Ejemplo visto en clase:
Paso1. Definir el término a buscar
Se ha escogido el COVID-19, fenómeno de salud que afectó al mundo
entero.
Paso2. Definir la ubicación (ISO3166-2)
Se ha escogido a México para ver la tendencia dee COVID-19.
Paso3. Definir el canal: web, news, images, youtube
Y la tendencia será definida a partir de las veces que se haya
buscado en la web.
Paso4. Definir la ventana de tiempo
Debido a que COVID-19 empezó en China en el 2019, se toma en cuenta
la fecha desde este año.
periodo<-("2019-01-01 2022-09-01")
Paso5. Función
Se aplica la función para conocer la tendencia de manera gráfica.
COVID19<-gtrends(termino,ubicacion,canal,time=periodo)
plot(COVID19)

Primer ejemplo propio:
Una modelo que he seguido por mucho
tiempo ha sido Kate Moss, por lo tanto, me resulta interesante
conocer como ha subido o bajado el interés por ella a través de los años
en México.

Paso previo
Instalar paquetes y llamar librerías
library(tidyverse)
#install.packages("gtrendsR")
library(gtrendsR)
Paso1. Definir el término a buscar
Se define el nombre de la persona que se tiene que buscar.
Paso2. Definir la ubicación (ISO3166-2)
Igualmente se escoge a México.
Paso3. Definir el canal: web, news, images, youtube
En la web.
Paso4. Definir la ventana de tiempo
Si bien, Kate Moss alcanzó su mayor fama en los noventas, el programa
no perrmite leer tan atras. Es por esto que se quiere ver desde mediados
de los 2000.
periodo<-("2005-01-01 2022-09-01")
Paso5. Función
Se aplica la función para conocer la tendencia de manera gráfica.
KateMoss<-gtrends(termino,ubicacion,canal,time=periodo)
plot(KateMoss)

Segundo ejemplo propio:
México es un país que siempre ha sido
globalmente importante en la industria de los automóviles; una marca que
ha estado presente en el país, y que personalmente me interesa, es
BMW.

Paso previo
Instalar paquetes y llamar librerías
library(tidyverse)
#install.packages("gtrendsR")
library(gtrendsR)
Paso1. Definir el término a buscar
Por gusto personal, se ha decidido buscar a BMW.
Paso2. Definir la ubicación (ISO3166-2)
Al tener una importante presencia en México, se seguirá
analizando.
Paso3. Definir el canal: web, news, images, youtube
En la web.
Paso4. Definir la ventana de tiempo
Se toma desde la última década.
periodo<-("2010-01-01 2022-09-01")
Paso5. Función
Se aplica la función para conocer la tendencia de manera gráfica.
BMW<-gtrends(termino,ubicacion,canal,time=periodo)
plot(BMW)
Choose a time series
See a plot
Conclusiones
Con el ejemplo visto en clase, el de la tendencia del COVID-19 a
partir del 2019 hasta septiembre desde este año. A partir de la gráfica,
observamos que los picos suben y bajan durante los meses, esto puede ser
debido a las olas del virus. Sin embargo, encontramos un
importante crecimiento a principios del 2022, pero a partir de ahí, bajó
y no ha vuelto a subir.
Pueden existir varias razones para esto, como lo son también las
olas o la incertidumbre de empezar un nuevo año.

Por otra parte, al analizar la tendencia que ha tenido Kate Moss,
debido a su larga trayectoria, nos enfocamos a observar desde el 2005.
En esto, vemos un pico importante entre el 2005 y el 2007
(aproximadamente), durante estos años ella pasó por una
tormentosa relación; esta puede ser una razón por la que se le ve una
mayor tendencia en la web en México.
Finalmente encontramos otro gran pico en el 2022, lo cual se da
principalmente al juicio de Johnny Depp (ex pareja) a la cual ella
asistió.

Ahora, hablando de BMW, es necesario un poco de contexto para
entender por qué creció tanto el interés en línea por BMW. A
partir de mi investigación y previo conocimiento de la marca, puedo
llegar a dos conclusiones de su razón:
1. La inauguración de la planta de BMW en San Luis Potosí, que a pesar
de no ser la primera, si resulta la más reciente de la marca
globalmente.
2.El debut del Serie 3 totalmente rediseñado. Este carro es el producto
insignia de la marca, su modelo mejor vendido y el carro que puso a la
marca en el mapa a nivel mundial. El hecho que un producto tan relevante
para la marca ahora sea fabricado en México causó gran interés.
Tomando en cuenta esta información proporcionada por el código y una
investigación externa, BMW podría seguir con el plan de ejecución
descrito en la herramienta: Generador de Valor de
Datos.

Personalmente, considero que este fue el código que más disfruté,
puesto que pude mezclar temas que me gustan con la programación;
mediante esta herramienta pude entender y ver cosas que antes no. Creo
que debido a la facilidad de usar el código, y como desde los últimos
años mucho se ha buscado en la web, podré utilizarla con más frecuencia
para más trabajos, mi futuro profesional, y hasta intereses propios
(como Kate Moss).
John Deere
Instalar paquetes y llamar librerías
library(tidyverse)
#install.packages("gtrendsR")
library(gtrendsR)
Primera gráfica
Primeramente, al buscar el nombre de la empresa se puede ver que
varía el interés en búsquedas dependiente del año y de la temporada. A
mediados del 2020 vemos que hubo un gran incremento en las busquedas,
pero que al momento va en descenso.
terminoJ<-c("John Deere")
ubicacionJ<-c("MX")
canalJ<-"web"
periodoJ<-("2017-01-01 2022-09-25")
JD<-gtrends(terminoJ,ubicacionJ,canalJ,time=periodoJ)
plot(JD)

Segunda gráfica
El producto “estrella”, y por el que John Deere es conocido, es por sus
tractores. Por lo tanto, se quiso buscar específicamente la marca con
esto, y al buscarlo en México, se busca en español. Se observan los
últimos 5 años, en donde su “pico” fue en finales del 2018, y que
después de esos cuatro años no ha habido un incremento en las búsquedas,
sino que bajó y ahí se ha mantenido más o menos estable.
terminoJ2<-c("John Deere Tractores")
ubicacionJ2<-c("MX")
canalJ2<-"web"
periodoJ2<-("2017-01-01 2022-09-25")
JD2<-gtrends(terminoJ2,ubicacionJ2,canalJ2,time=periodoJ2)
plot(JD2)

Tercera gráfica
En la última gráfica se puede observar el interés en John Deere,
específicamente en México. Este mismo tuve un pico de
interés en el público mexicano a principio del 2022. Resultaría
interesante conversar y analizar las posible razones para el creciente
interés durante los primeros meses del año.
terminoJ3<-c("John Deere México")
ubicacionJ3<-c("MX")
canalJ3<-"web"
periodoJ3<-("2017-01-01 2022-09-25")
JD3<-gtrends(terminoJ3,ubicacionJ3,canalJ3,time=periodoJ3)
plot(JD3)

OXXO
Instalar paquetes y llamar librerías
library(tidyverse)
#install.packages("gtrendsR")
library(gtrendsR)
Primera gráfica
La primera gráfica pretende demostrar el interés del público mexicano
en Oxxo en la web. En esta observamos los últimos diez años, en donde
vemos una tendencia positiva, o bien, subiendo las busquedas.
Igualmente, vemos como hubo un gran incremento en el interés en los
últimos meses del 2015 y a mediados del 2016. Resultaría interesante
conocer que sucedió en estos años que ocasionó este interés en el
público.
terminoO<-c("Oxxo")
ubicacionO<-c("MX")
canalO<-"web"
periodoO<-("2012-01-01 2022-09-25")
OXXO<-gtrends(terminoO,ubicacionO,canalO,time=periodoO)
plot(OXXO)

Segunda gráfica
Siguiendo con la segunda gráfica, también tomamos en cuenta el
término “Oxxo” durante los últimos 10 años, pero ahora viendo el interés
en las imágenes. Aquí mismo podemos ver como el interés va creciendo al
pasar de la década; sin embargo esta con un menor nivel. Lo que vemos
diferente a las que fueron buscadas en la “web” es que solo existe un
“pico” en esta gráfica, presentándose (igualmente) a mediados del
2016.
terminoO2<-c("Oxxo")
ubicacionO2<-c("MX")
canalO2<-"images"
periodoO2<-("2012-01-01 2022-09-25")
OXXO2<-gtrends(terminoO2,ubicacionO2,canalO2,time=periodoO2)
plot(OXXO2)

Tercera gráfica
Finalmente, vemos la tendencia de las noticias de Oxxo en los últimos
días años. En esta vemos como existe una tendencia, también, hacia
arriba, pero con muchos más cambios a través de los meses. Obsveramos
como antes del 2016 Oxxo no estaba muy presente en las noticias de los
mexicanos, sin embargo, como vimos anteriormente, un suceso a mediados
del 2016 hizo que el interés creciera de gran manera. De ahí, vemos
otros “picos” a principios del 2019 y a mediados del 2022. Resultaróia
interesante que el equipo de MKT pudiera observar lo sucedido en el 2016
para ver QUE pasó que causó tanto interés en el público mexicano.
terminoO3<-c("Oxxo")
ubicacionO3<-c("MX")
canalO3<-"news"
periodoO3<-("2012-01-01 2022-09-25")
OXXO3<-gtrends(terminoO3,ubicacionO3,canalO3,time=periodoO3)
plot(OXXO3)

LS0tCnRpdGxlOiA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4qKlRlbmRlbmNpYXMgR2xvYmFsZXMqKgphdXRob3I6ICJFbGVuYVZlbGFfQTAxMjgzNTM1IgpkYXRlOiAiMjAyMi0wOS0wNyIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRoZW1lOiB1bml0ZWQKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgo8aW1nIHNyYz0iL1VzZXJzL2VsZW5hdmVsYS9Eb3dubG9hZHMvdHJlbmRzcy5qcGVnIj4KCmBgYHtyfQojZmlsZS5jaG9vc2UoKQpgYGAKCgojIyMjIFBhc28gcHJldmlvCkluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXMKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKI2luc3RhbGwucGFja2FnZXMoImd0cmVuZHNSIikKbGlicmFyeShndHJlbmRzUikKYGBgCgoKIyMjIyBIZXJyYW1pZW50YTogIkVsIGdlbmVyYWRvciBkZSB2YWxvciBkZSBkYXRvcyIKKioqUGFzbyAxLiogRGVmaW5pciBlbCDDoXJlYSBkZWwgbmVnb2NpbyBxdWUgYnVzY2Ftb3MgaW1wYWN0YXIgbyBtZWpvcmFyIHkgc3UgS1BJLioqICAgCkxvIHF1ZSBzZSBidXNjYSBwcmluY2lwYWxtZW50ZSBlcyBwb2RlciByZXZlbGFyIGxvIGludmlzaWJsZSBkZW50cm8gZGVsIG5lZ29jaW8gcXVlIHNlIGRlc2VlLCB5IHZlciBsb3MgZGlmZXJlbnRlcyBwYXRyb25lcyBkZSBiw7pzcXVlZGEgZGVudHJvIGRlIGxhIHZhcmlhYmxlIGRlIGludGVyw6lzLiBFbiBlc3RlIGNhc28gbm9zIGVuZm9jYW1vcyBlbiBlbCDDumx0aW1vIGNhc286ICoqQk1XKiouIFNlIHF1ZWlyZSB0cmFiYWphciBjb24gZWwgZGVwYXJ0YW1lbnRvIGRlIG1lcmNhZG90ZWNuaWEgeSBjcmVjZXIgbGFzIGLDunNxdWVkYXMgeSBjb25vY2ltaWVudG8gZGUgbGEgbWFyY2EgZW4gTcOpeGljby4gIAoqKipQYXNvIDIuKiBTZWxlY2Npb25hciBsYSBwbGFudGlsbGEgKC1zKSBwYXJhIGNyZWFyIHZhbG9yIGEgcGFydGlyIGRlIGxvcyBkYXRvcyBkZSBsb3MgY2xpZW50ZXMuKiogIApJbmRpY2Fkb3JlcyBkZSBiw7pzcXVlZGEgZGUgQk1XIGVuIE3DqXhpY28sIGVuIGxhIHdlYiwgZGVzZGUgZWwgMjAxMC4gIAoqKipWaXNpb24qKiogIHwgU2VnbWVudGFjaW9uIHwgUGVyc29uYWxpemFjacOzbiB8IENvbnRleHR1YWxpemFjaW9uICAgCioqKlBhc28gMy4qIEdlbmVyYXIgaWRlYXMgbyBjb25jZXB0b3MgZXNwZWPDrWZpY29zLioqICAKQ3JlYXIgZ3LDoWZpY2FzIHBhcmEgY29ub2NlciBlbCBuaXZlbCBkZSBpbnRlcsOpcyBlbiBCTVcgZW4gbGEgdWJpY2FjacOzbiB5IGVsIHRpZW1wbyBlc3RhYmxlY2lkby4gIAoqKipQYXNvIDQuKiBSZXVuaXIgbG9zIGRhdG9zIHJlcXVlcmlkb3MuKiogICAKTWVkaWFudGUgbGFzIGxpYnJlcsOtYXMgbGxhbWFkYXMgcHJldmlhbWVudGUsIHkgbG8gcXVlIHNlIHF1aWVyZSBidXNjYXIsIGN1w6FuZHAgeSBkw7NuZGUuICAKKioqUGFzbyA1LiogUGxhbiBkZSBlamVjdWNpb24uKiogIApIZWNobyBwb3IgZWwgZGVwYXJ0YW1lbnRvIGRlIG1lcmNhZG90ZWNuaWE6ICAKMS4gQ3JlYXIgbGEgZ3LDoWZpY2EgZGUgaW50ZXLDqXMgaGFjaWEgQk1XIGRlbnRybyBkZSBNw6l4aWNvLiAgCjIuIERldGVybWluYXIgbGFzIHJhem9uZXMgcG9yIGxhcyBjdcOhbGVzIGxhIG1hcmNhIGhhYsOtYSBoZWNobyAqcnVpZG8qIGFudGVyaW9ybWVudGUuICAKMy4gQnVzY2FyIHkgIGRpc2XDsWFyIGVzdHJhdGVnaWFzIHBhcmEgZWwgdGVuZXIgdW4gbWF5b3IgaW50ZXLDqXMgcG9yIHBhcnRlIGRlIGxvcyBtZXhpY2Fub3MuIAojIyMgRWplbXBsbyB2aXN0byBlbiBjbGFzZToKCiMjIyMgUGFzbzEuIERlZmluaXIgZWwgdMOpcm1pbm8gYSBidXNjYXIgIApTZSBoYSBlc2NvZ2lkbyBlbCBDT1ZJRC0xOSwgZmVuw7NtZW5vIGRlIHNhbHVkIHF1ZSBhZmVjdMOzIGFsIG11bmRvIGVudGVyby4gCmBgYHtyfQp0ZXJtaW5vPC1jKCJDT1ZJRC0xOSIpCmBgYAoKIyMjIyBQYXNvMi4gRGVmaW5pciBsYSB1YmljYWNpw7NuIChJU08zMTY2LTIpICAKU2UgaGEgZXNjb2dpZG8gYSBNw6l4aWNvIHBhcmEgdmVyIGxhIHRlbmRlbmNpYSBkZWUgQ09WSUQtMTkuCmBgYHtyfQp1YmljYWNpb248LWMoIk1YIikKYGBgCgoKIyMjIyBQYXNvMy4gRGVmaW5pciBlbCBjYW5hbDogd2ViLCBuZXdzLCBpbWFnZXMsIHlvdXR1YmUgIApZIGxhIHRlbmRlbmNpYSBzZXLDoSBkZWZpbmlkYSBhIHBhcnRpciBkZSBsYXMgdmVjZXMgcXVlIHNlIGhheWEgYnVzY2FkbyBlbiBsYSB3ZWIuIApgYGB7cn0KY2FuYWw8LSJ3ZWIiCmBgYAoKCiMjIyMgUGFzbzQuIERlZmluaXIgbGEgdmVudGFuYSBkZSB0aWVtcG8KRGViaWRvIGEgcXVlIENPVklELTE5IGVtcGV6w7MgZW4gQ2hpbmEgZW4gZWwgMjAxOSwgc2UgdG9tYSBlbiBjdWVudGEgbGEgZmVjaGEgZGVzZGUgZXN0ZSBhw7FvLiAKYGBge3J9CnBlcmlvZG88LSgiMjAxOS0wMS0wMSAyMDIyLTA5LTAxIikKYGBgCgoKIyMjIyBQYXNvNS4gRnVuY2nDs24gClNlIGFwbGljYSBsYSBmdW5jacOzbiBwYXJhIGNvbm9jZXIgbGEgdGVuZGVuY2lhIGRlIG1hbmVyYSBncsOhZmljYS4gCgpgYGB7cn0KQ09WSUQxOTwtZ3RyZW5kcyh0ZXJtaW5vLHViaWNhY2lvbixjYW5hbCx0aW1lPXBlcmlvZG8pCnBsb3QoQ09WSUQxOSkKYGBgCgoKCiMjIyBQcmltZXIgZWplbXBsbyBwcm9waW86CjxzcGFuIHN0eWxlPSJjb2xvcjpwaW5rIj4qKlVuYSBtb2RlbG8gcXVlIGhlIHNlZ3VpZG8gcG9yIG11Y2hvIHRpZW1wbyBoYSBzaWRvICpLYXRlIE1vc3MqLCBwb3IgbG8gdGFudG8sIG1lIHJlc3VsdGEgaW50ZXJlc2FudGUgY29ub2NlciBjb21vICBoYSBzdWJpZG8gbyBiYWphZG8gZWwgaW50ZXLDqXMgcG9yIGVsbGEgYSB0cmF2w6lzIGRlIGxvcyBhw7FvcyBlbiBNw6l4aWNvLioqPC9zcGFuPgoKPGltZyBzcmM9Ii9Vc2Vycy9lbGVuYXZlbGEvRG93bmxvYWRzL2thdGVtb3NzLmpwZWciPgoKIyMjIyBQYXNvIHByZXZpbwpJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKI2luc3RhbGwucGFja2FnZXMoImd0cmVuZHNSIikKbGlicmFyeShndHJlbmRzUikKYGBgCgojIyMjIFBhc28xLiBEZWZpbmlyIGVsIHTDqXJtaW5vIGEgYnVzY2FyClNlIGRlZmluZSBlbCBub21icmUgZGUgbGEgcGVyc29uYSBxdWUgc2UgdGllbmUgcXVlIGJ1c2Nhci4gCmBgYHtyfQp0ZXJtaW5vPC1jKCJLYXRlIE1vc3MiKQpgYGAKCiMjIyMgUGFzbzIuIERlZmluaXIgbGEgdWJpY2FjacOzbiAoSVNPMzE2Ni0yKQpJZ3VhbG1lbnRlIHNlIGVzY29nZSBhIE3DqXhpY28uCmBgYHtyfQp1YmljYWNpb248LWMoIk1YIikKYGBgCgoKIyMjIyBQYXNvMy4gRGVmaW5pciBlbCBjYW5hbDogd2ViLCBuZXdzLCBpbWFnZXMsIHlvdXR1YmUKRW4gbGEgd2ViLiAKYGBge3J9CmNhbmFsPC0id2ViIgpgYGAKCgojIyMjIFBhc280LiBEZWZpbmlyIGxhIHZlbnRhbmEgZGUgdGllbXBvClNpIGJpZW4sIEthdGUgTW9zcyBhbGNhbnrDsyBzdSBtYXlvciBmYW1hIGVuIGxvcyBub3ZlbnRhcywgZWwgcHJvZ3JhbWEgbm8gcGVycm1pdGUgbGVlciB0YW4gYXRyYXMuIEVzIHBvciBlc3RvICBxdWUgc2UgcXVpZXJlIHZlciBkZXNkZSBtZWRpYWRvcyBkZSBsb3MgMjAwMC4gCmBgYHtyfQpwZXJpb2RvPC0oIjIwMDUtMDEtMDEgMjAyMi0wOS0wMSIpCmBgYAoKCiMjIyMgUGFzbzUuIEZ1bmNpw7NuIApTZSBhcGxpY2EgbGEgZnVuY2nDs24gcGFyYSBjb25vY2VyIGxhIHRlbmRlbmNpYSBkZSBtYW5lcmEgZ3LDoWZpY2EuIApgYGB7cn0KS2F0ZU1vc3M8LWd0cmVuZHModGVybWlubyx1YmljYWNpb24sY2FuYWwsdGltZT1wZXJpb2RvKQpwbG90KEthdGVNb3NzKQpgYGAKCgoKIyMjIFNlZ3VuZG8gZWplbXBsbyBwcm9waW86CjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPioqTcOpeGljbyBlcyB1biBwYcOtcyBxdWUgc2llbXByZSBoYSBzaWRvIGdsb2JhbG1lbnRlIGltcG9ydGFudGUgZW4gbGEgaW5kdXN0cmlhIGRlIGxvcyBhdXRvbcOzdmlsZXM7IHVuYSBtYXJjYSBxdWUgaGEgZXN0YWRvIHByZXNlbnRlIGVuIGVsIHBhw61zLCB5IHF1ZSBwZXJzb25hbG1lbnRlIG1lIGludGVyZXNhLCBlcyAqQk1XKi4qKjwvc3Bhbj4KCjxpbWcgc3JjPSIvVXNlcnMvZWxlbmF2ZWxhL0Rvd25sb2Fkcy9ibXcuanBlZyI+CgojIyMjIFBhc28gcHJldmlvCkluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXMKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQojaW5zdGFsbC5wYWNrYWdlcygiZ3RyZW5kc1IiKQpsaWJyYXJ5KGd0cmVuZHNSKQpgYGAKCiMjIyMgUGFzbzEuIERlZmluaXIgZWwgdMOpcm1pbm8gYSBidXNjYXIKUG9yIGd1c3RvIHBlcnNvbmFsLCBzZSBoYSBkZWNpZGlkbyBidXNjYXIgYSBCTVcuIApgYGB7cn0KdGVybWlubzwtYygiQk1XIikKYGBgCgojIyMjIFBhc28yLiBEZWZpbmlyIGxhIHViaWNhY2nDs24gKElTTzMxNjYtMikKQWwgdGVuZXIgdW5hICBpbXBvcnRhbnRlIHByZXNlbmNpYSBlbiBNw6l4aWNvLCBzZSBzZWd1aXLDoSBhbmFsaXphbmRvLiAKYGBge3J9CnViaWNhY2lvbjwtYygiTVgiKQpgYGAKCgojIyMjIFBhc28zLiBEZWZpbmlyIGVsIGNhbmFsOiB3ZWIsIG5ld3MsIGltYWdlcywgeW91dHViZQpFbiBsYSB3ZWIuIApgYGB7cn0KY2FuYWw8LSJ3ZWIiCmBgYAoKCiMjIyMgUGFzbzQuIERlZmluaXIgbGEgdmVudGFuYSBkZSB0aWVtcG8KU2UgdG9tYSBkZXNkZSBsYSDDumx0aW1hIGTDqWNhZGEuIApgYGB7cn0KcGVyaW9kbzwtKCIyMDEwLTAxLTAxIDIwMjItMDktMDEiKQpgYGAKCgojIyMjIFBhc281LiBGdW5jacOzbiAKU2UgYXBsaWNhIGxhIGZ1bmNpw7NuIHBhcmEgY29ub2NlciBsYSB0ZW5kZW5jaWEgZGUgbWFuZXJhIGdyw6FmaWNhLiAKYGBge3J9CkJNVzwtZ3RyZW5kcyh0ZXJtaW5vLHViaWNhY2lvbixjYW5hbCx0aW1lPXBlcmlvZG8pCnBsb3QoQk1XKQpgYGAKQ2hvb3NlIGEgdGltZSBzZXJpZXMKYGBge3IgZWNobyA9IEZBTFNFfQojc2VsZWN0SW5wdXQoImRhdGEiLCIiLAojICBjKCJDT1ZJRDE5IiwgIkthdGVNb3NzIiwgIkJNVyIpKQpgYGAKCgpTZWUgYSBwbG90CmBgYHtyIGVjaG8gPSBGQUxTRX0KI3JlbmRlclBsb3QoewojICBkIDwtIGdldChpbnB1dCRkYXRhKQojcGxvdChkKSB9KQoKYGBgCgojIyMgQ29uY2x1c2lvbmVzCgpDb24gZWwgZWplbXBsbyB2aXN0byBlbiBjbGFzZSwgZWwgZGUgbGEgdGVuZGVuY2lhIGRlbCBDT1ZJRC0xOSBhIHBhcnRpciBkZWwgMjAxOSBoYXN0YSBzZXB0aWVtYnJlIGRlc2RlIGVzdGUgYcOxby4gQSBwYXJ0aXIgZGUgbGEgZ3LDoWZpY2EsIG9ic2VydmFtb3MgcXVlIGxvcyBwaWNvcyBzdWJlbiB5IGJhamFuIGR1cmFudGUgbG9zIG1lc2VzLCBlc3RvIHB1ZWRlIHNlciBkZWJpZG8gYSBsYXMgKm9sYXMqIGRlbCB2aXJ1cy4gU2luIGVtYmFyZ28sIGVuY29udHJhbW9zIHVuIGltcG9ydGFudGUgY3JlY2ltaWVudG8gYSBwcmluY2lwaW9zIGRlbCAyMDIyLCBwZXJvIGEgcGFydGlyIGRlIGFow60sIGJhasOzIHkgbm8gaGEgdnVlbHRvIGEgc3ViaXIuICAKClB1ZWRlbiBleGlzdGlyIHZhcmlhcyByYXpvbmVzIHBhcmEgZXN0bywgY29tbyBsbyBzb24gdGFtYmnDqW4gbGFzICpvbGFzKiBvIGxhIGluY2VydGlkdW1icmUgZGUgZW1wZXphciB1biBudWV2byBhw7FvLiAKCjxpbWcgc3JjPSIvVXNlcnMvZWxlbmF2ZWxhL0Rvd25sb2Fkcy90cmVuZGluZy5naWYiPiAgCgoKUG9yIG90cmEgcGFydGUsIGFsIGFuYWxpemFyIGxhIHRlbmRlbmNpYSBxdWUgaGEgdGVuaWRvIEthdGUgTW9zcywgZGViaWRvIGEgc3UgbGFyZ2EgdHJheWVjdG9yaWEsIG5vcyBlbmZvY2Ftb3MgYSBvYnNlcnZhciBkZXNkZSBlbCAyMDA1LiBFbiBlc3RvLCB2ZW1vcyB1biBwaWNvIGltcG9ydGFudGUgZW50cmUgZWwgMjAwNSB5IGVsIDIwMDcgKCphcHJveGltYWRhbWVudGUqKSwgZHVyYW50ZSBlc3RvcyBhw7FvcyBlbGxhIHBhc8OzIHBvciB1bmEgdG9ybWVudG9zYSByZWxhY2nDs247IGVzdGEgcHVlZGUgc2VyIHVuYSByYXrDs24gcG9yIGxhIHF1ZSBzZSBsZSB2ZSB1bmEgbWF5b3IgdGVuZGVuY2lhIGVuIGxhIHdlYiBlbiBNw6l4aWNvLiAgCgpGaW5hbG1lbnRlIGVuY29udHJhbW9zIG90cm8gZ3JhbiBwaWNvIGVuIGVsIDIwMjIsIGxvIGN1YWwgc2UgZGEgcHJpbmNpcGFsbWVudGUgYWwganVpY2lvIGRlIEpvaG5ueSBEZXBwIChleCBwYXJlamEpIGEgbGEgY3VhbCBlbGxhIGFzaXN0acOzLiAgCgo8aW1nIHNyYz0iL1VzZXJzL2VsZW5hdmVsYS9Eb3dubG9hZHMva2F0ZS5naWYiPiAgCgoKQWhvcmEsIGhhYmxhbmRvIGRlIEJNVywgZXMgbmVjZXNhcmlvIHVuIHBvY28gZGUgY29udGV4dG8gcGFyYSBlbnRlbmRlciAqcG9yIHF1w6kqIGNyZWNpw7MgdGFudG8gZWwgaW50ZXLDqXMgZW4gbMOtbmVhIHBvciBCTVcuIEEgcGFydGlyIGRlIG1pIGludmVzdGlnYWNpw7NuIHkgcHJldmlvIGNvbm9jaW1pZW50byBkZSBsYSBtYXJjYSwgcHVlZG8gbGxlZ2FyIGEgZG9zIGNvbmNsdXNpb25lcyBkZSBzdSByYXrDs246ICAKMS4gTGEgaW5hdWd1cmFjacOzbiBkZSBsYSBwbGFudGEgZGUgQk1XIGVuIFNhbiBMdWlzIFBvdG9zw60sIHF1ZSBhIHBlc2FyIGRlIG5vIHNlciBsYSBwcmltZXJhLCBzaSByZXN1bHRhIGxhIG3DoXMgcmVjaWVudGUgZGUgbGEgbWFyY2EgZ2xvYmFsbWVudGUuICAKMi5FbCBkZWJ1dCBkZWwgU2VyaWUgMyB0b3RhbG1lbnRlIHJlZGlzZcOxYWRvLiBFc3RlIGNhcnJvIGVzIGVsIHByb2R1Y3RvIGluc2lnbmlhIGRlIGxhIG1hcmNhLCBzdSBtb2RlbG8gbWVqb3IgdmVuZGlkbyB5IGVsIGNhcnJvIHF1ZSBwdXNvIGEgbGEgbWFyY2EgZW4gZWwgbWFwYSBhIG5pdmVsIG11bmRpYWwuIEVsIGhlY2hvIHF1ZSB1biBwcm9kdWN0byB0YW4gcmVsZXZhbnRlIHBhcmEgbGEgbWFyY2EgYWhvcmEgc2VhIGZhYnJpY2FkbyBlbiBNw6l4aWNvIGNhdXPDsyBncmFuIGludGVyw6lzLiAgCgpUb21hbmRvIGVuIGN1ZW50YSBlc3RhIGluZm9ybWFjacOzbiBwcm9wb3JjaW9uYWRhIHBvciBlbCBjw7NkaWdvIHkgdW5hIGludmVzdGlnYWNpw7NuIGV4dGVybmEsIEJNVyBwb2Ryw61hIHNlZ3VpciBjb24gZWwgcGxhbiBkZSBlamVjdWNpw7NuIGRlc2NyaXRvIGVuIGxhIGhlcnJhbWllbnRhOiAqKkdlbmVyYWRvciBkZSBWYWxvciBkZSBEYXRvcy4qKiAgCgo8aW1nIHNyYz0iL1VzZXJzL2VsZW5hdmVsYS9Eb3dubG9hZHMvc2VyaWUzLmdpZiI+ICAKClBlcnNvbmFsbWVudGUsIGNvbnNpZGVybyBxdWUgZXN0ZSBmdWUgZWwgY8OzZGlnbyBxdWUgbcOhcyBkaXNmcnV0w6ksIHB1ZXN0byBxdWUgcHVkZSBtZXpjbGFyIHRlbWFzIHF1ZSBtZSBndXN0YW4gY29uIGxhIHByb2dyYW1hY2nDs247IG1lZGlhbnRlIGVzdGEgaGVycmFtaWVudGEgcHVkZSBlbnRlbmRlciB5IHZlciBjb3NhcyBxdWUgYW50ZXMgbm8uIENyZW8gcXVlIGRlYmlkbyBhIGxhIGZhY2lsaWRhZCBkZSB1c2FyIGVsIGPDs2RpZ28sIHkgY29tbyBkZXNkZSBsb3Mgw7psdGltb3MgYcOxb3MgbXVjaG8gc2UgaGEgYnVzY2FkbyBlbiBsYSB3ZWIsIHBvZHLDqSB1dGlsaXphcmxhIGNvbiBtw6FzIGZyZWN1ZW5jaWEgcGFyYSBtw6FzIHRyYWJham9zLCBtaSBmdXR1cm8gcHJvZmVzaW9uYWwsIHkgaGFzdGEgaW50ZXJlc2VzIHByb3Bpb3MgKGNvbW8gS2F0ZSBNb3NzKS4KCgoKCiMjIyAqKkpvaG4gRGVlcmUqKgoKSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcwoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQojaW5zdGFsbC5wYWNrYWdlcygiZ3RyZW5kc1IiKQpsaWJyYXJ5KGd0cmVuZHNSKQpgYGAKCioqUHJpbWVyYSBncsOhZmljYSoqICAKClByaW1lcmFtZW50ZSwgYWwgYnVzY2FyIGVsIG5vbWJyZSBkZSBsYSBlbXByZXNhIHNlIHB1ZWRlIHZlciBxdWUgdmFyw61hIGVsIGludGVyw6lzIGVuIGLDunNxdWVkYXMgZGVwZW5kaWVudGUgZGVsIGHDsW8geSBkZSBsYSB0ZW1wb3JhZGEuIEEgbWVkaWFkb3MgZGVsIDIwMjAgdmVtb3MgcXVlIGh1Ym8gdW4gZ3JhbiBpbmNyZW1lbnRvIGVuIGxhcyBidXNxdWVkYXMsIHBlcm8gcXVlIGFsIG1vbWVudG8gdmEgZW4gZGVzY2Vuc28uICAKYGBge3J9CnRlcm1pbm9KPC1jKCJKb2huIERlZXJlIikKdWJpY2FjaW9uSjwtYygiTVgiKQpjYW5hbEo8LSJ3ZWIiCnBlcmlvZG9KPC0oIjIwMTctMDEtMDEgMjAyMi0wOS0yNSIpCmBgYAoKYGBge3J9CkpEPC1ndHJlbmRzKHRlcm1pbm9KLHViaWNhY2lvbkosY2FuYWxKLHRpbWU9cGVyaW9kb0opCnBsb3QoSkQpCmBgYAoKCioqU2VndW5kYSBncsOhZmljYSoqICAKRWwgcHJvZHVjdG8gImVzdHJlbGxhIiwgeSBwb3IgZWwgcXVlIEpvaG4gRGVlcmUgZXMgY29ub2NpZG8sIGVzIHBvciBzdXMgdHJhY3RvcmVzLiBQb3IgbG8gdGFudG8sIHNlIHF1aXNvIGJ1c2NhciBlc3BlY8OtZmljYW1lbnRlIGxhIG1hcmNhIGNvbiBlc3RvLCB5IGFsIGJ1c2NhcmxvIGVuICBNw6l4aWNvLCBzZSBidXNjYSBlbiBlc3Bhw7FvbC4gU2Ugb2JzZXJ2YW4gbG9zIMO6bHRpbW9zIDUgYcOxb3MsIGVuIGRvbmRlIHN1ICJwaWNvIiBmdWUgZW4gZmluYWxlcyBkZWwgMjAxOCwgeSBxdWUgZGVzcHXDqXMgZGUgZXNvcyBjdWF0cm8gYcOxb3Mgbm8gaGEgaGFiaWRvIHVuIGluY3JlbWVudG8gZW4gbGFzIGLDunNxdWVkYXMsIHNpbm8gcXVlIGJhasOzIHkgYWjDrSBzZSBoYSBtYW50ZW5pZG8gbcOhcyBvIG1lbm9zIGVzdGFibGUuCmBgYHtyfQp0ZXJtaW5vSjI8LWMoIkpvaG4gRGVlcmUgVHJhY3RvcmVzIikKdWJpY2FjaW9uSjI8LWMoIk1YIikKY2FuYWxKMjwtIndlYiIKcGVyaW9kb0oyPC0oIjIwMTctMDEtMDEgMjAyMi0wOS0yNSIpCmBgYAoKYGBge3J9CkpEMjwtZ3RyZW5kcyh0ZXJtaW5vSjIsdWJpY2FjaW9uSjIsY2FuYWxKMix0aW1lPXBlcmlvZG9KMikKcGxvdChKRDIpCmBgYAoKKipUZXJjZXJhIGdyw6FmaWNhKiogIApFbiBsYSDDumx0aW1hIGdyw6FmaWNhIHNlIHB1ZWRlIG9ic2VydmFyIGVsIGludGVyw6lzIGVuIEpvaG4gRGVlcmUsICplc3BlY8OtZmljYW1lbnRlKiBlbiBNw6l4aWNvLiBFc3RlIG1pc21vIHR1dmUgdW4gKnBpY28qIGRlIGludGVyw6lzIGVuIGVsIHDDumJsaWNvIG1leGljYW5vIGEgcHJpbmNpcGlvIGRlbCAyMDIyLiBSZXN1bHRhcsOtYSBpbnRlcmVzYW50ZSBjb252ZXJzYXIgeSBhbmFsaXphciBsYXMgcG9zaWJsZSByYXpvbmVzIHBhcmEgZWwgY3JlY2llbnRlIGludGVyw6lzIGR1cmFudGUgbG9zIHByaW1lcm9zIG1lc2VzIGRlbCBhw7FvLgpgYGB7cn0KdGVybWlub0ozPC1jKCJKb2huIERlZXJlIE3DqXhpY28iKQp1YmljYWNpb25KMzwtYygiTVgiKQpjYW5hbEozPC0id2ViIgpwZXJpb2RvSjM8LSgiMjAxNy0wMS0wMSAyMDIyLTA5LTI1IikKYGBgCgpgYGB7cn0KSkQzPC1ndHJlbmRzKHRlcm1pbm9KMyx1YmljYWNpb25KMyxjYW5hbEozLHRpbWU9cGVyaW9kb0ozKQpwbG90KEpEMykKYGBgCgojIyMgKipPWFhPKioKCkluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXMKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKI2luc3RhbGwucGFja2FnZXMoImd0cmVuZHNSIikKbGlicmFyeShndHJlbmRzUikKYGBgCgoqKlByaW1lcmEgZ3LDoWZpY2EqKiAgCgpMYSBwcmltZXJhIGdyw6FmaWNhIHByZXRlbmRlIGRlbW9zdHJhciBlbCBpbnRlcsOpcyBkZWwgcMO6YmxpY28gbWV4aWNhbm8gZW4gT3h4byBlbiAgbGEgd2ViLiBFbiBlc3RhIG9ic2VydmFtb3MgbG9zIMO6bHRpbW9zIGRpZXogYcOxb3MsIGVuIGRvbmRlIHZlbW9zIHVuYSB0ZW5kZW5jaWEgcG9zaXRpdmEsIG8gYmllbiwgc3ViaWVuZG8gbGFzIGJ1c3F1ZWRhcy4gSWd1YWxtZW50ZSwgdmVtb3MgY29tbyBodWJvICB1biBncmFuIGluY3JlbWVudG8gZW4gIGVsIGludGVyw6lzIGVuIGxvcyDDumx0aW1vcyAgbWVzZXMgZGVsIDIwMTUgeSBhIG1lZGlhZG9zIGRlbCAyMDE2LiBSZXN1bHRhcsOtYSBpbnRlcmVzYW50ZSBjb25vY2VyIHF1ZSBzdWNlZGnDsyBlbiBlc3RvcyBhw7FvcyBxdWUgb2Nhc2lvbsOzIGVzdGUgaW50ZXLDqXMgZW4gZWwgcMO6YmxpY28uCmBgYHtyfQp0ZXJtaW5vTzwtYygiT3h4byIpCnViaWNhY2lvbk88LWMoIk1YIikKY2FuYWxPPC0id2ViIgpwZXJpb2RvTzwtKCIyMDEyLTAxLTAxIDIwMjItMDktMjUiKQpgYGAKCmBgYHtyfQpPWFhPPC1ndHJlbmRzKHRlcm1pbm9PLHViaWNhY2lvbk8sY2FuYWxPLHRpbWU9cGVyaW9kb08pCnBsb3QoT1hYTykKYGBgCgoqKlNlZ3VuZGEgZ3LDoWZpY2EqKiAgCgpTaWd1aWVuZG8gY29uIGxhIHNlZ3VuZGEgZ3LDoWZpY2EsIHRhbWJpw6luIHRvbWFtb3MgZW4gY3VlbnRhIGVsIHTDqXJtaW5vICJPeHhvIiBkdXJhbnRlIGxvcyDDumx0aW1vcyAxMCBhw7FvcywgcGVybyBhaG9yYSB2aWVuZG8gZWwgaW50ZXLDqXMgZW4gbGFzIGltw6FnZW5lcy4gQXF1w60gbWlzbW8gcG9kZW1vcyB2ZXIgY29tbyBlbCBpbnRlcsOpcyB2YSBjcmVjaWVuZG8gYWwgcGFzYXIgZGUgbGEgZMOpY2FkYTsgc2luIGVtYmFyZ28gZXN0YSBjb24gdW4gIG1lbm9yIG5pdmVsLiBMbyBxdWUgdmVtb3MgZGlmZXJlbnRlIGEgbGFzIHF1ZSBmdWVyb24gYnVzY2FkYXMgZW4gbGEgIndlYiIgZXMgcXVlIHNvbG8gZXhpc3RlIHVuICJwaWNvIiBlbiBlc3RhICBncsOhZmljYSwgcHJlc2VudMOhbmRvc2UgKGlndWFsbWVudGUpIGEgbWVkaWFkb3MgZGVsIDIwMTYuIApgYGB7cn0KdGVybWlub08yPC1jKCJPeHhvIikKdWJpY2FjaW9uTzI8LWMoIk1YIikKY2FuYWxPMjwtImltYWdlcyIKcGVyaW9kb08yPC0oIjIwMTItMDEtMDEgMjAyMi0wOS0yNSIpCmBgYAoKYGBge3J9Ck9YWE8yPC1ndHJlbmRzKHRlcm1pbm9PMix1YmljYWNpb25PMixjYW5hbE8yLHRpbWU9cGVyaW9kb08yKQpwbG90KE9YWE8yKQpgYGAKCioqVGVyY2VyYSBncsOhZmljYSoqICAKRmluYWxtZW50ZSwgdmVtb3MgbGEgdGVuZGVuY2lhIGRlIGxhcyBub3RpY2lhcyBkZSBPeHhvIGVuIGxvcyAgw7psdGltb3MgZMOtYXMgYcOxb3MuIEVuIGVzdGEgdmVtb3MgY29tbyBleGlzdGUgdW5hIHRlbmRlbmNpYSwgdGFtYmnDqW4sIGhhY2lhIGFycmliYSwgcGVybyBjb24gbXVjaG9zIG3DoXMgY2FtYmlvcyBhIHRyYXbDqXMgZGUgbG9zIG1lc2VzLiBPYnN2ZXJhbW9zIGNvbW8gYW50ZXMgZGVsIDIwMTYgT3h4byBubyBlc3RhYmEgbXV5IHByZXNlbnRlIGVuIGxhcyBub3RpY2lhcyBkZSBsb3MgbWV4aWNhbm9zLCBzaW4gZW1iYXJnbywgY29tbyB2aW1vcyBhbnRlcmlvcm1lbnRlLCB1biBzdWNlc28gYSBtZWRpYWRvcyBkZWwgMjAxNiBoaXpvIHF1ZSBlbCBpbnRlcsOpcyBjcmVjaWVyYSBkZSBncmFuIG1hbmVyYS4gRGUgIGFow60sIHZlbW9zIG90cm9zICJwaWNvcyIgYSBwcmluY2lwaW9zIGRlbCAyMDE5IHkgYSBtZWRpYWRvcyBkZWwgMjAyMi4gUmVzdWx0YXLDs2lhIGludGVyZXNhbnRlIHF1ZSBlbCBlcXVpcG8gZGUgTUtUIHB1ZGllcmEgb2JzZXJ2YXIgbG8gc3VjZWRpZG8gZW4gZWwgMjAxNiBwYXJhIHZlciBRVUUgcGFzw7MgcXVlIGNhdXPDsyB0YW50byBpbnRlcsOpcyBlbiBlbCBww7pibGljbyBtZXhpY2Fuby4KYGBge3J9CnRlcm1pbm9PMzwtYygiT3h4byIpCnViaWNhY2lvbk8zPC1jKCJNWCIpCmNhbmFsTzM8LSJuZXdzIgpwZXJpb2RvTzM8LSgiMjAxMi0wMS0wMSAyMDIyLTA5LTI1IikKYGBgCgpgYGB7cn0KT1hYTzM8LWd0cmVuZHModGVybWlub08zLHViaWNhY2lvbk8zLGNhbmFsTzMsdGltZT1wZXJpb2RvTzMpCnBsb3QoT1hYTzMpCmBgYAoKCgoKCgoK