ProyectoEstadistica

Andrea Borboa, Irving Flores, Tatiana Hinostro

5/12/2021

library(pacman)
p_load(rmdformats, readr, readxl, ggplot2, plotly, DT, xfun, gridExtra, leaflet, GGally, psych, corrplot, cluster, plotly, gapminder,forecast,tseries,lattice,ggfortify,zoo,fdth,data.table)
library(readr)
Ventasenergy <- read_csv("D:/Estadistica aplicada/APLICADA/Ventasenergy.csv")
## Rows: 155 Columns: 8
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (8): Total, Residencial, Comercial, Servicios, Agricola, Industrial, Emp...
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
base <- read_csv("D:/Estadistica aplicada/APLICADA/base.csv")
## Rows: 156 Columns: 28
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (28): Baja California, Baja California Sur, Campeche, Chiapas, Chihuahua...
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
GeneracionEnergy <- read_csv("D:/Estadistica aplicada/APLICADA/GeneracionEnergy.csv")
## New names:
## * CFE -> CFE...5
## * `PIE (1)` -> `PIE (1)...6`
## * CFE -> CFE...14
## * `PIE (1)` -> `PIE (1)...15`
## Rows: 156 Columns: 17
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (17): Total, Termoelectrica, Vapor, Ciclo combinado, CFE...5, PIE (1)......
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
GeneracionFechas <- read_csv("D:/Estadistica aplicada/APLICADA/GeneracionFechas.csv")
## Rows: 156 Columns: 18
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (18): Anhos, Total, Termoelectrica, Vapor, Ciclo_combinado, CFE_1, PIE, ...
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
co2yconsumo <- read_csv("D:/Estadistica aplicada/APLICADA/co2yconsumo.csv")
## Rows: 41 Columns: 5
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (2): Entity, Code
## dbl (2): Fecha, co2PerCapita
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.

INTRODUCCIÓN

Se observa en el mundo que la generación de energía eléctrica está muy relacionada con el desarrollo de un país. La razón de esta nota técnica es dar a conocer el parque eléctrico nacional que tiene México, cómo ha crecido en centrales, potencia y generación a través del tiempo; conocer cuál es la demanda actual de este fluido en el ámbito nacional, y su proyección a futuro. Otro objetivo de este trabajo es proponer el incremento de las fuentes de generación de energía eléctrica por medio de fuentes que utilicen recursos renovables, a fin de mitigar el cambio climático, sin descuidar el abasto de energía, para no frenar el desarrollo nacional.

ANTECEDENTES

La generación de energía eléctrica inició en México a fines del siglo XIX. La primera planta generadora que se instaló en el país (1879) estuvo en León, Guanajuato, y era utilizada por la fábrica textil “La Americana”. Casi inmediatamente se extendió esta forma de generar electricidad dentro de la producción minera y escasamente para la iluminación residencial y pública.

En 1889 operaba la primera planta hidroeléctrica en Batopilas (Chihuahua) y extendió sus redes de distribución hacia mercados urbanos y comerciales donde la población era de mayor capacidad económica.

Durante el régimen de Porfirio Díaz se otorgó al sector eléctrico el carácter de servicio público, colocándose las primeras 40 lámparas “de arco” en la Plaza de la Constitución, cien más en la Alameda Central, y comenzó la iluminación de la entonces calle de Reforma y de algunas otras vías de la Ciudad de México.

En 1937 México tenía 18.3 millones de habitantes, de los cuales únicamente siete millones contaban con electricidad, proporcionada con serias dificultades por tres empresas privadas.

En ese momento las interrupciones de luz eran constantes y las tarifas muy elevadas.

Para resolver esa situación que no permitía el desarrollo del país, el gobierno federal creó, el 14 de agosto de 1937, la Comisión Federal de Electricidad (CFE).

Actualmente (septiembre, 2020), cuenta con 335 mil 195 torres de transmisión y subtransmisión; 110,187 kilómetros de longitud de línea (cables); 2,236 subestaciones de potencia y 50,808 kilómetros de longitud de la Red Nacional de Comunicaciones, cable de Fibra Óptica. Tiene 16 Gerencias Divisionales de Distribución y 1,269 Centros de Atención a Clientes.

Su parque de generación está conformado por 192 centrales: ciclo combinado, termoeléctricas, hidroeléctricas, carboeléctricas, nucleoeléctrica, turbo gas, geo termoeléctrica, Eolo eléctrica, Diesel y fotovoltaicas.

La CFE es reconocida como una de las mayores empresas eléctricas del mundo y su objetivo principal es proveer el servicio de energía eléctrica a la población mexicana.

OBJETIVOS PARTICULARES

1.- ¿Como es el panorama general de generación de energía eléctrica en México?

México está conformado por 2015 centrales generadoras de energía eléctrica, teniendo una importante diversificación de generación de energía eléctrica. Sin embargo, la mayor parte de éstas utilizan recursos no renovables, con lo cual, de mantener esta tendencia de generación del recurso eléctrico, probablemente no se alcanzará el progreso sustentable que se pretende en México en un futuro a corto plazo. En este momento no se puede realizar un cambio brusco en la manera de generar energía eléctrica porque seguramente sería difícil abastecer de manera satisfactoria todos los sectores de consumo en la medida que la demanda así lo solicite.

2.- ¿Como está Sonora en términos de capacidad de generación de energía, tomando en cuenta el crecimiento poblacional, vamos a poder abastecer de energía a la población?

Sonora tiene la capacidad para producir mucha energía renovable si se invirtiera lo suficiente en ello podría abastecer a toda la población sin problemas.

3.- ¿Está relacionado el consumo de energía con la producción de CO2?

El consumo de energía y la producción de co2 están débilmente relacionados.

TEORÍA

En el presente estudio veremos qué tan relacionado está el consumo de energía en México con la producción del CO2 y porque están relacionados. Ya que México está entre los países que más contaminan del ranking de países por emisiones de CO2, formado por 184 países, en el que se ordenan los países de menos a más contaminantes.

Para ello analizaremos los datos sobre el panorama general en México y con ello analizar porque México genera tanto CO2, donde se produce y por qué.

MÉTODOS

  • Estadística descriptiva

La estadística descriptiva es una disciplina que se encarga de recoger, almacenar, ordenar, realizar tablas o gráficos y calcular parámetros básicos sobre el conjunto de datos.

José Francisco López, 15 de noviembre, 2019 Estadística descriptiva. Economipedia.com

  • Análisis de series de tiempo

Es una secuencia de datos u observaciones, medidos en determinados momentos y ordenados cronológicamente. Visualmente, es una curva que evoluciona en el tiempo. (Pricing, 2016)

  • Correlación

La correlación lineal y la regresión lineal simple son métodos estadísticos que estudian la relación lineal existente entre dos variables. Joaquín Amat Rodrigo, junio, 2016

Datos

Generación de energía en México

data.table(GeneracionFechas)
##      Anhos    Total Termoelectrica   Vapor Ciclo_combinado   CFE_1       PIE
##   1:  2005 11262241        5100375 6002459         2337931 3664528  110264.9
##   2:  2005 15577533       10344027 4487264         5734407 2062659 3671748.1
##   3:  2005 17328906       11449536 5318630         6042515 2362058 3680457.0
##   4:  2005 18013164       11435919 5814104         5523857 1880243 3643613.4
##   5:  2005 19043406       12360247 5538894         6643250 2312349 4330900.7
##  ---                                                                        
## 152:  2017 24764989       17482233 5034472        11558968 3751953 7807014.4
## 153:  2017 22381107       15083232 3624253        10742118 3472390 7269727.8
## 154:  2017 21689612       14524599 3452764        10254772 3488768 6766004.4
## 155:  2017 19486492       13954642 2834551        10514250 3199952 7314297.3
## 156:  2017 18330948       13197129 2149601        10517773 3358823 7158949.8
##       Turbogas Combustion_interna    Dual Carboelectrica Geotermolectrica
##   1:  49142.78         1043263.58 1293983       536737.1         982254.0
##   2:  80605.75           41750.57 1135535      1248642.7         555177.6
##   3:  39981.44           48409.49 1161372      1634597.8         636478.6
##   4:  49646.78           48311.67 1274197      1661237.3         604669.6
##   5: 120403.17           57700.49 1358108      1749564.8         555800.1
##  ---                                                                     
## 152: 682424.86          206368.04       0      3023501.5         487829.5
## 153: 563663.75          153197.19       0      2513530.9         474587.9
## 154: 682791.96          134269.94       0      2509365.5         487877.8
## 155: 488833.82          117007.01       0      2129241.8         452685.8
## 156: 399136.21          130619.33       0      1838525.6         482330.2
##      Nucleoelectrica    Eolica      CFE_2       PIE_1 Hidroelectrica
##   1:           574.4    574.40     0.0000 1379316.030              0
##   2:        836743.3    439.63   439.6300       0.000        1456968
##   3:        984458.8    324.11   324.1100       0.000        1462139
##   4:        958967.1    581.31   581.3100       0.000        2077592
##   5:        974412.6    417.21   417.2100       0.000        2044857
##  ---                                                                
## 152:        547417.2  97867.13  6722.1657   91144.968        3125188
## 153:        617417.1   9456.34   702.8605    8753.479        3681998
## 154:        726640.6 186358.47  5057.0013  181301.467        3253848
## 155:        585978.5 238623.47 12295.9599  226327.505        2124728
## 156:       1179548.2 313514.59 11934.1725  301580.420        1319315
##      Fotovoltaica
##   1:           NA
##   2:       0.0000
##   3:       0.0000
##   4:       0.0000
##   5:       0.0000
##  ---             
## 152:     952.0413
## 153:     884.4210
## 154:     923.2029
## 155:     592.6310
## 156:     585.6169
x <- (sum(GeneracionEnergy$Total))
y <- (sum(GeneracionEnergy$Termoelectrica))
porcentaje <- (y/x)*100

a <- (sum(GeneracionEnergy$Vapor))
porcentaje1 <- (a/x)*100

b <- (sum(GeneracionEnergy$`Ciclo combinado`))
porcentaje2 <- (b/x)*100

c <- (sum(GeneracionEnergy$CFE...5))
porcentaje3 <- (c/x)*100

d <- (sum(GeneracionEnergy$`PIE (1)...6`))
porcentaje4 <- (d/x)*100

e <- (sum(GeneracionEnergy$Turbogas))
porcentaje5 <- (e/x)*100

f <- (sum(GeneracionEnergy$`Combustion interna`))
porcentaje6 <- (f/x)*100

g <- (sum(GeneracionEnergy$Dual))
porcentaje7 <- (g/x)*100

h <- (sum(GeneracionEnergy$Carboelectrica))
porcentaje8 <- (h/x)*100

i <- (sum(GeneracionEnergy$Geotermolectrica))
porcentaje9 <- (i/x)*100

j <- (sum(GeneracionEnergy$Nucleoelectrica))
porcentaje10 <- (j/x)*100

k <- (sum(GeneracionEnergy$Eolica))
porcentaje11 <- (k/x)*100

l <- (sum(GeneracionEnergy$CFE...14))
porcentaje12 <- (l/x)*100

m <- (sum(GeneracionEnergy$`PIE (1)...15`))
porcentaje13 <- (m/x)*100

n <- (sum(GeneracionEnergy$Hidroelectrica))
porcentaje14 <- (n/x)*100

ñ <- (sum(GeneracionEnergy$Fotovoltaica))
porcentaje15 <-/x)*100

Porcentajes de energía generada por tipo de energía en México desde el 2005 al 2017

Categorias <- c("Termoelectrica","Vapor","Ciclo combinado","CFE1","PIE","Turbogas","Combustión Interna","DUAL","Carboelectrica","Geotermoelectrica","Nucleoelectrica","Eolica","CFE1","PIE","Hidroelectrica","Fotovoltoica")

Porcentajes <- c(porcentaje,porcentaje1,porcentaje2,porcentaje3,porcentaje4,porcentaje5,porcentaje6,porcentaje7,porcentaje8,porcentaje9,porcentaje10,porcentaje11,porcentaje12,porcentaje13,porcentaje14,porcentaje15)

datos <- data.frame(Categorias,Porcentajes)

head(datos)
##        Categorias Porcentajes
## 1  Termoelectrica   67.089273
## 2           Vapor   18.455280
## 3 Ciclo combinado   46.541934
## 4            CFE1   15.451278
## 5             PIE   31.090656
## 6        Turbogas    1.554872

Figura 1

ggplot(datos,aes(x="",y=round(Porcentajes), fill=Categorias))+
  geom_bar(stat = "identity",
           color="white")+
    geom_text(aes(label=round(Porcentajes)),
              position=position_stack(vjust=0.5))

Como se observa en la Figura 1 el tipo de energía mayor producida en México es la Termoeléctrica. La energía termoeléctrica se genera utilizando el calor para aumentar la temperatura de un fluido, por lo general el agua; hasta que esta se evapora.

¿Qué tipos de energía termoeléctrica hay?

  • Energía termoeléctrica basada en combustibles fósiles
  • Energía termoeléctrica de origen nuclear
  • Energía termoeléctrica de origen renovable

La energía termoeléctrica es la más utilizada a lo largo de la historia y se basa en quemar combustibles no renovables, como carbón principalmente, gas natural y en menor medida petróleo, lo cual genera mucho CO2.

Ventas de energía en México

