About

R-Studio is a free and open-source integrated development environment (IDE) for R, a programming language for statistical computing and graphics. The Credit Risk Data displays the credit risk of an individual based on the loan they have taken out and other features of the individual.

Capabilities

R studio is able to compute various statistical and graphical techniques, such as linear and nonlinear modeling, classical statistical tests, time-series analysis, classification, clustering, time series plots, maps, etc.

Setup

After downloading the bdad_lab01 zip folder, make sure to open the folder in the downloads, right click it, and select ‘extract’. This will give you a new unzipped folder. Next, we must set this folder as the working directory. The way to do this is to open R Studio, go to ‘Session’, scroll down to ‘Set Working Directory’, and click ‘To Source File Location’. Now, follow the directions to complete the lab.


Task 1

To begin the Lab, examine the content of the csv file ‘creditrisk.csv’ by opening the file in RStudio. Create a simple star relational schema in erdplus stanalone feature https://erdplus.com/#/standalone, take a screenshot of the image, and upload it below.

To add a picture, use the directions found in Lab 0. Below is an example of what the simple star relational schema should look like.

Steps to create an star relation schema using erdplus.

Task 2

Next, read the csv file into R Studio. It can be useful to name your data to create a shortcut to it. Here we will label the data, ‘mydata’. To see the data in the console, one can ‘call’ it by referring to it by its given name.

mydata = read.csv(file="data/Scoring.csv")
head(mydata)

To capture, or extract, the checking and savings columns and perform some analytics on them, we must first be able to extract the columns from the data separately. Using the ‘$’ sign following the label for the data extracts a specific column. For convenience, we relabel the extracted data.

B elow, we have extrac te the checking column.

