Premise

The goal of this document is to help you organize your thoughts and your work-flow for the group data project.

You will not submit this document

The goal of the project is to explore and wrangle an interesting data set, ultimately using it to answer two research questions. The work will be done in a small group of 3-4. The deliverable is fully developed report that introduces the data, describes any data management/wrangling, introduces two research questions, provides insightful visualizations, and performs statistical inference to provide answers

Step 1: Examine the codebook, load the data.

The code book for the data is available as a handout in class and as a document in Canvas. Look it over. With your group, consider a few preliminary ideas about variables you might be particularly interested in, and what kinds of research questions might be appropriate. You can use this space to write a few notes if you desire.

Requirements for your research questions:

  • Inference should not be performed with a variable that has more than 5 levels (unless it’s day of the week or related to month). You are welcome to take a variable with more levels and transform it to have fewer, or take a quantitative variable and create two or more categories.
  • At least one research question must consider the relationship between two variables.
  • One research question may be a chi-square goodness of fit test for a single categorical variable (no tests for a test for a single mean or single proportion).
  • To earn full credit, you must ask at least one research question that requires data manipulation (filter, mutate, etc)

Use the code-chunk below to load the data into the workspace and begin exploring your variables. Hint: look at data summaries, view a list of unique values for a variable, create some visualizations. This should help you decide if you want to continue pursuing your original ideas or whether you want to modify them.

RawData <- read.csv(file.choose())
glimpse(RawData)
Rows: 75,000
Columns: 28
$ incident_id                     <dbl> 20216002897, 2020171061, 2024686299, 2022658747, 202458408…
$ offense_type_id                 <chr> "criminal-mischief-mtr-veh", "theft-of-motor-vehicle", "th…
$ reported_date                   <chr> "1/30/21 23:44", "3/19/20 15:54", "12/23/24 6:54", "12/26/…
$ nbrhd_name                      <chr> "washington-park-west", "gateway-green-valley-ranch", "cen…
$ victim_count                    <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ hour                            <int> 23, 15, 6, 19, 7, 3, 21, 2, 6, 22, 23, 16, 16, 20, 22, 3, …
$ day                             <chr> "Saturday", "Thursday", "Monday", "Monday", "Saturday", "S…
$ month                           <chr> "Jan", "Mar", "Dec", "Dec", "Oct", "Apr", "Aug", "Nov", "O…
$ year                            <int> 2021, 2020, 2024, 2022, 2024, 2021, 2020, 2024, 2022, 2024…
$ total_population                <int> 7382, 43809, 29939, 16718, 16120, 8907, 8628, 12548, 4631,…
$ percent_black                   <dbl> 0.80, 27.62, 9.00, 7.99, 3.21, 2.54, 0.60, 1.80, 6.91, 9.0…
$ percent_white                   <dbl> 83.54, 19.12, 66.88, 70.89, 73.94, 65.98, 79.51, 39.75, 70…
$ percent_native_american         <dbl> 0.00, 0.15, 0.55, 0.34, 0.00, 0.08, 0.00, 0.18, 0.00, 0.55…
$ percent_aapi                    <dbl> 2.74, 6.69, 7.97, 1.91, 4.25, 4.06, 8.19, 3.88, 2.79, 7.97…
$ percent_male                    <dbl> 54.57, 49.72, 49.45, 49.76, 55.50, 46.03, 56.17, 49.64, 61…
$ percent_under18                 <dbl> 12.31, 28.28, 31.93, 15.72, 1.55, 22.05, 1.72, 25.05, 0.43…
$ percent_65plus                  <dbl> 12.26, 8.12, 8.11, 22.45, 10.33, 25.31, 19.19, 13.89, 8.62…
$ percent_in_school               <dbl> 13.93, 28.88, 28.65, 16.19, 10.02, 24.80, 9.34, 23.34, 25.…
$ percent_only_english            <dbl> 86.83, 50.92, 75.12, 82.25, 91.48, 82.73, 91.83, 62.57, 84…
$ percent_spanish                 <dbl> 3.77, 29.65, 4.11, 7.33, 5.04, 6.39, 3.04, 24.31, 7.13, 4.…
$ percent_housing_owner_occupied  <dbl> 45.57, 70.94, 67.77, 45.67, 22.67, 74.68, 22.06, 68.25, 21…
$ percent_housing_renter_occupied <dbl> 48.75, 26.13, 28.65, 49.12, 72.45, 20.01, 57.66, 29.80, 58…
$ median_earn                     <int> 62336, 41018, 75472, 47752, 49134, 48793, 70918, 36720, 55…
$ median_earn_female              <int> 60213, 35993, 54630, 39635, 42961, 44190, 54864, 31476, 32…
$ median_earn_male                <int> 63980, 46346, 100308, 56654, 56624, 53854, 78000, 39537, 7…
$ median_rent                     <int> 1081, 1183, 1164, 1057, 958, 1019, 1317, 963, 1125, 1164, …
$ median_home_value               <int> 680135, 360326, 636942, 463261, 339727, 447906, 732075, 36…
$ percent_poverty                 <dbl> 6.35, 8.40, 3.05, 5.92, 9.62, 12.37, 10.80, 10.50, 23.50, …
tally(~month, data = RawData)
month
 Apr  Aug  Dec  Feb  Jan  Jul  Jun  Mar  May  Nov  Oct  Sep 
