workflowr
Last updated: 2025-05-15
Checks: 2
0
Knit directory:
DigitalResearchSkillsNetwork/
This reproducible R Markdown
analysis was created with workflowr (version
1.7.1). The Checks tab describes the reproducibility checks
that were applied when the results were created. The Past
versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git
repository, you know the exact version of the code that produced these
results.
Great! You are using Git for version control. Tracking code development
and connecting the code version to the results is critical for
reproducibility.
The results in this page were generated with repository version
b102ce1 .
See the Past versions tab to see a history of the changes made
to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for
the analysis have been committed to Git prior to generating the results
(you can use wflow_publish or
wflow_git_commit). workflowr only checks the R Markdown
file, but you know if there are other scripts or data files that it
depends on. Below is the status of the Git repository when the results
were generated:
Ignored files:
Ignored: .DS_Store
Ignored: .Rhistory
Ignored: analysis/.DS_Store
Ignored: analysis/.RData
Ignored: analysis/.Rhistory
Ignored: analysis/adit/.DS_Store
Ignored: plots/
Ignored: raw/
Untracked files:
Untracked: analysis/adit/0_content management.csv
Untracked: analysis/x202504_Workshop.Rmd
Unstaged changes:
Deleted: analysis/202504_Workshop.Rmd
Modified: analysis/_site.yml
Modified: workflow.R
Note that any generated files, e.g. HTML, png, CSS, etc., are not
included in this status report because it is ok for generated content to
have uncommitted changes.
These are the previous versions of the repository in which changes were
made to the R Markdown (analysis/0_resources.Rmd) and HTML
(docs/0_resources.html) files. If you’ve configured a
remote Git repository (see ?wflow_git_remote), click on the
hyperlinks in the table below to view the files as they were in that
past version.
File
Version
Author
Date
Message
Rmd
b102ce1
DrThomasOneil
2025-05-15
wflow_publish(files)
html
fb553e5
DrThomasOneil
2025-05-14
Build site.
html
cff7923
DrThomasOneil
2025-05-07
Build site.
Rmd
ff95f8f
DrThomasOneil
2025-05-07
wflow_publish(files)
html
16a9613
DrThomasOneil
2025-04-30
Build site.
html
862d6b6
DrThomasOneil
2025-04-29
Build site.
html
938818e
DrThomasOneil
2025-04-14
Build site.
html
ed690e6
DrThomasOneil
2025-04-14
Build site.
html
cb886ef
DrThomasOneil
2025-04-10
Build site.
html
f6c0433
YuchenLi
2025-04-09
Build site.
html
8d78b0f
YuchenLi
2025-04-09
Build site.
html
7421f69
DrThomasOneil
2025-04-08
Build site.
html
f2d3385
DrThomasOneil
2025-03-24
update
html
517dcf9
DrThomasOneil
2025-03-24
Build site.
html
6a4432b
DrThomasOneil
2025-03-24
Build site.
html
1f218f3
DrThomasOneil
2025-03-24
Build site.
html
dca90e9
DrThomasOneil
2025-03-24
Build site.
html
1d1c076
DrThomasOneil
2025-03-24
Build site.
html
956ba9b
DrThomasOneil
2025-03-24
Build site.
Rmd
6b72e34
DrThomasOneil
2025-03-24
wflow_publish(c("analysis/*.Rmd"))
html
d600337
DrThomasOneil
2025-03-18
Build site.
html
b537f69
DrThomasOneil
2025-03-18
Build site.
html
b7982e9
DrThomasOneil
2025-03-16
Build site.
html
fc5dd81
DrThomasOneil
2025-03-16
Build site.
html
8e1c1a3
DrThomasOneil
2025-03-16
Build site.
html
36dc5fc
DrThomasOneil
2025-03-03
Build site.
html
49bb28c
DrThomasOneil
2025-03-03
Build site.
html
8258922
DrThomasOneil
2025-03-03
Build site.
html
71646a5
DrThomasOneil
2025-02-27
Build site.
Rmd
c05aafe
DrThomasOneil
2025-02-27
wflow_publish(c("analysis/*.Rmd"))
html
c7f5738
DrThomasOneil
2025-02-24
Build site.
html
79d09b1
DrThomasOneil
2025-02-24
Build site.
html
a5c9f2c
DrThomasOneil
2025-02-24
Build site.
html
ca2c086
DrThomasOneil
2025-02-24
Build site.
html
fca0503
DrThomasOneil
2025-02-24
Build site.
html
af42fba
DrThomasOneil
2025-02-24
Build site.
html
1aeefc7
DrThomasOneil
2025-02-20
Build site.
html
5fe30de
DrThomasOneil
2025-02-20
Build site.
html
5ef4f12
DrThomasOneil
2025-02-11
Build site.
Rmd
4f9c6de
DrThomasOneil
2025-02-11
update book
html
f48f4f0
DrThomasOneil
2025-02-10
Build site.
html
3bfe847
DrThomasOneil
2025-02-10
Build site.
html
b14f3b5
DrThomasOneil
2025-02-10
Build site.
html
bfba3e0
DrThomasOneil
2025-02-07
Build site.
Rmd
b7989a4
DrThomasOneil
2025-02-07
wflow_publish(c("analysis/*.Rmd"))
html
f3d6f87
DrThomasOneil
2025-02-04
Build site.
html
f654b8d
DrThomasOneil
2025-02-04
Build site.
Rmd
e6ea78d
DrThomasOneil
2025-02-04
wflow_publish(c("analysis/*.Rmd"))
html
4968925
DrThomasOneil
2025-01-30
Build site.
Rmd
afccf59
DrThomasOneil
2025-01-30
wflow_publish(c("analysis/*.Rmd"))
html
299ff3d
DrThomasOneil
2025-01-28
Build site.
Rmd
272b312
DrThomasOneil
2025-01-28
wflow_publish(c("analysis/*"))
html
023005d
DrThomasOneil
2025-01-07
Build site.
html
c893d70
DrThomasOneil
2025-01-06
Build site.
Rmd
8eec2ce
DrThomasOneil
2025-01-06
Initial Deployment
html
660b0f8
DrThomasOneil
2025-01-06
Build site.
html
2e79a1d
DrThomasOneil
2025-01-06
Build site.
Rmd
451a21f
DrThomasOneil
2025-01-06
Initial Deployment
We’ll drop resources that we find
that might be useful to others.
Computational Genomics with R
Computational Genomics
with R is an exceptionally comprehensive resource for biomedical
bioinformatics. It covers a broad range of topics—statistics, machine
learning, sequencing data processing, and more—while providing both code
examples and clear explanations. Although it may not be the most
accessible starting point for wet-lab researchers, it serves as an
invaluable reference for deeper explorations of bioinformatic
analyses.
10X Analysis Resources
10X Genomics are a unique company, in that they provide a
lot of supporting materials. In the drop down below, we have listed
a series of resources that 10X have provided, including how-to videos
and tutorials.
Drop-down
Xenium In situ
Downloads and documentation
Webinars and workshops
Visium HD
Downloads and documentation
Webinars and workshops
Stretchly
Stretchly is an
open-source app designed to encourage healthy work habits by prompting
regular short (30-second) and long (20-minute) breaks. I’ve found it
invaluable for maintaining focus and preventing burnout. It’s highly
customizable, allowing you to tailor prompts to your needs.
roadmap.sh
roadmap.sh provides structured
learning pathways for various tech-related skills, from Data Science to
DevOps. The Data Science and AI roadmap outlines essential topics such
as mathematics, statistics, and coding, along with curated free and paid
learning resources. These roadmaps are community-driven and frequently
updated, making them a great guide for self-paced learning.
LinkedIn Learning
LinkedIn Learning
offers a vast library of online courses covering data analysis,
programming (including R and Python), statistics, research skills, and
professional development. There is a short R
for Data Science course that is quite nice.
You should have access to LinkedIn Learning through your University
email. Otherwise, WIMR staff can apply for a license through WIMR.
Interactive R learning UI
learnr is a package that you
can install which provides a nice little UI if you want to practice
basicR skills and prefer some interactivity.
ggplot2 book
ggplot2:Elegant
Graphics for Data Analysis is a nice, comprehensive handbook for
graphing using ggplot2. It covers the basic layout, different graph
types, customizing elements such as colours, group overlays,
annotations, etc.
LS0tDQp0aXRsZTogIkV4dHJhIFJlc291cmNlcyINCm91dHB1dDoNCiAgd29ya2Zsb3dyOjp3Zmxvd19odG1sOg0KICAgIHRvYzogbm8NCi0tLQ0KDQo8ZGV2IGNsYXNzPSJoaW50LWluZm8iPiANCioqV2UnbGwgZHJvcCByZXNvdXJjZXMgdGhhdCB3ZSBmaW5kIHRoYXQgbWlnaHQgYmUgdXNlZnVsIHRvIG90aGVycy4qKg0KPC9kZXY+DQoNCiMjIyBDb21wdXRhdGlvbmFsIEdlbm9taWNzIHdpdGggUg0KDQpbQ29tcHV0YXRpb25hbCBHZW5vbWljcyB3aXRoIFJdKGh0dHBzOi8vY29tcGdlbm9tci5naXRodWIuaW8vYm9vay8pIGlzIGFuIGV4Y2VwdGlvbmFsbHkgY29tcHJlaGVuc2l2ZSByZXNvdXJjZSBmb3IgYmlvbWVkaWNhbCBiaW9pbmZvcm1hdGljcy4gSXQgY292ZXJzIGEgYnJvYWQgcmFuZ2Ugb2YgdG9waWNz4oCUc3RhdGlzdGljcywgbWFjaGluZSBsZWFybmluZywgc2VxdWVuY2luZyBkYXRhIHByb2Nlc3NpbmcsIGFuZCBtb3Jl4oCUd2hpbGUgcHJvdmlkaW5nIGJvdGggY29kZSBleGFtcGxlcyBhbmQgY2xlYXIgZXhwbGFuYXRpb25zLiBBbHRob3VnaCBpdCBtYXkgbm90IGJlIHRoZSBtb3N0IGFjY2Vzc2libGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdldC1sYWIgcmVzZWFyY2hlcnMsIGl0IHNlcnZlcyBhcyBhbiBpbnZhbHVhYmxlIHJlZmVyZW5jZSBmb3IgZGVlcGVyIGV4cGxvcmF0aW9ucyBvZiBiaW9pbmZvcm1hdGljIGFuYWx5c2VzLg0KDQojIyMgMTBYIEFuYWx5c2lzIFJlc291cmNlcw0KDQoxMFggR2Vub21pY3MgYXJlIGEgdW5pcXVlIGNvbXBhbnksIGluIHRoYXQgdGhleSBwcm92aWRlICphIGxvdCogb2Ygc3VwcG9ydGluZyBtYXRlcmlhbHMuIEluIHRoZSBkcm9wIGRvd24gYmVsb3csIHdlIGhhdmUgbGlzdGVkIGEgc2VyaWVzIG9mIHJlc291cmNlcyB0aGF0IDEwWCBoYXZlIHByb3ZpZGVkLCBpbmNsdWRpbmcgaG93LXRvIHZpZGVvcyBhbmQgdHV0b3JpYWxzLiANCg0KPGRldGFpbHM+PHN1bW1hcnk+KipEcm9wLWRvd24qKjwvc3VtbWFyeT48ZGl2Pg0KDQojIyMjIFhlbml1bSBJbiBzaXR1DQoNCioqRG93bmxvYWRzIGFuZCBkb2N1bWVudGF0aW9uKioNCg0KLSBbWGVuaXVtIEFuYWx5c2lzIE92ZXJ2aWV3XShodHRwczovL3VybC5hdS5tLm1pbWVjYXN0cHJvdGVjdC5jb20vcy82c0p0Q3huZ3dPZnhSeUszd3N2aDFmeXJiNFE/ZG9tYWluPTEweGdlbm9taWNzLmNvbSkNCg0KLSBbWGVuaXVtIE9uYm9hcmQgQW5hbHlzaXNdKGh0dHBzOi8vdXJsLmF1Lm0ubWltZWNhc3Rwcm90ZWN0LmNvbS9zL3I3ODFDeW9qeFFUTDJnRVJrY1FpR2Z4SUVMYz9kb21haW49MTB4Z2Vub21pY3MuY29tKSwgW1hlbml1bSBSYW5nZXJdKGh0dHBzOi8vdXJsLmF1Lm0ubWltZWNhc3Rwcm90ZWN0LmNvbS9zLy1RMEJDenZreVZDNHczdkE5Q0tzWmY5dVRJcD9kb21haW49MTB4Z2Vub21pY3MuY29tKQ0KDQotIFtYZW5pdW0gRXhwbG9yZXJdKGh0dHBzOi8vdXJsLmF1Lm0ubWltZWNhc3Rwcm90ZWN0LmNvbS9zL3NSNGtDQU5wZ2pDRWxnTXoyQ1F0a2ZHdVFsaD9kb21haW49MTB4Z2Vub21pY3MuY29tKQ0KDQoqKldlYmluYXJzIGFuZCB3b3Jrc2hvcHMqKg0KDQotIFtEZW15c3RpZnlpbmcgc2luZ2xlLWNlbGwgYW5kIHNwYXRpYWwgc2VxdWVuY2luZyBkYXRhIGFuYWx5c2lzOiBUaGUgcGF0aCB0byBtYWtpbmcgYmlvbG9naWNhbCBkaXNjb3ZlcmllcyByb3V0aW5lXShodHRwczovL3VybC5hdS5tLm1pbWVjYXN0cHJvdGVjdC5jb20vcy81d0gxQ0JOcWpsQzhSMTNPQnMxdUdmMmV5OW8/ZG9tYWluPTEweGdlbm9taWNzLmNvbSkNCg0KLSBbWGVuaXVtOiBTcGF0aWFsIGFuYWx5c2lzIG9mIGx1bmcgY2FuY2VycyByZXZlYWxzIGhldGVyb2dlbmVpdHkgaW4gdHVtb3IgbWljcm8tZW52aXJvbm1lbnRzXShodHRwczovL3VybC5hdS5tLm1pbWVjYXN0cHJvdGVjdC5jb20vcy9DRHFoQ0QxdmxwVDNKMVFrMGZSQ21maklhZHk/ZG9tYWluPTEweGdlbm9taWNzLmNvbSkNCg0KLSBbWGVuaXVtIHRvIHVucmF2ZWwgdHVtb3ItaW1tdW5lIG1pY3JvZW52aXJvbm1lbnQgZHVyaW5nIGxlcHRvbWVuaW5nZWFsIG1ldGFzdGFzaXNdKGh0dHBzOi8vdXJsLmF1Lm0ubWltZWNhc3Rwcm90ZWN0LmNvbS9zLzZGUWdDRTh3bXJ0cDBtS05NSXhGMWY3elhGYT9kb21haW49MTB4Z2Vub21pY3MuY29tKQ0KDQotIFtYZW5pdW0gNWsgV2ViaW5hciAtIE11bHRpbW9kYWwgc3BhdGlhbCByZWNvbnN0cnVjdGlvbiBvZiBhdXRvaW1tdW5lIGRpc2Vhc2VzIHdpdGggNSwwMDAtZ2VuZSBhc3NheXNdKGh0dHBzOi8vdXJsLmF1Lm0ubWltZWNhc3Rwcm90ZWN0LmNvbS9zL1JQWF9DR3Ywb3lDQU9tb1FHU3JIUmZCSVF4aD9kb21haW49MTB4Z2Vub21pY3MuY29tKQ0KDQojIyMjIFZpc2l1bSBIRA0KDQoqKkRvd25sb2FkcyBhbmQgZG9jdW1lbnRhdGlvbioqDQoNCi0gW1Zpc2l1bSBBbmFseXNpcyBPdmVydmlld10oaHR0cHM6Ly91cmwuYXUubS5taW1lY2FzdHByb3RlY3QuY29tL3MvWVVKeENKeUJyR2ZLQVJQRDVIS0lLZnlmb2JGP2RvbWFpbj0xMHhnZW5vbWljcy5jb20pDQoNCi0gW1NwYWNlIFJhbmdlcl0oaHR0cHM6Ly91cmwuYXUubS5taW1lY2FzdHByb3RlY3QuY29tL3MvaUJGakNLMUR2S1Q0TWwwR21Da1NtZjVwR2FXP2RvbWFpbj0xMHhnZW5vbWljcy5jb20pDQoNCi0gKipDbG91ZCBBbmFseXNpcyoqDQoNCiAgLSBbQ2xvdWQgQW5hbHlzaXMgT3ZlcnZpZXddKGh0dHBzOi8vdXJsLmF1Lm0ubWltZWNhc3Rwcm90ZWN0LmNvbS9zL0hUTFhDTDdFd01mUXdBNVo0U1lUMGZ5eGdKVT9kb21haW49MTB4Z2Vub21pY3MuY29tKQ0KDQogIC0gW0Nsb3VkIEFuYWx5c2lzIFN1cHBvcnQgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly91cmwuYXUubS5taW1lY2FzdHByb3RlY3QuY29tL3MvRFdaR0NNd0d4T3R6a2dHQVdJcVVXZjhXZ1g2P2RvbWFpbj0xMHhnZW5vbWljcy5jb20pDQoNCiAgLSBbV2Fsa3Rocm91Z2ggVHV0b3JpYWwgKHdpdGggc21hbGwgZGVtbyBkYXRhc2V0KV0oaHR0cHM6Ly91cmwuYXUubS5taW1lY2FzdHByb3RlY3QuY29tL3MvVTQ4c0NOTEp5UVVqUEExR1hVM2NaZnk4QUtzP2RvbWFpbj0xMHhnZW5vbWljcy5jb20pIA0KDQotIFtMb3VwZSBCcm93c2VyXShodHRwczovL3VybC5hdS5tLm1pbWVjYXN0cHJvdGVjdC5jb20vcy9KUVdoQ09NS3pWVHZaSm95NEM5ZjRmR3MteUs/ZG9tYWluPTEweGdlbm9taWNzLmNvbSkNCg0KICAtIFtUdXRvcmlhbHNdKGh0dHBzOi8vdXJsLmF1Lm0ubWltZWNhc3Rwcm90ZWN0LmNvbS9zL0NWUWpDUDdMQVhmM05PcWtNZkpocGZ4RXZTTD9kb21haW49MTB4Z2Vub21pY3MuY29tKQ0KDQoqKldlYmluYXJzIGFuZCB3b3Jrc2hvcHMqKg0KDQotIFtEaXNjb3ZlciBzcGF0aWFsIGluc2lnaHRzIHdpdGggaW50dWl0aXZlIGFuYWx5c2lzIHRvb2xzIGZvciBWaXNpdW0gSEQgZGF0YV0oaHR0cHM6Ly91cmwuYXUubS5taW1lY2FzdHByb3RlY3QuY29tL3MvSjdLQ0NRbk1CWmZvbDhteXJDbGl4ZkdRR1kwP2RvbWFpbj0xMHhnZW5vbWljcy5jb20pDQoNCi0gW0RhdGEtZHJpdmVuIGRpc2NvdmVyeSB3aXRoIFZpc2l1bSBTcGF0aWFsIEdlbmUgRXhwcmVzc2lvbiBmb3IgRkZQRV0oaHR0cHM6Ly91cmwuYXUubS5taW1lY2FzdHByb3RlY3QuY29tL3MvZm1fcENST05EMnU1MEo4ekJIVnNxZjFFNmdlP2RvbWFpbj0xMHhnZW5vbWljcy5jb20pDQoNCi0gW1NwYXRpYWwgdHJhbnNjcmlwdG9taWNzIGRhdGEgYW5hbHlzaXMgaW4gUHl0aG9uXShodHRwczovL3VybC5hdS5tLm1pbWVjYXN0cHJvdGVjdC5jb20vcy8wOVJwQ1ZBUktnQ2drNzFSOWZvdFJmRXN3RHI/ZG9tYWluPWdpdGh1Yi5jb20pDQoNCi0gW1Zpc2l1bSBIRCBCaW9pbmZvcm1hdGljcyBib290Y2FtcDogSGFuZHMtb24gVmlzaXVtIEhEIGRhdGEgdmlzdWFsaXphdGlvbl0oaHR0cHM6Ly91cmwuYXUubS5taW1lY2FzdHByb3RlY3QuY29tL3MvTWV5Z0NXTFZYa1VEWDJ2V0d1TXVWZm85Nm14P2RvbWFpbj0xMHhnZW5vbWljcy5jb20pDQoNCjwvZGl2PjwvZGV0YWlscz4NCg0KIyMjIFN0cmV0Y2hseQ0KDQpbU3RyZXRjaGx5XShodHRwczovL2hvdmFuY2lrLm5ldC9zdHJldGNobHkvKSBpcyBhbiBvcGVuLXNvdXJjZSBhcHAgZGVzaWduZWQgdG8gZW5jb3VyYWdlIGhlYWx0aHkgd29yayBoYWJpdHMgYnkgcHJvbXB0aW5nIHJlZ3VsYXIgc2hvcnQgKDMwLXNlY29uZCkgYW5kIGxvbmcgKDIwLW1pbnV0ZSkgYnJlYWtzLiBJ4oCZdmUgZm91bmQgaXQgaW52YWx1YWJsZSBmb3IgbWFpbnRhaW5pbmcgZm9jdXMgYW5kIHByZXZlbnRpbmcgYnVybm91dC4gSXTigJlzIGhpZ2hseSBjdXN0b21pemFibGUsIGFsbG93aW5nIHlvdSB0byB0YWlsb3IgcHJvbXB0cyB0byB5b3VyIG5lZWRzLg0KDQojIyMgcm9hZG1hcC5zaA0KDQpbcm9hZG1hcC5zaF0oaHR0cHM6Ly9yb2FkbWFwLnNoKSBwcm92aWRlcyBzdHJ1Y3R1cmVkIGxlYXJuaW5nIHBhdGh3YXlzIGZvciB2YXJpb3VzIHRlY2gtcmVsYXRlZCBza2lsbHMsIGZyb20gRGF0YSBTY2llbmNlIHRvIERldk9wcy4gVGhlIERhdGEgU2NpZW5jZSBhbmQgQUkgcm9hZG1hcCBvdXRsaW5lcyBlc3NlbnRpYWwgdG9waWNzIHN1Y2ggYXMgbWF0aGVtYXRpY3MsIHN0YXRpc3RpY3MsIGFuZCBjb2RpbmcsIGFsb25nIHdpdGggY3VyYXRlZCBmcmVlIGFuZCBwYWlkIGxlYXJuaW5nIHJlc291cmNlcy4gVGhlc2Ugcm9hZG1hcHMgYXJlIGNvbW11bml0eS1kcml2ZW4gYW5kIGZyZXF1ZW50bHkgdXBkYXRlZCwgbWFraW5nIHRoZW0gYSBncmVhdCBndWlkZSBmb3Igc2VsZi1wYWNlZCBsZWFybmluZy4NCg0KIyMjIExpbmtlZEluIExlYXJuaW5nDQoNCltMaW5rZWRJbiBMZWFybmluZ10oaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2xlYXJuaW5nLykgb2ZmZXJzIGEgdmFzdCBsaWJyYXJ5IG9mIG9ubGluZSBjb3Vyc2VzIGNvdmVyaW5nIGRhdGEgYW5hbHlzaXMsIHByb2dyYW1taW5nIChpbmNsdWRpbmcgUiBhbmQgUHl0aG9uKSwgc3RhdGlzdGljcywgcmVzZWFyY2ggc2tpbGxzLCBhbmQgcHJvZmVzc2lvbmFsIGRldmVsb3BtZW50LiBUaGVyZSBpcyBhIHNob3J0IFtSIGZvciBEYXRhIFNjaWVuY2VdKGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9sZWFybmluZy1sb2dpbi9zaGFyZT9hY2NvdW50PTIxOTYyMDQmZm9yY2VBY2NvdW50PWZhbHNlJnJlZGlyZWN0PWh0dHBzJTNBJTJGJTJGd3d3LmxpbmtlZGluLmNvbSUyRmxlYXJuaW5nJTJGci1mb3ItZGF0YS1zY2llbmNlLWFuYWx5c2lzLWFuZC12aXN1YWxpemF0aW9uJTNGdHJrJTNEc2hhcmVfZW50X3VybCUyNnNoYXJlSWQlM0RnVkVCclkxTlNxZUpRcUJhUXZ6T0xRJTI1M0QlMjUzRCkgY291cnNlIHRoYXQgaXMgcXVpdGUgbmljZS4gDQoNCllvdSBzaG91bGQgaGF2ZSBhY2Nlc3MgdG8gTGlua2VkSW4gTGVhcm5pbmcgdGhyb3VnaCB5b3VyIFVuaXZlcnNpdHkgZW1haWwuIE90aGVyd2lzZSwgV0lNUiBzdGFmZiBjYW4gYXBwbHkgZm9yIGEgbGljZW5zZSB0aHJvdWdoIFdJTVIuIA0KDQojIyMgU3lkbmV5IEluZm9ybWF0aWNzIEh1YiANCg0KU3lkbmV5IEluZm9ybWF0aWNzIEh1YiBvZmZlcnMgW3RyYWluaW5nIHdvcmtzaG9wc10oaHR0cHM6Ly93d3cuc3lkbmV5LmVkdS5hdS9yZXNlYXJjaC9mYWNpbGl0aWVzL3N5ZG5leS1pbmZvcm1hdGljcy1odWIvd29ya3Nob3BzLWFuZC10cmFpbmluZy90cmFpbmluZy1jYWxlbmRhci5odG1sKSByZWd1bGFybHkgb24gcmVzZWFyY2ggZGF0YSBtYW5hZ2VtZW50LCBzdGF0aXN0aWNhbCBtZXRob2RzLCBhbmQgaGlnaC1wZXJmb3JtYW5jZSBjb21wdXRpbmcuIFRoZXNlIGFyZSBtb3JlIGdlbmVyYWwgbWV0aG9kcyB0aGF0IG5vdCBvbmx5IGFwcGx5IHRvIGJpb21lZGljYWwgcmVzZWFyY2gsIGJ1dCBtYXkgcHJvdmlkZSBpbnNwaXJhdGlvbiBvciBnb29kIGZ1bmRhbWVudGFsIGtub3dsZWRnZSBvbiB0aGUgYW5hbHl0aWNhbCBtZXRob2RzIHdlIHVzZS4NCg0KIyMjIEludGVyYWN0aXZlIFIgbGVhcm5pbmcgVUkNCg0KW2xlYXJucl0ocnN0dWRpby5naXRodWIuaW8vbGVhcm5yKSBpcyBhIHBhY2thZ2UgdGhhdCB5b3UgY2FuIGluc3RhbGwgd2hpY2ggcHJvdmlkZXMgYSBuaWNlIGxpdHRsZSBVSSBpZiB5b3Ugd2FudCB0byBwcmFjdGljZSBiYXNpY1Igc2tpbGxzIGFuZCBwcmVmZXIgc29tZSBpbnRlcmFjdGl2aXR5Lg0KDQojIyMgZ2dwbG90MiBib29rDQoNCltnZ3Bsb3QyOkVsZWdhbnQgR3JhcGhpY3MgZm9yIERhdGEgQW5hbHlzaXNdKGh0dHBzOi8vZ2dwbG90Mi1ib29rLm9yZy9pbnRyb2R1Y3Rpb24pIGlzIGEgbmljZSwgY29tcHJlaGVuc2l2ZSBoYW5kYm9vayBmb3IgZ3JhcGhpbmcgdXNpbmcgZ2dwbG90Mi4gSXQgY292ZXJzIHRoZSBiYXNpYyBsYXlvdXQsIGRpZmZlcmVudCBncmFwaCB0eXBlcywgY3VzdG9taXppbmcgZWxlbWVudHMgc3VjaCBhcyBjb2xvdXJzLCBncm91cCBvdmVybGF5cywgYW5ub3RhdGlvbnMsIGV0Yy4gDQoNCg==