1 Data Introduction

The data set used to create the visualization on this page was the Philly shooting data set. This data set has 15577 observations of 25 different variables. Missing variables were removed from the data set. The final data set has 15303 observations of 25 different variables.

shootings2 <- read.csv(file="https://isarenn.github.io/irennenberg/Week8/shootings.csv") #reading in the dataset from githbub


## Define objects with geo-coordinate system to plot specific information
race = st_as_sf(data.frame(x = -75.3677, y = 39.9168),
                coords = c("x", "y"),
                crs = 4326)
gender = st_as_sf(data.frame(x = -75.3477, y = 39.9168),
                coords = c("x", "y"),
                crs = 4326)
fatal = st_as_sf(data.frame(x = -75.3877, y = 39.9168),
                coords = c("x", "y"),
                crs = 4326)

shootings <- shootings2[complete.cases(shootings2),]

2 Philadelphia Shootings: Interactive Map

Below is the interactive map that aggregates/collapses information over the entirety of the city of Philadelphia. Circles are shown as red if the shooting was nonfatal, and blue if the shooting was fatal.

img1<-"https://isarenn.github.io/irennenberg/Week8/Gender.jpeg"
img2<-"https://isarenn.github.io/irennenberg/Week8/Race.jpeg"
img3<-"https://isarenn.github.io/irennenberg/Week8/Fatal.jpeg"

pal <- colorFactor(c("red", "blue"), domain = c("0", "1"))

Map1<-leaflet(shootings) %>%
  setView(lng=-75.15092, lat=40.00995, zoom = 11) %>%
  addProviderTiles(providers$CartoDB.Positron, group="Positron") %>%
  addProviderTiles(providers$CartoDB.PositronNoLabels, group="PositronLabels") %>%  
  addProviderTiles(providers$Esri.NatGeoWorldMap, group="Esri") %>%
  addMiniMap() %>%
  ## neighborhood boundary
  addPolygons(data = phillyNeighbor,
              color = 'lightpink',
              weight = 2)  %>%
  ## plot information on the map
  addCircleMarkers(data = shootings,
                   radius = ~ifelse(fatal == "1", 5, 3),
                   color = ~pal(fatal),
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   popup = ~popupTable(shootings),
                   clusterOptions = markerClusterOptions(maxClusterRadius = 40)) %>%
  addLayersControl(baseGroups = c('Positron', 'PositronLabel', 'Esri'),
                   overlayGroups = c("Shootings Data"),
                   options = layersControlOptions(collapsed = TRUE)) %>%
  addCircleMarkers(data = gender, 
                   color = "blue",
                   weight = 2,
                   label = "Gender",
                   stroke = FALSE, 
                   fillOpacity = 0.95,
                   group = "gender") %>%
  addPopupImages(img1, 
                  width = 300,
                  height = 300,
                  tooltip = FALSE,
                  group = "gender")  %>%
  addCircleMarkers(data = race, 
                   color = "purple",
                   weight = 2,
                   label = "Race",
                   stroke = FALSE, 
                   fillOpacity = 0.95,
                   group = "race") %>%
  addPopupImages(img2, 
                  width = 300,
                  height = 300,
                  tooltip = FALSE,
                  group = "race") %>%
  addCircleMarkers(data = fatal, 
                   color = "lightblue",
                   weight = 2,
                   label = "Fatality",
                   stroke = FALSE, 
                   fillOpacity = 0.95,
                   group = "fatal") %>%
  addPopupImages(img3, 
                  width = 300,
                  height = 300,
                  tooltip = FALSE,
                  group = "fatal")  

title<-tags$div(HTML('<font color = "purple" size =4><b>Philadelphia Shootings By Borough</b></font>'))


Map2<-Map1 %>%
  addControl(title, position="topleft")

Map2

3 Conclusions

From the pop-ups, we can see that the majority of the shootings involved men, and the most prevalent race was black. We can also see that the shootings were primarily non fatal. In addition, we see that the shootings are clustered in the majority of the inner portions of the city.

Thank you!

