Installation & readings
Rstudio is an IDE (Integrated Development Environment) that makes it
easier to write and execute R code.
R is a programming language that is used for a lot for data analysis
and statistics. We will introduce you to it’s usage. Time is short,
please :
Note: Should you want to know more, the guided tour for Rstudio is available.
install.packages("tidyverse", dependencies = TRUE)
This can be more challenging, if you have enough time to
try:
You will need to create a ssh key (The starts is the most difficult!
last step, but it is worth it !)
PLEASE LET ME KNOW IF YOU DID NOT MANAGE THIS BEFORE
WE MEET. We can eg. have a look during an online
meeting.
Why we need to do this ? It’s about Rproducible science and Open
data science
This part will be discussed in the course.
The way we will work will help us to do reproducible research. It
will help you (and us) to organize the data analysis work, and document
what you have done, including the reasons behind your choices.
Three months from now YOU might not remember the reasoning and all
the steps you have done in your analyses. Documenting what you are doing
at the same time you are doing it, is a very good practice.
This will save you time and struggles. What you have done will be
essential information for publication and manuscript revision.
Moreover, working this way, will allow you to start setting up your
analyses BEFORE all the data are collected. You will be able to re-run
all your code using updated data. This is helping you being
pro-active.
What are the requirements of reproducible research ? The
following article mention
10
Rules of reproducible research
- For Every Result, Keep Track of How It Was Produced
- Avoid Manual Data Manipulation Steps
- Archive the Exact Versions of All External Programs Used
- Version Control: Use it for all Customized Scripts
- Record All Intermediate Results, When Possible in Standardized
Formats
- For Analyses That Include Randomness, Note Underlying Random
Seeds
- Always Store Raw Data behind Plots
- Generate Hierarchical Analysis Output, Allowing Layers of Increasing
Detail to Be Inspected
- Connect Textual Statements to Underlying Results
- Provide Public Access to Scripts, Runs, and Results
We will see that using R and Rstudio can help you to relatively easy
follow all steps but 4 and 10. The latest, which require using a version
control system like Git, and eventually an associated online platform
like github that allows to store your code on the web. Github in turn
can be used during the publication and can facilitate the creation of
DOI via integration with Zenodo. This then allows people to cite your
data analysis work and code!
WARNING: NEVER PUT YOUR DATA ON GITHUB, only the code to
process the data
Additional ressources you can eventually read
We might not have time to go into details with git and github, but we
will try to
But if you feel like it, you can learn Git for version control (it
can be used with the command line - aka Terminal
panel that
is available in Rstudio):
- Git-Novice is
a good lesson to start with.
Preliminary training program
- github and R - get started with a project (understand the basic
principles)
- data wrangling
- data exploration and visualization (ensure data quality, what do I
have)
- eventually … going further
Back to Index
LS0tDQp0aXRsZTogImByIHBhcmFtcyR0aXRsZWAiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiDQphdXRob3I6IEV2ZSBaZXlsIEZpc2tlYmVjayBhbmQgTWFkZWxhaW5lIE5vcnN0csO2bQ0KcGFyYW1zOg0KICB0aXRsZTogIkJlZm9yZSB3ZSBtZWV0OiBJbnN0YWxsYXRpb24gJiByZWFkaW5ncyIgDQogIHByb2plY3RfcGF0aDogImByIGhlcmU6OmhlcmUoKWAiDQogIA0Ka25pdDogKGZ1bmN0aW9uKGlucHV0RmlsZSwgZW5jb2RpbmcpIHsNCiAgcm1hcmtkb3duOjpyZW5kZXIoaW5wdXRGaWxlLCBlbmNvZGluZyA9IGVuY29kaW5nLCBvdXRwdXRfZGlyID0gIi4uLy4uL2RvY3MiKSB9KQ0KICANCm91dHB1dDogDQogIA0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICAgIGNzczogLi4vc3R5bGVzL3N0eWxlLmNzcw0KICAgICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICAgIHRvY19kZXB0aDogNA0KICAgICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICAgIGF1dGhvcjogcGFyYW1zJGF1dGhvcg0KICAgICAgaGlnaGxpZ2h0OiBlc3ByZXNzbw0KICAgICAgDQoNCiAgDQplZGl0b3Jfb3B0aW9uczogDQogIG1hcmtkb3duOiANCiAgICB3cmFwOiA3Mg0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCiMgSW5zdGFsbGF0aW9uICYgcmVhZGluZ3MNCg0KUnN0dWRpbyBpcyBhbiBJREUgKEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQpIHRoYXQgbWFrZXMgaXQNCmVhc2llciB0byB3cml0ZSBhbmQgZXhlY3V0ZSBSIGNvZGUuDQoNClIgaXMgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aGF0IGlzIHVzZWQgZm9yIGEgbG90IGZvciBkYXRhIGFuYWx5c2lzIGFuZA0Kc3RhdGlzdGljcy4gV2Ugd2lsbCBpbnRyb2R1Y2UgeW91IHRvIGl0J3MgdXNhZ2UuIFRpbWUgaXMgc2hvcnQsIHBsZWFzZSA6DQoNCi0gICBbIF0g4oCCSW5zdGFsbCBSIHN0dWRpbyAtIE5vbiBjb21tZXJjaWFsID0gUnN0dWRpbyBEZXNrdG9wIChmcmVlDQogICAgZWRpdGlvbikuIFZpc2l0IFtwb3NpdA0KICAgIHdlYnBhZ2VdKGh0dHBzOi8vcG9zaXQuY28vZG93bmxvYWQvcnN0dWRpby1kZXNrdG9wLykgZm9yDQogICAgaW5zdGFsbGF0aW9uLg0KDQotICAgWyBdIOKAgkdldCBmYW1pbGlhciB3aXRoIHNvbWUgYmFzaWMgdm9jYWJ1bGFyeSA6IFJzdHVkaW8gaW50ZXJmYWNlDQogICAgKGJlbG93KS4gTmFtZXMgb2YgdGhlIHdpbmRvd3MgYXJlIGluIHJlZC4NCg0KPGltZyBzcmM9Imh0dHBzOi8vZG9jcy5wb3NpdC5jby9pZGUvdXNlci9pZGUvZ3VpZGUvdWkvaW1hZ2VzL3JzdHVkaW8tcGFuZXMtbGFiZWxlZC5qcGVnIiBhbHQ9InBhbmVzIiBjbGFzcz0iLmltZzEiLz4NCg0KTm90ZTogU2hvdWxkIHlvdSB3YW50IHRvIGtub3cgbW9yZSwgdGhlIGd1aWRlZCB0b3VyIGZvcg0KW1JzdHVkaW9dKGh0dHBzOi8vZG9jcy5wb3NpdC5jby9pZGUvdXNlci8pIGlzIGF2YWlsYWJsZS4NCg0KLSAgIFsgXSDigIJIYXZlIGEgbG9vayBhdCB0aGUgZm9sbG93aW5nIHZpZGVvOiBbUm1hcmtkb3duOiB3aGF0IGl0IGlzIGFuZA0KICAgIGl0J3MgcG90ZW50aWFsDQogICAgdXNhZ2VzXShodHRwczovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbS9hdXRob3JpbmdfcXVpY2tfdG91ci5odG1sKSBXZQ0KICAgIHdpbGwgdXNlIFJtYXJrZG93biB0byBydW4gY29kZSBkdXJpbmcgdGhlIGNvdXJzZS4gVGhpcyB3aWxsIGFsc28NCiAgICBhbGxvdyB5b3UgdG8gdGFrZSBub3RlcyBhdCB0aGUgc2FtZSB0aW1lLg0KICAgIA0KLSAgIFsgXSDigIJJbnN0YWxsIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMvbWV0YXBhY2thZ2UgaW4gUiwgYnkgdHlwaW5nIGV4YWN0bHkgdGhlIA0KY29tbWFuZCBiZWxvdyBpbiBSc3R1ZGlvICoqY29uc29sZSoqIGFuZCB0aGVuIHByZXNzaW5nIGBlbnRlcmAuIFdlIHdpbGwgZXhwbGFpbiBsYXRlcg0KZHVyaW5nIHRoZSBjb3Vyc2UgKHdlIHdpbGwgaW5zdGFsbCBvdGhlciBwYWNrYWdlcykuIFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgdGltZS4NCg0KDQpgYGB7ciBzaG93IGNvZGUgLSBkbyBub3QgcnVuLCBlY2hvPVRSVUUsICBldmFsID0gRkFMU0UsIGNsYXNzLnNvdXJjZSA9ICJmb2xkLXNob3cifQ0KaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkNCmBgYA0KDQoNCiAgICANCi0gWyBdIOKAgiBJZiB5b3UgYXJlIHVuY2VydGFpbiBvZiB3aGF0IGFyZSB0aGUgYmVzdCBwcmFjdGljZXMgZm9yIHJlZ2lzdGVyaW5nIGFuZCBvcmdhbml6aW5nIA0KeW91ciBkYXRhIHBsZWFzZSByZWFkIHRoaXMgdHV0b3JpYWwsIHBhcnRpY3VsYXJseSB0aGUgc2VjdGlvbiBvZiANCltzcHJlYWRzaGVldCBiZXN0IHByYWN0aWNlc10oaHR0cHM6Ly91Y2RhdmlzZGF0YWxhYi5naXRodWIuaW8vd29ya3Nob3Bfa2VlcGluZ19kYXRhX3RpZHkvI2NvbnRlbnQpLg0KTkI6IFRvb2xzIGxpa2UgS29ib1Rvb2xib3ggYW5kIFdIT05FVCBhcmUgdXN1YWxseSB1c2VmdWwgdG8gaGVscCBmb2xsb3dpbmcgdGhvc2UgcHJpbmNpcGxlcw0Kd2hlbiByZWdpc3RlcmluZyBkYXRhLCBidXQgdW5kZXJzdGFuZGluZyBtb3JlIGFib3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRob3NlIHJlcXVpcmVtZW50cw0KaXMgaW1wb3J0YW50LiAgDQoNCi0gWyBdIOKAglBsZWFzZSBpbnN0YWxsIFtnaXRdKGh0dHBzOi8vZ2l0LXNjbS5jb20vZG93bmxvYWRzL3dpbikgdmVyc2lvbiBjb250cm9sIA0KdXRpbGl0eSBvbiB5b3VyIFBDIGFuZCByZWFkIFt0aGlzXShodHRwczovL3N3Y2FycGVudHJ5LmdpdGh1Yi5pby9naXQtbm92aWNlLzAxLWJhc2ljcy5odG1sKSANCnRvIHVuZGVyc3RhbmQgd2h5IHZlcnNpb24gY29udHJvbCBpcyBhIGZhbnRhc3RpYyB0b29sLg0KDQotIFsgXSDigIJQbGVhc2UgY3JlYXRlIGEgW2dpdGh1YiBhY2NvdW50XShodHRwczovL2dpdGh1Yi5jb20vKSBpZiB5b3UgZG8gbm90IGhhdmUgDQpvbmUuIFlvdSBjYW4gZWcuIGZvbGxvdyANClt0aGlzIHR1dG9yaWFsXShodHRwczovL3N3Y2FycGVudHJ5LmdpdGh1Yi5pby9naXQtbm92aWNlLyNjcmVhdGluZy1hLWdpdGh1Yi1hY2NvdW50KQ0KDQoNCl9UaGlzIGNhbiBiZSBtb3JlIGNoYWxsZW5naW5nLCBpZiB5b3UgaGF2ZSBlbm91Z2ggdGltZSB0byB0cnk6XyANCg0KWW91IHdpbGwgbmVlZCB0byBjcmVhdGUgYSBzc2gga2V5IChUaGUgc3RhcnRzIGlzIHRoZSBtb3N0IGRpZmZpY3VsdCEgbGFzdCBzdGVwLCANCmJ1dCBpdCBpcyB3b3J0aCBpdCAhKQ0KDQotIFsgXSDigIIgUGxlYXNlIHRyeSB0byBjcmVhdGUgYSBzc2gta2V5LCBmb2xsb3dpbmcNClt0aGlzIHR1dG9yaWFsXShodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hdXRoZW50aWNhdGlvbi9jb25uZWN0aW5nLXRvLWdpdGh1Yi13aXRoLXNzaC9hZGRpbmctYS1uZXctc3NoLWtleS10by15b3VyLWdpdGh1Yi1hY2NvdW50KQ0KDQoNCi0gWyBdIOKAgiBQbGVhc2UgdHJ5IHRvIGNvbm5lY3QgeW91ciBnaXRodWIgYWNjb3VudCB0byB5b3VyIFJzdHVkaW8sIA0KeW91IGNhbiBoYXZlIGEgbG9vayB0byBbdGhpcyB0dXRvcmlhbF0oaHR0cHM6Ly9oYXBweWdpdHdpdGhyLmNvbS9yc3R1ZGlvLWdpdC1naXRodWIpIA0KY2FuIGJlIGhlbHBmdWwuDQoNCioqPG1hcms+PGI+UExFQVNFIExFVCBNRSBLTk9XIElGIFlPVSBESUQgTk9UIE1BTkFHRSBUSElTIEJFRk9SRSBXRSBNRUVULjwvYj48L21hcms+DQpXZSBjYW4gZWcuIGhhdmUgYSBsb29rIGR1cmluZyBhbiBvbmxpbmUgbWVldGluZy4qKg0KDQoNCiMgV2h5IHdlIG5lZWQgdG8gZG8gdGhpcyA/IEl0J3MgYWJvdXQgUnByb2R1Y2libGUgc2NpZW5jZSBhbmQgT3BlbiBkYXRhIHNjaWVuY2UNClRoaXMgcGFydCB3aWxsIGJlIGRpc2N1c3NlZCBpbiB0aGUgY291cnNlLiANCg0KVGhlIHdheSB3ZSB3aWxsIHdvcmsgd2lsbCBoZWxwIHVzIHRvIGRvIHJlcHJvZHVjaWJsZSByZXNlYXJjaC4gSXQgd2lsbCANCmhlbHAgeW91IChhbmQgdXMpIHRvIG9yZ2FuaXplIHRoZSBkYXRhIGFuYWx5c2lzIHdvcmssIGFuZCBkb2N1bWVudCB3aGF0IHlvdSANCmhhdmUgZG9uZSwgaW5jbHVkaW5nIHRoZSByZWFzb25zIGJlaGluZCB5b3VyIGNob2ljZXMuDQoNClRocmVlIG1vbnRocyBmcm9tIG5vdyBZT1UgbWlnaHQgbm90IHJlbWVtYmVyIHRoZSByZWFzb25pbmcgYW5kIGFsbCB0aGUgDQpzdGVwcyB5b3UgaGF2ZSBkb25lIGluIHlvdXIgYW5hbHlzZXMuIERvY3VtZW50aW5nIHdoYXQgeW91IGFyZSBkb2luZyBhdCB0aGUgDQpzYW1lIHRpbWUgeW91IGFyZSBkb2luZyBpdCwgaXMgYSB2ZXJ5IGdvb2QgcHJhY3RpY2UuIA0KDQpUaGlzIHdpbGwgc2F2ZSB5b3UgdGltZSBhbmQgc3RydWdnbGVzLiBXaGF0IHlvdSBoYXZlIGRvbmUgd2lsbCBiZSBlc3NlbnRpYWwgaW5mb3JtYXRpb24NCmZvciBwdWJsaWNhdGlvbiBhbmQgbWFudXNjcmlwdCByZXZpc2lvbi4gDQoNCjwhLS0gbGFiIGpvdXJuYWwgdG8gZGF0YSBqb3VybmFsLS0+DQoNCk1vcmVvdmVyLCB3b3JraW5nIHRoaXMgd2F5LCB3aWxsIGFsbG93IHlvdSB0byBzdGFydCBzZXR0aW5nIHVwIHlvdXIgYW5hbHlzZXMgDQpCRUZPUkUgYWxsIHRoZSBkYXRhIGFyZSBjb2xsZWN0ZWQuIFlvdSB3aWxsIGJlIGFibGUgdG8gcmUtcnVuIGFsbCB5b3VyIGNvZGUNCnVzaW5nIHVwZGF0ZWQgZGF0YS4gVGhpcyBpcyBoZWxwaW5nIHlvdSBiZWluZyBwcm8tYWN0aXZlLiANCg0KV2hhdCBhcmUgdGhlIDx1PnJlcXVpcmVtZW50cyBvZiByZXByb2R1Y2libGUgcmVzZWFyY2ggPzwvdT4gDQpUaGUgZm9sbG93aW5nIGFydGljbGUgbWVudGlvbiAgDQpbMTAgUnVsZXMgb2YgcmVwcm9kdWNpYmxlIHJlc2VhcmNoXShodHRwczovL2pvdXJuYWxzLnBsb3Mub3JnL3Bsb3Njb21wYmlvbC9hcnRpY2xlP2lkPTEwLjEzNzEvam91cm5hbC5wY2JpLjEwMDMyODUpDQoNCj4gMS4gRm9yIEV2ZXJ5IFJlc3VsdCwgS2VlcCBUcmFjayBvZiBIb3cgSXQgV2FzIFByb2R1Y2VkDQo+IDIuIEF2b2lkIE1hbnVhbCBEYXRhIE1hbmlwdWxhdGlvbiBTdGVwcw0KPiAzLiBBcmNoaXZlIHRoZSBFeGFjdCBWZXJzaW9ucyBvZiBBbGwgRXh0ZXJuYWwgUHJvZ3JhbXMgVXNlZA0KPiA0LiBWZXJzaW9uIENvbnRyb2w6IFVzZSBpdCBmb3IgYWxsIEN1c3RvbWl6ZWQgU2NyaXB0cw0KPiA1LiBSZWNvcmQgQWxsIEludGVybWVkaWF0ZSBSZXN1bHRzLCBXaGVuIFBvc3NpYmxlIGluIFN0YW5kYXJkaXplZCBGb3JtYXRzDQo+IDYuIEZvciBBbmFseXNlcyBUaGF0IEluY2x1ZGUgUmFuZG9tbmVzcywgTm90ZSBVbmRlcmx5aW5nIFJhbmRvbSBTZWVkcw0KPiA3LiBBbHdheXMgU3RvcmUgUmF3IERhdGEgYmVoaW5kIFBsb3RzDQo+IDguIEdlbmVyYXRlIEhpZXJhcmNoaWNhbCBBbmFseXNpcyBPdXRwdXQsIEFsbG93aW5nIExheWVycyBvZiBJbmNyZWFzaW5nIERldGFpbCB0byBCZSBJbnNwZWN0ZWQNCj4gOS4gQ29ubmVjdCBUZXh0dWFsIFN0YXRlbWVudHMgdG8gVW5kZXJseWluZyBSZXN1bHRzDQo+IDEwLiBQcm92aWRlIFB1YmxpYyBBY2Nlc3MgdG8gU2NyaXB0cywgUnVucywgYW5kIFJlc3VsdHMNCg0KV2Ugd2lsbCBzZWUgdGhhdCB1c2luZyBSIGFuZCBSc3R1ZGlvIGNhbiBoZWxwIHlvdSB0byByZWxhdGl2ZWx5IGVhc3kgZm9sbG93IGFsbCANCnN0ZXBzIGJ1dCA0IGFuZCAxMC4gVGhlIGxhdGVzdCwgd2hpY2ggcmVxdWlyZSB1c2luZyBhIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gDQpsaWtlIEdpdCwgYW5kIGV2ZW50dWFsbHkgYW4gYXNzb2NpYXRlZCBvbmxpbmUgcGxhdGZvcm0gbGlrZSBnaXRodWIgdGhhdCBhbGxvd3MgDQp0byBzdG9yZSB5b3VyIGNvZGUgb24gdGhlIHdlYi4gR2l0aHViIGluIHR1cm4gY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSANCnB1YmxpY2F0aW9uIGFuZCBjYW4gZmFjaWxpdGF0ZSB0aGUgY3JlYXRpb24gb2YgRE9JIHZpYSBpbnRlZ3JhdGlvbiB3aXRoIFplbm9kby4gDQpUaGlzIHRoZW4gYWxsb3dzIHBlb3BsZSB0byBjaXRlIHlvdXIgZGF0YSBhbmFseXNpcyB3b3JrIGFuZCBjb2RlIQ0KDQo8bWFyaz48dT5XQVJOSU5HOjwvdT4NCk5FVkVSIFBVVCBZT1VSIERBVEEgT04gR0lUSFVCLCBvbmx5IHRoZSBjb2RlIHRvIHByb2Nlc3MgdGhlIGRhdGEgDQo8L21hcms+DQoNCg0KIyBBZGRpdGlvbmFsIHJlc3NvdXJjZXMgeW91IGNhbiBldmVudHVhbGx5IHJlYWQNCg0KDQotIFtUdXRvcmlhbDogT3BlbiBEYXRhIFNjaWVuY2Ugd2l0aCBSXShodHRwczovL2NhcnBlbnRyaWVzLWluY3ViYXRvci5naXRodWIuaW8vb3Blbi1zY2llbmNlLXdpdGgtci8pDQotIFtBcnRpY2xlOiAxMCBSdWxlcyBvZiByZXByb2R1Y2libGUgcmVzZWFyY2hdKGh0dHBzOi8vam91cm5hbHMucGxvcy5vcmcvcGxvc2NvbXBiaW9sL2FydGljbGU/aWQ9MTAuMTM3MS9qb3VybmFsLnBjYmkuMTAwMzI4NSkNCi0gW1R1dG9yaWFsOiBJbnRyb2R1Y3Rpb24gdG8gUm1hcmtkb3duIGFuZCByZXByb2R1Y2libGUgcmVzZWFyY2hdKGh0dHBzOi8vbS1jbGFyay5naXRodWIuaW8vSW50cm9kdWN0aW9uLXRvLVJtYXJrZG93bi8pDQoNCg0KV2UgbWlnaHQgbm90IGhhdmUgdGltZSB0byBnbyBpbnRvIGRldGFpbHMgd2l0aCBnaXQgYW5kIGdpdGh1YiwgYnV0IHdlIHdpbGwgdHJ5IHRvDQoNCg0KQnV0IGlmIHlvdSBmZWVsIGxpa2UgaXQsIHlvdSBjYW4gbGVhcm4gR2l0IGZvciB2ZXJzaW9uIGNvbnRyb2wgKGl0IGNhbiBiZSB1c2VkIHdpdGggDQp0aGUgY29tbWFuZCBsaW5lIC0gYWthIGBUZXJtaW5hbGAgcGFuZWwgdGhhdCBpcyBhdmFpbGFibGUgaW4gUnN0dWRpbyk6ICANCi0gW0dpdC1Ob3ZpY2VdKGh0dHBzOi8vc3djYXJwZW50cnkuZ2l0aHViLmlvL2dpdC1ub3ZpY2UvKSBpcyBhIGdvb2QgbGVzc29uIHRvIHN0YXJ0IHdpdGguDQoNCg0KIyBQcmVsaW1pbmFyeSB0cmFpbmluZyBwcm9ncmFtIA0KDQotIGdpdGh1YiBhbmQgUiAtIGdldCBzdGFydGVkIHdpdGggYSBwcm9qZWN0ICh1bmRlcnN0YW5kIHRoZSBiYXNpYyBwcmluY2lwbGVzKQ0KLSBkYXRhIHdyYW5nbGluZw0KLSBkYXRhIGV4cGxvcmF0aW9uIGFuZCB2aXN1YWxpemF0aW9uIChlbnN1cmUgZGF0YSBxdWFsaXR5LCB3aGF0IGRvIEkgaGF2ZSkNCi0gZXZlbnR1YWxseSAuLi4gZ29pbmcgZnVydGhlcg0KDQoNCkJhY2sgdG8gW0luZGV4XShpbmRleC5odG1sKQ==