install.packages('plyr', repos = "http://cran.us.r-project.org")
library(aod)
library(binom)
library(car)
library(collapsibleTree)
library(dbplyr)
library(dplyr)
library(Ecdat)
library(EnvStats)
library(faraway)
library(ggformula)
library(ggplot2)
library(ggpubr)
library(gmodels)
library(gridExtra)
library(htmltools)
library(ISLR)
library(knitr)
library(lawstat)
library(leaps)
library(lmtest)
library(MASS)
library(markdown)
library(mctest)
library(mosaic)
library(mdsr)
library(mosaicData)
#library(nycflights13)
library(nycflights23)
library(olsrr)
#library(plyr)
library(purrr)
library(plotly)
library(resampledata)
library(rmarkdown)
library(rpart)
library(rlang)
library(rpart.plot)
library(rvest)
library(SDaA)
library(shiny)
library(stringi)
library(tibble)
library(tidyr)
library(tidyselect)
library(tinytex)
library(yaml)
library(shiny)
library(aod)
library(ROCR)
library(pROC)
library(GGally)
library(mctest)
library(readxl)

library(nycflights23)

flights

names(flights)

airlines

library(dplyr)

sub_flights = select(flights, origin, carrier, sched_dep_time, dep_delay, sched_arr_time, arr_delay, distance)

sub_flights

library(aod) library(binom) library(car) library(collapsibleTree) library(dbplyr) library(dplyr) library(Ecdat) library(EnvStats) library(faraway) library(ggformula) library(ggplot2) library(ggpubr) library(gmodels) library(gridExtra) library(htmltools) library(ISLR) library(knitr) library(lawstat) library(leaps) library(lmtest) library(MASS) library(markdown) library(mctest) library(mosaic) library(mdsr) library(mosaicData) #library(nycflights13) library(nycflights23) library(olsrr) #library(plyr) library(purrr) library(plotly) library(resampledata) library(rmarkdown) library(rpart) library(rlang) library(rpart.plot) library(rvest) library(SDaA) library(shiny) library(stringi) library(tibble) library(tidyr) library(tidyselect) library(tinytex) library(yaml) library(shiny) library(aod) library(ROCR) library(pROC) library(GGally) library(mctest) library(readxl)

options(scipen=999) ggplot(sub_flights, aes(x = dep_delay)) + geom_histogram(col=“blue”, fill=“orange”, bins = 20, na.rm=TRUE) + xlab(“Minutes a Flight is Delayed from Scheduled Departure”) + ylab(“Frequency”) + ggtitle(“Frequency Histogram”, subtitle = “Minutes a Flight is Delayed in Departing (Originating from NYC-Area Airport)”)

table(is.na(sub_flights$dep_delay))

min(sub_flights$dep_delay, na.rm=TRUE)

max(sub_flights$dep_delay, na.rm=TRUE)

dep_breaks = c(-50, -25, -15, -10, -5, 0, 5, 10, 15, 25, 50, 100, 200, 500, 1000, 2000) dep_breaks

table(is.na(sub_flights$arr_delay))

min(sub_flights\(arr_delay, na.rm=TRUE) max(sub_flights\)arr_delay, na.rm=TRUE)

arr_breaks = c(-100, -50, -25, -15, -10, -5, 0, 5, 10, 15, 25, 50, 100, 250, 500, 1000, 2000)

mean_arrive = mean(sub_flights$arr_delay, na.rm=TRUE)#computes the mean/average of all the arrival delays

