This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Cmd+Shift+Enter.

library("sf")
Linking to GEOS 3.6.1, GDAL 2.1.3, PROJ 4.9.3

Map1

head(fire_csv)
fire_csv <- read.csv("/Users/krgr.df/Desktop/GEOG208/Final Assignment/Fire Data/NASA VIIRs CSV/fire_nrt_V1_32986.csv")
str(fire_csv)
'data.frame':   1845 obs. of  14 variables:
 $ latitude  : num  34.2 34.1 34.2 34.2 34.2 ...
 $ longitude : num  -118 -118 -118 -118 -118 ...
 $ bright_ti4: num  303 298 345 299 297 ...
 $ scan      : num  0.41 0.41 0.47 0.42 0.39 0.39 0.56 0.34 0.47 0.4 ...
 $ track     : num  0.37 0.37 0.4 0.37 0.36 0.36 0.43 0.56 0.4 0.6 ...
 $ acq_date  : Factor w/ 14 levels "2018-11-08","2018-11-09",..: 2 2 2 3 8 8 9 10 13 14 ...
 $ acq_time  : int  948 948 2106 930 936 936 918 900 924 1024 ...
 $ satellite : Factor w/ 1 level "N": 1 1 1 1 1 1 1 1 1 1 ...
 $ instrument: Factor w/ 1 level "VIIRS": 1 1 1 1 1 1 1 1 1 1 ...
 $ confidence: Factor w/ 3 levels "h","l","n": 3 3 3 3 3 3 3 3 3 3 ...
 $ version   : Factor w/ 1 level "1.0NRT": 1 1 1 1 1 1 1 1 1 1 ...
 $ bright_ti5: num  286 285 313 282 277 ...
 $ frp       : num  0.5 0.3 6.4 0.6 0.3 0.7 0.8 0.6 0.7 0.8 ...
 $ daynight  : Factor w/ 2 levels "D","N": 2 2 1 2 2 2 2 2 2 2 ...
fire_csv$acq_date <- as.Date(fire_csv$acq_date)
hist(fire_csv$acq_date, "days", 
     freq = TRUE,
     breaks = 15,
     xlab = "Date Acquired",
     col = "firebrick3",
     border = "orange"
     )

##################Animated Map##################
install.packages('devtools')
devtools::install_github('thomasp85/gganimate')
library(ggplot2)
library(gganimate)


fire_csv$acq_date <- as.Date(fire_csv$acq_date)
str(fire_csv)

animated_map <- ggplot(fire_csv, (aes(longitude, latitude, color = bright_ti4))) +
  borders("county", ".*ventura",colour = "gray85", fill = "gray80", ) +
  theme_map() +
  borders("county", ".*los angeles",colour = "gray85", fill = "gray80", ) +
  theme_map() +
  geom_point(alpha = .5) +
  scale_color_gradient(low="yellow", high="red", name = "Brightness Value") + 
  labs(title = 'Date: {frame_time}', size = 3) +
  transition_time(acq_date) +
  enter_fade() + 
  ease_aes("linear")

animated_map
animate(animated_map, fps=1.75)
ease_aes('linear')

https://photos.google.com/share/AF1QipNZN2aIUorKUYKMkM5VbLYoWQUNbYvYlYubbeNgeh5SEIdfSBAkNcCuuEAu__RiHg/photo/AF1QipM8bCC5syWDq5n3_9v2GmFVQO7jzpSIIFAcZCIM?key=NDFycU16eExNSl81dUpRLXAwVEtWZmtFMkhuX3V3

##################Satellite Imagery GIF##################
#https://cran.r-project.org/web/packages/magick/vignettes/intro.html

