A. Creating Vectors

In this section, you are expected to be able to shape data in vectors, perform basic mathematical operations, and also manipulate vectors.

Exercise 1

Create a vector A containing numeric values, starting from the last 2 digits of your student id up to 30.

A<- c(04:30)
A
##  [1]  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
## [26] 29 30

Exercise 2

Create a vector B containing 12 character values; all names of your classmate including yourself.

B<- c("Ardifo","Jocelyn","Julian","Kefas","Nikita","Sherly","Vanessa","Jeffry","Lala","Siana","Putri","Fallen")
B
##  [1] "Ardifo"  "Jocelyn" "Julian"  "Kefas"   "Nikita"  "Sherly"  "Vanessa"
##  [8] "Jeffry"  "Lala"    "Siana"   "Putri"   "Fallen"

Exercise 3

Create a vector C containing 12 numeric values, random number between 60 and 100.

C<- c(70,71,71,73,74,75,76,77,78,79,80,81) 
C
##  [1] 70 71 71 73 74 75 76 77 78 79 80 81

B. Creating Matrices

In this section, you are expected to be able to shape data in Matrices, perform basic mathematical operations, and also manipulate Matrices.

Exercise 4

Create a matrices M1 order by \(rows \times columns \space (4 \times 4)\) containing 16 numeric values, random number between 60 and 100.

M1<- matrix(70:85, nrow = 4, ncol = 4)  
M1
##      [,1] [,2] [,3] [,4]
## [1,]   70   74   78   82
## [2,]   71   75   79   83
## [3,]   72   76   80   84
## [4,]   73   77   81   85

Exercise 5

Create a matrices M2 order by \(rows \times columns \space (4 \times 4)\) containing 16 numeric values, random number between 30 and 60. Find out the following tasks:

  • 3 * M1, give your opinion about the result.
  • M1 + M2, give your opinion about the result.
  • M1 - M2, give your opinion about the result.
  • M1 * M2, give your opinion about the result.
  • M1 / M2, give your opinion about the result.
  • determinan of M1, give your opinion about the result.
  • invers of M1, give your opinion about the result.
M2<- matrix(40:55, nrow = 4, ncol = 4)
M2
##      [,1] [,2] [,3] [,4]
## [1,]   40   44   48   52
## [2,]   41   45   49   53
## [3,]   42   46   50   54
## [4,]   43   47   51   55
3 * M1    # nilai yang ada pada matriks M1 dikali dengan 3
##      [,1] [,2] [,3] [,4]
## [1,]  210  222  234  246
## [2,]  213  225  237  249
## [3,]  216  228  240  252
## [4,]  219  231  243  255
M1 + M2   # penjumlahan antara matriks 1 dan matriks 2
##      [,1] [,2] [,3] [,4]
## [1,]  110  118  126  134
## [2,]  112  120  128  136
## [3,]  114  122  130  138
## [4,]  116  124  132  140
M1 - M2   # Pengurangan antara matriks 1 dengan matriks 2
##      [,1] [,2] [,3] [,4]
## [1,]   30   30   30   30
## [2,]   30   30   30   30
## [3,]   30   30   30   30
## [4,]   30   30   30   30
M1 * M2   # perkalian antara matriks 1 dan matriks 2
##      [,1] [,2] [,3] [,4]
## [1,] 2800 3256 3744 4264
## [2,] 2911 3375 3871 4399
## [3,] 3024 3496 4000 4536
## [4,] 3139 3619 4131 4675
M1 / M2   # pembagian antara matriks 1 dan matriks 2
##          [,1]     [,2]     [,3]     [,4]
## [1,] 1.750000 1.681818 1.625000 1.576923
## [2,] 1.731707 1.666667 1.612245 1.566038
## [3,] 1.714286 1.652174 1.600000 1.555556
## [4,] 1.697674 1.638298 1.588235 1.545455
det(M1)   # menghitung determinan dari matriks M1
## [1] -8.093713e-28

Exercise 6

