Mapping the proportion of Black, white, asian, hispanic and latino
people in NYC.
Methods
The borough boundaries are represented with a shapefile downloaded
from NYC Open Data. The data is from the 2020 decennial. This data
includes:
The total population The number of people who are hispanic
or latino The number of people who are Black The number of
people who are asian *The number of people who are white
The percent of each racial category in each tract was calculated, and
the areas with no residents are left blank.
#create raw table
race_NY_raw <- get_decennial(geography= "tract",
variables = c(total_pop = "P1_001N",
hisp_latin = "P2_002N",
black_alone = "P1_004N",
asian_alone = "P1_006N",
white_alone = "P1_003N"),
year = 2020,
state = "NY",
county = c("Kings","New York","Bronx","Queens","Richmond"),
geometry = T,
output = "wide")
#Making the data pretty
race_NY <- race_NY_raw|>
mutate(percent_hisp_latin = hisp_latin/total_pop,
percent_black = black_alone/total_pop,
percent_asian = asian_alone/total_pop,
percent_white = white_alone/total_pop)|>
select(GEOID, NAME, total_pop, percent_hisp_latin, percent_black, percent_asian,
percent_white, geometry)
## import borough shapefiles from NYC Open Data
boros <- st_read("~/Desktop/Stuff & Things/School/Grad School/DUE Methods 1/part2/data/raw/geo/Borough Boundaries.geojson")
###Results
ggplot(data = race_NY, mapping = aes(fill = percent_hisp_latin)) +
geom_sf(color = "#fff") +
theme_void() +
scale_fill_distiller(breaks=c(0, .20, .40, .60, .80, 1.00),
palette = "YlOrRd",
direction = 1,
na.value = "transparent",
name="Percent Hispanic or Latino",
labels=percent_format(accuracy = 1L)) +
labs(
title = "Hispanic or Latino Population in NYC",
caption = "Source: Decennial, 2020")+
geom_sf(data = boros |> filter(boro_name == "Brooklyn"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Manhattan"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Bronx"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Staten Island"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Queens"),
color = "black", fill = NA, lwd = .25)

The map above shows that there are large concentrations of Hispanic
and Latino populations in the South Bronx, Bushwick, Brownsville and
Cyprus Hills.
ggplot(data = race_NY, mapping = aes(fill = percent_black)) +
geom_sf(color = "#fff") +
theme_void() +
scale_fill_distiller(breaks=c(0, .20, .40, .60, .80, 1.00),
palette = "RdPu",
direction = 1,
na.value = "transparent",
name="Percent Black",
labels=percent_format(accuracy = 1L)) +
labs(
title = "Black Population in NYC",
caption = "Source: Decennial, 2020")+
geom_sf(data = boros |> filter(boro_name == "Brooklyn"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Manhattan"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Bronx"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Staten Island"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Queens"),
color = "black", fill = NA, lwd = .25)

This map shows higher concentrations of Black populations in North
Bronx, East Queens and North Brooklyn.
ggplot(data = race_NY, mapping = aes(fill = percent_asian)) +
geom_sf(color = "#fff") +
theme_void() +
scale_fill_distiller(breaks=c(0, .20, .40, .60, .80, 1.00),
palette = "YlGn",
direction = 1,
na.value = "transparent",
name="Percent Asian",
labels=percent_format(accuracy = 1L)) +
labs(
title = "Asian Population in NYC",
caption = "Source: Decennial, 2020")+
geom_sf(data = boros |> filter(boro_name == "Brooklyn"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Manhattan"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Bronx"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Staten Island"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Queens"),
color = "black", fill = NA, lwd = .25)