before_fire <- image_scale(image_read("/Users/krgr.df/Desktop/Screen Shot 2018-12-04 at 2.20.06 AM.png"), "x450")
before_points <- image_scale(image_read("/Users/krgr.df/Desktop/Screen Shot 2018-12-04 at 2.07.35 AM.png"), "x450")
with_points <- image_scale(image_read("/Users/krgr.df/Desktop/Screen Shot 2018-12-04 at 2.07.52 AM.png"), "x450")
frames <- image_morph(c( before_fire, with_points, before_points, before_points, before_points, before_fire), frames = 20)
image_animate(frames)

https://photos.google.com/share/AF1QipNZN2aIUorKUYKMkM5VbLYoWQUNbYvYlYubbeNgeh5SEIdfSBAkNcCuuEAu__RiHg/photo/AF1QipNkvlR-hjBYCTTb4qZYSz-cO5hbNM0GNOsES2rP?key=NDFycU16eExNSl81dUpRLXAwVEtWZmtFMkhuX3V3

LS0tCnRpdGxlOiAiR0VPRzIwOCBGaW5hbCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ21kK1NoaWZ0K0VudGVyKi4gCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjUGFja2FnZXMjIyMjIyMjIyMjIyMjIyMjIyMKaW5zdGFsbC5wYWNrYWdlcygibWFnaWNrIikKbGlicmFyeShtYWdpY2spCmxpYnJhcnkoZGV2dG9vbHMpCmluc3RhbGxfZ2l0aHViKCJtdGVubmVrZXMvdG1hcHRvb2xzIikKaW5zdGFsbF9naXRodWIoIm10ZW5uZWtlcy90bWFwIikKI2luc3RhbGwucGFja2FnZXMoInRtYXAiKQpsaWJyYXJ5KHRtYXApCmxpYnJhcnkoc3ApCmxpYnJhcnkocmFzdGVyKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShjbGFzc0ludCkKaW5zdGFsbC5wYWNrYWdlcygncmFzdGVyVmlzJykKbGlicmFyeShyYXN0ZXJWaXMpCmluc3RhbGwucGFja2FnZXMoJ3RpZ3JpcycpCmxpYnJhcnkodGlncmlzKQppbnN0YWxsLnBhY2thZ2VzKCdyZ2RhbCcsIHR5cGUgPSAic291cmNlIiwgY29uZmlndXJlLmFyZ3M9YygnLS13aXRoLXByb2otaW5jbHVkZT0vTGlicmFyeS9GcmFtZXdvcmtzL1BST0ouZnJhbWV3b3JrL0hlYWRlcnMnLCAnLS13aXRoLXByb2otbGliPS9MaWJyYXJ5L0ZyYW1ld29ya3MvUFJPSi5mcmFtZXdvcmsvdW5peC9saWInKSkKbGlicmFyeShyZ2RhbCkKI2luc3RhbGwucGFja2FnZXMoInRtYXB0b29scyIpCmluc3RhbGwucGFja2FnZXMoInNmIikKaW5zdGFsbC5wYWNrYWdlcygibGVhZmxldCIpCmxpYnJhcnkodG1hcHRvb2xzKQpsaWJyYXJ5KCJzZiIpCmxpYnJhcnkobGVhZmxldCkKYGBgCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjdG1hcF9wb2ludHMjIyMjIyMjIyMjIyMjIyMjIyMKZGlyKCIvVXNlcnMva3Jnci5kZi9EZXNrdG9wL0dFT0cyMDgvRmluYWwgQXNzaWdubWVudC9GaXJlIERhdGEvRExfRklSRV9WMV8zMzA0MihTSFA4LTI0KSIpCmZpcmVfcG9pbnRzIDwtIHJlYWRPR1IoIi9Vc2Vycy9rcmdyLmRmL0Rlc2t0b3AvR0VPRzIwOC9GaW5hbCBBc3NpZ25tZW50L0ZpcmUgRGF0YS9ETF9GSVJFX1YxXzMzMDQyKFNIUDgtMjQpIiwgImZpcmVfbnJ0X1YxXzMzMDQyIikKClZlbl9ib3VuZCA8LSB0cmFjdHMoc3RhdGUgPSAiQ0EiLCBjb3VudHkgPSAiVmVudHVyYSIsIGNiID0gVFJVRSkKcGxvdChWZW5fYm91bmQpCnN0cihWZW5fYm91bmQsIG1heC5sZXZlbCA9IDIpCnN0cihWZW5fYm91bmRAZGF0YSwgbWF4LmxldmVsID0gMikKCkxBX2JvdW5kIDwtIHRyYWN0cyhzdGF0ZSA9ICJDQSIsIGNvdW50eSA9ICJMb3MgQW5nZWxlcyIsIGNiID0gVFJVRSkKcGxvdChMQV9ib3VuZCkKCiNpbXBvcnQgY3N2IGZpbGUgd2l0aCBtZWRpYW4gaG9tZSB2YWx1ZSBkYXRhIChWZW50dXJhKQpIVzQgPC0gZmlsZS5wYXRoICgiL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9HRU9HMjA4L0Fzc2lnbm1lbnQgNC92ZW50dXJhX21lZGlhbl92YWwuY3N2IikKbWVkaWFuLnZhbCA8LSByZWFkLmNzdihIVzQsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKbWVkaWFuLnZhbCRtZWRpYW4udmFsdWUgPC0gYXMubnVtZXJpYyhtZWRpYW4udmFsJG1lZGlhbi52YWx1ZSkKbWVkaWFuLnZhbCRpZDIgPC0gYXMuY2hhcmFjdGVyKG1lZGlhbi52YWwkaWQyKQoKCiNpbXBvcnQgY3N2IGZpbGUgd2l0aCBtZWRpYW4gaG9tZSB2YWx1ZSBkYXRhIChMb3MgQW5nZWxlcykKSFc0LjIgPC0gZmlsZS5wYXRoICgiL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9HRU9HMjA4L0Fzc2lnbm1lbnQgNC9MQV9tZWRpYW5fdmFsLmNzdiIpCkxBLm1lZGlhbi52YWwgPC0gcmVhZC5jc3YoSFc0LjIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKTEEubWVkaWFuLnZhbCRtZWRpYW4udmFsIDwtIGFzLm51bWVyaWMoTEEubWVkaWFuLnZhbCRtZWRpYW4udmFsKQpMQS5tZWRpYW4udmFsJGlkMiA8LSBhcy5jaGFyYWN0ZXIoTEEubWVkaWFuLnZhbCRpZDIpCgoKI21lcmdlIGNlbnN1cyB0cmFjdCBib3VuZGFyaWVzIHdpdGggbWVkaWFuIGhvbWUgdmFsdWVzIChWZW50dXJhKQp2ZW5fbWVyZ2UgPC0gbWVyZ2UoVmVuX2JvdW5kLCBtZWRpYW4udmFsLCBieS54ID0gIkFGRkdFT0lEIiwgYnkueSA9ICJpZCIpCgojbWVyZ2UgY2Vuc3VzIHRyYWN0IGJvdW5kYXJpZXMgd2l0aCBtZWRpYW4gaG9tZSB2YWx1ZXMgKExvcyBBbmdlbGVzKQpMQV9tZXJnZSA8LSBtZXJnZShMQV9ib3VuZCwgTEEubWVkaWFuLnZhbCwgYnkueCA9ICJBRkZHRU9JRCIsIGJ5LnkgPSAiaWQiKQoKI0NlbnN1cyBEYXRhIAogdG1fc2hhcGUodmVuX21lcmdlKSsKICB0bV9maWxsKGNvbCA9ICJtZWRpYW4udmFsdWUiLCBwYWxldHRlID0gIlB1QnUiLCB0aXRsZSA9ICJWZW50dXJhIENvdW50eSBNZWRpYW4gSG9tZSBWYWx1ZSIsIAogICAgICAgICAgc3R5bGUgPSAiZml4ZWQiLAogICAgICAgICAgYnJlYWtzID0gYygwLCAyNTAwMDAsIDUwMDAwMCwgNzUwMDAwLCAxMDAwMDAwLCBJbmYpLAogICAgICAgICAgdGV4dE5BID0gIk5vIERhdGEiLCAKICAgICAgICAgIGNvbG9yTkEgPSAiZ3JheSIpICsKICB0bV9ib3JkZXJzKGNvbCA9ICJ3aGl0ZSIpICsKICB0bV9sYXlvdXQobGVnZW5kLnRpdGxlLnNpemUgPSAxLAogICAgICAgICAgICBsZWdlbmQudGV4dC5zaXplID0gMC42LAogICAgICAgICAgICBsZWdlbmQudGV4dC5jb2xvciA9ICJncmF5MjAiLAogICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwiYm90dG9tIiksCiAgICAgICAgICAgIGxlZ2VuZC5iZy5jb2xvciA9ICJ3aGl0ZSIsCiAgICAgICAgICAgIGxlZ2VuZC53aWR0aCA9IC0xLAogICAgICAgICAgICBsZWdlbmQuYmcuYWxwaGEgPSAxKSsKICB0bV92aWV3KHZpZXcubGVnZW5kLnBvc2l0aW9uID0gYygicmlnaHQiLCAiYm90dG9tIikpICsKdG1fc2hhcGUoTEFfbWVyZ2UpKwogIHRtX2ZpbGwoY29sID0gIm1lZGlhbi52YWwiLCBwYWxldHRlID0gIllsR24iLCB0aXRsZSA9ICJMQSBDb3VudHkgTWVkaWFuIEhvbWUgVmFsdWUiLCAKICAgICAgICAgIHN0eWxlID0gImZpeGVkIiwKICAgICAgICAgIGJyZWFrcyA9IGMoMCwgMjUwMDAwLCA1MDAwMDAsIDc1MDAwMCwgMTAwMDAwMCwgSW5mKSwKICAgICAgICAgIHRleHROQSA9ICJObyBEYXRhIiwgCiAgICAgICAgICBjb2xvck5BID0gImdyYXkiKSArCiAgdG1fYm9yZGVycyhjb2wgPSAid2hpdGUiKSArCiAgdG1fbGF5b3V0KGxlZ2VuZC50aXRsZS5zaXplID0gMSwKICAgICAgICAgICAgbGVnZW5kLnRleHQuc2l6ZSA9IDAuNiwKICAgICAgICAgICAgbGVnZW5kLnRleHQuY29sb3IgPSAiZ3JheTIwIiwKICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gYygibGVmdCIsImJvdHRvbSIpLAogICAgICAgICAgICBsZWdlbmQuYmcuY29sb3IgPSAid2hpdGUiLAogICAgICAgICAgICBsZWdlbmQud2lkdGggPSAtMSwKICAgICAgICAgICAgbGVnZW5kLmJnLmFscGhhID0gMSkgKwogIHRtX3ZpZXcodmlldy5sZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwgImJvdHRvbSIpKSArCgojREVNCkRFTV80IDwtIHJhc3RlcigiL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9HRU9HMjA4L0ZpbmFsIEFzc2lnbm1lbnQvREVNcy9uMzRfdzEyMF8zYXJjX3YyLnRpZiIpCkRFTV81IDwtIHJhc3RlcigiL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9HRU9HMjA4L0ZpbmFsIEFzc2lnbm1lbnQvREVNcy9uMzRfdzExOV8zYXJjX3YyLnRpZiIpCm1vc2FpYyhERU1fNCwgREVNXzUsIGZ1biA9IG1lYW4sIHRvbGVyYW5jZT0wLjA1LCBmaWxlbmFtZT0iL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9HRU9HMjA4L0ZpbmFsIEFzc2lnbm1lbnQvREVNcy9Nb3NhaWNfdGVzdF8xLnRpZiIsIG92ZXJ3cml0ZT1UUlVFKSAKbW9zYWljX3Rlc3QgPC0gcmFzdGVyKCIvVXNlcnMva3Jnci5kZi9EZXNrdG9wL0dFT0cyMDgvRmluYWwgQXNzaWdubWVudC9ERU1zL01vc2FpY190ZXN0XzEudGlmIiwgb3ZlcndyaXRlPVRSVUUpCm1vc2FpY190ZXN0IDwtIHNldE1pbk1heChtb3NhaWNfdGVzdCkKY2VsbFN0YXRzKG1vc2FpY190ZXN0LCByYW5nZSkKCgp0bWFwX21vZGUoInZpZXciKQp0bWFwX3N0eWxlKCJjb2JhbHQiKQpNYXAxIDwtIHRtX3NoYXBlKGZpcmVfcG9pbnRzKSArCiAgdG1fZG90cygiQlJJR0hUX1RJNCIsIAogICAgICAgICAgYWxwaGEgPSAuOCwgCiAgICAgICAgICB0aXRsZSA9ICJCcmlnaHRuZXNzIFZhbHVlIiwKICAgICAgICAgIHBvcHVwLnZhcnMgPSAiQUNRX0RBVEUiLAogICAgICAgICAgcGFsZXR0ZSA9ICJZbE9yUmQiKSArCiAgdG1fc2hhcGUobW9zYWljX3Rlc3QpICsKICB0bV9yYXN0ZXIoIk1vc2FpY190ZXN0XzEiLCAKICAgICAgICAgICAgbWlkcG9pbnQgPSBOQSwgCiAgICAgICAgICAgIHRpdGxlID0gIkRFTSIpICsKICB0bWFwX29wdGlvbnMobWF4LnJhc3RlciA9IGMocGxvdCA9IDI4ODM2MDEsIHZpZXcgPSAyODgzNjAxKSkKCk1hcDEKCmhlYWQoZmlyZV9jc3YpCmBgYAoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjI2hpc3RvZ3JhbSBhY3FfZGF0ZSMjIyMjIyMjIyMjIyMjIyMjIwpmaXJlX2NzdiA8LSByZWFkLmNzdigiL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9HRU9HMjA4L0ZpbmFsIEFzc2lnbm1lbnQvRmlyZSBEYXRhL05BU0EgVklJUnMgQ1NWL2ZpcmVfbnJ0X1YxXzMyOTg2LmNzdiIpCnN0cihmaXJlX2NzdikKZmlyZV9jc3YkYWNxX2RhdGUgPC0gYXMuRGF0ZShmaXJlX2NzdiRhY3FfZGF0ZSkKaGlzdChmaXJlX2NzdiRhY3FfZGF0ZSwgImRheXMiLCAKICAgICBmcmVxID0gVFJVRSwKICAgICBicmVha3MgPSAxNSwKICAgICB4bGFiID0gIkRhdGUgQWNxdWlyZWQiLAogICAgIGNvbCA9ICJmaXJlYnJpY2szIiwKICAgICBib3JkZXIgPSAib3JhbmdlIgogICAgICkKYGBgCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjQW5pbWF0ZWQgTWFwIyMjIyMjIyMjIyMjIyMjIyMjCmluc3RhbGwucGFja2FnZXMoJ2RldnRvb2xzJykKZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCd0aG9tYXNwODUvZ2dhbmltYXRlJykKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGdnYW5pbWF0ZSkKCgpmaXJlX2NzdiRhY3FfZGF0ZSA8LSBhcy5EYXRlKGZpcmVfY3N2JGFjcV9kYXRlKQpzdHIoZmlyZV9jc3YpCgphbmltYXRlZF9tYXAgPC0gZ2dwbG90KGZpcmVfY3N2LCAoYWVzKGxvbmdpdHVkZSwgbGF0aXR1ZGUsIGNvbG9yID0gYnJpZ2h0X3RpNCkpKSArCiAgYm9yZGVycygiY291bnR5IiwgIi4qdmVudHVyYSIsY29sb3VyID0gImdyYXk4NSIsIGZpbGwgPSAiZ3JheTgwIiwgKSArCiAgdGhlbWVfbWFwKCkgKwogIGJvcmRlcnMoImNvdW50eSIsICIuKmxvcyBhbmdlbGVzIixjb2xvdXIgPSAiZ3JheTg1IiwgZmlsbCA9ICJncmF5ODAiLCApICsKICB0aGVtZV9tYXAoKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IC41KSArCiAgc2NhbGVfY29sb3JfZ3JhZGllbnQobG93PSJ5ZWxsb3ciLCBoaWdoPSJyZWQiLCBuYW1lID0gIkJyaWdodG5lc3MgVmFsdWUiKSArIAogIGxhYnModGl0bGUgPSAnRGF0ZToge2ZyYW1lX3RpbWV9Jywgc2l6ZSA9IDMpICsKICB0cmFuc2l0aW9uX3RpbWUoYWNxX2RhdGUpICsKICBlbnRlcl9mYWRlKCkgKyAKICBlYXNlX2FlcygibGluZWFyIikKCmFuaW1hdGVkX21hcAphbmltYXRlKGFuaW1hdGVkX21hcCwgZnBzPTEuNzUpCmVhc2VfYWVzKCdsaW5lYXInKQpgYGAKaHR0cHM6Ly9waG90b3MuZ29vZ2xlLmNvbS9zaGFyZS9BRjFRaXBOWk4yYUlVb3JLVVlLTWtNNVZiTFlvV1FVTmJZdllsWXViYmVOZ2VoNVNFSWRmU0JBa05jQ3V1RUF1X19SaUhnL3Bob3RvL0FGMVFpcE04YkNDNXN5V0RxNW4zXzl2MkdtRlZRTzdqenBTSUlGQWNaQ0lNP2tleT1OREZ5Y1UxNmVFeE5TbDgxZFVwUkxYQXdWRXRXWm10Rk1raHVYM1YzCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjSGVhdG1hcCMjIyMjIyMjIyMjIyMjIyMjIwojaHR0cDovL3RydWN2aWV0bGUubWUvci90dXRvcmlhbC8yMDE3LzAxLzE4L3NwYXRpYWwtaGVhdC1tYXAtcGxvdHRpbmctdXNpbmctci5odG1sCgpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZ2dtYXApCmxpYnJhcnkobWFwcykKbGlicmFyeShnZ3RoZW1lcykKaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikKbGlicmFyeShwbG90bHkpCgpmaXJlX2NzdiA8LSByZWFkLmNzdigiL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9HRU9HMjA4L0ZpbmFsIEFzc2lnbm1lbnQvRmlyZSBEYXRhL05BU0EgVklJUnMgQ1NWL2ZpcmVfbnJ0X1YxXzMyOTg2LmNzdiIpCgptZWFuLmxvbmdpdHVkZSA8LSBtZWFuKGZpcmVfY3N2JGxvbmdpdHVkZSkKbWVhbi5sYXRpdHVkZSA8LSBtZWFuKGZpcmVfY3N2JGxhdGl0dWRlKQojZHJvbmUubWFwIDwtIGdldF9tYXAobG9jYXRpb24gPSBjKG1lYW4ubG9uZ2l0dWRlLCBtZWFuLmxhdGl0dWRlKSwgem9vbSA9IDksIHNjYWxlID0gMikKYWZmZWN0ZWRfYXJlYSA8LSBnZ3Bsb3QoKSArCiAgYm9yZGVycygiY291bnR5IiwgIi4qdmVudHVyYSIsY29sb3VyID0gImdyYXk4NSIsIGZpbGwgPSAiZ3JheTgwIiwgKSArCiAgdGhlbWVfbWFwKCkgKwogIGJvcmRlcnMoImNvdW50eSIsICIuKmxvcyBhbmdlbGVzIixjb2xvdXIgPSAiZ3JheTg1IiwgZmlsbCA9ICJncmF5ODAiLCApICsKICB0aGVtZV9tYXAoKQoKaGVhdG1hcDEgPC0gYWZmZWN0ZWRfYXJlYSArIAogICAgICAgICAgICBzdGF0X2RlbnNpdHkyZChkYXRhPWZpcmVfY3N2LAogICAgICAgICAgICAgICAgIGFlcyh4PWxvbmdpdHVkZSwgeT1sYXRpdHVkZSwgZmlsbD0uLmxldmVsLi4sIGFscGhhPS4ubGV2ZWwuLiksIAogICAgICAgICAgICAgICAgIGdlb209InBvbHlnb24iKSArCiAgICAgICAgICAgIHNjYWxlX2ZpbGxfZ3JhZGllbnRuKGNvbG91cnM9KGJyZXdlci5wYWwoNywgIllsT3JSZCIpKSkgKwogICAgICAgICAgICBndWlkZXMoc2l6ZT1GQUxTRSwgYWxwaGEgPSBGQUxTRSkKaGVhdG1hcDEKCmhlYXRtYXBseSA8LSBnZ3Bsb3RseShoZWF0bWFwMSkKaGVhdG1hcGx5CgpgYGAKCmBgYHtyfQojIyMjIyMjIyMjIyMjIyMjIyNTYXRlbGxpdGUgSW1hZ2VyeSBHSUYjIyMjIyMjIyMjIyMjIyMjIyMKI2h0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9tYWdpY2svdmlnbmV0dGVzL2ludHJvLmh0bWwKCmJlZm9yZV9maXJlIDwtIGltYWdlX3NjYWxlKGltYWdlX3JlYWQoIi9Vc2Vycy9rcmdyLmRmL0Rlc2t0b3AvU2NyZWVuIFNob3QgMjAxOC0xMi0wNCBhdCAyLjIwLjA2IEFNLnBuZyIpLCAieDQ1MCIpCmJlZm9yZV9wb2ludHMgPC0gaW1hZ2Vfc2NhbGUoaW1hZ2VfcmVhZCgiL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9TY3JlZW4gU2hvdCAyMDE4LTEyLTA0IGF0IDIuMDcuMzUgQU0ucG5nIiksICJ4NDUwIikKd2l0aF9wb2ludHMgPC0gaW1hZ2Vfc2NhbGUoaW1hZ2VfcmVhZCgiL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9TY3JlZW4gU2hvdCAyMDE4LTEyLTA0IGF0IDIuMDcuNTIgQU0ucG5nIiksICJ4NDUwIikKZnJhbWVzIDwtIGltYWdlX21vcnBoKGMoIGJlZm9yZV9maXJlLCB3aXRoX3BvaW50cywgYmVmb3JlX3BvaW50cywgYmVmb3JlX3BvaW50cywgYmVmb3JlX3BvaW50cywgYmVmb3JlX2ZpcmUpLCBmcmFtZXMgPSAyMCkKaW1hZ2VfYW5pbWF0ZShmcmFtZXMpCgpgYGAKaHR0cHM6Ly9waG90b3MuZ29vZ2xlLmNvbS9zaGFyZS9BRjFRaXBOWk4yYUlVb3JLVVlLTWtNNVZiTFlvV1FVTmJZdllsWXViYmVOZ2VoNVNFSWRmU0JBa05jQ3V1RUF1X19SaUhnL3Bob3RvL0FGMVFpcE5rdmxSLWhqQllDVFRiNHFaWVN6LWNPNWhiTk0wR05Pc0VTMnJQP2tleT1OREZ5Y1UxNmVFeE5TbDgxZFVwUkxYQXdWRXRXWm10Rk1raHVYM1YzCg==