#Extracting the Checking Column
Expenses = mydata$Expenses 
#Calling the Checking Column
Expenses
   [1]  73  48  90  63  46  75  75  35  90  90  60  60  75  75  35  75  35  65  45  35  46  45 105  74  45  60  75  75  75  45  45  75
  [33]  75  35  45  45  75  70  45  44  75  35  45  75  35  35  75  48  60  60  75 105  75  60  85  35  45  60  90  70  90  35  75  75
  [65]  75  75  60  45  93  60  60  45  75  75  86  90  45  70  45  60  60  60  35  75  35  47  60  40  60  35  35 101  95 140  75  45
  [97]  35 120  89  45  73  75  78  35  75  76  90  45  35  79  45  90  35  60  75  35  75  45  35  75  57  75  66 114  45  35  75  35
 [129]  90  75  45  75  60  65  75  60  45  60  45  47  60  90  75 119  35 105  60  35  45  60  35  45  60  35  75  78  35  45  75  90
 [161]  75  35  60  57  60  45  75  42  75  45  77  75  74  75  35  35  60  75  45  45 113  75  75  75  75  75  60  78  46  45 120  75
 [193]  90  45  60  75  87 126  45  35  90  45  75  75  60  45  35  75 105  75  75  35  35  45  45  60  60  45  90 105  60  60  60  35
 [225]  35  75  60  45  35  35 100  56  45  57  45  62  45  45  90  90  90  60  35  45  35  35  45  45  45  45  73  94 105  60  60  77
 [257]  60  88  45  93  60 105  60  75  35  45  75  60  60  60  60  44  60  35  35  75  56  35  45  75  35  60  60  60  75  60  45  75
 [289]  60  75  60  90  73  60  90  45  45  45  45  35  35  75  90  59  87  35  60  90  85  75  60  60  96  45  45  45  45  45  87  60
 [321]  35  90  35  71  75  45  75  60  75  60  75  90  35  45  75  90  60  45  60 173  60  60  60  60  90  60 110  45  70  60  75  60
 [353]  35  45  35  75  75  45  45  75  35  75  35  90  60 113  60  75  76  45  90  45  75  35  35  90  72  60  49  58  66  35  75  75
 [385]  60  60  35  35  75  68  90  60  75  60  35  45  75  70  60  60  75  35  49  45  75  45  45  60  66  45  45  63  45  67  84  90
 [417]  35  35  75  75  60  82  86  35  35  60  71  60  80  45  54  51  60  75  86  60  75  45  95  45  60  35  45  55  45  85  63  35
 [449]  75  45  45  50  60  45  60  60  45  45  75  35  35  45  75  75  49  60  60  60  75  60  90  45  75  60  58  35  45 107  45  54
 [481]  35  90  75  60  60  54  45  43  45  60  60  60  75  35  62  35  35  35  45  75  35  66  35  35  90  75  68  90  60  45  45  75
 [513]  52  45  68  77  45  45  46  45  35  45  45  75  60  60  45  75  60  35  59  75  69  45  45  75  35  60 101  45  60  60  75  75
 [545]  75  75  35  75  60  44  75  75  75  60  64  66  45  91  35  45  90  35  35 135  60  75  90  45  45  45  45  88  45  45  75  75
 [577]  60 120  93  35  90  60  45  75  75  35  35 105  90  45  75  75  90  60  75  76  45  35  90  35  84  60 105  75  60  75 103  90
 [609]  35  56  75 105  45  35  90  90  45  60  69  77  75  90  45  55  60  60  74  56  60  60  82  60  75  35  48  45  60  60  75  69
 [641]  45  75  75  74  45  45  60  59  35  45  60  45  39  60  35  60  91  75  44  90  75  35  45  60  45  35  63  75  56  75  85  60
 [673]  90  60  90  45  58  90  60  52  60  90  75  35  52  87  35  85  35 102 130  75  75 105  75  35  75 107  85  40  45  52  65  85
 [705]  60  35  60  35  60  60  35  35  90  45  35  75  45  35  91  60  75  45  90  35  45  90  45  60  56  35  75  45  75  35  60  35
 [737]  75  73  60  75  68  60  35  35  60  66  35  35  75  60  45  75  60  45  60  69  60  60  74  45  45  60  35  60  45  90  75  90
 [769] 118  75  60  60  75  35  45  45  90  60  45  68  75  60 135  60  35  75  45  60  90  35  35  78  60  35  43  35  75  35  45  45
 [801]  75  35  90  61 135  92  35 102  60  84  90  75  35  45  60  60 105  45  60  90  35  45 105  75  35  64  90  45  75  60  75  35
 [833]  90  70  45  60  60  75  85  53  90  45 105  60  90  35  35  90  35  35  62  35  75  75  45  35  45  75  45  90  45  60  60  75
 [865]  45  60  90  90  45 100  45  75  75  97  90  60  45  90  35  75  72  70  60  35 105  60  75  35  55  35  75  45  58  74  60  45
 [897]  60  35  51  45  35  90  35  60  60 108  56  90  78  58  74  75  60  60  88  75  35  75  35  45  35  45  35  90  35  60  60  45
 [929]  77  45  45  82  75  35  45  75  75  45  60  45  35  75  60  42  78  35  35  45  75  60  59  75 102  35  35  75  35  75  75  93
 [961]  45  88  35  69  45  75  90  75  35  57  35 103  90  35  35  60  35  45  35  97  45  35  75  45  60  35  60  75  75  45  60  35
 [993]  60  60 113  60  45  35 124  75
 [ reached getOption("max.print") -- omitted 3446 entries ]

Now, fill in the code to extract and call the savings column.

