Version control with Git is very useful to maintain changes made to file(s). It is also useful if more than one person is working on the same file. To know more about version control visit git-scm.

RStudio now has integrated two different open source version control tools. 1. Git 2. SVN (Subversion)

We will be focusing here on Git

To use Git in Rstdio we need few pre-requisites

  1. You need to install Git from git-scm.
    Note: It will automatically detect your operating system and gives you link to download
  2. You should be familiar with creating and working with Project in RStudio.
    Note: Because Git feature only works with Projects

Enable Git in RStudio

  1. Go to Tools –> Global Options
  2. Click on Git/SVN
  3. Check Enable version control interface for RStudio projects
    Note: Usually it will be checked if you have installed git


  4. To avoid entering username and password everytime you push your code to Github you can setup SSH RSA Key.

Set up SSH RSA Keys

  1. Click on Create RSA Key button
  2. Click on Create without any passphrase
  3. Click on Close
  4. Click on View public key hyperlink
  5. Copy the key from the window
  6. Login to your Github Account and Go to Settings
  7. Click on SSH and GPG keys from the left side menu
  8. Click on New SSH key from right top
  9. Provide a Title and paste the key under Key section
  10. Click Add SSH key

Create a new project and new repository, Commit and push files to GitHub

Create a new project in RStudio

  1. Go to File –> New Project
  2. Click on New Directory
  3. Click on Empty Project
  4. Provide the Directory name, Subdirectory and check Create a git repository

Create a repository in Github

  1. Login to Github and click on Create New Repository from the + icon
  2. Provide the project name created in RStudio and click on Create repository
  3. Copy appropriate code for quick setup. I would copy second chunck of code with 2 lines to push an existing repository.

Commit and Push local files to Github

  1. Click on Git from the pane that contains Environment, History, Git
  2. From the files listed check the relevent files that you wish to upload to github
    Note 1: Make sure you save the files you want to upload within your project directory. Only then you will see the files under Git window. Also you don’t need to upload Rproj, .gitignore files. Here I am uploading plot_cars.R file



  3. If you do not need some file to upload then make sure you add them to .gitignore. To do so select the file you want to ignore (no need to check the box) from the Git window and click on More –> Ignore. Make sure you have the right file under the ignore list and click Save. Below is the screenshot of ignoring test.RProj file.


  4. Click on Commit from the git window

  5. Type in a message under Commit message window and click commit.
  6. From the same git window click on Tools –> Shell
  7. Paste the code copied under point 3 of Create a repository in Github one line at a time in the shell and hit enter.
  8. Refresh your Github page to see all the files commited under RStudio.
  9. Now you will see a Pull and Push buttons enabled. Any file you create can now be pushed without running any commands from Shell.
    Note: Remember to commit before pushing the files

Create a new project using a repository that is already on GitHub

  1. Go to File –> New Project
  2. Click on Version Control
  3. Click on Git
  4. Enter the Repository URL: and choose a subdirectory where you want to store the project

  5. Click Create Project
  6. Open shell from Tools –> Shell then enter git remote set-url origin git@github.com:vikki1107/Data-science.git to change the origin from https to ssh.

    Now you can work on the files and push them to your github account


Troubleshooting issues

  1. Cannot find Git tab under Environment pane
    If you don’t see Git tab under Environment, History Pane then
    • go to Tools –> Project Options
    • click on Git/SVN
    • Change Version Control System from (None) to Git

  2. error: src refspec master does not match any.
    If you see the above error followed by error: failed to push some refs to ‘git@github.com:….’ then
  3. Enter username and password while performing push If you are getting a window to enter username and password everytime you are performing push then your origin is set to https instead of ssh. To change that
    • Go to your GitHub and open the repository.
    • Click on Clone or download
    • If the url starts with https:// then click on Use SSH to see a url that starts with git@github.com
    • Copy that and go back to your shell from RStudio Tools –> Shell and type git remote set-url origin <paste-the-copied-url>

  4. xcrun: error: invalid active developer path
    If you are using mac and can’t find Git tab while troubleshooting issue 1 and see the above error while commit/push then
    • You need to install xcode-select. To do so run xcode-select --install from your terminal

  5. Please tell me who you are
    If you commit and you get error asking who you are then run whatever is displayed on window changing “you@example.com” to your github email and “Your Name” to your GitHub display name. Example shown below
    • git config –global user.email "vikki.1107@gmail.com"
    • git config –global user.name “Vivek Limbavali”


