library(easypackages)
library(xts)
library(lattice)
library(ggplot2)
library(readr)
library(zoo)
library(visdat)
library(RColorBrewer)
library(dplyr)
library(reshape2)
library(forcats)
library(lubridate)
library(ggfortify)
library(gridExtra)

#prooving
Valores<- read.csv("C:/Users/DELL/Desktop/UTEC 2022-2/Hidrología/ENTREGABLE 3/DEM/Resumen_ETP_ETR_P_Restas.csv", check.names = F, stringsAsFactors = F, sep = ";")

#precipitacion prom estacional
Valores%>%
  ggplot(aes(x=Mes, y=`Valor (mm/mes)`, group=Tipo, color=Tipo))+
    geom_line()+
    scale_x_discrete(limits = c("Sep", "Oct", "Nov", "Dic", "Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago"))+
    ggtitle("")+
    theme(plot.title = element_text(size=14, face="bold", hjust = 0.5))+
    ylab("Evapotranspiración (mm/mes)")+
    xlab("Meses")

Valores%>%
  filter(Tipo == "ETP")%>%
  ggplot(aes(x=Mes, y=`Valor (mm/mes)`, group=Tipo))+
    geom_line()+
    scale_x_discrete(limits = c("Sep", "Oct", "Nov", "Dic", "Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago"))+
    ggtitle("ETP")+
    theme(plot.title = element_text(size=14, face="bold", hjust = 0.5))+
    ylab("ETP promedio (mm/mes)")+
    xlab("Meses")

Valores%>%
  filter(Tipo == "ETR")%>%
  ggplot(aes(x=Mes, y=`Valor (mm/mes)`, group=Tipo))+
    geom_line()+
    scale_x_discrete(limits = c("Sep", "Oct", "Nov", "Dic", "Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago"))+
    ggtitle("ETR")+
    theme(plot.title = element_text(size=18, face="bold", hjust = 0.5))+
    ylab("ETR promedio (mm/mes)")+
    xlab("Meses")

Valores%>%
  filter(Tipo == "Ra")%>%
  ggplot(aes(x=Mes, y=`Valor (mm/mes)`, group=Tipo))+
    geom_line()+
    scale_x_discrete(limits = c("Sep", "Oct", "Nov", "Dic", "Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago"))+
    ggtitle("Radiacion")+
    theme(plot.title = element_text(size=18, face="bold", hjust = 0.5))+
    ylab("Ra")+
    xlab("Meses")

Leyendo el archibo Temperatrua mensual maxima Cuenca Veronica Pisco año normal (usar esta)

library("lattice") #llamar librería lattice
library("hydroTSM") #llamar librería TSM
tmensualMAX<-read.csv("C:/Users/DELL/Desktop/UTEC 2022-2/Hidrología/ENTREGABLE 3/DEM/Temperaturas/Pisco/Tmax.csv", header = FALSE, sep = ";", dec = ".") 
#lectura de archivo, se abrirá una ventana para
# seleccionar el archivo, cual fuese su ruta, header “F” por no contener datos en la cabecera solo contiene etiquetas

#Visualización de la serie de tiempo:
datos<-tmensualMAX[2:(nrow(tmensualMAX)-1),2:ncol(tmensualMAX)]
datos_vector<-as.vector(t(datos)) #convirtiendo a vector lineal
datos_ts<-stats::ts(datos_vector, start=c(1981, 1), end=c(2016, 12), frequency = 12)
plot.ts(datos_ts, type="o", col="black", main="PISCO: Serie de tiempo de Temperatura mensual máxima en la Cuenca Verónica 1981-2015", ylab="T [°C]", xlab="Año")
lines(lowess(time(datos_ts), datos_ts), col="blue", lwd=2) #agregar curva de tendencia

Diagrama de calor o HeatMap Temperatura mensual maxima Cuenca Veronica Pisco año normal (usar esta)


temperatura<-tmensualMAX[2:(nrow(tmensualMAX)),2:ncol(tmensualMAX)] #lectura de solo datos de temperatura, sin etiquetas de años, ni meses (desde 1964 al 1981)
meses<-tmensualMAX[1:1,2:ncol(tmensualMAX)] #lectura de la cabecera de meses en la primera fila
colnames(temperatura)<-unlist(meses) #desagrega los nombres de los meses y se asigna a la matriz
rownames(temperatura)<-tmensualMAX[2:(nrow(tmensualMAX)),1:1] #desagrega los nombres de los meses y se asigna a la matriz
matrixplot(temperatura, ColorRamp="Temperature",main="PISCO: Temperatura mensual máxima en la Cuenca Verónica 1981-2016 (°C)")

Leyendo el archibo Temperatrua mensual minima Cuenca Veronica Pisco año normal (usar esta)