6024 6434 5730 6263 7091 6464 6115 6565 6267 5526 6294 6227 

Step 2: Write your research questions.

Write down what your research questions, and translate them into the correct hypothesis tests. Review the research question guidelines in step one if necessary

Research Question 1:

Research Question 2:

Is there an association between the time of day and the number of arrests for theft-of-motor-vehicle?

Time intervals:

8PM-Midnight midnight- 4am 4am - 8am 8am-noon noon-4pm 4pm-8pm

Once you have your research questions, it is strongly recommended that you talk with your professor (in lab) about whether they can be answered with your data and what kind of data manipulation might be needed. You should think carefully about what type of data wrangling you think should be done. Your professor can help confirm your thoughts, or suggest different approaches. It’s possible you have a data wrangling idea that isn’t directly covered by the content in lecture. Your professor may be able to assist.

Step 3: Perform the data manipulations

Use this space to manipulate the data in whatever way you deem necessary. We suggest you select only the variables you need to perform your data analysis.

# Research Question 1

#The data that we care about(vehicle crimes) and month of the year
denver_crime_data_1 <- RawData |>
  # Only look at crimes related to vehicles
    filter(grepl('vehicle',offense_type_id) | grepl('veh', offense_type_id) |grepl('car', offense_type_id) | grepl('bicycle', offense_type_id) | grepl('auto', offense_type_id))|>
  select(offense_type_id, month)
glimpse(denver_crime_data_1)

# Groups by month, adds variable of season_category to determine 'winter' or other
denver_crime_data_1 <- denver_crime_data_1 |>
  group_by(month)|>
  mutate(season_category = case_when(
    month == 'Dec' | month == 'Jan' | month == 'Feb' ~ 'winter', 
    month == 'Mar' | month == 'Apr' | month == 'May' ~ 'spring', 
    month == 'Jun' | month == 'Jul' |month == 'Aug' ~ 'summer',
    month == 'Sep' | month == 'Oct' | month == 'Nov' ~ 'autumn',
    .default = 'other')
  )
denver_crime_data_1

#counts the number of crimes in winter vs. other
counts_1 <- denver_crime_data_1|>
  group_by(season_category) |>
  summarise(
    number_of_crimes = n()
  )|>
  mutate(
    proportions <- (n() / sum(n('winter', 'summer', 'spring', 'autumn'))
    )
  )
counts_1

You should be able to clearly describe the data manipulations you perform, as well as the resulting variables.

Step 4: Visualize your data

Produce two visualizations that help you gain insight into the research questions from part 2 (one for each). Think about what the visualizations tell you about your research question.

Step 5: Perform inference (if appropriate)

Confirm that it is appropriate to use a distribution to perform inference, then perform the inference using prop.test, t.test, cor.test, or xchisq.test. You will need to do this twice, once for each research question.

Step 6: Communicate your results

Based on the outcome of Step 5, you need to answer both your research questions.

Step 7: Write the Report.

Take everything you’ve done in this worksheet and organize it using the DataProjectReportTemplate.

The text of your report must be less than 600 words. To check the word count, go to Edit -> Word Count. The two figures will go at the end.

You’ll need to the follow sections (also described in the template):

Introduction:

Introduce the dataset in your own words. Discuss, briefly, the motivation and curiousity behind your choice of research questions.

