General Issues

1. Evaluate a Visualization

The Vox visualization attracted some attention in the internet; some examples:

Analysis of the visualization:

A goal of the visualization is to show the discrepancy between the relative amounts raised and the relative numbers of deaths. This relation is communicated by matching the positions or sizes of the corresponding circles by color, a weaker channel.

One good alternative, used in one of the links above, is a scatter plot:

Other options:

There are issues with the data; some of these are discussed in the articles linked to above.

2. EPA Fuel Economy Data

library(lubridate)
library(readr)
if (! file.exists("vehicles.csv.zip") ||
    file.mtime("vehicles.csv.zip") + months(6) < now())
    download.file("http://www.stat.uiowa.edu/~luke/data/vehicles.csv.zip",
                  "vehicles.csv.zip")
newmpg <- read_csv("vehicles.csv.zip", guess_max = 100000)

From the documentation for the data the appropriate variables seem to be:

The primary fuel type counts are

library(dplyr)
tbl <- count(newmpg, fuelType1)
kbl <- knitr::kable(tbl, format = "html")
kableExtra::kable_styling(kbl, full_width = FALSE)
fuelType1 n
Diesel 1274
Electricity 649
Midgrade Gasoline 162
Natural Gas 60
Premium Gasoline 14655
Regular Gasoline 30275

A bar chart of these numbers:

thm <- theme_minimal() + theme(text = element_text(size = 16))
ggplot(tbl, aes(x = n, y = reorder(fuelType1, n))) +
    geom_col() +
    scale_x_continuous(expand = expansion(mult = c(0, .1))) +
    thm +
    ylab(NULL)

Regular gas is the dominant fuel type over all years, with premium second. All other fuel types, including electricity, make up a small fraction.

3. Fuel Type Over the Years

A filled bar chart shows changes in the primary fuel type used over the years:

newmpg2 <- filter(newmpg, year <= 2023) |>
    mutate(year = factor(year))
ggplot(newmpg2, aes(y = year, fill = fuelType1)) +
    geom_bar(position = "fill") +
    scale_x_continuous(expand = c(0, 0)) +
    labs(x = "Proportion", y = NULL)

Regular gas was the predominant fuel type in the mid 1980s, but premium’s share has gradually increased to the point where almost as many models use premium as regular. Diesel’s popularity declined early and had a small resurgence recently. The market share for electricity is still quite small but is growing.

4. Highway Fuel Economy Over the Years

newmpg3 <- filter(newmpg, year <= 2023, year >= 2000) |>
    mutate(year = factor(year))
alpha <- 0.2
size <- 0.3
nyear <- length(levels(newmpg3$year))

A strip chart is a useful way to look at the full data for a numeric variable at several different levels of a discrete variable, but some tuning is needed for larger data sets. For examining 24 years of highway gas mileage data from the EPA data set using alpha = 0.2 and size = 0.3 along with jittering seems to work reasonably well:

ggplot(newmpg3, aes(x = highway08, y = year)) +
    geom_point(position = "jitter", size = size, alpha = alpha) +
    ylab(NULL) +
    thm

Over time the highway gas mileage distributions are moving upward a little bit, with the upper tails becoming gradually longer and an increasing number of very high efficiency models (mostly electric).