library("lattice") #llamar librería lattice
library("hydroTSM") #llamar librería TSM
tmensualMIN<-read.csv("C:/Users/DELL/Desktop/UTEC 2022-2/Hidrología/ENTREGABLE 3/DEM/Temperaturas/Pisco/Tmin.csv", header = FALSE, sep = ";", dec = ".") 
#lectura de archivo, se abrirá una ventana para
# seleccionar el archivo, cual fuese su ruta, header “F” por no contener datos en la cabecera solo contiene etiquetas

#Visualización de la serie de tiempo:
datos<-tmensualMIN[2:(nrow(tmensualMIN)-1),2:ncol(tmensualMIN)]
datos_vector<-as.vector(t(datos)) #convirtiendo a vector lineal
datos_ts<-stats::ts(datos_vector, start=c(1981, 1), end=c(2016, 12), frequency = 12)
plot.ts(datos_ts, type="o", col="black", main="PISCO: Serie de tiempo de Temperatura mensual mínima en la Cuenca Verónica 1981-2016", ylab="T [°C]", xlab="Año")
lines(lowess(time(datos_ts), datos_ts), col="blue", lwd=2) #agregar curva de tendencia

Diagrama de calor o HeatMap Temperatura mensual min Cuenca Veronica Pisco año normal (usar esta)


temperatura<-tmensualMIN[2:(nrow(tmensualMIN)),2:ncol(tmensualMIN)] #lectura de solo datos de temperatura, sin etiquetas de años, ni meses (desde 1964 al 1981)
meses<-tmensualMIN[1:1,2:ncol(tmensualMIN)] #lectura de la cabecera de meses en la primera fila
colnames(temperatura)<-unlist(meses) #desagrega los nombres de los meses y se asigna a la matriz
rownames(temperatura)<-tmensualMIN[2:(nrow(tmensualMIN)),1:1] #desagrega los nombres de los meses y se asigna a la matriz
matrixplot(temperatura, ColorRamp="Temperature",main="PISCO: Temperatura mensual mínima en la Cuenca Verónica 1981-2016 (°C)")

Leyendo el archibo Temperatrua mensual media Cuenca Veronica Pisco año normal (usar esta)

library("lattice") #llamar librería lattice
library("hydroTSM") #llamar librería TSM
tmensualMED<-read.csv("C:/Users/DELL/Desktop/UTEC 2022-2/Hidrología/ENTREGABLE 3/DEM/Temperaturas/Pisco/Tmed.csv", header = FALSE, sep = ";", dec = ".") 
#lectura de archivo, se abrirá una ventana para
# seleccionar el archivo, cual fuese su ruta, header “F” por no contener datos en la cabecera solo contiene etiquetas

#Visualización de la serie de tiempo:
datos<-tmensualMED[2:(nrow(tmensualMED)-1),2:ncol(tmensualMED)]
datos_vector<-as.vector(t(datos)) #convirtiendo a vector lineal
datos_ts<-stats::ts(datos_vector, start=c(1981, 1), end=c(2016, 12), frequency = 12)
plot.ts(datos_ts, type="o", col="black", main="PISCO: Serie de tiempo de Temperatura mensual media en la Cuenca Verónica 1981-2016", ylab="T [°C]", xlab="Año")
lines(lowess(time(datos_ts), datos_ts), col="blue", lwd=2) #agregar curva de tendencia

Diagrama de calor o HeatMap Temperatura mensual media Cuenca Veronica Pisco año normal (usar esta)


temperatura<-tmensualMED[2:(nrow(tmensualMED)),2:ncol(tmensualMED)] #lectura de solo datos de temperatura, sin etiquetas de años, ni meses (desde 1964 al 1981)
meses<-tmensualMED[1:1,2:ncol(tmensualMED)] #lectura de la cabecera de meses en la primera fila
colnames(temperatura)<-unlist(meses) #desagrega los nombres de los meses y se asigna a la matriz
rownames(temperatura)<-tmensualMED[2:(nrow(tmensualMED)),1:1] #desagrega los nombres de los meses y se asigna a la matriz
matrixplot(temperatura, ColorRamp="Temperature",main="PISCO: Temperatura mensual media en la Cuenca Verónica 1981-2016 (°C)")

Leyendo el archivo Evapotranspiración Potencial mensual en la Cuenca Verónica Pisco año normal (usar esta)

library("lattice") #llamar librería lattice
library("hydroTSM") #llamar librería TSM
ETP<-read.csv("C:/Users/DELL/Desktop/UTEC 2022-2/Hidrología/ENTREGABLE 3/DEM/ETP/Pisco/ETP_Pisco.csv", header = FALSE, sep = ";", dec = ".") 
#lectura de archivo, se abrirá una ventana para
# seleccionar el archivo, cual fuese su ruta, header “F” por no contener datos en la cabecera solo contiene etiquetas