Research question 1:

Write the research question in the section title and clearly detail any data manipulations you performed to be able to answer this research question. Do not include R code; use complete sentences to describe what you did.

  • Write the relevant hypothesis test and clearly define the parameter of interest in the context of your research question.
  • Discuss what kind of data visualization you created for this question, and what you learned from it as it relates to the research question. You will put this visualization at the end of the document.
  • Introduce the inference procedure and report the p-value, as well as your conclusion in context. Make sure you discuss the strength of the evidence.

Research question 1:

Write the research question in the section title and clearly detail any data manipulations you performed to be able to answer this research question. Do not include R code; use complete sentences to describe what you did.

  • Write the relevant hypothesis test and clearly define the parameter of interest in the context of your research question.
  • Discuss what kind of data visualization you created for this question, and what you learned from it as it relates to the research question. You will put this visualization at the end of the document.
  • Introduce the inference procedure and report the p-value, as well as your conclusion in context. Make sure you discuss the strength of the evidence.

Figures

One figure for each research questions in order.

LS0tDQp0aXRsZTogJ0RhdGEgUHJvamVjdDogV29ya3NoZWV0Jw0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KLS0tDQoNCmBgYHtyLCBlY2hvID0gRiwgbWVzc2FnZSA9IEZ9DQojIENsZWFyIHdvcmtzcGFjZQ0Kcm0obGlzdCA9IGxzKCkpIA0KDQojIHlvdXIgY29kZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBodG1sIGZvciB0aGlzIGFzc2lnbm1lbnQNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPVRSVUUpIA0KDQojIGxvYWQgcGFja2FnZXMgd2UgbmVlZCBmb3IgdGhpcyBsYWINCmxpYnJhcnkobW9zYWljLCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKSANCmxpYnJhcnkoZ2dmb3JtdWxhLCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKQ0KbGlicmFyeShMb2NrNURhdGEsIHdhcm4uY29uZmxpY3RzID0gRkFMU0UpDQpsaWJyYXJ5KGRwbHlyLCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKQ0KYGBgDQoNCg0KIyBQcmVtaXNlDQoNClRoZSBnb2FsIG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gaGVscCB5b3Ugb3JnYW5pemUgeW91ciB0aG91Z2h0cyBhbmQgeW91ciB3b3JrLWZsb3cgZm9yIHRoZSBncm91cCBkYXRhIHByb2plY3QuICANCg0KKllvdSB3aWxsIG5vdCBzdWJtaXQgdGhpcyBkb2N1bWVudCoNCg0KVGhlIGdvYWwgb2YgdGhlIHByb2plY3QgaXMgdG8gZXhwbG9yZSBhbmQgd3JhbmdsZSBhbiBpbnRlcmVzdGluZyBkYXRhIHNldCwgdWx0aW1hdGVseSB1c2luZyBpdCB0byBhbnN3ZXIgdHdvIHJlc2VhcmNoIHF1ZXN0aW9ucy4gIFRoZSB3b3JrIHdpbGwgYmUgZG9uZSBpbiBhIHNtYWxsIGdyb3VwIG9mIDMtNC4gVGhlIGRlbGl2ZXJhYmxlIGlzIGZ1bGx5IGRldmVsb3BlZCByZXBvcnQgdGhhdCBpbnRyb2R1Y2VzIHRoZSBkYXRhLCBkZXNjcmliZXMgYW55IGRhdGEgbWFuYWdlbWVudC93cmFuZ2xpbmcsIGludHJvZHVjZXMgdHdvIHJlc2VhcmNoIHF1ZXN0aW9ucywgcHJvdmlkZXMgaW5zaWdodGZ1bCB2aXN1YWxpemF0aW9ucywgYW5kIHBlcmZvcm1zIHN0YXRpc3RpY2FsIGluZmVyZW5jZSB0byBwcm92aWRlIGFuc3dlcnMNCg0KIyBTdGVwIDE6ICBFeGFtaW5lIHRoZSBjb2RlYm9vaywgbG9hZCB0aGUgZGF0YS4NCg0KVGhlIGNvZGUgYm9vayBmb3IgdGhlIGRhdGEgaXMgYXZhaWxhYmxlIGFzIGEgaGFuZG91dCBpbiBjbGFzcyBhbmQgYXMgYSBkb2N1bWVudCBpbiBDYW52YXMuICBMb29rIGl0IG92ZXIuICBXaXRoIHlvdXIgZ3JvdXAsIGNvbnNpZGVyIGEgZmV3IHByZWxpbWluYXJ5IGlkZWFzIGFib3V0IHZhcmlhYmxlcyB5b3UgbWlnaHQgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4sIGFuZCB3aGF0IGtpbmRzIG9mIHJlc2VhcmNoIHF1ZXN0aW9ucyBtaWdodCBiZSBhcHByb3ByaWF0ZS4gIFlvdSBjYW4gdXNlIHRoaXMgc3BhY2UgdG8gd3JpdGUgYSBmZXcgbm90ZXMgaWYgeW91IGRlc2lyZS4NCg0KDQoNCg0KIyMjIFJlcXVpcmVtZW50cyBmb3IgeW91ciByZXNlYXJjaCBxdWVzdGlvbnM6ICANCg0KICAtIEluZmVyZW5jZSBzaG91bGQgbm90IGJlIHBlcmZvcm1lZCB3aXRoIGEgdmFyaWFibGUgdGhhdCBoYXMgbW9yZSB0aGFuIDUgbGV2ZWxzICh1bmxlc3MgaXQncyBkYXkgb2YgdGhlIHdlZWsgb3IgcmVsYXRlZCB0byBtb250aCkuICBZb3UgYXJlIHdlbGNvbWUgdG8gdGFrZSBhIHZhcmlhYmxlIHdpdGggbW9yZSBsZXZlbHMgYW5kIHRyYW5zZm9ybSBpdCB0byBoYXZlIGZld2VyLCBvciB0YWtlIGEgcXVhbnRpdGF0aXZlIHZhcmlhYmxlIGFuZCBjcmVhdGUgdHdvIG9yIG1vcmUgY2F0ZWdvcmllcy4NCiAgLSBBdCBsZWFzdCBvbmUgcmVzZWFyY2ggcXVlc3Rpb24gbXVzdCBjb25zaWRlciB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIHZhcmlhYmxlcy4NCiAgLSBPbmUgcmVzZWFyY2ggcXVlc3Rpb24gbWF5IGJlIGEgY2hpLXNxdWFyZSBnb29kbmVzcyBvZiBmaXQgdGVzdCBmb3IgYSBzaW5nbGUgY2F0ZWdvcmljYWwgdmFyaWFibGUgKG5vIHRlc3RzIGZvciBhIHRlc3QgZm9yIGEgc2luZ2xlIG1lYW4gb3Igc2luZ2xlIHByb3BvcnRpb24pLg0KICAtIFRvIGVhcm4gZnVsbCBjcmVkaXQsIHlvdSBtdXN0IGFzayBhdCBsZWFzdCBvbmUgcmVzZWFyY2ggcXVlc3Rpb24gdGhhdCByZXF1aXJlcyBkYXRhIG1hbmlwdWxhdGlvbiAoZmlsdGVyLCBtdXRhdGUsIGV0YykNCg0KVXNlIHRoZSBjb2RlLWNodW5rIGJlbG93IHRvIGxvYWQgdGhlIGRhdGEgaW50byB0aGUgd29ya3NwYWNlIGFuZCBiZWdpbiBleHBsb3JpbmcgeW91ciB2YXJpYWJsZXMuICBIaW50OiAgbG9vayBhdCBkYXRhIHN1bW1hcmllcywgdmlldyBhIGxpc3Qgb2YgdW5pcXVlIHZhbHVlcyBmb3IgYSB2YXJpYWJsZSwgY3JlYXRlIHNvbWUgdmlzdWFsaXphdGlvbnMuICBUaGlzIHNob3VsZCBoZWxwIHlvdSBkZWNpZGUgaWYgeW91IHdhbnQgdG8gY29udGludWUgcHVyc3VpbmcgeW91ciBvcmlnaW5hbCBpZGVhcyBvciB3aGV0aGVyIHlvdSB3YW50IHRvIG1vZGlmeSB0aGVtLiAgDQoNCmBgYHtyfQ0KUmF3RGF0YSA8LSByZWFkLmNzdihmaWxlLmNob29zZSgpKQ0KZ2xpbXBzZShSYXdEYXRhKQ0KYGBgDQoNCmBgYHtyfQ0KdGFsbHkofm1vbnRoLCBkYXRhID0gUmF3RGF0YSkNCmBgYA0KDQojIFN0ZXAgMjogV3JpdGUgeW91ciByZXNlYXJjaCBxdWVzdGlvbnMuDQoNCldyaXRlIGRvd24gd2hhdCB5b3VyIHJlc2VhcmNoIHF1ZXN0aW9ucywgYW5kIHRyYW5zbGF0ZSB0aGVtIGludG8gdGhlIGNvcnJlY3QgaHlwb3RoZXNpcyB0ZXN0cy4gIFJldmlldyB0aGUgcmVzZWFyY2ggcXVlc3Rpb24gZ3VpZGVsaW5lcyBpbiBzdGVwIG9uZSBpZiBuZWNlc3NhcnkNCg0KIyMjIFJlc2VhcmNoIFF1ZXN0aW9uIDE6DQoNCg0KDQojIyMgUmVzZWFyY2ggUXVlc3Rpb24gMjoNCg0KSXMgdGhlcmUgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgdGltZSBvZiAgZGF5IGFuZCB0aGUgbnVtYmVyIG9mIGFycmVzdHMgZm9yIHRoZWZ0LW9mLW1vdG9yLXZlaGljbGU/DQoNClRpbWUgaW50ZXJ2YWxzOg0KDQo4UE0tTWlkbmlnaHQNCm1pZG5pZ2h0LSA0YW0NCjRhbSAtIDhhbQ0KOGFtLW5vb24NCm5vb24tNHBtDQo0cG0tOHBtDQoNCg0KT25jZSB5b3UgaGF2ZSB5b3VyIHJlc2VhcmNoIHF1ZXN0aW9ucywgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgdGFsayB3aXRoIHlvdXIgcHJvZmVzc29yICgqaW4gbGFiKikgYWJvdXQgd2hldGhlciB0aGV5IGNhbiBiZSBhbnN3ZXJlZCB3aXRoIHlvdXIgZGF0YSBhbmQgd2hhdCBraW5kIG9mIGRhdGEgbWFuaXB1bGF0aW9uIG1pZ2h0IGJlIG5lZWRlZC4gIFlvdSBzaG91bGQgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoYXQgdHlwZSBvZiBkYXRhIHdyYW5nbGluZyB5b3UgdGhpbmsgc2hvdWxkIGJlIGRvbmUuICBZb3VyIHByb2Zlc3NvciBjYW4gaGVscCBjb25maXJtIHlvdXIgdGhvdWdodHMsIG9yIHN1Z2dlc3QgZGlmZmVyZW50IGFwcHJvYWNoZXMuICBJdCdzIHBvc3NpYmxlIHlvdSBoYXZlIGEgZGF0YSB3cmFuZ2xpbmcgaWRlYSB0aGF0IGlzbid0IGRpcmVjdGx5IGNvdmVyZWQgYnkgdGhlIGNvbnRlbnQgaW4gbGVjdHVyZS4gIFlvdXIgcHJvZmVzc29yIG1heSBiZSBhYmxlIHRvIGFzc2lzdC4NCg0KIyBTdGVwIDM6IFBlcmZvcm0gdGhlIGRhdGEgbWFuaXB1bGF0aW9ucw0KDQpVc2UgdGhpcyBzcGFjZSB0byBtYW5pcHVsYXRlIHRoZSBkYXRhIGluIHdoYXRldmVyIHdheSB5b3UgZGVlbSBuZWNlc3NhcnkuICBXZSBzdWdnZXN0IHlvdSBzZWxlY3Qgb25seSB0aGUgdmFyaWFibGVzIHlvdSBuZWVkIHRvIHBlcmZvcm0geW91ciBkYXRhIGFuYWx5c2lzLg0KDQpgYGB7cn0NCiMgUmVzZWFyY2ggUXVlc3Rpb24gMQ0KDQojVGhlIGRhdGEgdGhhdCB3ZSBjYXJlIGFib3V0KHZlaGljbGUgY3JpbWVzKSBhbmQgbW9udGggb2YgdGhlIHllYXINCmRlbnZlcl9jcmltZV9kYXRhXzEgPC0gUmF3RGF0YSB8Pg0KICAjIE9ubHkgbG9vayBhdCBjcmltZXMgcmVsYXRlZCB0byB2ZWhpY2xlcw0KICAgIGZpbHRlcihncmVwbCgndmVoaWNsZScsb2ZmZW5zZV90eXBlX2lkKSB8IGdyZXBsKCd2ZWgnLCBvZmZlbnNlX3R5cGVfaWQpIHxncmVwbCgnY2FyJywgb2ZmZW5zZV90eXBlX2lkKSB8IGdyZXBsKCdiaWN5Y2xlJywgb2ZmZW5zZV90eXBlX2lkKSB8IGdyZXBsKCdhdXRvJywgb2ZmZW5zZV90eXBlX2lkKSl8Pg0KICBzZWxlY3Qob2ZmZW5zZV90eXBlX2lkLCBtb250aCkNCmdsaW1wc2UoZGVudmVyX2NyaW1lX2RhdGFfMSkNCg0KIyBHcm91cHMgYnkgbW9udGgsIGFkZHMgdmFyaWFibGUgb2Ygc2Vhc29uX2NhdGVnb3J5IHRvIGRldGVybWluZSAnd2ludGVyJyBvciBvdGhlcg0KZGVudmVyX2NyaW1lX2RhdGFfMSA8LSBkZW52ZXJfY3JpbWVfZGF0YV8xIHw+DQogIGdyb3VwX2J5KG1vbnRoKXw+DQogIG11dGF0ZShzZWFzb25fY2F0ZWdvcnkgPSBjYXNlX3doZW4oDQogICAgbW9udGggPT0gJ0RlYycgfCBtb250aCA9PSAnSmFuJyB8IG1vbnRoID09ICdGZWInIH4gJ3dpbnRlcicsIA0KICAgIG1vbnRoID09ICdNYXInIHwgbW9udGggPT0gJ0FwcicgfCBtb250aCA9PSAnTWF5JyB+ICdzcHJpbmcnLCANCiAgICBtb250aCA9PSAnSnVuJyB8IG1vbnRoID09ICdKdWwnIHxtb250aCA9PSAnQXVnJyB+ICdzdW1tZXInLA0KICAgIG1vbnRoID09ICdTZXAnIHwgbW9udGggPT0gJ09jdCcgfCBtb250aCA9PSAnTm92JyB+ICdhdXR1bW4nLA0KICAgIC5kZWZhdWx0ID0gJ290aGVyJykNCiAgKQ0KZGVudmVyX2NyaW1lX2RhdGFfMQ0KDQojY291bnRzIHRoZSBudW1iZXIgb2YgY3JpbWVzIGluIHdpbnRlciB2cy4gb3RoZXINCmNvdW50c18xIDwtIGRlbnZlcl9jcmltZV9kYXRhXzF8Pg0KICBncm91cF9ieShzZWFzb25fY2F0ZWdvcnkpIHw+DQogIHN1bW1hcmlzZSgNCiAgICBudW1iZXJfb2ZfY3JpbWVzID0gbigpDQogICl8Pg0KICBtdXRhdGUoDQogICAgcHJvcG9ydGlvbnMgPC0gKG4oKSAvIHN1bShuKCd3aW50ZXInLCAnc3VtbWVyJywgJ3NwcmluZycsICdhdXR1bW4nKSkNCiAgICApDQogICkNCmBgYA0KYGBge3J9DQoNCmBgYA0KDQoNCmBgYHtyfQ0KY291bnRzXzENCmBgYA0KYGBge3J9DQpgYGANCg0KWW91IHNob3VsZCBiZSBhYmxlIHRvIGNsZWFybHkgZGVzY3JpYmUgdGhlIGRhdGEgbWFuaXB1bGF0aW9ucyB5b3UgcGVyZm9ybSwgYXMgd2VsbCBhcyB0aGUgcmVzdWx0aW5nIHZhcmlhYmxlcy4NCg0KIyBTdGVwIDQ6ICBWaXN1YWxpemUgeW91ciBkYXRhDQoNClByb2R1Y2UgdHdvIHZpc3VhbGl6YXRpb25zIHRoYXQgaGVscCB5b3UgZ2FpbiBpbnNpZ2h0IGludG8gdGhlIHJlc2VhcmNoIHF1ZXN0aW9ucyBmcm9tIHBhcnQgMiAob25lIGZvciBlYWNoKS4gIFRoaW5rIGFib3V0IHdoYXQgdGhlIHZpc3VhbGl6YXRpb25zIHRlbGwgeW91IGFib3V0IHlvdXIgcmVzZWFyY2ggcXVlc3Rpb24uDQoNCmBgYHtyfQ0KZ2ZfYmFyKHNlYXNvbl9jYXRlZ29yeX5udW1iZXJfb2ZfY3JpbWVzLCBmaWxsID0gfm51bWJlcl9vZl9jcmltZXMsIHBvc2l0aW9uID0gJ2ZpbGwnLCBkYXRhID0gY291bnRzXzEpDQpgYGANCg0KDQojIFN0ZXAgNTogUGVyZm9ybSBpbmZlcmVuY2UgKGlmIGFwcHJvcHJpYXRlKQ0KDQpDb25maXJtIHRoYXQgaXQgaXMgYXBwcm9wcmlhdGUgdG8gdXNlIGEgZGlzdHJpYnV0aW9uIHRvIHBlcmZvcm0gaW5mZXJlbmNlLCB0aGVuIHBlcmZvcm0gdGhlIGluZmVyZW5jZSB1c2luZyBwcm9wLnRlc3QsIHQudGVzdCwgY29yLnRlc3QsIG9yIHhjaGlzcS50ZXN0LiAgWW91IHdpbGwgbmVlZCB0byBkbyB0aGlzIHR3aWNlLCBvbmNlIGZvciBlYWNoIHJlc2VhcmNoIHF1ZXN0aW9uLg0KDQpgYGB7cn0NCg0KYGBgDQoNCg0KIyBTdGVwIDY6ICBDb21tdW5pY2F0ZSB5b3VyIHJlc3VsdHMNCg0KQmFzZWQgb24gdGhlIG91dGNvbWUgb2YgU3RlcCA1LCB5b3UgbmVlZCB0byBhbnN3ZXIgYm90aCB5b3VyIHJlc2VhcmNoIHF1ZXN0aW9ucy4gIA0KDQoNCg0KIyBTdGVwIDc6IFdyaXRlIHRoZSBSZXBvcnQuDQoNClRha2UgZXZlcnl0aGluZyB5b3UndmUgZG9uZSBpbiB0aGlzIHdvcmtzaGVldCBhbmQgb3JnYW5pemUgaXQgdXNpbmcgdGhlIERhdGFQcm9qZWN0UmVwb3J0VGVtcGxhdGUuDQoNClRoZSB0ZXh0IG9mIHlvdXIgcmVwb3J0IG11c3QgYmUgbGVzcyB0aGFuICo2MDAgd29yZHMqLiAgVG8gY2hlY2sgdGhlIHdvcmQgY291bnQsIGdvIHRvIEVkaXQgLT4gV29yZCBDb3VudC4gIFRoZSB0d28gZmlndXJlcyB3aWxsIGdvIGF0IHRoZSBlbmQuDQoNCllvdSdsbCBuZWVkIHRvIHRoZSBmb2xsb3cgc2VjdGlvbnMgKGFsc28gZGVzY3JpYmVkIGluIHRoZSB0ZW1wbGF0ZSk6DQoNCiMjIyBJbnRyb2R1Y3Rpb246IA0KDQpJbnRyb2R1Y2UgdGhlIGRhdGFzZXQgaW4geW91ciBvd24gd29yZHMuICBEaXNjdXNzLCBicmllZmx5LCB0aGUgbW90aXZhdGlvbiBhbmQgY3VyaW91c2l0eSBiZWhpbmQgeW91ciBjaG9pY2Ugb2YgcmVzZWFyY2ggcXVlc3Rpb25zLiAgDQogIA0KIyMjIFJlc2VhcmNoIHF1ZXN0aW9uIDE6ICANCg0KV3JpdGUgdGhlIHJlc2VhcmNoIHF1ZXN0aW9uIGluIHRoZSBzZWN0aW9uIHRpdGxlIGFuZCBjbGVhcmx5IGRldGFpbCBhbnkgZGF0YSBtYW5pcHVsYXRpb25zIHlvdSBwZXJmb3JtZWQgdG8gYmUgYWJsZSB0byBhbnN3ZXIgdGhpcyByZXNlYXJjaCBxdWVzdGlvbi4gRG8gbm90IGluY2x1ZGUgUiBjb2RlOyB1c2UgY29tcGxldGUgc2VudGVuY2VzIHRvIGRlc2NyaWJlIHdoYXQgeW91IGRpZC4gIA0KICANCiAgIC0gV3JpdGUgdGhlIHJlbGV2YW50IGh5cG90aGVzaXMgdGVzdCBhbmQgY2xlYXJseSBkZWZpbmUgdGhlIHBhcmFtZXRlciBvZiBpbnRlcmVzdCBpbiB0aGUgY29udGV4dCBvZiB5b3VyIHJlc2VhcmNoIHF1ZXN0aW9uLiANCiAgIC0gRGlzY3VzcyB3aGF0IGtpbmQgb2YgZGF0YSB2aXN1YWxpemF0aW9uIHlvdSBjcmVhdGVkIGZvciB0aGlzIHF1ZXN0aW9uLCBhbmQgd2hhdCB5b3UgbGVhcm5lZCBmcm9tIGl0IGFzIGl0IHJlbGF0ZXMgdG8gdGhlIHJlc2VhcmNoIHF1ZXN0aW9uLiAgWW91IHdpbGwgcHV0IHRoaXMgdmlzdWFsaXphdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4NCiAgLSBJbnRyb2R1Y2UgdGhlIGluZmVyZW5jZSBwcm9jZWR1cmUgYW5kIHJlcG9ydCB0aGUgcC12YWx1ZSwgYXMgd2VsbCBhcyB5b3VyIGNvbmNsdXNpb24gaW4gY29udGV4dC4gIE1ha2Ugc3VyZSB5b3UgZGlzY3VzcyB0aGUgc3RyZW5ndGggb2YgdGhlIGV2aWRlbmNlLg0KICAgICAgDQojIyMgUmVzZWFyY2ggcXVlc3Rpb24gMTogIA0KDQpXcml0ZSB0aGUgcmVzZWFyY2ggcXVlc3Rpb24gaW4gdGhlIHNlY3Rpb24gdGl0bGUgYW5kIGNsZWFybHkgZGV0YWlsIGFueSBkYXRhIG1hbmlwdWxhdGlvbnMgeW91IHBlcmZvcm1lZCB0byBiZSBhYmxlIHRvIGFuc3dlciB0aGlzIHJlc2VhcmNoIHF1ZXN0aW9uLiBEbyBub3QgaW5jbHVkZSBSIGNvZGU7IHVzZSBjb21wbGV0ZSBzZW50ZW5jZXMgdG8gZGVzY3JpYmUgd2hhdCB5b3UgZGlkLiAgDQogIA0KICAgLSBXcml0ZSB0aGUgcmVsZXZhbnQgaHlwb3RoZXNpcyB0ZXN0IGFuZCBjbGVhcmx5IGRlZmluZSB0aGUgcGFyYW1ldGVyIG9mIGludGVyZXN0IGluIHRoZSBjb250ZXh0IG9mIHlvdXIgcmVzZWFyY2ggcXVlc3Rpb24uIA0KICAgLSBEaXNjdXNzIHdoYXQga2luZCBvZiBkYXRhIHZpc3VhbGl6YXRpb24geW91IGNyZWF0ZWQgZm9yIHRoaXMgcXVlc3Rpb24sIGFuZCB3aGF0IHlvdSBsZWFybmVkIGZyb20gaXQgYXMgaXQgcmVsYXRlcyB0byB0aGUgcmVzZWFyY2ggcXVlc3Rpb24uICBZb3Ugd2lsbCBwdXQgdGhpcyB2aXN1YWxpemF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50Lg0KICAtIEludHJvZHVjZSB0aGUgaW5mZXJlbmNlIHByb2NlZHVyZSBhbmQgcmVwb3J0IHRoZSBwLXZhbHVlLCBhcyB3ZWxsIGFzIHlvdXIgY29uY2x1c2lvbiBpbiBjb250ZXh0LiAgTWFrZSBzdXJlIHlvdSBkaXNjdXNzIHRoZSBzdHJlbmd0aCBvZiB0aGUgZXZpZGVuY2UuDQogIA0KIyMjIEZpZ3VyZXMNCg0KT25lIGZpZ3VyZSBmb3IgZWFjaCByZXNlYXJjaCBxdWVzdGlvbnMgaW4gb3JkZXIuDQogICAgICANCiAgICAgIA0KICAgICAgDQogIA==