#Extracting the Income olumn
Income = mydata$Income
#Calling the Income Column
Income
   [1] 129 131 200 182 107 214 125  80 107  80 125 121 199 170  50 131 330 200 130 137 107 324 112 140 143 130 180 251  85 150 122 198
  [33] 150 170 119 208 115  99 120  90 137 230 142  71 120 233 289 128 150 145  90 301 200 150 100 100 100 155 715 245 150  70 190 152
  [65] 126 181 185 170 176 238 115 200 411  93 108 500  45 250 100  70 150  70 263 200  78 120 125  50 146  70 105 413 500 350 200 138
  [97]  80 208 137  58 130 123 180 140 315 164 325 135 109 185 217 300  77 253 101 200 124 143 250 135 115 160 214 390 500  95 200  85
 [129] 214 140  60 180 300 200 242 155 100 105 166 120 115 350 214 442 101 122 250  90 160 300  83 200  60 205 133 179  69 195 112 210
 [161] 155 394 149 120 400 165 125  74  86 185 165 110 138 300 147 348 112 350 110  75 230  85 210 125 149 201 105 183 113 126 300 160
 [193] 160  89  95 125 120 359  80  67 148 298 318 185  39 194  80 147 156 178 130  63  88 140 115  83 144 200 172 200 318 177 133 150
 [225] 208 145 157 190  86  90 100 214 100 117 110 168 150 166 283 149 250 120 236 277  55 200 235  80 200 140 125 185 190 150 102 170
 [257] 315 130 156 177 341 240 142 333 125 170 220 230 157 340 120  91 150  88 120  70 106 162  77 128 189 300  92 380 500 130 141 220
 [289] 146 250 132 150 127  90 166  69 182  77  50 131  62  60  86 143 120 283 138  90  99 160 330 100 210 100  97  65 227 140 115 150
 [321]  90 275 176 110 140 500  66 273 145  67 232  80 130 200 154 187 135 160 133 230 154  50 189 202  20  40  50 125 100 115 160  70
 [353] 220  99 107 160 150 232 120 225 100  80 208 105  98 532 140  90 155 120 159 122 156  90 130  45 118 152 135 125 208  81 160 300
 [385] 135 121 145 165 428 233 245 232 200  42  87 200 250 350 105 100 160 132 140 160 148 113  97 107 206 275 176 175 223  70  87  42
 [417]  60 300 144 217 180  69 110  50  86 172 109  95 203 114 186 155 195 246 113 290 103 125 199 133 210 124  78 200 100  95 183  43
 [449] 120 198 100 150 133 110 202 140 123 275 200 180  55 105 146 100 136  90 144 116 128 105 125  68 400 251 225 140  34 320 124  87
 [481] 161  90  92 110  87  93 110  81  98 155 167 190 110  76 170 214  70  55  80  81 139 206  74 120 300 224  80 166 110 161  80 150
 [513] 170 100 225 166 200 110 110 160 204 135 158 290 100 115 149 143 150 199 142  80  93 113  92 205 210 256 260 106 160 148 220  63
 [545] 106  81 100 260 243  88 186 105  80 154  35  63 297 161 200 140 125  78  57 300  66 202 175 150 158  92 123 125 113 167 148 156
 [577] 123 143 180  92 150  92 139 250 315 121 180 129 214  99 110  85 138  93 100 160 215  90 464 167  86 125 274 135 300 300 128  90
 [609] 115 107 300 230 122  43 250 190 100 246  85 173 150  86 183 100  94 150 140 107 117 230 470 102 210  42 130  90 120 117 160  90
 [641]  50 100 182 135  67 167 137 140  85 324  77 100  42 251 180 400 158 300  90 146 255 250  50 150 232 190 178 254 110  70 100 137
 [673] 258 242  85 179 125 500 140  70 150 245 193 110  70 115  85 400 130 120 250 108 225 300 250 150 156 319 100  51 145 168  54 100
 [705] 115 209 180  63 130 170 157  79  64  99  35 150  65 100 160 215 112 126 150 136 123  80  72 110 111  60 184 104 290 173 125  60
 [737] 160 126 148 170 230 166  67 190  80  60  91  96 180 130  67 100 830 125  30 237 152  95 139 145 300 135  80 100 275 250 125 100
 [769] 130 131 350 538 276 107 105 156 110 260  34  81  76  98 174 132 105 300 117 119 140  70 265 180  62 189  75  70 188 150 124 113
 [801]  98 184 195 159 959 170  28 268 155 240 500 135 225 100 190 200 154 210 145 210 102  91  75 150 120  36 129 125 156  72 166  75
 [833] 125 250 128 155 459 360 100  80 250 105 300 137 110 127  56  75  52 100 170 150 188 175  64 110 186 140 200 135 130 200  33  69
 [865]  90 175 197 125 170 247 250 130 207  65 180 250 129 159 116  88 120 100 100 113  80 150  52  71  99  63 166 108 134 138 110 160
 [897] 176  70  60 130 176 130 108 144 150 183 108 200 180 130 140 141 127 117 130 240 425 800  80  95  71 135  47 250 150 118 130 125
 [929] 171 265 100  69 293  87 110  75  40 140 122 161  70  65  66  73 178 140  50  78  60 350 140 125 121 155 133 117 125 136  25 176
 [961] 430 125  79  92 176  85 188 300 100 120  60 125 464 176  90 200 415 318 163  72 156  49 110 140  92  74 145 104 400  95 150 160
 [993] 177  85 380 107 134  81 191 100
 [ reached getOption("max.print") -- omitted 3446 entries ]

