library(readr)
library(rpart)
library(rpart.plot)
library(tm)
library(SnowballC)
library(wordcloud)
library(pscl)
library(randomForest)
Sharks <- read_csv("D:/PG Business Analytics/WSMA/Group Assignment/Shark+Tank+Companies Data.csv")
Parsed with column specification:
cols(
deal = col_logical(),
description = col_character(),
askedFor = col_integer(),
valuation = col_integer()
)
head(Sharks)
Pitch.To.sharks<-Sharks$description
table(Sharks$deal)
FALSE TRUE
244 251
corpusShark<-Corpus(VectorSource(Pitch.To.sharks))
wordcloud(corpusShark,colors = rainbow(7),max.words = 100)

corpusShark<-tm_map(corpusShark,tolower)
corpusShark<-tm_map(corpusShark,removePunctuation)
corpusShark<-tm_map(corpusShark,removeWords,c("can","also",stopwords("english")))
corpusShark<-tm_map(corpusShark,stemDocument)
wordcloud(corpusShark,colors = rainbow(7),max.words = 70)

freqShark<-DocumentTermMatrix(corpusShark)
sparceShark<-removeSparseTerms(freqShark,0.98)
dataShark<-data.frame(as.matrix(sparceShark))
dim(dataShark)
[1] 495 163
dataShark$deal<-as.factor(Sharks$deal)
dataShark<-dataShark[,c(165,c(1:164))]
Error in `[.data.frame`(dataShark, , c(165, c(1:164))) :
undefined columns selected
sharkCART<-rpart(deal~.,data=dataShark,method="class")
#sharkCART
rpart.plot(sharkCART)