data.table(GeneracionFechas)
##      Anhos    Total Termoelectrica   Vapor Ciclo_combinado   CFE_1       PIE
##   1:  2005 11262241        5100375 6002459         2337931 3664528  110264.9
##   2:  2005 15577533       10344027 4487264         5734407 2062659 3671748.1
##   3:  2005 17328906       11449536 5318630         6042515 2362058 3680457.0
##   4:  2005 18013164       11435919 5814104         5523857 1880243 3643613.4
##   5:  2005 19043406       12360247 5538894         6643250 2312349 4330900.7
##  ---                                                                        
## 152:  2017 24764989       17482233 5034472        11558968 3751953 7807014.4
## 153:  2017 22381107       15083232 3624253        10742118 3472390 7269727.8
## 154:  2017 21689612       14524599 3452764        10254772 3488768 6766004.4
## 155:  2017 19486492       13954642 2834551        10514250 3199952 7314297.3
## 156:  2017 18330948       13197129 2149601        10517773 3358823 7158949.8
##       Turbogas Combustion_interna    Dual Carboelectrica Geotermolectrica
##   1:  49142.78         1043263.58 1293983       536737.1         982254.0
##   2:  80605.75           41750.57 1135535      1248642.7         555177.6
##   3:  39981.44           48409.49 1161372      1634597.8         636478.6
##   4:  49646.78           48311.67 1274197      1661237.3         604669.6
##   5: 120403.17           57700.49 1358108      1749564.8         555800.1
##  ---                                                                     
## 152: 682424.86          206368.04       0      3023501.5         487829.5
## 153: 563663.75          153197.19       0      2513530.9         474587.9
## 154: 682791.96          134269.94       0      2509365.5         487877.8
## 155: 488833.82          117007.01       0      2129241.8         452685.8
## 156: 399136.21          130619.33       0      1838525.6         482330.2
##      Nucleoelectrica    Eolica      CFE_2       PIE_1 Hidroelectrica
##   1:           574.4    574.40     0.0000 1379316.030              0
##   2:        836743.3    439.63   439.6300       0.000        1456968
##   3:        984458.8    324.11   324.1100       0.000        1462139
##   4:        958967.1    581.31   581.3100       0.000        2077592
##   5:        974412.6    417.21   417.2100       0.000        2044857
##  ---                                                                
## 152:        547417.2  97867.13  6722.1657   91144.968        3125188
## 153:        617417.1   9456.34   702.8605    8753.479        3681998
## 154:        726640.6 186358.47  5057.0013  181301.467        3253848
## 155:        585978.5 238623.47 12295.9599  226327.505        2124728
## 156:       1179548.2 313514.59 11934.1725  301580.420        1319315
##      Fotovoltaica
##   1:           NA
##   2:       0.0000
##   3:       0.0000
##   4:       0.0000
##   5:       0.0000
##  ---             
## 152:     952.0413
## 153:     884.4210
## 154:     923.2029
## 155:     592.6310
## 156:     585.6169
x1 <- (sum(Ventasenergy$Total))
y2 <- (sum(Ventasenergy$Residencial))
por <- (y2/x1)*100

a2 <- (sum(Ventasenergy$Comercial))
por1 <- (a2/x1)*100

b2 <- (sum(Ventasenergy$Servicios))
por2 <- (b2/x1)*100

c2 <- (sum(Ventasenergy$Agricola))
por3 <- (c2/x1)*100

d2 <- (sum(Ventasenergy$Industrial))
por4 <- (d2/x1)*100

e2 <- (sum(Ventasenergy$Empresa))
por5 <- (e2/x1)*100

f2 <- (sum(Ventasenergy$GranIndustria))
por6 <- (f2/x1)*100

Porcentajes de Ventas de energía en México por comprador

Cat <- c("Residenciañ","Comercial","Servicios","Agricola","Indistrial","Empresa", "GranIndustria")

Porcent <- c(por,por1,por2,por3,por4,por5,por6)

datos1 <- data.frame(Cat,Porcent)

head(datos1)
##           Cat   Porcent
## 1 Residenciañ 25.963488
## 2   Comercial  7.067889
## 3   Servicios  4.040734
## 4    Agricola  4.910997
## 5  Indistrial 58.016892
## 6     Empresa 37.511926

Figura 2

ggplot(datos1,aes(x="",y=round(Porcent), fill=Cat))+
  geom_bar(stat = "identity",
           color="white")+
    geom_text(aes(label=round(Porcent)),
              position=position_stack(vjust=0.5))

Como se muestra en la figura 2 las Industrias y las grandes empresas son las que consumen mucha más energía en comparación con las otras, al mismo tiempo, es bien sabido que las antes mencionadas son las que generan más contaminación. La causa principal de la contaminación industrial es la quema a gran escala de combustibles fósiles como el petróleo, el carbón, el gas, más el agua residual envenenada que contamina tierra, ríos y lagunas, generando así una cantidad desmedida de CO2.

Estadística descriptiva

Generación total de energía en México por mes desde el año 2005 al 2017.

summary(GeneracionEnergy$Total) 
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 15577533 18892873 20133709 20492573 22210866 25187626

Tenemos una moda de 20492573 lo que quiere decir que normalmente esa es la cantidad producida al mes en la república mexicana.

tabla1 <- fdt(GeneracionEnergy$Total)
tabla1
##                 Class limits  f   rf rf(%)  cf  cf(%)
##  [15421757.769,16534840.485)  6 0.04  3.85   6   3.85
##    [16534840.485,17647923.2)  9 0.06  5.77  15   9.62
##    [17647923.2,18761005.916) 23 0.15 14.74  38  24.36
##  [18761005.916,19874088.631) 37 0.24 23.72  75  48.08
##  [19874088.631,20987171.347) 18 0.12 11.54  93  59.62
##  [20987171.347,22100254.063) 23 0.15 14.74 116  74.36
##  [22100254.063,23213336.778) 12 0.08  7.69 128  82.05
##  [23213336.778,24326419.494) 18 0.12 11.54 146  93.59
##  [24326419.494,25439502.209) 10 0.06  6.41 156 100.00

Aquí podemos observar que el intervalo que es encuentra en la fila 4 [18761005.916 , 19874088.631] es el más frecuente.

Figura 3

plot(tabla1,type='fh', main="Histograma de Generación de energía en México", xlab="Energía generada",ylab = "Frecuencia", col = "navy")

En la figura 3 se nos muestra el diagrama de frecuencias de la energía generada al mes en México, como podemos observar la distribución de los datos es uniforme, los datos se reparten de igual manera.

Figura 4

boxplot(GeneracionEnergy, main= "Generación de Energía", ylab="Energia",xlab="Categoria", col = rainbow(ncol(GeneracionEnergy)))

En la Figura 4 podemos observar el gráfico de caja y bigote o boxplot de la generación de energía en México

Ventas de energía por mes en México

summary(Ventasenergy$Total)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 12538886 15012213 16079752 16319818 17881757 20799210

Tenemos una moda de 16319818 lo cual significa que es la cantidad que comúnmente se vende al mes de energía eléctrica.

tabla <- fdt(Ventasenergy$Total)
tabla
##                 Class limits  f   rf rf(%)  cf  cf(%)
##   [12413497.14,13368353.265) 10 0.06  6.45  10   6.45
##  [13368353.265,14323209.389) 15 0.10  9.68  25  16.13
##  [14323209.389,15278065.514) 23 0.15 14.84  48  30.97
##  [15278065.514,16232921.638) 33 0.21 21.29  81  52.26
##  [16232921.638,17187777.763) 27 0.17 17.42 108  69.68
##  [17187777.763,18142633.888) 13 0.08  8.39 121  78.06
##  [18142633.888,19097490.012) 21 0.14 13.55 142  91.61
##  [19097490.012,20052346.137) 10 0.06  6.45 152  98.06
##  [20052346.137,21007202.262)  3 0.02  1.94 155 100.00

Aqui podemos observar que el intervalo más frecuente es el de la fila 4 [15278065.514 , 16232921.638]

Ahora analizaremos los datos de el CO2 per capita emitidos en México.

summary(co2yconsumo$co2PerCapita)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.769   3.784   3.951   3.948   4.125   4.449

Tenemos un mínimo de 2.769 y un máximo de 4.449 de co2 emitido en México por persona al año, lo cual si lo multiplicamos por la población de la república mexicana es demasiado co2 producido al año.

tabla2 <- fdt(co2yconsumo$co2PerCapita)
tabla2
##   Class limits  f   rf rf(%) cf  cf(%)
##  [2.741,2.991)  1 0.02  2.44  1   2.44
##  [2.991,3.242)  0 0.00  0.00  1   2.44
##  [3.242,3.492)  1 0.02  2.44  2   4.88
##  [3.492,3.742)  5 0.12 12.20  7  17.07
##  [3.742,3.993) 15 0.37 36.59 22  53.66
##  [3.993,4.243) 13 0.32 31.71 35  85.37
##  [4.243,4.493)  6 0.15 14.63 41 100.00

Como podemos observar la clase más frecuente es la que se encuentra en la fila 5 lo que quiere decir que una persona produce entre 3.742 y 3.993 de co2 al año.

Figura 4

plot(tabla2,type='fh', main="Histograma de CO2 per capita en México", xlab="co2",ylab = "Frecuencia", col = "Magenta")

Como se puede observar en la figura 4 los datos se encuentran sesgados a la izquierda lo cual significa que la cola de la distribución se alarga para valores inferiores a la media.

Análisis de series de tiempo

base.ts=ts(base, start = 2005,frequency = 12)

Figura 5

autoplot(base.ts, xlab="Años", ylab="Energía", main="Capacidad de Energía")

La figura 5 indica que a través de los años los estados de la república mexicana han generado una mayor capacidad de energía puesto que esto se debe a que la energía eléctrica está llegando a todas las comunidades donde antes no se contaba con el servicio.

En la mayoría de los estados de la república mexicana la capacidad de energía se encuentra estancada lo que quiere decir que aún hay muchos sectores en esos estados donde aún no se ha instalado la energía eléctrica y probablemente en unos años más se necesiten más mega watts instalados de capacidad para poder abastecer a la población de la república logrando así un aumento en el PIB.

Sonora.ts=ts(base.ts[,24], start = 2005,frequency = 12)

Figura 6

autoplot(Sonora.ts, xlab="Años", ylab="Energía", main="Energia en Sonora", colour = "purple")

En la figura 6 podemos observar cómo en sonora hubo un aumento desmedido en la capacidad de energía al rededor del 2013 para después lograr un consumo menor alrededor del año 2014, dándonos cuenta que probablemente existió una mayor producción de comercio para que surgiera el consumo de energías primarias y secundarias en transformación.

Gran crecimiento entre el 2010 y 2015

En 2015, el monto de inversión en proyectos para la generación de energía solar en México se calculó en un total de 2.5 miles de millones de dólares, de acuerdo con datos de la agencia GTM Resecar. Asimismo, la agencia estimó que el número de compañías especializadas en energía solar en nuestro país creció 1,200% entre 2010 y 2015.Uno de estos proyectos es la calibración de estaciones solari métricas del SMN, a cargo del Instituto de Geofísica de la UNAM. Dicho proyecto tuvo una inversión cercana a los 11 millones de pesos, otorgados por el Consejo Nacional de Ciencia y Tecnología (Conacyt) y por la secretaria de Energía (Sener), mediante el Fondo de Sustentabilidad Energética. A través de este proyecto se pudo determinar que el recurso solar promedio diario en todo el país es de aproximadamente 5.5 kilovatios hora (kWh) por cada metro cuadrado Las celdas fotovoltaicas (PV, por sus siglas en inglés) representan una pequeña unidad en un equipo para producir electricidad.

Figura 7

Electricidad <- ggplot(GeneracionFechas)+
  geom_line(aes(x=Anhos,y=Termoelectrica,colour="Termoelectrica"))+
    geom_line(aes(x=Anhos,y=Vapor,colour="Vapor"))+
    geom_line(aes(x=Anhos,y=Ciclo_combinado,colour="Ciclo combinado"))+
  geom_line(aes(x=Anhos,y=CFE_1,colour="CFE"))+
    geom_line(aes(x=Anhos,y=PIE,colour="PIE"))+
    geom_line(aes(x=Anhos,y=Turbogas,colour="Turbogas"))+
    geom_line(aes(x=Anhos,y=Combustion_interna,colour="Combustion interna"))+
  geom_line(aes(x=Anhos,y=Dual,colour="DUAL"))+
    geom_line(aes(x=Anhos,y=Carboelectrica,colour="Carboelectrica"))+
    geom_line(aes(x=Anhos,y=Geotermolectrica,colour="Geotermolectrica"))+
  geom_line(aes(x=Anhos,y=Nucleoelectrica,colour="Nucleoelectrica"))+
    geom_line(aes(x=Anhos,y=Eolica,colour="Eolica"))+
    geom_line(aes(x=Anhos,y=CFE_2,colour="CFE"))+
  geom_line(aes(x=Anhos,y=PIE_1,colour="PIE_1"))+
    geom_line(aes(x=Anhos,y=Hidroelectrica,colour="Hidroelectrica"))+
    geom_line(aes(x=Anhos,y=Fotovoltaica,colour="Fotovoltaica"))+
    labs(title="Reporte de Generación de energía",x="Fecha",y="Energía")


ggplotly(Electricidad)

En la figura 7 se muestra como los diferentes sectores generan energía, dándonos un alto porcentaje en el sector industrial ya que el consumo generado de energía por termoeléctricas es el más alto hasta el momento y esto nos indica que muchas industrias aun no tratan de analizar como pudiera ser eficiente el consumo de energía para beneficiar con el uso de nuevas tecnologías y energías renovables.

En la república mexicana existen varias centrales de energía termoeléctrica y recientemente el Gobierno anunció un convenio con la empresa canadiense Hydro-Québec para modernizar 60 plantas hidroeléctricas en el país, aumentar la producción de energía y reducir el costo del servicio de luz en los hogares.

Ventasenergy.ts=ts(Ventasenergy, start = 2005,frequency = 12)

Figura 8

autoplot(Ventasenergy.ts, xlab="Años", ylab="Ventas energía", main="Compradores de Energía Electrica y Ventas")

En la Figura 8 podemos ver como las Industrias son los mayores consumidores de energía a través de los años. Confirmando así la información consultada donde nos dice que la industria por su acelerado desarrollo, lo que los lleva a realizar convenios con empresas que generen consumo de energías renovables para una mayor eficiencia.

Figura 9

Industrias.ts=ts(Ventasenergy.ts[,8], start = 2005, frequency = 12)
autoplot(Industrias.ts, colour = "red" , xlab="Años", ylab="Ventas", main="Ventas de energía a Industrias")

