More Controls with
YAML
One can add some additional controls of the knitted document to the
YAML header.
code_folding: "hide"
to hide the code chunk to make the
knitted document cleaner.
code_download: true
to allow downloading RMD source
from the HTML page.
Turn Sections to
Tabs
Tab format HTML documents are sometimes easy for readers to read the
document. R Markdown can convert section-format documents to tab-format
documents easily. The following is a simple example based on the popular
R
mtcars dataset.
GIF Animation
R has several animation libraries one can use to generate animated
graphs to explain some of the complex concepts visually. Sometimes
people can generate a series of related images and then use software
programs to make a GIF image. This external GIF can also be included in
the R Markdown document.
for (i in 1:5) {
pie(c(i %% 5, 1, 3), col = c('red', 'yellow', "blue"), labels = paste(i))
}

Load An External
image
In addition to the R-generated graphics, we can also include external
images in different formats in the R Markdown document.
out.width=
and out.height=
options should be
used to control the size of the images.
include_graphics("https://editor.analyticsvidhya.com/uploads/75819stats_1050x520.png")

Inline Chunk
Options
If too many chunk options are required to lay out the figure, it is
not convenient to put all of them in the code chunk. One way to handle
this situation is to use inline chunk options.
plot_ly(x=mtcars$wt,y=mtcars$mpg,mode = "markers",color = as.factor(mtcars$vs))
Including CSS
There are three ways of inserting a style sheet in the RMarkdown
document: inline CSS, internal CSS, and external CSS. We have used all
three different formats of CSS in this RMD to format the text or
decorate the layout on different occasions. To summarize,
inline CSS: This is an example showing how to
change the
font size, face, color, etc.
internal CSS: The internal CSS was included at
YAML and setup code chunk (Here Is
the screenshot)
External CSS: The external CSS style file used
in this document can be found (here)
Verbatim Code
Chunks
Typically we write code chunks and inline expressions that we want to
be parsed and evaluated by knitr
. However, if we are trying
to write a tutorial on using knitr`, we may need to generate a verbatim
code chunk or inline expression that is not parsed by knitr, and we want
to display the content of the chunk header and all related options.
```{r out.width=c('50%', '50%'), fig.show='hold'}
boxplot(1:10)
plot(rnorm(10))
plot(density(rnorm(100)))
```
LS0tDQp0aXRsZTogJzxmb250IGNvbG9yID0gInB1cnBsZSI+PEI+U29tZSBSIE1hcmtkb3duIFRpcHM8L2I+PC9mb250PicNCmF1dGhvcjogIkNoZW5nIFBlbmciDQpkYXRlOiAiV2VzdCBDaGVzdGVyIFVuaXZlcnNpdHkiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIHRvY19jb2xsYXBzZWQ6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIGNzczogY3NzL2NwUk1Ec3R5bGUuY3NzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICB0aGVtZTogbHVtZW4NCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiAnNCcNCi0tLQ0KDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KDQovKiBUYWIgZmVhdHVyZXMgKi8NCi5uYXY+bGk+YSB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHBhZGRpbmc6IDEwcHggMTVweDsNCiAgICBjb2xvcjogcHVycGxlOw0KfQ0KLm5hdi1waWxscz5saS5hY3RpdmU+YSwgLm5hdi1waWxscz5saS5hY3RpdmU+YTpob3ZlciwgLm5hdi1waWxscz5saS5hY3RpdmU+YTpmb2N1cyB7DQogICAgY29sb3I6IGRhcmtyZWQNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBwdXJwbGU7DQp9DQoNCi8qDQpuYXYtcGlsbHM+bGk6bnRoLWNoaWxkKDIpIHsNCiAgICBiYWNrZ3JvdW5kOiBkYXJrcmVkOw0KIH0NCiAqLw0KPC9zdHlsZT4NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCmlmICghcmVxdWlyZSgia25pdHIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KICAgbGlicmFyeShrbml0cikNCn0NCmlmICghcmVxdWlyZSgiZ2lmc2tpIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImdpZnNraSIpDQogICBsaWJyYXJ5KGdpZnNraSkNCn0NCmlmICghcmVxdWlyZSgicGxvdGx5IikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpDQogICBsaWJyYXJ5KHBsb3RseSkNCn0NCiMga25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiQzpcXFNUQTQ5MFxcdzA1IikNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUUsICAgDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQSkNCmBgYA0KDQpcDQoNCg0KIyBNb3JlIENvbnRyb2xzIHdpdGggWUFNTA0KDQpPbmUgY2FuIGFkZCBzb21lIGFkZGl0aW9uYWwgY29udHJvbHMgb2YgdGhlIGtuaXR0ZWQgZG9jdW1lbnQgdG8gdGhlIFlBTUwgaGVhZGVyLg0KDQoqIGBjb2RlX2ZvbGRpbmc6ICJoaWRlImAgdG8gaGlkZSB0aGUgY29kZSBjaHVuayB0byBtYWtlIHRoZSBrbml0dGVkIGRvY3VtZW50IGNsZWFuZXIuDQoqIGBjb2RlX2Rvd25sb2FkOiB0cnVlYCB0byBhbGxvdyBkb3dubG9hZGluZyBSTUQgc291cmNlIGZyb20gdGhlIEhUTUwgcGFnZS4NCg0KDQojIEhUTUwgVGFncyBmb3IgWUFNTA0KDQpJbiBnZW5lcmFsLCB0aGUgWUFNTCBoZWFkZXIgbGF5cyBvdXQgdGhlIHRpdGxlIG9mIHRoZSBrbml0dGVkIGRvY3VtZW50LiBJdCBjYW4gYmUgZGVjb3JhdGVkIHVzaW5nIENTUy4gVGhlIGNvbnRlbnQgaW4gWUFNTCB0aGF0IHBhc3NlcyB0byB0aGUga25pdHRlZCBkb2N1bWVudCBpcyBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzLiBPbmUgY291bGQgYWxzbyB1c2UgSFRNTCB0YWdzIGRpcmVjdGx5IHRvIGFkZCBuZXcgZmVhdHVyZXMgdG8gdGhlIHRpdGxlLiBXaGVuIGRvaW5nIHRoaXMsIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBkb3VibGUgcXVvdGVzIHRvIHNpbmdsZSBxdW90ZXMuDQpGb3IgZXhhbXBsZSwgYCc8Zm9udCBjb2xvciA9ICJwdXJwbGUiPlNvbWUgUiBNYXJrZG93biBUaXBzPC9mb250PidgIGNoYW5nZXMgdGhlIGNvbG9yIGZyb20gYG5hdnlgIHRvIGBwdXJwbGVgLg0KDQoNCg0KIyBDb21tb25seSBVc2VkIEhUTUwgVGFncw0KDQpNb3N0IGZyZXF1ZW50bHkgdXNlZCBIVE1MIHRhZ3MNCg0KKiBgPGZvbnQ+IDwvZm9udD5gIC0gPGZvbnQgY29sb3I9ICJyZWQiIHNpemUgPTQgYWxpZ249ImNlbnRlciIgPjxiPiBmb250IGRlY29yYXRpb24gPC9iPjwvZm9udD4NCiogYDxhIGhyZWY9IiI+IDwvYT5gIC08YSBocmVmPSJodHRwczovL3Blbmdkc2NpLmdpdGh1Yi5pby9TVEE0OTAvIj4gaHlwZXJsaW5rPC9hPg0KKiBgPGltZyBzcmM9IiI+YCAtIDxpbWcgc3JjID0gImh0dHBzOi8vcGtncy5yc3R1ZGlvLmNvbS9ybWFya2Rvd24vcmVmZXJlbmNlL2ZpZ3VyZXMvbG9nby5wbmciIHdpZHRoPTUwIGhlaWdodD01MD4gaW5jbHVkaW5nIGFuIGltYWdlIA0KKiBgPGNlbnRlcj4gPC9jZW50ZXI+YCAtIDxjZW50ZXI+PGZvbnQgY29sb3IgPSAic2t5Ymx1ZSI+PGI+YWxpZ25tZW50PC9iPjwvZm9udD48L2NlbnRlcj4NCiogYDxicj5gIC0gbGluZSBicmVhaw0KKiBgaHJgIC0gaG9yaXpvbnRhbCBsaW5lDQoqIGA8ZGl2Pi4uLiA8L2Rpdj5gIC0gZGl2aWRlIA0KKiBgPHA+IDwvcD5gIC0gcGFyYWdyYXBoIA0KKiBgPHVsPiA8L3VsPmAgLSB1bm9yZGVyZWQgbGlzdA0KKiBgPG9sPiA8L29sPmAgLSBvcmRlcmVkIGxpc3QNCiogYDxsaT4gPC9saT5gIC0gbGlzdCAoYDxsaT5gKSBpcyB1c2VkIHdpdGggZWl0aGVyIGA8b2w+YCBvciBgPHVsPmAuIFRoZSBkZWZhdWx0IGlzIGA8dWw+YC4NCiogYDx0YWJsZT48dHI+PHRkPiAuLi4gPC90ZD48L3RyPjwvdGFibGU+YCAtIGRlZmluaW5nIEhUTUwgdGFibGUgDQoqIGA8dHI+YCAtIGRlZmluaW5nIHRhYmxlIHJvdw0KKiBgPHRkPmAgLSBkZWZpbmluZyB0YWJsZSBjb2x1bW4NCg0KPHRhYmxlIGJvcmRlciA9ICIyIiBib3JkZXJjb2xvcj0iZ3JlZW4iICBiZ2NvbG9yPSJncmF5IiAgd2lkdGg9IjkwJSI+DQogIDx0ciBib3JkZXJjb2xvcj0icmVkIj4NCiAgICA8dGg+Q29tcGFueTwvdGg+DQogICAgPHRoPkNvbnRhY3Q8L3RoPg0KICAgIDx0aD5Db3VudHJ5PC90aD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZD5BbGZyZWRzIEZ1dHRlcmtpc3RlPC90ZD4NCiAgICA8dGQ+TWFyaWEgQW5kZXJzPC90ZD4NCiAgICA8dGQ+R2VybWFueTwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8dGQ+Q2VudHJvIGNvbWVyY2lhbCBNb2N0ZXp1bWE8L3RkPg0KICAgIDx0ZD5GcmFuY2lzY28gQ2hhbmc8L3RkPg0KICAgIDx0ZD5NZXhpY288L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCg0KDQojIEZpZ3VyZSBpbiBUd28gQ29sdW1ucw0KDQpBcmd1bWVudHMgYG91dC53aWR0aGAgYW5kIGBvdXQuaGVpZ2h0YCBhcHBseSB0byBib3RoIGV4aXN0aW5nIGltYWdlcyBhbmQgUi1nZW5lcmF0ZWQgZmlndXJlcy4gDQoNClVubGlrZSB0aGUgYGZpZy53aWR0aGAgYW5kIGBmaWcuaGVpZ2h0YCBhcmd1bWVudHMgd2hpY2ggb25seSBhZmZlY3QgZHluYW1pYyBmaWd1cmVzLCB0aGUgYG91dC53aWR0aGAgYW5kIGBvdXQuaGVpZ2h0YCBhcmd1bWVudHMgY2FuIGJlIHVzZWQgd2l0aCBhbnkgdHlwZSBvZiBncmFwaGljIGFuZCBjb252ZW5pZW50bHkgY2FuIGFjY2VwdCBzaXplcyBpbiBwaXhlbHMgb3IgcGVyY2VudGFnZXMgYXMgYSBzdHJpbmcgd2l0aCAlIG9yIHB4IGFzIGEgc3VmZml4Lg0KDQpLZWVwIGluIG1pbmQgdGhhdCB0aGUgJSByZWZlcnMgdG8gdGhlIHBlcmNlbnQgb2YgdGhlIEhUTUwgY29udGFpbmVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGJsb2NrIG9mIHRleHQgdGhhdCB0aGUgaW1hZ2UgaXMgaW4gaXMgMTAwMHB4IHdpZGUgdGhlbiB0aGUgaW1hZ2Ugd2lsbCBiZSAyMDBweCB1c2luZyAyMCUuDQoNCg0KYG91dC53aWR0aGAgY2FuIGFsc28gYmUgdXNlZCB0byBsYXkgb3V0IG11bHRpLWNvbHVtbiBmaWd1cmVzLg0KDQoNCmBgYHtyIG91dC53aWR0aD1jKCc1MCUnLCAnNTAlJyksIGZpZy5zaG93PSdob2xkJ30NCmJveHBsb3QoMToxMCkNCnBsb3Qocm5vcm0oMTApKQ0KcGxvdChkZW5zaXR5KHJub3JtKDEwMCkpKQ0KYGBgDQoNCiMgVHVybiBTZWN0aW9ucyB0byBUYWJzDQoNClRhYiBmb3JtYXQgSFRNTCBkb2N1bWVudHMgYXJlIHNvbWV0aW1lcyBlYXN5IGZvciByZWFkZXJzIHRvIHJlYWQgdGhlIGRvY3VtZW50LiBSIE1hcmtkb3duIGNhbiBjb252ZXJ0IHNlY3Rpb24tZm9ybWF0IGRvY3VtZW50cyB0byB0YWItZm9ybWF0IGRvY3VtZW50cyBlYXNpbHkuIFRoZSBmb2xsb3dpbmcgaXMgYSBzaW1wbGUgZXhhbXBsZSBiYXNlZCBvbiB0aGUgcG9wdWxhciBbUiBtdGNhcnMgZGF0YXNldF0oaHR0cHM6Ly9yc3R1ZGlvLXB1YnMtc3RhdGljLnMzLmFtYXpvbmF3cy5jb20vNjE4MDBfZmFlYTkzNTQ4YzZiNDljYzkxY2QwYzVlZjUwNTk4OTQuaHRtbCkuDQoNCiMjIEFuIEV4YW1wbGUgb2YgVGFiIEZvcm1hdCBEb2N1bWVudCB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30NCg0KIyMjIFNjYXR0ZXIgUGxvdA0KDQpBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNjYXR0ZXIgcGxvdCBzaG93cyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGdyb3NzIGhvcnNlcG93ZXJgIGFuZCBgbWlsZSBwZXIgZ2FsbG9uYC4NCg0KDQpgYGB7ciBmaWcuYWxpZ249J2NlbnRlcicsIGZpZy53aWR0aD0zLCBmaWcuaGVpZ2h0PTN9DQptdGNhcnMgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBocCwgeSA9IG1wZykpICsNCiAgZ2VvbV9wb2ludCgpDQpgYGANCg0KIyMjIFN1bW1hcnkgVGFibGUNCg0KVGhlIGZvbGxvd2luZyBzdW1tYXJpemVkIHRhYmxlIGdpdmVzIHRoZSBkaXN0cmlidXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgZGF0YSBzZXQuDQoNCmBgYHtyfQ0KI3wgY29sbGFwc2UgPSBGQUxTRQ0Kc3VtbWFyeShtdGNhcnMpDQpgYGANCg0KDQojIEdJRiBBbmltYXRpb24NCg0KUiBoYXMgc2V2ZXJhbCBhbmltYXRpb24gbGlicmFyaWVzIG9uZSBjYW4gdXNlIHRvIGdlbmVyYXRlIGFuaW1hdGVkIGdyYXBocyB0byBleHBsYWluIHNvbWUgb2YgdGhlIGNvbXBsZXggY29uY2VwdHMgdmlzdWFsbHkuIFNvbWV0aW1lcyBwZW9wbGUgY2FuIGdlbmVyYXRlIGEgc2VyaWVzIG9mIHJlbGF0ZWQgaW1hZ2VzIGFuZCB0aGVuIHVzZSBzb2Z0d2FyZSBwcm9ncmFtcyB0byBtYWtlIGEgR0lGIGltYWdlLiBUaGlzIGV4dGVybmFsIEdJRiBjYW4gYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgUiBNYXJrZG93biBkb2N1bWVudC4gDQoNCmBgYHtyLCBhbmltYXRpb24uaG9vaz0nZ2lmc2tpJ30NCmZvciAoaSBpbiAxOjUpIHsNCiAgcGllKGMoaSAlJSA1LCAxLCAzKSwgY29sID0gYygncmVkJywgJ3llbGxvdycsICJibHVlIiksIGxhYmVscyA9IHBhc3RlKGkpKQ0KfQ0KYGBgDQoNCiMgTG9hZCBBbiBFeHRlcm5hbCBpbWFnZQ0KDQpJbiBhZGRpdGlvbiB0byB0aGUgUi1nZW5lcmF0ZWQgZ3JhcGhpY3MsIHdlIGNhbiBhbHNvIGluY2x1ZGUgZXh0ZXJuYWwgaW1hZ2VzIGluIGRpZmZlcmVudCBmb3JtYXRzIGluIHRoZSBSIE1hcmtkb3duIGRvY3VtZW50LiBgb3V0LndpZHRoPWAgYW5kIGBvdXQuaGVpZ2h0PWAgb3B0aW9ucyBzaG91bGQgYmUgdXNlZCB0byBjb250cm9sIHRoZSBzaXplIG9mIHRoZSBpbWFnZXMuIA0KDQpgYGB7ciwgZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAiNTAlIn0NCmluY2x1ZGVfZ3JhcGhpY3MoImh0dHBzOi8vZWRpdG9yLmFuYWx5dGljc3ZpZGh5YS5jb20vdXBsb2Fkcy83NTgxOXN0YXRzXzEwNTB4NTIwLnBuZyIpDQpgYGANCg0KIyBJbmxpbmUgQ2h1bmsgT3B0aW9ucw0KDQpJZiB0b28gbWFueSBjaHVuayBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBsYXkgb3V0IHRoZSBmaWd1cmUsIGl0IGlzIG5vdCBjb252ZW5pZW50IHRvIHB1dCBhbGwgb2YgdGhlbSBpbiB0aGUgY29kZSBjaHVuay4gT25lIHdheSB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24gaXMgdG8gdXNlIGlubGluZSBjaHVuayBvcHRpb25zLg0KDQoNCmBgYHtyfQ0KI3wgZmlnLndpZHRoID0gNSwgZmlnLmhlaWdodCA9IDQsDQojfCBmaWcuYWxpZ249J2NlbnRlcicsIGZpZy5jYXAgPSAiTXkgY2FwdGlvbiINCg0KcGxvdF9seSh4PW10Y2FycyR3dCx5PW10Y2FycyRtcGcsbW9kZSA9ICJtYXJrZXJzIixjb2xvciA9IGFzLmZhY3RvcihtdGNhcnMkdnMpKQ0KYGBgDQoNCiMgSW5jbHVkaW5nIENTUw0KDQpUaGVyZSBhcmUgdGhyZWUgd2F5cyBvZiBpbnNlcnRpbmcgYSBzdHlsZSBzaGVldCBpbiB0aGUgUk1hcmtkb3duIGRvY3VtZW50OiBpbmxpbmUgQ1NTLCBpbnRlcm5hbCBDU1MsIGFuZCBleHRlcm5hbCBDU1MuIFdlIGhhdmUgdXNlZCBhbGwgdGhyZWUgZGlmZmVyZW50IGZvcm1hdHMgb2YgQ1NTIGluIHRoaXMgUk1EIHRvIGZvcm1hdCB0aGUgdGV4dCBvciBkZWNvcmF0ZSB0aGUgbGF5b3V0IG9uIGRpZmZlcmVudCBvY2Nhc2lvbnMuIFRvIHN1bW1hcml6ZSwNCg0KKiAqKmlubGluZSBDU1MqKjogVGhpcyBpcyBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIGNoYW5nZSB0aGUgPGZvbnQgc3R5bGUgPSAiZm9udC1zaXplOiAxMHB4OyBjb2xvcjogZGFya3JlZDsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udC1mYW1pbHk6dmVyZGFuYTsiPiBmb250IHNpemUsIGZhY2UsIGNvbG9yLCBldGMuPC9mb250Pg0KDQoqICoqaW50ZXJuYWwgQ1NTKio6IFRoZSBpbnRlcm5hbCBDU1Mgd2FzIGluY2x1ZGVkIGF0IFlBTUwgYW5kIHNldHVwIGNvZGUgY2h1bmsgKFtIZXJlIElzIHRoZSBzY3JlZW5zaG90XShodHRwczovL3Blbmdkc2NpLmdpdGh1Yi5pby9TVEE0OTAvdzAxL2ltZy9pbnRlcm5hbENTUy5wbmcpKQ0KDQoqICoqRXh0ZXJuYWwgQ1NTKio6IFRoZSBleHRlcm5hbCBDU1Mgc3R5bGUgZmlsZSB1c2VkIGluIHRoaXMgZG9jdW1lbnQgY2FuIGJlIGZvdW5kIChbaGVyZV0oaHR0cHM6Ly9wZW5nZHNjaS5naXRodWIuaW8vU1RBNDkwL3cwMS9jc3MvY3BSTURzdHlsZS5jc3MpKQ0KDQoNCiMgIFZlcmJhdGltIENvZGUgQ2h1bmtzDQoNClR5cGljYWxseSB3ZSB3cml0ZSBjb2RlIGNodW5rcyBhbmQgaW5saW5lIGV4cHJlc3Npb25zIHRoYXQgd2Ugd2FudCB0byBiZSBwYXJzZWQgYW5kIGV2YWx1YXRlZCBieSBga25pdHJgLiBIb3dldmVyLCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHdyaXRlIGEgdHV0b3JpYWwgb24gdXNpbmcga25pdHJgLCB3ZSBtYXkgbmVlZCB0byBnZW5lcmF0ZSBhIHZlcmJhdGltIGNvZGUgY2h1bmsgb3IgaW5saW5lIGV4cHJlc3Npb24gdGhhdCBpcyBub3QgcGFyc2VkIGJ5IGtuaXRyLCBhbmQgd2Ugd2FudCB0byBkaXNwbGF5IHRoZSBjb250ZW50IG9mIHRoZSBjaHVuayBoZWFkZXIgYW5kIGFsbCByZWxhdGVkIG9wdGlvbnMuDQoNCmBgYGB7dmVyYmF0aW19DQoNCmBgYHtyIG91dC53aWR0aD1jKCc1MCUnLCAnNTAlJyksIGZpZy5zaG93PSdob2xkJ30NCmJveHBsb3QoMToxMCkNCnBsb3Qocm5vcm0oMTApKQ0KcGxvdChkZW5zaXR5KHJub3JtKDEwMCkpKQ0KYGBgDQoNCmBgYGANCg0K