Create a matrix data that is contain the following vectors:

  • B that you has been created in the exercise 2. Name it as a ‘names’ variable
  • C that you has been created in the exercise 3. Name it as a ‘scores’ variable.
names<- B
scores<- C
data<- cbind(names,scores)
data 
##       names     scores
##  [1,] "Ardifo"  "70"  
##  [2,] "Jocelyn" "71"  
##  [3,] "Julian"  "71"  
##  [4,] "Kefas"   "73"  
##  [5,] "Nikita"  "74"  
##  [6,] "Sherly"  "75"  
##  [7,] "Vanessa" "76"  
##  [8,] "Jeffry"  "77"  
##  [9,] "Lala"    "78"  
## [10,] "Siana"   "79"  
## [11,] "Putri"   "80"  
## [12,] "Fallen"  "81"

C. Lists

In this section, you are expected to be able to shape data by using the list() function, perform some basic manipulations.

Exercise 7

Please create a data set as the List variable by using the list() function, contain the following vectors:

  • a variable name, the values including your classmate and yourself
  • a variable age, the values including your classmate and yourself
  • a variable gender, the values including your classmate and yourself
name<-B
age<-c(19, 19, 19, 19, 19, 19, 18, 19, 19, 19, 19, 20)
gender<-c("Male", "Female", "Male", "Male", "Female", "Female", "Female", "Male", "Female", "Female", "Female", "Male")
List<-list(name, age, gender)
List 
## [[1]]
##  [1] "Ardifo"  "Jocelyn" "Julian"  "Kefas"   "Nikita"  "Sherly"  "Vanessa"
##  [8] "Jeffry"  "Lala"    "Siana"   "Putri"   "Fallen" 
## 
## [[2]]
##  [1] 19 19 19 19 19 19 18 19 19 19 19 20
## 
## [[3]]
##  [1] "Male"   "Female" "Male"   "Male"   "Female" "Female" "Female" "Male"  
##  [9] "Female" "Female" "Female" "Male"

D. Factors

In this section, you are expected to be able to shape data by using the factor() function, perform some basic manipulations.

Exercise 8

Please create a data set as the Factor variable as you have done at Exercise 7. Here, you add one more variable called marital_status by using the factor() function, as the following code:

marital_status <- factor(c("yes","no","yes","no", until 12 students))

E. Data Frames

In this section, you are expected to be able to shape data by using the data.frame() function, perform some basic manipulations.

Exercise 9

Please create a data set as the DF1 variable, contain the following vectors:

  • id, assume 1 up to 6
  • name the values according to your classmate and yourself
  • gender the values according to your classmate and yourself
  • age the values according to your classmate and yourself
  • marital_status the values according to your classmate and yourself
  • address_by_city the values according to your classmate and yourself
DF1<-data.frame(id=c(1:6),name=c("Ardifo","Julian","Vanessa","Kefas","Nikita","Jocelyn"),gender=c("Male","Male","Female","Male","Female","Female"),age=c(19,19,18,19,19,19),marital_status=c("single","single","single","single","single","single"),address_by_city=c("Kalimantan","Tangerang","Maluku","Tangerang","Tangerang","Tangerang"),stringsAsFactors = F)
DF1
##   id    name gender age marital_status address_by_city
## 1  1  Ardifo   Male  19         single      Kalimantan
## 2  2  Julian   Male  19         single       Tangerang
## 3  3 Vanessa Female  18         single          Maluku
## 4  4   Kefas   Male  19         single       Tangerang
## 5  5  Nikita Female  19         single       Tangerang
## 6  6 Jocelyn Female  19         single       Tangerang

Please create a data set as the DF2 variable, contain the following vectors:

  • id, assume 7 up to 12
  • name the values according to your classmate and yourself
  • gender the values according to your classmate and yourself
  • age the values according to your classmate and yourself
  • marital_status the values according to your classmate and yourself
  • address_by_city the values according to your classmate and yourself
