library(tidyverse)
library(openintro)
library(infer)

Exercise 1

The sample distribution is similar to the poll given by WGM, as 74% believe in scientists and 26% does not. The sample differentiates by 6% from the original, as the sample population is more wary of scientists compared to the poll.

global_monitor <- tibble(
  scientist_work = c(rep("Benefits", 80000), rep("Doesn't benefit", 20000))
)
global_monitor %>%
  count(scientist_work) %>%
  mutate(p = n /sum(n))
## # A tibble: 2 x 3
##   scientist_work      n     p
##   <chr>           <int> <dbl>
## 1 Benefits        80000   0.8
## 2 Doesn't benefit 20000   0.2
set.seed(50)

samp1 <- global_monitor %>%
  sample_n(50)

samp1 %>%
  count(scientist_work) %>%
  mutate(p = n /sum(n))
## # A tibble: 2 x 3
##   scientist_work      n     p
##   <chr>           <int> <dbl>
## 1 Benefits           37  0.74
## 2 Doesn't benefit    13  0.26

Exercise 2

The sample corporation could match another student’s sample if both students choose the same sample size and set the seed before the sample. It is not guarantee that each sample is the same as it’s randomly picked. There should not be a large difference in the true proportion. F

Exercise 3

The new sample of 50 has 4% difference from sample 1. Four more people from the population agree with scientists compared to the previous sample. I think a large population size will produce a more accurate estimate, as there is more variety in the sample.

samp2 <- global_monitor %>%
  sample_n(50)

samp2 %>%
  count(scientist_work) %>%
  mutate(p = n /sum(n))
## # A tibble: 2 x 3
##   scientist_work      n     p
##   <chr>           <int> <dbl>
## 1 Benefits           39  0.78
## 2 Doesn't benefit    11  0.22
samp3 <- global_monitor %>%
  sample_n(100)

samp4 <- global_monitor %>%
  sample_n(1000)
samp3 %>%
    count(scientist_work) %>%
    mutate(p = n /sum(n))
## # A tibble: 2 x 3
##   scientist_work      n     p
##   <chr>           <int> <dbl>
## 1 Benefits           85  0.85
## 2 Doesn't benefit    15  0.15
samp4 %>%
    count(scientist_work) %>%
    mutate(p = n /sum(n))
## # A tibble: 2 x 3
##   scientist_work      n     p
##   <chr>           <int> <dbl>
## 1 Benefits          802 0.802
## 2 Doesn't benefit   198 0.198

Exercise 4

The distribution of the results is symmetric and uni modal. The mean of the historiography is at 0.2. The estimate of the true population proportion is 20%.

sample_props50 <- global_monitor %>%
                    rep_sample_n(size = 50, reps = 15000, replace = TRUE) %>%
                    count(scientist_work) %>%
                    mutate(p_hat = n /sum(n)) %>%
                    filter(scientist_work == "Doesn't benefit")

ggplot(data = sample_props50, aes(x = p_hat)) +
  geom_histogram(binwidth = 0.02) +
  labs(
    x = "p_hat (Doesn't benefit)",
    title = "Sampling distribution of p_hat",
    subtitle = "Sample size = 50, Number of samples = 15000"
  )

Exercise 5

There are 25 observation in the tibble sample_props_small. The observations are the result of a sample, the sample produced a proportion of people who choose “Don’t believe” from a pool of ten.

sample_props_small<-tibble(scientist_work="Doesn't benefit",n=0,p_hat=0.0)
x<-0
while(x <27){
  temp<-global_monitor %>%
  sample_n(size = 10, replace = TRUE) %>%
  count(scientist_work) %>%
  mutate(p_hat = n /sum(n)) %>%
  filter(scientist_work == "Doesn't benefit")
  
  sample_props_small<-rbind(sample_props_small,temp)
  x<-x+1
}
sample_props_small<-sample_props_small[-1,]
head(sample_props_small)
## # A tibble: 6 x 3
##   scientist_work      n p_hat
##   <chr>           <dbl> <dbl>
## 1 Doesn't benefit     3   0.3
## 2 Doesn't benefit     1   0.1
## 3 Doesn't benefit     1   0.1
## 4 Doesn't benefit     1   0.1
## 5 Doesn't benefit     3   0.3
## 6 Doesn't benefit     3   0.3