En la Figura 9 se puede observar claramente como la venta de energía por Industrias disminuyo en gran cantidad al rededor del año 2009

Figura 10

servicios.ts=ts(Ventasenergy.ts[,4], start = 2005, frequency = 12)
autoplot(servicios.ts, colour = "Magenta", xlab = "años", ylab = "Ventas", main="Ventas de Energía a Servicios")

En la Figura 10 podemos ver un gran aumento en las ventas de energía a servicios entre el año 2010 y 2015 lo cual coincide con la generación de energía en Sonora antes mencionada en la Figura 10

Figura 11

CO2 <- ggplot(co2yconsumo)+
  geom_line(aes(x=Fecha,y=co2PerCapita,colour="CO2 per capita"))+
    geom_line(aes(x=Fecha,y=ConsumoPerCapita,colour="Consumo Per Capita"))

ggplotly(CO2)

Como podemos ver en la Figura 11 que posiblemente estén relacionadas.

Analisis de correlación

co2percapita <- co2yconsumo$co2PerCapita
consumoelectrico <- co2yconsumo$ConsumoPerCapita


co2PerCapita <- c(co2percapita)
ConsumoPerCapita <- c(consumoelectrico)

data <- cbind(co2PerCapita, ConsumoPerCapita)
data
##       co2PerCapita ConsumoPerCapita
##  [1,]       3.9513        8394.0000
##  [2,]       4.0876        9298.0000
##  [3,]       4.2768        9857.0000
##  [4,]       3.8175           1.0025
##  [5,]       3.7208           1.0356
##  [6,]       3.7820           1.0786
##  [7,]       3.7811           1.0914
##  [8,]       3.8639           1.1481
##  [9,]       3.7835           1.1731
## [10,]       3.9272           1.2296
## [11,]       3.7769           1.1937
## [12,]       3.8606           1.2212
## [13,]       3.8218           1.2386
## [14,]       3.8146           1.2653
## [15,]       3.8991           1.3386
## [16,]       3.6176           1.3659
## [17,]       3.7120           1.4249
## [18,]       3.8964           1.5265
## [19,]       4.0430           1.5497
## [20,]       4.0059           1.6088
## [21,]       4.0047           1.6856
## [22,]       4.0948           1.7097
## [23,]       4.0514           1.7146
## [24,]       4.2467           1.6773
## [25,]       4.1990           1.7685
## [26,]       4.3771           1.8196
## [27,]       4.4307           1.8329
## [28,]       4.3948           1.8599
## [29,]       4.4487           1.8529
## [30,]       4.2316           1.8029
## [31,]       4.0650           1.9013
## [32,]       4.1848           2.0847
## [33,]       4.2320           2.1228
## [34,]       4.1247           2.0204
## [35,]       3.9976           2.0395
## [36,]       3.9552           2.0908
## [37,]       3.9146           2.1508
## [38,]       3.6854           2.1152
## [39,]       3.6081           2.2957
## [40,]       3.4138           2.2940
## [41,]       2.7686           2.1280

Usaremos el metodo de Pearson para calcular el coeficiente de correlación entre CO2 Per Capita y Consumo de energía Per Capita

cor(x=co2yconsumo$co2PerCapita, y=co2yconsumo$ConsumoPerCapita, method='pearson')
## [1] 0.1542473

Obtenemos una correlación de 0.1542473 lo cual significa que existe una correlación débil entre las emisiones de co2 per cápita en México y el Consumo de Energía.

Figura 12

library(PerformanceAnalytics)
## Loading required package: xts
## 
## Attaching package: 'xts'
## The following objects are masked from 'package:data.table':
## 
##     first, last
## The following object is masked from 'package:leaflet':
## 
##     addLegend
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
dat1 <- data.frame(ConsumoPerCapita,co2PerCapita)

chart.Correlation(dat1)

En la Figura 12 podemos observar gráficamente la correlación

library(scatterplot3d)

set.seed(2)
x <- rnorm(ConsumoPerCapita)
y <- rnorm(co2PerCapita)

scatterplot3d(x, y, pch = 19, color = "blue")

En este diagrama de correlación en 3D podemos observar que el co2 esta poco relacionado con el consumo electrico.

¿Porque utilizar energías renovables en México?

Las fuentes renovables son energía accesible, limpia y suficiente que puede mejorar sustancialmente la calidad de vida de la población y frenar el cambio climático. Además, son una alternativa que está totalmente a nuestro alcance, ya que México cuenta con abundantes recursos solares y eólicos, suficientes para generar 100% de la energía consumida anualmente en el país, e incluso podría existir un excedente que podría ser exportado, de acuerdo con el reporte de El potencial renovable de México.

Otra razón para preferir los renovables es que sus precios han mostrado una tendencia a la baja constante durante la última década, es decir, son más baratos para el Estado. Esta tendencia continuaría con la masificación de la producción, sin embargo, actualmente el costo de instalación de un sistema fotovoltaico sigue siendo uno de los obstáculos más grandes para su acceso.

CONCLUSIÓN

Después de analizar los datos y los gráficos arrojados encontramos algunos datos que pueden ser influyentes en el hecho de que México sea uno de los países que producen mayor cantidad de CO2.

El primer posible factor es que la mayor cantidad de energía generada en México es proveniente de la energía Termoeléctrica y se basa en quemar combustibles no renovables, como carbón principalmente, gas natural y en menor medida petróleo, lo cual genera mucho CO2.

El segundo es que los mayores consumidores de energía son las Industrias las cuales a su vez generan mucho CO2 ya que dentro de estas industrias se encuentran

-Industria del petróleo. -Transporte.

Y una alternativa para disminuir el exceso de emisión de CO2 en México son las energías renovables y Sonora es atractivo para invertir en energías renovables, por sus leyes y el potencial que tiene para desarrollar proyectos de energías limpias como la solar y eólica.

México, DF. 14 de octubre de 2014 (Agencia Informativa Conacyt). - Si en México se aprovechara la radiación solar que recibe el uno por ciento del territorio del estado de Sonora, se podría abastecer de energía eléctrica a todo el país, indicó el doctor Camilo Arancibia, investigador del Instituto de Energía Renovable de la Universidad Nacional Autónoma de México (UNAM).

REFERENCIAS BIBLIOGRÁFICAS

CFE. Programa de Obras e Inversiones del Sector Eléctrico. POISE (2011-2025). México, D.F.: Comisión Federal de Electricidad, 2010.

CFE. Estadísticas año 2011. Comisión Federal de Electricidad, Subdirección de Generación, 2011. Disponible en World Wide Web: www.cfe.gob.mx.

DOF. Ley para el Aprovechamiento de Energías Renovables y el Financiamiento de la Transición Energética, México. DOF 12-01-2012.

INTERNATIONAL ENERGY AGENCY. World Energy Balances, OECD and OECD data bases. 2008 Edition. International Energy Agency, 2008. Disponible en World Wide Web: www.iea.org.

INTERNATIONAL ENERGY AGENCY. Statistics and balances retrieved 2008 1-5-8, Implementing Agreement on Ocean Energy Systems. In: 2009 Annual Report. International Energy Agency, 2010.

INTERNATIONAL ENERGY AGENCY. Energy use in the new millennium - Trends in IEA countries Magazine.

INTERGOVERNMENTAL PANEL ON CLIMATE CHANGE. Task force on national greenhouse gas inventories - Guidelines. Vol. 2. Energy. Intergovernmental Panel On Climate Change, 2006.

SENER. Planeación energética. (PRONASE), Eficiencia energética para México. México, D.F.: Secretaría de Energía, 2010.

Descargar Codigo

xfun::embed_file("base.csv")

Download base.csv

xfun::embed_file("Ventasenergy.csv")

Download Ventasenergy.csv

xfun::embed_file("GeneracionEnergy.csv")

Download GeneracionEnergy.csv

xfun::embed_file("GeneracionFechas.csv")

Download GeneracionFechas.csv

xfun::embed_file("co2yconsumo.csv")

Download co2yconsumo.csv

