Set-up: installing and loading all necessary packages and library, then establishing the file path and importing the data frame
Visualization 1 & 2: For the first and second visualization, I decided to create a line chart and a density plot. The line chart was created using the geom_boxplot() function (I didn’t do anything to further transform the plot but it only shows lines instead of the whole boxplot. It looked good and it communicated my point better. I guess sometimes R “breaks” in favor of the user). The resulting viz highlighted the price ranges for the respective room types. From viz1, it seems like there is some disparity between rent prices of the three different room types.This is where the gap instinct comes in, the gap between the lines make it seem like there is little to no overlap and that the prices are drastically different.
To combat this instinct, I created a density plot that would show the ranges of each room type overlapped on top of each other. The resulting plot, viz2,clearly shows there is a significant amount of overlap between the rental prices. *after scaling the x values, some of the outliers appeared outside the plot area but the number of outliers are neglible (.000001 percent).


Visualization 3 & 4: For Viz 3 and 4, I decided to use the geom_treemap() function to create two visualizations using the same data. However, one is filtered somehwat in accordance with Dr. Rosling’s advice on how to beat the size instinct.For both treemaps, the box size is determined by the price, the fill color varies by room type, and the boxes are grouped by neighborhood. Viz3 was created using all the observations and as you can see, the huge amount of data made it really difficult to interpret the treemap and a lot of information gets lost.
I was mainly interested in seeing the neighborhoods and rental types that had the highest rents (which means they would have the biggest boxes). After multiple tries with different values, I decided that instead of looking at rooms that make up 80% of the total rent (36,000+ observations), a reasonable number of observations given this dataset and visualization type would be .08 percent (280 observations). The resulting treemap, viz4, is easier to interpet and even though there are still unrecognizable squares, the neighborhoods with the most expensive rents are easier to identify.


Visualization 5: For viz5, I decided to keep using the treemaps function but on a smaller, more comparative scale. I created 3 separate treemaps, one for each room type and I populated it using the top 10 rental prices. Scrolling through the visualizations show which areas are consistently on the high price list and which ones vary dependending on room type.
Viz5.4 takes the top 10 highest rental prices among all room types and places it all in 1 treemap.


list_clean_home <- filter(list_clean, list_clean$room.type == "Entire home/apt")
list_clean_home <- top_n(list_clean_home, 10, price)
Viz5.1 <- ggplot(list_clean_home, aes(area = price, fill = room.type, subgroup = neighborhood)) +
geom_treemap(color = "tomato4") +
geom_treemap_subgroup_border(color = "white", size = 2) +
geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 1, colour =
"white", min.size = 1) +
labs(title="Viz5.1: Entire Home Treemap") +
theme(legend.position="none")
Viz5.1
list_clean_shared <- filter(list_clean, list_clean$room.type == "Shared room")
list_clean_shared <- top_n(list_clean_shared, 10, price)
Viz5.2 <- ggplot(list_clean_shared, aes(area = price, fill = room.type, subgroup = neighborhood)) +
geom_treemap(color = "wheat4", fill = "springgreen3" ) +
geom_treemap_subgroup_border(color = "white", size = 2) +
geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 1, colour =
"white", min.size = 1) +
labs(title="Viz5.2: Shared Room Treemap") +
theme(legend.position="none")
Viz5.2
list_clean_private <- filter(list_clean, list_clean$room.type == "Private room")
list_clean_private <- top_n(list_clean_private, 10, price)
Viz5.3 <- ggplot(list_clean_private, aes(area = price, fill = room.type, subgroup = neighborhood, color = "springgreen3")) +
geom_treemap(color = "darkblue", fill = "cornflowerblue") +
geom_treemap_subgroup_border(color = "white", size = 2) +
geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 1, colour =
"white", min.size = 1) +
labs(title="Viz5.3: Private Room Treemap") +
theme(legend.position="none")
Viz5.3

list_clean_top <- top_n(list_clean, 10, price)
Viz5.4 <- ggplot(list_clean_top, aes(area = price, fill = room.type, subgroup = neighborhood)) +
geom_treemap(color = "red4") +
geom_treemap_subgroup_border(color = "white", size = 2) +
geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 1, colour =
"white", min.size = 1) +
labs(title="Viz5.1: Entire Home Treemap",
fill = "Room Type")
Viz5.4