DF2<-data.frame(id=c(1:6),name=c("Sherly","Putri","Jeffry","Siana","Lala","Falen"),gender=c("Female","Female","Male","Female","Female","Male"),age=c(19,19,19,19,19,20),marital_status=c("single","single","single","single","single","single"),address_by_city=c("Tangerang","Tangerang","Tangerang","Tangerang","Tangerang","Tangerang"),stringsAsFactors = F)
DF2
##   id   name gender age marital_status address_by_city
## 1  1 Sherly Female  19         single       Tangerang
## 2  2  Putri Female  19         single       Tangerang
## 3  3 Jeffry   Male  19         single       Tangerang
## 4  4  Siana Female  19         single       Tangerang
## 5  5   Lala Female  19         single       Tangerang
## 6  6  Falen   Male  20         single       Tangerang

Exercise 10

In this final exercise, please consider the following tasks:

  • Combine DF1 and DF2, assign it as SB19 variable!
  • Print the result of data frame SB19!
  • Print first 3 rows of the SB19 dataset!
  • How can you preview the SB19 dataset like an Excel file on your Rstudio?
  • Review the structure of the data frame SB19!
  • Check the dimension of the data.
  • Please apply piping functions to the data frame SB19, filter it by their gender accordingly! (as you have learn last week)
