Se realizó un análisis horario de los valores de Pol, Brix y Pureza reportados por el Core Sampler.

El objetivo es verificar la hipótesis de que durante cierto rango de horas del día los valores de Pol, Brix y Pureza tienden a ser más altos que en el resto de horas. Específicamente, durante las primeras horas del día.

library(ggplot2)
library(lubridate)
Loading required package: timechange

Attaching package: ‘lubridate’

The following objects are masked from ‘package:base’:

    date, intersect, setdiff, union
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

Conjunto de Datos Muestras Core Sampler

Este conjunto de datos se obtuvo de la base de datos Legacy de Laboratorio

dataset <- read.csv(file = 'C:/Users/sbarrios/OneDrive - Universidad Galileo/Data Science/R/Proyectos/Pantaleon/Max/Datos_Caña.csv')
dataset$Fecha <- as.Date(dataset$Fecha,format = "%d/%m/%Y")
dataset

Verificación de Rangos

Se examinan los promedios de Pol, Brix y Pureza para los siguientes rangos horarios:

Y, para cada Rango, se analizan distintos horizontes temporales:

df1 <- dataset %>% filter(Fecha < '2023-11-30')
df1_dist <- df1 %>%  group_by(hora) %>% summarise(Pol = mean(Pol, na.rm = TRUE), Brix = mean(Brix, na.rm = TRUE), 
                                      Pureza = mean(Pureza, na.rm = TRUE) , ensayos = n())

df2 <- dataset %>% filter(Fecha < '2023-12-14')
df2_dist <- df2 %>%  group_by(hora) %>% summarise(Pol = mean(Pol, na.rm = TRUE), Brix = mean(Brix, na.rm = TRUE), 
                                      Pureza = mean(Pureza, na.rm = TRUE) , ensayos = n())

df3 <- dataset %>% filter(Fecha < '2023-12-28')
df3_dist <- df3 %>%  group_by(hora) %>% summarise(Pol = mean(Pol, na.rm = TRUE), Brix = mean(Brix, na.rm = TRUE), 
                                      Pureza = mean(Pureza, na.rm = TRUE) , ensayos = n())

Promedios Horizonte 1: 10 NOV al 30 NOV

NOV30_Primero <- df1_dist %>% filter(hora %in% (0:7) ) %>% 
  summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))

NOV30_Segundo <- df1_dist %>% filter(hora %in% (8:15) ) %>% 
  summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))

NOV30_Tercero <- df1_dist %>% filter(hora %in% (16:23) ) %>% 
  summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))

df1_Pol <- data.frame("Variable" = c("Pol","Brix","Pureza"), 
                      "de 0 a 7 horas" = c(NOV30_Primero$Pol_Promedio,NOV30_Primero$Brix_Promedio, NOV30_Primero$Pureza_Promedio),
                      "de 8 a 15 horas" = c(NOV30_Segundo$Pol_Promedio,NOV30_Segundo$Brix_Promedio, NOV30_Segundo$Pureza_Promedio),
                      "de 16 a 23 horas" = c(NOV30_Tercero$Pol_Promedio,NOV30_Tercero$Brix_Promedio, NOV30_Tercero$Pureza_Promedio)
                      )
df1_Pol

Promedios Horizonte 2: 10 NOV al 14 DIC

DIC14_Primero <- df2_dist %>% filter(hora %in% (0:7) ) %>% 
  summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))

DIC14_Segundo <- df2_dist %>% filter(hora %in% (8:15) ) %>% 
  summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))

DIC14_Tercero <- df2_dist %>% filter(hora %in% (16:23) ) %>% 
  summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))

df2_Pol <- data.frame("Variable" = c("Pol","Brix","Pureza"), 
                      "de 0 a 7 horas" = c(DIC14_Primero$Pol_Promedio,DIC14_Primero$Brix_Promedio, DIC14_Primero$Pureza_Promedio),
                      "de 8 a 15 horas" = c(DIC14_Segundo$Pol_Promedio,DIC14_Segundo$Brix_Promedio, DIC14_Segundo$Pureza_Promedio),
                      "de 16 a 23 horas" = c(DIC14_Tercero$Pol_Promedio,DIC14_Tercero$Brix_Promedio, DIC14_Tercero$Pureza_Promedio)
                      )