This map shows that the highest concentration of the asian population
is in North Queens and South Brooklyn.
ggplot(data = race_NY, mapping = aes(fill = percent_white)) +
geom_sf(color = "#fff") +
theme_void() +
scale_fill_distiller(breaks=c(0, .20, .40, .60, .80, 1.00),
palette = "Blues",
direction = 1,
na.value = "transparent",
name="Percent White",
labels=percent_format(accuracy = 1L)) +
labs(
title = "White Population in NYC",
caption = "Source: Decennial, 2020")+
geom_sf(data = boros |> filter(boro_name == "Brooklyn"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Manhattan"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Bronx"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Staten Island"),
color = "black", fill = NA, lwd = .25)+
geom_sf(data = boros |> filter(boro_name == "Queens"),
color = "black", fill = NA, lwd = .25)

This map shows that the white population is all across New York City,
but tend to avoid Northeast Brooklyn, East Queens and the Bronx.
LS0tCnRpdGxlOiAiUmFjZSBEaXN0cmlidXRpb24gaW4gTllDIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpNYXBwaW5nIHRoZSBwcm9wb3J0aW9uIG9mIEJsYWNrLCB3aGl0ZSwgYXNpYW4sIGhpc3BhbmljIGFuZCBsYXRpbm8gcGVvcGxlIGluIE5ZQy4gCgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgcmVzdWx0cz0naGlkZSd9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHRpZHljZW5zdXMpCmxpYnJhcnkoc2YpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KHZpcmlkaXNMaXRlKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKYGBgCgojIyMgTWV0aG9kcwpUaGUgYm9yb3VnaCBib3VuZGFyaWVzIGFyZSByZXByZXNlbnRlZCB3aXRoIGEgc2hhcGVmaWxlIGRvd25sb2FkZWQgZnJvbSBOWUMgT3BlbiBEYXRhLiAKVGhlIGRhdGEgaXMgZnJvbSB0aGUgMjAyMCBkZWNlbm5pYWwuIFRoaXMgZGF0YSBpbmNsdWRlczoKCipUaGUgdG90YWwgcG9wdWxhdGlvbgoqVGhlIG51bWJlciBvZiBwZW9wbGUgd2hvIGFyZSBoaXNwYW5pYyBvciBsYXRpbm8KKlRoZSBudW1iZXIgb2YgcGVvcGxlIHdobyBhcmUgQmxhY2sKKlRoZSBudW1iZXIgb2YgcGVvcGxlIHdobyBhcmUgYXNpYW4KKlRoZSBudW1iZXIgb2YgcGVvcGxlIHdobyBhcmUgd2hpdGUKClRoZSBwZXJjZW50IG9mIGVhY2ggcmFjaWFsIGNhdGVnb3J5IGluIGVhY2ggdHJhY3Qgd2FzIGNhbGN1bGF0ZWQsIGFuZCB0aGUgYXJlYXMgCndpdGggbm8gcmVzaWRlbnRzIGFyZSBsZWZ0IGJsYW5rLgoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQojY3JlYXRlIHJhdyB0YWJsZQpyYWNlX05ZX3JhdyA8LSBnZXRfZGVjZW5uaWFsKGdlb2dyYXBoeT0gInRyYWN0IiwKICB2YXJpYWJsZXMgPSBjKHRvdGFsX3BvcCA9ICJQMV8wMDFOIiwKICAgICAgICAgICAgICAgIGhpc3BfbGF0aW4gPSAiUDJfMDAyTiIsCiAgICAgICAgICAgICAgICBibGFja19hbG9uZSA9ICJQMV8wMDROIiwKICAgICAgICAgICAgICAgIGFzaWFuX2Fsb25lID0gIlAxXzAwNk4iLAogICAgICAgICAgICAgICAgd2hpdGVfYWxvbmUgPSAiUDFfMDAzTiIpLAogIHllYXIgPSAyMDIwLAogIHN0YXRlID0gIk5ZIiwKICBjb3VudHkgPSBjKCJLaW5ncyIsIk5ldyBZb3JrIiwiQnJvbngiLCJRdWVlbnMiLCJSaWNobW9uZCIpLAogIGdlb21ldHJ5ID0gVCwKICBvdXRwdXQgPSAid2lkZSIpCgojTWFraW5nIHRoZSBkYXRhIHByZXR0eQpyYWNlX05ZIDwtIHJhY2VfTllfcmF3fD4KICBtdXRhdGUocGVyY2VudF9oaXNwX2xhdGluID0gaGlzcF9sYXRpbi90b3RhbF9wb3AsCiAgICAgICAgIHBlcmNlbnRfYmxhY2sgPSBibGFja19hbG9uZS90b3RhbF9wb3AsCiAgICAgICAgIHBlcmNlbnRfYXNpYW4gPSBhc2lhbl9hbG9uZS90b3RhbF9wb3AsCiAgICAgICAgIHBlcmNlbnRfd2hpdGUgPSB3aGl0ZV9hbG9uZS90b3RhbF9wb3ApfD4KICBzZWxlY3QoR0VPSUQsIE5BTUUsIHRvdGFsX3BvcCwgcGVyY2VudF9oaXNwX2xhdGluLCBwZXJjZW50X2JsYWNrLCBwZXJjZW50X2FzaWFuLCAKICAgICAgICAgcGVyY2VudF93aGl0ZSwgZ2VvbWV0cnkpCgojIyBpbXBvcnQgYm9yb3VnaCBzaGFwZWZpbGVzIGZyb20gTllDIE9wZW4gRGF0YQpib3JvcyA8LSBzdF9yZWFkKCJ+L0Rlc2t0b3AvU3R1ZmYgJiBUaGluZ3MvU2Nob29sL0dyYWQgU2Nob29sL0RVRSBNZXRob2RzIDEvcGFydDIvZGF0YS9yYXcvZ2VvL0Jvcm91Z2ggQm91bmRhcmllcy5nZW9qc29uIikKCmBgYAoKCiMjI1Jlc3VsdHMKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IHJhY2VfTlksIG1hcHBpbmcgPSBhZXMoZmlsbCA9IHBlcmNlbnRfaGlzcF9sYXRpbikpICArIAogIGdlb21fc2YoY29sb3IgPSAiI2ZmZiIpICsKICB0aGVtZV92b2lkKCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKGJyZWFrcz1jKDAsIC4yMCwgLjQwLCAuNjAsIC44MCwgMS4wMCksCiAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJZbE9yUmQiLAogICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAidHJhbnNwYXJlbnQiLAogICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IlBlcmNlbnQgSGlzcGFuaWMgb3IgTGF0aW5vIiwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM9cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxTCkpICsKICBsYWJzKAogICAgdGl0bGUgPSAiSGlzcGFuaWMgb3IgTGF0aW5vIFBvcHVsYXRpb24gaW4gTllDIiwKICAgIGNhcHRpb24gPSAiU291cmNlOiBEZWNlbm5pYWwsIDIwMjAiKSsgCiAgZ2VvbV9zZihkYXRhID0gYm9yb3MgfD4gZmlsdGVyKGJvcm9fbmFtZSA9PSAiQnJvb2tseW4iKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KSsKICBnZW9tX3NmKGRhdGEgPSBib3JvcyB8PiBmaWx0ZXIoYm9yb19uYW1lID09ICJNYW5oYXR0YW4iKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KSsKICBnZW9tX3NmKGRhdGEgPSBib3JvcyB8PiBmaWx0ZXIoYm9yb19uYW1lID09ICJCcm9ueCIpLCAKICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9IE5BLCBsd2QgPSAuMjUpKwogIGdlb21fc2YoZGF0YSA9IGJvcm9zIHw+IGZpbHRlcihib3JvX25hbWUgPT0gIlN0YXRlbiBJc2xhbmQiKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KSsKICBnZW9tX3NmKGRhdGEgPSBib3JvcyB8PiBmaWx0ZXIoYm9yb19uYW1lID09ICJRdWVlbnMiKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KQoKYGBgCgpUaGUgbWFwIGFib3ZlIHNob3dzIHRoYXQgdGhlcmUgYXJlIGxhcmdlIGNvbmNlbnRyYXRpb25zIG9mIEhpc3BhbmljIGFuZCBMYXRpbm8gcG9wdWxhdGlvbnMgCmluIHRoZSBTb3V0aCBCcm9ueCwgQnVzaHdpY2ssIEJyb3duc3ZpbGxlIGFuZCBDeXBydXMgSGlsbHMuCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSByYWNlX05ZLCBtYXBwaW5nID0gYWVzKGZpbGwgPSBwZXJjZW50X2JsYWNrKSkgICsgCiAgZ2VvbV9zZihjb2xvciA9ICIjZmZmIikgKwogIHRoZW1lX3ZvaWQoKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIoYnJlYWtzPWMoMCwgLjIwLCAuNDAsIC42MCwgLjgwLCAxLjAwKSwKICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gIlJkUHUiLAogICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAidHJhbnNwYXJlbnQiLAogICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IlBlcmNlbnQgQmxhY2siLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscz1wZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDFMKSkgKwogIGxhYnMoCiAgICB0aXRsZSA9ICJCbGFjayBQb3B1bGF0aW9uIGluIE5ZQyIsCiAgICBjYXB0aW9uID0gIlNvdXJjZTogRGVjZW5uaWFsLCAyMDIwIikrIAogIGdlb21fc2YoZGF0YSA9IGJvcm9zIHw+IGZpbHRlcihib3JvX25hbWUgPT0gIkJyb29rbHluIiksIAogICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gTkEsIGx3ZCA9IC4yNSkrCiAgZ2VvbV9zZihkYXRhID0gYm9yb3MgfD4gZmlsdGVyKGJvcm9fbmFtZSA9PSAiTWFuaGF0dGFuIiksIAogICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gTkEsIGx3ZCA9IC4yNSkrCiAgZ2VvbV9zZihkYXRhID0gYm9yb3MgfD4gZmlsdGVyKGJvcm9fbmFtZSA9PSAiQnJvbngiKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KSsKICBnZW9tX3NmKGRhdGEgPSBib3JvcyB8PiBmaWx0ZXIoYm9yb19uYW1lID09ICJTdGF0ZW4gSXNsYW5kIiksIAogICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gTkEsIGx3ZCA9IC4yNSkrCiAgZ2VvbV9zZihkYXRhID0gYm9yb3MgfD4gZmlsdGVyKGJvcm9fbmFtZSA9PSAiUXVlZW5zIiksIAogICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gTkEsIGx3ZCA9IC4yNSkKYGBgClRoaXMgbWFwIHNob3dzIGhpZ2hlciBjb25jZW50cmF0aW9ucyBvZiBCbGFjayBwb3B1bGF0aW9ucyBpbiBOb3J0aCBCcm9ueCwgRWFzdCBRdWVlbnMgYW5kIE5vcnRoIEJyb29rbHluLgoKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IHJhY2VfTlksIG1hcHBpbmcgPSBhZXMoZmlsbCA9IHBlcmNlbnRfYXNpYW4pKSAgKyAKICBnZW9tX3NmKGNvbG9yID0gIiNmZmYiKSArCiAgdGhlbWVfdm9pZCgpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihicmVha3M9YygwLCAuMjAsIC40MCwgLjYwLCAuODAsIDEuMDApLAogICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAiWWxHbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gMSwKICAgICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJ0cmFuc3BhcmVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iUGVyY2VudCBBc2lhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzPXBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5ID0gMUwpKSArCiAgbGFicygKICAgIHRpdGxlID0gIkFzaWFuIFBvcHVsYXRpb24gaW4gTllDIiwKICAgIGNhcHRpb24gPSAiU291cmNlOiBEZWNlbm5pYWwsIDIwMjAiKSsgCiAgZ2VvbV9zZihkYXRhID0gYm9yb3MgfD4gZmlsdGVyKGJvcm9fbmFtZSA9PSAiQnJvb2tseW4iKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KSsKICBnZW9tX3NmKGRhdGEgPSBib3JvcyB8PiBmaWx0ZXIoYm9yb19uYW1lID09ICJNYW5oYXR0YW4iKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KSsKICBnZW9tX3NmKGRhdGEgPSBib3JvcyB8PiBmaWx0ZXIoYm9yb19uYW1lID09ICJCcm9ueCIpLCAKICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9IE5BLCBsd2QgPSAuMjUpKwogIGdlb21fc2YoZGF0YSA9IGJvcm9zIHw+IGZpbHRlcihib3JvX25hbWUgPT0gIlN0YXRlbiBJc2xhbmQiKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KSsKICBnZW9tX3NmKGRhdGEgPSBib3JvcyB8PiBmaWx0ZXIoYm9yb19uYW1lID09ICJRdWVlbnMiKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KQpgYGAKClRoaXMgbWFwIHNob3dzIHRoYXQgdGhlIGhpZ2hlc3QgY29uY2VudHJhdGlvbiBvZiB0aGUgYXNpYW4gcG9wdWxhdGlvbiBpcyBpbiBOb3J0aCBRdWVlbnMgYW5kIFNvdXRoIEJyb29rbHluLgoKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IHJhY2VfTlksIG1hcHBpbmcgPSBhZXMoZmlsbCA9IHBlcmNlbnRfd2hpdGUpKSAgKyAKICBnZW9tX3NmKGNvbG9yID0gIiNmZmYiKSArCiAgdGhlbWVfdm9pZCgpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihicmVha3M9YygwLCAuMjAsIC40MCwgLjYwLCAuODAsIDEuMDApLAogICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAiQmx1ZXMiLAogICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAidHJhbnNwYXJlbnQiLAogICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IlBlcmNlbnQgV2hpdGUiLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscz1wZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDFMKSkgKwogIGxhYnMoCiAgICB0aXRsZSA9ICJXaGl0ZSBQb3B1bGF0aW9uIGluIE5ZQyIsCiAgICBjYXB0aW9uID0gIlNvdXJjZTogRGVjZW5uaWFsLCAyMDIwIikrIAogIGdlb21fc2YoZGF0YSA9IGJvcm9zIHw+IGZpbHRlcihib3JvX25hbWUgPT0gIkJyb29rbHluIiksIAogICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gTkEsIGx3ZCA9IC4yNSkrCiAgZ2VvbV9zZihkYXRhID0gYm9yb3MgfD4gZmlsdGVyKGJvcm9fbmFtZSA9PSAiTWFuaGF0dGFuIiksIAogICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gTkEsIGx3ZCA9IC4yNSkrCiAgZ2VvbV9zZihkYXRhID0gYm9yb3MgfD4gZmlsdGVyKGJvcm9fbmFtZSA9PSAiQnJvbngiKSwgCiAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSBOQSwgbHdkID0gLjI1KSsKICBnZW9tX3NmKGRhdGEgPSBib3JvcyB8PiBmaWx0ZXIoYm9yb19uYW1lID09ICJTdGF0ZW4gSXNsYW5kIiksIAogICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gTkEsIGx3ZCA9IC4yNSkrCiAgZ2VvbV9zZihkYXRhID0gYm9yb3MgfD4gZmlsdGVyKGJvcm9fbmFtZSA9PSAiUXVlZW5zIiksIAogICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gTkEsIGx3ZCA9IC4yNSkKYGBgCgpUaGlzIG1hcCBzaG93cyB0aGF0IHRoZSB3aGl0ZSBwb3B1bGF0aW9uIGlzIGFsbCBhY3Jvc3MgTmV3IFlvcmsgQ2l0eSwgYnV0IHRlbmQgdG8gYXZvaWQgTm9ydGhlYXN0IEJyb29rbHluLCBFYXN0IFF1ZWVucyBhbmQgdGhlIEJyb254LiAK