Exercise 1
What does a streak length of 1 mean, i.e. how many hits and misses are in a streak of 1? What about a streak length of 0?
Streak of 1: 1 shot is hit and then 1 shot is missed. A streak of 1 means that 1 consecutive shot was made.
Streak of 0: n shots were missed, 0 shots were made. A streak of 0 means that 0 consecutive shots have been made and that n (representing consecutive misses) shots were missed.
Exercise 2
Describe the distribution of Kobe’s streak lengths from the 2009 NBA finals. What was his typical streak length? How long was his longest streak of baskets? Make sure to include the accompanying plot in your answer.
The distribution is right skewed / has a tail to the right and is unimodal. Kobe’s average streak length was 0.76 (to 2 decminal places), with the highest frequency streak being 0 and then 1 shot. On a number of occasions Kobe made 2 or 3 shots consecutively and on one occasion, his longest streak, he made 4 shots in a row.
kobe_streak <- calc_streak(kobe_basket$shot)
mean(kobe_streak$length)
## [1] 0.7631579
ggplot(data = kobe_streak, aes(x = length)) +
geom_bar()

Exercise 3
In your simulation of flipping the unfair coin 100 times, how many flips came up heads? Include the code for sampling the unfair coin in your response. Since the markdown file will run the code, and generate a new sample each time you Knit it, you should also “set a seed” before you sample. Read more about setting a seed below.
In my simulation of flipping the unfair coin 100 times, 17 flips came up heads.
coin_outcomes <- c("heads", "tails")
set.seed(091220) #set the seed BEFORE sampling for sake of reproducibility
sim_unfair_coin <- sample(coin_outcomes, size = 100, replace = TRUE,
prob = c(0.2, 0.8))
sim_unfair_coin
## [1] "tails" "heads" "tails" "tails" "heads" "heads" "tails" "tails" "tails"
## [10] "tails" "tails" "tails" "tails" "tails" "tails" "heads" "heads" "tails"
## [19] "heads" "tails" "tails" "heads" "tails" "tails" "tails" "tails" "tails"
## [28] "tails" "tails" "tails" "tails" "tails" "tails" "tails" "tails" "tails"
## [37] "heads" "tails" "tails" "tails" "tails" "heads" "heads" "tails" "tails"
## [46] "heads" "tails" "tails" "tails" "tails" "tails" "tails" "tails" "tails"
## [55] "tails" "tails" "tails" "tails" "tails" "tails" "tails" "tails" "tails"
## [64] "tails" "tails" "tails" "tails" "tails" "tails" "tails" "tails" "tails"
## [73] "tails" "tails" "tails" "heads" "tails" "tails" "tails" "tails" "tails"
## [82] "tails" "tails" "tails" "tails" "tails" "tails" "heads" "tails" "tails"
## [91] "tails" "heads" "heads" "tails" "tails" "heads" "tails" "tails" "tails"
## [100] "heads"
## sim_unfair_coin
## heads tails
## 17 83
Exercise 4
What change needs to be made to the sample function so that it reflects a shooting percentage of 45%? Make this adjustment, then run a simulation to sample 133 shots. Assign the output of this simulation to a new object called sim_basket.
To reflect a shooting percentage of 45%, we have to account for probability in our sim_basket object. This is accounted for below:
shot_outcomes <- c("H", "M")
set.seed(991122) #set the seed BEFORE sampling for sake of reproducibility
sim_basket <- sample(shot_outcomes, size = 133, replace = TRUE,
prob = c(0.45, 0.55))
sim_basket
## [1] "M" "M" "M" "M" "H" "H" "H" "M" "M" "H" "M" "M" "H" "M" "H" "M" "H" "M"
## [19] "M" "M" "M" "H" "H" "H" "M" "M" "H" "H" "M" "M" "M" "H" "H" "H" "H" "H"
## [37] "M" "H" "H" "H" "M" "M" "H" "H" "M" "H" "H" "H" "M" "M" "H" "M" "M" "M"
## [55] "M" "H" "M" "H" "H" "H" "M" "M" "M" "H" "M" "M" "M" "M" "M" "H" "H" "H"
## [73] "H" "H" "M" "H" "H" "M" "M" "H" "M" "H" "H" "M" "M" "H" "M" "M" "H" "H"
## [91] "H" "H" "M" "H" "M" "M" "M" "H" "M" "M" "M" "H" "H" "H" "M" "M" "M" "M"
## [109] "M" "M" "M" "H" "M" "M" "H" "H" "M" "M" "M" "M" "M" "M" "H" "H" "M" "H"
## [127] "M" "M" "H" "M" "M" "H" "M"
## sim_basket
## H M
## 59 74
Exercise 5
Using calc_streak, compute the streak lengths of sim_basket, and save the results in a data frame called sim_streak.
sim_streak <- calc_streak(sim_basket)
Exercise 6
Describe the distribution of streak lengths. What is the typical streak length for this simulated independent shooter with a 45% shooting percentage? How long is the player’s longest streak of baskets in 133 shots? Make sure to include a plot in your answer.
Similar to Kobe’s distribution, it’s right skewed / has a tail to the right and is unimodal. The simulated shooter’s average streak length was 0.79 (to 2 decimal places) which was slightly higher than Kobe’s. The distribution was nearly identical to Kobe’s, with the highest frequency streak being 0 and then 1 shot, a few 2 and 3 shot streaks, and 1 4 shot streak. The difference lied in the fact that the simulated shooter had a longest streak of 5 shots and they achieved this mark twice.
## [1] 0.7866667
ggplot(data = sim_streak, aes(x = length)) + geom_bar()