df2_Pol

Promedios Horizonte 3: 10 NOV al 28 DIC

DIC28_Primero <- df3_dist %>% filter(hora %in% (0:7) ) %>% 
  summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))

DIC28_Segundo <- df3_dist %>% filter(hora %in% (8:15) ) %>% 
  summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))

DIC28_Tercero <- df3_dist %>% filter(hora %in% (16:23) ) %>% 
  summarise(Pol_Promedio = mean(Pol, na.rm = TRUE), Brix_Promedio = mean(Brix, na.rm = TRUE), Pureza_Promedio = mean(Pureza, na.rm = TRUE))

df3_Pol <- data.frame("Variable" = c("Pol","Brix","Pureza"), 
                      "de 0 a 7 horas" = c(DIC28_Primero$Pol_Promedio,DIC28_Primero$Brix_Promedio, DIC28_Primero$Pureza_Promedio),
                      "de 8 a 15 horas" = c(DIC28_Segundo$Pol_Promedio,DIC28_Segundo$Brix_Promedio, DIC28_Segundo$Pureza_Promedio),
                      "de 16 a 23 horas" = c(DIC28_Tercero$Pol_Promedio,DIC28_Tercero$Brix_Promedio, DIC28_Tercero$Pureza_Promedio)
                      )
df3_Pol

Puede observarse que efectivamente, a nivel de promedios las primeras horas del día tienden a tener valores más elevados que en las últimas horas del día. Sin embargo, es necesario verificar el soporte de datos en cada rango, para la significancia estadística. Por ello, se analiza el número de muestreos por rango de horas.

# Bar Plots:
barplot(height=df3_dist$ensayos, names=df3_dist$hora, col = "light green", xlab = "Hora Muestreo", ylab = "Acumulado Muestras", cex.axis=0.5, cex.names=0.5)
barplot(height=df2_dist$ensayos, names=df2_dist$hora, col = "green", cex.axis=0.5, cex.names=0.5, add = TRUE)
barplot(height=df1_dist$ensayos, names=df1_dist$hora, col = "dark green", cex.axis=0.5, cex.names=0.5, add = TRUE)

legend("top", title="Período", legend= c("al 30-Nov","al 14-Dic","al 28-Dic"), fill =c("dark green", "green", "light green" ), box.lty=0)

En este caso, NO se cuenta con un soporte uniforme. Es decir, el número de muestras que se registran en las primeras horas del día es consistentemente menor que el número de muestras que se registran a medida que avanza el día.

Aún más, en el inicio de la zafra (Horizonte 1) fue el único período en el que se registraron muestras en las primeras horas (Rango 1). A medida que avanzó la zafra, los registros se fueron acumulando hacia el final del día, hasta la situación actual, donde parecieran concentrarse los registros en la última hora del día (antes de la media noche).

Conclusión:

No puede concluirse que durante las primeras horas del día existan mayores valores de Pol, Brix y Pureza, debido al sesgo que existe en los datos pues no se están registrando datos en las primeras horas del día. Esto no implica que no se esté muestreando necesariamente en estas horas, pues pudiera ser un tema de ingreso al sistema; de cualquier manera este problema de registro imposibilita el análisis horario pues no se cuenta con una estampa de tiempo adecuada para correlacionarla con otras variables a lo largo del día.