dealLogit<-glm(deal~.,data=dataShark,family="binomial")
glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(dealLogit)
Call:
glm(formula = deal ~ ., family = "binomial", data = dataShark)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.6298 -0.7486 0.0000 0.6826 3.0013
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.42540 0.22415 -1.898 0.05771 .
devic -0.61338 0.71081 -0.863 0.38818
new -0.15245 0.92521 -0.165 0.86912
retail 0.91201 1.38190 0.660 0.50927
two 2.53492 1.29840 1.952 0.05090 .
children 1.44486 0.71514 2.020 0.04334 *
easi 2.77130 1.15642 2.396 0.01655 *
make 0.37935 0.51215 0.741 0.45888
one -1.07732 0.84870 -1.269 0.20431
play -0.85290 0.82860 -1.029 0.30333
provid 0.79506 1.04747 0.759 0.44784
turn 0.53152 1.27714 0.416 0.67728
deliv 0.82054 1.51967 0.540 0.58924
organ 1.64062 1.03181 1.590 0.11183
servic -0.66420 0.61722 -1.076 0.28188
women -4.20126 1.73246 -2.425 0.01531 *
offer 0.60771 1.13610 0.535 0.59271
design 0.99606 0.46555 2.140 0.03239 *
first -1.37900 1.74553 -0.790 0.42952
flavor 1.38917 0.80108 1.734 0.08290 .
food -0.66706 0.76723 -0.869 0.38460
includ -1.67056 1.03467 -1.615 0.10640
line 0.32844 0.79514 0.413 0.67957
mani 7.38858 3.53437 2.090 0.03657 *
product 0.29097 0.50101 0.581 0.56140
sold -2.53082 1.51377 -1.672 0.09455 .
store -0.24976 0.96366 -0.259 0.79550
activ -0.75018 0.99643 -0.753 0.45153
apparel 1.71177 1.10966 1.543 0.12293
brand -1.05786 1.15092 -0.919 0.35802
cloth 0.78393 0.71056 1.103 0.26992
look -0.96110 0.88069 -1.091 0.27514
mix -0.42227 0.79820 -0.529 0.59678
attach -0.81505 0.95050 -0.857 0.39117
hold 0.68972 0.90489 0.762 0.44593
start 1.50870 1.38831 1.087 0.27716
get 1.49621 1.15276 1.298 0.19431
learn 0.84649 1.07521 0.787 0.43112
work 2.16014 1.08570 1.990 0.04663 *
made -1.81850 0.65475 -2.777 0.00548 **
help -0.40136 0.56861 -0.706 0.48027
fit -0.54489 0.83630 -0.652 0.51469
combin -0.54948 1.20215 -0.457 0.64761
fun -2.94147 1.09002 -2.699 0.00696 **
keep 1.08980 0.76946 1.416 0.15668
kid 0.17335 0.63356 0.274 0.78438
compani 1.12324 0.62714 1.791 0.07329 .
remov -3.06471 1.63141 -1.879 0.06030 .
babi -0.54811 0.78690 -0.697 0.48609
easier 5.04867 2.41747 2.088 0.03676 *
like -1.40239 0.83284 -1.684 0.09221 .
protect -0.07444 0.82683 -0.090 0.92827
quick -4.40054 1.75500 -2.507 0.01216 *
size 4.68435 1.46115 3.206 0.00135 **
solut 1.84919 1.28232 1.442 0.14929
time 1.28570 1.11888 1.149 0.25052
yet 0.65414 1.64052 0.399 0.69009
use 0.04949 0.54377 0.091 0.92748
back -0.13896 0.96203 -0.144 0.88515
buy -1.09090 0.98261 -1.110 0.26691
sell 0.95929 0.84220 1.139 0.25469
year -0.55952 1.57268 -0.356 0.72201
accessori -0.59848 0.84836 -0.705 0.48052
color -0.30285 1.15625 -0.262 0.79338
onlin 1.00077 0.66051 1.515 0.12973
user 0.68872 0.82320 0.837 0.40279
bar -0.83235 0.72091 -1.155 0.24826
enjoy 0.49682 1.12314 0.442 0.65824
ingredi 3.73900 1.26571 2.954 0.00314 **
just -0.39682 0.96873 -0.410 0.68208
market -0.11802 1.31652 -0.090 0.92857
natur -0.22706 0.89352 -0.254 0.79941
safe -2.12719 1.00653 -2.113 0.03457 *
well 2.21371 1.45162 1.525 0.12726
famili 1.50036 0.89050 1.685 0.09202 .
fashion 0.05637 0.85009 0.066 0.94713
base -4.06729 2.25252 -1.806 0.07097 .
custom -2.11621 1.16985 -1.809 0.07046 .
high 0.84833 1.10404 0.768 0.44226
person -1.51321 1.27253 -1.189 0.23439
bottl 0.31050 0.54898 0.566 0.57168
around -0.61616 0.92245 -0.668 0.50416
materi 1.87442 1.29974 1.442 0.14926
featur -2.16866 0.96536 -2.246 0.02467 *
live 0.42613 1.20661 0.353 0.72396
instead -2.59928 1.44224 -1.802 0.07151 .
three -1.72779 2.01723 -0.857 0.39171
uniqu -0.38987 0.92515 -0.421 0.67345
allow 0.27790 0.66487 0.418 0.67596
special -0.96371 1.20260 -0.801 0.42293
dog 1.29565 0.83895 1.544 0.12250
need 3.70452 1.42660 2.597 0.00941 **
cover -0.25383 0.70021 -0.363 0.71697
run -0.71253 1.50758 -0.473 0.63648
allnatur -3.08001 1.46303 -2.105 0.03527 *
blend 3.93128 1.25444 3.134 0.00173 **
patent -1.21476 1.70776 -0.711 0.47689
place -1.01000 1.27678 -0.791 0.42891
clean 4.86545 2.36206 2.060 0.03941 *
easili -1.40587 1.22746 -1.145 0.25206
way -0.91231 0.95917 -0.951 0.34153
busi -0.88910 0.92930 -0.957 0.33870
mobil 0.14575 0.96716 0.151 0.88021
even 1.09848 0.91541 1.200 0.23014
take -0.93669 0.94743 -0.989 0.32283
X100 2.30944 2.02834 1.139 0.25488
creat 0.07729 0.93229 0.083 0.93392
shape 16.97626 788.63987 0.022 0.98283
usa 1.54960 1.56538 0.990 0.32221
will -1.72150 1.40841 -1.222 0.22159
give 1.15124 1.25090 0.920 0.35740
want -1.67280 1.22545 -1.365 0.17224
shoe 1.46099 0.80886 1.806 0.07088 .
bag -2.12392 1.22037 -1.740 0.08179 .
men -2.19034 1.07051 -2.046 0.04075 *
money 2.00928 1.79323 1.120 0.26251
plastic 3.90360 1.45577 2.681 0.00733 **
power -0.55862 0.92442 -0.604 0.54565
produc -0.16772 0.95153 -0.176 0.86008
travel 2.79568 1.14435 2.443 0.01456 *
without 1.56051 0.86235 1.810 0.07036 .
premium -1.88908 1.19830 -1.576 0.11492
fresh -4.62215 1.86541 -2.478 0.01322 *
bring -2.26322 2.08533 -1.085 0.27779
come -0.36349 0.93212 -0.390 0.69657
effect 0.12804 2.67777 0.048 0.96186
reduc 1.79605 1.44195 1.246 0.21292
tradit -8.13232 3.15088 -2.581 0.00985 **
serv -0.15047 1.55757 -0.097 0.92304
avail -2.71425 1.41823 -1.914 0.05564 .
anyon 0.31919 1.23279 0.259 0.79570
small -0.65668 1.25267 -0.524 0.60012
skin 2.37479 1.00372 2.366 0.01798 *
builtin 0.79429 1.02543 0.775 0.43858
pad 1.91454 1.16016 1.650 0.09889 .
system -0.65028 0.84245 -0.772 0.44018
train 0.46530 1.17214 0.397 0.69139
altern 1.49028 1.58707 0.939 0.34773
home -1.25318 1.08480 -1.155 0.24800
tool -1.38554 1.06809 -1.297 0.19456
box 2.66040 1.43440 1.855 0.06364 .
contain -1.01633 1.88002 -0.541 0.58879
water -0.24184 0.69506 -0.348 0.72788
peopl 0.15286 0.91136 0.168 0.86680
transform 2.32900 1.08440 2.148 0.03174 *
day 1.89962 1.88285 1.009 0.31302
real -1.81342 1.44859 -1.252 0.21062
light 1.07991 0.83819 1.288 0.19761
free -0.65004 1.74495 -0.373 0.70950
packag 6.16735 3.73925 1.649 0.09908 .
name 1.59464 1.55633 1.025 0.30554
now -0.73711 1.62917 -0.452 0.65095
better -2.57478 2.61410 -0.985 0.32465
comfort -1.67821 1.35208 -1.241 0.21453
varieti -2.40346 1.73109 -1.388 0.16501
treat -0.32801 1.09440 -0.300 0.76439
everi -1.10713 1.47286 -0.752 0.45224
rang 0.02689 1.51988 0.018 0.98588
drink -0.28743 1.01849 -0.282 0.77778
app 1.19544 0.99197 1.205 0.22816
style -0.17470 1.09911 -0.159 0.87371
afford -1.39391 1.82860 -0.762 0.44589
dont 4.84747 2.68138 1.808 0.07063 .
simpl -0.14560 1.16706 -0.125 0.90072
great 4.44615 1.77791 2.501 0.01239 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 686.12 on 494 degrees of freedom
Residual deviance: 418.11 on 330 degrees of freedom
AIC: 748.11
Number of Fisher Scoring iterations: 16
pR2(dealLogit)
llh llhNull G2 McFadden r2ML r2CU
-209.0557234 -343.0583578 268.0052687 0.3906118 0.4180814 0.5574791
pred<-predict(dealLogit,dataShark,type='response')
tab<-table(Sharks$deal, pred > 0.5)
tab
FALSE TRUE
FALSE 200 44
TRUE 58 193
accuracy*100
[1] 79.39394
rfShark<-randomForest(deal~.,data=dataShark,importance=T)
rfShark
Call:
randomForest(formula = deal ~ ., data = dataShark, importance = T)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 12
OOB estimate of error rate: 43.43%
Confusion matrix:
FALSE TRUE class.error
FALSE 138 106 0.4344262
TRUE 109 142 0.4342629
plot(rfShark)

