Ernesto Gomez
October 23, 2017

This assignment will utilize data from The Stanford Mass Shootings in America (MSA), a non-exhaustive dataset of mass shootings from 1966-2016 compiled by The Stanford Geospatial Center.

The data will ultimately be used to conduct an analysis focused on the question of mental illness and number of guns used, in its relation to mass shootings, and whether mass shooters with a history of mental illness and access to multiple guns results in a higher incidence in the loss of life. To accomplish this, variables related to the number of fatalities from mass shootings (1966-2016), shooter’s history of mental illness, and total number of guns used by shooter will be used to perform a gamma regression to potentially bring clarity to the following hypotheses:

Hypotheses

  1. Mass shooters with a history of mental illness might increase the number of fatalities in a mass shooting.
  2. The more guns a mass shooter is equipped with the more lives they may ultimately take during a mass shooting.

Packages

library(tidyverse)
library(dplyr)
library(sjmisc)
library(ZeligChoice)
library(Zelig)
library(texreg)
library(visreg)

Variables & Data Management

masshoot <- data.frame(read_csv("/Users/ernesto/Documents/Advanced Analytics/Data/MassShootings.csv")) %>%
  rename("mentalhistory" = History.of.Mental.Illness...General,
    "totalvictims" = Total.Number.of.Victims,
     "totalguns" = Total.Number.of.Guns) %>%
  select(totalvictims, mentalhistory, totalguns) %>%
  filter(!is.na(totalvictims),
         !is.na(mentalhistory),
         !is.na(totalguns), 
        !totalvictims %in% c("Unknown"),
        !mentalhistory %in% c("Unknown"),
        !totalguns %in% c("Unknown")) %>%
       mutate(mentalill=as.factor(ifelse(mentalhistory=="Yes", 1, 0)),
              totalguns=as.numeric(totalguns),
              totalguns2=as.factor(ifelse(totalguns<4, totalguns, 
                                           ifelse(totalguns>=4, "4+","na"))))
             
print(masshoot)

Preliminary Investigation - Data Overview


Mental Illness and its Relationship To Fatalities

shoot <- masshoot %>%
select (totalvictims, mentalill, totalguns) %>%
  group_by(mentalill) %>%
  summarise(mean = mean(totalvictims))
ggplot(data=shoot)+
  geom_col(aes(x=mentalill, y=mean), fill="darkblue")+
  xlab("Mentally Ill Shooters")+ylab("Average Fatalities")

The data here tells us that mass shooters with a history of mental illness (1) tend to kill more people, about 6 more victims, than those who had no prior history of mentall illness.


Total Number of Guns and its Relationship to Fatalities

shoot1 <- masshoot %>%
  select (totalvictims, mentalill, totalguns2) %>%
  group_by(totalguns2) %>%
  summarise(mean = mean(totalvictims))
ggplot(data=shoot1)+
  geom_col(aes(x=totalguns2, y=mean), fill="darkblue")+
  xlab("Number of Guns Used")+ylab("Average Fatalities")

The data also reveals a steady increase in average number of deaths after a mass shooting as the number of guns used during the incident also increases. Number of fatalities steadily increases by 5 or so deaths for each additional gun used.


Why A Gamma Regression?

When plotting our dependent variable, total number of fatalities after a mass shooting, the reasoning for choosing to analyze with a gamma regression is verified. All values are always positive, never reach zero, and we see a clear dramatic increase, with most mass shootings resulting in 10 or less fatalities, and a sharp decrease in count shortly after as the total number of deaths increases. There is also no censoring because all values have occurred and are known and eventually come to an end.

ggplot(masshoot) + geom_histogram(aes(x=totalvictims), fill="darkblue")+
  xlab("Total Deaths")


Gamma Regression Model

z.out <- zelig(totalvictims ~ mentalill + totalguns2, model="gamma", data=masshoot, cite=F)
options(scipen=999)
summary(z.out)
Model: 

