Mushroom Data
The mushroom dataset, comprising 61,069 observations and 17
variables, provides comprehensive information on various attributes of
sampled mushrooms. These attributes include cap diameter, stem width,
stem height, gill color, stem color, and the categorical class type to
which each mushroom belongs. The dataset serves as a valuable resource
for studying mushroom characteristics and exploring patterns within
different mushroom species.
# Load the required library
library(dplyr)
# Read the data
mushroom <- read.csv("https://ecoleman451.github.io/ecoleman/w10/mushroom-data.txt")
head(mushroom)
class cap.diameter cap.shape cap.surface cap.color does.bruise.or.bleed
1 p 15.26 x g o f
2 p 16.60 x g o f
3 p 14.07 x g o f
4 p 14.17 f h e f
5 p 14.64 x h o f
6 p 15.34 x g o f
gill.attachment gill.spacing gill.color stem.height stem.width stem.root
1 e w 16.95 17.09 s
2 e w 17.99 18.19 s
3 e w 17.80 17.74 s
4 e w 15.77 15.98 s
5 e w 16.53 17.20 s
6 e w 17.84 18.79 s
stem.surface stem.color veil.type veil.color has.ring ring.type
1 y w u w t g
2 y w u w t g
3 y w u w t g
4 y w u w t p
5 y w u w t p
6 y w u w t p
spore.print.color habitat season
1 d w
2 d u
3 d w
4 d w
5 d w
6 d u
The following dashboard and story points were designed based on the
following considerations:
Season Filter: Each sheet in the dashboard and story point has a
Season filter, offering viewers the flexibility to delve into data
specific to different seasons, facilitating seasonal analysis and
comparison.
Table Chart: Average Cap Diameter per Class by Habitat: This chart
provides a detailed insight into the average cap diameter across
different classes of mushrooms, categorized by habitat. By color-coding
each habitat, viewers can easily discern trends and patterns associated
with environmental conditions.
Table Chart: Average Measurements Across Classes by Stem Color:
Offering a comprehensive overview, this table chart displays average
measurements (such as stem width and height) across various mushroom
classes, distinguished by stem color. The color-coded values enable
viewers to identify associations between mushroom classes and their
physical attributes.
Histogram: Total Stem Height Distribution by Cap Diameter and Cap
Shape: This histogram offers a visual representation of the distribution
of total stem height, considering both cap diameter and cap shape. By
color-coding each cap shape, viewers can gain insights into how stem
height varies across different cap shapes and sizes.
Dual Lines Chart: Average Stem Width and Stem Height Across Cap
Diameter Lengths: This chart presents an in-depth analysis of the
average stem width and stem height across different lengths of cap
diameter. By visualizing these relationships simultaneously, viewers can
discern correlations and variations between cap diameter and stem
dimensions.
Scatter Plot: Average Stem Width vs. Average Stem Height with Cap
Diameter Color Dependency: This scatter plot provides a comprehensive
view of the relationship between average stem width and height, with cap
diameter represented by color.
By incorporating visualizations and interactive features, this
dashboard and its story points aim to empower viewers with the tools and
insights for data analysis.
Tableau Story
Points
In addition to the detailed dashboard, a complementary story point
has been crafted to provide a guided narrative based on the previous
dashboard’s insights. Each visual sheet within the story point is
accompanied by a brief caption, offering context and highlighting key
findings. This approach enables viewers to explore each visual sheet
independently, allowing them to draw their own conclusions and insights
from the data presented. Through this structured storytelling approach,
viewers can engage with the data at their own pace, uncovering patterns
tailored to their interests and goals.
LS0tDQp0aXRsZTogIlRhYmxlYXUgRGFzaGJvYXJkIg0KYXV0aG9yOiAiRWR3YXJkIENvbGVtYW4iDQpkYXRlOiAiV2VzdCBDaGVzdGVyIFVuaXZlcnNpdHkiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogbm8NCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiByZWFkYWJsZQ0KLS0tDQogICAgICANCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpkaXYjVE9DIGxpIHsNCiAgICBsaXN0LXN0eWxlOm5vbmU7DQogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOw0KICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOw0KfQ0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDI0cHg7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoNC5hdXRob3IgeyANCiAgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmg0LmRhdGUgeyANCiAgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoMSB7IA0KICAgIC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAyMnB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmgyIHsgDQogICAgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCmgzIHsgDQogICAgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE1cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgZm9udC1mYWNlOiBib2xkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQpoNCB7IA0KICAgIC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQogICAvKiBjZW50ZXIgbWFwcyB1c2luZyBjaHVuayBvcHRpb246IGZpZy5hbGlnbj0nY2VudGVyJyAqLw0KLmh0bWwtd2lkZ2V0IHsNCiAgICBtYXJnaW46IGF1dG87DQp9DQo8L3N0eWxlPg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUUsICAgDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQSkNCmBgYA0KDQpcDQoNCiMgTXVzaHJvb20gRGF0YQ0KVGhlIG11c2hyb29tIGRhdGFzZXQsIGNvbXByaXNpbmcgNjEsMDY5IG9ic2VydmF0aW9ucyBhbmQgMTcgdmFyaWFibGVzLCBwcm92aWRlcyBjb21wcmVoZW5zaXZlIGluZm9ybWF0aW9uIG9uIHZhcmlvdXMgYXR0cmlidXRlcyBvZiBzYW1wbGVkIG11c2hyb29tcy4gVGhlc2UgYXR0cmlidXRlcyBpbmNsdWRlIGNhcCBkaWFtZXRlciwgc3RlbSB3aWR0aCwgc3RlbSBoZWlnaHQsIGdpbGwgY29sb3IsIHN0ZW0gY29sb3IsIGFuZCB0aGUgY2F0ZWdvcmljYWwgY2xhc3MgdHlwZSB0byB3aGljaCBlYWNoIG11c2hyb29tIGJlbG9uZ3MuIFRoZSBkYXRhc2V0IHNlcnZlcyBhcyBhIHZhbHVhYmxlIHJlc291cmNlIGZvciBzdHVkeWluZyBtdXNocm9vbSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGV4cGxvcmluZyBwYXR0ZXJucyB3aXRoaW4gZGlmZmVyZW50IG11c2hyb29tIHNwZWNpZXMuDQpgYGB7cn0NCiMgTG9hZCB0aGUgcmVxdWlyZWQgbGlicmFyeQ0KbGlicmFyeShkcGx5cikNCg0KIyBSZWFkIHRoZSBkYXRhDQptdXNocm9vbSA8LSByZWFkLmNzdigiaHR0cHM6Ly9lY29sZW1hbjQ1MS5naXRodWIuaW8vZWNvbGVtYW4vdzEwL211c2hyb29tLWRhdGEudHh0IikNCmhlYWQobXVzaHJvb20pDQpgYGANClRoZSBmb2xsb3dpbmcgZGFzaGJvYXJkIGFuZCBzdG9yeSBwb2ludHMgd2VyZSBkZXNpZ25lZCBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIGNvbnNpZGVyYXRpb25zOg0KICANCiAgU2Vhc29uIEZpbHRlcjogRWFjaCBzaGVldCBpbiB0aGUgZGFzaGJvYXJkIGFuZCBzdG9yeSBwb2ludCBoYXMgYSBTZWFzb24gZmlsdGVyLCBvZmZlcmluZyB2aWV3ZXJzIHRoZSBmbGV4aWJpbGl0eSB0byBkZWx2ZSBpbnRvIGRhdGEgc3BlY2lmaWMgdG8gZGlmZmVyZW50IHNlYXNvbnMsIGZhY2lsaXRhdGluZyBzZWFzb25hbCBhbmFseXNpcyBhbmQgY29tcGFyaXNvbi4NCg0KICBUYWJsZSBDaGFydDogQXZlcmFnZSBDYXAgRGlhbWV0ZXIgcGVyIENsYXNzIGJ5IEhhYml0YXQ6IFRoaXMgY2hhcnQgcHJvdmlkZXMgYSBkZXRhaWxlZCBpbnNpZ2h0IGludG8gdGhlIGF2ZXJhZ2UgY2FwIGRpYW1ldGVyIGFjcm9zcyBkaWZmZXJlbnQgY2xhc3NlcyBvZiBtdXNocm9vbXMsIGNhdGVnb3JpemVkIGJ5IGhhYml0YXQuIEJ5IGNvbG9yLWNvZGluZyBlYWNoIGhhYml0YXQsIHZpZXdlcnMgY2FuIGVhc2lseSBkaXNjZXJuIHRyZW5kcyBhbmQgcGF0dGVybnMgYXNzb2NpYXRlZCB3aXRoIGVudmlyb25tZW50YWwgY29uZGl0aW9ucy4NCg0KICBUYWJsZSBDaGFydDogQXZlcmFnZSBNZWFzdXJlbWVudHMgQWNyb3NzIENsYXNzZXMgYnkgU3RlbSBDb2xvcjogT2ZmZXJpbmcgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LCB0aGlzIHRhYmxlIGNoYXJ0IGRpc3BsYXlzIGF2ZXJhZ2UgbWVhc3VyZW1lbnRzIChzdWNoIGFzIHN0ZW0gd2lkdGggYW5kIGhlaWdodCkgYWNyb3NzIHZhcmlvdXMgbXVzaHJvb20gY2xhc3NlcywgZGlzdGluZ3Vpc2hlZCBieSBzdGVtIGNvbG9yLiBUaGUgY29sb3ItY29kZWQgdmFsdWVzIGVuYWJsZSB2aWV3ZXJzIHRvIGlkZW50aWZ5IGFzc29jaWF0aW9ucyBiZXR3ZWVuIG11c2hyb29tIGNsYXNzZXMgYW5kIHRoZWlyIHBoeXNpY2FsIGF0dHJpYnV0ZXMuDQoNCiAgSGlzdG9ncmFtOiBUb3RhbCBTdGVtIEhlaWdodCBEaXN0cmlidXRpb24gYnkgQ2FwIERpYW1ldGVyIGFuZCBDYXAgU2hhcGU6IFRoaXMgaGlzdG9ncmFtIG9mZmVycyBhIHZpc3VhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGlzdHJpYnV0aW9uIG9mIHRvdGFsIHN0ZW0gaGVpZ2h0LCBjb25zaWRlcmluZyBib3RoIGNhcCBkaWFtZXRlciBhbmQgY2FwIHNoYXBlLiBCeSBjb2xvci1jb2RpbmcgZWFjaCBjYXAgc2hhcGUsIHZpZXdlcnMgY2FuIGdhaW4gaW5zaWdodHMgaW50byBob3cgc3RlbSBoZWlnaHQgdmFyaWVzIGFjcm9zcyBkaWZmZXJlbnQgY2FwIHNoYXBlcyBhbmQgc2l6ZXMuDQoNCiAgRHVhbCBMaW5lcyBDaGFydDogQXZlcmFnZSBTdGVtIFdpZHRoIGFuZCBTdGVtIEhlaWdodCBBY3Jvc3MgQ2FwIERpYW1ldGVyIExlbmd0aHM6IFRoaXMgY2hhcnQgcHJlc2VudHMgYW4gaW4tZGVwdGggYW5hbHlzaXMgb2YgdGhlIGF2ZXJhZ2Ugc3RlbSB3aWR0aCBhbmQgc3RlbSBoZWlnaHQgYWNyb3NzIGRpZmZlcmVudCBsZW5ndGhzIG9mIGNhcCBkaWFtZXRlci4gQnkgdmlzdWFsaXppbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBzaW11bHRhbmVvdXNseSwgdmlld2VycyBjYW4gZGlzY2VybiBjb3JyZWxhdGlvbnMgYW5kIHZhcmlhdGlvbnMgYmV0d2VlbiBjYXAgZGlhbWV0ZXIgYW5kIHN0ZW0gZGltZW5zaW9ucy4NCg0KICBTY2F0dGVyIFBsb3Q6IEF2ZXJhZ2UgU3RlbSBXaWR0aCB2cy4gQXZlcmFnZSBTdGVtIEhlaWdodCB3aXRoIENhcCBEaWFtZXRlciBDb2xvciBEZXBlbmRlbmN5OiBUaGlzIHNjYXR0ZXIgcGxvdCBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYXZlcmFnZSBzdGVtIHdpZHRoIGFuZCBoZWlnaHQsIHdpdGggY2FwIGRpYW1ldGVyIHJlcHJlc2VudGVkIGJ5IGNvbG9yLg0KDQogIEJ5IGluY29ycG9yYXRpbmcgdmlzdWFsaXphdGlvbnMgYW5kIGludGVyYWN0aXZlIGZlYXR1cmVzLCB0aGlzIGRhc2hib2FyZCBhbmQgaXRzIHN0b3J5IHBvaW50cyBhaW0gdG8gZW1wb3dlciB2aWV3ZXJzIHdpdGggdGhlIHRvb2xzIGFuZCBpbnNpZ2h0cyBmb3IgZGF0YSBhbmFseXNpcy4NCg0KPHRhYmxlIGJvcmRlciA9IDAgYm9yZGVyY29sb3I9ImRhcmtncmVlbiIgYmdjb2xvcj0nI2Y2ZjZmNicgIHdpZHRoPTExMCUgIGFsaWduID0gY2VudGVyPg0KPHRyPg0KPHRkPg0KDQo8ZGl2IGNsYXNzPSd0YWJsZWF1UGxhY2Vob2xkZXInIGlkPSd2aXoxNzEyNzkyNTA2ODY2JyBzdHlsZT0ncG9zaXRpb246IHJlbGF0aXZlJz48bm9zY3JpcHQ+PGEgaHJlZj0nIyc+PGltZyBhbHQ9J0Rhc2hib2FyZCAxICcgc3JjPSdodHRwczomIzQ3OyYjNDc7cHVibGljLnRhYmxlYXUuY29tJiM0NztzdGF0aWMmIzQ3O2ltYWdlcyYjNDc7VGEmIzQ3O1RhYmxlYXVTdG9yeUJvYXJkXzE3MTI3ODkwNDU4NjYwJiM0NztEYXNoYm9hcmQxJiM0NzsxX3Jzcy5wbmcnIHN0eWxlPSdib3JkZXI6IG5vbmUnIC8+PC9hPjwvbm9zY3JpcHQ+PG9iamVjdCBjbGFzcz0ndGFibGVhdVZpeicgIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz48cGFyYW0gbmFtZT0naG9zdF91cmwnIHZhbHVlPSdodHRwcyUzQSUyRiUyRnB1YmxpYy50YWJsZWF1LmNvbSUyRicgLz4gPHBhcmFtIG5hbWU9J2VtYmVkX2NvZGVfdmVyc2lvbicgdmFsdWU9JzMnIC8+IDxwYXJhbSBuYW1lPSdzaXRlX3Jvb3QnIHZhbHVlPScnIC8+PHBhcmFtIG5hbWU9J25hbWUnIHZhbHVlPSdUYWJsZWF1U3RvcnlCb2FyZF8xNzEyNzg5MDQ1ODY2MCYjNDc7RGFzaGJvYXJkMScgLz48cGFyYW0gbmFtZT0ndGFicycgdmFsdWU9J25vJyAvPjxwYXJhbSBuYW1lPSd0b29sYmFyJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdzdGF0aWNfaW1hZ2UnIHZhbHVlPSdodHRwczomIzQ3OyYjNDc7cHVibGljLnRhYmxlYXUuY29tJiM0NztzdGF0aWMmIzQ3O2ltYWdlcyYjNDc7VGEmIzQ3O1RhYmxlYXVTdG9yeUJvYXJkXzE3MTI3ODkwNDU4NjYwJiM0NztEYXNoYm9hcmQxJiM0NzsxLnBuZycgLz4gPHBhcmFtIG5hbWU9J2FuaW1hdGVfdHJhbnNpdGlvbicgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9zdGF0aWNfaW1hZ2UnIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3Bpbm5lcicgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9vdmVybGF5JyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X2NvdW50JyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdsYW5ndWFnZScgdmFsdWU9J2VuLVVTJyAvPjxwYXJhbSBuYW1lPSdmaWx0ZXInIHZhbHVlPSdwdWJsaXNoPXllcycgLz48L29iamVjdD48L2Rpdj4gICAgICAgICAgICAgICAgDQo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+ICAgICAgICAgICAgICAgICAgICB2YXIgZGl2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXoxNzEyNzkyNTA2ODY2Jyk7ICAgICAgICAgICAgICAgICAgICB2YXIgdml6RWxlbWVudCA9IGRpdkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpWzBdOyAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXZFbGVtZW50Lm9mZnNldFdpZHRoID4gODAwICkgeyB2aXpFbGVtZW50LnN0eWxlLndpZHRoPScxMDAlJzt2aXpFbGVtZW50LnN0eWxlLmhlaWdodD0oZGl2RWxlbWVudC5vZmZzZXRXaWR0aCowLjc1KSsncHgnO30gZWxzZSBpZiAoIGRpdkVsZW1lbnQub2Zmc2V0V2lkdGggPiA1MDAgKSB7IHZpekVsZW1lbnQuc3R5bGUud2lkdGg9JzEwMCUnO3ZpekVsZW1lbnQuc3R5bGUuaGVpZ2h0PShkaXZFbGVtZW50Lm9mZnNldFdpZHRoKjAuNzUpKydweCc7fSBlbHNlIHsgdml6RWxlbWVudC5zdHlsZS53aWR0aD0nMTAwJSc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9JzE1MjdweCc7fSAgICAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7ICAgICAgICAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LnNyYyA9ICdodHRwczovL3B1YmxpYy50YWJsZWF1LmNvbS9qYXZhc2NyaXB0cy9hcGkvdml6X3YxLmpzJzsgICAgICAgICAgICAgICAgICAgIHZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgIA0KPC9zY3JpcHQ+DQo8L3RkPg0KPC90cj4NCjwvdGFibGU+DQoNClwNCg0KXA0KDQoNCiMgVGFibGVhdSBTdG9yeSBQb2ludHMNCkluIGFkZGl0aW9uIHRvIHRoZSBkZXRhaWxlZCBkYXNoYm9hcmQsIGEgY29tcGxlbWVudGFyeSBzdG9yeSBwb2ludCBoYXMgYmVlbiBjcmFmdGVkIHRvIHByb3ZpZGUgYSBndWlkZWQgbmFycmF0aXZlIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBkYXNoYm9hcmQncyBpbnNpZ2h0cy4gRWFjaCB2aXN1YWwgc2hlZXQgd2l0aGluIHRoZSBzdG9yeSBwb2ludCBpcyBhY2NvbXBhbmllZCBieSBhIGJyaWVmIGNhcHRpb24sIG9mZmVyaW5nIGNvbnRleHQgYW5kIGhpZ2hsaWdodGluZyBrZXkgZmluZGluZ3MuIFRoaXMgYXBwcm9hY2ggZW5hYmxlcyB2aWV3ZXJzIHRvIGV4cGxvcmUgZWFjaCB2aXN1YWwgc2hlZXQgaW5kZXBlbmRlbnRseSwgYWxsb3dpbmcgdGhlbSB0byBkcmF3IHRoZWlyIG93biBjb25jbHVzaW9ucyBhbmQgaW5zaWdodHMgZnJvbSB0aGUgZGF0YSBwcmVzZW50ZWQuIFRocm91Z2ggdGhpcyBzdHJ1Y3R1cmVkIHN0b3J5dGVsbGluZyBhcHByb2FjaCwgdmlld2VycyBjYW4gZW5nYWdlIHdpdGggdGhlIGRhdGEgYXQgdGhlaXIgb3duIHBhY2UsIHVuY292ZXJpbmcgcGF0dGVybnMgdGFpbG9yZWQgdG8gdGhlaXIgaW50ZXJlc3RzIGFuZCBnb2Fscy4NCg0KXA0KDQo8dGFibGUgYm9yZGVyID0gMCBib3JkZXJjb2xvcj0iZGFya2dyZWVuIiBiZ2NvbG9yPScjZjZmNmY2JyAgd2lkdGg9MTEwJSAgYWxpZ24gPSBjZW50ZXI+DQo8dHI+DQo8dGQ+DQoNCjxkaXYgY2xhc3M9J3RhYmxlYXVQbGFjZWhvbGRlcicgaWQ9J3ZpejE3MTI3ODkwNjk4NDknIHN0eWxlPSdwb3NpdGlvbjogcmVsYXRpdmUnPjxub3NjcmlwdD48YSBocmVmPScjJz48aW1nIGFsdD0nTXVzaHJvb20gU3RvcnkgUG9pbnQgJyBzcmM9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztUYSYjNDc7VGFibGVhdVN0b3J5Qm9hcmRfMTcxMjc4OTA0NTg2NjAmIzQ3O1N0b3J5MSYjNDc7MV9yc3MucG5nJyBzdHlsZT0nYm9yZGVyOiBub25lJyAvPjwvYT48L25vc2NyaXB0PjxvYmplY3QgY2xhc3M9J3RhYmxlYXVWaXonICBzdHlsZT0nZGlzcGxheTpub25lOyc+PHBhcmFtIG5hbWU9J2hvc3RfdXJsJyB2YWx1ZT0naHR0cHMlM0ElMkYlMkZwdWJsaWMudGFibGVhdS5jb20lMkYnIC8+IDxwYXJhbSBuYW1lPSdlbWJlZF9jb2RlX3ZlcnNpb24nIHZhbHVlPSczJyAvPiA8cGFyYW0gbmFtZT0nc2l0ZV9yb290JyB2YWx1ZT0nJyAvPjxwYXJhbSBuYW1lPSduYW1lJyB2YWx1ZT0nVGFibGVhdVN0b3J5Qm9hcmRfMTcxMjc4OTA0NTg2NjAmIzQ3O1N0b3J5MScgLz48cGFyYW0gbmFtZT0ndGFicycgdmFsdWU9J25vJyAvPjxwYXJhbSBuYW1lPSd0b29sYmFyJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdzdGF0aWNfaW1hZ2UnIHZhbHVlPSdodHRwczomIzQ3OyYjNDc7cHVibGljLnRhYmxlYXUuY29tJiM0NztzdGF0aWMmIzQ3O2ltYWdlcyYjNDc7VGEmIzQ3O1RhYmxlYXVTdG9yeUJvYXJkXzE3MTI3ODkwNDU4NjYwJiM0NztTdG9yeTEmIzQ3OzEucG5nJyAvPiA8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X3N0YXRpY19pbWFnZScgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9zcGlubmVyJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X292ZXJsYXknIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2Rpc3BsYXlfY291bnQnIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2xhbmd1YWdlJyB2YWx1ZT0nZW4tVVMnIC8+PC9vYmplY3Q+PC9kaXY+ICAgICAgICAgICAgICAgIA0KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndml6MTcxMjc4OTA2OTg0OScpOyAgICAgICAgICAgICAgICAgICAgdmFyIHZpekVsZW1lbnQgPSBkaXZFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXTsgICAgICAgICAgICAgICAgICAgIHZpekVsZW1lbnQuc3R5bGUud2lkdGg9JzEwMTZweCc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9Jzk5MXB4JzsgICAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7ICAgICAgICAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LnNyYyA9ICdodHRwczovL3B1YmxpYy50YWJsZWF1LmNvbS9qYXZhc2NyaXB0cy9hcGkvdml6X3YxLmpzJzsgICAgICAgICAgICAgICAgICAgIHZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgIA0KPC9zY3JpcHQ+DQo8L3RkPg0KPC90cj4NCjwvdGFibGU+DQo=