LS0tDQp0aXRsZTogIlBoaWxhZGVscGhpYSBTaG9vdGluZ3MgVmlzdWFsaXplZCBXaXRoIE1hcHMiDQphdXRob3I6ICJJc2FiZWxsZSBSZW5uZW5iZXJnIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDogDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNA0KICAgIHRoZW1lOiAic3BhY2VsYWIiDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgICAgDQogICAgDQotLS0gIA0KDQoNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoNCmgxLnRpdGxlIHsNCiAgZm9udC1zaXplOiAzOHB4Ow0KICBjb2xvcjogIzAwMDBGRjsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogIzQxYjZjNDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDEgew0KICAgIGZvbnQtc2l6ZTogMjJweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogIzQxYjZjNDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KPC9zdHlsZT4NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCANCiMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGVzLg0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCiAgIGxpYnJhcnkodGlkeXZlcnNlKQ0KfQ0KaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpDQogICBsaWJyYXJ5KGtuaXRyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJzZiIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJzZiIpDQogICBsaWJyYXJ5KHNmKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0ZXJyYSIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJ0ZXJyYSIpDQogICBsaWJyYXJ5KHRlcnJhKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCiAgIGxpYnJhcnkocGxvdGx5KQ0KfQ0KaWYgKCFyZXF1aXJlKCJkcGx5ciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJkcGx5ciIpDQogICBsaWJyYXJ5KGRwbHlyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwbmciKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInBuZyIpICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoInBuZyIpDQp9DQppZiAoIXJlcXVpcmUoInNwRGF0YSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygic3BEYXRhIikgICAgICAgICAgICAgDQogICAgbGlicmFyeSgic3BEYXRhIikNCn0NCmlmICghcmVxdWlyZSgiY29sb3VycGlja2VyIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJjb2xvdXJwaWNrZXIiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiY29sb3VycGlja2VyIikNCn0NCmlmICghcmVxdWlyZSgiZ2lmc2tpIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnaWZza2kiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2lmc2tpIikNCn0NCmlmICghcmVxdWlyZSgibWFnaWNrIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJtYWdpY2siKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgibWFnaWNrIikNCn0NCiNpZiAoIXJlcXVpcmUoInNwRGF0YUxhcmdlIikpIHsNCiAjICAgaW5zdGFsbC5wYWNrYWdlcygic3BEYXRhTGFyZ2UiKSAgICAgICAgICAgICAgDQogICMgIGxpYnJhcnkoInNwRGF0YUxhcmdlIikNCiN9DQojIyMgZ2dwbG90IGFuZCBleHRlbnNpb25zDQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2dwbG90MiIpDQp9DQppZiAoIXJlcXVpcmUoImdnYW5pbWF0ZSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2dhbmltYXRlIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdnYW5pbWF0ZSIpDQp9DQppZiAoIXJlcXVpcmUoInRtYXAiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInRtYXAiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgidG1hcCIpDQp9DQppZiAoIXJlcXVpcmUoInNmIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJzZiIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJzZiIpDQp9DQppZiAoIXJlcXVpcmUoInRpZ3JpcyIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygidGlncmlzIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoInRpZ3JpcyIpDQp9DQppZiAoIXJlcXVpcmUoIm1hcHZpZXciKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoIm1hcHZpZXciKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgibWFwdmlldyIpDQp9DQppZiAoIXJlcXVpcmUoInBhbmRlciIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygicGFuZGVyIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoInBhbmRlciIpDQp9DQppZiAoIXJlcXVpcmUoImxhdHRpY2UiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImxhdHRpY2UiKQ0KbGlicmFyeSgibGF0dGljZSIpDQp9DQppZiAoIXJlcXVpcmUoInNwIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJzcCIpDQpsaWJyYXJ5KCJzcCIpDQp9DQppZiAoIXJlcXVpcmUoImxlYWZsZXQiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImxlYWZsZXQiKQ0KbGlicmFyeSgibGVhZmxldCIpDQp9DQppZiAoIXJlcXVpcmUoImxlYWZwb3AiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImxlYWZwb3AiKQ0KbGlicmFyeSgibGVhZnBvcCIpDQp9DQppZiAoIXJlcXVpcmUoImxlYWZlbSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZmVtIikNCmxpYnJhcnkoImxlYWZlbSIpDQp9DQojaWYgKCFyZXF1aXJlKCJzcERhdGFMYXJnZSIpKSB7DQogIyAgIGluc3RhbGwucGFja2FnZXMoInNwRGF0YUxhcmdlIiwgcmVwb3MgPSAiaHR0cHM6Ly9nZW9jb21wci5yLXVuaXZlcnNlLmRldiIpDQojbGlicmFyeSgic3BEYXRhTGFyZ2UiKQ0KaWYgKCFyZXF1aXJlKCJodG1sd2lkZ2V0cyIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiaHRtbHdpZGdldHMiKQ0KbGlicmFyeSgiaHRtbHdpZGdldHMiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJsZWFmbGV0LmV4dHJhcyIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZmxldC5leHRyYXMiKQ0KbGlicmFyeSgibGVhZmxldC5leHRyYXMiKQ0KfQ0KaWYgKCFyZXF1aXJlKCJodG1sdG9vbHMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImh0bWx0b29scyIpDQpsaWJyYXJ5KCJodG1sdG9vbHMiKQ0KfQ0KaWYoIXJlcXVpcmUoInBuZyIpKXsNCiAgaW5zdGFsbC5wYWNrYWdlcygicG5nIikNCiAgbGlicmFyeShwbmcpDQp9DQppZighcmVxdWlyZSgidmlyaWRpcyIpKXsNCiAgaW5zdGFsbC5wYWNrYWdlcygidmlyaWRpcyIpDQogIGxpYnJhcnkodmlyaWRpcykNCn0NCmlmKCFyZXF1aXJlKCJnZ21hcCIpKXsNCiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dtYXAiKQ0KICBsaWJyYXJ5KGdnbWFwKQ0KfQ0KaWYoIXJlcXVpcmUoIndlYnNob3QiKSl7DQogIGluc3RhbGwucGFja2FnZXMoIndlYnNob3QiKQ0KICBsaWJyYXJ5KHdlYnNob3QpDQp9DQppZighcmVxdWlyZSgiaHRtbHdpZGdldHMiKSl7DQogIGluc3RhbGwucGFja2FnZXMoImh0bWx3aWRnZXRzIikNCiAgbGlicmFyeShodG1sd2lkZ2V0cykNCn0NCmlmKCFyZXF1aXJlKCJhbmltYXRpb24iKSl7DQogIGluc3RhbGwucGFja2FnZXMoImFuaW1hdGlvbiIpDQogIGxpYnJhcnkoYW5pbWF0aW9uKQ0KfQ0KaWYoIXJlcXVpcmUoImdpZnNraSIpKXsNCiAgaW5zdGFsbC5wYWNrYWdlcygiZ2lmc2tpIikNCiAgbGlicmFyeShnaWZza2kpDQp9DQppZighcmVxdWlyZSgiaHRtbFRhYmxlIikpew0KICBpbnN0YWxsLnBhY2thZ2VzKCJodG1sVGFibGUiKQ0KICBsaWJyYXJ5KGh0bWxUYWJsZSkNCn0NCmlmKCFyZXF1aXJlKCJtYWdyaXR0ciIpKXsNCiAgaW5zdGFsbC5wYWNrYWdlcygibWFncml0dHIiKQ0KICBsaWJyYXJ5KG1hZ3JpdHRyKQ0KfQ0KIyMjIGxpYnJhcnkobWFncml0dHIpDQojIyMNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gTkEpDQpgYGANCg0KIyBEYXRhIEludHJvZHVjdGlvbg0KDQpUaGUgZGF0YSBzZXQgdXNlZCB0byBjcmVhdGUgdGhlIHZpc3VhbGl6YXRpb24gb24gdGhpcyBwYWdlIHdhcyB0aGUgUGhpbGx5IHNob290aW5nIGRhdGEgc2V0LiBUaGlzIGRhdGEgc2V0IGhhcyAxNTU3NyBvYnNlcnZhdGlvbnMgb2YgMjUgZGlmZmVyZW50IHZhcmlhYmxlcy4gTWlzc2luZyB2YXJpYWJsZXMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGRhdGEgc2V0LiBUaGUgZmluYWwgZGF0YSBzZXQgaGFzIDE1MzAzIG9ic2VydmF0aW9ucyBvZiAyNSBkaWZmZXJlbnQgdmFyaWFibGVzLg0KDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KDQpwaGlsbHlOZWlnaGJvciAgPC0gc3RfcmVhZCgiaHR0cHM6Ly9wZW5nZHNjaS5naXRodWIuaW8vU1RBNTUzVklaL3cwOC9OZWlnaGJvcmhvb2RzX1BoaWxhZGVscGhpYS5nZW9qc29uIikNCnBoaWxseSAgPC0gc3RfcmVhZCgiaHR0cHM6Ly9wZW5nZHNjaS5naXRodWIuaW8vU1RBNTUzVklaL3cwOC9QaGlsbHlOZWlnaGJvcmhvb2QtYmxvY2tzLmdlb2pzb24iKSAjIGJsb2NrIGxldmVsIGRhdGENCg0KYGBgDQoNCmBgYHtyfQ0Kc2hvb3RpbmdzMiA8LSByZWFkLmNzdihmaWxlPSJodHRwczovL2lzYXJlbm4uZ2l0aHViLmlvL2lyZW5uZW5iZXJnL1dlZWs4L3Nob290aW5ncy5jc3YiKSAjcmVhZGluZyBpbiB0aGUgZGF0YXNldCBmcm9tIGdpdGhidWINCg0KDQojIyBEZWZpbmUgb2JqZWN0cyB3aXRoIGdlby1jb29yZGluYXRlIHN5c3RlbSB0byBwbG90IHNwZWNpZmljIGluZm9ybWF0aW9uDQpyYWNlID0gc3RfYXNfc2YoZGF0YS5mcmFtZSh4ID0gLTc1LjM2NzcsIHkgPSAzOS45MTY4KSwNCiAgICAgICAgICAgICAgICBjb29yZHMgPSBjKCJ4IiwgInkiKSwNCiAgICAgICAgICAgICAgICBjcnMgPSA0MzI2KQ0KZ2VuZGVyID0gc3RfYXNfc2YoZGF0YS5mcmFtZSh4ID0gLTc1LjM0NzcsIHkgPSAzOS45MTY4KSwNCiAgICAgICAgICAgICAgICBjb29yZHMgPSBjKCJ4IiwgInkiKSwNCiAgICAgICAgICAgICAgICBjcnMgPSA0MzI2KQ0KZmF0YWwgPSBzdF9hc19zZihkYXRhLmZyYW1lKHggPSAtNzUuMzg3NywgeSA9IDM5LjkxNjgpLA0KICAgICAgICAgICAgICAgIGNvb3JkcyA9IGMoIngiLCAieSIpLA0KICAgICAgICAgICAgICAgIGNycyA9IDQzMjYpDQoNCnNob290aW5ncyA8LSBzaG9vdGluZ3MyW2NvbXBsZXRlLmNhc2VzKHNob290aW5nczIpLF0NCg0KYGBgDQoNCiMgUGhpbGFkZWxwaGlhIFNob290aW5nczogSW50ZXJhY3RpdmUgTWFwDQoNCkJlbG93IGlzIHRoZSBpbnRlcmFjdGl2ZSBtYXAgdGhhdCBhZ2dyZWdhdGVzL2NvbGxhcHNlcyBpbmZvcm1hdGlvbiBvdmVyIHRoZSBlbnRpcmV0eSBvZiB0aGUgY2l0eSBvZiBQaGlsYWRlbHBoaWEuIENpcmNsZXMgYXJlIHNob3duIGFzIHJlZCBpZiB0aGUgc2hvb3Rpbmcgd2FzIG5vbmZhdGFsLCBhbmQgYmx1ZSBpZiB0aGUgc2hvb3Rpbmcgd2FzIGZhdGFsLiANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQoNCnRhYmxlPC10YWJsZShzaG9vdGluZ3Mkc2V4KQ0KbGFiZWw8LXBhc3RlKG5hbWVzKHRhYmxlKSwiXG4iLCB0YWJsZSxzZXA9IiIpDQpwaWUodGFibGUsIGxhYmVscz1sYWJlbCwgbWFpbj0iUGllIENoYXJ0IG9mIFNob290aW5ncyBieSBHZW5kZXIiLCBjb2w9YygiZ3JlZW4iLCJwdXJwbGUiKSkNCg0KdGFibGUyPC10YWJsZShzaG9vdGluZ3MkcmFjZSkNCmxhYmVsMjwtcGFzdGUobmFtZXModGFibGUyKSkNCnBpZSh0YWJsZTIsIGxhYmVscz1sYWJlbDIsIG1haW49IlBpZSBDaGFydCBvZiBTaG9vdGluZ3MgYnkgUmFjZSIsIGNvbD1jKCJyZWQiLCJ5ZWxsb3ciLCJwaW5rIiwiYmx1ZSIpKQ0KDQp0YWJsZTM8LXRhYmxlKHNob290aW5ncyRmYXRhbCkNCmxhYmVsMzwtcGFzdGUobmFtZXModGFibGUzKSkNCnBpZSh0YWJsZTMsIGxhYmVscz1sYWJlbDMsIG1haW49IlBpZSBDaGFydCBvZiBGYXRhbGl0aWVzIiwgY29sPWMoIm9yYW5nZSIsInJlZCIpKQ0KbGVnZW5kKCJib3R0b21sZWZ0IixjKCJOb24tRmF0YWwiLCJGYXRhbCIpLCBmaWxsPWMoIm9yYW5nZSIsInJlZCIpKQ0KDQpgYGANCg0KYGBge3J9DQppbWcxPC0iaHR0cHM6Ly9pc2FyZW5uLmdpdGh1Yi5pby9pcmVubmVuYmVyZy9XZWVrOC9HZW5kZXIuanBlZyINCmltZzI8LSJodHRwczovL2lzYXJlbm4uZ2l0aHViLmlvL2lyZW5uZW5iZXJnL1dlZWs4L1JhY2UuanBlZyINCmltZzM8LSJodHRwczovL2lzYXJlbm4uZ2l0aHViLmlvL2lyZW5uZW5iZXJnL1dlZWs4L0ZhdGFsLmpwZWciDQoNCnBhbCA8LSBjb2xvckZhY3RvcihjKCJyZWQiLCAiYmx1ZSIpLCBkb21haW4gPSBjKCIwIiwgIjEiKSkNCg0KTWFwMTwtbGVhZmxldChzaG9vdGluZ3MpICU+JQ0KICBzZXRWaWV3KGxuZz0tNzUuMTUwOTIsIGxhdD00MC4wMDk5NSwgem9vbSA9IDExKSAlPiUNCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkQ2FydG9EQi5Qb3NpdHJvbiwgZ3JvdXA9IlBvc2l0cm9uIikgJT4lDQogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJENhcnRvREIuUG9zaXRyb25Ob0xhYmVscywgZ3JvdXA9IlBvc2l0cm9uTGFiZWxzIikgJT4lICANCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkRXNyaS5OYXRHZW9Xb3JsZE1hcCwgZ3JvdXA9IkVzcmkiKSAlPiUNCiAgYWRkTWluaU1hcCgpICU+JQ0KICAjIyBuZWlnaGJvcmhvb2QgYm91bmRhcnkNCiAgYWRkUG9seWdvbnMoZGF0YSA9IHBoaWxseU5laWdoYm9yLA0KICAgICAgICAgICAgICBjb2xvciA9ICdsaWdodHBpbmsnLA0KICAgICAgICAgICAgICB3ZWlnaHQgPSAyKSAgJT4lDQogICMjIHBsb3QgaW5mb3JtYXRpb24gb24gdGhlIG1hcA0KICBhZGRDaXJjbGVNYXJrZXJzKGRhdGEgPSBzaG9vdGluZ3MsDQogICAgICAgICAgICAgICAgICAgcmFkaXVzID0gfmlmZWxzZShmYXRhbCA9PSAiMSIsIDUsIDMpLA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gfnBhbChmYXRhbCksDQogICAgICAgICAgICAgICAgICAgc3Ryb2tlID0gRkFMU0UsIA0KICAgICAgICAgICAgICAgICAgIGZpbGxPcGFjaXR5ID0gMC41LA0KICAgICAgICAgICAgICAgICAgIHBvcHVwID0gfnBvcHVwVGFibGUoc2hvb3RpbmdzKSwNCiAgICAgICAgICAgICAgICAgICBjbHVzdGVyT3B0aW9ucyA9IG1hcmtlckNsdXN0ZXJPcHRpb25zKG1heENsdXN0ZXJSYWRpdXMgPSA0MCkpICU+JQ0KICBhZGRMYXllcnNDb250cm9sKGJhc2VHcm91cHMgPSBjKCdQb3NpdHJvbicsICdQb3NpdHJvbkxhYmVsJywgJ0VzcmknKSwNCiAgICAgICAgICAgICAgICAgICBvdmVybGF5R3JvdXBzID0gYygiU2hvb3RpbmdzIERhdGEiKSwNCiAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gbGF5ZXJzQ29udHJvbE9wdGlvbnMoY29sbGFwc2VkID0gVFJVRSkpICU+JQ0KICBhZGRDaXJjbGVNYXJrZXJzKGRhdGEgPSBnZW5kZXIsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHdlaWdodCA9IDIsDQogICAgICAgICAgICAgICAgICAgbGFiZWwgPSAiR2VuZGVyIiwNCiAgICAgICAgICAgICAgICAgICBzdHJva2UgPSBGQUxTRSwgDQogICAgICAgICAgICAgICAgICAgZmlsbE9wYWNpdHkgPSAwLjk1LA0KICAgICAgICAgICAgICAgICAgIGdyb3VwID0gImdlbmRlciIpICU+JQ0KICBhZGRQb3B1cEltYWdlcyhpbWcxLCANCiAgICAgICAgICAgICAgICAgIHdpZHRoID0gMzAwLA0KICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gMzAwLA0KICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAiZ2VuZGVyIikgICU+JQ0KICBhZGRDaXJjbGVNYXJrZXJzKGRhdGEgPSByYWNlLCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJwdXJwbGUiLA0KICAgICAgICAgICAgICAgICAgIHdlaWdodCA9IDIsDQogICAgICAgICAgICAgICAgICAgbGFiZWwgPSAiUmFjZSIsDQogICAgICAgICAgICAgICAgICAgc3Ryb2tlID0gRkFMU0UsIA0KICAgICAgICAgICAgICAgICAgIGZpbGxPcGFjaXR5ID0gMC45NSwNCiAgICAgICAgICAgICAgICAgICBncm91cCA9ICJyYWNlIikgJT4lDQogIGFkZFBvcHVwSW1hZ2VzKGltZzIsIA0KICAgICAgICAgICAgICAgICAgd2lkdGggPSAzMDAsDQogICAgICAgICAgICAgICAgICBoZWlnaHQgPSAzMDAsDQogICAgICAgICAgICAgICAgICB0b29sdGlwID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICBncm91cCA9ICJyYWNlIikgJT4lDQogIGFkZENpcmNsZU1hcmtlcnMoZGF0YSA9IGZhdGFsLCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJsaWdodGJsdWUiLA0KICAgICAgICAgICAgICAgICAgIHdlaWdodCA9IDIsDQogICAgICAgICAgICAgICAgICAgbGFiZWwgPSAiRmF0YWxpdHkiLA0KICAgICAgICAgICAgICAgICAgIHN0cm9rZSA9IEZBTFNFLCANCiAgICAgICAgICAgICAgICAgICBmaWxsT3BhY2l0eSA9IDAuOTUsDQogICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAiZmF0YWwiKSAlPiUNCiAgYWRkUG9wdXBJbWFnZXMoaW1nMywgDQogICAgICAgICAgICAgICAgICB3aWR0aCA9IDMwMCwNCiAgICAgICAgICAgICAgICAgIGhlaWdodCA9IDMwMCwNCiAgICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgIGdyb3VwID0gImZhdGFsIikgIA0KDQp0aXRsZTwtdGFncyRkaXYoSFRNTCgnPGZvbnQgY29sb3IgPSAicHVycGxlIiBzaXplID00PjxiPlBoaWxhZGVscGhpYSBTaG9vdGluZ3MgQnkgQm9yb3VnaDwvYj48L2ZvbnQ+JykpDQoNCg0KTWFwMjwtTWFwMSAlPiUNCiAgYWRkQ29udHJvbCh0aXRsZSwgcG9zaXRpb249InRvcGxlZnQiKQ0KDQpNYXAyDQoNCg0KYGBgDQojIENvbmNsdXNpb25zDQoNCkZyb20gdGhlIHBvcC11cHMsIHdlIGNhbiBzZWUgdGhhdCB0aGUgbWFqb3JpdHkgb2YgdGhlIHNob290aW5ncyBpbnZvbHZlZCBtZW4sIGFuZCB0aGUgbW9zdCBwcmV2YWxlbnQgcmFjZSB3YXMgYmxhY2suIFdlIGNhbiBhbHNvIHNlZSB0aGF0IHRoZSBzaG9vdGluZ3Mgd2VyZSBwcmltYXJpbHkgbm9uIGZhdGFsLiBJbiBhZGRpdGlvbiwgd2Ugc2VlIHRoYXQgdGhlIHNob290aW5ncyBhcmUgY2x1c3RlcmVkIGluIHRoZSBtYWpvcml0eSBvZiB0aGUgaW5uZXIgcG9ydGlvbnMgb2YgdGhlIGNpdHkuIA0KDQpUaGFuayB5b3UhDQo=