Neonicotinoids
Background
Neonicotinoids, often referred to as “neonics”, are a class of
synthetic, neurotoxic insecticides that are widely used on agricultural
crops, lawns, gardens, and in pet treatments. They work by permanently
binding to the nerve cells of insects, overstimulating and destroying
them. However, their impact extends beyond the targeted pests. Studies
have shown that neonicotinoids can have acute and sub-lethal effects on
honey bees, including limited reproductive rates, impaired foraging
abilities, increased susceptibility to disease, and decreased learning
abilities. Chronic exposure to neonicotinoids has been linked to
significant harm to honey bee colonies, particularly during colder
winters. This exposure can lead to Colony Collapse Disorder (CCD), a
phenomenon where bees abandon their hives over the winter and eventually
die. The decline in honey bee populations due to neonicotinoids poses a
serious threat to ecosystem health and food security, given the crucial
role bees play as pollinators.
Citations: Effects of Neonicotinoids
on Humans and Bees - NRDC.ORG
Data Source
Honey Bees and Neonicotinoids Pesticides
From USDA Data:
-
numcol: Number of honey producing colonies. Honey producing colonies are
the maximum number of colonies from which honey was taken during the
year. It is possible to take honey from colonies which did not survive
the entire year
-
yieldpercol: Honey yield per colony. Unit is pounds
-
totalprod: Total production (numcol x yieldpercol). Unit is pounds
-
stocks: Refers to stocks held by producers. Unit is pounds
-
priceperlb: Refers to average price per pound based on expanded sales.
Unit is dollars.
-
prodvalue: Value of production (totalprod x priceperlb). Unit is
dollars.
From USGS Data:
-
nCLOTHIANIDIN: The amount in kg of Clothianidin applied
-
nIMIDACLOPRID: The amount in kg of Imidacloprid applied
-
nTHIAMETHOXAM: The amount in kg of Thiamethoxam applied
-
nACETAMIPRID: The amount in kg of Acetamiprid applied
-
nTHIACLOPRID: The amount in kg of Thiacloprid applied
-
nAllNeonic: The amount in kg of all Neonics applied = (nCLOTHIANIDIN +
nIMIDACLOPRID + nTHIAMETHOXAM + nACETAMIPRID + nTHIACLOPRID)
Dataset is missing all values for New Hampshire, Massachusetts,
Connecticut, and Rhode Island. Data set is also missing values for
Maryland, Delaware, South Carolina, Oklahoma, Nevada, and New Mexico for
select years.
#import data
beeData <- na.omit(read.csv("https://tkelleman.github.io/tkweb/Week10/vHoneyNeonic_v02.csv"))
#Create column lowNeonic showing "low" for if values in nAllNeonic is less than 1000, between 1000-10,000 as "moderate", and greater than 10,000 as "high"
beeData <- beeData %>%
mutate(catNeonic = case_when(
nAllNeonic < 1000 ~ "low",
nAllNeonic >= 1000 & nAllNeonic <= 10000 ~ "moderate",
nAllNeonic > 10000 ~ "high"
))
summary(beeData)
state numcol yieldpercol totalprod
Length:761 Min. : 2000 Min. : 19.00 Min. : 84000
Class :character 1st Qu.: 9000 1st Qu.: 46.00 1st Qu.: 462000
Mode :character Median : 27000 Median : 57.00 Median : 1581000
Mean : 62858 Mean : 59.72 Mean : 4226796
3rd Qu.: 65000 3rd Qu.: 70.00 3rd Qu.: 4200000
Max. :510000 Max. :128.00 Max. :46410000
stocks priceperlb prodvalue year
Min. : 8000 Min. :0.490 Min. : 162000 Min. :1998
1st Qu.: 121000 1st Qu.:1.040 1st Qu.: 892000 1st Qu.:2002
Median : 433000 Median :1.470 Median : 2122000 Median :2007
Mean : 1289880 Mean :1.689 Mean : 5576555 Mean :2007
3rd Qu.: 1436000 3rd Qu.:2.040 3rd Qu.: 5599000 3rd Qu.:2011
Max. :13800000 Max. :7.090 Max. :83859000 Max. :2016
StateName Region nCLOTHIANIDIN nIMIDACLOPRID
Length:761 Length:761 Min. : 0.0 Min. : 3.2
Class :character Class :character 1st Qu.: 0.0 1st Qu.: 937.5
Mode :character Mode :character Median : 336.7 Median : 3698.9
Mean : 10890.9 Mean : 10019.4
3rd Qu.: 6569.3 3rd Qu.: 10588.6
Max. :278498.8 Max. :150569.3
nTHIAMETHOXAM nACETAMIPRID nTHIACLOPRID nAllNeonic
Min. : 0.0 Min. : 0.0 Min. : 0.0 Min. : 3.2
1st Qu.: 29.7 1st Qu.: 0.0 1st Qu.: 0.0 1st Qu.: 1631.8
Median : 1156.3 Median : 16.0 Median : 0.0 Median : 8402.1
Mean : 6225.1 Mean : 729.0 Mean : 120.5 Mean : 27984.9
3rd Qu.: 7777.0 3rd Qu.: 349.1 3rd Qu.: 0.0 3rd Qu.: 33508.2
Max. :64834.6 Max. :36480.3 Max. :4273.2 Max. :403011.6
catNeonic
Length:761
Class :character
Mode :character
#Save data as CSV file
write.csv(beeData, "beeDataUpdated.csv", row.names = FALSE)
Data Summary
Minimal data manipulation was performed. Incomplete observations were
removed using the na.omit and a new column (catNeonic) was genertated
categorizing the nAllNeonic values into “low” (less than 1000),
“moderate” (between 1000 and 10000, inclusive), and “high” (greater than
10000). The final dataset included 761 observations of 17 variables.
Conclusions from
Tableau Dashboard
Using the Filter - State Name in the bottom right corner users can
select all, one, or multiple states to filter charts. General trends
visible in the data are a steady increase in neonicotinoid usage until
~2014 and a sudden drop in usage, due to Federal regulation changes.
There is a wide variety in usage of all neonicotinoids by state as shown
in the map with some states adopting this policy earlier than others.
More recent data points could shed light on the economic impact of
decreased use of these pesticides. Data like this drives EPA policy on
best practices for agriculture to reduce the harm to native species
while maintaining crop yields.
LS0tDQp0aXRsZTogIldlZWsgMTAgLSBUYWJsZWF1IERhc2hib2FyZHMiDQphdXRob3I6ICJUaW0gS2VsbGVtYW4iDQpkYXRlOiAiMjAyNC0wNC0zIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICB0b2M6IG5vDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBmaWdfd2lkdGg6IDgNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgdGhlbWU6IHJlYWRhYmxlDQogICANCiAgcGRmX2RvY3VtZW50OiANCiAgICB0b2M6IG5vDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgZmlnX3dpZHRoOiA1DQogICAgZmlnX2hlaWdodDogNA0KLS0tDQoNCmBgYHs9aHRtbH0NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoNCmRpdiNUT0MgbGkgew0KICAgIGxpc3Qtc3R5bGU6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOmxpZ2h0Z3JheTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7DQogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQogICAgY29sb3I6ICM3ODBjMGM7DQp9DQoNCi8qIG1vdXNlIG92ZXIgbGluayAqLw0KZGl2I1RPQyBhOmhvdmVyIHsNCiAgY29sb3I6IHJlZDsNCn0NCg0KLyogdW52aXNpdGVkIGxpbmsgKi8NCmRpdiNUT0MgYTpsaW5rIHsNCiAgY29sb3I6IGJsdWU7DQp9DQoNCmgxLnRpdGxlIHsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBjb2xvcjogRGFya2JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQogIGZvbnQtdmFyaWFudC1jYXBzOiBub3JtYWw7DQp9DQpoNC5hdXRob3IgeyANCiAgICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuZGF0ZSB7IA0KICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmgxIHsNCiAgICBmb250LXNpemU6IDI0cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDIgew0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoMyB7IA0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi8qIHVudmlzaXRlZCBsaW5rICovDQphOmxpbmsgew0KICBjb2xvcjogZ3JlZW47DQp9DQoNCi8qIHZpc2l0ZWQgbGluayAqLw0KYTp2aXNpdGVkIHsNCiAgY29sb3I6IGdyZWVuOw0KfQ0KDQovKiBtb3VzZSBvdmVyIGxpbmsgKi8NCmE6aG92ZXIgew0KICBjb2xvcjogcmVkOw0KfQ0KDQovKiBzZWxlY3RlZCBsaW5rICovDQphOmFjdGl2ZSB7DQogIGNvbG9yOiB5ZWxsb3c7DQp9DQo8L3N0eWxlPg0KYGBgDQotLS0NCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IA0KIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuDQpvcHRpb25zKHJlcG9zID0gbGlzdChDUkFOPSJodHRwOi8vY3Jhbi5yc3R1ZGlvLmNvbS8iKSkNCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCmlmICghcmVxdWlyZSgia25pdHIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KICAgbGlicmFyeShrbml0cikNCn0NCmlmICghcmVxdWlyZSgiY293cGxvdCIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJjb3dwbG90IikNCiAgIGxpYnJhcnkoY293cGxvdCkNCn0NCmlmICghcmVxdWlyZSgibGF0ZXgyZXhwIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImxhdGV4MmV4cCIpDQogICBsaWJyYXJ5KGxhdGV4MmV4cCkNCn0NCmlmICghcmVxdWlyZSgicGxvdGx5IikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpDQogICBsaWJyYXJ5KHBsb3RseSkNCn0NCmlmICghcmVxdWlyZSgiZ2FwbWluZGVyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImdhcG1pbmRlciIpDQogICBsaWJyYXJ5KGdhcG1pbmRlcikNCn0NCmlmICghcmVxdWlyZSgicG5nIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJwbmciKSAgICAgICAgICAgICAjIEluc3RhbGwgcG5nIHBhY2thZ2UNCiAgICBsaWJyYXJ5KCJwbmciKQ0KfQ0KaWYgKCFyZXF1aXJlKCJSQ3VybCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiUkN1cmwiKSAgICAgICAgICAgIyBJbnN0YWxsIFJDdXJsIHBhY2thZ2UNCiAgICBsaWJyYXJ5KCJSQ3VybCIpDQp9DQppZiAoIXJlcXVpcmUoImNvbG91cnBpY2tlciIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiY29sb3VycGlja2VyIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImNvbG91cnBpY2tlciIpDQp9DQppZiAoIXJlcXVpcmUoImdpZnNraSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2lmc2tpIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdpZnNraSIpDQp9DQppZiAoIXJlcXVpcmUoIm1hZ2ljayIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibWFnaWNrIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoIm1hZ2ljayIpDQp9DQppZiAoIXJlcXVpcmUoImdyRGV2aWNlcyIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ3JEZXZpY2VzIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdyRGV2aWNlcyIpDQp9DQojIyMgZ2dwbG90IGFuZCBleHRlbnNpb25zDQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2dwbG90MiIpDQp9DQppZiAoIXJlcXVpcmUoImdnYW5pbWF0ZSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2dhbmltYXRlIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImdnYW5pbWF0ZSIpDQp9DQppZiAoIXJlcXVpcmUoImdncmlkZ2VzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3JpZGdlcyIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJnZ3JpZGdlcyIpDQp9DQppZiAoIXJlcXVpcmUoImdyYXBoaWNzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJncmFwaGljcyIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJncmFwaGljcyIpDQp9DQppZiAoIXJlcXVpcmUoImRwbHlyIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJkcGx5ciIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJkcGx5ciIpDQp9DQppZiAoIXJlcXVpcmUoImx1YnJpZGF0ZSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibHVicmlkYXRlIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImx1YnJpZGF0ZSIpDQp9DQppZiAoIXJlcXVpcmUoInRtYXAiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInRtYXAiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgidG1hcCIpDQp9DQppZiAoIXJlcXVpcmUoInNmIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJzZiIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJzZiIpDQp9DQoNCmlmICghcmVxdWlyZSgibGVhZmxldCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZmxldCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJsZWFmbGV0IikNCn0NCmlmICghcmVxdWlyZSgibGVhZnBvcCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZnBvcCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJsZWFmcG9wIikNCn0NCmlmICghcmVxdWlyZSgiaHRtbHRvb2xzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJodG1sdG9vbHMiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiaHRtbHRvb2xzIikNCn0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgDQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVFJVRSwgICANCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BKQ0KYGBgDQojIE5lb25pY290aW5vaWRzIEJhY2tncm91bmQNCk5lb25pY290aW5vaWRzLCBvZnRlbiByZWZlcnJlZCB0byBhcyDigJxuZW9uaWNz4oCdLCBhcmUgYSBjbGFzcyBvZiBzeW50aGV0aWMsIG5ldXJvdG94aWMgaW5zZWN0aWNpZGVzIHRoYXQgYXJlIHdpZGVseSB1c2VkIG9uIGFncmljdWx0dXJhbCBjcm9wcywgbGF3bnMsIGdhcmRlbnMsIGFuZCBpbiBwZXQgdHJlYXRtZW50cy4gVGhleSB3b3JrIGJ5IHBlcm1hbmVudGx5IGJpbmRpbmcgdG8gdGhlIG5lcnZlIGNlbGxzIG9mIGluc2VjdHMsIG92ZXJzdGltdWxhdGluZyBhbmQgZGVzdHJveWluZyB0aGVtLiBIb3dldmVyLCB0aGVpciBpbXBhY3QgZXh0ZW5kcyBiZXlvbmQgdGhlIHRhcmdldGVkIHBlc3RzLiBTdHVkaWVzIGhhdmUgc2hvd24gdGhhdCBuZW9uaWNvdGlub2lkcyBjYW4gaGF2ZSBhY3V0ZSBhbmQgc3ViLWxldGhhbCBlZmZlY3RzIG9uIGhvbmV5IGJlZXMsIGluY2x1ZGluZyBsaW1pdGVkIHJlcHJvZHVjdGl2ZSByYXRlcywgaW1wYWlyZWQgZm9yYWdpbmcgYWJpbGl0aWVzLCBpbmNyZWFzZWQgc3VzY2VwdGliaWxpdHkgdG8gZGlzZWFzZSwgYW5kIGRlY3JlYXNlZCBsZWFybmluZyBhYmlsaXRpZXMuIENocm9uaWMgZXhwb3N1cmUgdG8gbmVvbmljb3Rpbm9pZHMgaGFzIGJlZW4gbGlua2VkIHRvIHNpZ25pZmljYW50IGhhcm0gdG8gaG9uZXkgYmVlIGNvbG9uaWVzLCBwYXJ0aWN1bGFybHkgZHVyaW5nIGNvbGRlciB3aW50ZXJzLiBUaGlzIGV4cG9zdXJlIGNhbiBsZWFkIHRvIENvbG9ueSBDb2xsYXBzZSBEaXNvcmRlciAoQ0NEKSwgYSBwaGVub21lbm9uIHdoZXJlIGJlZXMgYWJhbmRvbiB0aGVpciBoaXZlcyBvdmVyIHRoZSB3aW50ZXIgYW5kIGV2ZW50dWFsbHkgZGllLiBUaGUgZGVjbGluZSBpbiBob25leSBiZWUgcG9wdWxhdGlvbnMgZHVlIHRvIG5lb25pY290aW5vaWRzIHBvc2VzIGEgc2VyaW91cyB0aHJlYXQgdG8gZWNvc3lzdGVtIGhlYWx0aCBhbmQgZm9vZCBzZWN1cml0eSwgZ2l2ZW4gdGhlIGNydWNpYWwgcm9sZSBiZWVzIHBsYXkgYXMgcG9sbGluYXRvcnMuDQo8YnI+DQpDaXRhdGlvbnM6IEVmZmVjdHMgb2YgTmVvbmljb3Rpbm9pZHMgb24gSHVtYW5zIGFuZCBCZWVzIC0gTlJEQy5PUkcNCg0KIyBEYXRhIFNvdXJjZQ0KSG9uZXkgQmVlcyBhbmQgTmVvbmljb3Rpbm9pZHMgUGVzdGljaWRlcyANCjx1bD4NCjxsaT5LYWdnbGUgTGluazogaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9kYXRhc2V0cy9rZXZpbnptaXRoL2hvbmV5LXdpdGgtbmVvbmljLXBlc3RpY2lkZS9kYXRhDQo8bGk+T3JpZ2luYWwgRGF0YTogQ29sbGVjdGVkIGJ5IFVTREEgYW5kIFVTR0ENCjwvdWw+DQoNCkZyb20gVVNEQSBEYXRhOiA8YnI+DQo8dWw+DQogIDxsaT5udW1jb2w6IE51bWJlciBvZiBob25leSBwcm9kdWNpbmcgY29sb25pZXMuIEhvbmV5IHByb2R1Y2luZyBjb2xvbmllcyBhcmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbG9uaWVzIGZyb20gd2hpY2ggaG9uZXkgd2FzIHRha2VuIGR1cmluZyB0aGUgeWVhci4gSXQgaXMgcG9zc2libGUgdG8gdGFrZSBob25leSBmcm9tIGNvbG9uaWVzIHdoaWNoIGRpZCBub3Qgc3Vydml2ZSB0aGUgZW50aXJlIHllYXIgPGJyPg0KICA8bGk+eWllbGRwZXJjb2w6IEhvbmV5IHlpZWxkIHBlciBjb2xvbnkuIFVuaXQgaXMgcG91bmRzIDxicj4NCiAgPGxpPnRvdGFscHJvZDogVG90YWwgcHJvZHVjdGlvbiAobnVtY29sIHggeWllbGRwZXJjb2wpLiBVbml0IGlzIHBvdW5kcyA8YnI+DQogIDxsaT5zdG9ja3M6IFJlZmVycyB0byBzdG9ja3MgaGVsZCBieSBwcm9kdWNlcnMuIFVuaXQgaXMgcG91bmRzIDxicj4NCiAgPGxpPnByaWNlcGVybGI6IFJlZmVycyB0byBhdmVyYWdlIHByaWNlIHBlciBwb3VuZCBiYXNlZCBvbiBleHBhbmRlZCBzYWxlcy4gVW5pdCBpcyBkb2xsYXJzLiA8YnI+DQogIDxsaT5wcm9kdmFsdWU6IFZhbHVlIG9mIHByb2R1Y3Rpb24gKHRvdGFscHJvZCB4IHByaWNlcGVybGIpLiBVbml0IGlzIGRvbGxhcnMuIDxicj4NCiAgICA8YnI+DQogPC91bD4NCkZyb20gVVNHUyBEYXRhOiA8YnI+DQo8dWw+DQogIDxsaT5uQ0xPVEhJQU5JRElOOiBUaGUgYW1vdW50IGluIGtnIG9mIENsb3RoaWFuaWRpbiBhcHBsaWVkIDxicj4NCiAgPGxpPm5JTUlEQUNMT1BSSUQ6IFRoZSBhbW91bnQgaW4ga2cgb2YgSW1pZGFjbG9wcmlkIGFwcGxpZWQgPGJyPg0KICA8bGk+blRISUFNRVRIT1hBTTogVGhlIGFtb3VudCBpbiBrZyBvZiBUaGlhbWV0aG94YW0gYXBwbGllZCA8YnI+DQogIDxsaT5uQUNFVEFNSVBSSUQ6IFRoZSBhbW91bnQgaW4ga2cgb2YgQWNldGFtaXByaWQgYXBwbGllZCA8YnI+DQogIDxsaT5uVEhJQUNMT1BSSUQ6IFRoZSBhbW91bnQgaW4ga2cgb2YgVGhpYWNsb3ByaWQgYXBwbGllZCA8YnI+DQogIDxsaT5uQWxsTmVvbmljOiBUaGUgYW1vdW50IGluIGtnIG9mIGFsbCBOZW9uaWNzIGFwcGxpZWQgPSAobkNMT1RISUFOSURJTiArIG5JTUlEQUNMT1BSSUQgKyBuVEhJQU1FVEhPWEFNICsgbkFDRVRBTUlQUklEICsgblRISUFDTE9QUklEKSA8YnI+DQo8L3VsPg0KRGF0YXNldCBpcyBtaXNzaW5nIGFsbCB2YWx1ZXMgZm9yIE5ldyBIYW1wc2hpcmUsIE1hc3NhY2h1c2V0dHMsIENvbm5lY3RpY3V0LCBhbmQgUmhvZGUgSXNsYW5kLiBEYXRhIHNldCBpcyBhbHNvIG1pc3NpbmcgdmFsdWVzIGZvciBNYXJ5bGFuZCwgRGVsYXdhcmUsIFNvdXRoIENhcm9saW5hLCBPa2xhaG9tYSwgTmV2YWRhLCBhbmQgTmV3IE1leGljbyBmb3Igc2VsZWN0IHllYXJzLg0KYGBge3IgZXZhbD1UUlVFfQ0KDQojaW1wb3J0IGRhdGENCmJlZURhdGEgPC0gbmEub21pdChyZWFkLmNzdigiaHR0cHM6Ly90a2VsbGVtYW4uZ2l0aHViLmlvL3Rrd2ViL1dlZWsxMC92SG9uZXlOZW9uaWNfdjAyLmNzdiIpKQ0KDQojQ3JlYXRlIGNvbHVtbiBsb3dOZW9uaWMgc2hvd2luZyAibG93IiBmb3IgaWYgdmFsdWVzIGluIG5BbGxOZW9uaWMgaXMgbGVzcyB0aGFuIDEwMDAsIGJldHdlZW4gMTAwMC0xMCwwMDAgYXMgIm1vZGVyYXRlIiwgYW5kIGdyZWF0ZXIgdGhhbiAxMCwwMDAgYXMgICJoaWdoIg0KYmVlRGF0YSA8LSBiZWVEYXRhICU+JQ0KICBtdXRhdGUoY2F0TmVvbmljID0gY2FzZV93aGVuKA0KICAgIG5BbGxOZW9uaWMgPCAxMDAwIH4gImxvdyIsDQogICAgbkFsbE5lb25pYyA+PSAxMDAwICYgbkFsbE5lb25pYyA8PSAxMDAwMCB+ICJtb2RlcmF0ZSIsDQogICAgbkFsbE5lb25pYyA+IDEwMDAwIH4gImhpZ2giDQogICkpDQoNCnN1bW1hcnkoYmVlRGF0YSkNCg0KI1NhdmUgZGF0YSBhcyBDU1YgZmlsZQ0Kd3JpdGUuY3N2KGJlZURhdGEsICJiZWVEYXRhVXBkYXRlZC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCmBgYA0KIyBEYXRhIFN1bW1hcnkNCk1pbmltYWwgZGF0YSBtYW5pcHVsYXRpb24gd2FzIHBlcmZvcm1lZC4gSW5jb21wbGV0ZSBvYnNlcnZhdGlvbnMgd2VyZSByZW1vdmVkIHVzaW5nIHRoZSBuYS5vbWl0IGFuZCBhIG5ldyBjb2x1bW4gKGNhdE5lb25pYykgd2FzIGdlbmVydGF0ZWQgY2F0ZWdvcml6aW5nIHRoZSBuQWxsTmVvbmljIHZhbHVlcyBpbnRvIOKAnGxvd+KAnSAobGVzcyB0aGFuIDEwMDApLCDigJxtb2RlcmF0ZeKAnSAoYmV0d2VlbiAxMDAwIGFuZCAxMDAwMCwgaW5jbHVzaXZlKSwgYW5kIOKAnGhpZ2jigJ0gKGdyZWF0ZXIgdGhhbiAxMDAwMCkuIFRoZSBmaW5hbCBkYXRhc2V0IGluY2x1ZGVkIDc2MSBvYnNlcnZhdGlvbnMgb2YgMTcgdmFyaWFibGVzLiANCg0KIyBUYWJsZWF1IERhc2hib2FyZA0KPHRhYmxlIGJvcmRlciA9IDAgYm9yZGVyY29sb3I9ImJsYWNrIiBiZ2NvbG9yPScjZjZmNmY2JyAgd2lkdGg9MTAwJSAgYWxpZ24gPSBjZW50ZXI+DQo8dHI+DQo8dGQ+DQo8ZGl2IGNsYXNzPSd0YWJsZWF1UGxhY2Vob2xkZXInIGlkPSd2aXoxNzEyNzk4NzI3NTcyJyBzdHlsZT0ncG9zaXRpb246IHJlbGF0aXZlJz4NCjxub3NjcmlwdD4NCjxhIGhyZWY9JyMnPjxpbWcgYWx0PSdEYXNoYm9hcmQgMSAnIHNyYz0naHR0cHM6JiM0NzsmIzQ3O3B1YmxpYy50YWJsZWF1LmNvbSYjNDc7c3RhdGljJiM0NztpbWFnZXMmIzQ3O1dlJiM0NztXZWVrMTAtVF9LZWxsZW1hbiYjNDc7RGFzaGJvYXJkMSYjNDc7MV9yc3MucG5nJyBzdHlsZT0nYm9yZGVyOiBub25lJyAvPjwvYT4NCjwvbm9zY3JpcHQ+DQo8b2JqZWN0IGNsYXNzPSd0YWJsZWF1Vml6JyAgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPg0KPHBhcmFtIG5hbWU9J2hvc3RfdXJsJyB2YWx1ZT0naHR0cHMlM0ElMkYlMkZwdWJsaWMudGFibGVhdS5jb20lMkYnIC8+IA0KPHBhcmFtIG5hbWU9J2VtYmVkX2NvZGVfdmVyc2lvbicgdmFsdWU9JzMnIC8+IA0KPHBhcmFtIG5hbWU9J3BhdGgnIHZhbHVlPSd2aWV3cyYjNDc7V2VlazEwLVRfS2VsbGVtYW4mIzQ3O0Rhc2hib2FyZDE/Omxhbmd1YWdlPWVuLVVTJmFtcDs6ZW1iZWQ9dHJ1ZSZhbXA7cHVibGlzaD15ZXMmYW1wOzpzaWQ9JyAvPiANCjxwYXJhbSBuYW1lPSd0b29sYmFyJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdzdGF0aWNfaW1hZ2UnIHZhbHVlPSdodHRwczomIzQ3OyYjNDc7cHVibGljLnRhYmxlYXUuY29tJiM0NztzdGF0aWMmIzQ3O2ltYWdlcyYjNDc7V2UmIzQ3O1dlZWsxMC1UX0tlbGxlbWFuJiM0NztEYXNoYm9hcmQxJiM0NzsxLnBuZycgLz4gDQo8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X3N0YXRpY19pbWFnZScgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9zcGlubmVyJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfb3ZlcmxheScgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9jb3VudCcgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdsYW5ndWFnZScgdmFsdWU9J2VuLVVTJyAvPg0KPHBhcmFtIG5hbWU9J2ZpbHRlcicgdmFsdWU9J3B1Ymxpc2g9eWVzJyAvPg0KPC9vYmplY3Q+PC9kaXY+ICAgICAgICAgICAgICAgIA0KDQo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+ICAgICAgICAgICAgICAgICAgICANCnZhciBkaXZFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpejE3MTI3OTg3Mjc1NzInKTsgICAgICAgICAgICAgICAgICAgIA0KdmFyIHZpekVsZW1lbnQgPSBkaXZFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXTsgICAgICAgICAgICAgICAgICAgIA0Kdml6RWxlbWVudC5zdHlsZS5taW5XaWR0aD0nMTEyMHB4JzsNCnZpekVsZW1lbnQuc3R5bGUubWF4V2lkdGg9JzE0MjBweCc7DQp2aXpFbGVtZW50LnN0eWxlLndpZHRoPScxMDAlJzsNCnZpekVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSc1ODdweCc7DQp2aXpFbGVtZW50LnN0eWxlLm1heEhlaWdodD0nODg3cHgnOw0Kdml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9KGRpdkVsZW1lbnQub2Zmc2V0V2lkdGgqMC43NSkrJ3B4JzsgICAgICAgICAgICAgICAgICAgIA0KdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgICAgICAgICAgICAgICAgICAgIA0Kc2NyaXB0RWxlbWVudC5zcmMgPSAnaHR0cHM6Ly9wdWJsaWMudGFibGVhdS5jb20vamF2YXNjcmlwdHMvYXBpL3Zpel92MS5qcyc7ICAgICAgICAgICAgICAgICAgICANCnZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgDQo8L3NjcmlwdD4NCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KPGJyPg0KDQojIENvbmNsdXNpb25zIGZyb20gVGFibGVhdSBEYXNoYm9hcmQNClVzaW5nIHRoZSBGaWx0ZXIgLSBTdGF0ZSBOYW1lIGluIHRoZSBib3R0b20gcmlnaHQgY29ybmVyIHVzZXJzIGNhbiBzZWxlY3QgYWxsLCBvbmUsIG9yIG11bHRpcGxlIHN0YXRlcyB0byBmaWx0ZXIgY2hhcnRzLiBHZW5lcmFsIHRyZW5kcyB2aXNpYmxlIGluIHRoZSBkYXRhIGFyZSBhIHN0ZWFkeSBpbmNyZWFzZSBpbiBuZW9uaWNvdGlub2lkIHVzYWdlIHVudGlsIH4yMDE0IGFuZCBhIHN1ZGRlbiBkcm9wIGluIHVzYWdlLCBkdWUgdG8gRmVkZXJhbCByZWd1bGF0aW9uIGNoYW5nZXMuIFRoZXJlIGlzIGEgd2lkZSB2YXJpZXR5IGluIHVzYWdlIG9mIGFsbCBuZW9uaWNvdGlub2lkcyBieSBzdGF0ZSBhcyBzaG93biBpbiB0aGUgbWFwIHdpdGggc29tZSBzdGF0ZXMgYWRvcHRpbmcgdGhpcyBwb2xpY3kgZWFybGllciB0aGFuIG90aGVycy4gTW9yZSByZWNlbnQgZGF0YSBwb2ludHMgY291bGQgc2hlZCBsaWdodCBvbiB0aGUgZWNvbm9taWMgaW1wYWN0IG9mIGRlY3JlYXNlZCB1c2Ugb2YgdGhlc2UgcGVzdGljaWRlcy4gRGF0YSBsaWtlIHRoaXMgZHJpdmVzIEVQQSBwb2xpY3kgb24gYmVzdCBwcmFjdGljZXMgZm9yIGFncmljdWx0dXJlIHRvIHJlZHVjZSB0aGUgaGFybSB0byBuYXRpdmUgc3BlY2llcyB3aGlsZSBtYWludGFpbmluZyBjcm9wIHlpZWxkcy4NCg0KIyBTdG9yeWJvYXJkIFZlcnNpb24NCjx0YWJsZSBib3JkZXIgPSAwIGJvcmRlcmNvbG9yPSJibGFjayIgYmdjb2xvcj0nI2Y2ZjZmNicgIHdpZHRoPTEwMCUgIGFsaWduID0gY2VudGVyPg0KPHRyPg0KPHRkPg0KPGRpdiBjbGFzcz0ndGFibGVhdVBsYWNlaG9sZGVyJyBpZD0ndml6MTcxMjgwMjkzOTQ5Micgc3R5bGU9J3Bvc2l0aW9uOiByZWxhdGl2ZSc+DQo8bm9zY3JpcHQ+DQo8YSBocmVmPScjJz48aW1nIGFsdD0nTmVvbmljb3Rpbm9pZHMgUGVzdGljaWRlIFVzZSBpbiB0aGUgVVMgYW5kIGl0cyBJbXBhY3Qgb24gSW1wYWN0IG9uIEhvbmV5IFByb2R1Y3Rpb24gJyBzcmM9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztaTSYjNDc7Wk1SSjNXTVMyJiM0NzsxX3Jzcy5wbmcnIHN0eWxlPSdib3JkZXI6IG5vbmUnIC8+PC9hPg0KPC9ub3NjcmlwdD4NCjxvYmplY3QgY2xhc3M9J3RhYmxlYXVWaXonICBzdHlsZT0nZGlzcGxheTpub25lOyc+DQo8cGFyYW0gbmFtZT0naG9zdF91cmwnIHZhbHVlPSdodHRwcyUzQSUyRiUyRnB1YmxpYy50YWJsZWF1LmNvbSUyRicgLz4gDQo8cGFyYW0gbmFtZT0nZW1iZWRfY29kZV92ZXJzaW9uJyB2YWx1ZT0nMycgLz4gDQo8cGFyYW0gbmFtZT0ncGF0aCcgdmFsdWU9J3NoYXJlZCYjNDc7Wk1SSjNXTVMyJyAvPiANCjxwYXJhbSBuYW1lPSd0b29sYmFyJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J3N0YXRpY19pbWFnZScgdmFsdWU9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztaTSYjNDc7Wk1SSjNXTVMyJiM0NzsxLnBuZycgLz4gDQo8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X3N0YXRpY19pbWFnZScgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdkaXNwbGF5X3NwaW5uZXInIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0nZGlzcGxheV9vdmVybGF5JyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfY291bnQnIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0nbGFuZ3VhZ2UnIHZhbHVlPSdlbi1VUycgLz4NCjxwYXJhbSBuYW1lPSdmaWx0ZXInIHZhbHVlPSdwdWJsaXNoPXllcycgLz4NCjwvb2JqZWN0PjwvZGl2PiAgICAgICAgICAgICAgICANCg0KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiAgICAgICAgICAgICAgICAgICAgDQp2YXIgZGl2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXoxNzEyODAyOTM5NDkyJyk7ICAgICAgICAgICAgICAgICAgICANCnZhciB2aXpFbGVtZW50ID0gZGl2RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF07ICAgICAgICAgICAgICAgICAgICANCnZpekVsZW1lbnQuc3R5bGUud2lkdGg9JzEwMTZweCc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9Jzk5MXB4JzsgICAgICAgICAgICAgICAgICAgIA0KdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgICAgICAgICAgICAgICAgICAgIA0Kc2NyaXB0RWxlbWVudC5zcmMgPSAnaHR0cHM6Ly9wdWJsaWMudGFibGVhdS5jb20vamF2YXNjcmlwdHMvYXBpL3Zpel92MS5qcyc7ICAgICAgICAgICAgICAgICAgICANCnZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgDQo8L3NjcmlwdD4NCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg==