Teoría

La información del clima se obtiene del ASOS (Automated Surface Observing System) ubicados en los aeropuertos de las ciudades.

Instalar paquetes y llamar librerías

#install.packages("riem") #Acceder al ASOS para obtener datos climáticos
library(riem)
#install.packages("tidyverse")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
#install.packages("ggplot2") #Gráficas con mejor diseño que plot
library(ggplot2)
#install.packages("plotly") #Gráficas con mejor calidad
library(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout

Paso 1. Buscar la red del país (México) y copiar CODE

view(riem_networks())
# MX__ASOS

Paso 2. Buscar la estación o ciudad (MTY) y copiar ID

view(riem_stations("MX__ASOS"))
# MMMY

Paso 3. Obtener datos del clima

clima_mty <- riem_measures("MMMY")

Ejercicio 1. Obtener datos del clima de MTY de febrero 2024

clima_mty_feb <- subset(clima_mty, valid >= as.POSIXct("2024-02-01 00:000") & valid <= as.POSIXct("2024-02-29 23:59"))

Ejercicio 2. Graficar la Humedad Relativa en MTY durante Febrero 2024

plot(clima_mty_feb$valid,clima_mty_feb$relh,type="l",main="Humedad Relativa en MTY durante Febrero 2024", xlab="Fecha",ylab="Humedad Relativa (%)")

# Promediar humedad relativa diaria 

clima_mty_feb$date <- as.Date(clima_mty_feb$valid)

cmfd <- aggregate(clima_mty_feb, by=list(date = clima_mty_feb$date), FUN=mean)
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
#Graficar la humedad relativa promedio por día
plot(cmfd$date, cmfd$relh, type="l", main="Promedio diario de humedad relativa en MTY durante febrero del 2024", xlab="Fecha", ylab="Humedad Relativa (%)")

#cmpd <- clima_mty_feb %>%
  #mutate(date=ymd_hm(valid), date=as.Date(date)) %>% group_by(date) %>% summarize_if(is.numeric,~mean(., na.rm = TRUE))

Ejercicio 3. Graficar la Humedad Relativa en CDMX durante Febrero 2024

Paso 1. Buscar la red del país (México) y copiar CODE

view(riem_networks())
# MX__ASOS

Paso 2. Buscar la estación o ciudad (CDMX) y copiar ID

view(riem_stations("MX__ASOS"))
# MMMX

Paso 3. Obtener datos del clima de CDMX de febrero 2024

#Datos febrero 2024
clima_cdmx <- riem_measures("MMMX")
clima_cdmx_feb <- subset(clima_cdmx, valid >= as.POSIXct("2024-02-01 00:000") & valid <= as.POSIXct("2024-02-29 23:59"))

Último paso. Graficar la Humedad Relativa en CDMX durante Febrero 2024

#Tabla de clima en Celcius
clima_cdmx_feb$centigrados <- clima_cdmx_feb$tmpf-32*0.5556
cmfcdmx <- aggregate(clima_cdmx_feb, by=list(centigrados=clima_cdmx_feb$centigrados), FUN=mean)
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA
cmfcdmx$date <- as.Date(cmfcdmx$valid) 

# Graficar la Humedad Relativa promedio por día
plot(cmfcdmx$date,cmfcdmx$centi.1,type="l",main="Promedio diario de termperatura (C°) durante febrero 2024 en CDMX", xlab="Fecha", ylab="Temperatura Promedio")

Conclusión

La comparación de la humedad relativa durante febrero de 2024 entre Monterrey (MTY) y Ciudad de México (CDMX) fue posible gracias al análisis de datos climáticos obtenidos del sistema de observación superficial automatizado (ASOS). Utilizamos “riem” para acceder a los datos de ASOS, “tidyverse” para manipularlos y visualizarlos, y “ggplot2” para crear gráficas de alta calidad. Estas herramientas nos permitieron generar visualizaciones claras y comprensibles de la humedad relativa y la temperatura promedio diaria de ambas ciudades a lo largo del mes, así como filtrar y procesar datos de manera eficiente. Este método nos permitió identificar y comunicar de manera efectiva las diferencias en los patrones climáticos entre las dos ubicaciones, destacando la importancia de tener en cuenta las condiciones climáticas locales cuando se toman decisiones sobre el clima.

LS0tDQp0aXRsZTogIkNsaW1hIg0KYXV0aG9yOiAiU2FsdmFkb3IgTmFydmFleiAtIEEwMDU3MTg0OCINCmRhdGU6ICIyMDI0LTAyLTI5Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IGNvc21vDQotLS0NCg0KIVtdKEQ6XFxjaGF2YVxcRGVzY2FyZ2FzXFxhc29zLnBuZykNCg0KIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPlRlb3LDrWE8L3NwYW4+DQpMYSBpbmZvcm1hY2nDs24gZGVsIGNsaW1hIHNlIG9idGllbmUgZGVsICoqQVNPUyoqICgqQXV0b21hdGVkIFN1cmZhY2UgT2JzZXJ2aW5nIFN5c3RlbSopIHViaWNhZG9zIGVuIGxvcyBhZXJvcHVlcnRvcyBkZSBsYXMgY2l1ZGFkZXMuDQoNCg0KIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPkluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXM8L3NwYW4+DQpgYGB7cn0NCiNpbnN0YWxsLnBhY2thZ2VzKCJyaWVtIikgI0FjY2VkZXIgYWwgQVNPUyBwYXJhIG9idGVuZXIgZGF0b3MgY2xpbcOhdGljb3MNCmxpYnJhcnkocmllbSkNCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQojaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICNHcsOhZmljYXMgY29uIG1lam9yIGRpc2XDsW8gcXVlIHBsb3QNCmxpYnJhcnkoZ2dwbG90MikNCiNpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKSAjR3LDoWZpY2FzIGNvbiBtZWpvciBjYWxpZGFkDQpsaWJyYXJ5KHBsb3RseSkNCmBgYA0KDQoNCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPlBhc28gMS4gQnVzY2FyIGxhIHJlZCBkZWwgcGHDrXMgKE3DqXhpY28pIHkgY29waWFyIENPREU8L3NwYW4+DQpgYGB7cn0NCnZpZXcocmllbV9uZXR3b3JrcygpKQ0KIyBNWF9fQVNPUw0KYGBgDQoNCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPlBhc28gMi4gQnVzY2FyIGxhIGVzdGFjacOzbiBvIGNpdWRhZCAoTVRZKSB5IGNvcGlhciBJRDwvc3Bhbj4NCmBgYHtyfQ0KdmlldyhyaWVtX3N0YXRpb25zKCJNWF9fQVNPUyIpKQ0KIyBNTU1ZDQpgYGANCg0KIyMjIDxzcGFuIHN0eWxlID0iY29sb3I6IGdyZWVuOyI+UGFzbyAzLiBPYnRlbmVyIGRhdG9zIGRlbCBjbGltYTwvc3Bhbj4NCmBgYHtyfQ0KY2xpbWFfbXR5IDwtIHJpZW1fbWVhc3VyZXMoIk1NTVkiKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjogZ3JlZW47Ij5FamVyY2ljaW8gMS4gT2J0ZW5lciBkYXRvcyBkZWwgY2xpbWEgZGUgTVRZIGRlIGZlYnJlcm8gMjAyNDwvc3Bhbj4NCmBgYHtyfQ0KY2xpbWFfbXR5X2ZlYiA8LSBzdWJzZXQoY2xpbWFfbXR5LCB2YWxpZCA+PSBhcy5QT1NJWGN0KCIyMDI0LTAyLTAxIDAwOjAwMCIpICYgdmFsaWQgPD0gYXMuUE9TSVhjdCgiMjAyNC0wMi0yOSAyMzo1OSIpKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjogZ3JlZW47Ij5FamVyY2ljaW8gMi4gR3JhZmljYXIgbGEgSHVtZWRhZCBSZWxhdGl2YSBlbiBNVFkgZHVyYW50ZSBGZWJyZXJvIDIwMjQ8L3NwYW4+DQpgYGB7cn0NCnBsb3QoY2xpbWFfbXR5X2ZlYiR2YWxpZCxjbGltYV9tdHlfZmViJHJlbGgsdHlwZT0ibCIsbWFpbj0iSHVtZWRhZCBSZWxhdGl2YSBlbiBNVFkgZHVyYW50ZSBGZWJyZXJvIDIwMjQiLCB4bGFiPSJGZWNoYSIseWxhYj0iSHVtZWRhZCBSZWxhdGl2YSAoJSkiKQ0KDQojIFByb21lZGlhciBodW1lZGFkIHJlbGF0aXZhIGRpYXJpYSANCg0KY2xpbWFfbXR5X2ZlYiRkYXRlIDwtIGFzLkRhdGUoY2xpbWFfbXR5X2ZlYiR2YWxpZCkNCg0KY21mZCA8LSBhZ2dyZWdhdGUoY2xpbWFfbXR5X2ZlYiwgYnk9bGlzdChkYXRlID0gY2xpbWFfbXR5X2ZlYiRkYXRlKSwgRlVOPW1lYW4pDQoNCiNHcmFmaWNhciBsYSBodW1lZGFkIHJlbGF0aXZhIHByb21lZGlvIHBvciBkw61hDQpwbG90KGNtZmQkZGF0ZSwgY21mZCRyZWxoLCB0eXBlPSJsIiwgbWFpbj0iUHJvbWVkaW8gZGlhcmlvIGRlIGh1bWVkYWQgcmVsYXRpdmEgZW4gTVRZIGR1cmFudGUgZmVicmVybyBkZWwgMjAyNCIsIHhsYWI9IkZlY2hhIiwgeWxhYj0iSHVtZWRhZCBSZWxhdGl2YSAoJSkiKQ0KDQojY21wZCA8LSBjbGltYV9tdHlfZmViICU+JQ0KICAjbXV0YXRlKGRhdGU9eW1kX2htKHZhbGlkKSwgZGF0ZT1hcy5EYXRlKGRhdGUpKSAlPiUgZ3JvdXBfYnkoZGF0ZSkgJT4lIHN1bW1hcml6ZV9pZihpcy5udW1lcmljLH5tZWFuKC4sIG5hLnJtID0gVFJVRSkpDQpgYGANCg0KIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPkVqZXJjaWNpbyAzLiBHcmFmaWNhciBsYSBIdW1lZGFkIFJlbGF0aXZhIGVuIENETVggZHVyYW50ZSBGZWJyZXJvIDIwMjQ8L3NwYW4+DQoNCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPlBhc28gMS4gQnVzY2FyIGxhIHJlZCBkZWwgcGHDrXMgKE3DqXhpY28pIHkgY29waWFyIENPREU8L3NwYW4+DQpgYGB7cn0NCnZpZXcocmllbV9uZXR3b3JrcygpKQ0KIyBNWF9fQVNPUw0KYGBgDQoNCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPlBhc28gMi4gQnVzY2FyIGxhIGVzdGFjacOzbiBvIGNpdWRhZCAoQ0RNWCkgeSBjb3BpYXIgSUQ8L3NwYW4+DQpgYGB7cn0NCnZpZXcocmllbV9zdGF0aW9ucygiTVhfX0FTT1MiKSkNCiMgTU1NWA0KYGBgDQojIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjogZ3JlZW47Ij5QYXNvIDMuIE9idGVuZXIgZGF0b3MgZGVsIGNsaW1hIGRlIENETVggZGUgZmVicmVybyAyMDI0PC9zcGFuPg0KYGBge3J9DQojRGF0b3MgZmVicmVybyAyMDI0DQpjbGltYV9jZG14IDwtIHJpZW1fbWVhc3VyZXMoIk1NTVgiKQ0KY2xpbWFfY2RteF9mZWIgPC0gc3Vic2V0KGNsaW1hX2NkbXgsIHZhbGlkID49IGFzLlBPU0lYY3QoIjIwMjQtMDItMDEgMDA6MDAwIikgJiB2YWxpZCA8PSBhcy5QT1NJWGN0KCIyMDI0LTAyLTI5IDIzOjU5IikpDQpgYGANCg0KIyMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPsOabHRpbW8gcGFzby4gR3JhZmljYXIgbGEgSHVtZWRhZCBSZWxhdGl2YSBlbiBDRE1YIGR1cmFudGUgRmVicmVybyAyMDI0PC9zcGFuPg0KYGBge3J9DQoNCiNUYWJsYSBkZSBjbGltYSBlbiBDZWxjaXVzDQpjbGltYV9jZG14X2ZlYiRjZW50aWdyYWRvcyA8LSBjbGltYV9jZG14X2ZlYiR0bXBmLTMyKjAuNTU1Ng0KY21mY2RteCA8LSBhZ2dyZWdhdGUoY2xpbWFfY2RteF9mZWIsIGJ5PWxpc3QoY2VudGlncmFkb3M9Y2xpbWFfY2RteF9mZWIkY2VudGlncmFkb3MpLCBGVU49bWVhbikNCmNtZmNkbXgkZGF0ZSA8LSBhcy5EYXRlKGNtZmNkbXgkdmFsaWQpIA0KDQojIEdyYWZpY2FyIGxhIEh1bWVkYWQgUmVsYXRpdmEgcHJvbWVkaW8gcG9yIGTDrWENCnBsb3QoY21mY2RteCRkYXRlLGNtZmNkbXgkY2VudGkuMSx0eXBlPSJsIixtYWluPSJQcm9tZWRpbyBkaWFyaW8gZGUgdGVybXBlcmF0dXJhIChDwrApIGR1cmFudGUgZmVicmVybyAyMDI0IGVuIENETVgiLCB4bGFiPSJGZWNoYSIsIHlsYWI9IlRlbXBlcmF0dXJhIFByb21lZGlvIikNCg0KYGBgDQoNCg0KIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPkNvbmNsdXNpw7NuPC9zcGFuPg0KTGEgY29tcGFyYWNpw7NuIGRlIGxhIGh1bWVkYWQgcmVsYXRpdmEgZHVyYW50ZSBmZWJyZXJvIGRlIDIwMjQgZW50cmUgTW9udGVycmV5IChNVFkpIHkgQ2l1ZGFkIGRlIE3DqXhpY28gKENETVgpIGZ1ZSBwb3NpYmxlIGdyYWNpYXMgYWwgYW7DoWxpc2lzIGRlIGRhdG9zIGNsaW3DoXRpY29zIG9idGVuaWRvcyBkZWwgc2lzdGVtYSBkZSBvYnNlcnZhY2nDs24gc3VwZXJmaWNpYWwgYXV0b21hdGl6YWRvICooQVNPUykqLiBVdGlsaXphbW9zICoqInJpZW0iKiogcGFyYSBhY2NlZGVyIGEgbG9zIGRhdG9zIGRlICpBU09TKiwgKioidGlkeXZlcnNlIioqIHBhcmEgbWFuaXB1bGFybG9zIHkgdmlzdWFsaXphcmxvcywgeSAqKiJnZ3Bsb3QyIioqIHBhcmEgY3JlYXIgZ3LDoWZpY2FzIGRlIGFsdGEgY2FsaWRhZC4gRXN0YXMgaGVycmFtaWVudGFzIG5vcyBwZXJtaXRpZXJvbiBnZW5lcmFyIHZpc3VhbGl6YWNpb25lcyBjbGFyYXMgeSBjb21wcmVuc2libGVzIGRlIGxhIGh1bWVkYWQgcmVsYXRpdmEgeSBsYSB0ZW1wZXJhdHVyYSBwcm9tZWRpbyBkaWFyaWEgZGUgYW1iYXMgY2l1ZGFkZXMgYSBsbyBsYXJnbyBkZWwgbWVzLCBhc8OtIGNvbW8gZmlsdHJhciB5IHByb2Nlc2FyIGRhdG9zIGRlIG1hbmVyYSBlZmljaWVudGUuIEVzdGUgbcOpdG9kbyBub3MgcGVybWl0acOzIGlkZW50aWZpY2FyIHkgY29tdW5pY2FyIGRlIG1hbmVyYSBlZmVjdGl2YSBsYXMgZGlmZXJlbmNpYXMgZW4gbG9zIHBhdHJvbmVzIGNsaW3DoXRpY29zIGVudHJlIGxhcyBkb3MgdWJpY2FjaW9uZXMsIGRlc3RhY2FuZG8gbGEgaW1wb3J0YW5jaWEgZGUgdGVuZXIgZW4gY3VlbnRhIGxhcyBjb25kaWNpb25lcyBjbGltw6F0aWNhcyBsb2NhbGVzIGN1YW5kbyBzZSB0b21hbiBkZWNpc2lvbmVzIHNvYnJlIGVsIGNsaW1hLg0KDQo=