mean_depart = mean(sub_flights\(dep_delay, na.rm=TRUE)#computes the mean/average of all the arrival delays median_depart = median(sub_flights\)dep_delay, na.rm=TRUE) #assign the computation of the median

median_arrive = median(sub_flights$arr_delay, na.rm=TRUE) #assign the computation of the median arrival delay

mean_depart mean_arrive median_depart median_arrive

sd_depart = sd(sub_flights$dep_delay, na.rm=TRUE) #assign the computation of the standard deviation for departure delays

sd_arrive= sd(sub_flights$arr_delay, na.rm=TRUE) #assign the computation of the standard deviation for departure delays

sd_depart sd_arrive

ggplot(sub_flights, aes(x = arr_delay)) + geom_histogram(col=“blue”, fill=“orange”, breaks = dep_breaks, na.rm=TRUE) + xlab(“Minutes a Flight is Late to Arrive”) + ylab(“Frequency”) + ggtitle(“Frequency Histogram”, subtitle = “Minutes a Flight is Late to Arrive Destination from NYC-Area Airport”)

ggplot(sub_flights, aes(x = dep_delay, y = after_stat(density))) + geom_histogram(col=“blue”, fill=“orange”, breaks = dep_breaks, na.rm=TRUE) + xlab(“Minutes a Flight is Delayed from Scheduled Departure”) + ylab(“Density”) + ggtitle(“Density-Scale Histogram”, subtitle = “Departure Delay: Average = 13.84 minutes, Median = -2 minutes”) + geom_vline(xintercept = mean_depart, col=“red”) + geom_vline(xintercept = median_depart, col=“purple”)

ggplot(sub_flights, aes(x = arr_delay, y = after_stat(density))) + geom_histogram(col=“blue”, fill=“orange”, breaks = arr_breaks, na.rm=TRUE) + xlab(“Minutes a Flight is Late to Arrive”) + ylab(“Density”) + ggtitle(“Density-Scale Histogram”, subtitle = “Arrival Delay: Average = 4.34 minutes, Median = -10 minutes”) + geom_vline(xintercept = mean_arrive, col=“red”) + geom_vline(xintercept = median_arrive, col=“purple”)

#set.seed(109929) janflights = filter(flights, month==1) #filter out all flights with month ==1 (January) from parent data set flights head(janflights, 4)

length(janflights$dep_delay)

as.data.frame(table(is.na(janflights$dep_delay)))

as.data.frame(table(is.na(janflights$arr_delay)))

#Histogram of Arrival Delays ggplot(janflights, aes(x = arr_delay, y = after_stat(density))) + geom_histogram(col=“orange”, fill=‘blue’, breaks = arr_breaks, na.rm=TRUE) + xlab(“Minutes a Flight Arrives Late”) + ylab(“Density”) + ggtitle(“Density Histogram of Arrival Delays for January Flights Leaving 3-NYC Airports”)

#set.seed(109929) sepflights = filter(flights, month==9) #filter out all flights with month ==9 (September) from parent data set flights head(sepflights, 4)

janseptflights = filter(flights, month==1 | month==9) #take out all flights leaving in Jan (1) and Sept (9) ggplot(janseptflights, aes(x = dep_delay, group = month)) + geom_histogram(aes(y = after_stat(density), fill=month), col=“red”, binwidth=10, na.rm=TRUE) + xlab(“Minutes Delayed in Departing”) + ggtitle(“Density Hisotrams: Departure Delay of all Flights”, subtitle=“Departing in January and September”)

sampleflights.df = sample(flights, 1000, replace=FALSE, na.rm=TRUE) #select 1000 cases from flights without replacement head(sampleflights.df, 4) #shows the first four cases chosen

tail(sampleflights.df, 4) #shows the last four cases chosen

length(sampleflights.df$dep_delay)

table(is.na(sampleflights.df$dep_delay))

table(is.na(sampleflights.df$dep_delay))[[2]]

n_dep_delays = length(sampleflights.df\(dep_delay) - table(is.na(sampleflights.df\)dep_delay))[[2]] #subtracts missing values to determine n n_dep_delays

ggplot(sampleflights.df, aes(x = dep_delay, y = after_stat(density))) + geom_histogram(col=‘red’, fill=‘blue’, breaks = dep_breaks, na.rm=TRUE) + xlab(“Minutes Flight is Delayed”) + ylab(“Density”) + ggtitle(“Density Histogram of Domestic Flight Depart Delay for Sample of 966 flights”, subtitle=“Population: All Domestic Flights Departing 3 NYC-airports”)

ggplot(sampleflights.df, aes(x = dep_delay, y =after_stat(density), group=month)) + geom_freqpoly(aes(color=month), binwidth=20,na.rm=TRUE)

ggplot(sampleflights.df, aes(x = dep_delay, y =after_stat(density), group=month)) + geom_freqpoly(aes(color=month), binwidth=20,na.rm=TRUE) + xlab(“Minutes Flight is Delayed”) + facet_wrap(~ month)

table(sampleflights.df$carrier) ggplot(data = filter(sampleflights.df, (carrier == “UA” | carrier == “DL” | carrier == “AA”)), aes(x = carrier, y = dep_delay)) + geom_violin(col=“blue”, fill=“red”, na.rm=TRUE) + geom_boxplot(width=0.1, na.rm=TRUE) + xlab(“Airline”) + ylab(“Minutes a Flight is Delayed in Departing”) + ggtitle(“Violin Plot of Sampled Departure Delays”) + coord_flip()

second_sample.df = read.csv(“https://raw.githubusercontent.com/Statman44/Data602/refs/heads/main/sampleNYCflights2023.csv”) second_sample.df

mean(second_sample.df$dep_delay, na.rm=TRUE) #computes the sample mean

median(second_sample.df\(dep_delay, na.rm=TRUE) #computes the sample median var(second_sample.df\)dep_delay, na.rm=TRUE) #computes the sample variance

sd(second_sample.df$dep_delay, na.rm = TRUE) #computes the sample standard deviation

sqrt(var(second_sample.df$dep_delay, na.rm=TRUE))

favstats(~dep_delay, data = second_sample.df)

mean(second_sample.df$arr_delay, na.rm=TRUE) #computes the sample mean

median(second_sample.df\(arr_delay, na.rm=TRUE) #computes the sample median var(second_sample.df\)arr_delay, na.rm=TRUE) #computes the sample variance

sd(second_sample.df$arr_delay, na.rm = TRUE) #computes the sample standard deviation

sqrt(var(second_sample.df$arr_delay, na.rm=TRUE))

favstats(~arr_delay, data = second_sample.df)

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KYGBge3J9DQpgYGANCg0KDQpgYGB7cn0NCmBgYA0KDQoNCmBgYHtyfQ0KYGBgDQoNCmBgYHtyfQ0KaW5zdGFsbC5wYWNrYWdlcygncGx5cicsIHJlcG9zID0gImh0dHA6Ly9jcmFuLnVzLnItcHJvamVjdC5vcmciKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShhb2QpDQpsaWJyYXJ5KGJpbm9tKQ0KbGlicmFyeShjYXIpDQpsaWJyYXJ5KGNvbGxhcHNpYmxlVHJlZSkNCmxpYnJhcnkoZGJwbHlyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoRWNkYXQpDQpsaWJyYXJ5KEVudlN0YXRzKQ0KbGlicmFyeShmYXJhd2F5KQ0KbGlicmFyeShnZ2Zvcm11bGEpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGdncHVicikNCmxpYnJhcnkoZ21vZGVscykNCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KbGlicmFyeShodG1sdG9vbHMpDQpsaWJyYXJ5KElTTFIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShsYXdzdGF0KQ0KbGlicmFyeShsZWFwcykNCmxpYnJhcnkobG10ZXN0KQ0KbGlicmFyeShNQVNTKQ0KbGlicmFyeShtYXJrZG93bikNCmxpYnJhcnkobWN0ZXN0KQ0KbGlicmFyeShtb3NhaWMpDQpsaWJyYXJ5KG1kc3IpDQpsaWJyYXJ5KG1vc2FpY0RhdGEpDQojbGlicmFyeShueWNmbGlnaHRzMTMpDQpsaWJyYXJ5KG55Y2ZsaWdodHMyMykNCmxpYnJhcnkob2xzcnIpDQojbGlicmFyeShwbHlyKQ0KbGlicmFyeShwdXJycikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShyZXNhbXBsZWRhdGEpDQpsaWJyYXJ5KHJtYXJrZG93bikNCmxpYnJhcnkocnBhcnQpDQpsaWJyYXJ5KHJsYW5nKQ0KbGlicmFyeShycGFydC5wbG90KQ0KbGlicmFyeShydmVzdCkNCmxpYnJhcnkoU0RhQSkNCmxpYnJhcnkoc2hpbnkpDQpsaWJyYXJ5KHN0cmluZ2kpDQpsaWJyYXJ5KHRpYmJsZSkNCmxpYnJhcnkodGlkeXIpDQpsaWJyYXJ5KHRpZHlzZWxlY3QpDQpsaWJyYXJ5KHRpbnl0ZXgpDQpsaWJyYXJ5KHlhbWwpDQpsaWJyYXJ5KHNoaW55KQ0KbGlicmFyeShhb2QpDQpsaWJyYXJ5KFJPQ1IpDQpsaWJyYXJ5KHBST0MpDQpsaWJyYXJ5KEdHYWxseSkNCmxpYnJhcnkobWN0ZXN0KQ0KbGlicmFyeShyZWFkeGwpDQpgYGANCg0KbGlicmFyeShueWNmbGlnaHRzMjMpDQoNCmZsaWdodHMNCg0KbmFtZXMoZmxpZ2h0cykNCg0KYWlybGluZXMNCg0KbGlicmFyeShkcGx5cikNCg0Kc3ViX2ZsaWdodHMgPSBzZWxlY3QoZmxpZ2h0cywgb3JpZ2luLCBjYXJyaWVyLCBzY2hlZF9kZXBfdGltZSwgZGVwX2RlbGF5LCBzY2hlZF9hcnJfdGltZSwgYXJyX2RlbGF5LCBkaXN0YW5jZSkNCg0Kc3ViX2ZsaWdodHMNCg0KbGlicmFyeShhb2QpDQpsaWJyYXJ5KGJpbm9tKQ0KbGlicmFyeShjYXIpDQpsaWJyYXJ5KGNvbGxhcHNpYmxlVHJlZSkNCmxpYnJhcnkoZGJwbHlyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoRWNkYXQpDQpsaWJyYXJ5KEVudlN0YXRzKQ0KbGlicmFyeShmYXJhd2F5KQ0KbGlicmFyeShnZ2Zvcm11bGEpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGdncHVicikNCmxpYnJhcnkoZ21vZGVscykNCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KbGlicmFyeShodG1sdG9vbHMpDQpsaWJyYXJ5KElTTFIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShsYXdzdGF0KQ0KbGlicmFyeShsZWFwcykNCmxpYnJhcnkobG10ZXN0KQ0KbGlicmFyeShNQVNTKQ0KbGlicmFyeShtYXJrZG93bikNCmxpYnJhcnkobWN0ZXN0KQ0KbGlicmFyeShtb3NhaWMpDQpsaWJyYXJ5KG1kc3IpDQpsaWJyYXJ5KG1vc2FpY0RhdGEpDQojbGlicmFyeShueWNmbGlnaHRzMTMpDQpsaWJyYXJ5KG55Y2ZsaWdodHMyMykNCmxpYnJhcnkob2xzcnIpDQojbGlicmFyeShwbHlyKQ0KbGlicmFyeShwdXJycikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShyZXNhbXBsZWRhdGEpDQpsaWJyYXJ5KHJtYXJrZG93bikNCmxpYnJhcnkocnBhcnQpDQpsaWJyYXJ5KHJsYW5nKQ0KbGlicmFyeShycGFydC5wbG90KQ0KbGlicmFyeShydmVzdCkNCmxpYnJhcnkoU0RhQSkNCmxpYnJhcnkoc2hpbnkpDQpsaWJyYXJ5KHN0cmluZ2kpDQpsaWJyYXJ5KHRpYmJsZSkNCmxpYnJhcnkodGlkeXIpDQpsaWJyYXJ5KHRpZHlzZWxlY3QpDQpsaWJyYXJ5KHRpbnl0ZXgpDQpsaWJyYXJ5KHlhbWwpDQpsaWJyYXJ5KHNoaW55KQ0KbGlicmFyeShhb2QpDQpsaWJyYXJ5KFJPQ1IpDQpsaWJyYXJ5KHBST0MpDQpsaWJyYXJ5KEdHYWxseSkNCmxpYnJhcnkobWN0ZXN0KQ0KbGlicmFyeShyZWFkeGwpDQoNCm9wdGlvbnMoc2NpcGVuPTk5OSkNCmdncGxvdChzdWJfZmxpZ2h0cywgYWVzKHggPSBkZXBfZGVsYXkpKSArIGdlb21faGlzdG9ncmFtKGNvbD0iYmx1ZSIsIGZpbGw9Im9yYW5nZSIsIGJpbnMgPSAyMCwgbmEucm09VFJVRSkgKyB4bGFiKCJNaW51dGVzIGEgRmxpZ2h0IGlzIERlbGF5ZWQgZnJvbSBTY2hlZHVsZWQgRGVwYXJ0dXJlIikgKyB5bGFiKCJGcmVxdWVuY3kiKSArIGdndGl0bGUoIkZyZXF1ZW5jeSBIaXN0b2dyYW0iLCBzdWJ0aXRsZSA9ICJNaW51dGVzIGEgRmxpZ2h0IGlzIERlbGF5ZWQgaW4gRGVwYXJ0aW5nIChPcmlnaW5hdGluZyBmcm9tIE5ZQy1BcmVhIEFpcnBvcnQpIikNCg0KdGFibGUoaXMubmEoc3ViX2ZsaWdodHMkZGVwX2RlbGF5KSkNCg0KbWluKHN1Yl9mbGlnaHRzJGRlcF9kZWxheSwgbmEucm09VFJVRSkNCg0KbWF4KHN1Yl9mbGlnaHRzJGRlcF9kZWxheSwgbmEucm09VFJVRSkNCg0KZGVwX2JyZWFrcyA9IGMoLTUwLCAtMjUsIC0xNSwgLTEwLCAtNSwgMCwgNSwgMTAsIDE1LCAyNSwgNTAsIDEwMCwgMjAwLCA1MDAsIDEwMDAsIDIwMDApDQpkZXBfYnJlYWtzDQoNCnRhYmxlKGlzLm5hKHN1Yl9mbGlnaHRzJGFycl9kZWxheSkpDQoNCm1pbihzdWJfZmxpZ2h0cyRhcnJfZGVsYXksIG5hLnJtPVRSVUUpDQptYXgoc3ViX2ZsaWdodHMkYXJyX2RlbGF5LCBuYS5ybT1UUlVFKQ0KDQphcnJfYnJlYWtzID0gYygtMTAwLCAtNTAsIC0yNSwgLTE1LCAtMTAsIC01LCAwLCA1LCAxMCwgMTUsIDI1LCA1MCwgMTAwLCAyNTAsIDUwMCwgMTAwMCwgMjAwMCkNCg0KbWVhbl9hcnJpdmUgPSBtZWFuKHN1Yl9mbGlnaHRzJGFycl9kZWxheSwgbmEucm09VFJVRSkjY29tcHV0ZXMgdGhlIG1lYW4vYXZlcmFnZSBvZiBhbGwgdGhlIGFycml2YWwgZGVsYXlzDQoNCm1lYW5fZGVwYXJ0ID0gbWVhbihzdWJfZmxpZ2h0cyRkZXBfZGVsYXksIG5hLnJtPVRSVUUpI2NvbXB1dGVzIHRoZSBtZWFuL2F2ZXJhZ2Ugb2YgYWxsIHRoZSBhcnJpdmFsIGRlbGF5cw0KbWVkaWFuX2RlcGFydCA9IG1lZGlhbihzdWJfZmxpZ2h0cyRkZXBfZGVsYXksIG5hLnJtPVRSVUUpICNhc3NpZ24gdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBtZWRpYW4NCg0KbWVkaWFuX2Fycml2ZSA9IG1lZGlhbihzdWJfZmxpZ2h0cyRhcnJfZGVsYXksIG5hLnJtPVRSVUUpICNhc3NpZ24gdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBtZWRpYW4gYXJyaXZhbCBkZWxheQ0KDQptZWFuX2RlcGFydA0KbWVhbl9hcnJpdmUNCm1lZGlhbl9kZXBhcnQNCm1lZGlhbl9hcnJpdmUNCg0Kc2RfZGVwYXJ0ID0gc2Qoc3ViX2ZsaWdodHMkZGVwX2RlbGF5LCBuYS5ybT1UUlVFKSAjYXNzaWduIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGZvciBkZXBhcnR1cmUgZGVsYXlzDQoNCnNkX2Fycml2ZT0gc2Qoc3ViX2ZsaWdodHMkYXJyX2RlbGF5LCBuYS5ybT1UUlVFKSAjYXNzaWduIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGZvciBkZXBhcnR1cmUgZGVsYXlzDQoNCnNkX2RlcGFydA0Kc2RfYXJyaXZlDQoNCmdncGxvdChzdWJfZmxpZ2h0cywgYWVzKHggPSBhcnJfZGVsYXkpKSArIGdlb21faGlzdG9ncmFtKGNvbD0iYmx1ZSIsIGZpbGw9Im9yYW5nZSIsIGJyZWFrcyA9IGRlcF9icmVha3MsIG5hLnJtPVRSVUUpICsgeGxhYigiTWludXRlcyBhIEZsaWdodCBpcyBMYXRlIHRvIEFycml2ZSIpICsgeWxhYigiRnJlcXVlbmN5IikgKyBnZ3RpdGxlKCJGcmVxdWVuY3kgSGlzdG9ncmFtIiwgc3VidGl0bGUgPSAiTWludXRlcyBhIEZsaWdodCBpcyBMYXRlIHRvIEFycml2ZSBEZXN0aW5hdGlvbiBmcm9tIE5ZQy1BcmVhIEFpcnBvcnQiKQ0KDQpnZ3Bsb3Qoc3ViX2ZsaWdodHMsIGFlcyh4ID0gZGVwX2RlbGF5LCB5ID0gYWZ0ZXJfc3RhdChkZW5zaXR5KSkpICsgZ2VvbV9oaXN0b2dyYW0oY29sPSJibHVlIiwgZmlsbD0ib3JhbmdlIiwgYnJlYWtzID0gZGVwX2JyZWFrcywgbmEucm09VFJVRSkgKyB4bGFiKCJNaW51dGVzIGEgRmxpZ2h0IGlzIERlbGF5ZWQgZnJvbSBTY2hlZHVsZWQgRGVwYXJ0dXJlIikgKyB5bGFiKCJEZW5zaXR5IikgKyBnZ3RpdGxlKCJEZW5zaXR5LVNjYWxlIEhpc3RvZ3JhbSIsIHN1YnRpdGxlID0gIkRlcGFydHVyZSBEZWxheTogQXZlcmFnZSA9IDEzLjg0IG1pbnV0ZXMsIE1lZGlhbiA9IC0yIG1pbnV0ZXMiKSArIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IG1lYW5fZGVwYXJ0LCBjb2w9InJlZCIpICsgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gbWVkaWFuX2RlcGFydCwgY29sPSJwdXJwbGUiKQ0KDQpnZ3Bsb3Qoc3ViX2ZsaWdodHMsIGFlcyh4ID0gYXJyX2RlbGF5LCB5ID0gYWZ0ZXJfc3RhdChkZW5zaXR5KSkpICsgZ2VvbV9oaXN0b2dyYW0oY29sPSJibHVlIiwgZmlsbD0ib3JhbmdlIiwgYnJlYWtzID0gYXJyX2JyZWFrcywgbmEucm09VFJVRSkgKyB4bGFiKCJNaW51dGVzIGEgRmxpZ2h0IGlzIExhdGUgdG8gQXJyaXZlIikgKyB5bGFiKCJEZW5zaXR5IikgKyBnZ3RpdGxlKCJEZW5zaXR5LVNjYWxlIEhpc3RvZ3JhbSIsIHN1YnRpdGxlID0gIkFycml2YWwgRGVsYXk6IEF2ZXJhZ2UgPSA0LjM0IG1pbnV0ZXMsIE1lZGlhbiA9IC0xMCBtaW51dGVzIikgKyBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBtZWFuX2Fycml2ZSwgY29sPSJyZWQiKSArIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IG1lZGlhbl9hcnJpdmUsIGNvbD0icHVycGxlIikNCg0KI3NldC5zZWVkKDEwOTkyOSkNCmphbmZsaWdodHMgPSBmaWx0ZXIoZmxpZ2h0cywgbW9udGg9PTEpICNmaWx0ZXIgb3V0IGFsbCBmbGlnaHRzIHdpdGggbW9udGggPT0xIChKYW51YXJ5KSBmcm9tIHBhcmVudCBkYXRhIHNldCBmbGlnaHRzDQpoZWFkKGphbmZsaWdodHMsIDQpDQoNCmxlbmd0aChqYW5mbGlnaHRzJGRlcF9kZWxheSkNCg0KYXMuZGF0YS5mcmFtZSh0YWJsZShpcy5uYShqYW5mbGlnaHRzJGRlcF9kZWxheSkpKQ0KDQphcy5kYXRhLmZyYW1lKHRhYmxlKGlzLm5hKGphbmZsaWdodHMkYXJyX2RlbGF5KSkpDQoNCiNIaXN0b2dyYW0gb2YgQXJyaXZhbCBEZWxheXMNCmdncGxvdChqYW5mbGlnaHRzLCBhZXMoeCA9IGFycl9kZWxheSwgeSA9IGFmdGVyX3N0YXQoZGVuc2l0eSkpKSArIGdlb21faGlzdG9ncmFtKGNvbD0ib3JhbmdlIiwgZmlsbD0nYmx1ZScsIGJyZWFrcyA9IGFycl9icmVha3MsIG5hLnJtPVRSVUUpICsgeGxhYigiTWludXRlcyBhIEZsaWdodCBBcnJpdmVzIExhdGUiKSArIHlsYWIoIkRlbnNpdHkiKSArIGdndGl0bGUoIkRlbnNpdHkgSGlzdG9ncmFtIG9mIEFycml2YWwgRGVsYXlzIGZvciBKYW51YXJ5IEZsaWdodHMgTGVhdmluZyAzLU5ZQyBBaXJwb3J0cyIpDQoNCiNzZXQuc2VlZCgxMDk5MjkpDQpzZXBmbGlnaHRzID0gZmlsdGVyKGZsaWdodHMsIG1vbnRoPT05KSAjZmlsdGVyIG91dCBhbGwgZmxpZ2h0cyB3aXRoIG1vbnRoID09OSAoU2VwdGVtYmVyKSBmcm9tIHBhcmVudCBkYXRhIHNldCBmbGlnaHRzDQpoZWFkKHNlcGZsaWdodHMsIDQpDQoNCmphbnNlcHRmbGlnaHRzID0gZmlsdGVyKGZsaWdodHMsIG1vbnRoPT0xIHwgbW9udGg9PTkpICN0YWtlIG91dCBhbGwgZmxpZ2h0cyBsZWF2aW5nIGluIEphbiAoMSkgYW5kIFNlcHQgKDkpDQpnZ3Bsb3QoamFuc2VwdGZsaWdodHMsIGFlcyh4ID0gZGVwX2RlbGF5LCBncm91cCA9IG1vbnRoKSkgKyBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IGFmdGVyX3N0YXQoZGVuc2l0eSksIGZpbGw9bW9udGgpLCBjb2w9InJlZCIsIGJpbndpZHRoPTEwLCBuYS5ybT1UUlVFKSArIHhsYWIoIk1pbnV0ZXMgRGVsYXllZCBpbiBEZXBhcnRpbmciKSArIGdndGl0bGUoIkRlbnNpdHkgSGlzb3RyYW1zOiBEZXBhcnR1cmUgRGVsYXkgb2YgYWxsIEZsaWdodHMiLCBzdWJ0aXRsZT0iRGVwYXJ0aW5nIGluIEphbnVhcnkgYW5kIFNlcHRlbWJlciIpDQoNCnNhbXBsZWZsaWdodHMuZGYgPSBzYW1wbGUoZmxpZ2h0cywgMTAwMCwgcmVwbGFjZT1GQUxTRSwgbmEucm09VFJVRSkgICNzZWxlY3QgMTAwMCBjYXNlcyBmcm9tIGZsaWdodHMgd2l0aG91dCByZXBsYWNlbWVudA0KaGVhZChzYW1wbGVmbGlnaHRzLmRmLCA0KSAjc2hvd3MgdGhlIGZpcnN0IGZvdXIgY2FzZXMgY2hvc2VuDQoNCnRhaWwoc2FtcGxlZmxpZ2h0cy5kZiwgNCkgI3Nob3dzIHRoZSBsYXN0IGZvdXIgY2FzZXMgY2hvc2VuDQoNCmxlbmd0aChzYW1wbGVmbGlnaHRzLmRmJGRlcF9kZWxheSkNCg0KdGFibGUoaXMubmEoc2FtcGxlZmxpZ2h0cy5kZiRkZXBfZGVsYXkpKQ0KDQp0YWJsZShpcy5uYShzYW1wbGVmbGlnaHRzLmRmJGRlcF9kZWxheSkpW1syXV0NCg0Kbl9kZXBfZGVsYXlzID0gbGVuZ3RoKHNhbXBsZWZsaWdodHMuZGYkZGVwX2RlbGF5KSAtIHRhYmxlKGlzLm5hKHNhbXBsZWZsaWdodHMuZGYkZGVwX2RlbGF5KSlbWzJdXSAjc3VidHJhY3RzIG1pc3NpbmcgdmFsdWVzIHRvIGRldGVybWluZSBuDQpuX2RlcF9kZWxheXMNCg0KZ2dwbG90KHNhbXBsZWZsaWdodHMuZGYsIGFlcyh4ID0gZGVwX2RlbGF5LCB5ID0gYWZ0ZXJfc3RhdChkZW5zaXR5KSkpICsgZ2VvbV9oaXN0b2dyYW0oY29sPSdyZWQnLCBmaWxsPSdibHVlJywgYnJlYWtzID0gZGVwX2JyZWFrcywgbmEucm09VFJVRSkgKyB4bGFiKCJNaW51dGVzIEZsaWdodCBpcyBEZWxheWVkIikgKyB5bGFiKCJEZW5zaXR5IikgKyBnZ3RpdGxlKCJEZW5zaXR5IEhpc3RvZ3JhbSBvZiBEb21lc3RpYyBGbGlnaHQgRGVwYXJ0IERlbGF5IGZvciBTYW1wbGUgb2YgOTY2IGZsaWdodHMiLCBzdWJ0aXRsZT0iUG9wdWxhdGlvbjogQWxsIERvbWVzdGljIEZsaWdodHMgRGVwYXJ0aW5nIDMgTllDLWFpcnBvcnRzIikNCg0KZ2dwbG90KHNhbXBsZWZsaWdodHMuZGYsIGFlcyh4ID0gZGVwX2RlbGF5LCB5ID1hZnRlcl9zdGF0KGRlbnNpdHkpLCBncm91cD1tb250aCkpICsgZ2VvbV9mcmVxcG9seShhZXMoY29sb3I9bW9udGgpLCBiaW53aWR0aD0yMCxuYS5ybT1UUlVFKQ0KDQpnZ3Bsb3Qoc2FtcGxlZmxpZ2h0cy5kZiwgYWVzKHggPSBkZXBfZGVsYXksIHkgPWFmdGVyX3N0YXQoZGVuc2l0eSksIGdyb3VwPW1vbnRoKSkgKyBnZW9tX2ZyZXFwb2x5KGFlcyhjb2xvcj1tb250aCksIGJpbndpZHRoPTIwLG5hLnJtPVRSVUUpICsgeGxhYigiTWludXRlcyBGbGlnaHQgaXMgRGVsYXllZCIpICsgZmFjZXRfd3JhcCh+IG1vbnRoKQ0KDQp0YWJsZShzYW1wbGVmbGlnaHRzLmRmJGNhcnJpZXIpDQpnZ3Bsb3QoZGF0YSA9IGZpbHRlcihzYW1wbGVmbGlnaHRzLmRmLCAoY2FycmllciA9PSAiVUEiIHwgY2FycmllciA9PSAiREwiIHwgY2FycmllciA9PSAiQUEiKSksIGFlcyh4ID0gY2FycmllciwgeSA9IGRlcF9kZWxheSkpICsgZ2VvbV92aW9saW4oY29sPSJibHVlIiwgZmlsbD0icmVkIiwgbmEucm09VFJVRSkgKyBnZW9tX2JveHBsb3Qod2lkdGg9MC4xLCBuYS5ybT1UUlVFKSArIHhsYWIoIkFpcmxpbmUiKSArIHlsYWIoIk1pbnV0ZXMgYSBGbGlnaHQgaXMgRGVsYXllZCBpbiBEZXBhcnRpbmciKSArIGdndGl0bGUoIlZpb2xpbiBQbG90IG9mIFNhbXBsZWQgRGVwYXJ0dXJlIERlbGF5cyIpICsgY29vcmRfZmxpcCgpDQoNCnNlY29uZF9zYW1wbGUuZGYgPSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1N0YXRtYW40NC9EYXRhNjAyL3JlZnMvaGVhZHMvbWFpbi9zYW1wbGVOWUNmbGlnaHRzMjAyMy5jc3YiKQ0Kc2Vjb25kX3NhbXBsZS5kZg0KDQptZWFuKHNlY29uZF9zYW1wbGUuZGYkZGVwX2RlbGF5LCBuYS5ybT1UUlVFKSAjY29tcHV0ZXMgdGhlIHNhbXBsZSBtZWFuDQoNCm1lZGlhbihzZWNvbmRfc2FtcGxlLmRmJGRlcF9kZWxheSwgbmEucm09VFJVRSkgI2NvbXB1dGVzIHRoZSBzYW1wbGUgbWVkaWFuDQp2YXIoc2Vjb25kX3NhbXBsZS5kZiRkZXBfZGVsYXksIG5hLnJtPVRSVUUpICNjb21wdXRlcyB0aGUgc2FtcGxlIHZhcmlhbmNlDQoNCnNkKHNlY29uZF9zYW1wbGUuZGYkZGVwX2RlbGF5LCBuYS5ybSA9IFRSVUUpICNjb21wdXRlcyB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbg0KDQpzcXJ0KHZhcihzZWNvbmRfc2FtcGxlLmRmJGRlcF9kZWxheSwgbmEucm09VFJVRSkpDQoNCmZhdnN0YXRzKH5kZXBfZGVsYXksIGRhdGEgPSBzZWNvbmRfc2FtcGxlLmRmKQ0KDQoNCm1lYW4oc2Vjb25kX3NhbXBsZS5kZiRhcnJfZGVsYXksIG5hLnJtPVRSVUUpICNjb21wdXRlcyB0aGUgc2FtcGxlIG1lYW4NCg0KbWVkaWFuKHNlY29uZF9zYW1wbGUuZGYkYXJyX2RlbGF5LCBuYS5ybT1UUlVFKSAjY29tcHV0ZXMgdGhlIHNhbXBsZSBtZWRpYW4NCnZhcihzZWNvbmRfc2FtcGxlLmRmJGFycl9kZWxheSwgbmEucm09VFJVRSkgI2NvbXB1dGVzIHRoZSBzYW1wbGUgdmFyaWFuY2UNCg0Kc2Qoc2Vjb25kX3NhbXBsZS5kZiRhcnJfZGVsYXksIG5hLnJtID0gVFJVRSkgI2NvbXB1dGVzIHRoZSBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uDQoNCnNxcnQodmFyKHNlY29uZF9zYW1wbGUuZGYkYXJyX2RlbGF5LCBuYS5ybT1UUlVFKSkNCg0KZmF2c3RhdHMofmFycl9kZWxheSwgZGF0YSA9IHNlY29uZF9zYW1wbGUuZGYpDQoNCg==