In order to calculate the mean, or the average by hand of the checkings columns, one can add each individual entry and divide by the total number or rows. This would take much time, but thankfully, R has a command for this.

We have done an example using the checkings column. Compute the same using the savings column.

#Using the 'mean' function on checking to calculate the checking average and naming the average 'meanChecking'
meanIncome = mean(Income)
#Calling the income average
meanIncome
[1] 140.6298
#Find the average of the savings column and name the average of the savings meanSavings
#Call mean savings
#Using the 'mean' function on checking to calculate the checking average and naming the average 'meanChecking'
meanExpenses = mean(Expenses)
#Calling the income average
meanExpenses
[1] 55.60144
#Find the average of the expenses column and name the average of the savings meanexpenses
#Call mean expenses
# Computing the standard deviation of income
sdIncome = sd(Income) 
# Calling the standard deviation of income
sdIncome
[1] 80.1779
#Find the standard deviation of expenses
sdExpenses = sd(Expenses)
# Calling the standard deviation of expenses
sdExpenses
[1] 19.52084
#Find the standard deviation of Expenses
sdExpenses = sdExpenses
# Calling the standard deviation of Expenses
sdExpenses
[1] 19.52084

Now, to compute the SNR, the signal to noise ratio, a formula is created because there is no built in function.

SNR is the mean, or average, divided by the spread.

#Compute the SNR of income and name it snrIncome
snrIncome = meanIncome/sdIncome
#Call snrIncome
snrIncome
[1] 1.753972
#Find the SNR of expenses and name it snrExpenses
snrExpenses = meanExpenses/sdIncome
#Call snrExpenses
snrExpenses
[1] 0.6934759

Of the Expenses and INCOME, which has a higher SNR? Why do you think that is?

Income has the higher SNR which means our dataset has more signal thatn noise. The expenses is a lower value than 1:1 which means it is filled with more noise.


Task 3

After using Watson Analytics to find patterns in the data, save your work and upload a screenshot here. Refer to Task 1 on how to upload a photo.

from this watson data set we can see that income reduces as you get older.

from this data set we can see that the more income you have, the more assets you have also.

from this data set we can see that the more expense you have increases the amount of debt that you have.