Exercise 7
If you were to run the simulation of the independent shooter a second time, how would you expect its streak distribution to compare to the distribution from the question above? Exactly the same? Somewhat similar? Totally different? Explain your reasoning.
If I were to run the simulation of the independent shooter a second time, I would expect the streak distribution to be slighly different.
The reason being that we accounted for 133 observations, which is a reasonable amount. A smaller set of observations (ie. 10) would show more drastic of a variation in distribution and a larger set of observations (ie. 1000) would show more stable distribution of outcomes. To this point, in running the random simulation a number of times before setting the seed, it’s output sat in the range of 40-48% which coincides with a distribution that is similar albeit not exactly the same nor totally different.
Exercise 8
How does Kobe Bryant’s distribution of streak lengths compare to the distribution of streak lengths for the simulated shooter? Using this comparison, do you have evidence that the hot hand model fits Kobe’s shooting patterns? Explain.
More data could be collected to draw a clearer conclusion but based on what we’ve seen with Kobe’s data from 2009 as compared to our simulated shooter: we do not have evidence that a hot hand model fits Kobe’s shooting patterns from 2009.
The hot hand model specified that if Kobe (or another shooter) were to make their first shot then they would be more likely to make their second shot (and shots thereafter) and our comparison of distributions do not support this.
Kobe and the simulated shooter’s distributions were slightly different. The simulated shooter slightly outperformed Kobe, thus discounting the hot hand model (the simulated shooters shots were calculated as independent of one another).
Both distributions were right skewed, unimodal and nearly identical for streaks from 0 to 4 … the difference sat in the simulated shooter’s average streak length (0.79 compared to Kobe’s 0.76) and the fact that the simulated shooter had a 5 shot streak twice.
Thus it seems Kobe and the simulated shooter were not more likely to make their second shot after making their first shot.
LS0tDQp0aXRsZTogIkRBVEEgNjA2IExhYiAzIg0KYXV0aG9yOiAiTWFnbnVzIFNrb25iZXJnIg0KZGF0ZTogJ2ByIFN5cy5EYXRlKClgJw0Kb3V0cHV0Og0KICBvcGVuaW50cm86OmxhYl9yZXBvcnQ6IGRlZmF1bHQNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KLS0tDQoNCmBgYHtyIGxvYWQtcGFja2FnZXMsIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkob3BlbmludHJvKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSAxICAgDQoNCjxzdHlsZT4NCmRpdi5ibHVlIHsgYmFja2dyb3VuZC1jb2xvcjojZTZmMGZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDIwcHg7fQ0KPC9zdHlsZT4NCjxkaXYgY2xhc3MgPSAiYmx1ZSI+DQoNCldoYXQgZG9lcyBhIHN0cmVhayBsZW5ndGggb2YgMSBtZWFuLCBpLmUuIGhvdyBtYW55IGhpdHMgYW5kIG1pc3NlcyBhcmUgaW4gYSBzdHJlYWsgb2YgMT8gV2hhdCBhYm91dCBhIHN0cmVhayBsZW5ndGggb2YgMD8NCg0KPC9kaXY+IFxoZmlsbFxicmVhaw0KDQoqKlN0cmVhayBvZiAxOioqIDEgc2hvdCBpcyBoaXQgKmFuZCB0aGVuKiAxIHNob3QgaXMgbWlzc2VkLiBBIHN0cmVhayBvZiAxIG1lYW5zIHRoYXQgMSBjb25zZWN1dGl2ZSBzaG90IHdhcyBtYWRlLg0KDQoqKlN0cmVhayBvZiAwOioqIG4gc2hvdHMgd2VyZSBtaXNzZWQsIDAgc2hvdHMgd2VyZSBtYWRlLiBBIHN0cmVhayBvZiAwIG1lYW5zIHRoYXQgMCBjb25zZWN1dGl2ZSBzaG90cyBoYXZlIGJlZW4gbWFkZSBhbmQgdGhhdCBuIChyZXByZXNlbnRpbmcgY29uc2VjdXRpdmUgbWlzc2VzKSBzaG90cyB3ZXJlIG1pc3NlZC4NCg0KDQojIyMgRXhlcmNpc2UgMg0KDQo8c3R5bGU+DQpkaXYuYmx1ZSB7IGJhY2tncm91bmQtY29sb3I6I2U2ZjBmZjsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAyMHB4O30NCjwvc3R5bGU+DQo8ZGl2IGNsYXNzID0gImJsdWUiPg0KDQpEZXNjcmliZSB0aGUgZGlzdHJpYnV0aW9uIG9mIEtvYmXigJlzIHN0cmVhayBsZW5ndGhzIGZyb20gdGhlIDIwMDkgTkJBIGZpbmFscy4gV2hhdCB3YXMgaGlzIHR5cGljYWwgc3RyZWFrIGxlbmd0aD8gSG93IGxvbmcgd2FzIGhpcyBsb25nZXN0IHN0cmVhayBvZiBiYXNrZXRzPyBNYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgYWNjb21wYW55aW5nIHBsb3QgaW4geW91ciBhbnN3ZXIuDQoNCjwvZGl2PiBcaGZpbGxcYnJlYWsNCg0KVGhlIGRpc3RyaWJ1dGlvbiBpcyByaWdodCBza2V3ZWQgLyBoYXMgYSB0YWlsIHRvIHRoZSByaWdodCBhbmQgaXMgdW5pbW9kYWwuIEtvYmUncyBhdmVyYWdlIHN0cmVhayBsZW5ndGggd2FzIDAuNzYgKHRvIDIgZGVjbWluYWwgcGxhY2VzKSwgd2l0aCB0aGUgaGlnaGVzdCBmcmVxdWVuY3kgc3RyZWFrIGJlaW5nIDAgYW5kIHRoZW4gMSBzaG90LiBPbiBhIG51bWJlciBvZiBvY2Nhc2lvbnMgS29iZSBtYWRlIDIgb3IgMyBzaG90cyBjb25zZWN1dGl2ZWx5IGFuZCBvbiBvbmUgb2NjYXNpb24sIGhpcyBsb25nZXN0IHN0cmVhaywgaGUgbWFkZSA0IHNob3RzIGluIGEgcm93Lg0KDQpgYGB7cn0NCmtvYmVfc3RyZWFrIDwtIGNhbGNfc3RyZWFrKGtvYmVfYmFza2V0JHNob3QpDQoNCm1lYW4oa29iZV9zdHJlYWskbGVuZ3RoKQ0KDQpnZ3Bsb3QoZGF0YSA9IGtvYmVfc3RyZWFrLCBhZXMoeCA9IGxlbmd0aCkpICsNCiAgZ2VvbV9iYXIoKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSAzDQoNCjxzdHlsZT4NCmRpdi5ibHVlIHsgYmFja2dyb3VuZC1jb2xvcjojZTZmMGZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDIwcHg7fQ0KPC9zdHlsZT4NCjxkaXYgY2xhc3MgPSAiYmx1ZSI+DQoNCkluIHlvdXIgc2ltdWxhdGlvbiBvZiBmbGlwcGluZyB0aGUgdW5mYWlyIGNvaW4gMTAwIHRpbWVzLCBob3cgbWFueSBmbGlwcyBjYW1lIHVwIGhlYWRzPyBJbmNsdWRlIHRoZSBjb2RlIGZvciBzYW1wbGluZyB0aGUgdW5mYWlyIGNvaW4gaW4geW91ciByZXNwb25zZS4gU2luY2UgdGhlIG1hcmtkb3duIGZpbGUgd2lsbCBydW4gdGhlIGNvZGUsIGFuZCBnZW5lcmF0ZSBhIG5ldyBzYW1wbGUgZWFjaCB0aW1lIHlvdSBLbml0IGl0LCB5b3Ugc2hvdWxkIGFsc28g4oCcc2V0IGEgc2VlZOKAnSBiZWZvcmUgeW91IHNhbXBsZS4gUmVhZCBtb3JlIGFib3V0IHNldHRpbmcgYSBzZWVkIGJlbG93Lg0KDQo8L2Rpdj4gXGhmaWxsXGJyZWFrDQoNCg0KSW4gbXkgc2ltdWxhdGlvbiBvZiBmbGlwcGluZyB0aGUgdW5mYWlyIGNvaW4gMTAwIHRpbWVzLCAxNyBmbGlwcyBjYW1lIHVwIGhlYWRzLg0KYGBge3J9DQpjb2luX291dGNvbWVzIDwtIGMoImhlYWRzIiwgInRhaWxzIikNCnNldC5zZWVkKDA5MTIyMCkgI3NldCB0aGUgc2VlZCBCRUZPUkUgc2FtcGxpbmcgZm9yIHNha2Ugb2YgcmVwcm9kdWNpYmlsaXR5DQpzaW1fdW5mYWlyX2NvaW4gPC0gc2FtcGxlKGNvaW5fb3V0Y29tZXMsIHNpemUgPSAxMDAsIHJlcGxhY2UgPSBUUlVFLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYiA9IGMoMC4yLCAwLjgpKQ0Kc2ltX3VuZmFpcl9jb2luDQp0YWJsZShzaW1fdW5mYWlyX2NvaW4pDQoNCmBgYA0KDQojIyMgRXhlcmNpc2UgNA0KDQo8c3R5bGU+DQpkaXYuYmx1ZSB7IGJhY2tncm91bmQtY29sb3I6I2U2ZjBmZjsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAyMHB4O30NCjwvc3R5bGU+DQo8ZGl2IGNsYXNzID0gImJsdWUiPg0KDQpXaGF0IGNoYW5nZSBuZWVkcyB0byBiZSBtYWRlIHRvIHRoZSBzYW1wbGUgZnVuY3Rpb24gc28gdGhhdCBpdCByZWZsZWN0cyBhIHNob290aW5nIHBlcmNlbnRhZ2Ugb2YgNDUlPyBNYWtlIHRoaXMgYWRqdXN0bWVudCwgdGhlbiBydW4gYSBzaW11bGF0aW9uIHRvIHNhbXBsZSAxMzMgc2hvdHMuIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgc2ltdWxhdGlvbiB0byBhIG5ldyBvYmplY3QgY2FsbGVkIHNpbV9iYXNrZXQuDQoNCjwvZGl2PiBcaGZpbGxcYnJlYWsNCg0KVG8gcmVmbGVjdCBhIHNob290aW5nIHBlcmNlbnRhZ2Ugb2YgNDUlLCB3ZSBoYXZlIHRvIGFjY291bnQgZm9yIHByb2JhYmlsaXR5IGluIG91ciBzaW1fYmFza2V0IG9iamVjdC4gVGhpcyBpcyBhY2NvdW50ZWQgZm9yIGJlbG93Og0KDQpgYGB7cn0NCnNob3Rfb3V0Y29tZXMgPC0gYygiSCIsICJNIikNCg0Kc2V0LnNlZWQoOTkxMTIyKSAjc2V0IHRoZSBzZWVkIEJFRk9SRSBzYW1wbGluZyBmb3Igc2FrZSBvZiByZXByb2R1Y2liaWxpdHkNCnNpbV9iYXNrZXQgPC0gc2FtcGxlKHNob3Rfb3V0Y29tZXMsIHNpemUgPSAxMzMsIHJlcGxhY2UgPSBUUlVFLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYiA9IGMoMC40NSwgMC41NSkpDQpzaW1fYmFza2V0DQp0YWJsZShzaW1fYmFza2V0KQ0KDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDUNCg0KPHN0eWxlPg0KZGl2LmJsdWUgeyBiYWNrZ3JvdW5kLWNvbG9yOiNlNmYwZmY7IGJvcmRlci1yYWRpdXM6IDVweDsgcGFkZGluZzogMjBweDt9DQo8L3N0eWxlPg0KPGRpdiBjbGFzcyA9ICJibHVlIj4NCg0KVXNpbmcgY2FsY19zdHJlYWssIGNvbXB1dGUgdGhlIHN0cmVhayBsZW5ndGhzIG9mIHNpbV9iYXNrZXQsIGFuZCBzYXZlIHRoZSByZXN1bHRzIGluIGEgZGF0YSBmcmFtZSBjYWxsZWQgc2ltX3N0cmVhay4NCg0KPC9kaXY+IFxoZmlsbFxicmVhaw0KDQpgYGB7cn0NCg0Kc2ltX3N0cmVhayA8LSBjYWxjX3N0cmVhayhzaW1fYmFza2V0KQ0KDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDYNCg0KPHN0eWxlPg0KZGl2LmJsdWUgeyBiYWNrZ3JvdW5kLWNvbG9yOiNlNmYwZmY7IGJvcmRlci1yYWRpdXM6IDVweDsgcGFkZGluZzogMjBweDt9DQo8L3N0eWxlPg0KPGRpdiBjbGFzcyA9ICJibHVlIj4NCg0KRGVzY3JpYmUgdGhlIGRpc3RyaWJ1dGlvbiBvZiBzdHJlYWsgbGVuZ3Rocy4gV2hhdCBpcyB0aGUgdHlwaWNhbCBzdHJlYWsgbGVuZ3RoIGZvciB0aGlzIHNpbXVsYXRlZCBpbmRlcGVuZGVudCBzaG9vdGVyIHdpdGggYSA0NSUgc2hvb3RpbmcgcGVyY2VudGFnZT8gSG93IGxvbmcgaXMgdGhlIHBsYXllcuKAmXMgbG9uZ2VzdCBzdHJlYWsgb2YgYmFza2V0cyBpbiAxMzMgc2hvdHM/IE1ha2Ugc3VyZSB0byBpbmNsdWRlIGEgcGxvdCBpbiB5b3VyIGFuc3dlci4NCg0KPC9kaXY+IFxoZmlsbFxicmVhaw0KDQpTaW1pbGFyIHRvIEtvYmUncyBkaXN0cmlidXRpb24sIGl0J3MgcmlnaHQgc2tld2VkIC8gaGFzIGEgdGFpbCB0byB0aGUgcmlnaHQgYW5kIGlzIHVuaW1vZGFsLiBUaGUgc2ltdWxhdGVkIHNob290ZXIncyBhdmVyYWdlIHN0cmVhayBsZW5ndGggd2FzIDAuNzkgKHRvIDIgZGVjaW1hbCBwbGFjZXMpIHdoaWNoIHdhcyBzbGlnaHRseSBoaWdoZXIgdGhhbiBLb2JlJ3MuIFRoZSBkaXN0cmlidXRpb24gd2FzIG5lYXJseSBpZGVudGljYWwgdG8gS29iZSdzLCB3aXRoIHRoZSBoaWdoZXN0IGZyZXF1ZW5jeSBzdHJlYWsgYmVpbmcgMCBhbmQgdGhlbiAxIHNob3QsIGEgZmV3IDIgYW5kIDMgc2hvdCBzdHJlYWtzLCBhbmQgMSA0IHNob3Qgc3RyZWFrLiBUaGUgZGlmZmVyZW5jZSBsaWVkIGluIHRoZSBmYWN0IHRoYXQgdGhlIHNpbXVsYXRlZCBzaG9vdGVyIGhhZCBhIGxvbmdlc3Qgc3RyZWFrIG9mIDUgc2hvdHMgYW5kIHRoZXkgYWNoaWV2ZWQgdGhpcyBtYXJrICp0d2ljZSouDQoNCmBgYHtyfQ0KDQptZWFuKHNpbV9zdHJlYWskbGVuZ3RoKQ0KDQpnZ3Bsb3QoZGF0YSA9IHNpbV9zdHJlYWssIGFlcyh4ID0gbGVuZ3RoKSkgKyBnZW9tX2JhcigpDQoNCmBgYA0KDQojIyMgRXhlcmNpc2UgNw0KDQo8c3R5bGU+DQpkaXYuYmx1ZSB7IGJhY2tncm91bmQtY29sb3I6I2U2ZjBmZjsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAyMHB4O30NCjwvc3R5bGU+DQo8ZGl2IGNsYXNzID0gImJsdWUiPg0KDQpJZiB5b3Ugd2VyZSB0byBydW4gdGhlIHNpbXVsYXRpb24gb2YgdGhlIGluZGVwZW5kZW50IHNob290ZXIgYSBzZWNvbmQgdGltZSwgaG93IHdvdWxkIHlvdSBleHBlY3QgaXRzIHN0cmVhayBkaXN0cmlidXRpb24gdG8gY29tcGFyZSB0byB0aGUgZGlzdHJpYnV0aW9uIGZyb20gdGhlIHF1ZXN0aW9uIGFib3ZlPyBFeGFjdGx5IHRoZSBzYW1lPyBTb21ld2hhdCBzaW1pbGFyPyBUb3RhbGx5IGRpZmZlcmVudD8gRXhwbGFpbiB5b3VyIHJlYXNvbmluZy4NCg0KPC9kaXY+IFxoZmlsbFxicmVhaw0KDQpJZiBJIHdlcmUgdG8gcnVuIHRoZSBzaW11bGF0aW9uIG9mIHRoZSBpbmRlcGVuZGVudCBzaG9vdGVyIGEgc2Vjb25kIHRpbWUsIEkgd291bGQgZXhwZWN0IHRoZSBzdHJlYWsgZGlzdHJpYnV0aW9uIHRvIGJlICpzbGlnaGx5IGRpZmZlcmVudCouIA0KDQpUaGUgcmVhc29uIGJlaW5nIHRoYXQgd2UgYWNjb3VudGVkIGZvciAxMzMgb2JzZXJ2YXRpb25zLCB3aGljaCBpcyBhIHJlYXNvbmFibGUgYW1vdW50LiBBIHNtYWxsZXIgc2V0IG9mIG9ic2VydmF0aW9ucyAoaWUuIDEwKSB3b3VsZCBzaG93IG1vcmUgZHJhc3RpYyBvZiBhIHZhcmlhdGlvbiBpbiBkaXN0cmlidXRpb24gYW5kIGEgbGFyZ2VyIHNldCBvZiBvYnNlcnZhdGlvbnMgKGllLiAxMDAwKSB3b3VsZCBzaG93IG1vcmUgc3RhYmxlIGRpc3RyaWJ1dGlvbiBvZiBvdXRjb21lcy4gVG8gdGhpcyBwb2ludCwgaW4gcnVubmluZyB0aGUgcmFuZG9tIHNpbXVsYXRpb24gYSBudW1iZXIgb2YgdGltZXMgYmVmb3JlIHNldHRpbmcgdGhlIHNlZWQsIGl0J3Mgb3V0cHV0IHNhdCBpbiB0aGUgcmFuZ2Ugb2YgNDAtNDglIHdoaWNoIGNvaW5jaWRlcyB3aXRoIGEgZGlzdHJpYnV0aW9uIHRoYXQgaXMgc2ltaWxhciBhbGJlaXQgbm90IGV4YWN0bHkgdGhlIHNhbWUgbm9yIHRvdGFsbHkgZGlmZmVyZW50Lg0KDQojIyMgRXhlcmNpc2UgOA0KDQo8c3R5bGU+DQpkaXYuYmx1ZSB7IGJhY2tncm91bmQtY29sb3I6I2U2ZjBmZjsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAyMHB4O30NCjwvc3R5bGU+DQo8ZGl2IGNsYXNzID0gImJsdWUiPg0KDQpIb3cgZG9lcyBLb2JlIEJyeWFudOKAmXMgZGlzdHJpYnV0aW9uIG9mIHN0cmVhayBsZW5ndGhzIGNvbXBhcmUgdG8gdGhlIGRpc3RyaWJ1dGlvbiBvZiBzdHJlYWsgbGVuZ3RocyBmb3IgdGhlIHNpbXVsYXRlZCBzaG9vdGVyPyBVc2luZyB0aGlzIGNvbXBhcmlzb24sIGRvIHlvdSBoYXZlIGV2aWRlbmNlIHRoYXQgdGhlIGhvdCBoYW5kIG1vZGVsIGZpdHMgS29iZeKAmXMgc2hvb3RpbmcgcGF0dGVybnM/IEV4cGxhaW4uDQoNCjwvZGl2PiBcaGZpbGxcYnJlYWsNCg0KTW9yZSBkYXRhIGNvdWxkIGJlIGNvbGxlY3RlZCB0byBkcmF3IGEgY2xlYXJlciBjb25jbHVzaW9uIGJ1dCBiYXNlZCBvbiB3aGF0IHdlJ3ZlIHNlZW4gd2l0aCBLb2JlJ3MgZGF0YSBmcm9tIDIwMDkgYXMgY29tcGFyZWQgdG8gb3VyIHNpbXVsYXRlZCBzaG9vdGVyOiB3ZSBkbyBub3QgaGF2ZSBldmlkZW5jZSB0aGF0IGEgaG90IGhhbmQgbW9kZWwgZml0cyBLb2JlJ3Mgc2hvb3RpbmcgcGF0dGVybnMgZnJvbSAyMDA5LiANCg0KVGhlIGhvdCBoYW5kIG1vZGVsIHNwZWNpZmllZCB0aGF0IGlmIEtvYmUgKG9yIGFub3RoZXIgc2hvb3Rlcikgd2VyZSB0byBtYWtlIHRoZWlyIGZpcnN0IHNob3QgdGhlbiB0aGV5IHdvdWxkIGJlICptb3JlIGxpa2VseSogdG8gbWFrZSB0aGVpciBzZWNvbmQgc2hvdCAoYW5kIHNob3RzIHRoZXJlYWZ0ZXIpIGFuZCBvdXIgY29tcGFyaXNvbiBvZiBkaXN0cmlidXRpb25zIGRvIG5vdCBzdXBwb3J0IHRoaXMuDQoNCktvYmUgYW5kIHRoZSBzaW11bGF0ZWQgc2hvb3RlcidzIGRpc3RyaWJ1dGlvbnMgd2VyZSAqc2xpZ2h0bHkgZGlmZmVyZW50Ki4gVGhlIHNpbXVsYXRlZCBzaG9vdGVyIHNsaWdodGx5IG91dHBlcmZvcm1lZCBLb2JlLCB0aHVzIGRpc2NvdW50aW5nIHRoZSBob3QgaGFuZCBtb2RlbCAodGhlIHNpbXVsYXRlZCBzaG9vdGVycyBzaG90cyB3ZXJlIGNhbGN1bGF0ZWQgYXMgaW5kZXBlbmRlbnQgb2Ygb25lIGFub3RoZXIpLg0KDQpCb3RoIGRpc3RyaWJ1dGlvbnMgd2VyZSByaWdodCBza2V3ZWQsIHVuaW1vZGFsIGFuZCBuZWFybHkgaWRlbnRpY2FsIGZvciBzdHJlYWtzIGZyb20gMCB0byA0IC4uLiB0aGUgZGlmZmVyZW5jZSBzYXQgaW4gdGhlIHNpbXVsYXRlZCBzaG9vdGVyJ3MgYXZlcmFnZSBzdHJlYWsgbGVuZ3RoICgwLjc5IGNvbXBhcmVkIHRvIEtvYmUncyAwLjc2KSBhbmQgdGhlIGZhY3QgdGhhdCB0aGUgc2ltdWxhdGVkIHNob290ZXIgaGFkIGEgNSBzaG90IHN0cmVhayAqdHdpY2UqLg0KDQpUaHVzIGl0IHNlZW1zIEtvYmUgYW5kIHRoZSBzaW11bGF0ZWQgc2hvb3RlciB3ZXJlIG5vdCBtb3JlIGxpa2VseSB0byBtYWtlIHRoZWlyIHNlY29uZCBzaG90IGFmdGVyIG1ha2luZyB0aGVpciBmaXJzdCBzaG90Lg0K