LS0tDQp0aXRsZTogIlByb3llY3RvRXN0YWRpc3RpY2EiDQphdXRob3I6ICJBbmRyZWEgQm9yYm9hLCBJcnZpbmcgRmxvcmVzLCBUYXRpYW5hIEhpbm9zdHJvIg0KZGF0ZTogIjUvMTIvMjAyMSINCm91dHB1dDogIA0KICBybWRmb3JtYXRzOjpkb3duY3V0ZTogDQogICAgaGlnaGxpZ2h0OiB0YW5nbyANCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUgDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShwYWNtYW4pDQpwX2xvYWQocm1kZm9ybWF0cywgcmVhZHIsIHJlYWR4bCwgZ2dwbG90MiwgcGxvdGx5LCBEVCwgeGZ1biwgZ3JpZEV4dHJhLCBsZWFmbGV0LCBHR2FsbHksIHBzeWNoLCBjb3JycGxvdCwgY2x1c3RlciwgcGxvdGx5LCBnYXBtaW5kZXIsZm9yZWNhc3QsdHNlcmllcyxsYXR0aWNlLGdnZm9ydGlmeSx6b28sZmR0aCxkYXRhLnRhYmxlKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkcikNClZlbnRhc2VuZXJneSA8LSByZWFkX2NzdigiRDovRXN0YWRpc3RpY2EgYXBsaWNhZGEvQVBMSUNBREEvVmVudGFzZW5lcmd5LmNzdiIpDQoNCmJhc2UgPC0gcmVhZF9jc3YoIkQ6L0VzdGFkaXN0aWNhIGFwbGljYWRhL0FQTElDQURBL2Jhc2UuY3N2IikNCg0KR2VuZXJhY2lvbkVuZXJneSA8LSByZWFkX2NzdigiRDovRXN0YWRpc3RpY2EgYXBsaWNhZGEvQVBMSUNBREEvR2VuZXJhY2lvbkVuZXJneS5jc3YiKQ0KDQpHZW5lcmFjaW9uRmVjaGFzIDwtIHJlYWRfY3N2KCJEOi9Fc3RhZGlzdGljYSBhcGxpY2FkYS9BUExJQ0FEQS9HZW5lcmFjaW9uRmVjaGFzLmNzdiIpDQoNCmNvMnljb25zdW1vIDwtIHJlYWRfY3N2KCJEOi9Fc3RhZGlzdGljYSBhcGxpY2FkYS9BUExJQ0FEQS9jbzJ5Y29uc3Vtby5jc3YiKQ0KDQpgYGANCiMgSU5UUk9EVUNDScOTTg0KU2Ugb2JzZXJ2YSBlbiBlbCBtdW5kbyBxdWUgbGEgZ2VuZXJhY2nDs24gZGUgZW5lcmfDrWEgZWzDqWN0cmljYSBlc3TDoSBtdXkgcmVsYWNpb25hZGEgY29uIGVsIGRlc2Fycm9sbG8gZGUgdW4gcGHDrXMuIExhIHJhesOzbiBkZSBlc3RhIG5vdGEgdMOpY25pY2EgZXMgZGFyIGEgY29ub2NlciBlbCBwYXJxdWUgZWzDqWN0cmljbyBuYWNpb25hbCBxdWUgdGllbmUgTcOpeGljbywgY8OzbW8gaGEgY3JlY2lkbyBlbiBjZW50cmFsZXMsIHBvdGVuY2lhIHkgZ2VuZXJhY2nDs24gYSB0cmF2w6lzIGRlbCB0aWVtcG87IGNvbm9jZXIgY3XDoWwgZXMgbGEgZGVtYW5kYSBhY3R1YWwgZGUgZXN0ZSBmbHVpZG8gZW4gZWwgw6FtYml0byBuYWNpb25hbCwgeSBzdSBwcm95ZWNjacOzbiBhIGZ1dHVyby4gT3RybyBvYmpldGl2byBkZSBlc3RlIHRyYWJham8gZXMgcHJvcG9uZXIgZWwgaW5jcmVtZW50byBkZSBsYXMgZnVlbnRlcyBkZSBnZW5lcmFjacOzbiBkZSBlbmVyZ8OtYSBlbMOpY3RyaWNhIHBvciBtZWRpbyBkZSBmdWVudGVzIHF1ZSB1dGlsaWNlbiByZWN1cnNvcyByZW5vdmFibGVzLCBhIGZpbiBkZSBtaXRpZ2FyIGVsIGNhbWJpbyBjbGltw6F0aWNvLCBzaW4gZGVzY3VpZGFyIGVsIGFiYXN0byBkZSBlbmVyZ8OtYSwgcGFyYSBubyBmcmVuYXIgZWwgZGVzYXJyb2xsbyBuYWNpb25hbC4NCg0KIyMgQU5URUNFREVOVEVTDQoNCkxhIGdlbmVyYWNpw7NuIGRlIGVuZXJnw61hIGVsw6ljdHJpY2EgaW5pY2nDsyBlbiBNw6l4aWNvIGEgZmluZXMgZGVsIHNpZ2xvIFhJWC4gTGEgcHJpbWVyYSBwbGFudGEgZ2VuZXJhZG9yYSBxdWUgc2UgaW5zdGFsw7MgZW4gZWwgcGHDrXMgKDE4NzkpIGVzdHV2byBlbiBMZcOzbiwgR3VhbmFqdWF0bywgeSBlcmEgdXRpbGl6YWRhIHBvciBsYSBmw6FicmljYSB0ZXh0aWwg4oCcTGEgQW1lcmljYW5hIi4gQ2FzaSBpbm1lZGlhdGFtZW50ZSBzZSBleHRlbmRpw7MgZXN0YSBmb3JtYSBkZSBnZW5lcmFyIGVsZWN0cmljaWRhZCBkZW50cm8gZGUgbGEgcHJvZHVjY2nDs24gbWluZXJhIHkgZXNjYXNhbWVudGUgcGFyYSBsYSBpbHVtaW5hY2nDs24gcmVzaWRlbmNpYWwgeSBww7pibGljYS4NCg0KRW4gMTg4OSBvcGVyYWJhIGxhIHByaW1lcmEgcGxhbnRhIGhpZHJvZWzDqWN0cmljYSBlbiBCYXRvcGlsYXMgKENoaWh1YWh1YSkgeSBleHRlbmRpw7Mgc3VzIHJlZGVzIGRlIGRpc3RyaWJ1Y2nDs24gaGFjaWEgbWVyY2Fkb3MgdXJiYW5vcyB5IGNvbWVyY2lhbGVzIGRvbmRlIGxhIHBvYmxhY2nDs24gZXJhIGRlIG1heW9yIGNhcGFjaWRhZCBlY29uw7NtaWNhLg0KDQpEdXJhbnRlIGVsIHLDqWdpbWVuIGRlIFBvcmZpcmlvIETDrWF6IHNlIG90b3Jnw7MgYWwgc2VjdG9yIGVsw6ljdHJpY28gZWwgY2Fyw6FjdGVyIGRlIHNlcnZpY2lvIHDDumJsaWNvLCBjb2xvY8OhbmRvc2UgbGFzIHByaW1lcmFzIDQwIGzDoW1wYXJhcyAiZGUgYXJjbyIgZW4gbGEgUGxhemEgZGUgbGEgQ29uc3RpdHVjacOzbiwgY2llbiBtw6FzIGVuIGxhIEFsYW1lZGEgQ2VudHJhbCwgeSBjb21lbnrDsyBsYSBpbHVtaW5hY2nDs24gZGUgbGEgZW50b25jZXMgY2FsbGUgZGUgUmVmb3JtYSB5IGRlIGFsZ3VuYXMgb3RyYXMgdsOtYXMgZGUgbGEgQ2l1ZGFkIGRlIE3DqXhpY28uDQoNCkVuIDE5MzcgTcOpeGljbyB0ZW7DrWEgMTguMyBtaWxsb25lcyBkZSBoYWJpdGFudGVzLCBkZSBsb3MgY3VhbGVzIMO6bmljYW1lbnRlIHNpZXRlIG1pbGxvbmVzIGNvbnRhYmFuIGNvbiBlbGVjdHJpY2lkYWQsIHByb3BvcmNpb25hZGEgY29uIHNlcmlhcyBkaWZpY3VsdGFkZXMgcG9yIHRyZXMgZW1wcmVzYXMgcHJpdmFkYXMuDQoNCiBFbiBlc2UgbW9tZW50byBsYXMgaW50ZXJydXBjaW9uZXMgZGUgbHV6IGVyYW4gY29uc3RhbnRlcyB5IGxhcyB0YXJpZmFzIG11eSBlbGV2YWRhcy4NCg0KUGFyYSByZXNvbHZlciBlc2Egc2l0dWFjacOzbiBxdWUgbm8gcGVybWl0w61hIGVsIGRlc2Fycm9sbG8gZGVsIHBhw61zLCBlbCBnb2JpZXJubyBmZWRlcmFsIGNyZcOzLCBlbCAxNCBkZSBhZ29zdG8gZGUgMTkzNywgbGEgQ29taXNpw7NuIEZlZGVyYWwgZGUgRWxlY3RyaWNpZGFkIChDRkUpLg0KDQpBY3R1YWxtZW50ZSAoc2VwdGllbWJyZSwgMjAyMCksIGN1ZW50YSBjb24gMzM1IG1pbCAxOTUgdG9ycmVzIGRlIHRyYW5zbWlzacOzbiB5IHN1YnRyYW5zbWlzacOzbjsgMTEwLDE4NyBraWzDs21ldHJvcyBkZSBsb25naXR1ZCBkZSBsw61uZWEgKGNhYmxlcyk7IDIsMjM2IHN1YmVzdGFjaW9uZXMgZGUgcG90ZW5jaWEgeSA1MCw4MDgga2lsw7NtZXRyb3MgZGUgbG9uZ2l0dWQgZGUgbGEgUmVkIE5hY2lvbmFsIGRlIENvbXVuaWNhY2lvbmVzLCBjYWJsZSBkZSBGaWJyYSDDk3B0aWNhLiBUaWVuZSAxNiBHZXJlbmNpYXMgRGl2aXNpb25hbGVzIGRlIERpc3RyaWJ1Y2nDs24geSAxLDI2OSBDZW50cm9zIGRlIEF0ZW5jacOzbiBhIENsaWVudGVzLg0KDQpTdSBwYXJxdWUgZGUgZ2VuZXJhY2nDs24gZXN0w6EgY29uZm9ybWFkbyBwb3IgMTkyIGNlbnRyYWxlczogY2ljbG8gY29tYmluYWRvLCB0ZXJtb2Vsw6ljdHJpY2FzLCBoaWRyb2Vsw6ljdHJpY2FzLCBjYXJib2Vsw6ljdHJpY2FzLCBudWNsZW9lbMOpY3RyaWNhLCB0dXJibyBnYXMsIGdlbyB0ZXJtb2Vsw6ljdHJpY2EsIEVvbG8gZWzDqWN0cmljYSwgRGllc2VsIHkgZm90b3ZvbHRhaWNhcy4NCg0KTGEgQ0ZFIGVzIHJlY29ub2NpZGEgY29tbyB1bmEgZGUgbGFzIG1heW9yZXMgZW1wcmVzYXMgZWzDqWN0cmljYXMgZGVsIG11bmRvIHkgc3Ugb2JqZXRpdm8gcHJpbmNpcGFsIGVzIHByb3ZlZXIgZWwgc2VydmljaW8gZGUgZW5lcmfDrWEgZWzDqWN0cmljYSBhIGxhIHBvYmxhY2nDs24gbWV4aWNhbmEuDQoNCg0KDQoNCiMgT0JKRVRJVk9TIFBBUlRJQ1VMQVJFUw0KMS4tIMK/Q29tbyBlcyBlbCBwYW5vcmFtYSBnZW5lcmFsIGRlIGdlbmVyYWNpw7NuIGRlIGVuZXJnw61hIGVsw6ljdHJpY2EgZW4gTcOpeGljbz8NCg0KTcOpeGljbyBlc3TDoSBjb25mb3JtYWRvIHBvciAyMDE1IGNlbnRyYWxlcyBnZW5lcmFkb3JhcyBkZSBlbmVyZ8OtYSBlbMOpY3RyaWNhLCB0ZW5pZW5kbyB1bmEgaW1wb3J0YW50ZSBkaXZlcnNpZmljYWNpw7NuIGRlIGdlbmVyYWNpw7NuIGRlIGVuZXJnw61hIGVsw6ljdHJpY2EuIFNpbiBlbWJhcmdvLCBsYSBtYXlvciBwYXJ0ZSBkZSDDqXN0YXMgdXRpbGl6YW4gcmVjdXJzb3Mgbm8gcmVub3ZhYmxlcywgY29uIGxvIGN1YWwsIGRlIG1hbnRlbmVyIGVzdGEgdGVuZGVuY2lhIGRlIGdlbmVyYWNpw7NuIGRlbCByZWN1cnNvIGVsw6ljdHJpY28sIHByb2JhYmxlbWVudGUgbm8gc2UgYWxjYW56YXLDoSBlbCBwcm9ncmVzbyBzdXN0ZW50YWJsZSBxdWUgc2UgcHJldGVuZGUgZW4gTcOpeGljbyBlbiB1biBmdXR1cm8gYSBjb3J0byBwbGF6by4gRW4gZXN0ZSBtb21lbnRvIG5vIHNlIHB1ZWRlIHJlYWxpemFyIHVuIGNhbWJpbyBicnVzY28gZW4gbGEgbWFuZXJhIGRlIGdlbmVyYXIgZW5lcmfDrWEgZWzDqWN0cmljYSBwb3JxdWUgc2VndXJhbWVudGUgc2Vyw61hIGRpZsOtY2lsIGFiYXN0ZWNlciBkZSBtYW5lcmEgc2F0aXNmYWN0b3JpYSB0b2RvcyBsb3Mgc2VjdG9yZXMgZGUgY29uc3VtbyBlbiBsYSBtZWRpZGEgcXVlIGxhIGRlbWFuZGEgYXPDrSBsbyBzb2xpY2l0ZS4NCg0KDQoyLi0gwr9Db21vIGVzdMOhIFNvbm9yYSBlbiB0w6lybWlub3MgZGUgY2FwYWNpZGFkIGRlIGdlbmVyYWNpw7NuIGRlIGVuZXJnw61hLCB0b21hbmRvIGVuIGN1ZW50YSBlbCBjcmVjaW1pZW50byBwb2JsYWNpb25hbCwgdmFtb3MgYSBwb2RlciBhYmFzdGVjZXIgZGUgZW5lcmfDrWEgYSBsYSBwb2JsYWNpw7NuPw0KDQpTb25vcmEgdGllbmUgbGEgY2FwYWNpZGFkIHBhcmEgcHJvZHVjaXIgbXVjaGEgZW5lcmfDrWEgcmVub3ZhYmxlIHNpIHNlIGludmlydGllcmEgbG8gc3VmaWNpZW50ZSBlbiBlbGxvIHBvZHLDrWEgYWJhc3RlY2VyIGEgdG9kYSBsYSBwb2JsYWNpw7NuIHNpbiBwcm9ibGVtYXMuDQoNCjMuLSDCv0VzdMOhIHJlbGFjaW9uYWRvIGVsIGNvbnN1bW8gZGUgZW5lcmfDrWEgY29uIGxhIHByb2R1Y2Npw7NuIGRlIENPMj8NCg0KRWwgY29uc3VtbyBkZSBlbmVyZ8OtYSB5IGxhIHByb2R1Y2Npw7NuIGRlIGNvMiBlc3TDoW4gZMOpYmlsbWVudGUgcmVsYWNpb25hZG9zLg0KDQoNCiMgVEVPUsONQQ0KRW4gZWwgcHJlc2VudGUgZXN0dWRpbyB2ZXJlbW9zIHF1w6kgdGFuIHJlbGFjaW9uYWRvIGVzdMOhIGVsIGNvbnN1bW8gZGUgZW5lcmfDrWEgZW4gTcOpeGljbyBjb24gbGEgcHJvZHVjY2nDs24gZGVsIENPMiB5IHBvcnF1ZSBlc3TDoW4gcmVsYWNpb25hZG9zLiBZYSBxdWUgTcOpeGljbyBlc3TDoSBlbnRyZSBsb3MgcGHDrXNlcyBxdWUgbcOhcyBjb250YW1pbmFuIGRlbCByYW5raW5nIGRlIHBhw61zZXMgcG9yIGVtaXNpb25lcyBkZSBDTzIsIGZvcm1hZG8gcG9yIDE4NCBwYcOtc2VzLCBlbiBlbCBxdWUgc2Ugb3JkZW5hbiBsb3MgcGHDrXNlcyBkZSBtZW5vcyBhIG3DoXMgY29udGFtaW5hbnRlcy4NCg0KUGFyYSBlbGxvIGFuYWxpemFyZW1vcyBsb3MgZGF0b3Mgc29icmUgZWwgcGFub3JhbWEgZ2VuZXJhbCBlbiBNw6l4aWNvIHkgY29uIGVsbG8gYW5hbGl6YXIgcG9ycXVlIE3DqXhpY28gZ2VuZXJhIHRhbnRvIENPMiwgZG9uZGUgc2UgcHJvZHVjZSB5IHBvciBxdcOpLiANCg0KDQoNCiMgTcOJVE9ET1MNCg0KLSBFc3RhZMOtc3RpY2EgZGVzY3JpcHRpdmENCg0KTGEgZXN0YWTDrXN0aWNhIGRlc2NyaXB0aXZhIGVzIHVuYSBkaXNjaXBsaW5hIHF1ZSBzZSBlbmNhcmdhIGRlIHJlY29nZXIsIGFsbWFjZW5hciwgb3JkZW5hciwgcmVhbGl6YXIgdGFibGFzIG8gZ3LDoWZpY29zIHkgY2FsY3VsYXIgcGFyw6FtZXRyb3MgYsOhc2ljb3Mgc29icmUgZWwgY29uanVudG8gZGUgZGF0b3MuDQoNCkpvc8OpIEZyYW5jaXNjbyBMw7NwZXosIDE1IGRlIG5vdmllbWJyZSwgMjAxOQ0KRXN0YWTDrXN0aWNhIGRlc2NyaXB0aXZhLiBFY29ub21pcGVkaWEuY29tDQoNCi0gQW7DoWxpc2lzIGRlIHNlcmllcyBkZSB0aWVtcG8NCg0KRXMgdW5hIHNlY3VlbmNpYSBkZSBkYXRvcyB1IG9ic2VydmFjaW9uZXMsIG1lZGlkb3MgZW4gZGV0ZXJtaW5hZG9zIG1vbWVudG9zIHkgb3JkZW5hZG9zIGNyb25vbMOzZ2ljYW1lbnRlLiBWaXN1YWxtZW50ZSwgZXMgdW5hIGN1cnZhIHF1ZSBldm9sdWNpb25hIGVuIGVsIHRpZW1wby4gKFByaWNpbmcsIDIwMTYpDQoNCi0gQ29ycmVsYWNpw7NuIA0KDQpMYSBjb3JyZWxhY2nDs24gbGluZWFsIHkgbGEgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlIHNvbiBtw6l0b2RvcyBlc3RhZMOtc3RpY29zIHF1ZSBlc3R1ZGlhbiBsYSByZWxhY2nDs24gbGluZWFsIGV4aXN0ZW50ZSBlbnRyZSBkb3MgdmFyaWFibGVzLg0KSm9hcXXDrW4gQW1hdCBSb2RyaWdvLCBqdW5pbywgMjAxNg0KDQoNCiMgRGF0b3MNCg0KIyMjIEdlbmVyYWNpw7NuIGRlIGVuZXJnw61hIGVuIE3DqXhpY28NCg0KYGBge3J9DQpkYXRhLnRhYmxlKEdlbmVyYWNpb25GZWNoYXMpDQpgYGANCg0KYGBge3J9DQp4IDwtIChzdW0oR2VuZXJhY2lvbkVuZXJneSRUb3RhbCkpDQp5IDwtIChzdW0oR2VuZXJhY2lvbkVuZXJneSRUZXJtb2VsZWN0cmljYSkpDQpwb3JjZW50YWplIDwtICh5L3gpKjEwMA0KDQphIDwtIChzdW0oR2VuZXJhY2lvbkVuZXJneSRWYXBvcikpDQpwb3JjZW50YWplMSA8LSAoYS94KSoxMDANCg0KYiA8LSAoc3VtKEdlbmVyYWNpb25FbmVyZ3kkYENpY2xvIGNvbWJpbmFkb2ApKQ0KcG9yY2VudGFqZTIgPC0gKGIveCkqMTAwDQoNCmMgPC0gKHN1bShHZW5lcmFjaW9uRW5lcmd5JENGRS4uLjUpKQ0KcG9yY2VudGFqZTMgPC0gKGMveCkqMTAwDQoNCmQgPC0gKHN1bShHZW5lcmFjaW9uRW5lcmd5JGBQSUUgKDEpLi4uNmApKQ0KcG9yY2VudGFqZTQgPC0gKGQveCkqMTAwDQoNCmUgPC0gKHN1bShHZW5lcmFjaW9uRW5lcmd5JFR1cmJvZ2FzKSkNCnBvcmNlbnRhamU1IDwtIChlL3gpKjEwMA0KDQpmIDwtIChzdW0oR2VuZXJhY2lvbkVuZXJneSRgQ29tYnVzdGlvbiBpbnRlcm5hYCkpDQpwb3JjZW50YWplNiA8LSAoZi94KSoxMDANCg0KZyA8LSAoc3VtKEdlbmVyYWNpb25FbmVyZ3kkRHVhbCkpDQpwb3JjZW50YWplNyA8LSAoZy94KSoxMDANCg0KaCA8LSAoc3VtKEdlbmVyYWNpb25FbmVyZ3kkQ2FyYm9lbGVjdHJpY2EpKQ0KcG9yY2VudGFqZTggPC0gKGgveCkqMTAwDQoNCmkgPC0gKHN1bShHZW5lcmFjaW9uRW5lcmd5JEdlb3Rlcm1vbGVjdHJpY2EpKQ0KcG9yY2VudGFqZTkgPC0gKGkveCkqMTAwDQoNCmogPC0gKHN1bShHZW5lcmFjaW9uRW5lcmd5JE51Y2xlb2VsZWN0cmljYSkpDQpwb3JjZW50YWplMTAgPC0gKGoveCkqMTAwDQoNCmsgPC0gKHN1bShHZW5lcmFjaW9uRW5lcmd5JEVvbGljYSkpDQpwb3JjZW50YWplMTEgPC0gKGsveCkqMTAwDQoNCmwgPC0gKHN1bShHZW5lcmFjaW9uRW5lcmd5JENGRS4uLjE0KSkNCnBvcmNlbnRhamUxMiA8LSAobC94KSoxMDANCg0KbSA8LSAoc3VtKEdlbmVyYWNpb25FbmVyZ3kkYFBJRSAoMSkuLi4xNWApKQ0KcG9yY2VudGFqZTEzIDwtIChtL3gpKjEwMA0KDQpuIDwtIChzdW0oR2VuZXJhY2lvbkVuZXJneSRIaWRyb2VsZWN0cmljYSkpDQpwb3JjZW50YWplMTQgPC0gKG4veCkqMTAwDQoNCsOxIDwtIChzdW0oR2VuZXJhY2lvbkVuZXJneSRGb3Rvdm9sdGFpY2EpKQ0KcG9yY2VudGFqZTE1IDwtICjDsS94KSoxMDANCg0KYGBgDQoNCg0KUG9yY2VudGFqZXMgZGUgZW5lcmfDrWEgZ2VuZXJhZGEgcG9yIHRpcG8gZGUgZW5lcmfDrWEgZW4gTcOpeGljbyBkZXNkZSBlbCAyMDA1IGFsIDIwMTcNCg0KYGBge3J9DQoNCkNhdGVnb3JpYXMgPC0gYygiVGVybW9lbGVjdHJpY2EiLCJWYXBvciIsIkNpY2xvIGNvbWJpbmFkbyIsIkNGRTEiLCJQSUUiLCJUdXJib2dhcyIsIkNvbWJ1c3Rpw7NuIEludGVybmEiLCJEVUFMIiwiQ2FyYm9lbGVjdHJpY2EiLCJHZW90ZXJtb2VsZWN0cmljYSIsIk51Y2xlb2VsZWN0cmljYSIsIkVvbGljYSIsIkNGRTEiLCJQSUUiLCJIaWRyb2VsZWN0cmljYSIsIkZvdG92b2x0b2ljYSIpDQoNClBvcmNlbnRhamVzIDwtIGMocG9yY2VudGFqZSxwb3JjZW50YWplMSxwb3JjZW50YWplMixwb3JjZW50YWplMyxwb3JjZW50YWplNCxwb3JjZW50YWplNSxwb3JjZW50YWplNixwb3JjZW50YWplNyxwb3JjZW50YWplOCxwb3JjZW50YWplOSxwb3JjZW50YWplMTAscG9yY2VudGFqZTExLHBvcmNlbnRhamUxMixwb3JjZW50YWplMTMscG9yY2VudGFqZTE0LHBvcmNlbnRhamUxNSkNCg0KZGF0b3MgPC0gZGF0YS5mcmFtZShDYXRlZ29yaWFzLFBvcmNlbnRhamVzKQ0KDQpoZWFkKGRhdG9zKQ0KDQpgYGANCg0KIyMjIEZpZ3VyYSAxDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdG9zLGFlcyh4PSIiLHk9cm91bmQoUG9yY2VudGFqZXMpLCBmaWxsPUNhdGVnb3JpYXMpKSsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsDQogICAgICAgICAgIGNvbG9yPSJ3aGl0ZSIpKw0KICAgIGdlb21fdGV4dChhZXMobGFiZWw9cm91bmQoUG9yY2VudGFqZXMpKSwNCiAgICAgICAgICAgICAgcG9zaXRpb249cG9zaXRpb25fc3RhY2sodmp1c3Q9MC41KSkNCmBgYA0KDQoNCj5Db21vIHNlIG9ic2VydmEgZW4gbGEgKipGaWd1cmEgMSoqIGVsIHRpcG8gZGUgZW5lcmfDrWEgbWF5b3IgcHJvZHVjaWRhIGVuIE3DqXhpY28gZXMgbGEgVGVybW9lbMOpY3RyaWNhLiANCkxhIGVuZXJnw61hIHRlcm1vZWzDqWN0cmljYSBzZSBnZW5lcmEgdXRpbGl6YW5kbyBlbCBjYWxvciBwYXJhIGF1bWVudGFyIGxhIHRlbXBlcmF0dXJhIGRlIHVuIGZsdWlkbywgcG9yIGxvIGdlbmVyYWwgZWwgYWd1YTsgaGFzdGEgcXVlIGVzdGEgc2UgZXZhcG9yYS4NCg0KDQrCv1F1w6kgdGlwb3MgZGUgZW5lcmfDrWEgdGVybW9lbMOpY3RyaWNhIGhheT8NCg0KLSBFbmVyZ8OtYSB0ZXJtb2Vsw6ljdHJpY2EgYmFzYWRhIGVuIGNvbWJ1c3RpYmxlcyBmw7NzaWxlcw0KLSBFbmVyZ8OtYSB0ZXJtb2Vsw6ljdHJpY2EgZGUgb3JpZ2VuIG51Y2xlYXINCi0gRW5lcmfDrWEgdGVybW9lbMOpY3RyaWNhIGRlIG9yaWdlbiByZW5vdmFibGUNCg0KTGEgZW5lcmfDrWEgdGVybW9lbMOpY3RyaWNhIGVzIGxhIG3DoXMgdXRpbGl6YWRhIGEgbG8gbGFyZ28gZGUgbGEgaGlzdG9yaWEgeSBzZSBiYXNhIGVuIHF1ZW1hciBjb21idXN0aWJsZXMgbm8gcmVub3ZhYmxlcywgY29tbyBjYXJiw7NuIHByaW5jaXBhbG1lbnRlLCBnYXMgbmF0dXJhbCB5IGVuIG1lbm9yIG1lZGlkYSBwZXRyw7NsZW8sIGxvIGN1YWwgZ2VuZXJhIG11Y2hvIENPMi4NCg0KDQojIyMgVmVudGFzIGRlIGVuZXJnw61hIGVuIE3DqXhpY28NCg0KDQoNCmBgYHtyfQ0KZGF0YS50YWJsZShHZW5lcmFjaW9uRmVjaGFzKQ0KYGBgDQoNCmBgYHtyfQ0KeDEgPC0gKHN1bShWZW50YXNlbmVyZ3kkVG90YWwpKQ0KeTIgPC0gKHN1bShWZW50YXNlbmVyZ3kkUmVzaWRlbmNpYWwpKQ0KcG9yIDwtICh5Mi94MSkqMTAwDQoNCmEyIDwtIChzdW0oVmVudGFzZW5lcmd5JENvbWVyY2lhbCkpDQpwb3IxIDwtIChhMi94MSkqMTAwDQoNCmIyIDwtIChzdW0oVmVudGFzZW5lcmd5JFNlcnZpY2lvcykpDQpwb3IyIDwtIChiMi94MSkqMTAwDQoNCmMyIDwtIChzdW0oVmVudGFzZW5lcmd5JEFncmljb2xhKSkNCnBvcjMgPC0gKGMyL3gxKSoxMDANCg0KZDIgPC0gKHN1bShWZW50YXNlbmVyZ3kkSW5kdXN0cmlhbCkpDQpwb3I0IDwtIChkMi94MSkqMTAwDQoNCmUyIDwtIChzdW0oVmVudGFzZW5lcmd5JEVtcHJlc2EpKQ0KcG9yNSA8LSAoZTIveDEpKjEwMA0KDQpmMiA8LSAoc3VtKFZlbnRhc2VuZXJneSRHcmFuSW5kdXN0cmlhKSkNCnBvcjYgPC0gKGYyL3gxKSoxMDANCmBgYA0KDQoNCg0KUG9yY2VudGFqZXMgZGUgVmVudGFzIGRlIGVuZXJnw61hIGVuIE3DqXhpY28gcG9yIGNvbXByYWRvcg0KDQpgYGB7cn0NCg0KQ2F0IDwtIGMoIlJlc2lkZW5jaWHDsSIsIkNvbWVyY2lhbCIsIlNlcnZpY2lvcyIsIkFncmljb2xhIiwiSW5kaXN0cmlhbCIsIkVtcHJlc2EiLCAiR3JhbkluZHVzdHJpYSIpDQoNClBvcmNlbnQgPC0gYyhwb3IscG9yMSxwb3IyLHBvcjMscG9yNCxwb3I1LHBvcjYpDQoNCmRhdG9zMSA8LSBkYXRhLmZyYW1lKENhdCxQb3JjZW50KQ0KDQpoZWFkKGRhdG9zMSkNCg0KYGBgDQoNCiMjIyBGaWd1cmEgMg0KDQpgYGB7cn0NCmdncGxvdChkYXRvczEsYWVzKHg9IiIseT1yb3VuZChQb3JjZW50KSwgZmlsbD1DYXQpKSsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsDQogICAgICAgICAgIGNvbG9yPSJ3aGl0ZSIpKw0KICAgIGdlb21fdGV4dChhZXMobGFiZWw9cm91bmQoUG9yY2VudCkpLA0KICAgICAgICAgICAgICBwb3NpdGlvbj1wb3NpdGlvbl9zdGFjayh2anVzdD0wLjUpKQ0KYGBgDQoNCj5Db21vIHNlIG11ZXN0cmEgZW4gbGEgKipmaWd1cmEgMioqIGxhcyBJbmR1c3RyaWFzIHkgbGFzIGdyYW5kZXMgZW1wcmVzYXMgc29uIGxhcyBxdWUgY29uc3VtZW4gbXVjaGEgbcOhcyBlbmVyZ8OtYSBlbiBjb21wYXJhY2nDs24gY29uIGxhcyBvdHJhcywgYWwgbWlzbW8gdGllbXBvLCBlcyBiaWVuIHNhYmlkbyBxdWUgbGFzIGFudGVzIG1lbmNpb25hZGFzIHNvbiBsYXMgcXVlIGdlbmVyYW4gbcOhcyBjb250YW1pbmFjacOzbi4NCkxhIGNhdXNhIHByaW5jaXBhbCBkZSBsYSBjb250YW1pbmFjacOzbiBpbmR1c3RyaWFsIGVzIGxhIHF1ZW1hIGEgZ3JhbiBlc2NhbGEgZGUgY29tYnVzdGlibGVzIGbDs3NpbGVzIGNvbW8gZWwgcGV0csOzbGVvLCBlbCBjYXJiw7NuLCBlbCBnYXMsIG3DoXMgZWwgYWd1YSByZXNpZHVhbCBlbnZlbmVuYWRhIHF1ZSBjb250YW1pbmEgdGllcnJhLCByw61vcyB5IGxhZ3VuYXMsIGdlbmVyYW5kbyBhc8OtIHVuYSBjYW50aWRhZCBkZXNtZWRpZGEgZGUgQ08yLg0KDQoNCg0KIyMgRXN0YWTDrXN0aWNhIGRlc2NyaXB0aXZhDQoNCiMjIyBHZW5lcmFjacOzbiB0b3RhbCBkZSBlbmVyZ8OtYSBlbiBNw6l4aWNvIHBvciBtZXMgZGVzZGUgZWwgYcOxbyAyMDA1IGFsIDIwMTcuDQoNCmBgYHtyfQ0Kc3VtbWFyeShHZW5lcmFjaW9uRW5lcmd5JFRvdGFsKSANCmBgYA0KDQpUZW5lbW9zIHVuYSBtb2RhIGRlIDIwNDkyNTczIGxvIHF1ZSBxdWllcmUgZGVjaXIgcXVlIG5vcm1hbG1lbnRlIGVzYSBlcyBsYSBjYW50aWRhZCBwcm9kdWNpZGEgYWwgbWVzIGVuIGxhIHJlcMO6YmxpY2EgbWV4aWNhbmEuDQoNCmBgYHtyfQ0KdGFibGExIDwtIGZkdChHZW5lcmFjaW9uRW5lcmd5JFRvdGFsKQ0KdGFibGExDQpgYGANCkFxdcOtIHBvZGVtb3Mgb2JzZXJ2YXIgcXVlIGVsIGludGVydmFsbyBxdWUgZXMgZW5jdWVudHJhIGVuIGxhIGZpbGEgNCBbMTg3NjEwMDUuOTE2ICwgMTk4NzQwODguNjMxXSBlcyBlbCBtw6FzIGZyZWN1ZW50ZS4NCg0KIyMjIEZpZ3VyYSAzDQpgYGB7cn0NCnBsb3QodGFibGExLHR5cGU9J2ZoJywgbWFpbj0iSGlzdG9ncmFtYSBkZSBHZW5lcmFjacOzbiBkZSBlbmVyZ8OtYSBlbiBNw6l4aWNvIiwgeGxhYj0iRW5lcmfDrWEgZ2VuZXJhZGEiLHlsYWIgPSAiRnJlY3VlbmNpYSIsIGNvbCA9ICJuYXZ5IikNCmBgYA0KDQo+ICoqRW4gbGEgZmlndXJhIDMqKiBzZSBub3MgbXVlc3RyYSBlbCBkaWFncmFtYSBkZSBmcmVjdWVuY2lhcyBkZSBsYSBlbmVyZ8OtYSBnZW5lcmFkYSBhbCBtZXMgZW4gTcOpeGljbywgY29tbyBwb2RlbW9zIG9ic2VydmFyIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbG9zIGRhdG9zIGVzIHVuaWZvcm1lLCBsb3MgZGF0b3Mgc2UgcmVwYXJ0ZW4gZGUgaWd1YWwgbWFuZXJhLg0KDQoNCg0KIyMjIEZpZ3VyYSA0DQpgYGB7cn0NCmJveHBsb3QoR2VuZXJhY2lvbkVuZXJneSwgbWFpbj0gIkdlbmVyYWNpw7NuIGRlIEVuZXJnw61hIiwgeWxhYj0iRW5lcmdpYSIseGxhYj0iQ2F0ZWdvcmlhIiwgY29sID0gcmFpbmJvdyhuY29sKEdlbmVyYWNpb25FbmVyZ3kpKSkNCmBgYA0KDQo+RW4gbGEgKipGaWd1cmEgNCoqIHBvZGVtb3Mgb2JzZXJ2YXIgZWwgZ3LDoWZpY28gZGUgY2FqYSB5IGJpZ290ZSBvIGJveHBsb3QgZGUgbGEgZ2VuZXJhY2nDs24gZGUgZW5lcmfDrWEgZW4gTcOpeGljbyANCg0KDQoNCg0KDQojIyMgVmVudGFzIGRlIGVuZXJnw61hIHBvciBtZXMgZW4gTcOpeGljbw0KDQoNCmBgYHtyfQ0Kc3VtbWFyeShWZW50YXNlbmVyZ3kkVG90YWwpDQpgYGANCg0KVGVuZW1vcyB1bmEgbW9kYSBkZSAxNjMxOTgxOCBsbyBjdWFsIHNpZ25pZmljYSBxdWUgZXMgbGEgY2FudGlkYWQgcXVlIGNvbcO6bm1lbnRlIHNlIHZlbmRlIGFsIG1lcyBkZSBlbmVyZ8OtYSBlbMOpY3RyaWNhLg0KDQoNCmBgYHtyfQ0KdGFibGEgPC0gZmR0KFZlbnRhc2VuZXJneSRUb3RhbCkNCnRhYmxhDQpgYGANCg0KDQpBcXVpIHBvZGVtb3Mgb2JzZXJ2YXIgcXVlIGVsIGludGVydmFsbyBtw6FzIGZyZWN1ZW50ZSBlcyBlbCBkZSBsYSBmaWxhIDQgWzE1Mjc4MDY1LjUxNCAsIDE2MjMyOTIxLjYzOF0NCg0KDQpBaG9yYSBhbmFsaXphcmVtb3MgbG9zIGRhdG9zIGRlIGVsIENPMiBwZXIgY2FwaXRhIGVtaXRpZG9zIGVuIE3DqXhpY28uDQoNCg0KYGBge3J9DQpzdW1tYXJ5KGNvMnljb25zdW1vJGNvMlBlckNhcGl0YSkNCmBgYA0KDQpUZW5lbW9zIHVuIG3DrW5pbW8gZGUgMi43NjkgeSB1biBtw6F4aW1vIGRlIDQuNDQ5IGRlIGNvMiBlbWl0aWRvIGVuIE3DqXhpY28gcG9yIHBlcnNvbmEgYWwgYcOxbywgbG8gY3VhbCBzaSBsbyBtdWx0aXBsaWNhbW9zIHBvciBsYSBwb2JsYWNpw7NuIGRlIGxhIHJlcMO6YmxpY2EgbWV4aWNhbmEgZXMgZGVtYXNpYWRvIGNvMiBwcm9kdWNpZG8gYWwgYcOxby4NCg0KYGBge3J9DQp0YWJsYTIgPC0gZmR0KGNvMnljb25zdW1vJGNvMlBlckNhcGl0YSkNCnRhYmxhMg0KYGBgDQoNCkNvbW8gcG9kZW1vcyBvYnNlcnZhciBsYSBjbGFzZSBtw6FzIGZyZWN1ZW50ZSBlcyBsYSBxdWUgc2UgZW5jdWVudHJhIGVuIGxhIGZpbGEgNSBsbyBxdWUgcXVpZXJlIGRlY2lyIHF1ZSB1bmEgcGVyc29uYSBwcm9kdWNlIGVudHJlIDMuNzQyIHkgMy45OTMgZGUgY28yIGFsIGHDsW8uDQoNCiMjIyBGaWd1cmEgNA0KYGBge3J9DQpwbG90KHRhYmxhMix0eXBlPSdmaCcsIG1haW49Ikhpc3RvZ3JhbWEgZGUgQ08yIHBlciBjYXBpdGEgZW4gTcOpeGljbyIsIHhsYWI9ImNvMiIseWxhYiA9ICJGcmVjdWVuY2lhIiwgY29sID0gIk1hZ2VudGEiKQ0KYGBgDQoNCj5Db21vIHNlIHB1ZWRlIG9ic2VydmFyIGVuIGxhICoqZmlndXJhIDQqKiBsb3MgZGF0b3Mgc2UgZW5jdWVudHJhbiBzZXNnYWRvcyBhIGxhIGl6cXVpZXJkYSBsbyBjdWFsIHNpZ25pZmljYSBxdWUgbGEgY29sYSBkZSBsYSBkaXN0cmlidWNpw7NuIHNlIGFsYXJnYSBwYXJhIHZhbG9yZXMgaW5mZXJpb3JlcyBhIGxhIG1lZGlhLiANCg0KIyMgQW7DoWxpc2lzIGRlIHNlcmllcyBkZSB0aWVtcG8NCg0KDQpgYGB7cn0NCmJhc2UudHM9dHMoYmFzZSwgc3RhcnQgPSAyMDA1LGZyZXF1ZW5jeSA9IDEyKQ0KYGBgDQoNCiMjIyBGaWd1cmEgNQ0KYGBge3J9DQphdXRvcGxvdChiYXNlLnRzLCB4bGFiPSJBw7FvcyIsIHlsYWI9IkVuZXJnw61hIiwgbWFpbj0iQ2FwYWNpZGFkIGRlIEVuZXJnw61hIikNCmBgYA0KDQo+KipMYSBmaWd1cmEgNSoqIGluZGljYSBxdWUgYSB0cmF2w6lzIGRlIGxvcyBhw7FvcyBsb3MgZXN0YWRvcyBkZSBsYSByZXDDumJsaWNhIG1leGljYW5hIGhhbiBnZW5lcmFkbyB1bmEgbWF5b3IgY2FwYWNpZGFkIGRlIGVuZXJnw61hIHB1ZXN0byBxdWUgZXN0byBzZSBkZWJlIGEgcXVlIGxhIGVuZXJnw61hIGVsw6ljdHJpY2EgZXN0w6EgbGxlZ2FuZG8gYSB0b2RhcyBsYXMgY29tdW5pZGFkZXMgZG9uZGUgYW50ZXMgbm8gc2UgY29udGFiYSBjb24gZWwgc2VydmljaW8uDQoNCj5FbiBsYSBtYXlvcsOtYSBkZSBsb3MgZXN0YWRvcyBkZSBsYSByZXDDumJsaWNhIG1leGljYW5hIGxhIGNhcGFjaWRhZCBkZSBlbmVyZ8OtYSBzZSBlbmN1ZW50cmEgZXN0YW5jYWRhIGxvIHF1ZSBxdWllcmUgZGVjaXIgcXVlIGHDum4gaGF5IG11Y2hvcyBzZWN0b3JlcyBlbiBlc29zIGVzdGFkb3MgZG9uZGUgYcO6biBubyBzZSBoYSBpbnN0YWxhZG8gbGEgZW5lcmfDrWEgZWzDqWN0cmljYSB5IHByb2JhYmxlbWVudGUgZW4gdW5vcyBhw7FvcyBtw6FzIHNlIG5lY2VzaXRlbiBtw6FzIG1lZ2Egd2F0dHMgaW5zdGFsYWRvcyBkZSBjYXBhY2lkYWQgcGFyYSBwb2RlciBhYmFzdGVjZXIgYSBsYSBwb2JsYWNpw7NuIGRlIGxhIHJlcMO6YmxpY2EgbG9ncmFuZG8gYXPDrSB1biBhdW1lbnRvIGVuIGVsIFBJQi4NCg0KDQoNCmBgYHtyfQ0KU29ub3JhLnRzPXRzKGJhc2UudHNbLDI0XSwgc3RhcnQgPSAyMDA1LGZyZXF1ZW5jeSA9IDEyKQ0KYGBgDQoNCiMjIyBGaWd1cmEgNg0KYGBge3J9DQphdXRvcGxvdChTb25vcmEudHMsIHhsYWI9IkHDsW9zIiwgeWxhYj0iRW5lcmfDrWEiLCBtYWluPSJFbmVyZ2lhIGVuIFNvbm9yYSIsIGNvbG91ciA9ICJwdXJwbGUiKQ0KYGBgDQoNCj5FbiBsYSAqKmZpZ3VyYSA2KiogcG9kZW1vcyBvYnNlcnZhciBjw7NtbyBlbiBzb25vcmEgaHVibyB1biBhdW1lbnRvIGRlc21lZGlkbyBlbiBsYSBjYXBhY2lkYWQgZGUgZW5lcmfDrWEgYWwgcmVkZWRvciBkZWwgMjAxMyBwYXJhIGRlc3B1w6lzIGxvZ3JhciB1biBjb25zdW1vIG1lbm9yIGFscmVkZWRvciBkZWwgYcOxbyAyMDE0LCBkw6FuZG9ub3MgY3VlbnRhIHF1ZSBwcm9iYWJsZW1lbnRlIGV4aXN0acOzIHVuYSBtYXlvciBwcm9kdWNjacOzbiBkZSBjb21lcmNpbyBwYXJhIHF1ZSBzdXJnaWVyYSBlbCBjb25zdW1vIGRlIGVuZXJnw61hcyBwcmltYXJpYXMgeSBzZWN1bmRhcmlhcyBlbiB0cmFuc2Zvcm1hY2nDs24uDQoNCkdyYW4gY3JlY2ltaWVudG8gZW50cmUgZWwgMjAxMCB5IDIwMTUNCg0KRW4gMjAxNSwgZWwgbW9udG8gZGUgaW52ZXJzacOzbiBlbiBwcm95ZWN0b3MgcGFyYSBsYSBnZW5lcmFjacOzbiBkZSBlbmVyZ8OtYSBzb2xhciBlbiBNw6l4aWNvIHNlIGNhbGN1bMOzIGVuIHVuIHRvdGFsIGRlIDIuNSBtaWxlcyBkZSBtaWxsb25lcyBkZSBkw7NsYXJlcywgZGUgYWN1ZXJkbyBjb24gZGF0b3MgDQpkZSBsYSBhZ2VuY2lhIEdUTSBSZXNlY2FyLiBBc2ltaXNtbywgbGEgYWdlbmNpYSBlc3RpbcOzIHF1ZSBlbCBuw7ptZXJvIGRlIA0KY29tcGHDscOtYXMgZXNwZWNpYWxpemFkYXMgZW4gZW5lcmfDrWEgc29sYXIgZW4gbnVlc3RybyBwYcOtcyBjcmVjacOzIDEsMjAwJSBlbnRyZSANCjIwMTAgeSAyMDE1LlVubyBkZSBlc3RvcyBwcm95ZWN0b3MgZXMgbGEgY2FsaWJyYWNpw7NuIGRlIGVzdGFjaW9uZXMgc29sYXJpIG3DqXRyaWNhcyBkZWwgU01OLCBhIGNhcmdvIGRlbCBJbnN0aXR1dG8gZGUgR2VvZsOtc2ljYSBkZSBsYSBVTkFNLiBEaWNobyBwcm95ZWN0byB0dXZvIHVuYSBpbnZlcnNpw7NuIGNlcmNhbmEgYSBsb3MgMTEgbWlsbG9uZXMgZGUgcGVzb3MsIG90b3JnYWRvcyBwb3IgZWwgQ29uc2VqbyBOYWNpb25hbCBkZSBDaWVuY2lhIHkgVGVjbm9sb2fDrWEgKENvbmFjeXQpIHkgcG9yIGxhIHNlY3JldGFyaWEgZGUgRW5lcmfDrWEgKFNlbmVyKSwgbWVkaWFudGUgZWwgRm9uZG8gZGUgU3VzdGVudGFiaWxpZGFkIEVuZXJnw6l0aWNhLiBBIHRyYXbDqXMgZGUgZXN0ZSBwcm95ZWN0byBzZSBwdWRvIGRldGVybWluYXIgcXVlIGVsIHJlY3Vyc28gc29sYXIgcHJvbWVkaW8gZGlhcmlvIGVuIHRvZG8gZWwgcGHDrXMgZXMgZGUgYXByb3hpbWFkYW1lbnRlIDUuNSBraWxvdmF0aW9zIGhvcmEgKGtXaCkgcG9yIGNhZGEgbWV0cm8gY3VhZHJhZG8NCkxhcyBjZWxkYXMgZm90b3ZvbHRhaWNhcyAoUFYsIHBvciBzdXMgc2lnbGFzIGVuIGluZ2zDqXMpIHJlcHJlc2VudGFuIHVuYSBwZXF1ZcOxYSB1bmlkYWQgZW4gdW4gZXF1aXBvIHBhcmEgcHJvZHVjaXIgZWxlY3RyaWNpZGFkLg0KDQoNCiMjIyBGaWd1cmEgNw0KDQpgYGB7cn0NCkVsZWN0cmljaWRhZCA8LSBnZ3Bsb3QoR2VuZXJhY2lvbkZlY2hhcykrDQogIGdlb21fbGluZShhZXMoeD1Bbmhvcyx5PVRlcm1vZWxlY3RyaWNhLGNvbG91cj0iVGVybW9lbGVjdHJpY2EiKSkrDQogICAgZ2VvbV9saW5lKGFlcyh4PUFuaG9zLHk9VmFwb3IsY29sb3VyPSJWYXBvciIpKSsNCiAgICBnZW9tX2xpbmUoYWVzKHg9QW5ob3MseT1DaWNsb19jb21iaW5hZG8sY29sb3VyPSJDaWNsbyBjb21iaW5hZG8iKSkrDQogIGdlb21fbGluZShhZXMoeD1Bbmhvcyx5PUNGRV8xLGNvbG91cj0iQ0ZFIikpKw0KICAgIGdlb21fbGluZShhZXMoeD1Bbmhvcyx5PVBJRSxjb2xvdXI9IlBJRSIpKSsNCiAgICBnZW9tX2xpbmUoYWVzKHg9QW5ob3MseT1UdXJib2dhcyxjb2xvdXI9IlR1cmJvZ2FzIikpKw0KICAgIGdlb21fbGluZShhZXMoeD1Bbmhvcyx5PUNvbWJ1c3Rpb25faW50ZXJuYSxjb2xvdXI9IkNvbWJ1c3Rpb24gaW50ZXJuYSIpKSsNCiAgZ2VvbV9saW5lKGFlcyh4PUFuaG9zLHk9RHVhbCxjb2xvdXI9IkRVQUwiKSkrDQogICAgZ2VvbV9saW5lKGFlcyh4PUFuaG9zLHk9Q2FyYm9lbGVjdHJpY2EsY29sb3VyPSJDYXJib2VsZWN0cmljYSIpKSsNCiAgICBnZW9tX2xpbmUoYWVzKHg9QW5ob3MseT1HZW90ZXJtb2xlY3RyaWNhLGNvbG91cj0iR2VvdGVybW9sZWN0cmljYSIpKSsNCiAgZ2VvbV9saW5lKGFlcyh4PUFuaG9zLHk9TnVjbGVvZWxlY3RyaWNhLGNvbG91cj0iTnVjbGVvZWxlY3RyaWNhIikpKw0KICAgIGdlb21fbGluZShhZXMoeD1Bbmhvcyx5PUVvbGljYSxjb2xvdXI9IkVvbGljYSIpKSsNCiAgICBnZW9tX2xpbmUoYWVzKHg9QW5ob3MseT1DRkVfMixjb2xvdXI9IkNGRSIpKSsNCiAgZ2VvbV9saW5lKGFlcyh4PUFuaG9zLHk9UElFXzEsY29sb3VyPSJQSUVfMSIpKSsNCiAgICBnZW9tX2xpbmUoYWVzKHg9QW5ob3MseT1IaWRyb2VsZWN0cmljYSxjb2xvdXI9IkhpZHJvZWxlY3RyaWNhIikpKw0KICAgIGdlb21fbGluZShhZXMoeD1Bbmhvcyx5PUZvdG92b2x0YWljYSxjb2xvdXI9IkZvdG92b2x0YWljYSIpKSsNCiAgICBsYWJzKHRpdGxlPSJSZXBvcnRlIGRlIEdlbmVyYWNpw7NuIGRlIGVuZXJnw61hIix4PSJGZWNoYSIseT0iRW5lcmfDrWEiKQ0KDQoNCmdncGxvdGx5KEVsZWN0cmljaWRhZCkNCmBgYA0KDQo+RW4gbGEgKipmaWd1cmEgNyoqIHNlIG11ZXN0cmEgY29tbyBsb3MgZGlmZXJlbnRlcyBzZWN0b3JlcyBnZW5lcmFuIGVuZXJnw61hLCBkw6FuZG9ub3MgdW4gYWx0byBwb3JjZW50YWplIGVuIGVsIHNlY3RvciBpbmR1c3RyaWFsIHlhIHF1ZSBlbCBjb25zdW1vIGdlbmVyYWRvIGRlIGVuZXJnw61hIHBvciB0ZXJtb2Vsw6ljdHJpY2FzIGVzIGVsIG3DoXMgYWx0byBoYXN0YSBlbCBtb21lbnRvIHkgZXN0byBub3MgaW5kaWNhIHF1ZSBtdWNoYXMgaW5kdXN0cmlhcyBhdW4gbm8gdHJhdGFuIGRlIGFuYWxpemFyIGNvbW8gcHVkaWVyYSBzZXIgZWZpY2llbnRlIGVsIGNvbnN1bW8gZGUgZW5lcmfDrWEgcGFyYSBiZW5lZmljaWFyIGNvbiBlbCB1c28gZGUgbnVldmFzIHRlY25vbG9nw61hcyB5IGVuZXJnw61hcyByZW5vdmFibGVzLg0KDQpFbiBsYSByZXDDumJsaWNhIG1leGljYW5hIGV4aXN0ZW4gdmFyaWFzIGNlbnRyYWxlcyBkZSBlbmVyZ8OtYSB0ZXJtb2Vsw6ljdHJpY2EgeSByZWNpZW50ZW1lbnRlIGVsIEdvYmllcm5vIGFudW5jacOzIHVuIGNvbnZlbmlvIGNvbiBsYSBlbXByZXNhIGNhbmFkaWVuc2UgSHlkcm8tUXXDqWJlYyBwYXJhIG1vZGVybml6YXIgNjAgcGxhbnRhcyBoaWRyb2Vsw6ljdHJpY2FzIGVuIGVsIHBhw61zLCBhdW1lbnRhciBsYSBwcm9kdWNjacOzbiBkZSBlbmVyZ8OtYSB5IHJlZHVjaXIgZWwgY29zdG8gZGVsIHNlcnZpY2lvIGRlIGx1eiBlbiBsb3MgaG9nYXJlcy4NCg0KDQoNCg0KDQoNCg0KYGBge3J9DQpWZW50YXNlbmVyZ3kudHM9dHMoVmVudGFzZW5lcmd5LCBzdGFydCA9IDIwMDUsZnJlcXVlbmN5ID0gMTIpDQpgYGANCg0KDQojIyMgRmlndXJhIDgNCmBgYHtyfQ0KYXV0b3Bsb3QoVmVudGFzZW5lcmd5LnRzLCB4bGFiPSJBw7FvcyIsIHlsYWI9IlZlbnRhcyBlbmVyZ8OtYSIsIG1haW49IkNvbXByYWRvcmVzIGRlIEVuZXJnw61hIEVsZWN0cmljYSB5IFZlbnRhcyIpDQpgYGANCg0KPkVuIGxhICoqRmlndXJhIDgqKiBwb2RlbW9zIHZlciBjb21vIGxhcyBJbmR1c3RyaWFzIHNvbiBsb3MgbWF5b3JlcyBjb25zdW1pZG9yZXMgZGUgZW5lcmfDrWEgYSB0cmF2w6lzIGRlIGxvcyBhw7Fvcy4gQ29uZmlybWFuZG8gYXPDrSBsYSBpbmZvcm1hY2nDs24gY29uc3VsdGFkYSBkb25kZSBub3MgZGljZSBxdWUgbGEgaW5kdXN0cmlhIHBvciBzdSBhY2VsZXJhZG8gZGVzYXJyb2xsbywgbG8gcXVlIGxvcyBsbGV2YSBhIHJlYWxpemFyIGNvbnZlbmlvcyBjb24gZW1wcmVzYXMgcXVlIGdlbmVyZW4gY29uc3VtbyBkZSBlbmVyZ8OtYXMgcmVub3ZhYmxlcyBwYXJhIHVuYSBtYXlvciBlZmljaWVuY2lhLg0KDQoNCiMjIyBGaWd1cmEgOQ0KYGBge3J9DQpJbmR1c3RyaWFzLnRzPXRzKFZlbnRhc2VuZXJneS50c1ssOF0sIHN0YXJ0ID0gMjAwNSwgZnJlcXVlbmN5ID0gMTIpDQphdXRvcGxvdChJbmR1c3RyaWFzLnRzLCBjb2xvdXIgPSAicmVkIiAsIHhsYWI9IkHDsW9zIiwgeWxhYj0iVmVudGFzIiwgbWFpbj0iVmVudGFzIGRlIGVuZXJnw61hIGEgSW5kdXN0cmlhcyIpDQpgYGANCg0KPkVuIGxhICoqRmlndXJhIDkqKiBzZSBwdWVkZSBvYnNlcnZhciBjbGFyYW1lbnRlIGNvbW8gbGEgdmVudGEgZGUgZW5lcmfDrWEgcG9yIEluZHVzdHJpYXMgZGlzbWludXlvIGVuIGdyYW4gY2FudGlkYWQgYWwgcmVkZWRvciBkZWwgYcOxbyAyMDA5IA0KDQoNCiMjIyBGaWd1cmEgMTANCmBgYHtyfQ0Kc2VydmljaW9zLnRzPXRzKFZlbnRhc2VuZXJneS50c1ssNF0sIHN0YXJ0ID0gMjAwNSwgZnJlcXVlbmN5ID0gMTIpDQphdXRvcGxvdChzZXJ2aWNpb3MudHMsIGNvbG91ciA9ICJNYWdlbnRhIiwgeGxhYiA9ICJhw7FvcyIsIHlsYWIgPSAiVmVudGFzIiwgbWFpbj0iVmVudGFzIGRlIEVuZXJnw61hIGEgU2VydmljaW9zIikNCmBgYA0KDQo+RW4gbGEgKipGaWd1cmEgMTAqKiBwb2RlbW9zIHZlciB1biBncmFuIGF1bWVudG8gZW4gbGFzIHZlbnRhcyBkZSBlbmVyZ8OtYSBhIHNlcnZpY2lvcyBlbnRyZSBlbCBhw7FvIDIwMTAgeSAyMDE1IGxvIGN1YWwgY29pbmNpZGUgY29uIGxhIGdlbmVyYWNpw7NuIGRlIGVuZXJnw61hIGVuIFNvbm9yYSBhbnRlcyBtZW5jaW9uYWRhIGVuIGxhICoqRmlndXJhIDEwKioNCg0KDQojIyMgRmlndXJhIDExDQpgYGB7cn0NCkNPMiA8LSBnZ3Bsb3QoY28yeWNvbnN1bW8pKw0KICBnZW9tX2xpbmUoYWVzKHg9RmVjaGEseT1jbzJQZXJDYXBpdGEsY29sb3VyPSJDTzIgcGVyIGNhcGl0YSIpKSsNCiAgICBnZW9tX2xpbmUoYWVzKHg9RmVjaGEseT1Db25zdW1vUGVyQ2FwaXRhLGNvbG91cj0iQ29uc3VtbyBQZXIgQ2FwaXRhIikpDQoNCmdncGxvdGx5KENPMikNCmBgYA0KDQo+Q29tbyBwb2RlbW9zIHZlciBlbiBsYSAqKkZpZ3VyYSAxMSoqIHF1ZSBwb3NpYmxlbWVudGUgZXN0w6luIHJlbGFjaW9uYWRhcy4gDQoNCg0KDQojIyBBbmFsaXNpcyBkZSBjb3JyZWxhY2nDs24NCg0KYGBge3J9DQpjbzJwZXJjYXBpdGEgPC0gY28yeWNvbnN1bW8kY28yUGVyQ2FwaXRhDQpjb25zdW1vZWxlY3RyaWNvIDwtIGNvMnljb25zdW1vJENvbnN1bW9QZXJDYXBpdGENCg0KDQpjbzJQZXJDYXBpdGEgPC0gYyhjbzJwZXJjYXBpdGEpDQpDb25zdW1vUGVyQ2FwaXRhIDwtIGMoY29uc3Vtb2VsZWN0cmljbykNCg0KZGF0YSA8LSBjYmluZChjbzJQZXJDYXBpdGEsIENvbnN1bW9QZXJDYXBpdGEpDQpkYXRhDQoNCmBgYA0KDQpVc2FyZW1vcyBlbCBtZXRvZG8gZGUgUGVhcnNvbiBwYXJhIGNhbGN1bGFyIGVsIGNvZWZpY2llbnRlIGRlIGNvcnJlbGFjacOzbiBlbnRyZSBDTzIgUGVyIENhcGl0YSB5IENvbnN1bW8gZGUgZW5lcmfDrWEgUGVyIENhcGl0YQ0KDQpgYGB7cn0NCmNvcih4PWNvMnljb25zdW1vJGNvMlBlckNhcGl0YSwgeT1jbzJ5Y29uc3VtbyRDb25zdW1vUGVyQ2FwaXRhLCBtZXRob2Q9J3BlYXJzb24nKQ0KYGBgDQoNCk9idGVuZW1vcyB1bmEgY29ycmVsYWNpw7NuIGRlIDAuMTU0MjQ3MyBsbyBjdWFsIHNpZ25pZmljYSBxdWUgZXhpc3RlIHVuYSBjb3JyZWxhY2nDs24gZMOpYmlsIGVudHJlIGxhcyBlbWlzaW9uZXMgZGUgY28yIHBlciBjw6FwaXRhIGVuIE3DqXhpY28geSBlbCBDb25zdW1vIGRlIEVuZXJnw61hLg0KDQoNCiMjIyBGaWd1cmEgMTINCmBgYHtyfQ0KbGlicmFyeShQZXJmb3JtYW5jZUFuYWx5dGljcykNCg0KDQpkYXQxIDwtIGRhdGEuZnJhbWUoQ29uc3Vtb1BlckNhcGl0YSxjbzJQZXJDYXBpdGEpDQoNCmNoYXJ0LkNvcnJlbGF0aW9uKGRhdDEpDQpgYGANCg0KPkVuIGxhICoqRmlndXJhIDEyKiogcG9kZW1vcyBvYnNlcnZhciBncsOhZmljYW1lbnRlIGxhIGNvcnJlbGFjacOzbg0KDQoNCmBgYHtyfQ0KbGlicmFyeShzY2F0dGVycGxvdDNkKQ0KDQpzZXQuc2VlZCgyKQ0KeCA8LSBybm9ybShDb25zdW1vUGVyQ2FwaXRhKQ0KeSA8LSBybm9ybShjbzJQZXJDYXBpdGEpDQoNCnNjYXR0ZXJwbG90M2QoeCwgeSwgcGNoID0gMTksIGNvbG9yID0gImJsdWUiKQ0KYGBgDQoNCj5FbiBlc3RlIGRpYWdyYW1hIGRlIGNvcnJlbGFjacOzbiBlbiAzRCBwb2RlbW9zIG9ic2VydmFyIHF1ZSBlbCBjbzIgZXN0YSBwb2NvIHJlbGFjaW9uYWRvIGNvbiBlbCBjb25zdW1vIGVsZWN0cmljby4gDQoNCg0KDQoNCg0KDQojIMK/UG9ycXVlIHV0aWxpemFyIGVuZXJnw61hcyByZW5vdmFibGVzIGVuIE3DqXhpY28/DQoNCkxhcyBmdWVudGVzIHJlbm92YWJsZXMgc29uIGVuZXJnw61hIGFjY2VzaWJsZSwgbGltcGlhIHkgc3VmaWNpZW50ZSBxdWUgcHVlZGUgbWVqb3JhciBzdXN0YW5jaWFsbWVudGUgbGEgY2FsaWRhZCBkZSB2aWRhIGRlIGxhIHBvYmxhY2nDs24geSBmcmVuYXIgZWwgY2FtYmlvIGNsaW3DoXRpY28uIEFkZW3DoXMsIHNvbiB1bmEgYWx0ZXJuYXRpdmEgcXVlIGVzdMOhIHRvdGFsbWVudGUgYSBudWVzdHJvIGFsY2FuY2UsIHlhIHF1ZSBNw6l4aWNvIGN1ZW50YSBjb24gYWJ1bmRhbnRlcyByZWN1cnNvcyBzb2xhcmVzIHkgZcOzbGljb3MsIHN1ZmljaWVudGVzIHBhcmEgZ2VuZXJhciAxMDAlIGRlIGxhIGVuZXJnw61hIGNvbnN1bWlkYSBhbnVhbG1lbnRlIGVuIGVsIHBhw61zLCBlIGluY2x1c28gcG9kcsOtYSBleGlzdGlyIHVuIGV4Y2VkZW50ZSBxdWUgcG9kcsOtYSBzZXIgZXhwb3J0YWRvLCBkZSBhY3VlcmRvIGNvbiBlbCByZXBvcnRlIGRlIEVsIHBvdGVuY2lhbCByZW5vdmFibGUgZGUgTcOpeGljby4NCg0KT3RyYSByYXrDs24gcGFyYSBwcmVmZXJpciBsb3MgcmVub3ZhYmxlcyBlcyBxdWUgc3VzIHByZWNpb3MgaGFuIG1vc3RyYWRvIHVuYSB0ZW5kZW5jaWEgYSBsYSBiYWphIGNvbnN0YW50ZSBkdXJhbnRlIGxhIMO6bHRpbWEgZMOpY2FkYSwgZXMgZGVjaXIsIHNvbiBtw6FzIGJhcmF0b3MgcGFyYSBlbCBFc3RhZG8uIEVzdGEgdGVuZGVuY2lhIGNvbnRpbnVhcsOtYSBjb24gbGEgbWFzaWZpY2FjacOzbiBkZSBsYSBwcm9kdWNjacOzbiwgc2luIGVtYmFyZ28sIGFjdHVhbG1lbnRlIGVsIGNvc3RvIGRlIGluc3RhbGFjacOzbiBkZSB1biBzaXN0ZW1hIGZvdG92b2x0YWljbyBzaWd1ZSBzaWVuZG8gdW5vIGRlIGxvcyBvYnN0w6FjdWxvcyBtw6FzIGdyYW5kZXMgcGFyYSBzdSBhY2Nlc28uDQoNCg0KIyBDT05DTFVTScOTTiANCg0KRGVzcHXDqXMgZGUgYW5hbGl6YXIgbG9zIGRhdG9zIHkgbG9zIGdyw6FmaWNvcyBhcnJvamFkb3MgZW5jb250cmFtb3MgYWxndW5vcyBkYXRvcyBxdWUgcHVlZGVuIHNlciBpbmZsdXllbnRlcyBlbiBlbCBoZWNobyBkZSBxdWUgTcOpeGljbyBzZWEgdW5vIGRlIGxvcyBwYcOtc2VzIHF1ZSBwcm9kdWNlbiBtYXlvciBjYW50aWRhZCBkZSBDTzIuIA0KDQpFbCBwcmltZXIgcG9zaWJsZSBmYWN0b3IgZXMgcXVlIGxhIG1heW9yIGNhbnRpZGFkIGRlIGVuZXJnw61hIGdlbmVyYWRhIGVuIE3DqXhpY28gZXMgcHJvdmVuaWVudGUgZGUgbGEgZW5lcmfDrWEgVGVybW9lbMOpY3RyaWNhIHkgc2UgYmFzYSBlbiBxdWVtYXIgY29tYnVzdGlibGVzIG5vIHJlbm92YWJsZXMsIGNvbW8gY2FyYsOzbiBwcmluY2lwYWxtZW50ZSwgZ2FzIG5hdHVyYWwgeSBlbiBtZW5vciBtZWRpZGEgcGV0csOzbGVvLCBsbyBjdWFsIGdlbmVyYSBtdWNobyBDTzIuDQoNCkVsIHNlZ3VuZG8gZXMgcXVlIGxvcyBtYXlvcmVzIGNvbnN1bWlkb3JlcyBkZSBlbmVyZ8OtYSBzb24gbGFzIEluZHVzdHJpYXMgbGFzIGN1YWxlcyBhIHN1IHZleiBnZW5lcmFuIG11Y2hvIENPMiB5YSBxdWUgZGVudHJvIGRlIGVzdGFzIGluZHVzdHJpYXMgc2UgZW5jdWVudHJhbg0KDQotSW5kdXN0cmlhIGRlbCBwZXRyw7NsZW8uDQotVHJhbnNwb3J0ZS4NCg0KWSB1bmEgYWx0ZXJuYXRpdmEgcGFyYSBkaXNtaW51aXIgZWwgZXhjZXNvIGRlIGVtaXNpw7NuIGRlIENPMiBlbiBNw6l4aWNvIHNvbiBsYXMgZW5lcmfDrWFzIHJlbm92YWJsZXMgeSBTb25vcmEgZXMgYXRyYWN0aXZvIHBhcmEgaW52ZXJ0aXIgZW4gZW5lcmfDrWFzIHJlbm92YWJsZXMsIHBvciBzdXMgbGV5ZXMgeSBlbCBwb3RlbmNpYWwgcXVlIHRpZW5lIHBhcmEgZGVzYXJyb2xsYXIgcHJveWVjdG9zIGRlIGVuZXJnw61hcyBsaW1waWFzIGNvbW8gbGEgc29sYXIgeSBlw7NsaWNhLg0KDQpNw6l4aWNvLCBERi4gMTQgZGUgb2N0dWJyZSBkZSAyMDE0IChBZ2VuY2lhIEluZm9ybWF0aXZhIENvbmFjeXQpLg0KLSBTaSBlbiBNw6l4aWNvIHNlIGFwcm92ZWNoYXJhIGxhIHJhZGlhY2nDs24gc29sYXIgcXVlIHJlY2liZSBlbCB1bm8gcG9yIGNpZW50byBkZWwgdGVycml0b3JpbyBkZWwgZXN0YWRvIGRlIFNvbm9yYSwgc2UgcG9kcsOtYSBhYmFzdGVjZXIgZGUgZW5lcmfDrWEgZWzDqWN0cmljYSBhIHRvZG8gZWwgcGHDrXMsIGluZGljw7MgZWwgZG9jdG9yIENhbWlsbyBBcmFuY2liaWEsIGludmVzdGlnYWRvciBkZWwgSW5zdGl0dXRvIGRlIEVuZXJnw61hIFJlbm92YWJsZSBkZSBsYSBVbml2ZXJzaWRhZCBOYWNpb25hbCBBdXTDs25vbWEgZGUgTcOpeGljbyAoVU5BTSkuDQoNCg0KDQojIFJFRkVSRU5DSUFTIEJJQkxJT0dSw4FGSUNBUw0KDQpDRkUuIFByb2dyYW1hIGRlIE9icmFzIGUgSW52ZXJzaW9uZXMgZGVsIFNlY3RvciBFbMOpY3RyaWNvLiBQT0lTRSAoMjAxMS0yMDI1KS4gTcOpeGljbywgRC5GLjogQ29taXNpw7NuIEZlZGVyYWwgZGUgRWxlY3RyaWNpZGFkLCAyMDEwLiAgDQoNCkNGRS4gRXN0YWTDrXN0aWNhcyBhw7FvIDIwMTEuIENvbWlzacOzbiBGZWRlcmFsIGRlIEVsZWN0cmljaWRhZCwgU3ViZGlyZWNjacOzbiBkZSBHZW5lcmFjacOzbiwgMjAxMS4gRGlzcG9uaWJsZSBlbiBXb3JsZCBXaWRlIFdlYjogd3d3LmNmZS5nb2IubXguICAgICAgICANCg0KRE9GLiBMZXkgcGFyYSBlbCBBcHJvdmVjaGFtaWVudG8gZGUgRW5lcmfDrWFzIFJlbm92YWJsZXMgeSBlbCBGaW5hbmNpYW1pZW50byBkZSBsYSBUcmFuc2ljacOzbiBFbmVyZ8OpdGljYSwgTcOpeGljby4gRE9GIDEyLTAxLTIwMTIuICAgICAgICANCg0KSU5URVJOQVRJT05BTCBFTkVSR1kgQUdFTkNZLiBXb3JsZCBFbmVyZ3kgQmFsYW5jZXMsIE9FQ0QgYW5kIE9FQ0QgZGF0YSBiYXNlcy4gMjAwOCBFZGl0aW9uLiBJbnRlcm5hdGlvbmFsIEVuZXJneSBBZ2VuY3ksIDIwMDguIERpc3BvbmlibGUgZW4gV29ybGQgV2lkZSBXZWI6IHd3dy5pZWEub3JnLiAgICAgICAgDQoNCklOVEVSTkFUSU9OQUwgRU5FUkdZIEFHRU5DWS4gU3RhdGlzdGljcyBhbmQgYmFsYW5jZXMgcmV0cmlldmVkIDIwMDggMS01LTgsIEltcGxlbWVudGluZyBBZ3JlZW1lbnQgb24gT2NlYW4gRW5lcmd5IFN5c3RlbXMuIEluOiAyMDA5IEFubnVhbCBSZXBvcnQuIEludGVybmF0aW9uYWwgRW5lcmd5IEFnZW5jeSwgMjAxMC4gICANCg0KSU5URVJOQVRJT05BTCBFTkVSR1kgQUdFTkNZLiBFbmVyZ3kgdXNlIGluIHRoZSBuZXcgbWlsbGVubml1bSAtIFRyZW5kcyBpbiBJRUEgY291bnRyaWVzIE1hZ2F6aW5lLiAgICAgDQoNCklOVEVSR09WRVJOTUVOVEFMIFBBTkVMIE9OIENMSU1BVEUgQ0hBTkdFLiBUYXNrIGZvcmNlIG9uIG5hdGlvbmFsIGdyZWVuaG91c2UgZ2FzIGludmVudG9yaWVzIC0gR3VpZGVsaW5lcy4gVm9sLiAyLiBFbmVyZ3kuIEludGVyZ292ZXJubWVudGFsIFBhbmVsIE9uIENsaW1hdGUgQ2hhbmdlLCAyMDA2LiAgICAgDQoNClNFTkVSLiBQbGFuZWFjacOzbiBlbmVyZ8OpdGljYS4gKFBST05BU0UpLCBFZmljaWVuY2lhIGVuZXJnw6l0aWNhIHBhcmEgTcOpeGljby4gTcOpeGljbywgRC5GLjogU2VjcmV0YXLDrWEgZGUgRW5lcmfDrWEsIDIwMTAuIA0KDQoNCg0KDQojIERlc2NhcmdhciBDb2RpZ28NCmBgYHtyfQ0KeGZ1bjo6ZW1iZWRfZmlsZSgiYmFzZS5jc3YiKQ0KeGZ1bjo6ZW1iZWRfZmlsZSgiVmVudGFzZW5lcmd5LmNzdiIpDQp4ZnVuOjplbWJlZF9maWxlKCJHZW5lcmFjaW9uRW5lcmd5LmNzdiIpDQp4ZnVuOjplbWJlZF9maWxlKCJHZW5lcmFjaW9uRmVjaGFzLmNzdiIpDQp4ZnVuOjplbWJlZF9maWxlKCJjbzJ5Y29uc3Vtby5jc3YiKQ0KYGBgDQo=