LS0tDQp0aXRsZTogIkJ1c2luZXNzIEFuYWx5dGljcyBMYWIgV29ya3NoZWV0IDAxIg0KYXV0aG9yOiAiRWxpbyBWZW50byINCmRhdGU6ICJTdW1tZXIgMjAxNyINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBodG1sX2RvY3VtZW50OiBkZWZhdWx0DQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0Kc3VidGl0bGU6IENNRSBHcm91cCBGb3VuZGF0aW9uIEJ1c2luZXNzIEFuYWx5dGljcyBMYWINCi0tLQ0KDQojIyMgQWJvdXQNCg0KUi1TdHVkaW8gaXMgYSBmcmVlIGFuZCBvcGVuLXNvdXJjZSBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50IChJREUpIGZvciBSLCBhIHByb2dyYW1taW5nIGxhbmd1YWdlIGZvciBzdGF0aXN0aWNhbCBjb21wdXRpbmcgYW5kIGdyYXBoaWNzLiBUaGUgQ3JlZGl0IFJpc2sgRGF0YSBkaXNwbGF5cyB0aGUgY3JlZGl0IHJpc2sgb2YgYW4gaW5kaXZpZHVhbCBiYXNlZCBvbiB0aGUgbG9hbiB0aGV5IGhhdmUgdGFrZW4gb3V0IGFuZCBvdGhlciBmZWF0dXJlcyBvZiB0aGUgaW5kaXZpZHVhbC4gDQoNCiMjIyBDYXBhYmlsaXRpZXMNCg0KUiBzdHVkaW8gaXMgYWJsZSB0byBjb21wdXRlIHZhcmlvdXMgc3RhdGlzdGljYWwgYW5kIGdyYXBoaWNhbCB0ZWNobmlxdWVzLCBzdWNoIGFzIGxpbmVhciBhbmQgbm9ubGluZWFyIG1vZGVsaW5nLCBjbGFzc2ljYWwgc3RhdGlzdGljYWwgdGVzdHMsIHRpbWUtc2VyaWVzIGFuYWx5c2lzLCBjbGFzc2lmaWNhdGlvbiwgY2x1c3RlcmluZywgdGltZSBzZXJpZXMgcGxvdHMsIG1hcHMsIGV0Yy4gDQoNCiMjIyBTZXR1cA0KDQpBZnRlciBkb3dubG9hZGluZyB0aGUgYmRhZF9sYWIwMSB6aXAgZm9sZGVyLCBtYWtlIHN1cmUgdG8gb3BlbiB0aGUgZm9sZGVyIGluIHRoZSBkb3dubG9hZHMsIHJpZ2h0IGNsaWNrIGl0LCBhbmQgc2VsZWN0ICdleHRyYWN0Jy4gVGhpcyB3aWxsIGdpdmUgeW91IGEgbmV3IHVuemlwcGVkIGZvbGRlci4gTmV4dCwgd2UgbXVzdCBzZXQgdGhpcyBmb2xkZXIgYXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiBUaGUgd2F5IHRvIGRvIHRoaXMgaXMgdG8gb3BlbiBSIFN0dWRpbywgZ28gdG8gJ1Nlc3Npb24nLCBzY3JvbGwgZG93biB0byAnU2V0IFdvcmtpbmcgRGlyZWN0b3J5JywgYW5kIGNsaWNrICdUbyBTb3VyY2UgRmlsZSBMb2NhdGlvbicuIE5vdywgZm9sbG93IHRoZSBkaXJlY3Rpb25zIHRvIGNvbXBsZXRlIHRoZSBsYWIuIA0KDQotLS0tLS0tLS0tLS0tLQ0KDQojIyMgVGFzayAxDQoNClRvIGJlZ2luIHRoZSBMYWIsIGV4YW1pbmUgdGhlIGNvbnRlbnQgb2YgdGhlIGNzdiBmaWxlICdjcmVkaXRyaXNrLmNzdicgYnkgb3BlbmluZyB0aGUgZmlsZSBpbiBSU3R1ZGlvLiBDcmVhdGUgYSBzaW1wbGUgc3RhciByZWxhdGlvbmFsIHNjaGVtYSBpbiBlcmRwbHVzIHN0YW5hbG9uZSBmZWF0dXJlIFtodHRwczovL2VyZHBsdXMuY29tLyMvc3RhbmRhbG9uZV0oaHR0cHM6Ly9lcmRwbHVzLmNvbS8jL3N0YW5kYWxvbmUpLCB0YWtlIGEgc2NyZWVuc2hvdCBvZiB0aGUgaW1hZ2UsIGFuZCB1cGxvYWQgaXQgYmVsb3cuDQoNClRvIGFkZCBhIHBpY3R1cmUsIHVzZSB0aGUgZGlyZWN0aW9ucyBmb3VuZCBpbiBMYWIgMC4gQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiB3aGF0IHRoZSBzaW1wbGUgc3RhciByZWxhdGlvbmFsIHNjaGVtYSBzaG91bGQgbG9vayBsaWtlLiANCg0KIyMjIyMgU3RlcHMgdG8gY3JlYXRlIGFuIHN0YXIgcmVsYXRpb24gc2NoZW1hIHVzaW5nIGVyZHBsdXMuDQoNCg0KDQohW10oaW1ncy9waWN0dXJlMS5wbmcpDQoNCi0tLS0tLS0tLS0tLS0NCg0KIyMjIFRhc2sgMg0KDQpOZXh0LCByZWFkIHRoZSBjc3YgZmlsZSBpbnRvIFIgU3R1ZGlvLiBJdCBjYW4gYmUgdXNlZnVsIHRvIG5hbWUgeW91ciBkYXRhIHRvIGNyZWF0ZSBhIHNob3J0Y3V0IHRvIGl0LiBIZXJlIHdlIHdpbGwgbGFiZWwgdGhlIGRhdGEsICdteWRhdGEnLiBUbyBzZWUgdGhlIGRhdGEgaW4gdGhlIGNvbnNvbGUsIG9uZSBjYW4gJ2NhbGwnIGl0IGJ5IHJlZmVycmluZyB0byBpdCBieSBpdHMgZ2l2ZW4gbmFtZS4NCg0KYGBge3J9DQpteWRhdGEgPSByZWFkLmNzdihmaWxlPSJkYXRhL1Njb3JpbmcuY3N2IikNCmhlYWQobXlkYXRhKQ0KYGBgDQoNClRvIGNhcHR1cmUsIG9yIGV4dHJhY3QsIHRoZSBjaGVja2luZyBhbmQgc2F2aW5ncyBjb2x1bW5zIGFuZCBwZXJmb3JtIHNvbWUgYW5hbHl0aWNzIG9uIHRoZW0sIHdlIG11c3QgZmlyc3QgYmUgYWJsZSB0byBleHRyYWN0IHRoZSBjb2x1bW5zIGZyb20gdGhlIGRhdGEgc2VwYXJhdGVseS4gVXNpbmcgdGhlICckJyBzaWduIGZvbGxvd2luZyB0aGUgbGFiZWwgZm9yIHRoZSBkYXRhIGV4dHJhY3RzIGEgc3BlY2lmaWMgY29sdW1uLiBGb3IgY29udmVuaWVuY2UsIHdlIHJlbGFiZWwgdGhlIGV4dHJhY3RlZCBkYXRhLiANCg0KQiBlbG93LCB3ZSBoYXZlIGV4dHJhYyB0ZSB0aGUgY2hlY2tpbmcgY29sdW1uLiANCg0KYGBge3J9DQojRXh0cmFjdGluZyB0aGUgQ2hlY2tpbmcgQ29sdW1uDQpFeHBlbnNlcyA9IG15ZGF0YSRFeHBlbnNlcyANCg0KI0NhbGxpbmcgdGhlIENoZWNraW5nIENvbHVtbg0KRXhwZW5zZXMNCmBgYA0KDQpOb3csIGZpbGwgaW4gdGhlIGNvZGUgdG8gZXh0cmFjdCBhbmQgY2FsbCB0aGUgc2F2aW5ncyBjb2x1bW4uDQoNCmBgYHtyfQ0KI0V4dHJhY3RpbmcgdGhlIEluY29tZSBvbHVtbg0KSW5jb21lID0gbXlkYXRhJEluY29tZQ0KI0NhbGxpbmcgdGhlIEluY29tZSBDb2x1bW4NCkluY29tZQ0KYGBgDQoNCg0KSW4gb3JkZXIgdG8gY2FsY3VsYXRlIHRoZSBtZWFuLCBvciB0aGUgYXZlcmFnZSBieSBoYW5kIG9mIHRoZSBjaGVja2luZ3MgY29sdW1ucywgb25lIGNhbiBhZGQgZWFjaCBpbmRpdmlkdWFsIGVudHJ5IGFuZCBkaXZpZGUgYnkgdGhlIHRvdGFsIG51bWJlciBvciByb3dzLiBUaGlzIHdvdWxkIHRha2UgbXVjaCB0aW1lLCBidXQgdGhhbmtmdWxseSwgUiBoYXMgYSBjb21tYW5kIGZvciB0aGlzLiANCg0KV2UgaGF2ZSBkb25lIGFuIGV4YW1wbGUgdXNpbmcgdGhlIGNoZWNraW5ncyBjb2x1bW4uIENvbXB1dGUgdGhlIHNhbWUgdXNpbmcgdGhlIHNhdmluZ3MgY29sdW1uLiANCg0KYGBge3J9DQojVXNpbmcgdGhlICdtZWFuJyBmdW5jdGlvbiBvbiBjaGVja2luZyB0byBjYWxjdWxhdGUgdGhlIGNoZWNraW5nIGF2ZXJhZ2UgYW5kIG5hbWluZyB0aGUgYXZlcmFnZSAnbWVhbkNoZWNraW5nJw0KbWVhbkluY29tZSA9IG1lYW4oSW5jb21lKQ0KDQojQ2FsbGluZyB0aGUgaW5jb21lIGF2ZXJhZ2UNCm1lYW5JbmNvbWUNCg0KDQoNCiNGaW5kIHRoZSBhdmVyYWdlIG9mIHRoZSBzYXZpbmdzIGNvbHVtbiBhbmQgbmFtZSB0aGUgYXZlcmFnZSBvZiB0aGUgc2F2aW5ncyBtZWFuU2F2aW5ncw0KDQojQ2FsbCBtZWFuIHNhdmluZ3MNCmBgYA0KDQpgYGB7cn0NCiNVc2luZyB0aGUgJ21lYW4nIGZ1bmN0aW9uIG9uIGNoZWNraW5nIHRvIGNhbGN1bGF0ZSB0aGUgY2hlY2tpbmcgYXZlcmFnZSBhbmQgbmFtaW5nIHRoZSBhdmVyYWdlICdtZWFuQ2hlY2tpbmcnDQptZWFuRXhwZW5zZXMgPSBtZWFuKEV4cGVuc2VzKQ0KDQojQ2FsbGluZyB0aGUgaW5jb21lIGF2ZXJhZ2UNCm1lYW5FeHBlbnNlcw0KDQoNCg0KI0ZpbmQgdGhlIGF2ZXJhZ2Ugb2YgdGhlIGV4cGVuc2VzIGNvbHVtbiBhbmQgbmFtZSB0aGUgYXZlcmFnZSBvZiB0aGUgc2F2aW5ncyBtZWFuZXhwZW5zZXMNCg0KI0NhbGwgbWVhbiBleHBlbnNlcw0KDQpgYGANCg0KYGBge3J9DQojIENvbXB1dGluZyB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGluY29tZQ0Kc2RJbmNvbWUgPSBzZChJbmNvbWUpIA0KIyBDYWxsaW5nIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgaW5jb21lDQpzZEluY29tZQ0KYGBgDQoNCg0KYGBge3J9DQojRmluZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGV4cGVuc2VzDQpzZEV4cGVuc2VzID0gc2QoRXhwZW5zZXMpDQojIENhbGxpbmcgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBleHBlbnNlcw0Kc2RFeHBlbnNlcw0KDQpgYGANCg0KDQpgYGB7cn0NCiNGaW5kIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgRXhwZW5zZXMNCnNkRXhwZW5zZXMgPSBzZEV4cGVuc2VzDQojIENhbGxpbmcgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBFeHBlbnNlcw0Kc2RFeHBlbnNlcw0KYGBgDQoNCg0KDQoNCk5vdywgdG8gY29tcHV0ZSB0aGUgU05SLCB0aGUgc2lnbmFsIHRvIG5vaXNlIHJhdGlvLCBhIGZvcm11bGEgaXMgY3JlYXRlZCBiZWNhdXNlIHRoZXJlIGlzIG5vIGJ1aWx0IGluIGZ1bmN0aW9uLiANCg0KU05SIGlzIHRoZSBtZWFuLCBvciBhdmVyYWdlLCBkaXZpZGVkIGJ5IHRoZSBzcHJlYWQuIA0KDQpgYGB7cn0NCg0KI0NvbXB1dGUgdGhlIFNOUiBvZiBpbmNvbWUgYW5kIG5hbWUgaXQgc25ySW5jb21lDQpzbnJJbmNvbWUgPSBtZWFuSW5jb21lL3NkSW5jb21lDQojQ2FsbCBzbnJJbmNvbWUNCnNuckluY29tZQ0KDQoNCmBgYA0KDQpgYGB7cn0NCiNGaW5kIHRoZSBTTlIgb2YgZXhwZW5zZXMgYW5kIG5hbWUgaXQgc25yRXhwZW5zZXMNCnNuckV4cGVuc2VzID0gbWVhbkV4cGVuc2VzL3NkSW5jb21lDQojQ2FsbCBzbnJFeHBlbnNlcw0Kc25yRXhwZW5zZXMNCmBgYA0KDQoNCg0KDQpPZiB0aGUgRXhwZW5zZXMgYW5kIElOQ09NRSwgd2hpY2ggaGFzIGEgaGlnaGVyIFNOUj8gV2h5IGRvIHlvdSB0aGluayB0aGF0IGlzPw0KDQpJbmNvbWUgaGFzIHRoZSBoaWdoZXIgU05SIHdoaWNoIG1lYW5zIG91ciBkYXRhc2V0IGhhcyBtb3JlIHNpZ25hbCB0aGF0biBub2lzZS4gVGhlIGV4cGVuc2VzIGlzIGEgbG93ZXIgdmFsdWUgdGhhbiAxOjEgd2hpY2ggbWVhbnMgaXQgaXMgZmlsbGVkIHdpdGggbW9yZSBub2lzZS4gDQoNCg0KLS0tLS0tLS0tLS0tDQoNCiMjIyBUYXNrIDMNCg0KDQoNCg0KDQoNCg0KDQpBZnRlciB1c2luZyBXYXRzb24gQW5hbHl0aWNzIHRvIGZpbmQgcGF0dGVybnMgaW4gdGhlIGRhdGEsIHNhdmUgeW91ciB3b3JrIGFuZCB1cGxvYWQgYSBzY3JlZW5zaG90IGhlcmUuIFJlZmVyIHRvIFRhc2sgMSBvbiBob3cgdG8gdXBsb2FkIGEgcGhvdG8uDQoNCg0KDQoNCg0KDQoNCg0KIVtdKGltZ3Mvd2F0c29uLnBuZykNCg0KI2Zyb20gdGhpcyB3YXRzb24gZGF0YSBzZXQgd2UgY2FuIHNlZSB0aGF0IGluY29tZSByZWR1Y2VzIGFzIHlvdSBnZXQgb2xkZXIuIA0KDQoNCg0KIVtdKGltZ3Mvd2F0c29uMS5wbmcpDQoNCiNmcm9tIHRoaXMgZGF0YSBzZXQgd2UgY2FuIHNlZSB0aGF0IHRoZSBtb3JlIGluY29tZSB5b3UgaGF2ZSwgdGhlIG1vcmUgYXNzZXRzIHlvdSBoYXZlIGFsc28uIA0KDQoNCg0KDQoNCiFbXShpbWdzL3dhdHNvbjIucG5nKQ0KDQojZnJvbSB0aGlzIGRhdGEgc2V0IHdlIGNhbiBzZWUgdGhhdCB0aGUgbW9yZSBleHBlbnNlIHlvdSBoYXZlIGluY3JlYXNlcyB0aGUgYW1vdW50IG9mIGRlYnQgdGhhdCB5b3UgaGF2ZS4gDQoNCg0KDQoNCg==