Call:
z5$zelig(formula = totalvictims ~ mentalill + totalguns2, data = masshoot)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3040  -0.5590  -0.2103   0.2011   2.0241  

Coefficients:
             Estimate Std. Error t value             Pr(>|t|)
(Intercept)   0.18270    0.01316  13.882 < 0.0000000000000002
mentalill1   -0.04772    0.01257  -3.796             0.000202
totalguns22  -0.05162    0.01473  -3.503             0.000582
totalguns23  -0.08276    0.01464  -5.654      0.0000000617990
totalguns24+ -0.09695    0.01387  -6.992      0.0000000000533

(Dispersion parameter for Gamma family taken to be 0.482606)

    Null deviance: 106.597  on 181  degrees of freedom
Residual deviance:  65.706  on 177  degrees of freedom
AIC: 1062.2

Number of Fisher Scoring iterations: 6

Next step: Use 'setx' method

Counterfactuals and Simulations

Mentall Illness and Fatalities

The results clearly indicate that mass shooters with a history of mental illness tend to kill 2 more victims than those with no history. Ultimately, mass shooters with a history of mental illness are more likely to kill more people than shooters who have no prior history of mental illness.

x.noill <- setx(z.out, mentalill = 0)
x.yesill <- setx(z.out, mentalill = 1)
s.out <- sim(z.out, x=x.noill, x1=x.yesill)
summary(s.out)

 sim x :
 -----
ev
         mean        sd      50%    2.5%    97.5%
[1,] 5.503005 0.4074101 5.467089 4.78613 6.344042
pv
         mean       sd      50%     2.5%    97.5%
[1,] 5.406342 3.253059 4.746973 1.050867 13.32096

 sim x1 :
 -----
ev
         mean        sd      50%    2.5%    97.5%
[1,] 7.450188 0.6485373 7.413298 6.32694 8.799633
pv
         mean       sd     50%     2.5%    97.5%
[1,] 7.468257 4.335811 6.53564 1.644339 18.14772
fd
         mean        sd      50%      2.5%    97.5%
[1,] 1.947183 0.5781726 1.913859 0.9026206 3.176485

Plotting Mental Illness & Fatalities

plot(s.out)


Simulation, Total Number of Guns & Fatalities

The results of the simulation shows a significant difference in number of fatalities after a mass shooting, about 20 deaths, when the total number of guns used is 4 or more compared to 1. It seems that the more guns used by a shooter results in an increase in the number of victims killed.

x.logun <- setx(z.out, totalguns2 = 1)
x.higun <- setx(z.out, totalguns2 = "4+")
s <- sim(z.out, x=x.logun, x1=x.higun)
summary(s)

 sim x :
 -----
ev
         mean        sd      50%     2.5%   97.5%
[1,] 7.471921 0.6517387 7.421406 6.398625 8.90849
pv
         mean       sd      50%     2.5%    97.5%
[1,] 7.546276 4.731539 6.715934 1.304751 18.44208

 sim x1 :
 -----
ev
         mean       sd      50%     2.5%    97.5%
[1,] 28.20138 8.465211 26.45035 18.44825 46.87418
pv
         mean       sd     50%    2.5%    97.5%
[1,] 28.61508 20.23176 24.0973 5.72743 82.42928
fd
         mean       sd      50%     2.5%    97.5%
[1,] 20.72946 8.443953 19.04508 10.79592 39.75513

Plotting Total Number of Guns & Fatalities

plot(s)


Analysis

The modeled results confirm previous hypotheses. Indeed, the model and simulations show that:

These findings are interesting, particularly because of what it suggests about mass shooters and mental health, as well as the dangers of lack of proper gun control.