LS0tDQp0aXRsZTogIkFuYWxpc2lzIGRlIFZhbG9yZXMgQ29yZSBTYW1wbGVyIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KU2UgcmVhbGl6w7MgdW4gYW7DoWxpc2lzIGhvcmFyaW8gZGUgbG9zIHZhbG9yZXMgZGUgUG9sLCBCcml4IHkgUHVyZXphIHJlcG9ydGFkb3MgcG9yIGVsICpDb3JlIFNhbXBsZXIqLg0KDQpFbCBvYmpldGl2byBlcyB2ZXJpZmljYXIgbGEgaGlww7N0ZXNpcyBkZSBxdWUgZHVyYW50ZSBjaWVydG8gcmFuZ28gZGUgaG9yYXMgZGVsIGTDrWEgbG9zIHZhbG9yZXMgZGUgUG9sLCBCcml4IHkgUHVyZXphIHRpZW5kZW4gYSBzZXIgbcOhcyBhbHRvcyBxdWUgZW4gZWwgcmVzdG8gZGUgaG9yYXMuIEVzcGVjw61maWNhbWVudGUsICoqZHVyYW50ZSBsYXMgcHJpbWVyYXMgaG9yYXMgZGVsIGTDrWEuKioNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoZHBseXIpDQpgYGANCg0KIyMjIENvbmp1bnRvIGRlIERhdG9zIE11ZXN0cmFzIENvcmUgU2FtcGxlcg0KRXN0ZSBjb25qdW50byBkZSBkYXRvcyBzZSBvYnR1dm8gZGUgbGEgYmFzZSBkZSBkYXRvcyBMZWdhY3kgZGUgTGFib3JhdG9yaW8NCg0KYGBge3J9DQpkYXRhc2V0IDwtIHJlYWQuY3N2KGZpbGUgPSAnQzovVXNlcnMvc2JhcnJpb3MvT25lRHJpdmUgLSBVbml2ZXJzaWRhZCBHYWxpbGVvL0RhdGEgU2NpZW5jZS9SL1Byb3llY3Rvcy9QYW50YWxlb24vTWF4L0RhdG9zX0Nhw7FhLmNzdicpDQpkYXRhc2V0JEZlY2hhIDwtIGFzLkRhdGUoZGF0YXNldCRGZWNoYSxmb3JtYXQgPSAiJWQvJW0vJVkiKQ0KZGF0YXNldA0KYGBgDQojIyMgVmVyaWZpY2FjacOzbiBkZSBSYW5nb3MNCg0KU2UgZXhhbWluYW4gbG9zIHByb21lZGlvcyBkZSBQb2wsIEJyaXggeSBQdXJlemEgcGFyYSBsb3Mgc2lndWllbnRlcyByYW5nb3MgaG9yYXJpb3M6DQoNCi0gKipSYW5nbyAxOioqIDAgYSA3IGhvcmFzIA0KLSAqKlJhbmdvIDI6KiogOCBhIDE1IGhvcmFzDQotICoqUmFuZ28gMzoqKiAxNiBhIDIzIGhvcmFzDQoNClksIHBhcmEgY2FkYSBSYW5nbywgc2UgYW5hbGl6YW4gZGlzdGludG9zIGhvcml6b250ZXMgdGVtcG9yYWxlczoNCg0KLSAqKkhvcml6b250ZSAxOioqIDEwIE5PViBhbCAzMCBOT1YNCi0gKipIb3Jpem9udGUgMjoqKiAxMCBOT1YgYWwgMTQgRElDDQotICoqSG9yaXpvbnRlIDM6KiogMTAgTk9WIGFsIDI4IERJQw0KDQpgYGB7cn0NCmRmMSA8LSBkYXRhc2V0ICU+JSBmaWx0ZXIoRmVjaGEgPCAnMjAyMy0xMS0zMCcpDQpkZjFfZGlzdCA8LSBkZjEgJT4lICBncm91cF9ieShob3JhKSAlPiUgc3VtbWFyaXNlKFBvbCA9IG1lYW4oUG9sLCBuYS5ybSA9IFRSVUUpLCBCcml4ID0gbWVhbihCcml4LCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVyZXphID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkgLCBlbnNheW9zID0gbigpKQ0KDQpkZjIgPC0gZGF0YXNldCAlPiUgZmlsdGVyKEZlY2hhIDwgJzIwMjMtMTItMTQnKQ0KZGYyX2Rpc3QgPC0gZGYyICU+JSAgZ3JvdXBfYnkoaG9yYSkgJT4lIHN1bW1hcmlzZShQb2wgPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeCA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1cmV6YSA9IG1lYW4oUHVyZXphLCBuYS5ybSA9IFRSVUUpICwgZW5zYXlvcyA9IG4oKSkNCg0KZGYzIDwtIGRhdGFzZXQgJT4lIGZpbHRlcihGZWNoYSA8ICcyMDIzLTEyLTI4JykNCmRmM19kaXN0IDwtIGRmMyAlPiUgIGdyb3VwX2J5KGhvcmEpICU+JSBzdW1tYXJpc2UoUG9sID0gbWVhbihQb2wsIG5hLnJtID0gVFJVRSksIEJyaXggPSBtZWFuKEJyaXgsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXJlemEgPSBtZWFuKFB1cmV6YSwgbmEucm0gPSBUUlVFKSAsIGVuc2F5b3MgPSBuKCkpDQoNCmBgYA0KDQoNCiMjIyMgUHJvbWVkaW9zIEhvcml6b250ZSAxOiAxMCBOT1YgYWwgMzAgTk9WDQpgYGB7cn0NCk5PVjMwX1ByaW1lcm8gPC0gZGYxX2Rpc3QgJT4lIGZpbHRlcihob3JhICVpbiUgKDA6NykgKSAlPiUgDQogIHN1bW1hcmlzZShQb2xfUHJvbWVkaW8gPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeF9Qcm9tZWRpbyA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgUHVyZXphX1Byb21lZGlvID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkpDQoNCk5PVjMwX1NlZ3VuZG8gPC0gZGYxX2Rpc3QgJT4lIGZpbHRlcihob3JhICVpbiUgKDg6MTUpICkgJT4lIA0KICBzdW1tYXJpc2UoUG9sX1Byb21lZGlvID0gbWVhbihQb2wsIG5hLnJtID0gVFJVRSksIEJyaXhfUHJvbWVkaW8gPSBtZWFuKEJyaXgsIG5hLnJtID0gVFJVRSksIFB1cmV6YV9Qcm9tZWRpbyA9IG1lYW4oUHVyZXphLCBuYS5ybSA9IFRSVUUpKQ0KDQpOT1YzMF9UZXJjZXJvIDwtIGRmMV9kaXN0ICU+JSBmaWx0ZXIoaG9yYSAlaW4lICgxNjoyMykgKSAlPiUgDQogIHN1bW1hcmlzZShQb2xfUHJvbWVkaW8gPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeF9Qcm9tZWRpbyA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgUHVyZXphX1Byb21lZGlvID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkpDQoNCmRmMV9Qb2wgPC0gZGF0YS5mcmFtZSgiVmFyaWFibGUiID0gYygiUG9sIiwiQnJpeCIsIlB1cmV6YSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAiZGUgMCBhIDcgaG9yYXMiID0gYyhOT1YzMF9QcmltZXJvJFBvbF9Qcm9tZWRpbyxOT1YzMF9QcmltZXJvJEJyaXhfUHJvbWVkaW8sIE5PVjMwX1ByaW1lcm8kUHVyZXphX1Byb21lZGlvKSwNCiAgICAgICAgICAgICAgICAgICAgICAiZGUgOCBhIDE1IGhvcmFzIiA9IGMoTk9WMzBfU2VndW5kbyRQb2xfUHJvbWVkaW8sTk9WMzBfU2VndW5kbyRCcml4X1Byb21lZGlvLCBOT1YzMF9TZWd1bmRvJFB1cmV6YV9Qcm9tZWRpbyksDQogICAgICAgICAgICAgICAgICAgICAgImRlIDE2IGEgMjMgaG9yYXMiID0gYyhOT1YzMF9UZXJjZXJvJFBvbF9Qcm9tZWRpbyxOT1YzMF9UZXJjZXJvJEJyaXhfUHJvbWVkaW8sIE5PVjMwX1RlcmNlcm8kUHVyZXphX1Byb21lZGlvKQ0KICAgICAgICAgICAgICAgICAgICAgICkNCmRmMV9Qb2wNCmBgYA0KIyMjIyBQcm9tZWRpb3MgSG9yaXpvbnRlIDI6IDEwIE5PViBhbCAxNCBESUMNCmBgYHtyfQ0KRElDMTRfUHJpbWVybyA8LSBkZjJfZGlzdCAlPiUgZmlsdGVyKGhvcmEgJWluJSAoMDo3KSApICU+JSANCiAgc3VtbWFyaXNlKFBvbF9Qcm9tZWRpbyA9IG1lYW4oUG9sLCBuYS5ybSA9IFRSVUUpLCBCcml4X1Byb21lZGlvID0gbWVhbihCcml4LCBuYS5ybSA9IFRSVUUpLCBQdXJlemFfUHJvbWVkaW8gPSBtZWFuKFB1cmV6YSwgbmEucm0gPSBUUlVFKSkNCg0KRElDMTRfU2VndW5kbyA8LSBkZjJfZGlzdCAlPiUgZmlsdGVyKGhvcmEgJWluJSAoODoxNSkgKSAlPiUgDQogIHN1bW1hcmlzZShQb2xfUHJvbWVkaW8gPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeF9Qcm9tZWRpbyA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgUHVyZXphX1Byb21lZGlvID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkpDQoNCkRJQzE0X1RlcmNlcm8gPC0gZGYyX2Rpc3QgJT4lIGZpbHRlcihob3JhICVpbiUgKDE2OjIzKSApICU+JSANCiAgc3VtbWFyaXNlKFBvbF9Qcm9tZWRpbyA9IG1lYW4oUG9sLCBuYS5ybSA9IFRSVUUpLCBCcml4X1Byb21lZGlvID0gbWVhbihCcml4LCBuYS5ybSA9IFRSVUUpLCBQdXJlemFfUHJvbWVkaW8gPSBtZWFuKFB1cmV6YSwgbmEucm0gPSBUUlVFKSkNCg0KZGYyX1BvbCA8LSBkYXRhLmZyYW1lKCJWYXJpYWJsZSIgPSBjKCJQb2wiLCJCcml4IiwiUHVyZXphIiksIA0KICAgICAgICAgICAgICAgICAgICAgICJkZSAwIGEgNyBob3JhcyIgPSBjKERJQzE0X1ByaW1lcm8kUG9sX1Byb21lZGlvLERJQzE0X1ByaW1lcm8kQnJpeF9Qcm9tZWRpbywgRElDMTRfUHJpbWVybyRQdXJlemFfUHJvbWVkaW8pLA0KICAgICAgICAgICAgICAgICAgICAgICJkZSA4IGEgMTUgaG9yYXMiID0gYyhESUMxNF9TZWd1bmRvJFBvbF9Qcm9tZWRpbyxESUMxNF9TZWd1bmRvJEJyaXhfUHJvbWVkaW8sIERJQzE0X1NlZ3VuZG8kUHVyZXphX1Byb21lZGlvKSwNCiAgICAgICAgICAgICAgICAgICAgICAiZGUgMTYgYSAyMyBob3JhcyIgPSBjKERJQzE0X1RlcmNlcm8kUG9sX1Byb21lZGlvLERJQzE0X1RlcmNlcm8kQnJpeF9Qcm9tZWRpbywgRElDMTRfVGVyY2VybyRQdXJlemFfUHJvbWVkaW8pDQogICAgICAgICAgICAgICAgICAgICAgKQ0KZGYyX1BvbA0KYGBgDQoNCiMjIyMgUHJvbWVkaW9zIEhvcml6b250ZSAzOiAxMCBOT1YgYWwgMjggRElDDQpgYGB7cn0NCkRJQzI4X1ByaW1lcm8gPC0gZGYzX2Rpc3QgJT4lIGZpbHRlcihob3JhICVpbiUgKDA6NykgKSAlPiUgDQogIHN1bW1hcmlzZShQb2xfUHJvbWVkaW8gPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeF9Qcm9tZWRpbyA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgUHVyZXphX1Byb21lZGlvID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkpDQoNCkRJQzI4X1NlZ3VuZG8gPC0gZGYzX2Rpc3QgJT4lIGZpbHRlcihob3JhICVpbiUgKDg6MTUpICkgJT4lIA0KICBzdW1tYXJpc2UoUG9sX1Byb21lZGlvID0gbWVhbihQb2wsIG5hLnJtID0gVFJVRSksIEJyaXhfUHJvbWVkaW8gPSBtZWFuKEJyaXgsIG5hLnJtID0gVFJVRSksIFB1cmV6YV9Qcm9tZWRpbyA9IG1lYW4oUHVyZXphLCBuYS5ybSA9IFRSVUUpKQ0KDQpESUMyOF9UZXJjZXJvIDwtIGRmM19kaXN0ICU+JSBmaWx0ZXIoaG9yYSAlaW4lICgxNjoyMykgKSAlPiUgDQogIHN1bW1hcmlzZShQb2xfUHJvbWVkaW8gPSBtZWFuKFBvbCwgbmEucm0gPSBUUlVFKSwgQnJpeF9Qcm9tZWRpbyA9IG1lYW4oQnJpeCwgbmEucm0gPSBUUlVFKSwgUHVyZXphX1Byb21lZGlvID0gbWVhbihQdXJlemEsIG5hLnJtID0gVFJVRSkpDQoNCmRmM19Qb2wgPC0gZGF0YS5mcmFtZSgiVmFyaWFibGUiID0gYygiUG9sIiwiQnJpeCIsIlB1cmV6YSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAiZGUgMCBhIDcgaG9yYXMiID0gYyhESUMyOF9QcmltZXJvJFBvbF9Qcm9tZWRpbyxESUMyOF9QcmltZXJvJEJyaXhfUHJvbWVkaW8sIERJQzI4X1ByaW1lcm8kUHVyZXphX1Byb21lZGlvKSwNCiAgICAgICAgICAgICAgICAgICAgICAiZGUgOCBhIDE1IGhvcmFzIiA9IGMoRElDMjhfU2VndW5kbyRQb2xfUHJvbWVkaW8sRElDMjhfU2VndW5kbyRCcml4X1Byb21lZGlvLCBESUMyOF9TZWd1bmRvJFB1cmV6YV9Qcm9tZWRpbyksDQogICAgICAgICAgICAgICAgICAgICAgImRlIDE2IGEgMjMgaG9yYXMiID0gYyhESUMyOF9UZXJjZXJvJFBvbF9Qcm9tZWRpbyxESUMyOF9UZXJjZXJvJEJyaXhfUHJvbWVkaW8sIERJQzI4X1RlcmNlcm8kUHVyZXphX1Byb21lZGlvKQ0KICAgICAgICAgICAgICAgICAgICAgICkNCmRmM19Qb2wNCmBgYA0KDQpQdWVkZSBvYnNlcnZhcnNlIHF1ZSBlZmVjdGl2YW1lbnRlLCBhIG5pdmVsIGRlICoqcHJvbWVkaW9zKiogbGFzIHByaW1lcmFzIGhvcmFzIGRlbCBkw61hIHRpZW5kZW4gYSB0ZW5lciB2YWxvcmVzIG3DoXMgZWxldmFkb3MgcXVlIGVuIGxhcyDDumx0aW1hcyBob3JhcyBkZWwgZMOtYS4gU2luIGVtYmFyZ28sIGVzIG5lY2VzYXJpbyB2ZXJpZmljYXIgZWwgKnNvcG9ydGUqIGRlIGRhdG9zIGVuIGNhZGEgcmFuZ28sIHBhcmEgbGEgc2lnbmlmaWNhbmNpYSBlc3RhZMOtc3RpY2EuIFBvciBlbGxvLCBzZSBhbmFsaXphICoqZWwgbsO6bWVybyBkZSBtdWVzdHJlb3MgcG9yIHJhbmdvIGRlIGhvcmFzLioqDQoNCmBgYHtyfQ0KIyBCYXIgUGxvdHM6DQpiYXJwbG90KGhlaWdodD1kZjNfZGlzdCRlbnNheW9zLCBuYW1lcz1kZjNfZGlzdCRob3JhLCBjb2wgPSAibGlnaHQgZ3JlZW4iLCB4bGFiID0gIkhvcmEgTXVlc3RyZW8iLCB5bGFiID0gIkFjdW11bGFkbyBNdWVzdHJhcyIsIGNleC5heGlzPTAuNSwgY2V4Lm5hbWVzPTAuNSkNCmJhcnBsb3QoaGVpZ2h0PWRmMl9kaXN0JGVuc2F5b3MsIG5hbWVzPWRmMl9kaXN0JGhvcmEsIGNvbCA9ICJncmVlbiIsIGNleC5heGlzPTAuNSwgY2V4Lm5hbWVzPTAuNSwgYWRkID0gVFJVRSkNCmJhcnBsb3QoaGVpZ2h0PWRmMV9kaXN0JGVuc2F5b3MsIG5hbWVzPWRmMV9kaXN0JGhvcmEsIGNvbCA9ICJkYXJrIGdyZWVuIiwgY2V4LmF4aXM9MC41LCBjZXgubmFtZXM9MC41LCBhZGQgPSBUUlVFKQ0KDQpsZWdlbmQoInRvcCIsIHRpdGxlPSJQZXLDrW9kbyIsIGxlZ2VuZD0gYygiYWwgMzAtTm92IiwiYWwgMTQtRGljIiwiYWwgMjgtRGljIiksIGZpbGwgPWMoImRhcmsgZ3JlZW4iLCAiZ3JlZW4iLCAibGlnaHQgZ3JlZW4iICksIGJveC5sdHk9MCkNCg0KYGBgDQoNCkVuIGVzdGUgY2FzbywgKipOTyBzZSBjdWVudGEgY29uIHVuIHNvcG9ydGUgdW5pZm9ybWUqKi4gRXMgZGVjaXIsIGVsIG7Dum1lcm8gZGUgbXVlc3RyYXMgKnF1ZSBzZSByZWdpc3RyYW4qIGVuIGxhcyBwcmltZXJhcyBob3JhcyBkZWwgZMOtYSBlcyBjb25zaXN0ZW50ZW1lbnRlIG1lbm9yIHF1ZSBlbCBuw7ptZXJvIGRlIG11ZXN0cmFzICpxdWUgc2UgcmVnaXN0cmFuKiBhIG1lZGlkYSBxdWUgYXZhbnphIGVsIGTDrWEuIA0KDQpBw7puIG3DoXMsIGVuIGVsIGluaWNpbyBkZSBsYSB6YWZyYSAoSG9yaXpvbnRlIDEpIGZ1ZSBlbCDDum5pY28gcGVyw61vZG8gZW4gZWwgcXVlIHNlIHJlZ2lzdHJhcm9uIG11ZXN0cmFzIGVuIGxhcyBwcmltZXJhcyBob3JhcyAoUmFuZ28gMSkuIEEgbWVkaWRhIHF1ZSBhdmFuesOzIGxhIHphZnJhLCBsb3MgcmVnaXN0cm9zIHNlIGZ1ZXJvbiBhY3VtdWxhbmRvIGhhY2lhIGVsIGZpbmFsIGRlbCBkw61hLCBoYXN0YSBsYSBzaXR1YWNpw7NuIGFjdHVhbCwgZG9uZGUgcGFyZWNpZXJhbiBjb25jZW50cmFyc2UgbG9zIHJlZ2lzdHJvcyBlbiBsYSDDumx0aW1hIGhvcmEgZGVsIGTDrWEgKGFudGVzIGRlIGxhIG1lZGlhIG5vY2hlKS4NCg0KIyMjIENvbmNsdXNpw7NuOg0KKipObyBwdWVkZSBjb25jbHVpcnNlIHF1ZSBkdXJhbnRlIGxhcyBwcmltZXJhcyBob3JhcyBkZWwgZMOtYSBleGlzdGFuIG1heW9yZXMgdmFsb3JlcyBkZSBQb2wsIEJyaXggeSBQdXJlemEqKiwgZGViaWRvIGFsIHNlc2dvIHF1ZSBleGlzdGUgZW4gbG9zIGRhdG9zIHB1ZXMgKm5vIHNlIGVzdMOhbiByZWdpc3RyYW5kbyBkYXRvcyBlbiBsYXMgcHJpbWVyYXMgaG9yYXMgZGVsIGTDrWEqLiBFc3RvIG5vIGltcGxpY2EgcXVlIG5vIHNlIGVzdMOpIG11ZXN0cmVhbmRvIG5lY2VzYXJpYW1lbnRlIGVuIGVzdGFzIGhvcmFzLCBwdWVzIHB1ZGllcmEgc2VyIHVuIHRlbWEgZGUgaW5ncmVzbyBhbCBzaXN0ZW1hOyBkZSBjdWFscXVpZXIgbWFuZXJhIGVzdGUgcHJvYmxlbWEgZGUgcmVnaXN0cm8gaW1wb3NpYmlsaXRhIGVsIGFuw6FsaXNpcyBob3JhcmlvIHB1ZXMgbm8gc2UgY3VlbnRhIGNvbiB1bmEgZXN0YW1wYSBkZSB0aWVtcG8gYWRlY3VhZGEgcGFyYSBjb3JyZWxhY2lvbmFybGEgY29uIG90cmFzIHZhcmlhYmxlcyBhIGxvIGxhcmdvIGRlbCBkw61hLg0K