Course Setup

In this course we will demonstrate how to run some standard analysis tools for RNA-seq data. The majority of Bioinformatics tools are built with a command-line environment in mind, rather than Windows or Mac OSX. To simplify the installation of these tools, we are providing some resources on the cloud that you can log into for the duration of the course.

You will receive a link to a spreadsheet containing a set of IP Addresses for each participant

Enter the following address in your web browser, replacing IP_ADDRESS with your own IP.

http://IP_ADDRESS:6080

e.g. 

http://3.8.149.23:6080

The links will only be available for the duration of the workshop.

Open a terminal window

You should be presented with a unix desktop environment that we can use to learn about the command-line and tools for processing RNA-seq data.

To open a Terminal (in order to enter Unix commands), there is a “Start menu” in the bottom-left corner from which you can select System Tools and then LXTerminal

Change user

Finally, in order to follow the materials we need to change the user that we logged in as from root to dcuser.

Type the command into the terminal window exactly as it appears below

su - dcuser

You are now ready to start the command-line introduction

Setup on your own machine

Both Mac OSX and Windows 10 have the ability to run some of the commands presented in this course to navigate around a file system, copy files and list directories. However, you may prefer to practice in a “safe” environment, such as that used during the workshop. Furthermore, the NGS tools presented may be difficult to install.

You can launch the same computing environment on your own machine using a tool called Docker.

Docker is an open platform for developers to build and ship applications, whether on laptops, servers in a data center, or the cloud.

  • Or, it is a (relatively) painless way for you to install and try out Bioinformatics software.
  • You can think of it as an isolated environment inside your exising operating system where you can install and run software without messing with the main OS
    • Really useful for testing software
    • Clear benefits for working reproducibly
  • Instead of just distributing the code used for a paper, you can effectively share the computer you did the analysis on
  • For those of you that have used Virtual Machines, it is a similar concept

Installing Docker

Windows

Once you have installed Docker using the instructions above, you can open a terminal (Mac) or command prompt (Windows) and type the following to run the Day 1 environment

docker run --rm -p 6080:80 markdunning/rnaseq-toolbox

Entering the address in your web browser should display the environment

http://localhost:6080

Using the environment to analyse your own data

With the default settings, the computing environment is isolated from your own laptop; we can neither bring files that we create back to our own OS, or analyse our own data.

However, adding an -v argument allows certain folders on your own OS to be visible within the environment.

Assuming the files I want to analyse are to be found in the folder PATH_TO_FASTQ, the following command would map that directory to the folder /home/dcuser/rnaseq_data

docker run --rm -p 6080:80 -v /PATH_TO_FASTQ/:/home/dcuser/rnaseq_data markdunning/rnaseq-toolbox

At the terminal, we should be able to see our files with the ls command

ls /home/dcuser/rnaseq_data

However, please bear in mind that when running an analysis using this method you will be using the resources (CPU, RAM etc) on your own machine. In other words, it is not replacement for using a remote cluster with large amounts of memory (see next section).

Along with the tools used in the workshop, there are many other common RNA-seq tools included you may have read about in the literature:-

Analysis on the UoS cluster

As described above, docker can be used to run the environment presented in this course on a personal laptop. However, there are some security implications of docker that prohibits it being installed on a high-performance computing system. An alternative is singularity, which allows computing environments to be distributed as a single image file. We have created such a singularity image and made it available on sharc (The University of Sheffield’s HPC).

Firstly, login to sharc in the usual manner and then open an interactive shell.

ssh USERNAME@sharc.shef.ac.uk
qrsh

The singularity image is available at the following location:-

ls /shared/bioinformatics_core1/Shared/software/singularity/command_line_20200212.sif

The commands presented in the Introduction to Shell section (e.g. ls, cd, pwd…) are already available when you first login to sharc. However, the tools specific to NGS analysis will require you to add the path to the singularity image before the command.

For example, to run fastqc you can navigate to your directory containing your fastq files with the usual cd command.

cd /path/to/your/fastq/files
singularity exec /shared/bioinformatics_core1/Shared/software/singularity/command_line_20200212.sif fastqc *.fastq.gz