varImpPlot(rfShark)

Calculating RATIO
dataShark$ratio<-Sharks$askedFor/Sharks$valuation
sharkCART<-rpart(deal~.,data=dataShark,method="class")
#sharkCART
rpart.plot(sharkCART)

dealLogit<-glm(deal~.,data=dataShark,family="binomial")
glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(dealLogit)
Call:
glm(formula = deal ~ ., family = "binomial", data = dataShark)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.6275 -0.6978 0.0000 0.6623 3.1744
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.22861 0.34944 0.654 0.51298
devic -0.44140 0.70907 -0.623 0.53360
new -0.21159 0.93302 -0.227 0.82060
retail 0.64376 1.37738 0.467 0.64023
two 2.44561 1.34290 1.821 0.06859 .
children 1.42116 0.71587 1.985 0.04712 *
easi 2.79952 1.20775 2.318 0.02045 *
make 0.37191 0.52645 0.706 0.47990
one -1.15428 0.88824 -1.300 0.19377
play -0.77032 0.83986 -0.917 0.35904
provid 0.60023 1.04835 0.573 0.56695
turn 0.52793 1.31566 0.401 0.68822
deliv 0.77320 1.52851 0.506 0.61296
organ 1.48744 1.05541 1.409 0.15873
servic -0.65203 0.62265 -1.047 0.29501
women -3.77696 1.80514 -2.092 0.03641 *
offer 0.61213 1.14825 0.533 0.59397
design 1.00704 0.47087 2.139 0.03246 *
first -1.80802 1.85179 -0.976 0.32888
flavor 1.39811 0.81419 1.717 0.08595 .
food -0.44529 0.80000 -0.557 0.57779
includ -1.72029 1.07041 -1.607 0.10802
line 0.53328 0.81952 0.651 0.51522
mani 7.96284 3.75433 2.121 0.03392 *
product 0.20895 0.51318 0.407 0.68389
sold -2.63678 1.52111 -1.733 0.08301 .
store 0.04211 0.96051 0.044 0.96503
activ -0.75293 1.00816 -0.747 0.45517
apparel 1.59529 1.12571 1.417 0.15644
brand -1.11906 1.16627 -0.960 0.33730
cloth 0.78342 0.71089 1.102 0.27045
look -0.71179 0.88199 -0.807 0.41965
mix -0.60436 0.85029 -0.711 0.47723
attach -0.44215 0.96016 -0.460 0.64516
hold 0.55615 0.89068 0.624 0.53236
start 1.18762 1.42454 0.834 0.40446
get 1.82289 1.20177 1.517 0.12931
learn 0.53185 1.08730 0.489 0.62474
work 2.57159 1.11925 2.298 0.02158 *
made -1.86208 0.65673 -2.835 0.00458 **
help -0.36074 0.57798 -0.624 0.53254
fit -0.58490 0.89981 -0.650 0.51568
combin -0.83188 1.32222 -0.629 0.52925
fun -2.87383 1.08123 -2.658 0.00786 **
keep 1.36077 0.82394 1.652 0.09863 .
kid 0.23694 0.64029 0.370 0.71135
compani 1.18010 0.62804 1.879 0.06024 .
remov -3.11498 1.63439 -1.906 0.05666 .
babi -0.76325 0.81849 -0.933 0.35107
easier 4.43066 2.29440 1.931 0.05347 .
like -1.52527 0.85146 -1.791 0.07324 .
protect -0.18129 0.84835 -0.214 0.83078
quick -4.43415 1.81948 -2.437 0.01481 *
size 5.15593 1.56903 3.286 0.00102 **
solut 1.91431 1.31133 1.460 0.14434
time 1.18022 1.13463 1.040 0.29826
yet 0.74669 1.63082 0.458 0.64705
use 0.07470 0.55258 0.135 0.89247
back 0.07246 0.96294 0.075 0.94002
buy -1.01038 0.99270 -1.018 0.30876
sell 0.81741 0.85056 0.961 0.33654
year -0.40376 1.59208 -0.254 0.79980
accessori -0.73726 0.88299 -0.835 0.40374
color -0.28686 1.17514 -0.244 0.80715
onlin 0.91746 0.66083 1.388 0.16503
user 0.76273 0.83294 0.916 0.35982
bar -0.84639 0.73663 -1.149 0.25055
enjoy 0.46349 1.14770 0.404 0.68633
ingredi 3.79909 1.29843 2.926 0.00343 **
just -0.45994 0.98892 -0.465 0.64186
market -0.16372 1.33431 -0.123 0.90234
natur -0.19853 0.91172 -0.218 0.82762
safe -2.30664 1.04935 -2.198 0.02794 *
well 2.60174 1.52706 1.704 0.08843 .
famili 1.65162 0.93295 1.770 0.07667 .
fashion 0.32101 0.87363 0.367 0.71329
base -4.50575 2.35657 -1.912 0.05588 .
custom -2.11684 1.19325 -1.774 0.07606 .
high 0.75985 1.12902 0.673 0.50094
person -1.39812 1.29421 -1.080 0.28001
bottl 0.29612 0.55516 0.533 0.59376
around -0.46041 0.94044 -0.490 0.62443
materi 1.52659 1.38069 1.106 0.26887
featur -2.08686 0.98793 -2.112 0.03466 *
live 0.54471 1.20989 0.450 0.65256
instead -2.63975 1.46863 -1.797 0.07227 .
three -1.18929 2.08087 -0.572 0.56764
uniqu -0.49797 0.93513 -0.533 0.59437
allow 0.20608 0.67246 0.306 0.75925
special -1.24650 1.24212 -1.004 0.31560
dog 1.32532 0.86229 1.537 0.12430
need 4.15059 1.44565 2.871 0.00409 **
cover -0.24652 0.72274 -0.341 0.73303
run -0.88134 1.59081 -0.554 0.57956
allnatur -3.16979 1.50423 -2.107 0.03510 *
blend 4.09419 1.27400 3.214 0.00131 **
patent -1.66102 1.70599 -0.974 0.33024
place -0.94410 1.32998 -0.710 0.47779
clean 5.00793 2.45679 2.038 0.04151 *
easili -1.49493 1.24409 -1.202 0.22951
way -1.05080 0.99775 -1.053 0.29226
busi -0.91467 0.95022 -0.963 0.33576
mobil 0.25656 0.97990 0.262 0.79346
even 1.10226 0.93982 1.173 0.24086
take -1.14085 0.96810 -1.178 0.23862
X100 2.64434 2.12318 1.245 0.21296
creat 0.22639 0.94755 0.239 0.81117
shape 16.42611 807.58450 0.020 0.98377
usa 1.58235 1.59235 0.994 0.32036
will -1.67374 1.51380 -1.106 0.26888
give 1.13749 1.25293 0.908 0.36395
want -1.68933 1.24480 -1.357 0.17475
shoe 1.61753 0.81200 1.992 0.04637 *
bag -2.14254 1.21067 -1.770 0.07678 .
men -2.25730 1.07350 -2.103 0.03549 *
money 1.66319 1.92540 0.864 0.38769
plastic 3.76371 1.50401 2.502 0.01233 *
power -0.74749 0.94059 -0.795 0.42678
produc -0.33084 0.90878 -0.364 0.71583
travel 2.80501 1.15337 2.432 0.01502 *
without 1.80873 0.88589 2.042 0.04118 *
premium -1.93448 1.22851 -1.575 0.11534
fresh -5.04811 1.90929 -2.644 0.00819 **
bring -2.32836 2.11981 -1.098 0.27204
come -0.49837 0.95154 -0.524 0.60045
effect -0.01882 2.77454 -0.007 0.99459
reduc 1.95266 1.44034 1.356 0.17520
tradit -8.63026 3.25467 -2.652 0.00801 **
serv -0.05759 1.62920 -0.035 0.97180
avail -2.52570 1.43634 -1.758 0.07868 .
anyon 0.15305 1.25718 0.122 0.90311
small -0.64001 1.27107 -0.504 0.61460
skin 2.34537 0.99340 2.361 0.01823 *
builtin 0.67070 1.04534 0.642 0.52113
pad 2.07447 1.19926 1.730 0.08367 .
system -0.83138 0.85663 -0.971 0.33179
train 0.34564 1.16210 0.297 0.76614
altern 1.72016 1.60681 1.071 0.28438
home -1.06135 1.10663 -0.959 0.33752
tool -1.58877 1.10566 -1.437 0.15073
box 2.71502 1.47950 1.835 0.06649 .
contain -0.91460 2.02342 -0.452 0.65126
water -0.32949 0.71449 -0.461 0.64469
peopl -0.03831 0.93659 -0.041 0.96737
transform 2.02989 1.07408 1.890 0.05877 .
day 1.82357 1.87427 0.973 0.33058
real -1.78403 1.42458 -1.252 0.21045
light 1.14647 0.86203 1.330 0.18353
free -0.49292 1.77178 -0.278 0.78085
packag 6.79112 4.44347 1.528 0.12643
name 1.87736 1.61658 1.161 0.24551
now -0.88911 1.63214 -0.545 0.58592
better -2.29387 2.93279 -0.782 0.43413
comfort -2.18301 1.48263 -1.472 0.14091
varieti -2.10632 1.73416 -1.215 0.22452
treat -0.38959 1.09826 -0.355 0.72279
everi -1.35959 1.51032 -0.900 0.36801
rang 0.24244 1.53444 0.158 0.87446
drink 0.26446 1.09854 0.241 0.80976
app 0.84936 1.00202 0.848 0.39664
style -0.28261 1.11296 -0.254 0.79955
afford -1.22264 1.91491 -0.638 0.52316
dont 4.89579 2.72059 1.800 0.07193 .
simpl -0.09703 1.17915 -0.082 0.93442
great 4.36794 1.82168 2.398 0.01650 *
ratio -3.77404 1.55851 -2.422 0.01545 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 686.12 on 494 degrees of freedom
Residual deviance: 411.44 on 329 degrees of freedom
AIC: 743.44
Number of Fisher Scoring iterations: 16
pR2(dealLogit)
llh llhNull G2 McFadden r2ML r2CU
-205.7201640 -343.0583578 274.6763875 0.4003348 0.4258714 0.5678663
pred<-predict(dealLogit,dataShark,type='response')
tab<-table(Sharks$deal, pred > 0.5)
tab
FALSE TRUE
FALSE 200 44
TRUE 58 193
accuracy<-sum(diag(tab))/sum(tab)
accuracy*100
[1] 79.39394
rfShark<-randomForest(deal~.,data=dataShark,importance=T)
rfShark
Call:
randomForest(formula = deal ~ ., data = dataShark, importance = T)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 12
OOB estimate of error rate: 42.83%
Confusion matrix:
FALSE TRUE class.error
FALSE 127 117 0.4795082
TRUE 95 156 0.3784861
plot(rfShark)

