Data in R
To run your code, click run. It will let you know if your code is correct or not, and will offer hints on what to fix if needed. If you are stuck, you can see the solution by clicking Solution.
Exercise 1: Using mutate()
eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIGRhdGEuZnJhbWUoY29tcGFueT1jKFwiVU9MIEdyb3VwXCIsIFwiVU9MIEdyb3VwXCIsIFwiVU9MIEdyb3VwXCIsIFwiVW5pdGVkIEVuZ2luZWVycyBMdGRcIiwgXCJVbml0ZWQgRW5naW5lZXJzIEx0ZFwiLCBcIlVuaXRlZCBFbmdpbmVlcnMgTHRkXCIsIFwiVG9wIEdsb2JhbCBMdGRcIiwgXCJUb3AgR2xvYmFsIEx0ZFwiLCBcIlRvcCBHbG9iYWwgTHRkXCIpLFxuICAgICAgICAgICAgICAgICB5ZWFyPWMoMjAxMCwgMjAxMSwgMjAxMiwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMCwgMjAxMSwgMjAxMiksXG4gICAgICAgICAgICAgICAgIHJldmVudWU9YygxMjk1LCAxOTYwLCAxMTQ2LCA5MDEsIDExODcsIDU5NSwgNC41LCA0LjgsIDUuNSksXG4gICAgICAgICAgICAgICAgIGFzc2V0cz1jKDc5MzksIDg1MjQsIDk1NjQsIDI0MTAsIDMwODAsIDM0NTEsIDEwOSwgMTI1LCAyOTUpLFxuICAgICAgICAgICAgICAgICBlYXJuaW5ncz1jKDc0NiwgNjY0LCA4MDgsIDE4NiwgMjY5LCA3MiwgLTcuNSwgMTYsIDE2KSkiLCJzYW1wbGUiOiIjIFRoZSBkYXRhZnJhbWUgYmVsb3cgY29udGFpbnMgaGlzdG9yaWNhbCBlYXJuaW5ncywgcmV2ZW51ZSxcbiMgYW5kIGFzc2V0cyBmb3IgMyB5ZWFycyAoMjAxMCwgMjAxMSwgYW5kIDIwMTIpIGFuZCAzIGZpcm1zXG5kZlxuXG5saWJyYXJ5KGRwbHlyKSAjIGxvYWRzIGRwbHlyIGZvciBkYXRhIG1hbmlwdWxhdGlvblxuXG4jIENhbGN1bGF0ZSByZXR1cm4gb24gYXNzZXRzIHVzaW5nIGRwbHlyJ3MgbXV0YXRlIGZ1bmN0aW9uLlxuIyBTdG9yZSB0aGUgcmVzdWx0IGluIGEgZGF0YSBmcmFtZSBjb2x1bW4gbmFtZWQgcm9hXG5cblxuI0VORCIsInNvbHV0aW9uIjoiIyBUaGUgZGF0YWZyYW1lIGJlbG93IGNvbnRhaW5zIGhpc3RvcmljYWwgZWFybmluZ3MsIHJldmVudWUsXG4jIGFuZCBhc3NldHMgZm9yIDMgeWVhcnMgKDIwMTAsIDIwMTEsIGFuZCAyMDEyKSBhbmQgMyBmaXJtc1xuZGZcblxubGlicmFyeShkcGx5cikgIyBsb2FkcyBkcGx5ciBmb3IgZGF0YSBtYW5pcHVsYXRpb25cblxuIyBDYWxjdWxhdGUgcmV0dXJuIG9uIGFzc2V0cyB1c2luZyBkcGx5cicgbXV0YXRlIGZ1bmN0aW9uLlxuIyBTdG9yZSB0aGUgcmVzdWx0IGluIGEgZGF0YSBmcmFtZSBjb2x1bW4gbmFtZWQgcm9hXG5kZiA8LSBkZiAlPiVcbiAgbXV0YXRlKHJvYT1lYXJuaW5ncy9hc3NldHMpXG5cbiMgT3IgeW91IGNvdWxkIHVzZTpcbmRmIDwtIG11dGF0ZShkZiwgcm9hPWVhcm5pbmdzL2Fzc2V0cylcblxuI0VORCIsInNjdCI6IiMgVGVtcGxhdGUgYmFzZWQgb24gaHR0cHM6Ly93d3cucmRvY3VtZW50YXRpb24ub3JnL3BhY2thZ2VzL3Rlc3R3aGF0L3ZlcnNpb25zLzQuMS4xXG4jIENoZWNrIGlmIHNvbWV0aGluZyBpcyBleHBsaWNpdGx5IHR5cGVkXG5cbnRlc3Rfc3R1ZGVudF90eXBlZChcIjwtXCIsIG5vdF90eXBlZF9tc2c9J0RpZCB5b3UgcmVtZW1iZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBiYWNrIGludG8gdGhlIGRhdGEgZnJhbWU/JylcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJkZiRyb2FcIiwgaW5jb3JyZWN0X21zZz1cIkl0IGxvb2tzIGxpa2UgZWl0aGVyIHRoZSBjb2x1bW4gbmFtZSBpcyB3cm9uZyBvciB0aGUgY2FsY3VsYXRpb24gaXMgd3JvbmcuXCIpXG50ZXN0X3N0dWRlbnRfdHlwZWQoJ211dGF0ZSgnLG5vdF90eXBlZF9tc2c9J1lvdXIgcmVzdWx0IGlzIGNvcnJlY3QsIGJ1dCBpdCBsb29rcyBsaWtlIHlvdSBkaWRuXFwndCB1c2UgYG11dGF0ZWAgdG8gY2FsY3VsYXRlIGl0LicpXG5cbiMgdGVzdF9zdHVkZW50X3R5cGVkKCd4IDwtIDInLCBub3RfdHlwZWRfbXNnPScnKVxuXG4jIENoZWNrIGlmIGZ1bmN0aW9uIHdhcyB1c2VkIGluIGlucHV0IGNvZGVcbiMgdGVzdF9mdW5jdGlvbignYycsaW5jb3JyZWN0X21zZz0nJykgIFxuXG4jIFJlcXVpcmVzIGFuIG9iamVjdCBgeGAgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgc29sdXRpb25cbiMgdGVzdF9vYmplY3QoXCJ4XCIsaW5jb3JyZWN0X21zZyA9IFwiXCIsdW5kZWZpbmVkX21zZyA9IFwiXCIpICBcblxuIyBSZXF1aXJlcyBhbiBvbmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiBgeGAgaW4gdGhlIHNvbHV0aW9uXG4jIHRlc3RfYW5fb2JqZWN0KFwieFwiLHVuZGVmaW5lZF9tc2c9XCJcIilcblxuIyBDaGVja3MgaWYgb3V0cHV0IG9mIHN0dWRlbnQncyBjb2RlIGNvbnRhaW5zIGdpdmVuIGV2YWx1YXRlZCBleHByZXNzaW9uXG4jIHRlc3Rfb3V0cHV0X2NvbnRhaW5zKFwieFwiLGluY29ycmVjdF9tc2cgPSBcIlwiKVxuXG4jIENoZWNrIGlmIGEgdmVjdG9yIG9mIHByZWRlZmluZWQgb2JqZWN0cyBhcmUgdW5jaGFuZ2VkXG4jIHRlc3RfcHJlZGVmaW5lZF9vYmplY3RzKGMoJ3gnLCd5JyksaW5jb3JyZWN0X21zZz1cIkRvbid0IG9udmVyd3JpdGUgdGhlIHByZWRlZmluZWQgdmFyaWFibGVzXCIpXG5cbiMgQ2hlY2tzIGZvciBhIHJlZ2V4IHBhdHRlcm4gaW4gdHJoZSBvdXRwdXRcbiMgdGVzdF9vdXRwdXRfcmVnZXgocGF0dGVybixmaXhlZD1GLCB0aW1lcz0xLCBpbmNvcnJlY3RfbXNnPScnKVxuXG4jIENhbiBjaGVjayBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBhY3Jvc3MgYm90aCBzb2x1dGlvbiBhbmQgc3R1ZGVudCBjb2RlXG4jdGVzdF9leHByZXNzaW9uX291dHB1dChcInR5cGVvZihjb21wYW55X25hbWUpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IHN0b3JlIHRleHR1YWwgZGF0YSBpbiBgY29tcGFueV9uYW1lYD9cIilcblxudGVzdF9lcnJvcigpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhXCIpXG5cbiMgT3RoZXIgZnVuY3Rpb25zIHRvIG5vdGU6XG4jICAgICAtIHRlc3Rfb3IoYSxiKSAtLSBjaGVja3MgaWYgZWl0aGVyIHRlc3QgYSBvciB0ZXN0IGIgcGFzc1xuIyAgICAgLSB0ZXN0X2dncGxvdCgpIC0tIGNhbiBjaGVjayBpZiBwbG90cyBhcmUgY29ycmVjdFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uKCkgLS0gY2FuIGFsc28gY2hlY2sgaW5jbHVkZWQgcGFyYW1ldGVyc1xuIyAgICAgLSB0ZXN0X2xvb3AoKSAtLSBjaGVja2luZyBmb3IgYW5kIHdoaWxlIGxvb3BzXG4jICAgICAtIHRlc3RfbGlicmFyeV9mdW5jdGlvbigncGFja2FnZScsIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfaWZfZWxzZSgpIC0tIGNoZWNraW5nIGlmIHN0YXRlbWVudHNcbiMgICAgIC0gdGVzdF9leHByZXNzaW9uX2Vycm9yKCkgLS0gY2FuIGNoZWNrIGlmIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgZGVmaW5lZFxuIyAgICAgLSB0ZXN0X29wZXJhdG9yKCdvcGVyYXRvcicsKSwgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9kZWZpbml0aW9uKCkgLS0gcmlnb3JvdXNseSBjaGVjayBkZWZpbmVkIGZ1bmN0aW9uXG4jICAgICAtIHRlc3RfZGF0YV9mcmFtZSgpIC0tIGNoZWNrIGlmIGRhdGFmcmFtZSBbY29sdW1uc10gYXJlIGVxdWl2YWxlbnRcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9yZXN1bHQsIHRlc3RfZXhwcmVzc2lvbl9yZXN1bHQifQ==
Exercise 2: Using mutate() and lead()
eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoZHBseXIpICMgbG9hZHMgZHBseXIgZm9yIGRhdGEgbWFuaXB1bGF0aW9uXG5kZiA8LSBkYXRhLmZyYW1lKGNvbXBhbnk9YyhcIlVPTCBHcm91cFwiLCBcIlVPTCBHcm91cFwiLCBcIlVPTCBHcm91cFwiLCBcIlVuaXRlZCBFbmdpbmVlcnMgTHRkXCIsIFwiVW5pdGVkIEVuZ2luZWVycyBMdGRcIiwgXCJVbml0ZWQgRW5naW5lZXJzIEx0ZFwiLCBcIlRvcCBHbG9iYWwgTHRkXCIsIFwiVG9wIEdsb2JhbCBMdGRcIiwgXCJUb3AgR2xvYmFsIEx0ZFwiKSxcbiAgICAgICAgICAgICAgICAgeWVhcj1jKDIwMTAsIDIwMTEsIDIwMTIsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTAsIDIwMTEsIDIwMTIpLFxuICAgICAgICAgICAgICAgICByZXZlbnVlPWMoMTI5NSwgMTk2MCwgMTE0NiwgOTAxLCAxMTg3LCA1OTUsIDQuNSwgNC44LCA1LjUpLFxuICAgICAgICAgICAgICAgICBhc3NldHM9Yyg3OTM5LCA4NTI0LCA5NTY0LCAyNDEwLCAzMDgwLCAzNDUxLCAxMDksIDEyNSwgMjk1KSxcbiAgICAgICAgICAgICAgICAgZWFybmluZ3M9Yyg3NDYsIDY2NCwgODA4LCAxODYsIDI2OSwgNzIsIC03LjUsIDE2LCAxNikpXG5kZiA8LSBkZiAlPiVcbiAgbXV0YXRlKHJvYT1lYXJuaW5ncy9hc3NldHMpIiwic2FtcGxlIjoiIyBUaGUgZGF0YWZyYW1lIGJlbG93IGNvbnRhaW5zIGhpc3RvcmljYWwgZWFybmluZ3MsIHJldmVudWUsXG4jIGFuZCBhc3NldHMgZm9yIDMgeWVhcnMgKDIwMTAsIDIwMTEsIGFuZCAyMDEyKSBhbmQgMyBmaXJtc1xuIyBJdCBhbHNvIGNvbnRhaW5zIHJvYSBmcm9tIHRoZSBmaXJzdCBleGVyY2lzZVxuZGZcblxuIyBkcGx5ciBpcyBhbHJlYWR5IGxvYWRlZFxuXG4jIENhbGN1bGF0ZSB0aGUgcmV0dXJuIG9uIGFzc2V0cyAxIHllYXIgYWhlYWQsIHVzaW5nIGdyb3VwX2J5LCBtdXRhdGUsIGxlYWQsIGFuZCB1bmdyb3VwLlxuIyBTdG9yZSB0aGUgcmVzdWx0IGluIGEgZGF0YSBmcmFtZSBjb2x1bW4gbmFtZWQgcm9hX2xlYWQuXG5cblxuI0VORCIsInNvbHV0aW9uIjoiIyBUaGUgZGF0YWZyYW1lIGJlbG93IGNvbnRhaW5zIGhpc3RvcmljYWwgZWFybmluZ3MsIHJldmVudWUsXG4jIGFuZCBhc3NldHMgZm9yIDMgeWVhcnMgKDIwMTAsIDIwMTEsIGFuZCAyMDEyKSBhbmQgMyBmaXJtc1xuIyBJdCBhbHNvIGNvbnRhaW5zIHJvYSBmcm9tIHRoZSBmaXJzdCBleGVyY2lzZVxuZGZcblxuIyBkcGx5ciBpcyBhbHJlYWR5IGxvYWRlZFxuXG4jIENhbGN1bGF0ZSB0aGUgcmV0dXJuIG9uIGFzc2V0cyAxIHllYXIgYWhlYWQsIHVzaW5nIGdyb3VwX2J5LCBtdXRhdGUsIGxlYWQsIGFuZCB1bmdyb3VwLlxuIyBTdG9yZSB0aGUgcmVzdWx0IGluIGEgZGF0YSBmcmFtZSBjb2x1bW4gbmFtZWQgcm9hX2xlYWQuXG5kZiA8LSBkZiAlPiUgXG4gIGdyb3VwX2J5KGNvbXBhbnkpICU+JVxuICBtdXRhdGUocm9hX2xlYWQ9bGVhZChyb2EpKSAlPiVcbiAgdW5ncm91cCgpXG5cbiNFTkQiLCJzY3QiOiIjIFRlbXBsYXRlIGJhc2VkIG9uIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy90ZXN0d2hhdC92ZXJzaW9ucy80LjEuMVxuIyBDaGVjayBpZiBzb21ldGhpbmcgaXMgZXhwbGljaXRseSB0eXBlZFxuXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwiJ3JvYV9sZWFkJyAlaW4lIGNvbG5hbWVzKGRmKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSByZW1lbWJlciB0byBzYXZlIHRoZSBvdXRwdXQgdG8gdGhlIGRhdGFmcmFtZSwgYW5kIHRvIG5hbWUgdGhlIGNvbHVtbiBgcm9hX2xlYWRgP1wiKVxudGVzdF9leHByZXNzaW9uX291dHB1dChcImRmJHJvYV9sZWFkWzFdXCIsIGluY29ycmVjdF9tc2c9XCJJdCBsb29rcyBsaWtlIHRoZSBjYWxjdWxhdGlvbiBpcyB3cm9uZy5cIilcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJkZiRyb2FfbGVhZFsyXVwiLCBpbmNvcnJlY3RfbXNnPVwiSXQgbG9va3MgbGlrZSB0aGUgY2FsY3VsYXRpb24gaXMgd3JvbmcuXCIpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwiZGYkcm9hX2xlYWRbM11cIiwgaW5jb3JyZWN0X21zZz1cIk1ha2Ugc3VyZSB0byBhcHByb3ByaWF0ZWx5IGdyb3VwIHRoZSBkYXRhIC0tIHVzZSBgZ3JvdXBfYnkoKWAgYXBwbGllZCB0byBgY29tcGFueWAuXCIpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwiZGYkcm9hX2xlYWRcIiwgaW5jb3JyZWN0X21zZz1cIkl0IGxvb2tzIGxpa2UgeW91ciBjYWxjdWxhdGlvbiBpcyB3cm9uZyAtLSB5b3UgaGF2ZSB0aGUgZmlyc3QgMyBlbnRyaWVzIG9mIHRoZSBjb2x1bW4gY29ycmVjdCB0aG91Z2guXCIpXG50ZXN0X3N0dWRlbnRfdHlwZWQoJ2dyb3VwX2J5KCcsbm90X3R5cGVkX21zZz0nWW91ciByZXN1bHQgaXMgY29ycmVjdCwgYnV0IGl0IGxvb2tzIGxpa2UgeW91IGRpZG5cXCd0IHVzZSBgZ3JvdXBfYnlgIHRvIGNhbGN1bGF0ZSBpdC4nKVxudGVzdF9zdHVkZW50X3R5cGVkKCdtdXRhdGUoJyxub3RfdHlwZWRfbXNnPSdZb3VyIHJlc3VsdCBpcyBjb3JyZWN0LCBidXQgaXQgbG9va3MgbGlrZSB5b3UgZGlkblxcJ3QgdXNlIGBtdXRhdGVgIHRvIGNhbGN1bGF0ZSBpdC4nKVxudGVzdF9zdHVkZW50X3R5cGVkKCdsZWFkKCcsbm90X3R5cGVkX21zZz0nWW91ciByZXN1bHQgaXMgY29ycmVjdCwgYnV0IGl0IGxvb2tzIGxpa2UgeW91IGRpZG5cXCd0IHVzZSBgbGVhZGAgdG8gY2FsY3VsYXRlIGl0LicpXG50ZXN0X3N0dWRlbnRfdHlwZWQoJ3VuZ3JvdXAoJyxub3RfdHlwZWRfbXNnPSdZb3VyIHJlc3VsdCBpcyBjb3JyZWN0LCBidXQgaXQgbG9va3MgbGlrZSB5b3UgZGlkblxcJ3QgdW5ncm91cCB0aGUgZGF0YSBhZnRlciB0aGUgY2FsY3VsYXRpb24uJylcblxuIyB0ZXN0X3N0dWRlbnRfdHlwZWQoJ3ggPC0gMicsIG5vdF90eXBlZF9tc2c9JycpXG5cbiMgQ2hlY2sgaWYgZnVuY3Rpb24gd2FzIHVzZWQgaW4gaW5wdXQgY29kZVxuIyB0ZXN0X2Z1bmN0aW9uKCdjJyxpbmNvcnJlY3RfbXNnPScnKSAgXG5cbiMgUmVxdWlyZXMgYW4gb2JqZWN0IGB4YCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBzb2x1dGlvblxuIyB0ZXN0X29iamVjdChcInhcIixpbmNvcnJlY3RfbXNnID0gXCJcIix1bmRlZmluZWRfbXNnID0gXCJcIikgIFxuXG4jIFJlcXVpcmVzIGFuIG9uamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIGB4YCBpbiB0aGUgc29sdXRpb25cbiMgdGVzdF9hbl9vYmplY3QoXCJ4XCIsdW5kZWZpbmVkX21zZz1cIlwiKVxuXG4jIENoZWNrcyBpZiBvdXRwdXQgb2Ygc3R1ZGVudCdzIGNvZGUgY29udGFpbnMgZ2l2ZW4gZXZhbHVhdGVkIGV4cHJlc3Npb25cbiMgdGVzdF9vdXRwdXRfY29udGFpbnMoXCJ4XCIsaW5jb3JyZWN0X21zZyA9IFwiXCIpXG5cbiMgQ2hlY2sgaWYgYSB2ZWN0b3Igb2YgcHJlZGVmaW5lZCBvYmplY3RzIGFyZSB1bmNoYW5nZWRcbiMgdGVzdF9wcmVkZWZpbmVkX29iamVjdHMoYygneCcsJ3knKSxpbmNvcnJlY3RfbXNnPVwiRG9uJ3Qgb252ZXJ3cml0ZSB0aGUgcHJlZGVmaW5lZCB2YXJpYWJsZXNcIilcblxuIyBDaGVja3MgZm9yIGEgcmVnZXggcGF0dGVybiBpbiB0cmhlIG91dHB1dFxuIyB0ZXN0X291dHB1dF9yZWdleChwYXR0ZXJuLGZpeGVkPUYsIHRpbWVzPTEsIGluY29ycmVjdF9tc2c9JycpXG5cbiMgQ2FuIGNoZWNrIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGFjcm9zcyBib3RoIHNvbHV0aW9uIGFuZCBzdHVkZW50IGNvZGVcbiN0ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwidHlwZW9mKGNvbXBhbnlfbmFtZSlcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3Ugc3RvcmUgdGV4dHVhbCBkYXRhIGluIGBjb21wYW55X25hbWVgP1wiKVxuXG50ZXN0X2Vycm9yKClcbnN1Y2Nlc3NfbXNnKFwiQXdlc29tZSFcIilcblxuIyBPdGhlciBmdW5jdGlvbnMgdG8gbm90ZTpcbiMgICAgIC0gdGVzdF9vcihhLGIpIC0tIGNoZWNrcyBpZiBlaXRoZXIgdGVzdCBhIG9yIHRlc3QgYiBwYXNzXG4jICAgICAtIHRlc3RfZ2dwbG90KCkgLS0gY2FuIGNoZWNrIGlmIHBsb3RzIGFyZSBjb3JyZWN0XG4jICAgICAtIHRlc3RfZnVuY3Rpb24oKSAtLSBjYW4gYWxzbyBjaGVjayBpbmNsdWRlZCBwYXJhbWV0ZXJzXG4jICAgICAtIHRlc3RfbG9vcCgpIC0tIGNoZWNraW5nIGZvciBhbmQgd2hpbGUgbG9vcHNcbiMgICAgIC0gdGVzdF9saWJyYXJ5X2Z1bmN0aW9uKCdwYWNrYWdlJywgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9pZl9lbHNlKCkgLS0gY2hlY2tpbmcgaWYgc3RhdGVtZW50c1xuIyAgICAgLSB0ZXN0X2V4cHJlc3Npb25fZXJyb3IoKSAtLSBjYW4gY2hlY2sgaWYgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBkZWZpbmVkXG4jICAgICAtIHRlc3Rfb3BlcmF0b3IoJ29wZXJhdG9yJywpLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uX2RlZmluaXRpb24oKSAtLSByaWdvcm91c2x5IGNoZWNrIGRlZmluZWQgZnVuY3Rpb25cbiMgICAgIC0gdGVzdF9kYXRhX2ZyYW1lKCkgLS0gY2hlY2sgaWYgZGF0YWZyYW1lIFtjb2x1bW5zXSBhcmUgZXF1aXZhbGVudFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uX3Jlc3VsdCwgdGVzdF9leHByZXNzaW9uX3Jlc3VsdCJ9
Exercise 3: Using mutate() and lag()
Note: Asset turnover is: \[
Asset~Turnover_t = \frac{Revenue_t}{\frac{1}{2}(Assets_t + Assets_{t-1})}
\]
eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoZHBseXIpICMgbG9hZHMgZHBseXIgZm9yIGRhdGEgbWFuaXB1bGF0aW9uXG5kZiA8LSBkYXRhLmZyYW1lKGNvbXBhbnk9YyhcIlVPTCBHcm91cFwiLCBcIlVPTCBHcm91cFwiLCBcIlVPTCBHcm91cFwiLCBcIlVuaXRlZCBFbmdpbmVlcnMgTHRkXCIsIFwiVW5pdGVkIEVuZ2luZWVycyBMdGRcIiwgXCJVbml0ZWQgRW5naW5lZXJzIEx0ZFwiLCBcIlRvcCBHbG9iYWwgTHRkXCIsIFwiVG9wIEdsb2JhbCBMdGRcIiwgXCJUb3AgR2xvYmFsIEx0ZFwiKSxcbiAgICAgICAgICAgICAgICAgeWVhcj1jKDIwMTAsIDIwMTEsIDIwMTIsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTAsIDIwMTEsIDIwMTIpLFxuICAgICAgICAgICAgICAgICByZXZlbnVlPWMoMTI5NSwgMTk2MCwgMTE0NiwgOTAxLCAxMTg3LCA1OTUsIDQuNSwgNC44LCA1LjUpLFxuICAgICAgICAgICAgICAgICBhc3NldHM9Yyg3OTM5LCA4NTI0LCA5NTY0LCAyNDEwLCAzMDgwLCAzNDUxLCAxMDksIDEyNSwgMjk1KSxcbiAgICAgICAgICAgICAgICAgZWFybmluZ3M9Yyg3NDYsIDY2NCwgODA4LCAxODYsIDI2OSwgNzIsIC03LjUsIDE2LCAxNikpXG5kZiA8LSBkZiAlPiVcbiAgbXV0YXRlKHJvYT1lYXJuaW5ncy9hc3NldHMpXG5kZiA8LSBkZiAlPiUgXG4gIGdyb3VwX2J5KGNvbXBhbnkpICU+JVxuICBtdXRhdGUocm9hX2xlYWQ9bGVhZChyb2EpKSAlPiVcbiAgdW5ncm91cCgpIiwic2FtcGxlIjoiIyBUaGUgZGF0YWZyYW1lIGJlbG93IGNvbnRhaW5zIGhpc3RvcmljYWwgZWFybmluZ3MsIHJldmVudWUsXG4jIGFuZCBhc3NldHMgZm9yIDMgeWVhcnMgKDIwMTAsIDIwMTEsIGFuZCAyMDEyKSBhbmQgMyBmaXJtc1xuIyBJdCBhbHNvIGNvbnRhaW5zIHJvYSBhbmQgcm9hX2xlYWQgZnJvbSB0aGUgZmlyc3QgdHdvIGV4ZXJjaXNlc1xuZGZcblxuIyBkcGx5ciBpcyBhbHJlYWR5IGxvYWRlZFxuXG4jIENhbGN1bGF0ZSB0aGUgYXNzZXQgdHVybm92ZXIsIHVzaW5nIGdyb3VwX2J5LCBtdXRhdGUsIGxhZywgYW5kIHVuZ3JvdXAuXG4jIFRoZSBmb3JtdWxhIGZvciBhc3NldCB0dXJub3ZlciBpcyBnaXZlbiBhYm92ZVxuIyBTdG9yZSB0aGUgcmVzdWx0IGluIGEgZGF0YSBmcmFtZSBjb2x1bW4gbmFtZWQgdHVybm92ZXIuXG5cblxuI0VORCIsInNvbHV0aW9uIjoiIyBUaGUgZGF0YWZyYW1lIGJlbG93IGNvbnRhaW5zIGhpc3RvcmljYWwgZWFybmluZ3MsIHJldmVudWUsXG4jIGFuZCBhc3NldHMgZm9yIDMgeWVhcnMgKDIwMTAsIDIwMTEsIGFuZCAyMDEyKSBhbmQgMyBmaXJtc1xuIyBJdCBhbHNvIGNvbnRhaW5zIHJvYSBhbmQgcm9hX2xlYWQgZnJvbSB0aGUgZmlyc3QgdHdvIGV4ZXJjaXNlc1xuZGZcblxuIyBkcGx5ciBpcyBhbHJlYWR5IGxvYWRlZFxuXG4jIENhbGN1bGF0ZSB0aGUgYXNzZXQgdHVybm92ZXIsIHVzaW5nIGdyb3VwX2J5LCBtdXRhdGUsIGxhZywgYW5kIHVuZ3JvdXAuXG4jIFRoZSBmb3JtdWxhIGZvciBhc3NldCB0dXJub3ZlciBpcyBnaXZlbiBhYm92ZVxuIyBTdG9yZSB0aGUgcmVzdWx0IGluIGEgZGF0YSBmcmFtZSBjb2x1bW4gbmFtZWQgdHVybm92ZXIuXG5kZiA8LSBkZiAlPiUgXG4gIGdyb3VwX2J5KGNvbXBhbnkpICU+JVxuICBtdXRhdGUodHVybm92ZXI9cmV2ZW51ZSAvICgwLjUgKiAoYXNzZXRzK2xhZyhhc3NldHMpKSkpICU+JVxuICB1bmdyb3VwKClcblxuI0VORCIsInNjdCI6IiMgVGVtcGxhdGUgYmFzZWQgb24gaHR0cHM6Ly93d3cucmRvY3VtZW50YXRpb24ub3JnL3BhY2thZ2VzL3Rlc3R3aGF0L3ZlcnNpb25zLzQuMS4xXG4jIENoZWNrIGlmIHNvbWV0aGluZyBpcyBleHBsaWNpdGx5IHR5cGVkXG5cbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCIndHVybm92ZXInICVpbiUgY29sbmFtZXMoZGYpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IHJlbWVtYmVyIHRvIHNhdmUgdGhlIG91dHB1dCB0byB0aGUgZGF0YWZyYW1lLCBhbmQgdG8gbmFtZSB0aGUgY29sdW1uIGB0dXJub3ZlcmA/XCIpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwiZGYkdHVybm92ZXJbMl1cIiwgaW5jb3JyZWN0X21zZz1cIkl0IGxvb2tzIGxpa2UgdGhlIGNhbGN1bGF0aW9uIGlzIHdyb25nLlwiKVxudGVzdF9leHByZXNzaW9uX291dHB1dChcImRmJHR1cm5vdmVyWzNdXCIsIGluY29ycmVjdF9tc2c9XCJJdCBsb29rcyBsaWtlIHRoZSBjYWxjdWxhdGlvbiBpcyB3cm9uZy5cIilcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJkZiR0dXJub3Zlcls0XVwiLCBpbmNvcnJlY3RfbXNnPVwiTWFrZSBzdXJlIHRvIGFwcHJvcHJpYXRlbHkgZ3JvdXAgdGhlIGRhdGEgLS0gdXNlIGBncm91cF9ieSgpYCBhcHBsaWVkIHRvIGBjb21wYW55YC5cIilcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJkZiR0dXJub3ZlclwiLCBpbmNvcnJlY3RfbXNnPVwiSXQgbG9va3MgbGlrZSB5b3VyIGNhbGN1bGF0aW9uIGlzIHdyb25nIC0tIHlvdSBoYXZlIGVudHJpZXMgMiwgMyBhbmQgNCBvZiB0aGUgY29sdW1uIGNvcnJlY3QgdGhvdWdoLlwiKVxudGVzdF9zdHVkZW50X3R5cGVkKCdncm91cF9ieSgnLG5vdF90eXBlZF9tc2c9J1lvdXIgcmVzdWx0IGlzIGNvcnJlY3QsIGJ1dCBpdCBsb29rcyBsaWtlIHlvdSBkaWRuXFwndCB1c2UgYGdyb3VwX2J5YCB0byBjYWxjdWxhdGUgaXQuJylcbnRlc3Rfc3R1ZGVudF90eXBlZCgnbXV0YXRlKCcsbm90X3R5cGVkX21zZz0nWW91ciByZXN1bHQgaXMgY29ycmVjdCwgYnV0IGl0IGxvb2tzIGxpa2UgeW91IGRpZG5cXCd0IHVzZSBgbXV0YXRlYCB0byBjYWxjdWxhdGUgaXQuJylcbnRlc3Rfc3R1ZGVudF90eXBlZCgnbGFnKCcsbm90X3R5cGVkX21zZz0nWW91ciByZXN1bHQgaXMgY29ycmVjdCwgYnV0IGl0IGxvb2tzIGxpa2UgeW91IGRpZG5cXCd0IHVzZSBgbGFnYCB0byBjYWxjdWxhdGUgaXQuJylcbnRlc3Rfc3R1ZGVudF90eXBlZCgndW5ncm91cCgnLG5vdF90eXBlZF9tc2c9J1lvdXIgcmVzdWx0IGlzIGNvcnJlY3QsIGJ1dCBpdCBsb29rcyBsaWtlIHlvdSBkaWRuXFwndCB1bmdyb3VwIHRoZSBkYXRhIGFmdGVyIHRoZSBjYWxjdWxhdGlvbi4nKVxuXG4jIHRlc3Rfc3R1ZGVudF90eXBlZCgneCA8LSAyJywgbm90X3R5cGVkX21zZz0nJylcblxuIyBDaGVjayBpZiBmdW5jdGlvbiB3YXMgdXNlZCBpbiBpbnB1dCBjb2RlXG4jIHRlc3RfZnVuY3Rpb24oJ2MnLGluY29ycmVjdF9tc2c9JycpICBcblxuIyBSZXF1aXJlcyBhbiBvYmplY3QgYHhgIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHNvbHV0aW9uXG4jIHRlc3Rfb2JqZWN0KFwieFwiLGluY29ycmVjdF9tc2cgPSBcIlwiLHVuZGVmaW5lZF9tc2cgPSBcIlwiKSAgXG5cbiMgUmVxdWlyZXMgYW4gb25qZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgYHhgIGluIHRoZSBzb2x1dGlvblxuIyB0ZXN0X2FuX29iamVjdChcInhcIix1bmRlZmluZWRfbXNnPVwiXCIpXG5cbiMgQ2hlY2tzIGlmIG91dHB1dCBvZiBzdHVkZW50J3MgY29kZSBjb250YWlucyBnaXZlbiBldmFsdWF0ZWQgZXhwcmVzc2lvblxuIyB0ZXN0X291dHB1dF9jb250YWlucyhcInhcIixpbmNvcnJlY3RfbXNnID0gXCJcIilcblxuIyBDaGVjayBpZiBhIHZlY3RvciBvZiBwcmVkZWZpbmVkIG9iamVjdHMgYXJlIHVuY2hhbmdlZFxuIyB0ZXN0X3ByZWRlZmluZWRfb2JqZWN0cyhjKCd4JywneScpLGluY29ycmVjdF9tc2c9XCJEb24ndCBvbnZlcndyaXRlIHRoZSBwcmVkZWZpbmVkIHZhcmlhYmxlc1wiKVxuXG4jIENoZWNrcyBmb3IgYSByZWdleCBwYXR0ZXJuIGluIHRyaGUgb3V0cHV0XG4jIHRlc3Rfb3V0cHV0X3JlZ2V4KHBhdHRlcm4sZml4ZWQ9RiwgdGltZXM9MSwgaW5jb3JyZWN0X21zZz0nJylcblxuIyBDYW4gY2hlY2sgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24gYWNyb3NzIGJvdGggc29sdXRpb24gYW5kIHN0dWRlbnQgY29kZVxuI3Rlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YoY29tcGFueV9uYW1lKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSBzdG9yZSB0ZXh0dWFsIGRhdGEgaW4gYGNvbXBhbnlfbmFtZWA/XCIpXG5cbnRlc3RfZXJyb3IoKVxuc3VjY2Vzc19tc2coXCJBd2Vzb21lIVwiKVxuXG4jIE90aGVyIGZ1bmN0aW9ucyB0byBub3RlOlxuIyAgICAgLSB0ZXN0X29yKGEsYikgLS0gY2hlY2tzIGlmIGVpdGhlciB0ZXN0IGEgb3IgdGVzdCBiIHBhc3NcbiMgICAgIC0gdGVzdF9nZ3Bsb3QoKSAtLSBjYW4gY2hlY2sgaWYgcGxvdHMgYXJlIGNvcnJlY3RcbiMgICAgIC0gdGVzdF9mdW5jdGlvbigpIC0tIGNhbiBhbHNvIGNoZWNrIGluY2x1ZGVkIHBhcmFtZXRlcnNcbiMgICAgIC0gdGVzdF9sb29wKCkgLS0gY2hlY2tpbmcgZm9yIGFuZCB3aGlsZSBsb29wc1xuIyAgICAgLSB0ZXN0X2xpYnJhcnlfZnVuY3Rpb24oJ3BhY2thZ2UnLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2lmX2Vsc2UoKSAtLSBjaGVja2luZyBpZiBzdGF0ZW1lbnRzXG4jICAgICAtIHRlc3RfZXhwcmVzc2lvbl9lcnJvcigpIC0tIGNhbiBjaGVjayBpZiBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGRlZmluZWRcbiMgICAgIC0gdGVzdF9vcGVyYXRvcignb3BlcmF0b3InLCksIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfZnVuY3Rpb25fZGVmaW5pdGlvbigpIC0tIHJpZ29yb3VzbHkgY2hlY2sgZGVmaW5lZCBmdW5jdGlvblxuIyAgICAgLSB0ZXN0X2RhdGFfZnJhbWUoKSAtLSBjaGVjayBpZiBkYXRhZnJhbWUgW2NvbHVtbnNdIGFyZSBlcXVpdmFsZW50XG4jICAgICAtIHRlc3RfZnVuY3Rpb25fcmVzdWx0LCB0ZXN0X2V4cHJlc3Npb25fcmVzdWx0In0=
Exercise 4: A simple scatterplot with ggplot2
Note: it appears that Datacamp-light can’t test plot accuracy at the time of writing this. As such, please manually check the solution once you think you know the answer, or if you get stuck.
eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoZHBseXIpICMgbG9hZHMgZHBseXIgZm9yIGRhdGEgbWFuaXB1bGF0aW9uXG5kZiA8LSBkYXRhLmZyYW1lKGNvbXBhbnk9YyhcIlVPTCBHcm91cFwiLCBcIlVPTCBHcm91cFwiLCBcIlVPTCBHcm91cFwiLCBcIlVuaXRlZCBFbmdpbmVlcnMgTHRkXCIsIFwiVW5pdGVkIEVuZ2luZWVycyBMdGRcIiwgXCJVbml0ZWQgRW5naW5lZXJzIEx0ZFwiLCBcIlRvcCBHbG9iYWwgTHRkXCIsIFwiVG9wIEdsb2JhbCBMdGRcIiwgXCJUb3AgR2xvYmFsIEx0ZFwiKSxcbiAgICAgICAgICAgICAgICAgeWVhcj1jKDIwMTAsIDIwMTEsIDIwMTIsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTAsIDIwMTEsIDIwMTIpLFxuICAgICAgICAgICAgICAgICByZXZlbnVlPWMoMTI5NSwgMTk2MCwgMTE0NiwgOTAxLCAxMTg3LCA1OTUsIDQuNSwgNC44LCA1LjUpLFxuICAgICAgICAgICAgICAgICBhc3NldHM9Yyg3OTM5LCA4NTI0LCA5NTY0LCAyNDEwLCAzMDgwLCAzNDUxLCAxMDksIDEyNSwgMjk1KSxcbiAgICAgICAgICAgICAgICAgZWFybmluZ3M9Yyg3NDYsIDY2NCwgODA4LCAxODYsIDI2OSwgNzIsIC03LjUsIDE2LCAxNikpXG5kZiA8LSBkZiAlPiVcbiAgbXV0YXRlKHJvYT1lYXJuaW5ncy9hc3NldHMpXG5kZiA8LSBkZiAlPiUgXG4gIGdyb3VwX2J5KGNvbXBhbnkpICU+JVxuICBtdXRhdGUocm9hX2xlYWQ9bGVhZChyb2EpKSAlPiVcbiAgdW5ncm91cCgpXG5kZiA8LSBkZiAlPiUgXG4gIGdyb3VwX2J5KGNvbXBhbnkpICU+JVxuICBtdXRhdGUodHVybm92ZXI9cmV2ZW51ZSAvICgwLjUgKiAoYXNzZXRzK2xhZyhhc3NldHMpKSkpICU+JVxuICB1bmdyb3VwKCkiLCJzYW1wbGUiOiIjIFRoZSBkYXRhZnJhbWUgYmVsb3cgY29udGFpbnMgaGlzdG9yaWNhbCBlYXJuaW5ncywgcmV2ZW51ZSxcbiMgYW5kIGFzc2V0cyBmb3IgMyB5ZWFycyAoMjAxMCwgMjAxMSwgYW5kIDIwMTIpIGFuZCAzIGZpcm1zXG4jIEl0IGFsc28gY29udGFpbnMgcm9hLCByb2FfbGVhZCwgYW5kIHR1cm5vdmVyIGZyb20gdGhlIGFib3ZlIGV4ZXJjaXNlc1xuZGZcblxuIyBkcGx5ciBpcyBhbHJlYWR5IGxvYWRlZFxubGlicmFyeShnZ3Bsb3QyKVxuXG4jIGNyZWF0ZSBhIHNjYXR0ZXJwbG90IHdpdGg6XG4jICAgIDEuIFJPQSBvbiB0aGUgeC1heGlzXG4jICAgIDIuIDEgeWVhciBhaGVhZCBST0Egb24gdGhlIHktYXhpc1xuIyAgICAzLiBDb2xvcnMgYXBwbGllZCBieSBmaXJtXG5cblxuI0VORCIsInNvbHV0aW9uIjoiIyBUaGUgZGF0YWZyYW1lIGJlbG93IGNvbnRhaW5zIGhpc3RvcmljYWwgZWFybmluZ3MsIHJldmVudWUsXG4jIGFuZCBhc3NldHMgZm9yIDMgeWVhcnMgKDIwMTAsIDIwMTEsIGFuZCAyMDEyKSBhbmQgMyBmaXJtc1xuIyBJdCBhbHNvIGNvbnRhaW5zIHJvYSwgcm9hX2xlYWQsIGFuZCB0dXJub3ZlciBmcm9tIHRoZSBhYm92ZSBleGVyY2lzZXNcbmRmXG5cbiMgZHBseXIgaXMgYWxyZWFkeSBsb2FkZWRcbmxpYnJhcnkoZ2dwbG90MilcblxuIyBjcmVhdGUgYSBzY2F0dGVycGxvdCB3aXRoOlxuIyAgICAxLiBST0Egb24gdGhlIHgtYXhpc1xuIyAgICAyLiAxIHllYXIgYWhlYWQgUk9BIG9uIHRoZSB5LWF4aXNcbiMgICAgMy4gQ29sb3JzIGFwcGxpZWQgYnkgZmlybVxuZ2dwbG90KGRhdGE9ZGYsIGFlcyh5PXJvYV9sZWFkLCB4PXJvYSwgY29sb3I9Y29tcGFueSkpICtcbiAgZ2VvbV9wb2ludCgpXG5cbiNFTkQiLCJzY3QiOiIjIFRlbXBsYXRlIGJhc2VkIG9uIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy90ZXN0d2hhdC92ZXJzaW9ucy80LjEuMVxuIyBDaGVjayBpZiBzb21ldGhpbmcgaXMgZXhwbGljaXRseSB0eXBlZFxuXG50ZXN0X2dncGxvdChkYXRhX2ZhaWxfbXNnPVwiTWFrZSBzdXJlIHRvIHVzZSB0aGUgY29ycmVjdCBkYXRhIGZvciB0aGUgYGRhdGFgIGFyZ3VtZW50IHRvIGBnZ3Bsb3QoKWAuXCIsXG4gICAgICAgICAgICBhZXNfZmFpbF9tc2c9XCJEaWQgeW91IHNwZWNpZnkgYHJvYV9sZWFkYCBmb3IgYHlgLCBgcm9hYCBmb3IgYHhgLCBhbmQgYGNvbXBhbnlgIGZvciBjb2xvcj9cIixcbiAgICAgICAgICAgIGdlb21fZmFpbF9tc2cgPSBcIkRpZCB5b3UgYWRkIGEgYGdlb21fcG9pbnRgIGxheWVyIGJ5ICwgd2l0aCBgK2AsIGBnZW9tX3BvaW50KClgIHRvIHlvdXIgY2FsbCB0byBgZ2dwbG90KClgP1wiKVxuXG5leCgpICU+JSB7XG4gIGNoZWNrX2Z1bmN0aW9uKC4sICdnZ3Bsb3QnKSAlPiUge1xuICAgICAgY2hlY2tfYXJnKC4sICdkYXRhJykgJT4lIGNoZWNrX2VxdWFsKClcbiAgICAgIGNoZWNrX2FyZyguLCAnbWFwcGluZycpICU+JSBjaGVja19mdW5jdGlvbignYWVzJykgJT4lIHtcbiAgICAgICAgY2hlY2tfYXJnKC4sICd4JykgJT4lIGNoZWNrX2VxdWFsKGV2YWwgPSBGQUxTRSlcbiAgICAgICAgY2hlY2tfYXJnKC4sICd5JykgJT4lIGNoZWNrX2VxdWFsKGV2YWwgPSBGQUxTRSlcbiAgICAgIH1cbiAgfVxuICBjaGVja19mdW5jdGlvbiguLCAnZ2VvbV9wb2ludCcpXG4gIGNoZWNrX2Vycm9yKC4pXG59XG5cbiMgdGVzdF9zdHVkZW50X3R5cGVkKCd4IDwtIDInLCBub3RfdHlwZWRfbXNnPScnKVxuXG4jIENoZWNrIGlmIGZ1bmN0aW9uIHdhcyB1c2VkIGluIGlucHV0IGNvZGVcbiMgdGVzdF9mdW5jdGlvbignYycsaW5jb3JyZWN0X21zZz0nJykgIFxuXG4jIFJlcXVpcmVzIGFuIG9iamVjdCBgeGAgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgc29sdXRpb25cbiMgdGVzdF9vYmplY3QoXCJ4XCIsaW5jb3JyZWN0X21zZyA9IFwiXCIsdW5kZWZpbmVkX21zZyA9IFwiXCIpICBcblxuIyBSZXF1aXJlcyBhbiBvbmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiBgeGAgaW4gdGhlIHNvbHV0aW9uXG4jIHRlc3RfYW5fb2JqZWN0KFwieFwiLHVuZGVmaW5lZF9tc2c9XCJcIilcblxuIyBDaGVja3MgaWYgb3V0cHV0IG9mIHN0dWRlbnQncyBjb2RlIGNvbnRhaW5zIGdpdmVuIGV2YWx1YXRlZCBleHByZXNzaW9uXG4jIHRlc3Rfb3V0cHV0X2NvbnRhaW5zKFwieFwiLGluY29ycmVjdF9tc2cgPSBcIlwiKVxuXG4jIENoZWNrIGlmIGEgdmVjdG9yIG9mIHByZWRlZmluZWQgb2JqZWN0cyBhcmUgdW5jaGFuZ2VkXG4jIHRlc3RfcHJlZGVmaW5lZF9vYmplY3RzKGMoJ3gnLCd5JyksaW5jb3JyZWN0X21zZz1cIkRvbid0IG9udmVyd3JpdGUgdGhlIHByZWRlZmluZWQgdmFyaWFibGVzXCIpXG5cbiMgQ2hlY2tzIGZvciBhIHJlZ2V4IHBhdHRlcm4gaW4gdHJoZSBvdXRwdXRcbiMgdGVzdF9vdXRwdXRfcmVnZXgocGF0dGVybixmaXhlZD1GLCB0aW1lcz0xLCBpbmNvcnJlY3RfbXNnPScnKVxuXG4jIENhbiBjaGVjayBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBhY3Jvc3MgYm90aCBzb2x1dGlvbiBhbmQgc3R1ZGVudCBjb2RlXG4jdGVzdF9leHByZXNzaW9uX291dHB1dChcInR5cGVvZihjb21wYW55X25hbWUpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IHN0b3JlIHRleHR1YWwgZGF0YSBpbiBgY29tcGFueV9uYW1lYD9cIilcblxudGVzdF9lcnJvcigpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhXCIpXG5cbiMgT3RoZXIgZnVuY3Rpb25zIHRvIG5vdGU6XG4jICAgICAtIHRlc3Rfb3IoYSxiKSAtLSBjaGVja3MgaWYgZWl0aGVyIHRlc3QgYSBvciB0ZXN0IGIgcGFzc1xuIyAgICAgLSB0ZXN0X2dncGxvdCgpIC0tIGNhbiBjaGVjayBpZiBwbG90cyBhcmUgY29ycmVjdFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uKCkgLS0gY2FuIGFsc28gY2hlY2sgaW5jbHVkZWQgcGFyYW1ldGVyc1xuIyAgICAgLSB0ZXN0X2xvb3AoKSAtLSBjaGVja2luZyBmb3IgYW5kIHdoaWxlIGxvb3BzXG4jICAgICAtIHRlc3RfbGlicmFyeV9mdW5jdGlvbigncGFja2FnZScsIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfaWZfZWxzZSgpIC0tIGNoZWNraW5nIGlmIHN0YXRlbWVudHNcbiMgICAgIC0gdGVzdF9leHByZXNzaW9uX2Vycm9yKCkgLS0gY2FuIGNoZWNrIGlmIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgZGVmaW5lZFxuIyAgICAgLSB0ZXN0X29wZXJhdG9yKCdvcGVyYXRvcicsKSwgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9kZWZpbml0aW9uKCkgLS0gcmlnb3JvdXNseSBjaGVjayBkZWZpbmVkIGZ1bmN0aW9uXG4jICAgICAtIHRlc3RfZGF0YV9mcmFtZSgpIC0tIGNoZWNrIGlmIGRhdGFmcmFtZSBbY29sdW1uc10gYXJlIGVxdWl2YWxlbnRcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9yZXN1bHQsIHRlc3RfZXhwcmVzc2lvbl9yZXN1bHQifQ==