Other commands that require you to list give the path to the singularity image are as follows:-

singularity exec /shared/bioinformatics_core1/Shared/software/singularity/command_line_20200212.sif multiqc
singularity exec /shared/bioinformatics_core1/Shared/software/singularity/command_line_20200212.sif hisat2-build
singularity exec /shared/bioinformatics_core1/Shared/software/singularity/command_line_20200212.sif hisat2 
singularity exec /shared/bioinformatics_core1/Shared/software/singularity/command_line_20200212.sif samtools 
singularity exec /shared/bioinformatics_core1/Shared/software/singularity/command_line_20200212.sif featureCounts
singularity exec /shared/bioinformatics_core1/Shared/software/singularity/command_line_20200212.sif salmon
LS0tCnRpdGxlOiAiQ291cnNlIFNldHVwIgphdXRob3I6ICJNYXJrIER1bm5pbmciCmRhdGU6ICdgciBmb3JtYXQoU3lzLnRpbWUoKSwgIkxhc3QgbW9kaWZpZWQ6ICVkICViICVZIilgJwpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgY3NzOiBzdHlsZXNoZWV0cy9zdHlsZXMuY3NzCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgojIENvdXJzZSBTZXR1cAoKSW4gdGhpcyBjb3Vyc2Ugd2Ugd2lsbCBkZW1vbnN0cmF0ZSBob3cgdG8gcnVuIHNvbWUgc3RhbmRhcmQgYW5hbHlzaXMgdG9vbHMgZm9yIFJOQS1zZXEgZGF0YS4gVGhlIG1ham9yaXR5IG9mIEJpb2luZm9ybWF0aWNzIHRvb2xzIGFyZSBidWlsdCB3aXRoIGEgKmNvbW1hbmQtbGluZSogZW52aXJvbm1lbnQgaW4gbWluZCwgcmF0aGVyIHRoYW4gV2luZG93cyBvciBNYWMgT1NYLiBUbyBzaW1wbGlmeSB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZXNlIHRvb2xzLCB3ZSBhcmUgcHJvdmlkaW5nIHNvbWUgcmVzb3VyY2VzIG9uIHRoZSAqY2xvdWQqIHRoYXQgeW91IGNhbiBsb2cgaW50byBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3Vyc2UuIAoKKipZb3Ugd2lsbCByZWNlaXZlIGEgbGluayB0byBhIHNwcmVhZHNoZWV0IGNvbnRhaW5pbmcgYSBzZXQgb2YgSVAgQWRkcmVzc2VzIGZvciBlYWNoIHBhcnRpY2lwYW50KioKCkVudGVyIHRoZSBmb2xsb3dpbmcgYWRkcmVzcyBpbiB5b3VyIHdlYiBicm93c2VyLCByZXBsYWNpbmcgKipJUF9BRERSRVNTKiogd2l0aCB5b3VyIG93biAqKklQKiouCgpgYGAKaHR0cDovL0lQX0FERFJFU1M6NjA4MApgYGAKCmUuZy4gCgpgYGAKaHR0cDovLzMuOC4xNDkuMjM6NjA4MApgYGAKClRoZSBsaW5rcyB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHdvcmtzaG9wLgoKIyMgT3BlbiBhIHRlcm1pbmFsIHdpbmRvdwoKWW91IHNob3VsZCBiZSBwcmVzZW50ZWQgd2l0aCBhIHVuaXggZGVza3RvcCBlbnZpcm9ubWVudCB0aGF0IHdlIGNhbiB1c2UgdG8gbGVhcm4gYWJvdXQgdGhlIGNvbW1hbmQtbGluZSBhbmQgdG9vbHMgZm9yIHByb2Nlc3NpbmcgUk5BLXNlcSBkYXRhLgoKVG8gb3BlbiBhICpUZXJtaW5hbCogKGluIG9yZGVyIHRvIGVudGVyIFVuaXggY29tbWFuZHMpLCB0aGVyZSBpcyBhICJTdGFydCBtZW51IiBpbiB0aGUgYm90dG9tLWxlZnQgY29ybmVyIGZyb20gd2hpY2ggeW91IGNhbiBzZWxlY3QgKlN5c3RlbSBUb29scyogYW5kIHRoZW4gKkxYVGVybWluYWwqCgohW10oaW1hZ2VzL3Rlcm1pbmFsLWxhdW5jaC5wbmcpCgojIyBDaGFuZ2UgdXNlcgoKRmluYWxseSwgaW4gb3JkZXIgdG8gZm9sbG93IHRoZSBtYXRlcmlhbHMgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHVzZXIgdGhhdCB3ZSBsb2dnZWQgaW4gYXMgZnJvbSBgcm9vdGAgdG8gYGRjdXNlcmAuCgpUeXBlIHRoZSBjb21tYW5kIGludG8gdGhlIHRlcm1pbmFsIHdpbmRvdyAqKmV4YWN0bHkqKiBhcyBpdCBhcHBlYXJzIGJlbG93CgpgYGAKc3UgLSBkY3VzZXIKYGBgCgohW10oaW1hZ2VzL2NoYW5nZS11c2VyLnBuZykKCgpZb3UgYXJlIG5vdyByZWFkeSB0byBzdGFydCB0aGUgY29tbWFuZC1saW5lIGludHJvZHVjdGlvbgoKLSBbaHR0cHM6Ly9kYXRhY2FycGVudHJ5Lm9yZy9zaGVsbC1nZW5vbWljcy8wMS1pbnRyb2R1Y3Rpb24vXShodHRwczovL2RhdGFjYXJwZW50cnkub3JnL3NoZWxsLWdlbm9taWNzLzAxLWludHJvZHVjdGlvbi8pCgojIFNldHVwIG9uIHlvdXIgb3duIG1hY2hpbmUKCkJvdGggTWFjIE9TWCBhbmQgV2luZG93cyAxMCBoYXZlIHRoZSBhYmlsaXR5IHRvIHJ1biBzb21lIG9mIHRoZSBjb21tYW5kcyBwcmVzZW50ZWQgaW4gdGhpcyBjb3Vyc2UgdG8gbmF2aWdhdGUgYXJvdW5kIGEgZmlsZSBzeXN0ZW0sIGNvcHkgZmlsZXMgYW5kIGxpc3QgZGlyZWN0b3JpZXMuIEhvd2V2ZXIsIHlvdSBtYXkgcHJlZmVyIHRvIHByYWN0aWNlIGluIGEgInNhZmUiIGVudmlyb25tZW50LCBzdWNoIGFzIHRoYXQgdXNlZCBkdXJpbmcgdGhlIHdvcmtzaG9wLiBGdXJ0aGVybW9yZSwgdGhlIE5HUyB0b29scyBwcmVzZW50ZWQgbWF5IGJlIGRpZmZpY3VsdCB0byBpbnN0YWxsLiAKCllvdSBjYW4gbGF1bmNoIHRoZSBzYW1lIGNvbXB1dGluZyBlbnZpcm9ubWVudCBvbiB5b3VyIG93biBtYWNoaW5lIHVzaW5nIGEgdG9vbCBjYWxsZWQgKkRvY2tlciouCgpEb2NrZXIgaXMgYW4gb3BlbiBwbGF0Zm9ybSBmb3IgZGV2ZWxvcGVycyB0byBidWlsZCBhbmQgc2hpcCBhcHBsaWNhdGlvbnMsIHdoZXRoZXIgb24gbGFwdG9wcywgc2VydmVycyBpbiBhIGRhdGEgY2VudGVyLCBvciB0aGUgY2xvdWQuCgotIE9yLCBpdCBpcyBhIChyZWxhdGl2ZWx5KSBwYWlubGVzcyB3YXkgZm9yIHlvdSB0byBpbnN0YWxsIGFuZCB0cnkgb3V0IEJpb2luZm9ybWF0aWNzIHNvZnR3YXJlLgotIFlvdSBjYW4gdGhpbmsgb2YgaXQgYXMgYW4gaXNvbGF0ZWQgZW52aXJvbm1lbnQgaW5zaWRlIHlvdXIgZXhpc2luZyBvcGVyYXRpbmcgc3lzdGVtIHdoZXJlIHlvdSBjYW4gaW5zdGFsbCBhbmQgcnVuIHNvZnR3YXJlIHdpdGhvdXQgbWVzc2luZyB3aXRoIHRoZSBtYWluIE9TCiAgICArIFJlYWxseSB1c2VmdWwgZm9yIHRlc3Rpbmcgc29mdHdhcmUKICAgICsgQ2xlYXIgYmVuZWZpdHMgZm9yIHdvcmtpbmcgcmVwcm9kdWNpYmx5Ci0gSW5zdGVhZCBvZiBqdXN0IGRpc3RyaWJ1dGluZyB0aGUgY29kZSB1c2VkIGZvciBhIHBhcGVyLCB5b3UgY2FuIGVmZmVjdGl2ZWx5IHNoYXJlIHRoZSBjb21wdXRlciB5b3UgZGlkIHRoZSBhbmFseXNpcyBvbgotIEZvciB0aG9zZSBvZiB5b3UgdGhhdCBoYXZlIHVzZWQgVmlydHVhbCBNYWNoaW5lcywgaXQgaXMgYSBzaW1pbGFyIGNvbmNlcHQKCgojIyBJbnN0YWxsaW5nIERvY2tlcgoKCiMjIyBNYWMKCi0gW01hYyBPU1ggLSAxMC4xMC4zIG9yIG5ld2VyXShodHRwczovL3d3dy5kb2NrZXIuY29tL2RvY2tlci1tYWMpCi0gW09sZGVyIE1hY3NdKGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9tYWMvc3RhYmxlL0RvY2tlclRvb2xib3gucGtnKQoKIyMjIFdpbmRvd3MKCi0gW1dpbmRvd3MgMTAgUHJvZmVzc2lvbmFsXShodHRwczovL3d3dy5kb2NrZXIuY29tL2RvY2tlci13aW5kb3dzKQotIFtPdGhlciBXaW5kb3dzXShodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vd2luL3N0YWJsZS9Eb2NrZXJUb29sYm94LmV4ZSkKCk9uY2UgeW91IGhhdmUgaW5zdGFsbGVkIERvY2tlciB1c2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGFib3ZlLCB5b3UgY2FuIG9wZW4gYSB0ZXJtaW5hbCAoTWFjKSBvciBjb21tYW5kIHByb21wdCAoV2luZG93cykgYW5kIHR5cGUgdGhlIGZvbGxvd2luZyB0byBydW4gdGhlIERheSAxIGVudmlyb25tZW50CgpgYGAKZG9ja2VyIHJ1biAtLXJtIC1wIDYwODA6ODAgbWFya2R1bm5pbmcvcm5hc2VxLXRvb2xib3gKYGBgCgpFbnRlcmluZyB0aGUgYWRkcmVzcyBpbiB5b3VyIHdlYiBicm93c2VyIHNob3VsZCBkaXNwbGF5IHRoZSBlbnZpcm9ubWVudAoKYGBgCmh0dHA6Ly9sb2NhbGhvc3Q6NjA4MApgYGAKCgojIyMgVXNpbmcgdGhlIGVudmlyb25tZW50IHRvIGFuYWx5c2UgeW91ciBvd24gZGF0YQoKV2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncywgdGhlIGNvbXB1dGluZyBlbnZpcm9ubWVudCBpcyBpc29sYXRlZCBmcm9tIHlvdXIgb3duIGxhcHRvcDsgd2UgY2FuIG5laXRoZXIgYnJpbmcgZmlsZXMgdGhhdCB3ZSBjcmVhdGUgYmFjayB0byBvdXIgb3duIE9TLCBvciBhbmFseXNlIG91ciBvd24gZGF0YS4KCkhvd2V2ZXIsIGFkZGluZyBhbiBgLXZgIGFyZ3VtZW50IGFsbG93cyBjZXJ0YWluIGZvbGRlcnMgb24geW91ciBvd24gT1MgdG8gYmUgdmlzaWJsZSB3aXRoaW4gdGhlIGVudmlyb25tZW50LiAKCkFzc3VtaW5nIHRoZSBmaWxlcyBJIHdhbnQgdG8gYW5hbHlzZSBhcmUgdG8gYmUgZm91bmQgaW4gdGhlIGZvbGRlciBgUEFUSF9UT19GQVNUUWAsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3b3VsZCBtYXAgdGhhdCBkaXJlY3RvcnkgdG8gdGhlIGZvbGRlciBgL2hvbWUvZGN1c2VyL3JuYXNlcV9kYXRhYAoKYGBgCmRvY2tlciBydW4gLS1ybSAtcCA2MDgwOjgwIC12IC9QQVRIX1RPX0ZBU1RRLzovaG9tZS9kY3VzZXIvcm5hc2VxX2RhdGEgbWFya2R1bm5pbmcvcm5hc2VxLXRvb2xib3gKYGBgCgpBdCB0aGUgdGVybWluYWwsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNlZSBvdXIgZmlsZXMgd2l0aCB0aGUgYGxzYCBjb21tYW5kCgpgYGAKbHMgL2hvbWUvZGN1c2VyL3JuYXNlcV9kYXRhCmBgYAoKSG93ZXZlciwgcGxlYXNlIGJlYXIgaW4gbWluZCB0aGF0IHdoZW4gcnVubmluZyBhbiBhbmFseXNpcyB1c2luZyB0aGlzIG1ldGhvZCB5b3Ugd2lsbCBiZSB1c2luZyB0aGUgcmVzb3VyY2VzIChDUFUsIFJBTSBldGMpICpvbiB5b3VyIG93biBtYWNoaW5lKi4gSW4gb3RoZXIgd29yZHMsIGl0IGlzIG5vdCByZXBsYWNlbWVudCBmb3IgdXNpbmcgYSByZW1vdGUgY2x1c3RlciB3aXRoIGxhcmdlIGFtb3VudHMgb2YgbWVtb3J5IChzZWUgbmV4dCBzZWN0aW9uKS4KCkFsb25nIHdpdGggdGhlIHRvb2xzIHVzZWQgaW4gdGhlIHdvcmtzaG9wLCB0aGVyZSBhcmUgbWFueSBvdGhlciBjb21tb24gUk5BLXNlcSB0b29scyBpbmNsdWRlZCB5b3UgbWF5IGhhdmUgcmVhZCBhYm91dCBpbiB0aGUgbGl0ZXJhdHVyZTotCgotIFtmYXN0cWNdKGh0dHBzOi8vd3d3LmJpb2luZm9ybWF0aWNzLmJhYnJhaGFtLmFjLnVrL3Byb2plY3RzL2Zhc3RxYy8pCi0gW211bHRpcWNdKGh0dHBzOi8vbXVsdGlxYy5pbmZvLykKLSBbc2FtdG9vbHNdKGh0dHA6Ly93d3cuaHRzbGliLm9yZy8pCi0gW3NyYV90b29sa2l0XShodHRwczovL2hwYy5uaWguZ292L2FwcHMvc3JhdG9vbGtpdC5odG1sKQotIFtib3d0aWUyXShodHRwOi8vYm93dGllLWJpby5zb3VyY2Vmb3JnZS5uZXQvYm93dGllMi9pbmRleC5zaHRtbCkKLSBbY3V0YWRhcHRdKGh0dHBzOi8vY3V0YWRhcHQucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlLykKLSBbaHRzZXFdKGh0dHBzOi8vaHRzZXEucmVhZHRoZWRvY3MuaW8vZW4vbWFzdGVyLykKLSBbaGlzYXQyXShodHRwOi8vZGFlaHdhbmtpbWxhYi5naXRodWIuaW8vaGlzYXQyLykKLSBbc3VicmVhZF0oaHR0cDovL3N1YnJlYWQuc291cmNlZm9yZ2UubmV0LykKLSBba2FsbGlzdG9dKGh0dHBzOi8vcGFjaHRlcmxhYi5naXRodWIuaW8va2FsbGlzdG8vYWJvdXQpCi0gW2N1ZmZsaW5rc10oaHR0cDovL2NvbGUtdHJhcG5lbGwtbGFiLmdpdGh1Yi5pby9jdWZmbGlua3MvKQotIFtSU0VNXShodHRwczovL2Rld2V5bGFiLmdpdGh1Yi5pby9SU0VNLykKLSBbc2FsbW9uXShodHRwczovL3NhbG1vbi5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvc2FsbW9uLmh0bWwpCi0gW1RyaW1tb21hdGljXShodHRwOi8vd3d3LnVzYWRlbGxhYi5vcmcvY21zLz9wYWdlPXRyaW1tb21hdGljKQogICsgYGphdmEgLWphciAkVFJJTU1PTUFUSUNgCgojIyMgQW5hbHlzaXMgb24gdGhlIFVvUyBjbHVzdGVyCgpBcyBkZXNjcmliZWQgYWJvdmUsIGBkb2NrZXJgIGNhbiBiZSB1c2VkIHRvIHJ1biB0aGUgZW52aXJvbm1lbnQgcHJlc2VudGVkIGluIHRoaXMgY291cnNlIG9uIGEgcGVyc29uYWwgbGFwdG9wLiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgZG9ja2VyIHRoYXQgcHJvaGliaXRzIGl0IGJlaW5nIGluc3RhbGxlZCBvbiBhIGhpZ2gtcGVyZm9ybWFuY2UgY29tcHV0aW5nIHN5c3RlbS4gQW4gYWx0ZXJuYXRpdmUgaXMgYHNpbmd1bGFyaXR5YCwgd2hpY2ggYWxsb3dzIGNvbXB1dGluZyBlbnZpcm9ubWVudHMgdG8gYmUgZGlzdHJpYnV0ZWQgYXMgYSBzaW5nbGUgaW1hZ2UgZmlsZS4gV2UgaGF2ZSBjcmVhdGVkIHN1Y2ggYSBzaW5ndWxhcml0eSBpbWFnZSBhbmQgbWFkZSBpdCBhdmFpbGFibGUgb24gc2hhcmMgKFRoZSBVbml2ZXJzaXR5IG9mIFNoZWZmaWVsZCdzIEhQQykuCgpGaXJzdGx5LCBsb2dpbiB0byBzaGFyYyBpbiB0aGUgdXN1YWwgbWFubmVyIGFuZCB0aGVuIG9wZW4gYW4gaW50ZXJhY3RpdmUgc2hlbGwuCgpgYGB7YmFzaCBldmFsPUZBTFNFfQpzc2ggVVNFUk5BTUVAc2hhcmMuc2hlZi5hYy51awpxcnNoCmBgYAoKVGhlIHNpbmd1bGFyaXR5IGltYWdlIGlzIGF2YWlsYWJsZSBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOi0KCmBgYHtiYXNoIGV2YWw9RkFMU0V9CmxzIC9zaGFyZWQvYmlvaW5mb3JtYXRpY3NfY29yZTEvU2hhcmVkL3NvZnR3YXJlL3Npbmd1bGFyaXR5L2NvbW1hbmRfbGluZV8yMDIwMDIxMi5zaWYKYGBgCgoqKlRoZSBjb21tYW5kcyBwcmVzZW50ZWQgaW4gdGhlIEludHJvZHVjdGlvbiB0byBTaGVsbCBzZWN0aW9uIChlLmcuIGBsc2AsIGBjZGAsIGBwd2RgLi4uKSBhcmUgYWxyZWFkeSBhdmFpbGFibGUgd2hlbiB5b3UgZmlyc3QgbG9naW4gdG8gYHNoYXJjYCoqLiBIb3dldmVyLCB0aGUgdG9vbHMgc3BlY2lmaWMgdG8gTkdTIGFuYWx5c2lzIHdpbGwgcmVxdWlyZSB5b3UgdG8gYWRkIHRoZSBwYXRoIHRvIHRoZSBzaW5ndWxhcml0eSBpbWFnZSBiZWZvcmUgdGhlIGNvbW1hbmQuCgpGb3IgZXhhbXBsZSwgdG8gcnVuIGBmYXN0cWNgIHlvdSBjYW4gbmF2aWdhdGUgdG8geW91ciBkaXJlY3RvcnkgY29udGFpbmluZyB5b3VyIGZhc3RxIGZpbGVzIHdpdGggdGhlIHVzdWFsIGBjZGAgY29tbWFuZC4KCmBgYHtiYXNoIGV2YWw9RkFMU0V9CmNkIC9wYXRoL3RvL3lvdXIvZmFzdHEvZmlsZXMKc2luZ3VsYXJpdHkgZXhlYyAvc2hhcmVkL2Jpb2luZm9ybWF0aWNzX2NvcmUxL1NoYXJlZC9zb2Z0d2FyZS9zaW5ndWxhcml0eS9jb21tYW5kX2xpbmVfMjAyMDAyMTIuc2lmIGZhc3RxYyAqLmZhc3RxLmd6CmBgYAoKT3RoZXIgY29tbWFuZHMgdGhhdCByZXF1aXJlIHlvdSB0byBsaXN0IGdpdmUgdGhlIHBhdGggdG8gdGhlIHNpbmd1bGFyaXR5IGltYWdlIGFyZSBhcyBmb2xsb3dzOi0KCmBgYHtiYXNoIGV2YWw9RkFMU0V9CnNpbmd1bGFyaXR5IGV4ZWMgL3NoYXJlZC9iaW9pbmZvcm1hdGljc19jb3JlMS9TaGFyZWQvc29mdHdhcmUvc2luZ3VsYXJpdHkvY29tbWFuZF9saW5lXzIwMjAwMjEyLnNpZiBtdWx0aXFjCmBgYAoKYGBge2Jhc2ggZXZhbD1GQUxTRX0Kc2luZ3VsYXJpdHkgZXhlYyAvc2hhcmVkL2Jpb2luZm9ybWF0aWNzX2NvcmUxL1NoYXJlZC9zb2Z0d2FyZS9zaW5ndWxhcml0eS9jb21tYW5kX2xpbmVfMjAyMDAyMTIuc2lmIGhpc2F0Mi1idWlsZApgYGAKCgpgYGB7YmFzaCBldmFsPUZBTFNFfQpzaW5ndWxhcml0eSBleGVjIC9zaGFyZWQvYmlvaW5mb3JtYXRpY3NfY29yZTEvU2hhcmVkL3NvZnR3YXJlL3Npbmd1bGFyaXR5L2NvbW1hbmRfbGluZV8yMDIwMDIxMi5zaWYgaGlzYXQyIApgYGAKCmBgYHtiYXNoIGV2YWw9RkFMU0V9CnNpbmd1bGFyaXR5IGV4ZWMgL3NoYXJlZC9iaW9pbmZvcm1hdGljc19jb3JlMS9TaGFyZWQvc29mdHdhcmUvc2luZ3VsYXJpdHkvY29tbWFuZF9saW5lXzIwMjAwMjEyLnNpZiBzYW10b29scyAKYGBgCgpgYGB7YmFzaCBldmFsPUZBTFNFfQpzaW5ndWxhcml0eSBleGVjIC9zaGFyZWQvYmlvaW5mb3JtYXRpY3NfY29yZTEvU2hhcmVkL3NvZnR3YXJlL3Npbmd1bGFyaXR5L2NvbW1hbmRfbGluZV8yMDIwMDIxMi5zaWYgZmVhdHVyZUNvdW50cwpgYGAKCmBgYHtiYXNoIGV2YWw9RkFMU0V9CnNpbmd1bGFyaXR5IGV4ZWMgL3NoYXJlZC9iaW9pbmZvcm1hdGljc19jb3JlMS9TaGFyZWQvc29mdHdhcmUvc2luZ3VsYXJpdHkvY29tbWFuZF9saW5lXzIwMjAwMjEyLnNpZiBzYWxtb24KYGBgCgo=