#Visualización de la serie de tiempo:
datos<-ETP[2:(nrow(ETP)-1),2:ncol(ETP)]
datos_vector<-as.vector(t(datos)) #convirtiendo a vector lineal
datos_ts<-stats::ts(datos_vector, start=c(1981, 1), end=c(2016, 12), frequency = 12)
plot.ts(datos_ts, type="o", col="black", main="PISCO: Serie de tiempo de Evapotranspiración Potencial mensual en la Cuenca Verónica 1981-2016", ylab="ETP [mm/mes]", xlab="Año")
lines(lowess(time(datos_ts), datos_ts), col="blue", lwd=2) #agregar curva de tendencia

Diagrama de calor o HeatMap Temperatura mensual maxima Cuenca Veronica Pisco año normal (usar esta)


Evapo<-ETP[2:(nrow(ETP)),2:ncol(ETP)] #lectura de solo datos de Evapo, sin etiquetas de años, ni meses (desde 1964 al 1981)
meses<-ETP[1:1,2:ncol(ETP)] #lectura de la cabecera de meses en la primera fila
colnames(Evapo)<-unlist(meses) #desagrega los nombres de los meses y se asigna a la matriz
rownames(Evapo)<-ETP[2:(nrow(ETP)),1:1] #desagrega los nombres de los meses y se asigna a la matriz
matrixplot(Evapo, ColorRamp="Temperature",main="PISCO: Evapotranspiración Potencial mensual media en la Cuenca Verónica 1981-2016 (mm/mes)")

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkoZWFzeXBhY2thZ2VzKQ0KbGlicmFyeSh4dHMpDQpsaWJyYXJ5KGxhdHRpY2UpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeSh6b28pDQpsaWJyYXJ5KHZpc2RhdCkNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KGZvcmNhdHMpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoZ2dmb3J0aWZ5KQ0KbGlicmFyeShncmlkRXh0cmEpDQoNCmBgYA0KDQpgYGB7cn0NCg0KI3Byb292aW5nDQpWYWxvcmVzPC0gcmVhZC5jc3YoIkM6L1VzZXJzL0RFTEwvRGVza3RvcC9VVEVDIDIwMjItMi9IaWRyb2xvZ8OtYS9FTlRSRUdBQkxFIDMvREVNL1Jlc3VtZW5fRVRQX0VUUl9QX1Jlc3Rhcy5jc3YiLCBjaGVjay5uYW1lcyA9IEYsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGLCBzZXAgPSAiOyIpDQoNCiNwcmVjaXBpdGFjaW9uIHByb20gZXN0YWNpb25hbA0KVmFsb3JlcyU+JQ0KICBnZ3Bsb3QoYWVzKHg9TWVzLCB5PWBWYWxvciAobW0vbWVzKWAsIGdyb3VwPVRpcG8sIGNvbG9yPVRpcG8pKSsNCiAgICBnZW9tX2xpbmUoKSsNCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoIlNlcCIsICJPY3QiLCAiTm92IiwgIkRpYyIsICJFbmUiLCAiRmViIiwgIk1hciIsICJBYnIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQWdvIikpKw0KICAgIGdndGl0bGUoIiIpKw0KICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCwgZmFjZT0iYm9sZCIsIGhqdXN0ID0gMC41KSkrDQogICAgeWxhYigiRXZhcG90cmFuc3BpcmFjacOzbiAobW0vbWVzKSIpKw0KICAgIHhsYWIoIk1lc2VzIikNCmBgYA0KDQoNCmBgYHtyfQ0KVmFsb3JlcyU+JQ0KICBmaWx0ZXIoVGlwbyA9PSAiRVRQIiklPiUNCiAgZ2dwbG90KGFlcyh4PU1lcywgeT1gVmFsb3IgKG1tL21lcylgLCBncm91cD1UaXBvKSkrDQogICAgZ2VvbV9saW5lKCkrDQogICAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKCJTZXAiLCAiT2N0IiwgIk5vdiIsICJEaWMiLCAiRW5lIiwgIkZlYiIsICJNYXIiLCAiQWJyIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkFnbyIpKSsNCiAgICBnZ3RpdGxlKCJFVFAiKSsNCiAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTQsIGZhY2U9ImJvbGQiLCBoanVzdCA9IDAuNSkpKw0KICAgIHlsYWIoIkVUUCBwcm9tZWRpbyAobW0vbWVzKSIpKw0KICAgIHhsYWIoIk1lc2VzIikNCmBgYA0KDQpgYGB7cn0NClZhbG9yZXMlPiUNCiAgZmlsdGVyKFRpcG8gPT0gIkVUUiIpJT4lDQogIGdncGxvdChhZXMoeD1NZXMsIHk9YFZhbG9yIChtbS9tZXMpYCwgZ3JvdXA9VGlwbykpKw0KICAgIGdlb21fbGluZSgpKw0KICAgIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gYygiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGljIiwgIkVuZSIsICJGZWIiLCAiTWFyIiwgIkFiciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBZ28iKSkrDQogICAgZ2d0aXRsZSgiRVRSIikrDQogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE4LCBmYWNlPSJib2xkIiwgaGp1c3QgPSAwLjUpKSsNCiAgICB5bGFiKCJFVFIgcHJvbWVkaW8gKG1tL21lcykiKSsNCiAgICB4bGFiKCJNZXNlcyIpDQpgYGANCg0KYGBge3J9DQpWYWxvcmVzJT4lDQogIGZpbHRlcihUaXBvID09ICJSYSIpJT4lDQogIGdncGxvdChhZXMoeD1NZXMsIHk9YFZhbG9yIChtbS9tZXMpYCwgZ3JvdXA9VGlwbykpKw0KICAgIGdlb21fbGluZSgpKw0KICAgIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gYygiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGljIiwgIkVuZSIsICJGZWIiLCAiTWFyIiwgIkFiciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBZ28iKSkrDQogICAgZ2d0aXRsZSgiUmFkaWFjaW9uIikrDQogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE4LCBmYWNlPSJib2xkIiwgaGp1c3QgPSAwLjUpKSsNCiAgICB5bGFiKCJSYSIpKw0KICAgIHhsYWIoIk1lc2VzIikNCmBgYA0KDQojIExleWVuZG8gZWwgYXJjaGlibyBUZW1wZXJhdHJ1YSBtZW5zdWFsIG1heGltYSBDdWVuY2EgVmVyb25pY2EgUGlzY28gYcOxbyBub3JtYWwgKHVzYXIgZXN0YSkNCg0KYGBge3J9DQpsaWJyYXJ5KCJsYXR0aWNlIikgI2xsYW1hciBsaWJyZXLDrWEgbGF0dGljZQ0KbGlicmFyeSgiaHlkcm9UU00iKSAjbGxhbWFyIGxpYnJlcsOtYSBUU00NCnRtZW5zdWFsTUFYPC1yZWFkLmNzdigiQzovVXNlcnMvREVMTC9EZXNrdG9wL1VURUMgMjAyMi0yL0hpZHJvbG9nw61hL0VOVFJFR0FCTEUgMy9ERU0vVGVtcGVyYXR1cmFzL1Bpc2NvL1RtYXguY3N2IiwgaGVhZGVyID0gRkFMU0UsIHNlcCA9ICI7IiwgZGVjID0gIi4iKSANCiNsZWN0dXJhIGRlIGFyY2hpdm8sIHNlIGFicmlyw6EgdW5hIHZlbnRhbmEgcGFyYQ0KIyBzZWxlY2Npb25hciBlbCBhcmNoaXZvLCBjdWFsIGZ1ZXNlIHN1IHJ1dGEsIGhlYWRlciDigJxG4oCdIHBvciBubyBjb250ZW5lciBkYXRvcyBlbiBsYSBjYWJlY2VyYSBzb2xvIGNvbnRpZW5lIGV0aXF1ZXRhcw0KDQojVmlzdWFsaXphY2nDs24gZGUgbGEgc2VyaWUgZGUgdGllbXBvOg0KZGF0b3M8LXRtZW5zdWFsTUFYWzI6KG5yb3codG1lbnN1YWxNQVgpLTEpLDI6bmNvbCh0bWVuc3VhbE1BWCldDQpkYXRvc192ZWN0b3I8LWFzLnZlY3Rvcih0KGRhdG9zKSkgI2NvbnZpcnRpZW5kbyBhIHZlY3RvciBsaW5lYWwNCmRhdG9zX3RzPC1zdGF0czo6dHMoZGF0b3NfdmVjdG9yLCBzdGFydD1jKDE5ODEsIDEpLCBlbmQ9YygyMDE2LCAxMiksIGZyZXF1ZW5jeSA9IDEyKQ0KcGxvdC50cyhkYXRvc190cywgdHlwZT0ibyIsIGNvbD0iYmxhY2siLCBtYWluPSJQSVNDTzogU2VyaWUgZGUgdGllbXBvIGRlIFRlbXBlcmF0dXJhIG1lbnN1YWwgbcOheGltYSBlbiBsYSBDdWVuY2EgVmVyw7NuaWNhIDE5ODEtMjAxNSIsIHlsYWI9IlQgW8KwQ10iLCB4bGFiPSJBw7FvIikNCmxpbmVzKGxvd2Vzcyh0aW1lKGRhdG9zX3RzKSwgZGF0b3NfdHMpLCBjb2w9ImJsdWUiLCBsd2Q9MikgI2FncmVnYXIgY3VydmEgZGUgdGVuZGVuY2lhDQpgYGANCg0KIyBEaWFncmFtYSBkZSBjYWxvciBvIEhlYXRNYXAgVGVtcGVyYXR1cmEgbWVuc3VhbCBtYXhpbWEgQ3VlbmNhIFZlcm9uaWNhIFBpc2NvIGHDsW8gbm9ybWFsICh1c2FyIGVzdGEpDQpgYGB7cn0NCg0KdGVtcGVyYXR1cmE8LXRtZW5zdWFsTUFYWzI6KG5yb3codG1lbnN1YWxNQVgpKSwyOm5jb2wodG1lbnN1YWxNQVgpXSAjbGVjdHVyYSBkZSBzb2xvIGRhdG9zIGRlIHRlbXBlcmF0dXJhLCBzaW4gZXRpcXVldGFzIGRlIGHDsW9zLCBuaSBtZXNlcyAoZGVzZGUgMTk2NCBhbCAxOTgxKQ0KbWVzZXM8LXRtZW5zdWFsTUFYWzE6MSwyOm5jb2wodG1lbnN1YWxNQVgpXSAjbGVjdHVyYSBkZSBsYSBjYWJlY2VyYSBkZSBtZXNlcyBlbiBsYSBwcmltZXJhIGZpbGENCmNvbG5hbWVzKHRlbXBlcmF0dXJhKTwtdW5saXN0KG1lc2VzKSAjZGVzYWdyZWdhIGxvcyBub21icmVzIGRlIGxvcyBtZXNlcyB5IHNlIGFzaWduYSBhIGxhIG1hdHJpeg0Kcm93bmFtZXModGVtcGVyYXR1cmEpPC10bWVuc3VhbE1BWFsyOihucm93KHRtZW5zdWFsTUFYKSksMToxXSAjZGVzYWdyZWdhIGxvcyBub21icmVzIGRlIGxvcyBtZXNlcyB5IHNlIGFzaWduYSBhIGxhIG1hdHJpeg0KbWF0cml4cGxvdCh0ZW1wZXJhdHVyYSwgQ29sb3JSYW1wPSJUZW1wZXJhdHVyZSIsbWFpbj0iUElTQ086IFRlbXBlcmF0dXJhIG1lbnN1YWwgbcOheGltYSBlbiBsYSBDdWVuY2EgVmVyw7NuaWNhIDE5ODEtMjAxNiAowrBDKSIpDQpgYGANCg0KIyBMZXllbmRvIGVsIGFyY2hpYm8gVGVtcGVyYXRydWEgbWVuc3VhbCBtaW5pbWEgQ3VlbmNhIFZlcm9uaWNhIFBpc2NvIGHDsW8gbm9ybWFsICh1c2FyIGVzdGEpDQoNCmBgYHtyfQ0KbGlicmFyeSgibGF0dGljZSIpICNsbGFtYXIgbGlicmVyw61hIGxhdHRpY2UNCmxpYnJhcnkoImh5ZHJvVFNNIikgI2xsYW1hciBsaWJyZXLDrWEgVFNNDQp0bWVuc3VhbE1JTjwtcmVhZC5jc3YoIkM6L1VzZXJzL0RFTEwvRGVza3RvcC9VVEVDIDIwMjItMi9IaWRyb2xvZ8OtYS9FTlRSRUdBQkxFIDMvREVNL1RlbXBlcmF0dXJhcy9QaXNjby9UbWluLmNzdiIsIGhlYWRlciA9IEZBTFNFLCBzZXAgPSAiOyIsIGRlYyA9ICIuIikgDQojbGVjdHVyYSBkZSBhcmNoaXZvLCBzZSBhYnJpcsOhIHVuYSB2ZW50YW5hIHBhcmENCiMgc2VsZWNjaW9uYXIgZWwgYXJjaGl2bywgY3VhbCBmdWVzZSBzdSBydXRhLCBoZWFkZXIg4oCcRuKAnSBwb3Igbm8gY29udGVuZXIgZGF0b3MgZW4gbGEgY2FiZWNlcmEgc29sbyBjb250aWVuZSBldGlxdWV0YXMNCg0KI1Zpc3VhbGl6YWNpw7NuIGRlIGxhIHNlcmllIGRlIHRpZW1wbzoNCmRhdG9zPC10bWVuc3VhbE1JTlsyOihucm93KHRtZW5zdWFsTUlOKS0xKSwyOm5jb2wodG1lbnN1YWxNSU4pXQ0KZGF0b3NfdmVjdG9yPC1hcy52ZWN0b3IodChkYXRvcykpICNjb252aXJ0aWVuZG8gYSB2ZWN0b3IgbGluZWFsDQpkYXRvc190czwtc3RhdHM6OnRzKGRhdG9zX3ZlY3Rvciwgc3RhcnQ9YygxOTgxLCAxKSwgZW5kPWMoMjAxNiwgMTIpLCBmcmVxdWVuY3kgPSAxMikNCnBsb3QudHMoZGF0b3NfdHMsIHR5cGU9Im8iLCBjb2w9ImJsYWNrIiwgbWFpbj0iUElTQ086IFNlcmllIGRlIHRpZW1wbyBkZSBUZW1wZXJhdHVyYSBtZW5zdWFsIG3DrW5pbWEgZW4gbGEgQ3VlbmNhIFZlcsOzbmljYSAxOTgxLTIwMTYiLCB5bGFiPSJUIFvCsENdIiwgeGxhYj0iQcOxbyIpDQpsaW5lcyhsb3dlc3ModGltZShkYXRvc190cyksIGRhdG9zX3RzKSwgY29sPSJibHVlIiwgbHdkPTIpICNhZ3JlZ2FyIGN1cnZhIGRlIHRlbmRlbmNpYQ0KYGBgDQoNCiMgRGlhZ3JhbWEgZGUgY2Fsb3IgbyBIZWF0TWFwIFRlbXBlcmF0dXJhIG1lbnN1YWwgbWluIEN1ZW5jYSBWZXJvbmljYSBQaXNjbyBhw7FvIG5vcm1hbCAodXNhciBlc3RhKQ0KYGBge3J9DQoNCnRlbXBlcmF0dXJhPC10bWVuc3VhbE1JTlsyOihucm93KHRtZW5zdWFsTUlOKSksMjpuY29sKHRtZW5zdWFsTUlOKV0gI2xlY3R1cmEgZGUgc29sbyBkYXRvcyBkZSB0ZW1wZXJhdHVyYSwgc2luIGV0aXF1ZXRhcyBkZSBhw7FvcywgbmkgbWVzZXMgKGRlc2RlIDE5NjQgYWwgMTk4MSkNCm1lc2VzPC10bWVuc3VhbE1JTlsxOjEsMjpuY29sKHRtZW5zdWFsTUlOKV0gI2xlY3R1cmEgZGUgbGEgY2FiZWNlcmEgZGUgbWVzZXMgZW4gbGEgcHJpbWVyYSBmaWxhDQpjb2xuYW1lcyh0ZW1wZXJhdHVyYSk8LXVubGlzdChtZXNlcykgI2Rlc2FncmVnYSBsb3Mgbm9tYnJlcyBkZSBsb3MgbWVzZXMgeSBzZSBhc2lnbmEgYSBsYSBtYXRyaXoNCnJvd25hbWVzKHRlbXBlcmF0dXJhKTwtdG1lbnN1YWxNSU5bMjoobnJvdyh0bWVuc3VhbE1JTikpLDE6MV0gI2Rlc2FncmVnYSBsb3Mgbm9tYnJlcyBkZSBsb3MgbWVzZXMgeSBzZSBhc2lnbmEgYSBsYSBtYXRyaXoNCm1hdHJpeHBsb3QodGVtcGVyYXR1cmEsIENvbG9yUmFtcD0iVGVtcGVyYXR1cmUiLG1haW49IlBJU0NPOiBUZW1wZXJhdHVyYSBtZW5zdWFsIG3DrW5pbWEgZW4gbGEgQ3VlbmNhIFZlcsOzbmljYSAxOTgxLTIwMTYgKMKwQykiKQ0KYGBgDQoNCiMgTGV5ZW5kbyBlbCBhcmNoaWJvIFRlbXBlcmF0cnVhIG1lbnN1YWwgbWVkaWEgQ3VlbmNhIFZlcm9uaWNhIFBpc2NvIGHDsW8gbm9ybWFsICh1c2FyIGVzdGEpDQoNCmBgYHtyfQ0KbGlicmFyeSgibGF0dGljZSIpICNsbGFtYXIgbGlicmVyw61hIGxhdHRpY2UNCmxpYnJhcnkoImh5ZHJvVFNNIikgI2xsYW1hciBsaWJyZXLDrWEgVFNNDQp0bWVuc3VhbE1FRDwtcmVhZC5jc3YoIkM6L1VzZXJzL0RFTEwvRGVza3RvcC9VVEVDIDIwMjItMi9IaWRyb2xvZ8OtYS9FTlRSRUdBQkxFIDMvREVNL1RlbXBlcmF0dXJhcy9QaXNjby9UbWVkLmNzdiIsIGhlYWRlciA9IEZBTFNFLCBzZXAgPSAiOyIsIGRlYyA9ICIuIikgDQojbGVjdHVyYSBkZSBhcmNoaXZvLCBzZSBhYnJpcsOhIHVuYSB2ZW50YW5hIHBhcmENCiMgc2VsZWNjaW9uYXIgZWwgYXJjaGl2bywgY3VhbCBmdWVzZSBzdSBydXRhLCBoZWFkZXIg4oCcRuKAnSBwb3Igbm8gY29udGVuZXIgZGF0b3MgZW4gbGEgY2FiZWNlcmEgc29sbyBjb250aWVuZSBldGlxdWV0YXMNCg0KI1Zpc3VhbGl6YWNpw7NuIGRlIGxhIHNlcmllIGRlIHRpZW1wbzoNCmRhdG9zPC10bWVuc3VhbE1FRFsyOihucm93KHRtZW5zdWFsTUVEKS0xKSwyOm5jb2wodG1lbnN1YWxNRUQpXQ0KZGF0b3NfdmVjdG9yPC1hcy52ZWN0b3IodChkYXRvcykpICNjb252aXJ0aWVuZG8gYSB2ZWN0b3IgbGluZWFsDQpkYXRvc190czwtc3RhdHM6OnRzKGRhdG9zX3ZlY3Rvciwgc3RhcnQ9YygxOTgxLCAxKSwgZW5kPWMoMjAxNiwgMTIpLCBmcmVxdWVuY3kgPSAxMikNCnBsb3QudHMoZGF0b3NfdHMsIHR5cGU9Im8iLCBjb2w9ImJsYWNrIiwgbWFpbj0iUElTQ086IFNlcmllIGRlIHRpZW1wbyBkZSBUZW1wZXJhdHVyYSBtZW5zdWFsIG1lZGlhIGVuIGxhIEN1ZW5jYSBWZXLDs25pY2EgMTk4MS0yMDE2IiwgeWxhYj0iVCBbwrBDXSIsIHhsYWI9IkHDsW8iKQ0KbGluZXMobG93ZXNzKHRpbWUoZGF0b3NfdHMpLCBkYXRvc190cyksIGNvbD0iYmx1ZSIsIGx3ZD0yKSAjYWdyZWdhciBjdXJ2YSBkZSB0ZW5kZW5jaWENCmBgYA0KDQojIERpYWdyYW1hIGRlIGNhbG9yIG8gSGVhdE1hcCBUZW1wZXJhdHVyYSBtZW5zdWFsIG1lZGlhIEN1ZW5jYSBWZXJvbmljYSBQaXNjbyBhw7FvIG5vcm1hbCAodXNhciBlc3RhKQ0KYGBge3J9DQoNCnRlbXBlcmF0dXJhPC10bWVuc3VhbE1FRFsyOihucm93KHRtZW5zdWFsTUVEKSksMjpuY29sKHRtZW5zdWFsTUVEKV0gI2xlY3R1cmEgZGUgc29sbyBkYXRvcyBkZSB0ZW1wZXJhdHVyYSwgc2luIGV0aXF1ZXRhcyBkZSBhw7FvcywgbmkgbWVzZXMgKGRlc2RlIDE5NjQgYWwgMTk4MSkNCm1lc2VzPC10bWVuc3VhbE1FRFsxOjEsMjpuY29sKHRtZW5zdWFsTUVEKV0gI2xlY3R1cmEgZGUgbGEgY2FiZWNlcmEgZGUgbWVzZXMgZW4gbGEgcHJpbWVyYSBmaWxhDQpjb2xuYW1lcyh0ZW1wZXJhdHVyYSk8LXVubGlzdChtZXNlcykgI2Rlc2FncmVnYSBsb3Mgbm9tYnJlcyBkZSBsb3MgbWVzZXMgeSBzZSBhc2lnbmEgYSBsYSBtYXRyaXoNCnJvd25hbWVzKHRlbXBlcmF0dXJhKTwtdG1lbnN1YWxNRURbMjoobnJvdyh0bWVuc3VhbE1FRCkpLDE6MV0gI2Rlc2FncmVnYSBsb3Mgbm9tYnJlcyBkZSBsb3MgbWVzZXMgeSBzZSBhc2lnbmEgYSBsYSBtYXRyaXoNCm1hdHJpeHBsb3QodGVtcGVyYXR1cmEsIENvbG9yUmFtcD0iVGVtcGVyYXR1cmUiLG1haW49IlBJU0NPOiBUZW1wZXJhdHVyYSBtZW5zdWFsIG1lZGlhIGVuIGxhIEN1ZW5jYSBWZXLDs25pY2EgMTk4MS0yMDE2ICjCsEMpIikNCmBgYA0KDQojIExleWVuZG8gZWwgYXJjaGl2byBFdmFwb3RyYW5zcGlyYWNpw7NuIFBvdGVuY2lhbCBtZW5zdWFsIGVuIGxhIEN1ZW5jYSBWZXLDs25pY2EgUGlzY28gYcOxbyBub3JtYWwgKHVzYXIgZXN0YSkNCg0KYGBge3J9DQpsaWJyYXJ5KCJsYXR0aWNlIikgI2xsYW1hciBsaWJyZXLDrWEgbGF0dGljZQ0KbGlicmFyeSgiaHlkcm9UU00iKSAjbGxhbWFyIGxpYnJlcsOtYSBUU00NCkVUUDwtcmVhZC5jc3YoIkM6L1VzZXJzL0RFTEwvRGVza3RvcC9VVEVDIDIwMjItMi9IaWRyb2xvZ8OtYS9FTlRSRUdBQkxFIDMvREVNL0VUUC9QaXNjby9FVFBfUGlzY28uY3N2IiwgaGVhZGVyID0gRkFMU0UsIHNlcCA9ICI7IiwgZGVjID0gIi4iKSANCiNsZWN0dXJhIGRlIGFyY2hpdm8sIHNlIGFicmlyw6EgdW5hIHZlbnRhbmEgcGFyYQ0KIyBzZWxlY2Npb25hciBlbCBhcmNoaXZvLCBjdWFsIGZ1ZXNlIHN1IHJ1dGEsIGhlYWRlciDigJxG4oCdIHBvciBubyBjb250ZW5lciBkYXRvcyBlbiBsYSBjYWJlY2VyYSBzb2xvIGNvbnRpZW5lIGV0aXF1ZXRhcw0KDQojVmlzdWFsaXphY2nDs24gZGUgbGEgc2VyaWUgZGUgdGllbXBvOg0KZGF0b3M8LUVUUFsyOihucm93KEVUUCktMSksMjpuY29sKEVUUCldDQpkYXRvc192ZWN0b3I8LWFzLnZlY3Rvcih0KGRhdG9zKSkgI2NvbnZpcnRpZW5kbyBhIHZlY3RvciBsaW5lYWwNCmRhdG9zX3RzPC1zdGF0czo6dHMoZGF0b3NfdmVjdG9yLCBzdGFydD1jKDE5ODEsIDEpLCBlbmQ9YygyMDE2LCAxMiksIGZyZXF1ZW5jeSA9IDEyKQ0KcGxvdC50cyhkYXRvc190cywgdHlwZT0ibyIsIGNvbD0iYmxhY2siLCBtYWluPSJQSVNDTzogU2VyaWUgZGUgdGllbXBvIGRlIEV2YXBvdHJhbnNwaXJhY2nDs24gUG90ZW5jaWFsIG1lbnN1YWwgZW4gbGEgQ3VlbmNhIFZlcsOzbmljYSAxOTgxLTIwMTYiLCB5bGFiPSJFVFAgW21tL21lc10iLCB4bGFiPSJBw7FvIikNCmxpbmVzKGxvd2Vzcyh0aW1lKGRhdG9zX3RzKSwgZGF0b3NfdHMpLCBjb2w9ImJsdWUiLCBsd2Q9MikgI2FncmVnYXIgY3VydmEgZGUgdGVuZGVuY2lhDQpgYGANCg0KIyBEaWFncmFtYSBkZSBjYWxvciBvIEhlYXRNYXAgVGVtcGVyYXR1cmEgbWVuc3VhbCBtYXhpbWEgQ3VlbmNhIFZlcm9uaWNhIFBpc2NvIGHDsW8gbm9ybWFsICh1c2FyIGVzdGEpDQpgYGB7cn0NCg0KRXZhcG88LUVUUFsyOihucm93KEVUUCkpLDI6bmNvbChFVFApXSAjbGVjdHVyYSBkZSBzb2xvIGRhdG9zIGRlIEV2YXBvLCBzaW4gZXRpcXVldGFzIGRlIGHDsW9zLCBuaSBtZXNlcyAoZGVzZGUgMTk2NCBhbCAxOTgxKQ0KbWVzZXM8LUVUUFsxOjEsMjpuY29sKEVUUCldICNsZWN0dXJhIGRlIGxhIGNhYmVjZXJhIGRlIG1lc2VzIGVuIGxhIHByaW1lcmEgZmlsYQ0KY29sbmFtZXMoRXZhcG8pPC11bmxpc3QobWVzZXMpICNkZXNhZ3JlZ2EgbG9zIG5vbWJyZXMgZGUgbG9zIG1lc2VzIHkgc2UgYXNpZ25hIGEgbGEgbWF0cml6DQpyb3duYW1lcyhFdmFwbyk8LUVUUFsyOihucm93KEVUUCkpLDE6MV0gI2Rlc2FncmVnYSBsb3Mgbm9tYnJlcyBkZSBsb3MgbWVzZXMgeSBzZSBhc2lnbmEgYSBsYSBtYXRyaXoNCm1hdHJpeHBsb3QoRXZhcG8sIENvbG9yUmFtcD0iVGVtcGVyYXR1cmUiLG1haW49IlBJU0NPOiBFdmFwb3RyYW5zcGlyYWNpw7NuIFBvdGVuY2lhbCBtZW5zdWFsIG1lZGlhIGVuIGxhIEN1ZW5jYSBWZXLDs25pY2EgMTk4MS0yMDE2IChtbS9tZXMpIikNCmBgYA0K