Exercrise 6

As the sample size increases, the shape of the distribution becomes symmetrical and the mean centers around .20. The SE leans toward .0056 as the sample size increased.

sample_props10 <- global_monitor %>%
                    rep_sample_n(size = 10, reps = 5000, replace = TRUE) %>%
                    count(scientist_work) %>%
                    mutate(p_hat = n /sum(n)) %>%
                    filter(scientist_work == "Doesn't benefit")

sample_props100 <- global_monitor %>%
                    rep_sample_n(size = 100, reps = 5000, replace = TRUE) %>%
                    count(scientist_work) %>%
                    mutate(p_hat = n /sum(n)) %>%
                    filter(scientist_work == "Doesn't benefit")

SE<-function(x){
  
  x<-(x*(1-x))/5000
  x<- sqrt(x)
  return(x)
}
x<-mean(sample_props10$p_hat)
y<-mean(sample_props50$p_hat)
z<-mean(sample_props100$p_hat)
SE(x)
## [1] 0.005897241
SE(y)
## [1] 0.005663194
SE(z)
## [1] 0.005658105

Exercise 7

The proportion of one sample of size 15, it estimates ~67% of the population agrees on “benefits”.

samp_yes<-global_monitor %>%
  sample_n(size = 15, replace = TRUE) %>%
  count(scientist_work) %>%
  mutate(p_hat = n /sum(n)) %>%
  filter(scientist_work == "Benefits")

mean(samp_yes$p_hat)
## [1] 0.8

Exercise 8

The sample distribution is unimodal and left skewed. I guess the true proportion is .8 from the histogram. The population proportion is ~80%.

sample_props15 <- global_monitor %>%
                    rep_sample_n(size = 15, reps = 2000, replace = TRUE) %>%
                    count(scientist_work) %>%
                    mutate(p_hat = n /sum(n)) %>%
                    filter(scientist_work == "Benefits")

mean(sample_props15$p_hat)
## [1] 0.7978667
ggplot(data = sample_props15, aes(x = p_hat)) +
  geom_histogram(binwidth = 0.02) +
  labs(
    x = "p_hat (Benefits)",
    title = "Sampling distribution of p_hat",
    subtitle = "Sample size = 15, Number of samples = 2000"
  )

Exercise 9

The distribution of the sample size is unimodal and symmetric. I guess the true proportion is .80.

sample_props150 <- global_monitor %>%
                    rep_sample_n(size = 150, reps = 2000, replace = TRUE) %>%
                    count(scientist_work) %>%
                    mutate(p_hat = n /sum(n)) %>%
                    filter(scientist_work == "Benefits")
ggplot(data = sample_props150, aes(x = p_hat)) +
  geom_histogram(binwidth = 0.02) +
  labs(
    x = "p_hat (Benefits)",
    title = "Sampling distribution of p_hat",
    subtitle = "Sample size = 15, Number of samples = 2000"
  )

Exercise 10

When we compared the spreads of the sampling distributions, the collections with the higher sample size had a smaller spread than the smaller ones. For example, the sample distribution of size 15 had the largest spread compared to size 150. I would work with a smaller spread as the larger sample size provides a more accurate true proportion.