More resources

LS0tCnRpdGxlOiAiVmVyc2lvbiBDb250cm9sIHdpdGggR2l0IGZyb20gUlN0dWRpbyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQoKVmVyc2lvbiBjb250cm9sIHdpdGggR2l0IGlzIHZlcnkgdXNlZnVsIHRvIG1haW50YWluIGNoYW5nZXMgbWFkZSB0byBmaWxlKHMpLiBJdCBpcyBhbHNvIHVzZWZ1bCBpZiBtb3JlIHRoYW4gb25lIHBlcnNvbiBpcyB3b3JraW5nIG9uIHRoZSBzYW1lIGZpbGUuIFRvIGtub3cgbW9yZSBhYm91dCB2ZXJzaW9uIGNvbnRyb2wgdmlzaXQgW2dpdC1zY21dKGh0dHBzOi8vZ2l0LXNjbS5jb20vYm9vay9lbi92Mi9HZXR0aW5nLVN0YXJ0ZWQtQWJvdXQtVmVyc2lvbi1Db250cm9sKS4gCgpSU3R1ZGlvIG5vdyBoYXMgaW50ZWdyYXRlZCB0d28gZGlmZmVyZW50IG9wZW4gc291cmNlIHZlcnNpb24gY29udHJvbCB0b29scy4gCjEuIEdpdAoyLiBTVk4gKFN1YnZlcnNpb24pCgpXZSB3aWxsIGJlIGZvY3VzaW5nIGhlcmUgb24gR2l0ICAKPGJyPiAgCgojIyMjVG8gdXNlIEdpdCBpbiBSc3RkaW8gd2UgbmVlZCBmZXcgcHJlLXJlcXVpc2l0ZXMgIAoxLiBZb3UgbmVlZCB0byBpbnN0YWxsIEdpdCBmcm9tIFtnaXQtc2NtXShodHRwczovL2dpdC1zY20uY29tL2Rvd25sb2FkcykuICAKKioqTm90ZToqKiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBhbmQgZ2l2ZXMgeW91IGxpbmsgdG8gZG93bmxvYWQqICAKMi4gWW91IHNob3VsZCBiZSBmYW1pbGlhciB3aXRoIGNyZWF0aW5nIGFuZCB3b3JraW5nIHdpdGggUHJvamVjdCBpbiBSU3R1ZGlvLiAgCioqKk5vdGU6KiogQmVjYXVzZSBHaXQgZmVhdHVyZSBvbmx5IHdvcmtzIHdpdGggUHJvamVjdHMqICAKPGJyPiAgCgojIyNFbmFibGUgR2l0IGluIFJTdHVkaW8KMS4gR28gdG8gKipUb29scyAtLT4gR2xvYmFsIE9wdGlvbnMqKgoyLiBDbGljayBvbiAqKkdpdC9TVk4qKgozLiBDaGVjayAqKkVuYWJsZSB2ZXJzaW9uIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBSU3R1ZGlvIHByb2plY3RzKiogIAoqKipOb3RlOioqIFVzdWFsbHkgaXQgd2lsbCBiZSBjaGVja2VkIGlmIHlvdSBoYXZlIGluc3RhbGxlZCBnaXQqICAKIVtdKGltYWdlL1NlbGVjdGlvbl8wMDMucG5nKSAgCjxicj4KNC4gVG8gYXZvaWQgZW50ZXJpbmcgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGV2ZXJ5dGltZSB5b3UgcHVzaCB5b3VyIGNvZGUgdG8gR2l0aHViIHlvdSBjYW4gc2V0dXAgU1NIIFJTQSBLZXkuICAKPGJyPiAgCgojIyNTZXQgdXAgU1NIIFJTQSBLZXlzCjEuIENsaWNrIG9uICoqQ3JlYXRlIFJTQSBLZXkqKiBidXR0b24KMi4gQ2xpY2sgb24gKipDcmVhdGUqKiB3aXRob3V0IGFueSBwYXNzcGhyYXNlCjMuIENsaWNrIG9uICoqQ2xvc2UqKgo0LiBDbGljayBvbiAqKlZpZXcgcHVibGljIGtleSoqIGh5cGVybGluayAKNS4gQ29weSB0aGUga2V5IGZyb20gdGhlIHdpbmRvdyAKNi4gTG9naW4gdG8geW91ciBHaXRodWIgQWNjb3VudCBhbmQgR28gdG8gU2V0dGluZ3MKNy4gQ2xpY2sgb24gKipTU0ggYW5kIEdQRyBrZXlzKiogZnJvbSB0aGUgbGVmdCBzaWRlIG1lbnUKOC4gQ2xpY2sgb24gKipOZXcgU1NIIGtleSoqIGZyb20gcmlnaHQgdG9wIAo5LiBQcm92aWRlIGEgKipUaXRsZSoqIGFuZCBwYXN0ZSB0aGUga2V5IHVuZGVyIEtleSBzZWN0aW9uCjEwLiBDbGljayAqKkFkZCBTU0gga2V5KiogIAo8YnI+ICAKCiMjI0NyZWF0ZSBhIG5ldyBwcm9qZWN0IGFuZCBuZXcgcmVwb3NpdG9yeSwgQ29tbWl0IGFuZCBwdXNoIGZpbGVzIHRvIEdpdEh1YiAKIyMjI0NyZWF0ZSBhIG5ldyBwcm9qZWN0IGluIFJTdHVkaW8KMS4gR28gdG8gKipGaWxlIC0tPiBOZXcgUHJvamVjdCoqICAKIVtdKGltYWdlL1NlbGVjdGlvbl8wMDQucG5nKQoyLiBDbGljayBvbiAqKk5ldyBEaXJlY3RvcnkqKgozLiBDbGljayBvbiAqKkVtcHR5IFByb2plY3QqKgo0LiBQcm92aWRlIHRoZSAqKkRpcmVjdG9yeSBuYW1lLCBTdWJkaXJlY3RvcnkgYW5kIGNoZWNrIENyZWF0ZSBhIGdpdCByZXBvc2l0b3J5KioKIVtdKGltYWdlL1NlbGVjdGlvbl8wMDUucG5nKSAgCjxicj4gICAKCiMjIyNDcmVhdGUgYSByZXBvc2l0b3J5IGluIEdpdGh1YiB7I3JlcG99CjEuIExvZ2luIHRvIFtHaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS8pIGFuZCBjbGljayBvbiAqKkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSoqIGZyb20gdGhlICsgaWNvbgoyLiBQcm92aWRlIHRoZSBwcm9qZWN0IG5hbWUgY3JlYXRlZCBpbiBSU3R1ZGlvIGFuZCBjbGljayBvbiAqKkNyZWF0ZSByZXBvc2l0b3J5KioKMy4gQ29weSBhcHByb3ByaWF0ZSBjb2RlIGZvciBxdWljayBzZXR1cC4gSSB3b3VsZCBjb3B5IHNlY29uZCBjaHVuY2sgb2YgY29kZSB3aXRoIDIgbGluZXMgdG8gcHVzaCBhbiBleGlzdGluZyByZXBvc2l0b3J5LiAgCjxicj4gIAoKIyMjI0NvbW1pdCBhbmQgUHVzaCBsb2NhbCBmaWxlcyB0byBHaXRodWIgeyNjb21taXR9CjEuIENsaWNrIG9uICoqR2l0KiogZnJvbSB0aGUgcGFuZSB0aGF0IGNvbnRhaW5zIEVudmlyb25tZW50LCBIaXN0b3J5LCBHaXQKMi4gRnJvbSB0aGUgZmlsZXMgbGlzdGVkIGNoZWNrIHRoZSByZWxldmVudCBmaWxlcyB0aGF0IHlvdSB3aXNoIHRvIHVwbG9hZCB0byBnaXRodWIgIAoqKipOb3RlIDE6KiogTWFrZSBzdXJlIHlvdSBzYXZlIHRoZSBmaWxlcyB5b3Ugd2FudCB0byB1cGxvYWQgd2l0aGluIHlvdXIgcHJvamVjdCBkaXJlY3RvcnkuIE9ubHkgdGhlbiB5b3Ugd2lsbCBzZWUgdGhlIGZpbGVzIHVuZGVyIEdpdCB3aW5kb3cuIEFsc28geW91IGRvbid0IG5lZWQgdG8gdXBsb2FkIFJwcm9qLCAuZ2l0aWdub3JlIGZpbGVzLiBIZXJlIEkgYW0gdXBsb2FkaW5nICoqcGxvdF9jYXJzLlIqKiBmaWxlKiAgCiFbXShpbWFnZS9TZWxlY3Rpb25fMDA2LnBuZykgIAo8YnI+ICAKMy4gSWYgeW91IGRvIG5vdCBuZWVkIHNvbWUgZmlsZSB0byB1cGxvYWQgdGhlbiBtYWtlIHN1cmUgeW91IGFkZCB0aGVtIHRvIC5naXRpZ25vcmUuIFRvIGRvIHNvIHNlbGVjdCB0aGUgZmlsZSB5b3Ugd2FudCB0byBpZ25vcmUgKG5vIG5lZWQgdG8gY2hlY2sgdGhlIGJveCkgZnJvbSB0aGUgR2l0IHdpbmRvdyBhbmQgY2xpY2sgb24gKipNb3JlIC0tPiBJZ25vcmUqKi4gTWFrZSBzdXJlIHlvdSBoYXZlIHRoZSByaWdodCBmaWxlIHVuZGVyIHRoZSBpZ25vcmUgbGlzdCBhbmQgY2xpY2sgKipTYXZlKiouIEJlbG93IGlzIHRoZSBzY3JlZW5zaG90IG9mIGlnbm9yaW5nIHRlc3QuUlByb2ogZmlsZS4gIAohW10oaW1hZ2UvU2VsZWN0aW9uXzAwNy5wbmcpCjxicj4gIAo0LiBDbGljayBvbiAqKkNvbW1pdCoqIGZyb20gdGhlIGdpdCB3aW5kb3cgCiFbXShpbWFnZS9TZWxlY3Rpb25fMDA4LnBuZykKPGJyPiAgCjUuIFR5cGUgaW4gYSBtZXNzYWdlIHVuZGVyICoqQ29tbWl0IG1lc3NhZ2UqKiB3aW5kb3cgYW5kIGNsaWNrIGNvbW1pdC4gCjYuIEZyb20gdGhlIHNhbWUgZ2l0IHdpbmRvdyBjbGljayBvbiAqKlRvb2xzIC0tPiBTaGVsbCoqCjcuIFBhc3RlIHRoZSBjb2RlIGNvcGllZCB1bmRlciBwb2ludCAzIG9mIFtDcmVhdGUgYSByZXBvc2l0b3J5IGluIEdpdGh1Yl0oI3JlcG8pIG9uZSBsaW5lIGF0IGEgdGltZSBpbiB0aGUgc2hlbGwgYW5kIGhpdCBlbnRlci4gCjguIFJlZnJlc2ggeW91ciBHaXRodWIgcGFnZSB0byBzZWUgYWxsIHRoZSBmaWxlcyBjb21taXRlZCB1bmRlciBSU3R1ZGlvLgo5LiBOb3cgeW91IHdpbGwgc2VlIGEgUHVsbCBhbmQgUHVzaCBidXR0b25zIGVuYWJsZWQuIEFueSBmaWxlIHlvdSBjcmVhdGUgY2FuIG5vdyBiZSBwdXNoZWQgd2l0aG91dCBydW5uaW5nIGFueSBjb21tYW5kcyBmcm9tIFNoZWxsLiAgCioqKk5vdGU6KiogUmVtZW1iZXIgdG8gY29tbWl0IGJlZm9yZSBwdXNoaW5nIHRoZSBmaWxlcyogIAo8YnI+ICAKCiMjI0NyZWF0ZSBhIG5ldyBwcm9qZWN0IHVzaW5nIGEgcmVwb3NpdG9yeSB0aGF0IGlzIGFscmVhZHkgb24gR2l0SHViCjEuIEdvIHRvICoqRmlsZSAtLT4gTmV3IFByb2plY3QqKiAgCjIuIENsaWNrIG9uICoqVmVyc2lvbiBDb250cm9sKioKMy4gQ2xpY2sgb24gKipHaXQqKgo0LiBFbnRlciB0aGUgKipSZXBvc2l0b3J5IFVSTDogYW5kIGNob29zZSBhIHN1YmRpcmVjdG9yeSoqIHdoZXJlIHlvdSB3YW50IHRvIHN0b3JlIHRoZSBwcm9qZWN0CiFbXShpbWFnZS9TZWxlY3Rpb25fMDA5LnBuZykKPGJyPiAgCjUuIENsaWNrICoqQ3JlYXRlIFByb2plY3QqKiAgCjYuIE9wZW4gc2hlbGwgZnJvbSAqKlRvb2xzIC0tPiBTaGVsbCoqIHRoZW4gZW50ZXIgKipnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIGdpdFxAZ2l0aHViLmNvbTp2aWtraTExMDcvRGF0YS1zY2llbmNlLmdpdCoqIHRvIGNoYW5nZSB0aGUgb3JpZ2luIGZyb20gaHR0cHMgdG8gc3NoLgo8YnI+ICAKTm93IHlvdSBjYW4gd29yayBvbiB0aGUgZmlsZXMgYW5kIHB1c2ggdGhlbSB0byB5b3VyIGdpdGh1YiBhY2NvdW50Cjxicj4gIAo8YnI+ICAKCiMjI1Ryb3VibGVzaG9vdGluZyBpc3N1ZXMKMS4gKipDYW5ub3QgZmluZCBHaXQgdGFiIHVuZGVyIEVudmlyb25tZW50IHBhbmUqKiAgCklmIHlvdSBkb24ndCBzZWUgR2l0IHRhYiB1bmRlciBFbnZpcm9ubWVudCwgSGlzdG9yeSBQYW5lIHRoZW4gCiAgICAtIGdvIHRvICoqVG9vbHMgLS0+IFByb2plY3QgT3B0aW9ucyoqCiAgICAtIGNsaWNrIG9uICoqR2l0L1NWTioqCiAgICAtIENoYW5nZSBWZXJzaW9uIENvbnRyb2wgU3lzdGVtIGZyb20gKE5vbmUpIHRvIEdpdAogICAgIVtdKGltYWdlL1NlbGVjdGlvbl8wMTAucG5nKSAgCjxicj4gIAoKMi4gKiplcnJvcjogc3JjIHJlZnNwZWMgbWFzdGVyIGRvZXMgbm90IG1hdGNoIGFueS4qKiAgCklmIHlvdSBzZWUgdGhlIGFib3ZlIGVycm9yIGZvbGxvd2VkIGJ5IGVycm9yOiBmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJ2dpdFxAZ2l0aHViLmNvbTouLi4uJyB0aGVuIAogICAgLSBJdCBtZWFucyB5b3UgaGF2ZSBub3QgcGVyZm9ybWVkIGNvbW1pdC4gU28gcGVyZnJvbSBjb21taXQgYXMgbWVudGlvbmVkIHVuZGVyIHBvaW50IDMgYW5kIDQgb2YgW0NvbW1pdCBhbmQgUHVzaCBsb2NhbCBmaWxlcyB0byBHaXRodWJdKCNjb21taXQpICAKPGJyPiAgCgozLiAqKkVudGVyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB3aGlsZSBwZXJmb3JtaW5nIHB1c2gqKgpJZiB5b3UgYXJlIGdldHRpbmcgYSB3aW5kb3cgdG8gZW50ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGV2ZXJ5dGltZSB5b3UgYXJlIHBlcmZvcm1pbmcgcHVzaCB0aGVuIHlvdXIgb3JpZ2luIGlzIHNldCB0byBodHRwcyBpbnN0ZWFkIG9mIHNzaC4gVG8gY2hhbmdlIHRoYXQgCiAgICAtIEdvIHRvIHlvdXIgR2l0SHViIGFuZCBvcGVuIHRoZSByZXBvc2l0b3J5LiAKICAgIC0gQ2xpY2sgb24gKipDbG9uZSBvciBkb3dubG9hZCoqIAogICAgLSBJZiB0aGUgdXJsIHN0YXJ0cyB3aXRoIGh0dHBzOi8vIHRoZW4gY2xpY2sgb24gKipVc2UgU1NIKiogdG8gc2VlIGEgdXJsIHRoYXQgc3RhcnRzIHdpdGggZ2l0XEBnaXRodWIuY29tIAogICAgLSBDb3B5IHRoYXQgYW5kIGdvIGJhY2sgdG8geW91ciBzaGVsbCBmcm9tIFJTdHVkaW8gKipUb29scyAtLT4gU2hlbGwqKiBhbmQgdHlwZSAqKmdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gXDxwYXN0ZS10aGUtY29waWVkLXVybD4qKiAgCjxicj4KCjQuICoqeGNydW46IGVycm9yOiBpbnZhbGlkIGFjdGl2ZSBkZXZlbG9wZXIgcGF0aCoqICAKSWYgeW91IGFyZSB1c2luZyBtYWMgYW5kIGNhbid0IGZpbmQgR2l0IHRhYiB3aGlsZSB0cm91Ymxlc2hvb3RpbmcgaXNzdWUgMSBhbmQgc2VlIHRoZSBhYm92ZSBlcnJvciB3aGlsZSBjb21taXQvcHVzaCB0aGVuCiAgICAtIFlvdSBuZWVkIHRvIGluc3RhbGwgeGNvZGUtc2VsZWN0LiBUbyBkbyBzbyBydW4gKip4Y29kZS1zZWxlY3QgXC0taW5zdGFsbCoqIGZyb20geW91ciB0ZXJtaW5hbCAgCjxicj4gIAoKNS4gKipQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZSoqCiFbXShpbWFnZS9TZWxlY3Rpb25fMDAxLnBuZykgIApJZiB5b3UgY29tbWl0IGFuZCB5b3UgZ2V0IGVycm9yIGFza2luZyB3aG8geW91IGFyZSB0aGVuIHJ1biB3aGF0ZXZlciBpcyBkaXNwbGF5ZWQgb24gd2luZG93IGNoYW5naW5nICJ5b3VcQGV4YW1wbGUuY29tIiB0byB5b3VyIGdpdGh1YiBlbWFpbCBhbmQgIllvdXIgTmFtZSIgdG8geW91ciBHaXRIdWIgZGlzcGxheSBuYW1lLiBFeGFtcGxlIHNob3duIGJlbG93IAogICAgLSBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgInZpa2tpLjExMDdAZ21haWwuY29tIgogICAgLSBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAiVml2ZWsgTGltYmF2YWxpIgo8YnI+ICAKPGJyPiAgCgojIyNNb3JlIHJlc291cmNlcyAKKiBodHRwczovL3N1cHBvcnQucnN0dWRpby5jb20vaGMvZW4tdXMvYXJ0aWNsZXMvMjAwNTMyMDc3LVZlcnNpb24tQ29udHJvbC13aXRoLUdpdC1hbmQtU1ZOCiogaHR0cHM6Ly93d3cuci1ibG9nZ2Vycy5jb20vcnN0dWRpby1hbmQtZ2l0aHViLwoqIGh0dHBzOi8vamVubnliYy5naXRodWIuaW8vMjAxNC0wNS0xMi11YmMvdWJjLXIvc2Vzc2lvbjAzX2dpdC5odG1sCiogaHR0cDovL3ItYmlvLmdpdGh1Yi5pby9pbnRyby1naXQtcnN0dWRpby8KKiBodHRwOi8vci1wa2dzLmhhZC5jby5uei9naXQuaHRtbAoqIGh0dHBzOi8vZ2l0aHViLmNvbS9hemFtYXRrL2RhdGEvZmlsZXMvOTgwMDU2L0hvdy50by5jb25maWd1cmUuUi5TdHVkaW8uUHJvamVjdC53aXRoLkdpdGh1Yl92MS5kb2N4CgogICAgCgogIAoK