LS0tCnRpdGxlOiAiVmlzdWFsaXppbmcgQWlyQm5CIExBIERhdGEiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICB0aGVtZTogc3BhY2VsYWIKLS0tCgpTZXQtdXA6IGluc3RhbGxpbmcgYW5kIGxvYWRpbmcgYWxsIG5lY2Vzc2FyeSBwYWNrYWdlcyBhbmQgbGlicmFyeSwgdGhlbiBlc3RhYmxpc2hpbmcgdGhlIGZpbGUgcGF0aCBhbmQgaW1wb3J0aW5nIHRoZSBkYXRhIGZyYW1lCmBgYHtyfQppbnN0YWxsLnBhY2thZ2VzKCJ0cmVlbWFwaWZ5IikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeSh1dGlscykKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWJibGUpCmxpYnJhcnkodHJlZW1hcGlmeSkKCnBhdGggPC0gZmlsZS5wYXRoICgiL1VzZXJzL2tyZ3IuZGYvRGVza3RvcC9HRU9HMjA4L0Fzc2lnbm1lbnQgMi9saXN0aW5ncy5jc3YiKQoKbGlzdCA8LSByZWFkLmNzdihwYXRoKQoKI0NsZWFuIGRhdGEKbGlzdF9jbGVhbiA8LSBzdWJzZXQobGlzdCwgc2VsZWN0ID0gIC1jKGhvc3RfaWQsIGhvc3RfbmFtZSwgbmVpZ2hib3VyaG9vZF9ncm91cCwgbWluaW11bV9uaWdodHMsIGxhc3RfcmV2aWV3LCByZXZpZXdzX3Blcl9tb250aCkpCmNvbG5hbWVzKGxpc3RfY2xlYW4pIDwtIGMoImlkIiwgImRlc2MiLCAibmVpZ2hib3Job29kIiwgImxhdCIsICJsb25nIiwgInJvb20udHlwZSIsICJwcmljZSIsICJudW0ucmV2aWV3cyIsICJsaXN0LmNvdW50IiwgImF2YWlsIikKCmhlYWQobGlzdF9jbGVhbikKYGBgCgpWaXN1YWxpemF0aW9uIDEgJiAyOiAKRm9yIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHZpc3VhbGl6YXRpb24sIEkgZGVjaWRlZCB0byBjcmVhdGUgYSBsaW5lIGNoYXJ0IGFuZCBhIGRlbnNpdHkgcGxvdC4gVGhlIGxpbmUgY2hhcnQgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGdlb21fYm94cGxvdCgpIGZ1bmN0aW9uIChJIGRpZG4ndCBkbyBhbnl0aGluZyB0byBmdXJ0aGVyIHRyYW5zZm9ybSB0aGUgcGxvdCBidXQgaXQgb25seSBzaG93cyBsaW5lcyBpbnN0ZWFkIG9mIHRoZSB3aG9sZSBib3hwbG90LiBJdCBsb29rZWQgZ29vZCBhbmQgaXQgY29tbXVuaWNhdGVkIG15IHBvaW50IGJldHRlci4gSSBndWVzcyBzb21ldGltZXMgUiAiYnJlYWtzIiBpbiBmYXZvciBvZiB0aGUgdXNlcikuIFRoZSByZXN1bHRpbmcgdml6IGhpZ2hsaWdodGVkIHRoZSBwcmljZSByYW5nZXMgZm9yIHRoZSByZXNwZWN0aXZlIHJvb20gdHlwZXMuIEZyb20gdml6MSwgaXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBzb21lIGRpc3Bhcml0eSBiZXR3ZWVuIHJlbnQgcHJpY2VzIG9mIHRoZSB0aHJlZSBkaWZmZXJlbnQgcm9vbSB0eXBlcy5UaGlzIGlzIHdoZXJlIHRoZSBnYXAgaW5zdGluY3QgY29tZXMgaW4sIHRoZSBnYXAgYmV0d2VlbiB0aGUgbGluZXMgbWFrZSBpdCBzZWVtIGxpa2UgdGhlcmUgaXMgbGl0dGxlIHRvIG5vIG92ZXJsYXAgYW5kIHRoYXQgdGhlIHByaWNlcyBhcmUgZHJhc3RpY2FsbHkgZGlmZmVyZW50LiAKClRvIGNvbWJhdCB0aGlzIGluc3RpbmN0LCBJIGNyZWF0ZWQgYSBkZW5zaXR5IHBsb3QgdGhhdCB3b3VsZCBzaG93IHRoZSByYW5nZXMgb2YgZWFjaCByb29tIHR5cGUgb3ZlcmxhcHBlZCBvbiB0b3Agb2YgZWFjaCBvdGhlci4gVGhlIHJlc3VsdGluZyBwbG90LCB2aXoyLGNsZWFybHkgc2hvd3MgdGhlcmUgaXMgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygb3ZlcmxhcCBiZXR3ZWVuIHRoZSByZW50YWwgcHJpY2VzLiAqYWZ0ZXIgc2NhbGluZyB0aGUgeCB2YWx1ZXMsIHNvbWUgb2YgdGhlIG91dGxpZXJzIGFwcGVhcmVkIG91dHNpZGUgdGhlIHBsb3QgYXJlYSBidXQgdGhlIG51bWJlciBvZiBvdXRsaWVycyBhcmUgbmVnbGlibGUgKC4wMDAwMDEgcGVyY2VudCkuIApgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjVml6MSYyIHwgR2FwIEluc3RpbmN0IyMjIyMjIyMjIyMjIyMjIyMjCnRoZW1lX3NldCh0aGVtZV9jbGFzc2ljKCkpCgojUGxvdCBsZW5ndGggb2YgZGVzY3JpcHRpb24gdnMgY29zdCBwZXIgbmlnaHQKVml6MSA8LSBnZ3Bsb3QobGlzdF9jbGVhbiwgYWVzKHggPSBwcmljZSwgeSA9IHJvb20udHlwZSwgY29sb3IgPSByb29tLnR5cGUpKSArCiAgZ2VvbV9ib3hwbG90KCkgKyAKICBsYWJzKHRpdGxlPSJWaXoxIDogQm94IFBsb3QoaXNoKSIsIAogICAgICAgc3VidGl0bGU9IlJlbnRhbCBQcmljZSB2cyBSb29tIFR5cGUiLAogICAgICAgeD0iUmVudGFsIFByaWNlIiwKICAgICAgIHk9IlJvb20gVHlwZSIpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikKVml6MQoKI1VzaW5nIGRlbnNpdHkgcGxvdCB0byBkaXNwZWxsIGdhcCBpbnN0aW5jdCwgc2NhbGluZyByZW1vdmVkIHNvbWUgdmFsdWVzIGJ1dCBvbmx5IDE4IG91dCBvZiA0Myw3NjMgKG5lZ2xpZ2libGUgYW1vdW50LCBtb3N0bHkgb3V0bGllcnMpClZpejIgPC0gZ2dwbG90KGxpc3RfY2xlYW4sIGFlcyhwcmljZSkpICsgCiAgZ2VvbV9kZW5zaXR5KGFlcyhmaWxsPWZhY3Rvcihyb29tLnR5cGUpKSwgYWxwaGE9MC44KSArCiAgc2NhbGVfeF9sb2cxMCgpICsKICBsYWJzKHRpdGxlPSJWaXoyIDogRGVuc2l0eSBwbG90IiwgCiAgICAgICBzdWJ0aXRsZT0iUmVudGFsIFByaWNlIGdyb3VwZWQgYnkgUm9vbSBUeXBlIiwKICAgICAgIHg9IlJlbnRhbCBQcmljZSIsCiAgICAgICBmaWxsPSJSb29tIFR5cGUiKQpWaXoyICAKYGBgCgpWaXN1YWxpemF0aW9uIDMgJiA0OgpGb3IgVml6IDMgYW5kIDQsIEkgZGVjaWRlZCB0byB1c2UgdGhlIGdlb21fdHJlZW1hcCgpIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0d28gdmlzdWFsaXphdGlvbnMgdXNpbmcgdGhlIHNhbWUgZGF0YS4gSG93ZXZlciwgb25lIGlzIGZpbHRlcmVkIHNvbWVod2F0IGluIGFjY29yZGFuY2Ugd2l0aCBEci4gUm9zbGluZydzIGFkdmljZSBvbiBob3cgdG8gYmVhdCB0aGUgc2l6ZSBpbnN0aW5jdC5Gb3IgYm90aCB0cmVlbWFwcywgdGhlIGJveCBzaXplIGlzIGRldGVybWluZWQgYnkgdGhlIHByaWNlLCB0aGUgZmlsbCBjb2xvciB2YXJpZXMgYnkgcm9vbSB0eXBlLCBhbmQgdGhlIGJveGVzIGFyZSBncm91cGVkIGJ5IG5laWdoYm9yaG9vZC4gVml6MyB3YXMgY3JlYXRlZCB1c2luZyBhbGwgdGhlIG9ic2VydmF0aW9ucyBhbmQgYXMgeW91IGNhbiBzZWUsIHRoZSBodWdlIGFtb3VudCBvZiBkYXRhIG1hZGUgaXQgcmVhbGx5IGRpZmZpY3VsdCB0byBpbnRlcnByZXQgdGhlIHRyZWVtYXAgYW5kIGEgbG90IG9mIGluZm9ybWF0aW9uIGdldHMgbG9zdC4KCkkgd2FzIG1haW5seSBpbnRlcmVzdGVkIGluIHNlZWluZyB0aGUgbmVpZ2hib3Job29kcyBhbmQgcmVudGFsIHR5cGVzIHRoYXQgaGFkIHRoZSBoaWdoZXN0IHJlbnRzICh3aGljaCBtZWFucyB0aGV5IHdvdWxkIGhhdmUgdGhlIGJpZ2dlc3QgYm94ZXMpLiBBZnRlciBtdWx0aXBsZSB0cmllcyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMsIEkgZGVjaWRlZCB0aGF0IGluc3RlYWQgb2YgbG9va2luZyBhdCByb29tcyB0aGF0IG1ha2UgdXAgODAlIG9mIHRoZSB0b3RhbCByZW50ICgzNiwwMDArIG9ic2VydmF0aW9ucyksIGEgcmVhc29uYWJsZSBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zIGdpdmVuIHRoaXMgZGF0YXNldCBhbmQgdmlzdWFsaXphdGlvbiB0eXBlIHdvdWxkIGJlIC4wOCBwZXJjZW50ICgyODAgb2JzZXJ2YXRpb25zKS4gVGhlIHJlc3VsdGluZyB0cmVlbWFwLCB2aXo0LCBpcyBlYXNpZXIgdG8gaW50ZXJwZXQgYW5kIGV2ZW4gdGhvdWdoIHRoZXJlIGFyZSBzdGlsbCB1bnJlY29nbml6YWJsZSBzcXVhcmVzLCB0aGUgbmVpZ2hib3Job29kcyB3aXRoIHRoZSBtb3N0IGV4cGVuc2l2ZSByZW50cyBhcmUgZWFzaWVyIHRvIGlkZW50aWZ5LiAKCmBgYHtyfQojIyMjIyMjIyMjIyMjIyMjIyNWaXozJjQgfCBTaXplIEluc3RpbmN0IyMjIyMjIyMjIyMjIyMjIyMjCiNWaXozOkNyb3dkZWQgVHJlZW1hcApWaXozIDwtIGdncGxvdChsaXN0X2NsZWFuLCBhZXMoYXJlYSA9IHByaWNlLCBmaWxsID0gcm9vbS50eXBlLCBzdWJncm91cCA9IG5laWdoYm9yaG9vZCkpICsKICBnZW9tX3RyZWVtYXAoKSArCiAgZ2VvbV90cmVlbWFwX3N1Ymdyb3VwX2JvcmRlcihjb2xvciA9ICJ3aGl0ZSIsIHNpemUgPSAxKSArCiAgZ2VvbV90cmVlbWFwX3N1Ymdyb3VwX3RleHQocGxhY2UgPSAiY2VudHJlIiwgZ3JvdyA9IFQsIGFscGhhID0gMC41LCBjb2xvdXIgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoaXRlIiwgbWluLnNpemUgPSAwKSArCiAgbGFicyh0aXRsZT0iVml6MyA6IEJ1c3kgVHJlZW1hcCIsIAogICAgICAgc3VidGl0bGU9IkxvY2F0aW9uIGFuZCBUeXBlIG9mIEhpZ2ggUmVudCBBaXJCbkIgUmVudGFscyIsIAogICAgICAgZmlsbCA9ICJSb29tIFR5cGUiKQpWaXozCgojTG9va2luZyBhdCB0b3AgLjA4IHBlcmNlbnQKbGlzdF9jbGVhbiA8LSBsaXN0X2NsZWFuW29yZGVyKC1saXN0X2NsZWFuJHByaWNlKSxdICAgICAgICAgICAgICAgICNyZXZlcnNlIHNvcnRpbmcKcHJpY2Uuc3VtIDwtIGN1bXN1bShsaXN0X2NsZWFuJHByaWNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjdW11bGF0aXZlIHN1bQpsaXN0X2NsZWFuIDwtIGFkZF9jb2x1bW4obGlzdF9jbGVhbiwgcHJpY2Uuc3VtLCAuYWZ0ZXIgPSAicHJpY2UiKSAgI2FkZGluZyBjdW11bGF0aXZlIHN1bQpwcmljZS5wZXJjeCA8LSAxMDAqbGlzdF9jbGVhbiRwcmljZS5zdW0vc3VtKGxpc3RfY2xlYW4kcHJpY2Uuc3VtKSAgI2N1bXVsYXRpdmUgcGVyY2VudGFnZXMKbGlzdF9jbGVhbiA8LSBhZGRfY29sdW1uKGxpc3RfY2xlYW4sIHByaWNlLnBlcmN4LCAuYWZ0ZXIgPSAicHJpY2Uuc3VtIikgICNhZGRpbmcgcGVyY3gKcHJpY2UucGVyYyA8LSBjdW1zdW0obGlzdF9jbGVhbiRwcmljZS5wZXJjeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzdW1taW5nIHVwIGN1bXVsYXRpdmUgcGVyY2VudGFnZXMKbGlzdF9jbGVhbiA8LSBhZGRfY29sdW1uKGxpc3RfY2xlYW4sIHByaWNlLnBlcmMsIC5hZnRlciA9ICJwcmljZS5wZXJjeCIpICNhZGRpbmcgY3VtdWxhdGl2ZSBwZXJjCmxpc3RfY2xlYW4uMDggPC0gZmlsdGVyKGxpc3RfY2xlYW4sIGxpc3RfY2xlYW4kcHJpY2UucGVyYyA8IC4wOCkgICAgICAgIyBmaWx0ZXJpbmcgdG9wIC4wOCBwZXJjZW50CgojVml6NDogT25seSBsb29raW5nIGF0IHRvcCAuMDggcGVyY2VudApWaXo0IDwtIGdncGxvdChsaXN0X2NsZWFuLjA4LCBhZXMoYXJlYSA9IHByaWNlLCBmaWxsID0gcm9vbS50eXBlLCBzdWJncm91cCA9IG5laWdoYm9yaG9vZCkpICsKICBnZW9tX3RyZWVtYXAoY29sb3IgPSAiY3lhbiIpICsKICBnZW9tX3RyZWVtYXBfc3ViZ3JvdXBfYm9yZGVyKGNvbG9yID0gImRlZXBza3libHVlNCIsIHNpemUgPSAxKSArCiAgZ2VvbV90cmVlbWFwX3N1Ymdyb3VwX3RleHQocGxhY2UgPSAiY2VudHJlIiwgZ3JvdyA9IFQsIGFscGhhID0gMC41LCBjb2xvdXIgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhcmtibHVlIiwgbWluLnNpemUgPSAxKSArIAogIGxhYnModGl0bGU9IlZpejQgOiBSZWZpbmVkIFRyZWVtYXAiLCAKICAgICAgIHN1YnRpdGxlPSJMb2NhdGlvbiBhbmQgVHlwZSBvZiBIaWdoIFJlbnQgQWlyQm5CIFJlbnRhbHMgKHRvcCAuMDggcGVyY2VudCkiLCAKICAgICAgIGZpbGwgPSAiUm9vbSBUeXBlIikKVml6NAoKYGBgCgpWaXN1YWxpemF0aW9uIDU6IApGb3Igdml6NSwgSSBkZWNpZGVkIHRvIGtlZXAgdXNpbmcgdGhlIHRyZWVtYXBzIGZ1bmN0aW9uIGJ1dCBvbiBhIHNtYWxsZXIsIG1vcmUgY29tcGFyYXRpdmUgc2NhbGUuIEkgY3JlYXRlZCAzIHNlcGFyYXRlIHRyZWVtYXBzLCBvbmUgZm9yIGVhY2ggcm9vbSB0eXBlIGFuZCBJIHBvcHVsYXRlZCBpdCB1c2luZyB0aGUgdG9wIDEwIHJlbnRhbCBwcmljZXMuIFNjcm9sbGluZyB0aHJvdWdoIHRoZSB2aXN1YWxpemF0aW9ucyBzaG93IHdoaWNoIGFyZWFzIGFyZSBjb25zaXN0ZW50bHkgb24gdGhlIGhpZ2ggcHJpY2UgbGlzdCBhbmQgd2hpY2ggb25lcyB2YXJ5IGRlcGVuZGVuZGluZyBvbiByb29tIHR5cGUuCgpWaXo1LjQgdGFrZXMgdGhlIHRvcCAxMCBoaWdoZXN0IHJlbnRhbCBwcmljZXMgYW1vbmcgYWxsIHJvb20gdHlwZXMgYW5kIHBsYWNlcyBpdCBhbGwgaW4gMSB0cmVlbWFwLgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjVml6NSB8IEV4cGxvcmluZyBOZWlnaGJvcmhvb2RzIyMjIyMjIyMjIyMjIyMjIyMjCmxpc3RfY2xlYW5faG9tZSA8LSBmaWx0ZXIobGlzdF9jbGVhbiwgbGlzdF9jbGVhbiRyb29tLnR5cGUgPT0gIkVudGlyZSBob21lL2FwdCIpCmxpc3RfY2xlYW5faG9tZSA8LSB0b3BfbihsaXN0X2NsZWFuX2hvbWUsIDEwLCBwcmljZSkKVml6NS4xIDwtIGdncGxvdChsaXN0X2NsZWFuX2hvbWUsIGFlcyhhcmVhID0gcHJpY2UsIGZpbGwgPSByb29tLnR5cGUsIHN1Ymdyb3VwID0gbmVpZ2hib3Job29kKSkgKwogIGdlb21fdHJlZW1hcChjb2xvciA9ICJ0b21hdG80IikgKwogIGdlb21fdHJlZW1hcF9zdWJncm91cF9ib3JkZXIoY29sb3IgPSAid2hpdGUiLCBzaXplID0gMikgKwogIGdlb21fdHJlZW1hcF9zdWJncm91cF90ZXh0KHBsYWNlID0gImNlbnRyZSIsIGdyb3cgPSBULCBhbHBoYSA9IDEsIGNvbG91ciA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpdGUiLCBtaW4uc2l6ZSA9IDEpICsKICBsYWJzKHRpdGxlPSJWaXo1LjE6IEVudGlyZSBIb21lIFRyZWVtYXAiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikKClZpejUuMQoKbGlzdF9jbGVhbl9zaGFyZWQgPC0gZmlsdGVyKGxpc3RfY2xlYW4sIGxpc3RfY2xlYW4kcm9vbS50eXBlID09ICJTaGFyZWQgcm9vbSIpCmxpc3RfY2xlYW5fc2hhcmVkIDwtIHRvcF9uKGxpc3RfY2xlYW5fc2hhcmVkLCAxMCwgcHJpY2UpClZpejUuMiA8LSBnZ3Bsb3QobGlzdF9jbGVhbl9zaGFyZWQsIGFlcyhhcmVhID0gcHJpY2UsIGZpbGwgPSByb29tLnR5cGUsIHN1Ymdyb3VwID0gbmVpZ2hib3Job29kKSkgKwogIGdlb21fdHJlZW1hcChjb2xvciA9ICJ3aGVhdDQiLCBmaWxsID0gInNwcmluZ2dyZWVuMyIgKSArCiAgZ2VvbV90cmVlbWFwX3N1Ymdyb3VwX2JvcmRlcihjb2xvciA9ICJ3aGl0ZSIsIHNpemUgPSAyKSArCiAgZ2VvbV90cmVlbWFwX3N1Ymdyb3VwX3RleHQocGxhY2UgPSAiY2VudHJlIiwgZ3JvdyA9IFQsIGFscGhhID0gMSwgY29sb3VyID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGl0ZSIsIG1pbi5zaXplID0gMSkgKwogIGxhYnModGl0bGU9IlZpejUuMjogU2hhcmVkIFJvb20gVHJlZW1hcCIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQoKVml6NS4yCgpsaXN0X2NsZWFuX3ByaXZhdGUgPC0gZmlsdGVyKGxpc3RfY2xlYW4sIGxpc3RfY2xlYW4kcm9vbS50eXBlID09ICJQcml2YXRlIHJvb20iKQpsaXN0X2NsZWFuX3ByaXZhdGUgPC0gdG9wX24obGlzdF9jbGVhbl9wcml2YXRlLCAxMCwgcHJpY2UpClZpejUuMyA8LSBnZ3Bsb3QobGlzdF9jbGVhbl9wcml2YXRlLCBhZXMoYXJlYSA9IHByaWNlLCBmaWxsID0gcm9vbS50eXBlLCBzdWJncm91cCA9IG5laWdoYm9yaG9vZCwgY29sb3IgPSAic3ByaW5nZ3JlZW4zIikpICsKICBnZW9tX3RyZWVtYXAoY29sb3IgPSAiZGFya2JsdWUiLCBmaWxsID0gImNvcm5mbG93ZXJibHVlIikgKwogIGdlb21fdHJlZW1hcF9zdWJncm91cF9ib3JkZXIoY29sb3IgPSAid2hpdGUiLCBzaXplID0gMikgKwogIGdlb21fdHJlZW1hcF9zdWJncm91cF90ZXh0KHBsYWNlID0gImNlbnRyZSIsIGdyb3cgPSBULCBhbHBoYSA9IDEsIGNvbG91ciA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpdGUiLCBtaW4uc2l6ZSA9IDEpICsKICAgbGFicyh0aXRsZT0iVml6NS4zOiBQcml2YXRlIFJvb20gVHJlZW1hcCIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQoKVml6NS4zCgpsaXN0X2NsZWFuX3RvcCA8LSB0b3BfbihsaXN0X2NsZWFuLCAxMCwgcHJpY2UpClZpejUuNCA8LSBnZ3Bsb3QobGlzdF9jbGVhbl90b3AsIGFlcyhhcmVhID0gcHJpY2UsIGZpbGwgPSByb29tLnR5cGUsIHN1Ymdyb3VwID0gbmVpZ2hib3Job29kKSkgKwogIGdlb21fdHJlZW1hcChjb2xvciA9ICJyZWQ0IikgKwogIGdlb21fdHJlZW1hcF9zdWJncm91cF9ib3JkZXIoY29sb3IgPSAid2hpdGUiLCBzaXplID0gMikgKwogIGdlb21fdHJlZW1hcF9zdWJncm91cF90ZXh0KHBsYWNlID0gImNlbnRyZSIsIGdyb3cgPSBULCBhbHBoYSA9IDEsIGNvbG91ciA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpdGUiLCBtaW4uc2l6ZSA9IDEpICsKICBsYWJzKHRpdGxlPSJWaXo1LjE6IEVudGlyZSBIb21lIFRyZWVtYXAiLAogICAgICAgZmlsbCA9ICJSb29tIFR5cGUiKQogIApWaXo1LjQKYGBgCgo=