varImpPlot(rfShark)

LS0tDQp0aXRsZTogIlNoYXJrIFRhbmsgUGl0Y2ggQW5hbHlzaXMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KHJwYXJ0KQ0KbGlicmFyeShycGFydC5wbG90KQ0KbGlicmFyeSh0bSkNCmxpYnJhcnkoU25vd2JhbGxDKQ0KbGlicmFyeSh3b3JkY2xvdWQpDQpsaWJyYXJ5KHBzY2wpDQpsaWJyYXJ5KHJhbmRvbUZvcmVzdCkNCmBgYA0KDQpgYGB7cn0NClNoYXJrcyA8LSByZWFkX2NzdigiRDovUEcgQnVzaW5lc3MgQW5hbHl0aWNzL1dTTUEvR3JvdXAgQXNzaWdubWVudC9TaGFyaytUYW5rK0NvbXBhbmllcyBEYXRhLmNzdiIpDQpoZWFkKFNoYXJrcykNClBpdGNoLlRvLnNoYXJrczwtU2hhcmtzJGRlc2NyaXB0aW9uDQp0YWJsZShTaGFya3MkZGVhbCkNCmBgYA0KDQpgYGB7cn0NCmNvcnB1c1NoYXJrPC1Db3JwdXMoVmVjdG9yU291cmNlKFBpdGNoLlRvLnNoYXJrcykpDQoNCndvcmRjbG91ZChjb3JwdXNTaGFyayxjb2xvcnMgPSByYWluYm93KDcpLG1heC53b3JkcyA9IDEwMCkNCmBgYA0KDQpgYGB7cn0NCmNvcnB1c1NoYXJrPC10bV9tYXAoY29ycHVzU2hhcmssdG9sb3dlcikNCmNvcnB1c1NoYXJrPC10bV9tYXAoY29ycHVzU2hhcmsscmVtb3ZlUHVuY3R1YXRpb24pDQoNCmNvcnB1c1NoYXJrPC10bV9tYXAoY29ycHVzU2hhcmsscmVtb3ZlV29yZHMsYygiY2FuIiwiYWxzbyIsc3RvcHdvcmRzKCJlbmdsaXNoIikpKQ0KY29ycHVzU2hhcms8LXRtX21hcChjb3JwdXNTaGFyayxzdGVtRG9jdW1lbnQpDQoNCndvcmRjbG91ZChjb3JwdXNTaGFyayxjb2xvcnMgPSByYWluYm93KDcpLG1heC53b3JkcyA9IDcwKQ0KYGBgDQoNCmBgYHtyfQ0KZnJlcVNoYXJrPC1Eb2N1bWVudFRlcm1NYXRyaXgoY29ycHVzU2hhcmspDQoNCnNwYXJjZVNoYXJrPC1yZW1vdmVTcGFyc2VUZXJtcyhmcmVxU2hhcmssMC45OCkNCg0KDQoNCmRhdGFTaGFyazwtZGF0YS5mcmFtZShhcy5tYXRyaXgoc3BhcmNlU2hhcmspKQ0KZGltKGRhdGFTaGFyaykNCmBgYA0KDQpgYGB7cn0NCmRhdGFTaGFyayRkZWFsPC1hcy5mYWN0b3IoU2hhcmtzJGRlYWwpDQpkYXRhU2hhcms8LWRhdGFTaGFya1ssYygxNjUsYygxOjE2NCkpXQ0Kc3RyKGRhdGFTaGFyaykNCmBgYA0KDQoNCmBgYHtyfQ0Kc2hhcmtDQVJUPC1ycGFydChkZWFsfi4sZGF0YT1kYXRhU2hhcmssbWV0aG9kPSJjbGFzcyIpDQojc2hhcmtDQVJUDQpycGFydC5wbG90KHNoYXJrQ0FSVCkNCmBgYA0KDQpgYGB7cn0NCmRlYWxMb2dpdDwtZ2xtKGRlYWx+LixkYXRhPWRhdGFTaGFyayxmYW1pbHk9ImJpbm9taWFsIikNCnN1bW1hcnkoZGVhbExvZ2l0KQ0KYGBgDQoNCmBgYHtyfQ0KcFIyKGRlYWxMb2dpdCkNCmBgYA0KDQpgYGB7cn0NCnByZWQ8LXByZWRpY3QoZGVhbExvZ2l0LGRhdGFTaGFyayx0eXBlPSdyZXNwb25zZScpDQoNCnRhYjwtdGFibGUoU2hhcmtzJGRlYWwsIHByZWQgPiAwLjUpDQp0YWINCmBgYA0KDQoNCmBgYHtyfQ0KYWNjdXJhY3k8LXN1bShkaWFnKHRhYikpL3N1bSh0YWIpDQphY2N1cmFjeSoxMDANCmBgYA0KDQoNCmBgYHtyfQ0KcmZTaGFyazwtcmFuZG9tRm9yZXN0KGRlYWx+LixkYXRhPWRhdGFTaGFyayxpbXBvcnRhbmNlPVQpDQpyZlNoYXJrDQpgYGANCg0KYGBge3J9DQpwbG90KHJmU2hhcmspDQoNCmBgYA0KDQpgYGB7cn0NCnZhckltcFBsb3QocmZTaGFyaykNCmBgYA0KDQo8aDM+Q2FsY3VsYXRpbmcgUkFUSU88L2gzPg0KYGBge3J9DQpkYXRhU2hhcmskcmF0aW88LVNoYXJrcyRhc2tlZEZvci9TaGFya3MkdmFsdWF0aW9uDQpgYGANCg0KYGBge3J9DQpzaGFya0NBUlQ8LXJwYXJ0KGRlYWx+LixkYXRhPWRhdGFTaGFyayxtZXRob2Q9ImNsYXNzIikNCiNzaGFya0NBUlQNCnJwYXJ0LnBsb3Qoc2hhcmtDQVJUKQ0KYGBgDQoNCmBgYHtyfQ0KZGVhbExvZ2l0PC1nbG0oZGVhbH4uLGRhdGE9ZGF0YVNoYXJrLGZhbWlseT0iYmlub21pYWwiKQ0Kc3VtbWFyeShkZWFsTG9naXQpDQpgYGANCg0KYGBge3J9DQpwUjIoZGVhbExvZ2l0KQ0KYGBgDQoNCmBgYHtyfQ0KcHJlZDwtcHJlZGljdChkZWFsTG9naXQsZGF0YVNoYXJrLHR5cGU9J3Jlc3BvbnNlJykNCg0KdGFiPC10YWJsZShTaGFya3MkZGVhbCwgcHJlZCA+IDAuNSkNCnRhYg0KYGBgDQoNCmBgYHtyfQ0KYWNjdXJhY3k8LXN1bShkaWFnKHRhYikpL3N1bSh0YWIpDQphY2N1cmFjeSoxMDANCmBgYA0KDQoNCmBgYHtyfQ0KcmZTaGFyazwtcmFuZG9tRm9yZXN0KGRlYWx+LixkYXRhPWRhdGFTaGFyayxpbXBvcnRhbmNlPVQpDQpyZlNoYXJrDQpgYGANCg0KYGBge3J9DQpwbG90KHJmU2hhcmspDQpgYGANCg0KDQpgYGB7cn0NCnZhckltcFBsb3QocmZTaGFyaykNCmBgYA0KDQo=