LS0tCnRpdGxlOiAiSG9tZXdvcmsgNyAtIE1hc3MgU2hvb3RlcnMgJiBHYW1tYSBSZWdyZXNzaW9uIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIyMjI0VybmVzdG8gR29tZXoKIyMjIyNPY3RvYmVyIDIzLCAyMDE3Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCgpUaGlzIGFzc2lnbm1lbnQgd2lsbCB1dGlsaXplIGRhdGEgZnJvbSBUaGUgU3RhbmZvcmQgTWFzcyBTaG9vdGluZ3MgaW4gQW1lcmljYSAoTVNBKSwgYSBub24tZXhoYXVzdGl2ZSBkYXRhc2V0IG9mIG1hc3Mgc2hvb3RpbmdzIGZyb20gMTk2Ni0yMDE2IGNvbXBpbGVkIGJ5IFRoZSBTdGFuZm9yZCBHZW9zcGF0aWFsIENlbnRlci4KClRoZSBkYXRhIHdpbGwgdWx0aW1hdGVseSBiZSB1c2VkIHRvIGNvbmR1Y3QgYW4gYW5hbHlzaXMgZm9jdXNlZCBvbiB0aGUgcXVlc3Rpb24gb2YgbWVudGFsIGlsbG5lc3MgYW5kIG51bWJlciBvZiBndW5zIHVzZWQsIGluIGl0cyByZWxhdGlvbiB0byBtYXNzIHNob290aW5ncywgYW5kIHdoZXRoZXIgbWFzcyBzaG9vdGVycyB3aXRoIGEgaGlzdG9yeSBvZiBtZW50YWwgaWxsbmVzcyBhbmQgYWNjZXNzIHRvIG11bHRpcGxlIGd1bnMgcmVzdWx0cyBpbiBhIGhpZ2hlciBpbmNpZGVuY2UgaW4gdGhlIGxvc3Mgb2YgbGlmZS4gVG8gYWNjb21wbGlzaCB0aGlzLCB2YXJpYWJsZXMgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9mIGZhdGFsaXRpZXMgZnJvbSBtYXNzIHNob290aW5ncyAoMTk2Ni0yMDE2KSwgc2hvb3RlcidzIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MsIGFuZCB0b3RhbCBudW1iZXIgb2YgZ3VucyB1c2VkIGJ5IHNob290ZXIgd2lsbCBiZSB1c2VkIHRvIHBlcmZvcm0gYSBnYW1tYSByZWdyZXNzaW9uIHRvIHBvdGVudGlhbGx5IGJyaW5nIGNsYXJpdHkgdG8gdGhlIGZvbGxvd2luZyBoeXBvdGhlc2VzOgoKIyMjI0h5cG90aGVzZXMgCjEpIE1hc3Mgc2hvb3RlcnMgd2l0aCBhIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MgbWlnaHQgaW5jcmVhc2UgdGhlIG51bWJlciBvZiBmYXRhbGl0aWVzIGluIGEgbWFzcyBzaG9vdGluZy4KMikgVGhlIG1vcmUgZ3VucyBhIG1hc3Mgc2hvb3RlciBpcyBlcXVpcHBlZCB3aXRoIHRoZSBtb3JlIGxpdmVzIHRoZXkgbWF5IHVsdGltYXRlbHkgdGFrZSBkdXJpbmcgYSBtYXNzIHNob290aW5nLgoKCiMjUGFja2FnZXMKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHNqbWlzYykKbGlicmFyeShaZWxpZ0Nob2ljZSkKbGlicmFyeShaZWxpZykKbGlicmFyeSh0ZXhyZWcpCmxpYnJhcnkodmlzcmVnKQpgYGAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIyNWYXJpYWJsZXMgJiBEYXRhIE1hbmFnZW1lbnQKCiogKip0b3RhbHZpY3RpbXMqKiAtIFRoaXMgdmFyaWFibGUgd2lsbCBiZSB0aGUgZGVwZW5kZW50IHZhcmlhYmxlLCBpdCBpcyBhIG1lYXN1cmVtZW50IG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgZmF0YWxpdGllcyBmb3IgZXZlcnkgaW5jaWRlbmNlIG9mIGEgbWFzcyBzaG9vdGluZy4KKyAqKm1lbnRhbGhpc3RvcnkqKiAtIFRoaXMgdmFyaWFibGUgbWVhc3VyZXMgd2hldGhlciBhIG1hc3Mgc2hvb3RlciBoYWQgYSByZXBvcnRlZCBvciBjb25maXJtZWQgaGlzdG9yeSBvZiBtZW50YWwgaWxsbmVzcywgIlllcyIgZm9yIGEgaGlzdG9yeSBvZiBtZW50YWwgaWxsbmVzcyBhbmQgIk5vIiBmb3Igbm8gaGlzdG9yeS4KKyAqKm1lbnRhbGlsbCoqIC0gQSByZWNvZGVkIDEsMCB2YXJpYWJsZSBvZiBoaXN0b3J5IG9mIG1lbnRhbCBpbGxuZXNzLCAxIGZvciAiWWVzIiBhbmQgMCBmb3IgIk5vIi4KKyAqKnRvdGFsZ3VucyoqIC0gVGhpcyB2YXJpYWJsZSBpcyBhIG1lYXN1cmVtZW50IG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgZ3VucyB1c2VkIGR1cmluZyBhIHBhcnRpY3VsYXIgc2hvb3RpbmcuCisgKip0b3RhbGd1bnMyKiogLSBBIHJlY29kZWQgdmFyaWFibGUgb2YgdG90YWwgbnVtYmVyIG9mIGd1bnMsIGluc3RlYWQgZ2VuZXJhdGVkIHRvIGJlIG9uIGEgc2NhbGUgZnJvbSAxIC0gNCsgKDQgb3IgbW9yZSBndW5zKS4KCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQptYXNzaG9vdCA8LSBkYXRhLmZyYW1lKHJlYWRfY3N2KCIvVXNlcnMvZXJuZXN0by9Eb2N1bWVudHMvQWR2YW5jZWQgQW5hbHl0aWNzL0RhdGEvTWFzc1Nob290aW5ncy5jc3YiKSkgJT4lCiAgcmVuYW1lKCJtZW50YWxoaXN0b3J5IiA9IEhpc3Rvcnkub2YuTWVudGFsLklsbG5lc3MuLi5HZW5lcmFsLAogICAgInRvdGFsdmljdGltcyIgPSBUb3RhbC5OdW1iZXIub2YuVmljdGltcywKICAgICAidG90YWxndW5zIiA9IFRvdGFsLk51bWJlci5vZi5HdW5zKSAlPiUKICBzZWxlY3QodG90YWx2aWN0aW1zLCBtZW50YWxoaXN0b3J5LCB0b3RhbGd1bnMpICU+JQogIGZpbHRlcighaXMubmEodG90YWx2aWN0aW1zKSwKICAgICAgICAgIWlzLm5hKG1lbnRhbGhpc3RvcnkpLAogICAgICAgICAhaXMubmEodG90YWxndW5zKSwgCiAgICAgICAgIXRvdGFsdmljdGltcyAlaW4lIGMoIlVua25vd24iKSwKICAgICAgICAhbWVudGFsaGlzdG9yeSAlaW4lIGMoIlVua25vd24iKSwKICAgICAgICAhdG90YWxndW5zICVpbiUgYygiVW5rbm93biIpKSAlPiUKICAgICAgIG11dGF0ZShtZW50YWxpbGw9YXMuZmFjdG9yKGlmZWxzZShtZW50YWxoaXN0b3J5PT0iWWVzIiwgMSwgMCkpLAogICAgICAgICAgICAgIHRvdGFsZ3Vucz1hcy5udW1lcmljKHRvdGFsZ3VucyksCiAgICAgICAgICAgICAgdG90YWxndW5zMj1hcy5mYWN0b3IoaWZlbHNlKHRvdGFsZ3Vuczw0LCB0b3RhbGd1bnMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvdGFsZ3Vucz49NCwgIjQrIiwibmEiKSkpKQogICAgICAgICAgICAgCnByaW50KG1hc3Nob290KQpgYGAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiMjUHJlbGltaW5hcnkgSW52ZXN0aWdhdGlvbiAtIERhdGEgT3ZlcnZpZXcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwojI01lbnRhbCBJbGxuZXNzIGFuZCBpdHMgUmVsYXRpb25zaGlwIFRvIEZhdGFsaXRpZXMKCmBgYHtyLCBmaWcuaGVpZ2h0PTEsIGZpZy53aWR0aD0xLjV9CnNob290IDwtIG1hc3Nob290ICU+JQpzZWxlY3QgKHRvdGFsdmljdGltcywgbWVudGFsaWxsLCB0b3RhbGd1bnMpICU+JQogIGdyb3VwX2J5KG1lbnRhbGlsbCkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHRvdGFsdmljdGltcykpCgpnZ3Bsb3QoZGF0YT1zaG9vdCkrCiAgZ2VvbV9jb2woYWVzKHg9bWVudGFsaWxsLCB5PW1lYW4pLCBmaWxsPSJkYXJrYmx1ZSIpKwogIHhsYWIoIk1lbnRhbGx5IElsbCBTaG9vdGVycyIpK3lsYWIoIkF2ZXJhZ2UgRmF0YWxpdGllcyIpCmBgYAoKVGhlIGRhdGEgaGVyZSB0ZWxscyB1cyB0aGF0IG1hc3Mgc2hvb3RlcnMgd2l0aCBhIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MgKDEpIHRlbmQgdG8ga2lsbCBtb3JlIHBlb3BsZSwgYWJvdXQgNiBtb3JlIHZpY3RpbXMsIHRoYW4gdGhvc2Ugd2hvIGhhZCBubyBwcmlvciBoaXN0b3J5IG9mIG1lbnRhbGwgaWxsbmVzcy4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIyNUb3RhbCBOdW1iZXIgb2YgR3VucyBhbmQgaXRzIFJlbGF0aW9uc2hpcCB0byBGYXRhbGl0aWVzCmBgYHtyLCBmaWcuaGVpZ2h0PTEsIGZpZy53aWR0aD0xLjUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnNob290MSA8LSBtYXNzaG9vdCAlPiUKICBzZWxlY3QgKHRvdGFsdmljdGltcywgbWVudGFsaWxsLCB0b3RhbGd1bnMyKSAlPiUKICBncm91cF9ieSh0b3RhbGd1bnMyKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4odG90YWx2aWN0aW1zKSkKCmdncGxvdChkYXRhPXNob290MSkrCiAgZ2VvbV9jb2woYWVzKHg9dG90YWxndW5zMiwgeT1tZWFuKSwgZmlsbD0iZGFya2JsdWUiKSsKICB4bGFiKCJOdW1iZXIgb2YgR3VucyBVc2VkIikreWxhYigiQXZlcmFnZSBGYXRhbGl0aWVzIikKYGBgCgpUaGUgZGF0YSBhbHNvIHJldmVhbHMgYSBzdGVhZHkgaW5jcmVhc2UgaW4gYXZlcmFnZSBudW1iZXIgb2YgZGVhdGhzIGFmdGVyIGEgbWFzcyBzaG9vdGluZyBhcyB0aGUgbnVtYmVyIG9mIGd1bnMgdXNlZCBkdXJpbmcgdGhlIGluY2lkZW50IGFsc28gaW5jcmVhc2VzLiBOdW1iZXIgb2YgZmF0YWxpdGllcyBzdGVhZGlseSBpbmNyZWFzZXMgYnkgNSBvciBzbyBkZWF0aHMgZm9yIGVhY2ggYWRkaXRpb25hbCBndW4gdXNlZC4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwojIyNXaHkgQSBHYW1tYSBSZWdyZXNzaW9uPwoKV2hlbiBwbG90dGluZyBvdXIgZGVwZW5kZW50IHZhcmlhYmxlLCB0b3RhbCBudW1iZXIgb2YgZmF0YWxpdGllcyBhZnRlciBhIG1hc3Mgc2hvb3RpbmcsIHRoZSByZWFzb25pbmcgZm9yIGNob29zaW5nIHRvIGFuYWx5emUgd2l0aCBhIGdhbW1hIHJlZ3Jlc3Npb24gaXMgdmVyaWZpZWQuIEFsbCB2YWx1ZXMgYXJlIGFsd2F5cyBwb3NpdGl2ZSwgbmV2ZXIgcmVhY2ggemVybywgYW5kIHdlIHNlZSBhIGNsZWFyIGRyYW1hdGljIGluY3JlYXNlLCB3aXRoIG1vc3QgbWFzcyBzaG9vdGluZ3MgcmVzdWx0aW5nIGluIDEwIG9yIGxlc3MgZmF0YWxpdGllcywgYW5kIGEgc2hhcnAgZGVjcmVhc2UgaW4gY291bnQgc2hvcnRseSBhZnRlciBhcyB0aGUgdG90YWwgbnVtYmVyIG9mIGRlYXRocyBpbmNyZWFzZXMuIFRoZXJlIGlzIGFsc28gbm8gY2Vuc29yaW5nIGJlY2F1c2UgYWxsIHZhbHVlcyBoYXZlIG9jY3VycmVkIGFuZCBhcmUga25vd24gYW5kIGV2ZW50dWFsbHkgY29tZSB0byBhbiBlbmQuCgpgYGB7ciwgZmlnLmhlaWdodD0xLCBmaWcud2lkdGg9MS41LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpnZ3Bsb3QobWFzc2hvb3QpICsgZ2VvbV9oaXN0b2dyYW0oYWVzKHg9dG90YWx2aWN0aW1zKSwgZmlsbD0iZGFya2JsdWUiKSsKICB4bGFiKCJUb3RhbCBEZWF0aHMiKQpgYGAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwojI0dhbW1hIFJlZ3Jlc3Npb24gTW9kZWwKCmBgYHtyfQp6Lm91dCA8LSB6ZWxpZyh0b3RhbHZpY3RpbXMgfiBtZW50YWxpbGwgKyB0b3RhbGd1bnMyLCBtb2RlbD0iZ2FtbWEiLCBkYXRhPW1hc3Nob290LCBjaXRlPUYpCm9wdGlvbnMoc2NpcGVuPTk5OSkKc3VtbWFyeSh6Lm91dCkKYGBgCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwojI0NvdW50ZXJmYWN0dWFscyBhbmQgU2ltdWxhdGlvbnMKCiMjI01lbnRhbGwgSWxsbmVzcyBhbmQgRmF0YWxpdGllcwoKVGhlIHJlc3VsdHMgY2xlYXJseSBpbmRpY2F0ZSB0aGF0IG1hc3Mgc2hvb3RlcnMgd2l0aCBhIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MgdGVuZCB0byBraWxsIDIgbW9yZSB2aWN0aW1zIHRoYW4gdGhvc2Ugd2l0aCBubyBoaXN0b3J5LiBVbHRpbWF0ZWx5LCBtYXNzIHNob290ZXJzIHdpdGggYSBoaXN0b3J5IG9mIG1lbnRhbCBpbGxuZXNzIGFyZSBtb3JlIGxpa2VseSB0byBraWxsIG1vcmUgcGVvcGxlIHRoYW4gc2hvb3RlcnMgd2hvIGhhdmUgbm8gcHJpb3IgaGlzdG9yeSBvZiBtZW50YWwgaWxsbmVzcy4KCmBgYHtyfQp4Lm5vaWxsIDwtIHNldHgoei5vdXQsIG1lbnRhbGlsbCA9IDApCngueWVzaWxsIDwtIHNldHgoei5vdXQsIG1lbnRhbGlsbCA9IDEpCnMub3V0IDwtIHNpbSh6Lm91dCwgeD14Lm5vaWxsLCB4MT14Lnllc2lsbCkKc3VtbWFyeShzLm91dCkKYGBgCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiMjUGxvdHRpbmcgTWVudGFsIElsbG5lc3MgJiBGYXRhbGl0aWVzCgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdChzLm91dCkKYGBgCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiMjIFNpbXVsYXRpb24sIFRvdGFsIE51bWJlciBvZiBHdW5zICYgRmF0YWxpdGllcwoKVGhlIHJlc3VsdHMgb2YgdGhlIHNpbXVsYXRpb24gc2hvd3MgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIG51bWJlciBvZiBmYXRhbGl0aWVzIGFmdGVyIGEgbWFzcyBzaG9vdGluZywgYWJvdXQgMjAgZGVhdGhzLCB3aGVuIHRoZSB0b3RhbCBudW1iZXIgb2YgZ3VucyB1c2VkIGlzIDQgb3IgbW9yZSBjb21wYXJlZCB0byAxLiBJdCBzZWVtcyB0aGF0IHRoZSBtb3JlIGd1bnMgdXNlZCBieSBhIHNob290ZXIgcmVzdWx0cyBpbiBhbiBpbmNyZWFzZSBpbiB0aGUgbnVtYmVyIG9mIHZpY3RpbXMga2lsbGVkLgoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CngubG9ndW4gPC0gc2V0eCh6Lm91dCwgdG90YWxndW5zMiA9IDEpCnguaGlndW4gPC0gc2V0eCh6Lm91dCwgdG90YWxndW5zMiA9ICI0KyIpCnMgPC0gc2ltKHoub3V0LCB4PXgubG9ndW4sIHgxPXguaGlndW4pCnN1bW1hcnkocykKYGBgCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIyNQbG90dGluZyBUb3RhbCBOdW1iZXIgb2YgR3VucyAmIEZhdGFsaXRpZXMKYGBge3J9CnBsb3QocykKYGBgCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIyNBbmFseXNpcwoKVGhlIG1vZGVsZWQgcmVzdWx0cyBjb25maXJtIHByZXZpb3VzIGh5cG90aGVzZXMuIEluZGVlZCwgdGhlIG1vZGVsIGFuZCBzaW11bGF0aW9ucyBzaG93IHRoYXQ6CgoqIE1hc3Mgc2hvb3RlcnMgd2l0aCBhIHByaW9yIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MgYXJlIG1vcmUgbGlrZWx5IHRvIGNvbW1pdCBzbGlnaHRseSBtb3JlIGZhdGFsaXRpZXMgdGhhbiBzaG9vdGVycyB3aXRoIG5vIGhpc3RvcnkuCisgVGhlIG1vcmUgZ3VucyB1c2VkIGR1cmluZyBhIG1hc3Mgc2hvb3RpbmcgdGhlIG1vcmUgbGlrZWx5IGl0IGlzIHRoYXQgYSBoaWdoZXIgaW5jaWRlbmNlIG9mIGZhdGFsaXRpZXMgd2lsbCBvY2N1ci4KClRoZXNlIGZpbmRpbmdzIGFyZSBpbnRlcmVzdGluZywgcGFydGljdWxhcmx5IGJlY2F1c2Ugb2Ygd2hhdCBpdCBzdWdnZXN0cyBhYm91dCBtYXNzIHNob290ZXJzIGFuZCBtZW50YWwgaGVhbHRoLCBhcyB3ZWxsIGFzIHRoZSBkYW5nZXJzIG9mIGxhY2sgb2YgcHJvcGVyIGd1biBjb250cm9sLgoKCg==