LS0tCnRpdGxlOiAiQXNzaWdubWVudCA0IE5vdGVzIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6ICJoaWRlIgotLS0KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChjb2xsYXBzZSA9IFRSVUUsIGZpZy5hbGlnbiA9ICJjZW50ZXIiKQpgYGAKCiMjIEdlbmVyYWwgSXNzdWVzCgoqIE1ha2Ugc3VyZSB5b3UgbmFtZSB5b3VyIGZpbGVzIGFzIHJlcXVlc3RlZCwgaW5jbHVkaW5nIG1hdGNoaW5nIHRoZQogIHNwZWNpZmllZCB1c2Ugb2YgdXBwZXIgYW5kIGxvd2VyIGNhc2UuIFRoaXMgbWF0dGVycyBvbiBmaWxlIHN5c3RlbXMKICB0aGF0IGFyZSBjYXNlLXNlbnNpdGl2ZS4KCiogTWFrZSBzdXJlIHRvIGNvbW1pdCB5b3VyIHdvcmsgdG8geW91ciBsb2NhbCByZXBvc2l0b3J5IGFuZCBwdXNoIHlvdXIKICBjb21taXRzIHRvIEdpdExhYi4gV2UgY2FuIG9ubHkgc2VlIHdoYXQgaXMgb24gR2l0TGFiLCBub3Qgd2hhdCBpcyBvbgogIHlvdXIgY29tcHV0ZXIuIFlvdSBjYW4gY2hlY2sgd2hhdCB3ZSBzZWUgYnkgZ29pbmcgdG8gdGhlIEdpdExhYiB3ZWIKICBpbnRlcmZhY2UuCiAKKiBJbmNsdWRlIHlvdXIgbmFtZSBhbmQgdGhlIGRhdGUgaW4gdGhlIGhlYWRlciBvZiB5b3VyIGAuUm1kYCBmaWxlCiAgdXNpbmcgYGF1dGhvcjpgIGFuZCBgZGF0ZTpgIHRhZ3MuCgoqIFlvdXIgSFRNTCBmaWxlIHNob3VsZCBiZSBhIHJlcG9ydCBvZiB5b3VyIGZpbmRpbmdzLgoKICAgICogQW55IGdyYXBoIHlvdSBzaG93IHNob3VsZCBiZSBkaXNjdXNzZWQgaW4geW91ciBuYXJyYXRpdmUuCgogICAgKiBBbnkgY29kZSB5b3Ugc2hvdyBzaG91bGQgYmUgZGlzY3Vzc2VkIGluIHlvdXIgbmFycmF0aXZlLgoKICAgICogSWYgeW91IGRvIG5vdCBuZWVkIHRvIGRpc2N1c3MgYSBwaWVjZSBvZiBjb2RlIGluIHRoZSBuYXJyYXRpdmUsCiAgICAgIHVzZSBgZWNobyBGQUxTRWAgdG8gYXZvaWQgc2hvd2luZyBpdC4KCiogSWYgeW91IGxvYWQgYSBmaWxlIHRoYXQgeW91IGhhdmUgaW5jbHVkZWQgaW4geW91ciByZXBvc2l0b3J5IG9yIHRoYXQKICB5b3UgZG93bmxvYWQgdG8geW91ciByZXBvc2l0b3J5IHRoZW4geW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlCiAgaW4geW91ciBSbWFya2Rvd24gZG9jdW1lbnQgdXNlcyBhIHJlbGF0aXZlIHBhdGgsIG5vdCBhbiBhYnNvbHV0ZQogIG9uZS4gIEFic29sdXRlIHBhdGhzIHdpbGwgb25seSBtYWtlIHNlbnNlIG9uIHlvdXIgY29tcHV0ZXIsIG5vdCBvbgogIHRoZSBjb21wdXRlciBvZiBzb21lb25lIGVsc2Ugd2hvIGRvd25sb2FkcyB5b3VyIHJlcG9zaXRvcnkuCgoqIElmIHlvdSB3YW50IHRvIGNoZWNrIHlvdXIgd29yayBpcyByZXByb2R1Y2libGUgeW91IGNhbiBkb3dubG9hZCB5b3VyCiAgd29yayB0byBhIGNvbXB1dGVyIG90aGVyIHRoYW4gdGhlIG9uZSB5b3UgdXNlIGZvciBkZXZlbG9waW5nIGl0LgogIE9uZSBvcHRpb24gaXMgdGhlIENMQVMgTGludXggc3lzdGVtcyBhY2Nlc3NlZCB2aWEKICBbRmFzdFhdKGh0dHBzOi8vbGludXguY2xhcy51aW93YS5lZHUvaGVscC9mYXN0eCkuIFlvdSBjYW4gdXNlCiAgUlN0dWRpbyB0aGVyZSB0byBzZXQgdXAgYSBjbGVhbiBjb3B5IG9mIHlvdXIgcmVwb3NpdG9yeSBhbmQgdGhlbgogIGp1c3QgcHVsbCB5b3VyIGNoYW5nZXMgYW5kIGNoZWNrIHRoYXQgdGhleSBrbml0IHN1Y2Nlc3NmdWxseS4KICBVc2luZyBgU1RBVDQ1ODA6OmNoZWNrSFdgIGlzIGEgY29udmVuaWVudCB3YXkgdG8gZG8gdGhpcy4KCgojIyAxLiBFdmFsdWF0ZSBhIFZpc3VhbGl6YXRpb24KClRoZSBWb3ggdmlzdWFsaXphdGlvbiBhdHRyYWN0ZWQgc29tZSBhdHRlbnRpb24gaW4gdGhlIGludGVybmV0OyBzb21lCmV4YW1wbGVzOgoKLSBBIFtwb3N0XShodHRwczovL3d3dy5pZmxzY2llbmNlLmNvbS9pbmZvZ3JhcGhpYy1zaG93cy1kaWZmZXJlbmNlcy1iZXR3ZWVuLWRpc2Vhc2VzLXdlLWRvbmF0ZS1hbmQtZGlzZWFzZXMta2lsbC11cy0yNTQ4OSkKICBvbiA8aHR0cHM6Ly93d3cuaWZsc2NpZW5jZS5jb20vPi4KCi0gQSBbcG9zdF0oaHR0cHM6Ly9ub25wcm9maXRxdWFydGVybHkub3JnLzIwMTQvMDkvMDUvaW5mb2dyYXBoaWMtY29tcGFyZXMtZG9uYXRpb25zLXRvLWRpc2Vhc2UtYW5kLWZpbmRzLWJpZy1kaXNwYXJpdGllcy8pCiAgb24gPGh0dHBzOi8vbm9ucHJvZml0cXVhcnRlcmx5Lm9yZz4gd2l0aCBhIGxpbmsgdG8gb25lIFthbHRlcm5hdGl2ZQogIHZpc3VhbGl6YXRpb25dKGh0dHA6Ly90aGVtZW5kb3phbGluZS5vcmcvcG9zdC85NTc1NzY3NDM4MS90aGlzLWJ1YmJsZS1jaGFydC1pcy1raWxsaW5nLW1lKS4KCi0gQW5vdGhlciBbYWx0ZXJuYXRpdmUgdmlzdWFsaXphdGlvbl0oPGh0dHA6Ly93d3cudmlzdWFsbWFnbmV0aWMuY29tL3BvcnRmb2xpby9kb25hdGlvbnMtdnMtZGVhdGhzLXdoZXJlLXNob3VsZC1vdXItbW9uZXktZ28vPikuCgotIFRoZSBbb3JpZ2luYWwgdmlzdWFsaXphdGlvbl0oaW1nL29yaWctdm94LWNoYXJ0LmpwZykgbWFkZSB0aGUgdmVyeQogIGNvbW1vbiBtaXN0YWtlIG9mIG1hcHBpbmcgbWFnbml0dWRlcyB0byBjaXJjbGUgcmFkaXVzLCB3aGljaAogIGRpc3RvcnRzIHRoZSBwZXJjZWl2ZWQgbWFnbml0dWRlcyBzaW5jZSBwZXJjZXB0aW9uIGZvY3VzZXMgb24KICBhcmVhLiBUaGUgbWFpbiBjaGFuZ2UgaW4gdGhlIHJldmlzaW9uIGlzIHRvIG1hcCBtYWduaXR1ZGUgdG8gYXJlYS4KCi0gVGhlIHJldmlzaW9uIGFsc28gY2hhbmdlZCBzb21lIGNvbG9yIGFzc2lnbm1lbnRzLCBidXQga2VwdCB0aGUKICB0cmFkaXRpb25hbCBhc3NpZ25tZW50IG9mIHBpbmsgZm9yIEJyZWFzdCBDYW5jZXIuCgpBbmFseXNpcyBvZiB0aGUgdmlzdWFsaXphdGlvbjoKCi0gSXRlbXM6IGRpc2Vhc2VzIGFuZCBhc3NvY2lhdGVkIG1lYXN1cmVtZW50cy4KCi0gQXR0cmlidXRlczogZGlzZWFzZSwgbW9uZXkgcmFpc2VkOyBkZWF0aHMuCgotIE1hcmtzOiBjaXJjbGVzLCB0ZXh0LgoKLSBDaGFubmVsczogdmVydGljYWwgcG9zaXRpb24sIGFyZWEsIGNvbG9yIChodWUpLCB0ZXh0LgoKLSBNYXBwaW5nczoKCiAgICAqIFJhbmtzIHdpdGhpbiB0aGUgbnVtZXJpYyB2YXJpYWJsZXMgYXJlIG1hcHBlZCB0byB2ZXJ0aWNhbCBwb3NpdGlvbi4KCiAgICAqIE1hZ25pdHVkZXMgb2YgbnVtZXJpYyB2YXJpYWJsZXMgYXJlIG1hcHBlZCB0byBjaXJjbGUgYXJlYXMuCgogICAgKiBNYWduaXR1ZGVzIGFyZSBhbHNvIG1hcHBlZCB0byB0ZXh0IGxhYmVscy4KCiAgICAqIERpc2Vhc2UgaXMgbWFwcGVkIHRvIGNvbG9yIChodWUpLgoKQSBnb2FsIG9mIHRoZSB2aXN1YWxpemF0aW9uIGlzIHRvIHNob3cgdGhlIGRpc2NyZXBhbmN5IGJldHdlZW4gdGhlCnJlbGF0aXZlIGFtb3VudHMgcmFpc2VkIGFuZCB0aGUgcmVsYXRpdmUgbnVtYmVycyBvZiBkZWF0aHMuICBUaGlzCnJlbGF0aW9uIGlzIGNvbW11bmljYXRlZCBieSBtYXRjaGluZyB0aGUgcG9zaXRpb25zIG9yIHNpemVzIG9mIHRoZQpjb3JyZXNwb25kaW5nIGNpcmNsZXMgYnkgY29sb3IsIGEgd2Vha2VyIGNoYW5uZWwuCgpPbmUgZ29vZCBhbHRlcm5hdGl2ZSwgdXNlZCBpbiBvbmUgb2YgdGhlIGxpbmtzIGFib3ZlLCBpcyBhIHNjYXR0ZXIgcGxvdDoKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmxpYnJhcnkoZ2dwbG90MikKaWYgKCEgZmlsZS5leGlzdHMoImRmdW5kcy5jc3YiKSkKICAgIGRvd25sb2FkLmZpbGUoImh0dHBzOi8vc3RhdC51aW93YS5lZHUvfmx1a2UvZGF0YS9kZnVuZHMuY3N2IiwKICAgICAgICAgICAgICAgICAgImRmdW5kcy5jc3YiKQpkZnVuZHMgPC0gcmVhZC5jc3YoImRmdW5kcy5jc3YiKQpnZ3Bsb3QoZGZ1bmRzLCBhZXMoeCA9IERlYXRocywgeSA9IEZ1bmRpbmcsIGNvbG9yID0gRGlzZWFzZSkpICsKICAgIGdlb21fcG9pbnQoc2l6ZSA9IDQpCmBgYAoKT3RoZXIgb3B0aW9uczoKCi0gYSBUdWZ0ZS1zdHlsZSBzbG9wZSBncmFwaCB1c2luZyBzdGFuZGFyZGl6ZWQgdmFyaWFibGVzIG9yIHJhbmtzCiAgKGVzc2VudGlhbGx5IGEgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdDsgdXNlZCBpbiBhbm90aGVyIG9mIHRoZQogIGxpbmtzIGFib3ZlKTsKCi0gdmlzdWFsaXppbmcgYSBkZXJpdmVkIHZhcmlhYmxlLCBzdWNoIGFzIGZ1bmRzIHBlciBkZWF0aC4KClRoZXJlIGFyZSBpc3N1ZXMgd2l0aCB0aGUgZGF0YTsgc29tZSBvZiB0aGVzZSBhcmUgZGlzY3Vzc2VkIGluIHRoZQphcnRpY2xlcyBsaW5rZWQgdG8gYWJvdmUuCgoKIyMgMi4gRVBBIEZ1ZWwgRWNvbm9teSBEYXRhCgpgYGB7ciwgbWVzc2FnZSA9IEZBTFNFfQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShyZWFkcikKaWYgKCEgZmlsZS5leGlzdHMoInZlaGljbGVzLmNzdi56aXAiKSB8fAogICAgZmlsZS5tdGltZSgidmVoaWNsZXMuY3N2LnppcCIpICsgbW9udGhzKDYpIDwgbm93KCkpCiAgICBkb3dubG9hZC5maWxlKCJodHRwOi8vd3d3LnN0YXQudWlvd2EuZWR1L35sdWtlL2RhdGEvdmVoaWNsZXMuY3N2LnppcCIsCiAgICAgICAgICAgICAgICAgICJ2ZWhpY2xlcy5jc3YuemlwIikKbmV3bXBnIDwtIHJlYWRfY3N2KCJ2ZWhpY2xlcy5jc3YuemlwIiwgZ3Vlc3NfbWF4ID0gMTAwMDAwKQpgYGAKCkZyb20gdGhlIFtkb2N1bWVudGF0aW9uIGZvciB0aGUKZGF0YV0oaHR0cHM6Ly93d3cuZnVlbGVjb25vbXkuZ292L2ZlZy93cy9pbmRleC5zaHRtbCN2ZWhpY2xlKSB0aGUKYXBwcm9wcmlhdGUgdmFyaWFibGVzIHNlZW0gdG8gYmU6CgogICogYGZ1ZWxUeXBlMWAgcmVwcmVzZW50cyB0aGUgcHJpbWFyeSBmdWVsIHR5cGUsIGBmbGAgaW4gYG1wZ2AuCiAgKiBgaGlnaHdheTA4YCBjb3JyZXNwb25kcyB0byBgaHd5YCBpbiBgbXBnYDsKICAqIGBjeWxpbmRlcnNgIGNvcnJlc3BvbmRzIHRvIGBjeWxgIGluIGBtcGdgOwogICogYGRpc3BsYCBjb3JyZXNwb25kcyB0byBgZGlzcGxgIGluIGBtcGdgOwoKVGhlIHByaW1hcnkgZnVlbCB0eXBlIGNvdW50cyBhcmUKCmBgYHtyLCBtZXNzYWdlID0gRkFMU0V9CmxpYnJhcnkoZHBseXIpCnRibCA8LSBjb3VudChuZXdtcGcsIGZ1ZWxUeXBlMSkKa2JsIDwtIGtuaXRyOjprYWJsZSh0YmwsIGZvcm1hdCA9ICJodG1sIikKa2FibGVFeHRyYTo6a2FibGVfc3R5bGluZyhrYmwsIGZ1bGxfd2lkdGggPSBGQUxTRSkKYGBgCgpBIGJhciBjaGFydCBvZiB0aGVzZSBudW1iZXJzOgoKYGBge3J9CnRobSA8LSB0aGVtZV9taW5pbWFsKCkgKyB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNikpCmdncGxvdCh0YmwsIGFlcyh4ID0gbiwgeSA9IHJlb3JkZXIoZnVlbFR5cGUxLCBuKSkpICsKICAgIGdlb21fY29sKCkgKwogICAgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gYygwLCAuMSkpKSArCiAgICB0aG0gKwogICAgeWxhYihOVUxMKQpgYGAKClJlZ3VsYXIgZ2FzIGlzIHRoZSBkb21pbmFudCBmdWVsIHR5cGUgb3ZlciBhbGwgeWVhcnMsIHdpdGggcHJlbWl1bSBzZWNvbmQuCkFsbCBvdGhlciBmdWVsIHR5cGVzLCBpbmNsdWRpbmcgZWxlY3RyaWNpdHksIG1ha2UgdXAgYSBzbWFsbCBmcmFjdGlvbi4KCgojIyAzLiBGdWVsIFR5cGUgT3ZlciB0aGUgWWVhcnMKCkEgZmlsbGVkIGJhciBjaGFydCBzaG93cyBjaGFuZ2VzIGluIHRoZSBwcmltYXJ5IGZ1ZWwgdHlwZSB1c2VkIG92ZXIKdGhlIHllYXJzOgogIApgYGB7cn0KbmV3bXBnMiA8LSBmaWx0ZXIobmV3bXBnLCB5ZWFyIDw9IDIwMjMpIHw+CiAgICBtdXRhdGUoeWVhciA9IGZhY3Rvcih5ZWFyKSkKZ2dwbG90KG5ld21wZzIsIGFlcyh5ID0geWVhciwgZmlsbCA9IGZ1ZWxUeXBlMSkpICsKICAgIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArCiAgICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwKSkgKwogICAgbGFicyh4ID0gIlByb3BvcnRpb24iLCB5ID0gTlVMTCkKYGBgCgpSZWd1bGFyIGdhcyB3YXMgdGhlIHByZWRvbWluYW50IGZ1ZWwgdHlwZSBpbiB0aGUgbWlkIDE5ODBzLCBidXQKcHJlbWl1bSdzIHNoYXJlIGhhcyBncmFkdWFsbHkgaW5jcmVhc2VkIHRvIHRoZSBwb2ludCB3aGVyZSBhbG1vc3QgYXMKbWFueSBtb2RlbHMgdXNlIHByZW1pdW0gYXMgcmVndWxhci4gRGllc2VsJ3MgcG9wdWxhcml0eSBkZWNsaW5lZCBlYXJseQphbmQgaGFkIGEgc21hbGwgcmVzdXJnZW5jZSByZWNlbnRseS4gVGhlIG1hcmtldCBzaGFyZSBmb3IgZWxlY3RyaWNpdHkKaXMgc3RpbGwgcXVpdGUgc21hbGwgYnV0IGlzIGdyb3dpbmcuCgoKIyMgNC4gSGlnaHdheSBGdWVsIEVjb25vbXkgT3ZlciB0aGUgWWVhcnMKCmBgYHtyfQpuZXdtcGczIDwtIGZpbHRlcihuZXdtcGcsIHllYXIgPD0gMjAyMywgeWVhciA+PSAyMDAwKSB8PgogICAgbXV0YXRlKHllYXIgPSBmYWN0b3IoeWVhcikpCmFscGhhIDwtIDAuMgpzaXplIDwtIDAuMwpueWVhciA8LSBsZW5ndGgobGV2ZWxzKG5ld21wZzMkeWVhcikpCmBgYAoKQSBzdHJpcCBjaGFydCBpcyBhIHVzZWZ1bCB3YXkgdG8gbG9vayBhdCB0aGUgZnVsbCBkYXRhIGZvciBhIG51bWVyaWMKdmFyaWFibGUgYXQgc2V2ZXJhbCBkaWZmZXJlbnQgbGV2ZWxzIG9mIGEgZGlzY3JldGUgdmFyaWFibGUsIGJ1dCBzb21lCnR1bmluZyBpcyBuZWVkZWQgZm9yIGxhcmdlciBkYXRhIHNldHMuIEZvciBleGFtaW5pbmcgYHIgbnllYXJgIHllYXJzIG9mCmhpZ2h3YXkgZ2FzIG1pbGVhZ2UgZGF0YSBmcm9tIHRoZSBFUEEgZGF0YSBzZXQgdXNpbmcKYGFscGhhYCA9IGByIGFscGhhYCBhbmQgYHNpemVgID0gYHIgc2l6ZWAgYWxvbmcgd2l0aCBqaXR0ZXJpbmcgc2VlbXMgdG8Kd29yayByZWFzb25hYmx5IHdlbGw6CgpgYGB7cn0KZ2dwbG90KG5ld21wZzMsIGFlcyh4ID0gaGlnaHdheTA4LCB5ID0geWVhcikpICsKICAgIGdlb21fcG9pbnQocG9zaXRpb24gPSAiaml0dGVyIiwgc2l6ZSA9IHNpemUsIGFscGhhID0gYWxwaGEpICsKICAgIHlsYWIoTlVMTCkgKwogICAgdGhtCmBgYAoKT3ZlciB0aW1lIHRoZSBoaWdod2F5IGdhcyBtaWxlYWdlIGRpc3RyaWJ1dGlvbnMgYXJlIG1vdmluZyB1cHdhcmQKYSBsaXR0bGUgYml0LCB3aXRoIHRoZSB1cHBlciB0YWlscyBiZWNvbWluZyBncmFkdWFsbHkgbG9uZ2VyIGFuZCBhbgppbmNyZWFzaW5nIG51bWJlciBvZiB2ZXJ5IGhpZ2ggZWZmaWNpZW5jeSBtb2RlbHMgKG1vc3RseSBlbGVjdHJpYykuCgo8IS0tCkxvY2FsIFZhcmlhYmxlczogCm1vZGU6IHBvbHktbWFya2Rvd24rUgptb2RlOiBmbHlzcGVsbApFbmQ6Ci0tPgo=