SB19<-rbind(DF1,DF2)
print(SB19)
##    id    name gender age marital_status address_by_city
## 1   1  Ardifo   Male  19         single      Kalimantan
## 2   2  Julian   Male  19         single       Tangerang
## 3   3 Vanessa Female  18         single          Maluku
## 4   4   Kefas   Male  19         single       Tangerang
## 5   5  Nikita Female  19         single       Tangerang
## 6   6 Jocelyn Female  19         single       Tangerang
## 7   1  Sherly Female  19         single       Tangerang
## 8   2   Putri Female  19         single       Tangerang
## 9   3  Jeffry   Male  19         single       Tangerang
## 10  4   Siana Female  19         single       Tangerang
## 11  5    Lala Female  19         single       Tangerang
## 12  6   Falen   Male  20         single       Tangerang
head(SB19,3)
##   id    name gender age marital_status address_by_city
## 1  1  Ardifo   Male  19         single      Kalimantan
## 2  2  Julian   Male  19         single       Tangerang
## 3  3 Vanessa Female  18         single          Maluku
#View(SB19)
dim(SB19)
## [1] 12  6
library(magrittr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data<-SB19 %>% filter(gender=="Male") %>% print()
##   id   name gender age marital_status address_by_city
## 1  1 Ardifo   Male  19         single      Kalimantan
## 2  2 Julian   Male  19         single       Tangerang
## 3  4  Kefas   Male  19         single       Tangerang
## 4  3 Jeffry   Male  19         single       Tangerang
## 5  6  Falen   Male  20         single       Tangerang
library(magrittr)
library(dplyr)
data<-SB19 %>% filter(gender=="Female") %>% print()
##   id    name gender age marital_status address_by_city
## 1  3 Vanessa Female  18         single          Maluku
## 2  5  Nikita Female  19         single       Tangerang
## 3  6 Jocelyn Female  19         single       Tangerang
## 4  1  Sherly Female  19         single       Tangerang
## 5  2   Putri Female  19         single       Tangerang
## 6  4   Siana Female  19         single       Tangerang
## 7  5    Lala Female  19         single       Tangerang
LS0tCnRpdGxlOiAiTGFiMzogUiBCYXNpY3MiCmF1dGhvcjogIktlZmFzIFJvbmFsZG8gSSBMIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0Ci0tLQoKYGBge3IgTG9nbywgZWNobz1GQUxTRSxmaWcuYWxpZ249J2NlbnRlcicsIG91dC53aWR0aCA9ICc0MCUnfQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiaHR0cHM6Ly9naXRodWIuY29tL0Jha3RpLVNpcmVnYXIvaW1hZ2VzL2Jsb2IvbWFzdGVyL2xvZ28ucG5nP3Jhdz10cnVlIikKYGBgCgojIyBBLiBDcmVhdGluZyBWZWN0b3JzIAoKSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBpbiB2ZWN0b3JzLCBwZXJmb3JtIGJhc2ljIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zLCBhbmQgYWxzbyBtYW5pcHVsYXRlIHZlY3RvcnMuCgojIyMgRXhlcmNpc2UgMQoKQ3JlYXRlIGEgdmVjdG9yIGBBYCBjb250YWluaW5nIG51bWVyaWMgdmFsdWVzLCBzdGFydGluZyBmcm9tIHRoZSBsYXN0IDIgZGlnaXRzIG9mIHlvdXIgc3R1ZGVudCBpZCB1cCB0byAzMC4KCmBgYHtyfQpBPC0gYygwNDozMCkKQQpgYGAKCiMjIyBFeGVyY2lzZSAyCgpDcmVhdGUgYSB2ZWN0b3IgYEJgIGNvbnRhaW5pbmcgMTIgY2hhcmFjdGVyIHZhbHVlczsgYWxsIG5hbWVzIG9mIHlvdXIgY2xhc3NtYXRlIGluY2x1ZGluZyB5b3Vyc2VsZi4KCmBgYHtyfQpCPC0gYygiQXJkaWZvIiwiSm9jZWx5biIsIkp1bGlhbiIsIktlZmFzIiwiTmlraXRhIiwiU2hlcmx5IiwiVmFuZXNzYSIsIkplZmZyeSIsIkxhbGEiLCJTaWFuYSIsIlB1dHJpIiwiRmFsbGVuIikKQgpgYGAKCiMjIyBFeGVyY2lzZSAzCgpDcmVhdGUgYSB2ZWN0b3IgIGBDYCBjb250YWluaW5nIDEyIG51bWVyaWMgdmFsdWVzLCByYW5kb20gbnVtYmVyIGJldHdlZW4gNjAgYW5kIDEwMC4KCmBgYHtyfQpDPC0gYyg3MCw3MSw3MSw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSkgCkMKYGBgCgoKIyMgQi4gQ3JlYXRpbmcgTWF0cmljZXMgCgpJbiB0aGlzIHNlY3Rpb24sIHlvdSBhcmUgZXhwZWN0ZWQgdG8gYmUgYWJsZSB0byBzaGFwZSBkYXRhIGluIE1hdHJpY2VzLCBwZXJmb3JtIGJhc2ljIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zLCBhbmQgYWxzbyBtYW5pcHVsYXRlIE1hdHJpY2VzLgoKCiMjIyBFeGVyY2lzZSA0CgpDcmVhdGUgYSBtYXRyaWNlcyBgTTFgIG9yZGVyIGJ5ICRyb3dzIFx0aW1lcyBjb2x1bW5zIFxzcGFjZSAoNCBcdGltZXMgNCkkIGNvbnRhaW5pbmcgMTYgbnVtZXJpYyB2YWx1ZXMsIHJhbmRvbSBudW1iZXIgYmV0d2VlbiA2MCBhbmQgMTAwLgoKYGBge3J9Ck0xPC0gbWF0cml4KDcwOjg1LCBucm93ID0gNCwgbmNvbCA9IDQpICAKTTEKYGBgCgojIyMgRXhlcmNpc2UgNQoKQ3JlYXRlIGEgbWF0cmljZXMgYE0yYCBvcmRlciBieSAkcm93cyBcdGltZXMgY29sdW1ucyBcc3BhY2UgKDQgXHRpbWVzIDQpJCBjb250YWluaW5nIDE2IG51bWVyaWMgdmFsdWVzLCByYW5kb20gbnVtYmVyIGJldHdlZW4gMzAgYW5kIDYwLiBGaW5kIG91dCB0aGUgZm9sbG93aW5nIHRhc2tzOgoKKiBgMyAqIE0xYCwgZ2l2ZSB5b3VyIG9waW5pb24gYWJvdXQgdGhlIHJlc3VsdC4gCiogYE0xICsgTTJgLCBnaXZlIHlvdXIgb3BpbmlvbiBhYm91dCB0aGUgcmVzdWx0LiAKKiBgTTEgLSBNMmAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuCiogYE0xICogTTJgLCBnaXZlIHlvdXIgb3BpbmlvbiBhYm91dCB0aGUgcmVzdWx0LiAKKiBgTTEgLyBNMmAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuIAoqIGRldGVybWluYW4gb2YgYE0xYCwgZ2l2ZSB5b3VyIG9waW5pb24gYWJvdXQgdGhlIHJlc3VsdC4gCiogaW52ZXJzIG9mIGBNMWAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuCgoKYGBge3J9Ck0yPC0gbWF0cml4KDQwOjU1LCBucm93ID0gNCwgbmNvbCA9IDQpCk0yCgozICogTTEgICAgIyBuaWxhaSB5YW5nIGFkYSBwYWRhIG1hdHJpa3MgTTEgZGlrYWxpIGRlbmdhbiAzCk0xICsgTTIgICAjIHBlbmp1bWxhaGFuIGFudGFyYSBtYXRyaWtzIDEgZGFuIG1hdHJpa3MgMgpNMSAtIE0yICAgIyBQZW5ndXJhbmdhbiBhbnRhcmEgbWF0cmlrcyAxIGRlbmdhbiBtYXRyaWtzIDIKTTEgKiBNMiAgICMgcGVya2FsaWFuIGFudGFyYSBtYXRyaWtzIDEgZGFuIG1hdHJpa3MgMgpNMSAvIE0yICAgIyBwZW1iYWdpYW4gYW50YXJhIG1hdHJpa3MgMSBkYW4gbWF0cmlrcyAyCmRldChNMSkgICAjIG1lbmdoaXR1bmcgZGV0ZXJtaW5hbiBkYXJpIG1hdHJpa3MgTTEKYGBgCgojIyMgRXhlcmNpc2UgNgoKQ3JlYXRlIGEgbWF0cml4IGBkYXRhYCB0aGF0IGlzIGNvbnRhaW4gdGhlIGZvbGxvd2luZyB2ZWN0b3JzOgoKKiBgQmAgdGhhdCB5b3UgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgZXhlcmNpc2UgMi4gTmFtZSBpdCBhcyBhICduYW1lcycgdmFyaWFibGUKKiBgQ2AgdGhhdCB5b3UgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgZXhlcmNpc2UgMy4gTmFtZSBpdCBhcyBhICdzY29yZXMnIHZhcmlhYmxlLgoKYGBge3J9Cm5hbWVzPC0gQgpzY29yZXM8LSBDCmRhdGE8LSBjYmluZChuYW1lcyxzY29yZXMpCmRhdGEgCmBgYAoKCiMjIEMuIExpc3RzIAoKSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBieSB1c2luZyB0aGUgYGxpc3QoKWAgZnVuY3Rpb24sIHBlcmZvcm0gc29tZSBiYXNpYyBtYW5pcHVsYXRpb25zLgoKCiMjIyBFeGVyY2lzZSA3CgpQbGVhc2UgY3JlYXRlIGEgZGF0YSBzZXQgYXMgdGhlIGBMaXN0YCB2YXJpYWJsZSBieSB1c2luZyB0aGUgYGxpc3QoKWAgZnVuY3Rpb24sIGNvbnRhaW4gdGhlIGZvbGxvd2luZyB2ZWN0b3JzOgoKKiBhIHZhcmlhYmxlIGBuYW1lYCwgdGhlIHZhbHVlcyBpbmNsdWRpbmcgeW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmCiogYSB2YXJpYWJsZSBgYWdlYCwgdGhlIHZhbHVlcyBpbmNsdWRpbmcgeW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmCiogYSB2YXJpYWJsZSBgZ2VuZGVyYCwgdGhlIHZhbHVlcyBpbmNsdWRpbmcgeW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmCgpgYGB7cn0KbmFtZTwtQgphZ2U8LWMoMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTgsIDE5LCAxOSwgMTksIDE5LCAyMCkKZ2VuZGVyPC1jKCJNYWxlIiwgIkZlbWFsZSIsICJNYWxlIiwgIk1hbGUiLCAiRmVtYWxlIiwgIkZlbWFsZSIsICJGZW1hbGUiLCAiTWFsZSIsICJGZW1hbGUiLCAiRmVtYWxlIiwgIkZlbWFsZSIsICJNYWxlIikKTGlzdDwtbGlzdChuYW1lLCBhZ2UsIGdlbmRlcikKTGlzdCAKYGBgCgoKIyMgRC4gRmFjdG9ycwoKSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBieSB1c2luZyB0aGUgYGZhY3RvcigpYCBmdW5jdGlvbiwgcGVyZm9ybSBzb21lIGJhc2ljIG1hbmlwdWxhdGlvbnMuCgoKIyMjIEV4ZXJjaXNlIDgKClBsZWFzZSBjcmVhdGUgYSBkYXRhIHNldCBhcyB0aGUgYEZhY3RvcmAgdmFyaWFibGUgYXMgeW91IGhhdmUgZG9uZSBhdCBFeGVyY2lzZSA3LiBIZXJlLCB5b3UgYWRkIG9uZSBtb3JlIHZhcmlhYmxlIGNhbGxlZCBgbWFyaXRhbF9zdGF0dXNgIGJ5IHVzaW5nIHRoZSBgZmFjdG9yKClgIGZ1bmN0aW9uLCBhcyB0aGUgZm9sbG93aW5nIGNvZGU6CgpgYGB5YW1sCm1hcml0YWxfc3RhdHVzIDwtIGZhY3RvcihjKCJ5ZXMiLCJubyIsInllcyIsIm5vIiwgdW50aWwgMTIgc3R1ZGVudHMpKQpgYGAKCmBgYHtyfQoKYGBgCgoKIyMgRS4gRGF0YSBGcmFtZXMKCkluIHRoaXMgc2VjdGlvbiwgeW91IGFyZSBleHBlY3RlZCB0byBiZSBhYmxlIHRvIHNoYXBlIGRhdGEgYnkgdXNpbmcgdGhlIGBkYXRhLmZyYW1lKClgIGZ1bmN0aW9uLCBwZXJmb3JtIHNvbWUgYmFzaWMgbWFuaXB1bGF0aW9ucy4KCgojIyMgRXhlcmNpc2UgOQoKUGxlYXNlIGNyZWF0ZSBhIGRhdGEgc2V0IGFzIHRoZSBgREYxYCB2YXJpYWJsZSwgY29udGFpbiB0aGUgZm9sbG93aW5nIHZlY3RvcnM6CgoqIGBpZGAsIGFzc3VtZSAxIHVwIHRvIDYKKiBgbmFtZWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmCiogYGdlbmRlcmAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmCiogYGFnZWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmCiogYG1hcml0YWxfc3RhdHVzYCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYKKiBgYWRkcmVzc19ieV9jaXR5YCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYKCmBgYHtyfQpERjE8LWRhdGEuZnJhbWUoaWQ9YygxOjYpLG5hbWU9YygiQXJkaWZvIiwiSnVsaWFuIiwiVmFuZXNzYSIsIktlZmFzIiwiTmlraXRhIiwiSm9jZWx5biIpLGdlbmRlcj1jKCJNYWxlIiwiTWFsZSIsIkZlbWFsZSIsIk1hbGUiLCJGZW1hbGUiLCJGZW1hbGUiKSxhZ2U9YygxOSwxOSwxOCwxOSwxOSwxOSksbWFyaXRhbF9zdGF0dXM9Yygic2luZ2xlIiwic2luZ2xlIiwic2luZ2xlIiwic2luZ2xlIiwic2luZ2xlIiwic2luZ2xlIiksYWRkcmVzc19ieV9jaXR5PWMoIkthbGltYW50YW4iLCJUYW5nZXJhbmciLCJNYWx1a3UiLCJUYW5nZXJhbmciLCJUYW5nZXJhbmciLCJUYW5nZXJhbmciKSxzdHJpbmdzQXNGYWN0b3JzID0gRikKREYxCmBgYAoKUGxlYXNlIGNyZWF0ZSBhIGRhdGEgc2V0IGFzIHRoZSBgREYyYCB2YXJpYWJsZSwgY29udGFpbiB0aGUgZm9sbG93aW5nIHZlY3RvcnM6CgoqIGBpZGAsIGFzc3VtZSA3IHVwIHRvIDEyCiogYG5hbWVgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZgoqIGBnZW5kZXJgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZgoqIGBhZ2VgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZgoqIGBtYXJpdGFsX3N0YXR1c2AgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmCiogYGFkZHJlc3NfYnlfY2l0eWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmCgpgYGB7cn0KREYyPC1kYXRhLmZyYW1lKGlkPWMoMTo2KSxuYW1lPWMoIlNoZXJseSIsIlB1dHJpIiwiSmVmZnJ5IiwiU2lhbmEiLCJMYWxhIiwiRmFsZW4iKSxnZW5kZXI9YygiRmVtYWxlIiwiRmVtYWxlIiwiTWFsZSIsIkZlbWFsZSIsIkZlbWFsZSIsIk1hbGUiKSxhZ2U9YygxOSwxOSwxOSwxOSwxOSwyMCksbWFyaXRhbF9zdGF0dXM9Yygic2luZ2xlIiwic2luZ2xlIiwic2luZ2xlIiwic2luZ2xlIiwic2luZ2xlIiwic2luZ2xlIiksYWRkcmVzc19ieV9jaXR5PWMoIlRhbmdlcmFuZyIsIlRhbmdlcmFuZyIsIlRhbmdlcmFuZyIsIlRhbmdlcmFuZyIsIlRhbmdlcmFuZyIsIlRhbmdlcmFuZyIpLHN0cmluZ3NBc0ZhY3RvcnMgPSBGKQpERjIKYGBgCgoKIyMjIEV4ZXJjaXNlIDEwCgpJbiB0aGlzIGZpbmFsIGV4ZXJjaXNlLCBwbGVhc2UgY29uc2lkZXIgdGhlIGZvbGxvd2luZyB0YXNrczogCgoqIENvbWJpbmUgYERGMWAgYW5kIGBERjJgLCAgYXNzaWduIGl0IGFzIGBTQjE5YCB2YXJpYWJsZSEKKiBQcmludCB0aGUgcmVzdWx0IG9mIGRhdGEgZnJhbWUgYFNCMTlgIQoqIFByaW50IGZpcnN0IDMgcm93cyBvZiB0aGUgYFNCMTlgIGRhdGFzZXQhCiogSG93IGNhbiB5b3UgcHJldmlldyAgdGhlIGBTQjE5YCBkYXRhc2V0IGxpa2UgYW4gRXhjZWwgZmlsZSBvbiB5b3VyIFJzdHVkaW8/CiogUmV2aWV3IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEgZnJhbWUgYFNCMTlgIQoqIENoZWNrIHRoZSBkaW1lbnNpb24gb2YgdGhlIGRhdGEuIAoqIFBsZWFzZSBhcHBseSBwaXBpbmcgZnVuY3Rpb25zIHRvIHRoZSBkYXRhIGZyYW1lIGBTQjE5YCwgZmlsdGVyIGl0IGJ5IHRoZWlyIGdlbmRlciBhY2NvcmRpbmdseSEgKGFzIHlvdSBoYXZlIGxlYXJuIGxhc3Qgd2VlaykKCmBgYHtyfQpTQjE5PC1yYmluZChERjEsREYyKQpwcmludChTQjE5KQpoZWFkKFNCMTksMykKI1ZpZXcoU0IxOSkKZGltKFNCMTkpCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkoZHBseXIpCmRhdGE8LVNCMTkgJT4lIGZpbHRlcihnZW5kZXI9PSJNYWxlIikgJT4lIHByaW50KCkKbGlicmFyeShtYWdyaXR0cikKbGlicmFyeShkcGx5cikKZGF0YTwtU0IxOSAlPiUgZmlsdGVyKGdlbmRlcj09IkZlbWFsZSIpICU+JSBwcmludCgpCgoKCmBgYAoK