LS0tDQp0aXRsZTogIkxhYiA1IFNhbXBsaW5nIGRpc3RyaWJ1dGlvbnMiDQphdXRob3I6ICJWeWFubmEgSGlsbCINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShvcGVuaW50cm8pDQpsaWJyYXJ5KGluZmVyKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSAxDQoNClRoZSBzYW1wbGUgZGlzdHJpYnV0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIHBvbGwgZ2l2ZW4gYnkgV0dNLCBhcyA3NCUgYmVsaWV2ZSBpbiBzY2llbnRpc3RzIGFuZCAyNiUgZG9lcyBub3QuIFRoZSBzYW1wbGUgZGlmZmVyZW50aWF0ZXMgYnkgNiUgZnJvbSB0aGUgb3JpZ2luYWwsIGFzIHRoZSBzYW1wbGUgcG9wdWxhdGlvbiBpcyBtb3JlIHdhcnkgb2Ygc2NpZW50aXN0cyBjb21wYXJlZCB0byB0aGUgcG9sbC4NCg0KYGBge3IgY29kZS1jaHVuay1sYWJlbH0NCmdsb2JhbF9tb25pdG9yIDwtIHRpYmJsZSgNCiAgc2NpZW50aXN0X3dvcmsgPSBjKHJlcCgiQmVuZWZpdHMiLCA4MDAwMCksIHJlcCgiRG9lc24ndCBiZW5lZml0IiwgMjAwMDApKQ0KKQ0KZ2xvYmFsX21vbml0b3IgJT4lDQogIGNvdW50KHNjaWVudGlzdF93b3JrKSAlPiUNCiAgbXV0YXRlKHAgPSBuIC9zdW0obikpDQoNCnNldC5zZWVkKDUwKQ0KDQpzYW1wMSA8LSBnbG9iYWxfbW9uaXRvciAlPiUNCiAgc2FtcGxlX24oNTApDQoNCnNhbXAxICU+JQ0KICBjb3VudChzY2llbnRpc3Rfd29yaykgJT4lDQogIG11dGF0ZShwID0gbiAvc3VtKG4pKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSAyDQoNClRoZSBzYW1wbGUgY29ycG9yYXRpb24gY291bGQgbWF0Y2ggYW5vdGhlciBzdHVkZW50J3Mgc2FtcGxlIGlmIGJvdGggc3R1ZGVudHMgY2hvb3NlIHRoZSBzYW1lIHNhbXBsZSBzaXplIGFuZCBzZXQgdGhlIHNlZWQgYmVmb3JlIHRoZSBzYW1wbGUuIEl0IGlzIG5vdCBndWFyYW50ZWUgdGhhdCBlYWNoIHNhbXBsZSBpcyB0aGUgc2FtZSBhcyBpdCdzIHJhbmRvbWx5IHBpY2tlZC4gVGhlcmUgc2hvdWxkIG5vdCBiZSBhIGxhcmdlIGRpZmZlcmVuY2UgaW4gdGhlIHRydWUgcHJvcG9ydGlvbi4gRg0KDQojIyMgRXhlcmNpc2UgMw0KDQpUaGUgbmV3IHNhbXBsZSBvZiA1MCBoYXMgNCUgZGlmZmVyZW5jZSBmcm9tIHNhbXBsZSAxLiBGb3VyIG1vcmUgcGVvcGxlIGZyb20gdGhlIHBvcHVsYXRpb24gYWdyZWUgd2l0aCBzY2llbnRpc3RzIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBzYW1wbGUuIEkgdGhpbmsgYSBsYXJnZSBwb3B1bGF0aW9uIHNpemUgd2lsbCBwcm9kdWNlIGEgbW9yZSBhY2N1cmF0ZSBlc3RpbWF0ZSwgYXMgdGhlcmUgaXMgbW9yZSB2YXJpZXR5IGluIHRoZSBzYW1wbGUuIA0KYGBge3J9DQpzYW1wMiA8LSBnbG9iYWxfbW9uaXRvciAlPiUNCiAgc2FtcGxlX24oNTApDQoNCnNhbXAyICU+JQ0KICBjb3VudChzY2llbnRpc3Rfd29yaykgJT4lDQogIG11dGF0ZShwID0gbiAvc3VtKG4pKQ0KDQpzYW1wMyA8LSBnbG9iYWxfbW9uaXRvciAlPiUNCiAgc2FtcGxlX24oMTAwKQ0KDQpzYW1wNCA8LSBnbG9iYWxfbW9uaXRvciAlPiUNCiAgc2FtcGxlX24oMTAwMCkNCnNhbXAzICU+JQ0KICAgIGNvdW50KHNjaWVudGlzdF93b3JrKSAlPiUNCiAgICBtdXRhdGUocCA9IG4gL3N1bShuKSkNCnNhbXA0ICU+JQ0KICAgIGNvdW50KHNjaWVudGlzdF93b3JrKSAlPiUNCiAgICBtdXRhdGUocCA9IG4gL3N1bShuKSkNCmBgYA0KDQojIyMgRXhlcmNpc2UgNA0KDQpUaGUgZGlzdHJpYnV0aW9uIG9mIHRoZSByZXN1bHRzIGlzIHN5bW1ldHJpYyBhbmQgdW5pIG1vZGFsLiBUaGUgbWVhbiBvZiB0aGUgaGlzdG9yaW9ncmFwaHkgaXMgYXQgMC4yLiBUaGUgZXN0aW1hdGUgb2YgdGhlIHRydWUgcG9wdWxhdGlvbiBwcm9wb3J0aW9uIGlzIDIwJS4gDQpgYGB7cn0NCnNhbXBsZV9wcm9wczUwIDwtIGdsb2JhbF9tb25pdG9yICU+JQ0KICAgICAgICAgICAgICAgICAgICByZXBfc2FtcGxlX24oc2l6ZSA9IDUwLCByZXBzID0gMTUwMDAsIHJlcGxhY2UgPSBUUlVFKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgY291bnQoc2NpZW50aXN0X3dvcmspICU+JQ0KICAgICAgICAgICAgICAgICAgICBtdXRhdGUocF9oYXQgPSBuIC9zdW0obikpICU+JQ0KICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NpZW50aXN0X3dvcmsgPT0gIkRvZXNuJ3QgYmVuZWZpdCIpDQoNCmdncGxvdChkYXRhID0gc2FtcGxlX3Byb3BzNTAsIGFlcyh4ID0gcF9oYXQpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMC4wMikgKw0KICBsYWJzKA0KICAgIHggPSAicF9oYXQgKERvZXNuJ3QgYmVuZWZpdCkiLA0KICAgIHRpdGxlID0gIlNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBvZiBwX2hhdCIsDQogICAgc3VidGl0bGUgPSAiU2FtcGxlIHNpemUgPSA1MCwgTnVtYmVyIG9mIHNhbXBsZXMgPSAxNTAwMCINCiAgKQ0KDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDUNCg0KVGhlcmUgYXJlIDI1IG9ic2VydmF0aW9uIGluIHRoZSB0aWJibGUgc2FtcGxlX3Byb3BzX3NtYWxsLiBUaGUgb2JzZXJ2YXRpb25zIGFyZSB0aGUgcmVzdWx0IG9mIGEgc2FtcGxlLCB0aGUgc2FtcGxlIHByb2R1Y2VkIGEgcHJvcG9ydGlvbiBvZiBwZW9wbGUgd2hvIGNob29zZSAiRG9uJ3QgYmVsaWV2ZSIgZnJvbSBhIHBvb2wgb2YgdGVuLg0KYGBge3J9DQpzYW1wbGVfcHJvcHNfc21hbGw8LXRpYmJsZShzY2llbnRpc3Rfd29yaz0iRG9lc24ndCBiZW5lZml0IixuPTAscF9oYXQ9MC4wKQ0KeDwtMA0Kd2hpbGUoeCA8Mjcpew0KICB0ZW1wPC1nbG9iYWxfbW9uaXRvciAlPiUNCiAgc2FtcGxlX24oc2l6ZSA9IDEwLCByZXBsYWNlID0gVFJVRSkgJT4lDQogIGNvdW50KHNjaWVudGlzdF93b3JrKSAlPiUNCiAgbXV0YXRlKHBfaGF0ID0gbiAvc3VtKG4pKSAlPiUNCiAgZmlsdGVyKHNjaWVudGlzdF93b3JrID09ICJEb2Vzbid0IGJlbmVmaXQiKQ0KICANCiAgc2FtcGxlX3Byb3BzX3NtYWxsPC1yYmluZChzYW1wbGVfcHJvcHNfc21hbGwsdGVtcCkNCiAgeDwteCsxDQp9DQpzYW1wbGVfcHJvcHNfc21hbGw8LXNhbXBsZV9wcm9wc19zbWFsbFstMSxdDQpoZWFkKHNhbXBsZV9wcm9wc19zbWFsbCkNCmBgYA0KDQoNCiMjIyBFeGVyY3Jpc2UgNg0KDQpBcyB0aGUgc2FtcGxlIHNpemUgaW5jcmVhc2VzLCB0aGUgc2hhcGUgb2YgdGhlIGRpc3RyaWJ1dGlvbiBiZWNvbWVzIHN5bW1ldHJpY2FsIGFuZCB0aGUgbWVhbiBjZW50ZXJzIGFyb3VuZCAuMjAuIFRoZSBTRSBsZWFucyB0b3dhcmQgLjAwNTYgYXMgdGhlIHNhbXBsZSBzaXplIGluY3JlYXNlZC4NCmBgYHtyfQ0Kc2FtcGxlX3Byb3BzMTAgPC0gZ2xvYmFsX21vbml0b3IgJT4lDQogICAgICAgICAgICAgICAgICAgIHJlcF9zYW1wbGVfbihzaXplID0gMTAsIHJlcHMgPSA1MDAwLCByZXBsYWNlID0gVFJVRSkgJT4lDQogICAgICAgICAgICAgICAgICAgIGNvdW50KHNjaWVudGlzdF93b3JrKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHBfaGF0ID0gbiAvc3VtKG4pKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjaWVudGlzdF93b3JrID09ICJEb2Vzbid0IGJlbmVmaXQiKQ0KDQpzYW1wbGVfcHJvcHMxMDAgPC0gZ2xvYmFsX21vbml0b3IgJT4lDQogICAgICAgICAgICAgICAgICAgIHJlcF9zYW1wbGVfbihzaXplID0gMTAwLCByZXBzID0gNTAwMCwgcmVwbGFjZSA9IFRSVUUpICU+JQ0KICAgICAgICAgICAgICAgICAgICBjb3VudChzY2llbnRpc3Rfd29yaykgJT4lDQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShwX2hhdCA9IG4gL3N1bShuKSkgJT4lDQogICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2llbnRpc3Rfd29yayA9PSAiRG9lc24ndCBiZW5lZml0IikNCg0KU0U8LWZ1bmN0aW9uKHgpew0KICANCiAgeDwtKHgqKDEteCkpLzUwMDANCiAgeDwtIHNxcnQoeCkNCiAgcmV0dXJuKHgpDQp9DQp4PC1tZWFuKHNhbXBsZV9wcm9wczEwJHBfaGF0KQ0KeTwtbWVhbihzYW1wbGVfcHJvcHM1MCRwX2hhdCkNCno8LW1lYW4oc2FtcGxlX3Byb3BzMTAwJHBfaGF0KQ0KU0UoeCkNClNFKHkpDQpTRSh6KQ0KDQpgYGANCg0KDQojIyMgRXhlcmNpc2UgNw0KDQpUaGUgcHJvcG9ydGlvbiBvZiBvbmUgc2FtcGxlIG9mIHNpemUgMTUsIGl0IGVzdGltYXRlcyB+NjclIG9mIHRoZSBwb3B1bGF0aW9uIGFncmVlcyBvbiAiYmVuZWZpdHMiLg0KYGBge3J9DQpzYW1wX3llczwtZ2xvYmFsX21vbml0b3IgJT4lDQogIHNhbXBsZV9uKHNpemUgPSAxNSwgcmVwbGFjZSA9IFRSVUUpICU+JQ0KICBjb3VudChzY2llbnRpc3Rfd29yaykgJT4lDQogIG11dGF0ZShwX2hhdCA9IG4gL3N1bShuKSkgJT4lDQogIGZpbHRlcihzY2llbnRpc3Rfd29yayA9PSAiQmVuZWZpdHMiKQ0KDQptZWFuKHNhbXBfeWVzJHBfaGF0KQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSA4DQoNClRoZSBzYW1wbGUgZGlzdHJpYnV0aW9uIGlzIHVuaW1vZGFsIGFuZCBsZWZ0IHNrZXdlZC4gSSBndWVzcyB0aGUgdHJ1ZSBwcm9wb3J0aW9uIGlzIC44IGZyb20gdGhlIGhpc3RvZ3JhbS4gVGhlIHBvcHVsYXRpb24gcHJvcG9ydGlvbiBpcyB+ODAlLg0KYGBge3J9DQpzYW1wbGVfcHJvcHMxNSA8LSBnbG9iYWxfbW9uaXRvciAlPiUNCiAgICAgICAgICAgICAgICAgICAgcmVwX3NhbXBsZV9uKHNpemUgPSAxNSwgcmVwcyA9IDIwMDAsIHJlcGxhY2UgPSBUUlVFKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgY291bnQoc2NpZW50aXN0X3dvcmspICU+JQ0KICAgICAgICAgICAgICAgICAgICBtdXRhdGUocF9oYXQgPSBuIC9zdW0obikpICU+JQ0KICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NpZW50aXN0X3dvcmsgPT0gIkJlbmVmaXRzIikNCg0KbWVhbihzYW1wbGVfcHJvcHMxNSRwX2hhdCkNCg0KZ2dwbG90KGRhdGEgPSBzYW1wbGVfcHJvcHMxNSwgYWVzKHggPSBwX2hhdCkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAwLjAyKSArDQogIGxhYnMoDQogICAgeCA9ICJwX2hhdCAoQmVuZWZpdHMpIiwNCiAgICB0aXRsZSA9ICJTYW1wbGluZyBkaXN0cmlidXRpb24gb2YgcF9oYXQiLA0KICAgIHN1YnRpdGxlID0gIlNhbXBsZSBzaXplID0gMTUsIE51bWJlciBvZiBzYW1wbGVzID0gMjAwMCINCiAgKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSA5DQoNClRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHNhbXBsZSBzaXplIGlzIHVuaW1vZGFsIGFuZCBzeW1tZXRyaWMuIEkgZ3Vlc3MgdGhlIHRydWUgcHJvcG9ydGlvbiBpcyAuODAuDQpgYGB7cn0NCnNhbXBsZV9wcm9wczE1MCA8LSBnbG9iYWxfbW9uaXRvciAlPiUNCiAgICAgICAgICAgICAgICAgICAgcmVwX3NhbXBsZV9uKHNpemUgPSAxNTAsIHJlcHMgPSAyMDAwLCByZXBsYWNlID0gVFJVRSkgJT4lDQogICAgICAgICAgICAgICAgICAgIGNvdW50KHNjaWVudGlzdF93b3JrKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHBfaGF0ID0gbiAvc3VtKG4pKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjaWVudGlzdF93b3JrID09ICJCZW5lZml0cyIpDQpnZ3Bsb3QoZGF0YSA9IHNhbXBsZV9wcm9wczE1MCwgYWVzKHggPSBwX2hhdCkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAwLjAyKSArDQogIGxhYnMoDQogICAgeCA9ICJwX2hhdCAoQmVuZWZpdHMpIiwNCiAgICB0aXRsZSA9ICJTYW1wbGluZyBkaXN0cmlidXRpb24gb2YgcF9oYXQiLA0KICAgIHN1YnRpdGxlID0gIlNhbXBsZSBzaXplID0gMTUsIE51bWJlciBvZiBzYW1wbGVzID0gMjAwMCINCiAgKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSAxMA0KDQpXaGVuIHdlIGNvbXBhcmVkIHRoZSBzcHJlYWRzIG9mIHRoZSBzYW1wbGluZyBkaXN0cmlidXRpb25zLCB0aGUgY29sbGVjdGlvbnMgd2l0aCB0aGUgaGlnaGVyIHNhbXBsZSBzaXplIGhhZCBhIHNtYWxsZXIgc3ByZWFkIHRoYW4gdGhlIHNtYWxsZXIgb25lcy4gRm9yIGV4YW1wbGUsIHRoZSBzYW1wbGUgZGlzdHJpYnV0aW9uIG9mIHNpemUgMTUgaGFkIHRoZSBsYXJnZXN0IHNwcmVhZCBjb21wYXJlZCB0byBzaXplIDE1MC4gSSB3b3VsZCB3b3JrIHdpdGggYSBzbWFsbGVyIHNwcmVhZCBhcyB0aGUgbGFyZ2VyIHNhbXBsZSBzaXplIHByb3ZpZGVzIGEgbW9yZSBhY2N1cmF0ZSB0cnVlIHByb3BvcnRpb24u