Algoritma & Struktur Data

~ Ujian Tengah Semester ~


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/saram.05/
RPubs https://rpubs.com/sausanramadhani/

Kasus 1

Asumsikan Anda telah mengumpulkan beberapa kumpulan data dari perusahaan ABC Property seperti yang dapat kita lihat pada tabel berikut:

Id             <- (1:10000)
Marketing_Name <- rep(c("Angel","Sherly","Vanessa","Irene","Julian",
                        "Jeffry","Nikita","Kefas","Siana","Lala",
                        "Fallen","Ardifo","Kevin","Juen","Jerrel",
                        "Imelda","Widi","Theodora","Elvani","Jonathan",
                        "Sofia","Abraham","Siti","Niko","Sefli",
                        "Bene", "Diana", "Pupe", "Andi", "Tatha",
                        "Endri", "Monika", "Hans", "Debora","Hanifa",
                        "James", "Jihan", "Friska","Ardiwan", "Bakti",
                        "Anthon","Amry", "Wiwik", "Bastian", "Budi",
                        "Leo","Simon","Matius","Arry", "Eliando"), 200)
Work_Exp       <- rep(c(1.3,2.4,2.5,3.6,3.7,4.7,5.7,6.7,7.7,7.3,
                        5.3,5.3,10,9.3,3.3,3.3,3.4,3.4,3.5,5.6,
                        3.5,4.6,4.6,5.7,6.2,4.4,6.4,6.4,3.5,7.5,
                        4.6,3.7,4.7,4.3,5.2,6.3,7.4,2.4,3.4,8.2,
                        6.4,7.2,1.5,7.5,10,4.5,6.5,7.2,7.1,7.6),200)
City           <- sample(c("Jakarta","Bogor","Depok","Tengerang","Bekasi"),10000, replace = T)
Cluster        <- sample(c("Victoria","Palmyra","Winona","Tiara", "Narada",
                           "Peronia","Lavesh","Alindra","Sweethome", "Asera",
                           "Teradamai","Albasia", "Adara","Neon","Arana",
                           "Asoka", "Primadona", "Mutiara","Permata","Alamanda" ), 10000, replace=T)
Price          <- sample(c(7000:15000),10000, replace = T)
Date_Sales     <- sample(seq(as.Date("2018/01/01"), by = "day", length.out = 1000),10000, replace = T)
Advertisement  <- sample(c(1:20), 10000, replace = T)
Data           <- data.frame(Id, 
                             Marketing_Name,
                             Work_Exp,
                             City,
                             Cluster,
                             Price,
                             Date_Sales,
                             Advertisement)
library(DT)
datatable(Data)
write.csv(Data,"c:\\Users\\Public\\UTS.csv", row.names = FALSE)

Soal 1

Kategorikan variabel Harga pada dataset di atas menjadi tiga kelompok sebagai berikut:

  • \(\text{High} > 12000\)
  • \(10000 \le \text{Medium} \le 12000\)
  • \(\text{Low} < 10000\)

Tetapkan ke dalam variabel baru yang disebut Kelas dengan menggunakan fungsi kontrol If, else if, dan else.

R

Data$Kelas<-ifelse(Data$Price > 12000,
                   "High",
            ifelse(Data$Price >=10000 & Data$ Price <=12000,
                   "Medium",
            ifelse(Data$Price <10000,
                   "Low",0)))
Data

Soal 2

Kategorikan variabel Harga pada dataset di atas menjadi enam kelompok sebagai berikut:

  • Booking_fee nya 5 % jika \(\text{Price} < 8000\)
  • Booking_fee nya 6 % jika \(8000 \le \text{Price} < 9000\)
  • Booking_fee nya 7 % jika \(9000 \le \text{Price} < 10000\)
  • Booking_fee nya 8 % jika \(10000 \le \text{Price} < 11000\)
  • Booking_fee nya 9 % jika \(11000 \le \text{Price} < 13000\)
  • Booking_fee nya 10 % jika \(13000 \le \text{Price} \le 15000\)

Tetapkan ke dalam variabel baru yang disebut Booking_fee dengan menggunakan fungsi kontrol If, else if, dan else.

R

x<-Data$Price
Data$Booking_fee<-ifelse(x < 8000,
                         x*5/100,
                  ifelse(x >=8000 & x <9000,
                         x*6/100,
                  ifelse(x >=9000 & x <10000,
                         x*7/100,
                  ifelse(x >=10000 & x <11000,
                         x*8/100,
                  ifelse(x >=11000 & x <13000,
                         x*9/100,
                  ifelse(x >=13000 & x <=15000,
                         x*10/100, 0))))))
Data

Soal 3

Menurut kumpulan data akhir yang telah Anda buat pada soal no 2, saya berasumsi bahwa Anda telah bekerja sebagai pemasaran di perusahaan ABC Property, bagaimana Anda dapat mengumpulkan semua informasi tentang penjualan Anda dengan menggunakan pernyataan for.

R

sales ="Sherly"

z = for(i in sales){
  print(subset(Data,
        subset=(Marketing_Name == i)))
}
##        Id Marketing_Name Work_Exp      City   Cluster Price Date_Sales
## 2       2         Sherly      2.4 Tengerang   Permata 14740 2020-06-06
## 52     52         Sherly      2.4 Tengerang Sweethome  9730 2019-09-28
## 102   102         Sherly      2.4     Bogor  Victoria  7667 2018-12-27
## 152   152         Sherly      2.4     Bogor    Winona  8210 2019-03-13
## 202   202         Sherly      2.4     Bogor     Adara 12719 2019-03-05
## 252   252         Sherly      2.4     Depok  Alamanda 14040 2018-09-09
## 302   302         Sherly      2.4    Bekasi     Adara 12516 2019-08-20
## 352   352         Sherly      2.4     Depok    Lavesh  8801 2018-08-12
## 402   402         Sherly      2.4   Jakarta   Mutiara  9327 2019-06-19
## 452   452         Sherly      2.4     Bogor     Tiara 14741 2019-11-30
## 502   502         Sherly      2.4     Bogor    Narada 12531 2019-08-26
## 552   552         Sherly      2.4    Bekasi    Narada 10383 2019-01-10
## 602   602         Sherly      2.4     Depok   Palmyra 10082 2019-06-27
## 652   652         Sherly      2.4     Bogor   Palmyra 14415 2019-10-07
## 702   702         Sherly      2.4     Bogor     Asera  9099 2020-06-16
## 752   752         Sherly      2.4 Tengerang Teradamai 12682 2019-12-22
## 802   802         Sherly      2.4 Tengerang     Asoka 12405 2019-03-30
## 852   852         Sherly      2.4    Bekasi     Arana 11227 2020-04-07
## 902   902         Sherly      2.4     Bogor     Adara  7844 2018-07-22
## 952   952         Sherly      2.4     Bogor     Asoka  9411 2019-09-10
## 1002 1002         Sherly      2.4   Jakarta Teradamai 14086 2019-03-21
## 1052 1052         Sherly      2.4     Depok   Mutiara  8313 2020-09-07
## 1102 1102         Sherly      2.4 Tengerang   Alindra  8175 2020-04-30
## 1152 1152         Sherly      2.4     Bogor  Alamanda 12830 2018-08-03
## 1202 1202         Sherly      2.4    Bekasi     Tiara  9274 2020-01-27
## 1252 1252         Sherly      2.4   Jakarta Teradamai 10224 2019-02-12
## 1302 1302         Sherly      2.4     Depok    Narada  9242 2019-08-04
## 1352 1352         Sherly      2.4     Bogor   Mutiara 11509 2019-01-27
## 1402 1402         Sherly      2.4 Tengerang     Tiara 12003 2018-08-26
## 1452 1452         Sherly      2.4     Bogor   Permata 11621 2020-07-31
## 1502 1502         Sherly      2.4    Bekasi   Peronia 13599 2018-08-31
## 1552 1552         Sherly      2.4     Depok   Peronia  8320 2019-01-30
## 1602 1602         Sherly      2.4     Depok   Peronia  7543 2018-05-17
## 1652 1652         Sherly      2.4    Bekasi     Adara 10639 2019-10-29
## 1702 1702         Sherly      2.4 Tengerang     Tiara  7448 2018-06-20
## 1752 1752         Sherly      2.4   Jakarta  Victoria  9209 2019-05-31
## 1802 1802         Sherly      2.4     Depok    Narada  7180 2020-06-09
## 1852 1852         Sherly      2.4 Tengerang     Arana  9578 2018-10-14
## 1902 1902         Sherly      2.4     Bogor   Peronia  8576 2018-04-12
## 1952 1952         Sherly      2.4    Bekasi  Victoria  8406 2018-06-19
## 2002 2002         Sherly      2.4    Bekasi     Arana  7263 2018-07-27
## 2052 2052         Sherly      2.4     Depok   Mutiara  9158 2019-10-30
## 2102 2102         Sherly      2.4   Jakarta    Lavesh 14118 2018-03-21
## 2152 2152         Sherly      2.4     Depok Teradamai  9787 2019-03-09
## 2202 2202         Sherly      2.4 Tengerang     Tiara 10665 2018-11-10
## 2252 2252         Sherly      2.4     Bogor      Neon 13808 2018-04-07
## 2302 2302         Sherly      2.4     Bogor     Asera 13220 2018-04-03
## 2352 2352         Sherly      2.4     Depok     Tiara 10843 2019-06-07
## 2402 2402         Sherly      2.4 Tengerang     Asoka  9770 2019-06-24
## 2452 2452         Sherly      2.4     Bogor  Victoria 11612 2020-06-08
## 2502 2502         Sherly      2.4     Bogor   Peronia  9410 2020-04-11
## 2552 2552         Sherly      2.4     Bogor   Peronia  9477 2019-03-03
## 2602 2602         Sherly      2.4    Bekasi   Palmyra 10081 2018-05-18
## 2652 2652         Sherly      2.4   Jakarta   Albasia 11602 2019-05-30
## 2702 2702         Sherly      2.4     Bogor   Mutiara  8050 2018-08-10
## 2752 2752         Sherly      2.4 Tengerang Primadona  9863 2020-07-03
## 2802 2802         Sherly      2.4 Tengerang    Narada  7625 2020-06-10
## 2852 2852         Sherly      2.4     Depok   Mutiara  8147 2019-07-07
## 2902 2902         Sherly      2.4     Bogor     Asoka 11142 2018-03-05
## 2952 2952         Sherly      2.4     Bogor   Permata 13553 2019-08-05
## 3002 3002         Sherly      2.4     Bogor   Alindra  8964 2018-09-05
## 3052 3052         Sherly      2.4 Tengerang     Adara 12180 2019-03-08
## 3102 3102         Sherly      2.4     Depok     Asoka 11672 2019-11-01
## 3152 3152         Sherly      2.4    Bekasi   Palmyra 13846 2018-06-07
## 3202 3202         Sherly      2.4 Tengerang    Winona 13338 2020-08-28
## 3252 3252         Sherly      2.4     Depok   Palmyra 13345 2020-06-10
## 3302 3302         Sherly      2.4   Jakarta  Victoria 10522 2018-07-01
## 3352 3352         Sherly      2.4   Jakarta   Mutiara 12974 2018-06-11
## 3402 3402         Sherly      2.4     Depok   Palmyra 11755 2018-01-15
## 3452 3452         Sherly      2.4     Bogor    Winona  8640 2019-01-14
## 3502 3502         Sherly      2.4    Bekasi   Palmyra 12690 2019-10-31
## 3552 3552         Sherly      2.4 Tengerang    Winona 10783 2020-01-23
## 3602 3602         Sherly      2.4 Tengerang     Tiara 10667 2020-05-26
## 3652 3652         Sherly      2.4   Jakarta   Alindra 14351 2019-12-28
## 3702 3702         Sherly      2.4 Tengerang   Albasia  9333 2019-06-23
## 3752 3752         Sherly      2.4     Depok     Tiara 12222 2020-03-02
## 3802 3802         Sherly      2.4     Depok    Narada  8690 2020-05-19
## 3852 3852         Sherly      2.4 Tengerang      Neon 11212 2018-06-24
## 3902 3902         Sherly      2.4     Bogor   Alindra 11129 2019-09-11
## 3952 3952         Sherly      2.4 Tengerang   Permata  8522 2018-10-30
## 4002 4002         Sherly      2.4     Bogor     Asera  7799 2019-11-10
## 4052 4052         Sherly      2.4   Jakarta Primadona 14194 2019-03-23
## 4102 4102         Sherly      2.4    Bekasi     Adara  8704 2020-01-04
## 4152 4152         Sherly      2.4     Bogor      Neon  9550 2019-06-29
## 4202 4202         Sherly      2.4 Tengerang Teradamai 14887 2019-05-20
## 4252 4252         Sherly      2.4   Jakarta   Mutiara 13643 2018-09-28
## 4302 4302         Sherly      2.4 Tengerang Sweethome 10622 2019-07-01
## 4352 4352         Sherly      2.4     Bogor Primadona 10250 2020-04-30
## 4402 4402         Sherly      2.4     Bogor Teradamai  8708 2020-05-16
## 4452 4452         Sherly      2.4     Bogor   Peronia 14345 2020-04-19
## 4502 4502         Sherly      2.4     Bogor    Narada 11448 2018-12-23
## 4552 4552         Sherly      2.4 Tengerang Sweethome  8565 2018-03-21
## 4602 4602         Sherly      2.4    Bekasi   Mutiara  8050 2020-02-17
## 4652 4652         Sherly      2.4     Depok    Narada 12577 2019-11-10
## 4702 4702         Sherly      2.4     Depok   Albasia 10643 2019-01-05
## 4752 4752         Sherly      2.4 Tengerang   Permata  8546 2018-10-15
## 4802 4802         Sherly      2.4     Depok     Adara 12543 2020-04-04
## 4852 4852         Sherly      2.4 Tengerang Teradamai  7589 2019-06-06
## 4902 4902         Sherly      2.4 Tengerang Primadona 10275 2019-03-19
## 4952 4952         Sherly      2.4     Depok  Alamanda 14495 2019-02-10
## 5002 5002         Sherly      2.4   Jakarta   Permata 14878 2018-08-29
## 5052 5052         Sherly      2.4 Tengerang   Permata  7904 2018-07-29
## 5102 5102         Sherly      2.4 Tengerang      Neon 12867 2019-11-13
## 5152 5152         Sherly      2.4     Bogor Primadona 11737 2020-02-24
## 5202 5202         Sherly      2.4    Bekasi     Tiara  8904 2018-11-20
## 5252 5252         Sherly      2.4   Jakarta Primadona 13547 2020-01-21
## 5302 5302         Sherly      2.4 Tengerang Primadona  9427 2018-05-14
## 5352 5352         Sherly      2.4 Tengerang   Albasia  8160 2019-08-05
## 5402 5402         Sherly      2.4 Tengerang    Narada 10947 2018-06-30
## 5452 5452         Sherly      2.4     Bogor    Narada 11122 2019-11-01
## 5502 5502         Sherly      2.4   Jakarta   Alindra  9601 2018-04-30
## 5552 5552         Sherly      2.4     Bogor Teradamai  9038 2020-07-17
## 5602 5602         Sherly      2.4   Jakarta  Victoria  8778 2018-10-24
## 5652 5652         Sherly      2.4   Jakarta   Alindra 10051 2019-12-22
## 5702 5702         Sherly      2.4     Bogor Primadona 11091 2019-09-09
## 5752 5752         Sherly      2.4   Jakarta  Alamanda  9624 2020-01-08
## 5802 5802         Sherly      2.4   Jakarta Primadona 13524 2018-03-28
## 5852 5852         Sherly      2.4   Jakarta   Permata 10219 2018-05-26
## 5902 5902         Sherly      2.4     Depok    Lavesh 11237 2020-09-08
## 5952 5952         Sherly      2.4    Bekasi   Permata 11752 2020-08-02
## 6002 6002         Sherly      2.4   Jakarta Primadona 13321 2020-08-26
## 6052 6052         Sherly      2.4   Jakarta     Asera 11067 2020-06-21
## 6102 6102         Sherly      2.4   Jakarta   Permata 13456 2018-12-10
## 6152 6152         Sherly      2.4     Bogor  Victoria 11520 2020-08-11
## 6202 6202         Sherly      2.4     Bogor     Asera  8913 2018-09-06
## 6252 6252         Sherly      2.4    Bekasi      Neon  9449 2019-03-31
## 6302 6302         Sherly      2.4    Bekasi     Asera 12765 2019-03-19
## 6352 6352         Sherly      2.4     Bogor    Winona 14078 2018-04-18
## 6402 6402         Sherly      2.4     Bogor     Adara  7331 2019-09-25
## 6452 6452         Sherly      2.4 Tengerang    Winona  7040 2018-01-15
## 6502 6502         Sherly      2.4    Bekasi   Albasia  8472 2019-01-25
## 6552 6552         Sherly      2.4    Bekasi    Narada 13897 2019-09-14
## 6602 6602         Sherly      2.4     Bogor   Mutiara  7475 2018-12-27
## 6652 6652         Sherly      2.4     Depok   Albasia  7364 2020-06-28
## 6702 6702         Sherly      2.4 Tengerang Sweethome  9027 2018-06-15
## 6752 6752         Sherly      2.4   Jakarta    Lavesh  9877 2020-09-03
## 6802 6802         Sherly      2.4    Bekasi  Victoria 12921 2019-11-19
## 6852 6852         Sherly      2.4     Bogor  Victoria 13624 2019-05-05
## 6902 6902         Sherly      2.4 Tengerang   Alindra  8363 2018-09-05
## 6952 6952         Sherly      2.4     Bogor    Winona 13116 2019-07-22
## 7002 7002         Sherly      2.4     Bogor   Mutiara 10445 2019-05-31
## 7052 7052         Sherly      2.4   Jakarta     Arana 10312 2019-11-27
## 7102 7102         Sherly      2.4 Tengerang  Victoria  9022 2020-06-28
## 7152 7152         Sherly      2.4     Depok     Arana  8558 2019-06-18
## 7202 7202         Sherly      2.4   Jakarta     Adara 10027 2018-08-07
## 7252 7252         Sherly      2.4    Bekasi  Victoria 10890 2020-07-10
## 7302 7302         Sherly      2.4     Bogor   Permata  7985 2018-04-13
## 7352 7352         Sherly      2.4     Depok Primadona  8174 2018-07-07
## 7402 7402         Sherly      2.4    Bekasi   Mutiara 10002 2020-02-20
## 7452 7452         Sherly      2.4    Bekasi Sweethome 13945 2019-05-22
## 7502 7502         Sherly      2.4     Bogor     Adara 14529 2018-05-21
## 7552 7552         Sherly      2.4 Tengerang   Peronia  7885 2020-05-17
## 7602 7602         Sherly      2.4 Tengerang    Winona 12363 2019-02-03
## 7652 7652         Sherly      2.4 Tengerang     Asera  8598 2019-08-17
## 7702 7702         Sherly      2.4 Tengerang    Winona  7885 2018-11-18
## 7752 7752         Sherly      2.4    Bekasi   Permata 13320 2018-06-18
## 7802 7802         Sherly      2.4    Bekasi   Mutiara 14779 2018-08-10
## 7852 7852         Sherly      2.4    Bekasi    Lavesh 13620 2019-02-13
## 7902 7902         Sherly      2.4   Jakarta    Lavesh  9719 2018-01-24
## 7952 7952         Sherly      2.4 Tengerang Sweethome 11244 2020-02-02
## 8002 8002         Sherly      2.4     Depok     Asera  9645 2020-06-03
## 8052 8052         Sherly      2.4 Tengerang Teradamai  9221 2018-11-22
## 8102 8102         Sherly      2.4     Depok     Tiara  8542 2019-09-27
## 8152 8152         Sherly      2.4    Bekasi Teradamai  8196 2019-08-21
## 8202 8202         Sherly      2.4   Jakarta     Asoka 11625 2019-11-15
## 8252 8252         Sherly      2.4   Jakarta Teradamai 13894 2018-11-07
## 8302 8302         Sherly      2.4    Bekasi   Albasia 10298 2019-04-12
## 8352 8352         Sherly      2.4    Bekasi Sweethome 13582 2018-10-05
## 8402 8402         Sherly      2.4   Jakarta     Arana 11345 2020-04-22
## 8452 8452         Sherly      2.4    Bekasi Sweethome 10301 2018-09-15
## 8502 8502         Sherly      2.4     Bogor   Mutiara  8790 2018-10-06
## 8552 8552         Sherly      2.4    Bekasi     Arana  7477 2018-04-07
## 8602 8602         Sherly      2.4     Bogor     Asoka 10404 2019-09-11
## 8652 8652         Sherly      2.4    Bekasi Teradamai 13774 2019-01-22
## 8702 8702         Sherly      2.4     Depok     Asera 10363 2018-04-23
## 8752 8752         Sherly      2.4     Bogor     Tiara 10550 2018-03-19
## 8802 8802         Sherly      2.4     Depok    Winona 11701 2019-09-13
## 8852 8852         Sherly      2.4   Jakarta    Winona 10788 2019-04-30
## 8902 8902         Sherly      2.4   Jakarta   Permata  8998 2019-06-10
## 8952 8952         Sherly      2.4     Depok     Adara 10731 2018-07-29
## 9002 9002         Sherly      2.4     Bogor Sweethome  8794 2020-02-26
## 9052 9052         Sherly      2.4    Bekasi     Adara  8358 2018-02-09
## 9102 9102         Sherly      2.4     Bogor    Narada 13218 2019-06-28
## 9152 9152         Sherly      2.4   Jakarta  Victoria 11541 2018-11-28
## 9202 9202         Sherly      2.4   Jakarta    Lavesh 13402 2019-03-14
## 9252 9252         Sherly      2.4     Bogor    Narada 14641 2018-12-03
## 9302 9302         Sherly      2.4     Bogor   Peronia 11258 2020-08-12
## 9352 9352         Sherly      2.4     Bogor    Winona 11291 2020-03-30
## 9402 9402         Sherly      2.4 Tengerang Primadona 13362 2019-06-12
## 9452 9452         Sherly      2.4     Bogor     Tiara 12924 2019-11-03
## 9502 9502         Sherly      2.4 Tengerang    Narada 14250 2018-06-24
## 9552 9552         Sherly      2.4 Tengerang   Mutiara 12275 2018-03-09
## 9602 9602         Sherly      2.4 Tengerang     Arana  7729 2020-04-28
## 9652 9652         Sherly      2.4    Bekasi  Victoria  9619 2019-05-21
## 9702 9702         Sherly      2.4   Jakarta    Narada 12595 2019-07-26
## 9752 9752         Sherly      2.4    Bekasi   Permata 11851 2020-05-23
## 9802 9802         Sherly      2.4 Tengerang   Alindra 13210 2020-02-02
## 9852 9852         Sherly      2.4 Tengerang   Peronia 13180 2020-02-05
## 9902 9902         Sherly      2.4     Depok     Arana 12816 2018-10-30
## 9952 9952         Sherly      2.4     Bogor    Lavesh 10963 2019-10-18
##      Advertisement  Kelas Booking_fee
## 2                1   High     1474.00
## 52               9    Low      681.10
## 102              5    Low      383.35
## 152              2    Low      492.60
## 202             18   High     1144.71
## 252              6   High     1404.00
## 302             18   High     1126.44
## 352             10    Low      528.06
## 402             11    Low      652.89
## 452             15   High     1474.10
## 502              4   High     1127.79
## 552              9 Medium      830.64
## 602             17 Medium      806.56
## 652             10   High     1441.50
## 702             12    Low      636.93
## 752              5   High     1141.38
## 802             15   High     1116.45
## 852              4 Medium     1010.43
## 902             14    Low      392.20
## 952              1    Low      658.77
## 1002             1   High     1408.60
## 1052            12    Low      498.78
## 1102             7    Low      490.50
## 1152            10   High     1154.70
## 1202            15    Low      649.18
## 1252            11 Medium      817.92
## 1302            20    Low      646.94
## 1352             2 Medium     1035.81
## 1402             6   High     1080.27
## 1452             9 Medium     1045.89
## 1502            18   High     1359.90
## 1552            17    Low      499.20
## 1602            10    Low      377.15
## 1652             7 Medium      851.12
## 1702             8    Low      372.40
## 1752            16    Low      644.63
## 1802             1    Low      359.00
## 1852            15    Low      670.46
## 1902             3    Low      514.56
## 1952            17    Low      504.36
## 2002            15    Low      363.15
## 2052            15    Low      641.06
## 2102            18   High     1411.80
## 2152            19    Low      685.09
## 2202            19 Medium      853.20
## 2252             4   High     1380.80
## 2302             7   High     1322.00
## 2352            19 Medium      867.44
## 2402            12    Low      683.90
## 2452            15 Medium     1045.08
## 2502             2    Low      658.70
## 2552             7    Low      663.39
## 2602            14 Medium      806.48
## 2652            15 Medium     1044.18
## 2702            17    Low      483.00
## 2752            17    Low      690.41
## 2802             2    Low      381.25
## 2852             9    Low      488.82
## 2902            13 Medium     1002.78
## 2952            15   High     1355.30
## 3002             5    Low      537.84
## 3052            13   High     1096.20
## 3102             2 Medium     1050.48
## 3152            16   High     1384.60
## 3202            17   High     1333.80
## 3252             3   High     1334.50
## 3302            20 Medium      841.76
## 3352             7   High     1167.66
## 3402             6 Medium     1057.95
## 3452             5    Low      518.40
## 3502             8   High     1142.10
## 3552             5 Medium      862.64
## 3602             2 Medium      853.36
## 3652            18   High     1435.10
## 3702            20    Low      653.31
## 3752            10   High     1099.98
## 3802             2    Low      521.40
## 3852             2 Medium     1009.08
## 3902             7 Medium     1001.61
## 3952            14    Low      511.32
## 4002            10    Low      389.95
## 4052            11   High     1419.40
## 4102             6    Low      522.24
## 4152            18    Low      668.50
## 4202             5   High     1488.70
## 4252             5   High     1364.30
## 4302            14 Medium      849.76
## 4352            20 Medium      820.00
## 4402             3    Low      522.48
## 4452             8   High     1434.50
## 4502             4 Medium     1030.32
## 4552            10    Low      513.90
## 4602             1    Low      483.00
## 4652             3   High     1131.93
## 4702             8 Medium      851.44
## 4752            19    Low      512.76
## 4802             4   High     1128.87
## 4852            15    Low      379.45
## 4902            11 Medium      822.00
## 4952            20   High     1449.50
## 5002             8   High     1487.80
## 5052            15    Low      395.20
## 5102             8   High     1158.03
## 5152             2 Medium     1056.33
## 5202            12    Low      534.24
## 5252            18   High     1354.70
## 5302             5    Low      659.89
## 5352             2    Low      489.60
## 5402             4 Medium      875.76
## 5452             4 Medium     1000.98
## 5502             4    Low      672.07
## 5552            15    Low      632.66
## 5602            19    Low      526.68
## 5652            15 Medium      804.08
## 5702            11 Medium      998.19
## 5752             4    Low      673.68
## 5802            11   High     1352.40
## 5852            14 Medium      817.52
## 5902             3 Medium     1011.33
## 5952            12 Medium     1057.68
## 6002            15   High     1332.10
## 6052            13 Medium      996.03
## 6102            13   High     1345.60
## 6152            15 Medium     1036.80
## 6202             7    Low      534.78
## 6252            17    Low      661.43
## 6302            15   High     1148.85
## 6352            13   High     1407.80
## 6402             2    Low      366.55
## 6452            14    Low      352.00
## 6502            10    Low      508.32
## 6552             4   High     1389.70
## 6602             1    Low      373.75
## 6652             7    Low      368.20
## 6702             5    Low      631.89
## 6752            10    Low      691.39
## 6802             9   High     1162.89
## 6852            15   High     1362.40
## 6902            20    Low      501.78
## 6952            17   High     1311.60
## 7002            18 Medium      835.60
## 7052            16 Medium      824.96
## 7102             2    Low      631.54
## 7152             3    Low      513.48
## 7202            10 Medium      802.16
## 7252            14 Medium      871.20
## 7302             9    Low      399.25
## 7352             9    Low      490.44
## 7402            14 Medium      800.16
## 7452             8   High     1394.50
## 7502            15   High     1452.90
## 7552            13    Low      394.25
## 7602             9   High     1112.67
## 7652             5    Low      515.88
## 7702            13    Low      394.25
## 7752             2   High     1332.00
## 7802             7   High     1477.90
## 7852            10   High     1362.00
## 7902            14    Low      680.33
## 7952             2 Medium     1011.96
## 8002             4    Low      675.15
## 8052             9    Low      645.47
## 8102             5    Low      512.52
## 8152             7    Low      491.76
## 8202            10 Medium     1046.25
## 8252            19   High     1389.40
## 8302            18 Medium      823.84
## 8352             3   High     1358.20
## 8402             3 Medium     1021.05
## 8452            20 Medium      824.08
## 8502            20    Low      527.40
## 8552            15    Low      373.85
## 8602             6 Medium      832.32
## 8652            16   High     1377.40
## 8702             9 Medium      829.04
## 8752            16 Medium      844.00
## 8802            20 Medium     1053.09
## 8852            16 Medium      863.04
## 8902             6    Low      539.88
## 8952            13 Medium      858.48
## 9002             2    Low      527.64
## 9052             7    Low      501.48
## 9102             8   High     1321.80
## 9152            17 Medium     1038.69
## 9202            16   High     1340.20
## 9252             1   High     1464.10
## 9302            20 Medium     1013.22
## 9352             5 Medium     1016.19
## 9402            12   High     1336.20
## 9452             9   High     1163.16
## 9502            19   High     1425.00
## 9552             8   High     1104.75
## 9602            11    Low      386.45
## 9652             9    Low      673.33
## 9702             1   High     1133.55
## 9752             1 Medium     1066.59
## 9802            12   High     1321.00
## 9852             9   High     1318.00
## 9902             3   High     1153.44
## 9952             7 Medium      877.04
i
## [1] "Sherly"

Soal 4

Jika Anda akan mendapatkan bonus 2% dari Booking fee per unit sebagai pemasaran dan juga mendapatkan bonus tambahan 1% jika Anda telah bekerja di perusahaan ini selama lebih dari 3 tahun. Silakan hitung total bonus dengan menggunakan pernyataan if, for, dan break.

R

Total_Bonus=subset(Data,
            subset = Marketing_Name == "Sherly")
Data$Total_Bonus<-ifelse(Total_Bonus$Work_Exp >3,
                         Total_Bonus$Booking_fee*(2/100+1/100),Total_Bonus$Booking_fee*2/100)
Data

Soal 5

Pada bagian ini, Anda diharapkan dapat membuat fungsi yang dapat menjawab setiap penyataan dibawah ini dengan melibatkan setiap fungsi kontrol yang dipelajari pada pertemuan 7.

  • Siapa nama marketing pemasaran terbaik?
  • Kota dan Cluster mana yang paling menguntungkan?
  • Hitung total biaya iklan Anda, jika Anda harus membayarnya $4 setiap kali iklan.
  • Hitung rata-rata biaya iklan untuk setiap marketing di Perusahaan tersebut.
  • Hitung Total Pendapatan (dalam Bulanan)

R

# Data
Angel=subset(Data,subset = (Marketing_Name=="Angel"))
Sherly=subset(Data,subset = (Marketing_Name=="Sherly"))
Vanessa=subset(Data,subset = (Marketing_Name=="Vanessa"))
Irene=subset(Data,subset = (Marketing_Name=="Irene"))
Julian=subset(Data,subset = (Marketing_Name=="Julian"))
Jeffry=subset(Data,subset = (Marketing_Name=="Jeffry"))
Nikita=subset(Data,subset = (Marketing_Name=="Nikita"))
Kefas=subset(Data,subset = (Marketing_Name=="Kefas"))
Siana=subset(Data,subset = (Marketing_Name=="Siana"))
Lala=subset(Data,subset = (Marketing_Name=="Lala"))
Fallen=subset(Data,subset = (Marketing_Name=="Fallen"))
Ardifo=subset(Data,subset = (Marketing_Name=="Ardifo"))
Kevin=subset(Data,subset = (Marketing_Name=="Kevin"))
Juen=subset(Data,subset = (Marketing_Name=="Juen"))
Jerrel=subset(Data,subset = (Marketing_Name=="Jerrel"))
Imelda=subset(Data,subset = (Marketing_Name=="Imelda"))
Widi=subset(Data,subset = (Marketing_Name=="Widi"))
Theodora=subset(Data,subset = (Marketing_Name=="Theodora"))
Elvani=subset(Data,subset = (Marketing_Name=="Elvani"))
Jonathan=subset(Data,subset = (Marketing_Name=="Jonathan"))
Sofia=subset(Data,subset = (Marketing_Name=="Sofia"))
Abraham=subset(Data,subset = (Marketing_Name=="Abraham"))
Siti=subset(Data,subset = (Marketing_Name=="Siti"))
Niko=subset(Data,subset = (Marketing_Name=="Niko"))
Sefli=subset(Data,subset = (Marketing_Name=="Sefli"))
Bene=subset(Data,subset = (Marketing_Name=="Bene"))
Diana=subset(Data,subset = (Marketing_Name=="Diana"))
Pupe=subset(Data,subset = (Marketing_Name=="Pupe"))
Andi=subset(Data,subset = (Marketing_Name=="Andi"))
Tatha=subset(Data,subset = (Marketing_Name=="Tatha"))
Endri=subset(Data,subset = (Marketing_Name=="Endri"))
Monika=subset(Data,subset = (Marketing_Name=="Monika"))
Hans=subset(Data,subset = (Marketing_Name=="Hans"))
Debora=subset(Data,subset = (Marketing_Name=="Debora"))
Hanifa=subset(Data,subset = (Marketing_Name=="Hanifa"))
James=subset(Data,subset = (Marketing_Name=="James"))
Jihan=subset(Data,subset = (Marketing_Name=="Jihan"))
Friska=subset(Data,subset = (Marketing_Name=="Friska"))
Ardiwan=subset(Data,subset = (Marketing_Name=="Ardiwan"))
Bakti=subset(Data,subset = (Marketing_Name=="Bakti"))
Anthon=subset(Data,subset = (Marketing_Name=="Anthon"))
Amry=subset(Data,subset = (Marketing_Name=="Amry"))
Wiwik=subset(Data,subset = (Marketing_Name=="Wiwik"))
Bastian=subset(Data,subset = (Marketing_Name=="Bastian"))
Budi=subset(Data,subset = (Marketing_Name=="Budi"))
Leo=subset(Data,subset = (Marketing_Name=="Leo"))
Simon=subset(Data,subset = (Marketing_Name=="Simon"))
Matius=subset(Data,subset = (Marketing_Name=="Matius"))
Arry=subset(Data,subset = (Marketing_Name=="Arry"))
Eliando=subset(Data,subset = (Marketing_Name=="Eliando"))

Nama_Sales = c("Angel","Sherly","Vanessa","Irene","Julian",
                        "Jeffry","Nikita","Kefas","Siana","Lala",
                        "Fallen","Ardifo","Kevin","Juen","Jerrel",
                        "Imelda","Widi","Theodora","Elvani","Jonathan",
                        "Sofia","Abraham","Siti","Niko","Sefli",
                        "Bene", "Diana", "Pupe", "Andi", "Tatha",
                        "Endri", "Monika", "Hans", "Debora","Hanifa",
                        "James", "Jihan", "Friska","Ardiwan", "Bakti",
                        "Anthon","Amry", "Wiwik", "Bastian", "Budi",
                        "Leo","Simon","Matius","Arry", "Eliando")
propertysold = c(sum(Angel$Price),sum(Sherly$Price),sum(Vanessa$Price),sum(Irene$Price),sum(Julian$Price),sum(Jeffry$Price),sum(Nikita$Price),sum(Kefas$Price),sum(Siana$Price),sum(Lala$Price),sum(Fallen$Price),sum(Ardifo$Price),sum(Kevin$Price),sum(Juen$Price),sum(Jerrel$Price),sum(Imelda$Price),sum(Widi$Price),sum(Theodora$Price),sum(Elvani$Price),sum(Jonathan$Price),sum(Sofia$Price),sum(Abraham$Price),sum(Siti$Price),sum(Niko$Price),sum(Sefli$Price),sum(Bene$Price),sum(Diana$Price),sum(Pupe$Price),sum(Andi$Price),sum(Tatha$Price),sum(Endri$Price),sum(Monika$Price),sum(Hans$Price),sum(Debora$Price),sum(Hanifa$Price),sum(James$Price),sum(Jihan$Price),sum(Friska$Price),sum(Ardiwan$Price),sum(Bakti$Price),sum(Anthon$Price),sum(Amry$Price),sum(Wiwik$Price),sum(Bastian$Price),sum(Budi$Price),sum(Leo$Price),sum(Simon$Price),sum(Matius$Price),sum(Arry$Price),sum(Eliando$Price))
datamarketing=data.frame(Nama_Sales, propertysold)

datamarketing
datamarketing[which.max(datamarketing$propertysold),]    # Marketing Pemasaran Terbaik
# Kota dan Cluster yang paling menguntungkan
profitable= Data[,c("City","Cluster","Price")]
profitable[which.max(profitable$Price),]
# total biaya iklan Anda, jika Anda harus membayarnya $4 setiap kali iklan
costforad  = subset(Data,subset = (Marketing_Name=="Sheryl"))
adscost    = (costforad$Advertisement*4)
total_cost = print(sum(adscost))
## [1] 0
# rata-rata biaya iklan untuk setiap marketing di Perusahaan tersebut
Nama_Sales = c("Angel","Sherly","Vanessa","Irene","Julian",
                        "Jeffry","Nikita","Kefas","Siana","Lala",
                        "Fallen","Ardifo","Kevin","Juen","Jerrel",
                        "Imelda","Widi","Theodora","Elvani","Jonathan",
                        "Sofia","Abraham","Siti","Niko","Sefli",
                        "Bene", "Diana", "Pupe", "Andi", "Tatha",
                        "Endri", "Monika", "Hans", "Debora","Hanifa",
                        "James", "Jihan", "Friska","Ardiwan", "Bakti",
                        "Anthon","Amry", "Wiwik", "Bastian", "Budi",
                        "Leo","Simon","Matius","Arry", "Eliando")
ratacost = for (x in Nama_Sales) {
  f=subset(Data, subset = (Marketing_Name==x))
  c=sum(f$Advertisement*4)
  print(cat(sum(c)/length(f$Id),(cat(x,'rata-rata biaya iklan'))))
}
## Angel rata-rata biaya iklan44.96NULL
## Sherly rata-rata biaya iklan40.7NULL
## Vanessa rata-rata biaya iklan41.36NULL
## Irene rata-rata biaya iklan44NULL
## Julian rata-rata biaya iklan42.9NULL
## Jeffry rata-rata biaya iklan40.22NULL
## Nikita rata-rata biaya iklan42.16NULL
## Kefas rata-rata biaya iklan43.66NULL
## Siana rata-rata biaya iklan41.8NULL
## Lala rata-rata biaya iklan43.58NULL
## Fallen rata-rata biaya iklan43.34NULL
## Ardifo rata-rata biaya iklan41.6NULL
## Kevin rata-rata biaya iklan44.32NULL
## Juen rata-rata biaya iklan43NULL
## Jerrel rata-rata biaya iklan42.16NULL
## Imelda rata-rata biaya iklan42.94NULL
## Widi rata-rata biaya iklan42.52NULL
## Theodora rata-rata biaya iklan39.1NULL
## Elvani rata-rata biaya iklan45.02NULL
## Jonathan rata-rata biaya iklan45.22NULL
## Sofia rata-rata biaya iklan42.46NULL
## Abraham rata-rata biaya iklan42.18NULL
## Siti rata-rata biaya iklan42.22NULL
## Niko rata-rata biaya iklan42.7NULL
## Sefli rata-rata biaya iklan42.58NULL
## Bene rata-rata biaya iklan40.26NULL
## Diana rata-rata biaya iklan41.12NULL
## Pupe rata-rata biaya iklan42.4NULL
## Andi rata-rata biaya iklan42.5NULL
## Tatha rata-rata biaya iklan44.2NULL
## Endri rata-rata biaya iklan42.78NULL
## Monika rata-rata biaya iklan42.22NULL
## Hans rata-rata biaya iklan42.88NULL
## Debora rata-rata biaya iklan43.72NULL
## Hanifa rata-rata biaya iklan44.44NULL
## James rata-rata biaya iklan41.6NULL
## Jihan rata-rata biaya iklan44.76NULL
## Friska rata-rata biaya iklan41.6NULL
## Ardiwan rata-rata biaya iklan41.44NULL
## Bakti rata-rata biaya iklan43.32NULL
## Anthon rata-rata biaya iklan42.72NULL
## Amry rata-rata biaya iklan42.82NULL
## Wiwik rata-rata biaya iklan41.36NULL
## Bastian rata-rata biaya iklan38.58NULL
## Budi rata-rata biaya iklan41.34NULL
## Leo rata-rata biaya iklan42.34NULL
## Simon rata-rata biaya iklan43.88NULL
## Matius rata-rata biaya iklan42.06NULL
## Arry rata-rata biaya iklan38.82NULL
## Eliando rata-rata biaya iklan43.26NULL
# Total Pendapatan (dalam Bulanan)
revenue=(sum(Data$Price)-(sum(Data$Advertisement)*4))/((max(Data$Work_Exp))*12)
revenue
## [1] 909522.6

Kasus 2

Misalkan Anda memiliki proyek riset pasar untuk mempertahankan beberapa pelanggan potensial di perusahaan Anda. Mari kita asumsikan Anda bekerja di perusahaan asuransi ABC. Untuk melakukannya, Anda ingin mengumpulkan kumpulan data berikut:

  • Marital_Status : menetapkan status perkawinan acak (“Ya”, “Tidak”)
  • Address : berikan alamat acak (JABODETABEK)
  • Work_Location : menetapkan lokasi kerja secara acak (JABODETABEK)
  • Age : menetapkan urutan angka acak (dari 19 hingga 60)
  • Academic : menetapkan tingkat akademik acak (“J.School”, “H.School”, “Sarjana”, “Magister”, “Phd”)
  • Job : 10 pekerjaan acak untuk setiap tingkat akademik
  • Grade : 5 nilai acak untuk setiap Pekerjaan
  • Income : tetapkan pendapatan yang mungkin untuk setiap Pekerjaan
  • Spending : tetapkan kemungkinan pengeluaran untuk setiap Pekerjaan
  • Number_of_children: menetapkan nomor acak di antara 0 dan 10 (sesuai dengan status perkawinan)
  • Private_vehicle : menetapkan kemungkinan kendaraan pribadi untuk setiap orang (“Mobil”, “sepeda motor”, “Umum”)
  • Home : “Sewa”, “Milik”, “Kredit”

Soal 1

Tolong berikan saya kumpulan data tentang informasi 50000 pelanggan yang mengacu pada setiap variabel di atas!

R

Marital_Status <- sample(c("Ya","Tidak"),50000,replace = T)
Address        <- sample(c("Jakarta","Bogor","Depok","Tangerang","Bekasi"),50000, replace = T)
Work_Location  <- sample(c("Jakarta","Bogor","Depok","Tangerang","Bekasi"),50000, replace = T)
Age            <- sample(c(19:60),50000,replace = T)
Academic       <- sample(c("J.School","H.School","Sarjana","Magister","Phd"),50000,replace = T)
Job            <- ifelse(Academic=="J.School",
                         sample(c("Office Boy","Staf Gudang")),
                  ifelse(Academic=="H.School",
                         sample(c("staff admin","Customer Relationship")),
                  ifelse(Academic=="Sarjana",
                         sample(c("Finance Accounting Executive","Asisten Administrasi (ADM)")),
                  ifelse(Academic=="Magister",
                         sample(c("Senior Finansial Planner","Surveyor")),
                  ifelse(Academic=="Phd",
                         sample(c("Insurance Broker","Reinsurance Broker")),0)))))
Grade          <- sample(c(1:5),50000,replace = T)
Income         <- ifelse(Job == "Office Boy",
                         2500000,
                  ifelse(Job == "Staf Gudang",
                         3000000,
                  ifelse(Job == "staff admin",
                         3250000,
                  ifelse(Job == "Customer Relationship",
                         3500000,
                  ifelse(Job == "Finance Accounting Executive",
                         5000000,
                  ifelse(Job == "Asisten Administrasi (ADM)",
                         5500000,
                  ifelse(Job == "Senior Finansial Planner",
                         6000000,
                  ifelse(Job == "Surveyor",
                         6500000,
                  ifelse(Job == "Insurance Broker",
                         7000000,
                  ifelse(Job == "Reinsurance Broker",
                         7500000,0))))))))))
Spending       <- ifelse(Job == "Office Boy",
                         1000000,
                  ifelse(Job == "Staf Gudang",
                         1500000,
                  ifelse(Job == "staff admin",
                         2000000,
                  ifelse(Job == "Customer Relationship",
                         2500000,
                  ifelse(Job == "Finance Accounting Executive",
                         3000000,
                  ifelse(Job == "Asisten Administrasi (ADM)",
                         3500000,
                  ifelse(Job == "Senior Finansial Planner",
                         4000000,
                  ifelse(Job == "Surveyor",
                         4500000,
                  ifelse(Job == "Insurance Broker",
                         5000000,
                  ifelse(Job == "Reinsurance Broker",
                         550000,0))))))))))
Number_of_children <- ifelse(Marital_Status == "Ya", sample(c(0:10)),"-")
Private_vehicle    <- sample(c("mobil","sepeda motor","umum"),50000, replace = T)
Home               <- sample(c("Sewa","Milik","Kredit"),50000, replace = T)

Data_Kasus02 <- data.frame(Marital_Status,
                           Address,
                           Work_Location,
                           Age,
                           Academic,
                           Job,
                           Grade,
                           Income,
                           Spending,
                           Number_of_children,
                           Private_vehicle,
                           Home)
library(DT)
datatable(Data_Kasus02)
write.csv(Data_Kasus02,"c:\\Users\\Public\\Kasus02.csv", row.names = FALSE)

Soal 2

Ringkasan Statistik penting seperti apa yang bisa Anda dapatkan dari kumpulan data Anda?

R

summary(Data_Kasus02)
##  Marital_Status       Address          Work_Location           Age      
##  Length:50000       Length:50000       Length:50000       Min.   :19.0  
##  Class :character   Class :character   Class :character   1st Qu.:29.0  
##  Mode  :character   Mode  :character   Mode  :character   Median :40.0  
##                                                           Mean   :39.5  
##                                                           3rd Qu.:50.0  
##                                                           Max.   :60.0  
##    Academic             Job                Grade           Income       
##  Length:50000       Length:50000       Min.   :1.000   Min.   :2500000  
##  Class :character   Class :character   1st Qu.:2.000   1st Qu.:3250000  
##  Mode  :character   Mode  :character   Median :3.000   Median :5500000  
##                                        Mean   :2.993   Mean   :4979180  
##                                        3rd Qu.:4.000   3rd Qu.:6500000  
##                                        Max.   :5.000   Max.   :7500000  
##     Spending       Number_of_children Private_vehicle        Home          
##  Min.   : 550000   Length:50000       Length:50000       Length:50000      
##  1st Qu.:1500000   Class :character   Class :character   Class :character  
##  Median :3000000   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :2757034                                                           
##  3rd Qu.:4000000                                                           
##  Max.   :5000000

Soal 3

Menurut perhitungan dan analisis Anda, pelanggan mana yang potensial untuk Anda pertahankan?

R

Data_Kasus02$Pendapatan = Data_Kasus02$Income - Data_Kasus02$Spending

x <- filter(Data_Kasus02, Income >= 5000000)

library(DT)
datatable(x)

Referensi

  1. ref 1
  2. ref 2
  3. ref 3
LS0tDQp0aXRsZTogIkFsZ29yaXRtYSAmIFN0cnVrdHVyIERhdGEiDQpzdWJ0aXRsZTogIn4gVWppYW4gVGVuZ2FoIFNlbWVzdGVyIH4iDQphdXRob3I6ICJTYXVzYW4gUmFtYWRoYW5pIg0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZS5jc3MiDQoNCi0tLQ0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGNsYXNzLnNvdXJjZSA9ICJub2NvcHkiLA0KICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLm91dHB1dCA9ICJub2NvcHkiLA0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGLA0KICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGKQ0KDQpsaWJyYXJ5KHJldGljdWxhdGUpDQpsaWJyYXJ5KFJjcHApDQp1c2VfY29uZGFlbnYoInB5MzgiLCByZXF1aXJlZCA9IFRSVUUpDQpgYGANCg0KPGJyPg0KDQo8aW1nIHN0eWxlPSJmbG9hdDogcmlnaHQ7IG1hcmdpbjogLTUwcHggNTBweCAwcHggNTBweDsgd2lkdGg6MzAlIiBzcmM9ImZvdG9wcm9maWwucG5nIi8+DQoNCnwNCjotLS0tIHw6LS0tLQ0KKipLb250YWsqKnwgKio6ICRcZG93bmFycm93JCoqDQpFbWFpbHwgbXVnZW1pc2F1c2FuMDVAZ21haWwuY29tDQpJbnN0YWdyYW0gfCBodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3NhcmFtLjA1LyANClJQdWJzICB8IGh0dHBzOi8vcnB1YnMuY29tL3NhdXNhbnJhbWFkaGFuaS8gDQoNCioqKg0KDQojIEthc3VzIDEgDQoNCkFzdW1zaWthbiBBbmRhIHRlbGFoIG1lbmd1bXB1bGthbiBiZWJlcmFwYSBrdW1wdWxhbiBkYXRhIGRhcmkgcGVydXNhaGFhbiBgQUJDIFByb3BlcnR5YCBzZXBlcnRpIHlhbmcgZGFwYXQga2l0YSBsaWhhdCBwYWRhIHRhYmVsIGJlcmlrdXQ6IA0KDQpgYGB7ciwgbWVzc2FnZT1GfQ0KSWQgICAgICAgICAgICAgPC0gKDE6MTAwMDApDQpNYXJrZXRpbmdfTmFtZSA8LSByZXAoYygiQW5nZWwiLCJTaGVybHkiLCJWYW5lc3NhIiwiSXJlbmUiLCJKdWxpYW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkplZmZyeSIsIk5pa2l0YSIsIktlZmFzIiwiU2lhbmEiLCJMYWxhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJGYWxsZW4iLCJBcmRpZm8iLCJLZXZpbiIsIkp1ZW4iLCJKZXJyZWwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkltZWxkYSIsIldpZGkiLCJUaGVvZG9yYSIsIkVsdmFuaSIsIkpvbmF0aGFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJTb2ZpYSIsIkFicmFoYW0iLCJTaXRpIiwiTmlrbyIsIlNlZmxpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJCZW5lIiwgIkRpYW5hIiwgIlB1cGUiLCAiQW5kaSIsICJUYXRoYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiRW5kcmkiLCAiTW9uaWthIiwgIkhhbnMiLCAiRGVib3JhIiwiSGFuaWZhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJKYW1lcyIsICJKaWhhbiIsICJGcmlza2EiLCJBcmRpd2FuIiwgIkJha3RpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJBbnRob24iLCJBbXJ5IiwgIldpd2lrIiwgIkJhc3RpYW4iLCAiQnVkaSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiTGVvIiwiU2ltb24iLCJNYXRpdXMiLCJBcnJ5IiwgIkVsaWFuZG8iKSwgMjAwKQ0KV29ya19FeHAgICAgICAgPC0gcmVwKGMoMS4zLDIuNCwyLjUsMy42LDMuNyw0LjcsNS43LDYuNyw3LjcsNy4zLA0KICAgICAgICAgICAgICAgICAgICAgICAgNS4zLDUuMywxMCw5LjMsMy4zLDMuMywzLjQsMy40LDMuNSw1LjYsDQogICAgICAgICAgICAgICAgICAgICAgICAzLjUsNC42LDQuNiw1LjcsNi4yLDQuNCw2LjQsNi40LDMuNSw3LjUsDQogICAgICAgICAgICAgICAgICAgICAgICA0LjYsMy43LDQuNyw0LjMsNS4yLDYuMyw3LjQsMi40LDMuNCw4LjIsDQogICAgICAgICAgICAgICAgICAgICAgICA2LjQsNy4yLDEuNSw3LjUsMTAsNC41LDYuNSw3LjIsNy4xLDcuNiksMjAwKQ0KQ2l0eSAgICAgICAgICAgPC0gc2FtcGxlKGMoIkpha2FydGEiLCJCb2dvciIsIkRlcG9rIiwiVGVuZ2VyYW5nIiwiQmVrYXNpIiksMTAwMDAsIHJlcGxhY2UgPSBUKQ0KQ2x1c3RlciAgICAgICAgPC0gc2FtcGxlKGMoIlZpY3RvcmlhIiwiUGFsbXlyYSIsIldpbm9uYSIsIlRpYXJhIiwgIk5hcmFkYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiUGVyb25pYSIsIkxhdmVzaCIsIkFsaW5kcmEiLCJTd2VldGhvbWUiLCAiQXNlcmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlcmFkYW1haSIsIkFsYmFzaWEiLCAiQWRhcmEiLCJOZW9uIiwiQXJhbmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzb2thIiwgIlByaW1hZG9uYSIsICJNdXRpYXJhIiwiUGVybWF0YSIsIkFsYW1hbmRhIiApLCAxMDAwMCwgcmVwbGFjZT1UKQ0KUHJpY2UgICAgICAgICAgPC0gc2FtcGxlKGMoNzAwMDoxNTAwMCksMTAwMDAsIHJlcGxhY2UgPSBUKQ0KRGF0ZV9TYWxlcyAgICAgPC0gc2FtcGxlKHNlcShhcy5EYXRlKCIyMDE4LzAxLzAxIiksIGJ5ID0gImRheSIsIGxlbmd0aC5vdXQgPSAxMDAwKSwxMDAwMCwgcmVwbGFjZSA9IFQpDQpBZHZlcnRpc2VtZW50ICA8LSBzYW1wbGUoYygxOjIwKSwgMTAwMDAsIHJlcGxhY2UgPSBUKQ0KRGF0YSAgICAgICAgICAgPC0gZGF0YS5mcmFtZShJZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtldGluZ19OYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrX0V4cCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2l0eSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2x1c3RlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVfU2FsZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkdmVydGlzZW1lbnQpDQpsaWJyYXJ5KERUKQ0KZGF0YXRhYmxlKERhdGEpDQpgYGANCmBgYHtyfQ0Kd3JpdGUuY3N2KERhdGEsImM6XFxVc2Vyc1xcUHVibGljXFxVVFMuY3N2Iiwgcm93Lm5hbWVzID0gRkFMU0UpDQpgYGANCg0KDQojIyBTb2FsIDEgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KS2F0ZWdvcmlrYW4gdmFyaWFiZWwgYEhhcmdhYCBwYWRhIGRhdGFzZXQgZGkgYXRhcyBtZW5qYWRpIHRpZ2Ega2Vsb21wb2sgc2ViYWdhaSBiZXJpa3V0Og0KDQoqICRcdGV4dHtIaWdofSA+IDEyMDAwJA0KKiAkMTAwMDAgXGxlIFx0ZXh0e01lZGl1bX0gXGxlIDEyMDAwJA0KKiAkXHRleHR7TG93fSA8IDEwMDAwJA0KDQpUZXRhcGthbiBrZSBkYWxhbSB2YXJpYWJlbCBiYXJ1IHlhbmcgZGlzZWJ1dCBgS2VsYXNgIGRlbmdhbiBtZW5nZ3VuYWthbiBmdW5nc2kga29udHJvbCBgSWZgLCBgZWxzZSBpZmAsIGRhbiBgZWxzZWAuDQoNCiMjIyBSDQoNCmBgYHtyfQ0KRGF0YSRLZWxhczwtaWZlbHNlKERhdGEkUHJpY2UgPiAxMjAwMCwNCiAgICAgICAgICAgICAgICAgICAiSGlnaCIsDQogICAgICAgICAgICBpZmVsc2UoRGF0YSRQcmljZSA+PTEwMDAwICYgRGF0YSQgUHJpY2UgPD0xMjAwMCwNCiAgICAgICAgICAgICAgICAgICAiTWVkaXVtIiwNCiAgICAgICAgICAgIGlmZWxzZShEYXRhJFByaWNlIDwxMDAwMCwNCiAgICAgICAgICAgICAgICAgICAiTG93IiwwKSkpDQpEYXRhDQpgYGANCg0KDQojIyBTb2FsIDIgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KS2F0ZWdvcmlrYW4gdmFyaWFiZWwgYEhhcmdhYCBwYWRhIGRhdGFzZXQgZGkgYXRhcyBtZW5qYWRpIGVuYW0ga2Vsb21wb2sgc2ViYWdhaSBiZXJpa3V0Og0KDQoqIEJvb2tpbmdfZmVlIG55YSA1ICUgamlrYSAkXHRleHR7UHJpY2V9IDwgODAwMCQNCiogQm9va2luZ19mZWUgbnlhIDYgJSBqaWthICQ4MDAwIFxsZSBcdGV4dHtQcmljZX0gPCA5MDAwJA0KKiBCb29raW5nX2ZlZSBueWEgNyAlIGppa2EgJDkwMDAgXGxlIFx0ZXh0e1ByaWNlfSA8IDEwMDAwJA0KKiBCb29raW5nX2ZlZSBueWEgOCAlIGppa2EgJDEwMDAwIFxsZSBcdGV4dHtQcmljZX0gPCAxMTAwMCQNCiogQm9va2luZ19mZWUgbnlhIDkgJSBqaWthICQxMTAwMCBcbGUgXHRleHR7UHJpY2V9IDwgMTMwMDAkDQoqIEJvb2tpbmdfZmVlIG55YSAxMCAlIGppa2EgJDEzMDAwIFxsZSBcdGV4dHtQcmljZX0gXGxlIDE1MDAwJA0KDQpUZXRhcGthbiBrZSBkYWxhbSB2YXJpYWJlbCBiYXJ1IHlhbmcgZGlzZWJ1dCBgQm9va2luZ19mZWVgIGRlbmdhbiBtZW5nZ3VuYWthbiBmdW5nc2kga29udHJvbCBgSWZgLCBgZWxzZSBpZmAsIGRhbiBgZWxzZWAuDQoNCiMjIyBSDQoNCmBgYHtyfQ0KeDwtRGF0YSRQcmljZQ0KRGF0YSRCb29raW5nX2ZlZTwtaWZlbHNlKHggPCA4MDAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHgqNS8xMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoeCA+PTgwMDAgJiB4IDw5MDAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHgqNi8xMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoeCA+PTkwMDAgJiB4IDwxMDAwMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICB4KjcvMTAwLA0KICAgICAgICAgICAgICAgICAgaWZlbHNlKHggPj0xMDAwMCAmIHggPDExMDAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHgqOC8xMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoeCA+PTExMDAwICYgeCA8MTMwMDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgeCo5LzEwMCwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZSh4ID49MTMwMDAgJiB4IDw9MTUwMDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgeCoxMC8xMDAsIDApKSkpKSkNCkRhdGENCmBgYA0KDQoNCiMjIFNvYWwgMyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpNZW51cnV0IGt1bXB1bGFuIGRhdGEgYWtoaXIgeWFuZyB0ZWxhaCBBbmRhIGJ1YXQgcGFkYSBzb2FsIG5vIDIsIHNheWEgYmVyYXN1bXNpIGJhaHdhIEFuZGEgdGVsYWggYmVrZXJqYSBzZWJhZ2FpIHBlbWFzYXJhbiBkaSBwZXJ1c2FoYWFuIGBBQkMgUHJvcGVydHlgLCBiYWdhaW1hbmEgQW5kYSBkYXBhdCBtZW5ndW1wdWxrYW4gc2VtdWEgaW5mb3JtYXNpIHRlbnRhbmcgcGVuanVhbGFuIEFuZGEgZGVuZ2FuIG1lbmdndW5ha2FuIHBlcm55YXRhYW4gYGZvcmAuIA0KDQojIyMgUg0KDQpgYGB7cn0NCnNhbGVzID0iU2hlcmx5Ig0KDQp6ID0gZm9yKGkgaW4gc2FsZXMpew0KICBwcmludChzdWJzZXQoRGF0YSwNCiAgICAgICAgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSBpKSkpDQp9DQppDQpgYGANCg0KDQojIyBTb2FsIDQgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KSmlrYSBBbmRhIGFrYW4gbWVuZGFwYXRrYW4gYm9udXMgMiUgZGFyaSBgQm9va2luZyBmZWVgIHBlciB1bml0IHNlYmFnYWkgcGVtYXNhcmFuIGRhbiBqdWdhIG1lbmRhcGF0a2FuIGJvbnVzIHRhbWJhaGFuIDElIGppa2EgQW5kYSB0ZWxhaCBiZWtlcmphIGRpIHBlcnVzYWhhYW4gaW5pIHNlbGFtYSBsZWJpaCBkYXJpIDMgdGFodW4uIFNpbGFrYW4gaGl0dW5nIHRvdGFsIGJvbnVzIGRlbmdhbiBtZW5nZ3VuYWthbiBwZXJueWF0YWFuIGBpZiwgZm9yLCBkYW4gYnJlYWtgLiAgDQoNCiMjIyBSDQoNCmBgYHtyfQ0KVG90YWxfQm9udXM9c3Vic2V0KERhdGEsDQogICAgICAgICAgICBzdWJzZXQgPSBNYXJrZXRpbmdfTmFtZSA9PSAiU2hlcmx5IikNCkRhdGEkVG90YWxfQm9udXM8LWlmZWxzZShUb3RhbF9Cb251cyRXb3JrX0V4cCA+MywNCiAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbF9Cb251cyRCb29raW5nX2ZlZSooMi8xMDArMS8xMDApLFRvdGFsX0JvbnVzJEJvb2tpbmdfZmVlKjIvMTAwKQ0KRGF0YQ0KYGBgDQoNCg0KIyMgU29hbCA1IHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNClBhZGEgYmFnaWFuIGluaSwgQW5kYSBkaWhhcmFwa2FuIGRhcGF0IG1lbWJ1YXQgZnVuZ3NpIHlhbmcgZGFwYXQgbWVuamF3YWIgc2V0aWFwIHBlbnlhdGFhbiBkaWJhd2FoIGluaSBkZW5nYW4gbWVsaWJhdGthbiBzZXRpYXAgZnVuZ3NpIGtvbnRyb2wgeWFuZyBkaXBlbGFqYXJpIHBhZGEgcGVydGVtdWFuIDcuDQogIA0KKiBTaWFwYSBuYW1hIG1hcmtldGluZyBwZW1hc2FyYW4gdGVyYmFpaz8NCiogS290YSBkYW4gQ2x1c3RlciBtYW5hIHlhbmcgcGFsaW5nIG1lbmd1bnR1bmdrYW4/DQoqIEhpdHVuZyB0b3RhbCBiaWF5YSBpa2xhbiBBbmRhLCBqaWthIEFuZGEgaGFydXMgbWVtYmF5YXJueWEgJDQgc2V0aWFwIGthbGkgaWtsYW4uDQoqIEhpdHVuZyByYXRhLXJhdGEgYmlheWEgaWtsYW4gdW50dWsgc2V0aWFwIG1hcmtldGluZyBkaSBQZXJ1c2FoYWFuIHRlcnNlYnV0Lg0KKiBIaXR1bmcgVG90YWwgUGVuZGFwYXRhbiAoZGFsYW0gQnVsYW5hbikgDQoNCiMjIyBSDQoNCmBgYHtyfQ0KIyBEYXRhDQpBbmdlbD1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJBbmdlbCIpKQ0KU2hlcmx5PXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IlNoZXJseSIpKQ0KVmFuZXNzYT1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJWYW5lc3NhIikpDQpJcmVuZT1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJJcmVuZSIpKQ0KSnVsaWFuPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09Ikp1bGlhbiIpKQ0KSmVmZnJ5PXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkplZmZyeSIpKQ0KTmlraXRhPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09Ik5pa2l0YSIpKQ0KS2VmYXM9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iS2VmYXMiKSkNClNpYW5hPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IlNpYW5hIikpDQpMYWxhPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkxhbGEiKSkNCkZhbGxlbj1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJGYWxsZW4iKSkNCkFyZGlmbz1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJBcmRpZm8iKSkNCktldmluPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IktldmluIikpDQpKdWVuPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09Ikp1ZW4iKSkNCkplcnJlbD1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJKZXJyZWwiKSkNCkltZWxkYT1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJJbWVsZGEiKSkNCldpZGk9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iV2lkaSIpKQ0KVGhlb2RvcmE9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iVGhlb2RvcmEiKSkNCkVsdmFuaT1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJFbHZhbmkiKSkNCkpvbmF0aGFuPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkpvbmF0aGFuIikpDQpTb2ZpYT1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJTb2ZpYSIpKQ0KQWJyYWhhbT1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJBYnJhaGFtIikpDQpTaXRpPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IlNpdGkiKSkNCk5pa289c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iTmlrbyIpKQ0KU2VmbGk9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iU2VmbGkiKSkNCkJlbmU9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iQmVuZSIpKQ0KRGlhbmE9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iRGlhbmEiKSkNClB1cGU9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iUHVwZSIpKQ0KQW5kaT1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJBbmRpIikpDQpUYXRoYT1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJUYXRoYSIpKQ0KRW5kcmk9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iRW5kcmkiKSkNCk1vbmlrYT1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJNb25pa2EiKSkNCkhhbnM9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iSGFucyIpKQ0KRGVib3JhPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkRlYm9yYSIpKQ0KSGFuaWZhPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkhhbmlmYSIpKQ0KSmFtZXM9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iSmFtZXMiKSkNCkppaGFuPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkppaGFuIikpDQpGcmlza2E9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iRnJpc2thIikpDQpBcmRpd2FuPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkFyZGl3YW4iKSkNCkJha3RpPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkJha3RpIikpDQpBbnRob249c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iQW50aG9uIikpDQpBbXJ5PXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkFtcnkiKSkNCldpd2lrPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09Ildpd2lrIikpDQpCYXN0aWFuPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkJhc3RpYW4iKSkNCkJ1ZGk9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iQnVkaSIpKQ0KTGVvPXN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IkxlbyIpKQ0KU2ltb249c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iU2ltb24iKSkNCk1hdGl1cz1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJNYXRpdXMiKSkNCkFycnk9c3Vic2V0KERhdGEsc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT0iQXJyeSIpKQ0KRWxpYW5kbz1zdWJzZXQoRGF0YSxzdWJzZXQgPSAoTWFya2V0aW5nX05hbWU9PSJFbGlhbmRvIikpDQoNCk5hbWFfU2FsZXMgPSBjKCJBbmdlbCIsIlNoZXJseSIsIlZhbmVzc2EiLCJJcmVuZSIsIkp1bGlhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSmVmZnJ5IiwiTmlraXRhIiwiS2VmYXMiLCJTaWFuYSIsIkxhbGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkZhbGxlbiIsIkFyZGlmbyIsIktldmluIiwiSnVlbiIsIkplcnJlbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSW1lbGRhIiwiV2lkaSIsIlRoZW9kb3JhIiwiRWx2YW5pIiwiSm9uYXRoYW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgIlNvZmlhIiwiQWJyYWhhbSIsIlNpdGkiLCJOaWtvIiwiU2VmbGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkJlbmUiLCAiRGlhbmEiLCAiUHVwZSIsICJBbmRpIiwgIlRhdGhhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJFbmRyaSIsICJNb25pa2EiLCAiSGFucyIsICJEZWJvcmEiLCJIYW5pZmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkphbWVzIiwgIkppaGFuIiwgIkZyaXNrYSIsIkFyZGl3YW4iLCAiQmFrdGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkFudGhvbiIsIkFtcnkiLCAiV2l3aWsiLCAiQmFzdGlhbiIsICJCdWRpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJMZW8iLCJTaW1vbiIsIk1hdGl1cyIsIkFycnkiLCAiRWxpYW5kbyIpDQpwcm9wZXJ0eXNvbGQgPSBjKHN1bShBbmdlbCRQcmljZSksc3VtKFNoZXJseSRQcmljZSksc3VtKFZhbmVzc2EkUHJpY2UpLHN1bShJcmVuZSRQcmljZSksc3VtKEp1bGlhbiRQcmljZSksc3VtKEplZmZyeSRQcmljZSksc3VtKE5pa2l0YSRQcmljZSksc3VtKEtlZmFzJFByaWNlKSxzdW0oU2lhbmEkUHJpY2UpLHN1bShMYWxhJFByaWNlKSxzdW0oRmFsbGVuJFByaWNlKSxzdW0oQXJkaWZvJFByaWNlKSxzdW0oS2V2aW4kUHJpY2UpLHN1bShKdWVuJFByaWNlKSxzdW0oSmVycmVsJFByaWNlKSxzdW0oSW1lbGRhJFByaWNlKSxzdW0oV2lkaSRQcmljZSksc3VtKFRoZW9kb3JhJFByaWNlKSxzdW0oRWx2YW5pJFByaWNlKSxzdW0oSm9uYXRoYW4kUHJpY2UpLHN1bShTb2ZpYSRQcmljZSksc3VtKEFicmFoYW0kUHJpY2UpLHN1bShTaXRpJFByaWNlKSxzdW0oTmlrbyRQcmljZSksc3VtKFNlZmxpJFByaWNlKSxzdW0oQmVuZSRQcmljZSksc3VtKERpYW5hJFByaWNlKSxzdW0oUHVwZSRQcmljZSksc3VtKEFuZGkkUHJpY2UpLHN1bShUYXRoYSRQcmljZSksc3VtKEVuZHJpJFByaWNlKSxzdW0oTW9uaWthJFByaWNlKSxzdW0oSGFucyRQcmljZSksc3VtKERlYm9yYSRQcmljZSksc3VtKEhhbmlmYSRQcmljZSksc3VtKEphbWVzJFByaWNlKSxzdW0oSmloYW4kUHJpY2UpLHN1bShGcmlza2EkUHJpY2UpLHN1bShBcmRpd2FuJFByaWNlKSxzdW0oQmFrdGkkUHJpY2UpLHN1bShBbnRob24kUHJpY2UpLHN1bShBbXJ5JFByaWNlKSxzdW0oV2l3aWskUHJpY2UpLHN1bShCYXN0aWFuJFByaWNlKSxzdW0oQnVkaSRQcmljZSksc3VtKExlbyRQcmljZSksc3VtKFNpbW9uJFByaWNlKSxzdW0oTWF0aXVzJFByaWNlKSxzdW0oQXJyeSRQcmljZSksc3VtKEVsaWFuZG8kUHJpY2UpKQ0KZGF0YW1hcmtldGluZz1kYXRhLmZyYW1lKE5hbWFfU2FsZXMsIHByb3BlcnR5c29sZCkNCg0KZGF0YW1hcmtldGluZw0KYGBgDQoNCmBgYHtyfQ0KZGF0YW1hcmtldGluZ1t3aGljaC5tYXgoZGF0YW1hcmtldGluZyRwcm9wZXJ0eXNvbGQpLF0gICAgIyBNYXJrZXRpbmcgUGVtYXNhcmFuIFRlcmJhaWsNCmBgYA0KDQpgYGB7cn0NCiMgS290YSBkYW4gQ2x1c3RlciB5YW5nIHBhbGluZyBtZW5ndW50dW5na2FuDQpwcm9maXRhYmxlPSBEYXRhWyxjKCJDaXR5IiwiQ2x1c3RlciIsIlByaWNlIildDQpwcm9maXRhYmxlW3doaWNoLm1heChwcm9maXRhYmxlJFByaWNlKSxdDQpgYGANCg0KYGBge3J9DQojIHRvdGFsIGJpYXlhIGlrbGFuIEFuZGEsIGppa2EgQW5kYSBoYXJ1cyBtZW1iYXlhcm55YSAkNCBzZXRpYXAga2FsaSBpa2xhbg0KY29zdGZvcmFkICA9IHN1YnNldChEYXRhLHN1YnNldCA9IChNYXJrZXRpbmdfTmFtZT09IlNoZXJ5bCIpKQ0KYWRzY29zdCAgICA9IChjb3N0Zm9yYWQkQWR2ZXJ0aXNlbWVudCo0KQ0KdG90YWxfY29zdCA9IHByaW50KHN1bShhZHNjb3N0KSkNCmBgYA0KDQpgYGB7cn0NCiMgcmF0YS1yYXRhIGJpYXlhIGlrbGFuIHVudHVrIHNldGlhcCBtYXJrZXRpbmcgZGkgUGVydXNhaGFhbiB0ZXJzZWJ1dA0KTmFtYV9TYWxlcyA9IGMoIkFuZ2VsIiwiU2hlcmx5IiwiVmFuZXNzYSIsIklyZW5lIiwiSnVsaWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJKZWZmcnkiLCJOaWtpdGEiLCJLZWZhcyIsIlNpYW5hIiwiTGFsYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiRmFsbGVuIiwiQXJkaWZvIiwiS2V2aW4iLCJKdWVuIiwiSmVycmVsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJJbWVsZGEiLCJXaWRpIiwiVGhlb2RvcmEiLCJFbHZhbmkiLCJKb25hdGhhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAiU29maWEiLCJBYnJhaGFtIiwiU2l0aSIsIk5pa28iLCJTZWZsaSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiQmVuZSIsICJEaWFuYSIsICJQdXBlIiwgIkFuZGkiLCAiVGF0aGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkVuZHJpIiwgIk1vbmlrYSIsICJIYW5zIiwgIkRlYm9yYSIsIkhhbmlmYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSmFtZXMiLCAiSmloYW4iLCAiRnJpc2thIiwiQXJkaXdhbiIsICJCYWt0aSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiQW50aG9uIiwiQW1yeSIsICJXaXdpayIsICJCYXN0aWFuIiwgIkJ1ZGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkxlbyIsIlNpbW9uIiwiTWF0aXVzIiwiQXJyeSIsICJFbGlhbmRvIikNCnJhdGFjb3N0ID0gZm9yICh4IGluIE5hbWFfU2FsZXMpIHsNCiAgZj1zdWJzZXQoRGF0YSwgc3Vic2V0ID0gKE1hcmtldGluZ19OYW1lPT14KSkNCiAgYz1zdW0oZiRBZHZlcnRpc2VtZW50KjQpDQogIHByaW50KGNhdChzdW0oYykvbGVuZ3RoKGYkSWQpLChjYXQoeCwncmF0YS1yYXRhIGJpYXlhIGlrbGFuJykpKSkNCn0NCmBgYA0KDQpgYGB7cn0NCiMgVG90YWwgUGVuZGFwYXRhbiAoZGFsYW0gQnVsYW5hbikNCnJldmVudWU9KHN1bShEYXRhJFByaWNlKS0oc3VtKERhdGEkQWR2ZXJ0aXNlbWVudCkqNCkpLygobWF4KERhdGEkV29ya19FeHApKSoxMikNCnJldmVudWUNCmBgYA0KDQoNCiMgS2FzdXMgMg0KDQpNaXNhbGthbiBBbmRhIG1lbWlsaWtpIHByb3llayByaXNldCBwYXNhciB1bnR1ayBtZW1wZXJ0YWhhbmthbiBiZWJlcmFwYSBwZWxhbmdnYW4gcG90ZW5zaWFsIGRpIHBlcnVzYWhhYW4gQW5kYS4gTWFyaSBraXRhIGFzdW1zaWthbiBBbmRhIGJla2VyamEgZGkgcGVydXNhaGFhbiBhc3VyYW5zaSBBQkMuIFVudHVrIG1lbGFrdWthbm55YSwgQW5kYSBpbmdpbiBtZW5ndW1wdWxrYW4ga3VtcHVsYW4gZGF0YSBiZXJpa3V0Og0KDQoqICoqTWFyaXRhbF9TdGF0dXMqKiAgICA6IG1lbmV0YXBrYW4gc3RhdHVzIHBlcmthd2luYW4gYWNhayAoIllhIiwgIlRpZGFrIikNCiogKipBZGRyZXNzKiogICAgICAgICAgIDogYmVyaWthbiBhbGFtYXQgYWNhayAoSkFCT0RFVEFCRUspIA0KKiAqKldvcmtfTG9jYXRpb24qKiAgICAgOiBtZW5ldGFwa2FuIGxva2FzaSBrZXJqYSBzZWNhcmEgYWNhayAoSkFCT0RFVEFCRUspIA0KKiAqKkFnZSoqICAgICAgICAgICAgICAgOiBtZW5ldGFwa2FuIHVydXRhbiBhbmdrYSBhY2FrIChkYXJpIDE5IGhpbmdnYSA2MCkgDQoqICoqQWNhZGVtaWMqKiAgICAgICAgICA6IG1lbmV0YXBrYW4gdGluZ2thdCBha2FkZW1payBhY2FrICgiSi5TY2hvb2wiLCAiSC5TY2hvb2wiLCAiU2FyamFuYSIsICJNYWdpc3RlciIsICJQaGQiKSANCiogKipKb2IqKiAgICAgICAgICAgICAgIDogMTAgcGVrZXJqYWFuIGFjYWsgdW50dWsgc2V0aWFwIHRpbmdrYXQgYWthZGVtaWsgIA0KKiAqKkdyYWRlKiogICAgICAgICAgICAgOiA1IG5pbGFpIGFjYWsgdW50dWsgc2V0aWFwIFBla2VyamFhbiANCiogKipJbmNvbWUqKiAgICAgICAgICAgIDogdGV0YXBrYW4gcGVuZGFwYXRhbiB5YW5nIG11bmdraW4gdW50dWsgc2V0aWFwIFBla2VyamFhbiAgDQoqICoqU3BlbmRpbmcqKiAgICAgICAgICA6IHRldGFwa2FuIGtlbXVuZ2tpbmFuIHBlbmdlbHVhcmFuIHVudHVrIHNldGlhcCBQZWtlcmphYW4gDQoqICoqTnVtYmVyX29mX2NoaWxkcmVuKio6IG1lbmV0YXBrYW4gbm9tb3IgYWNhayBkaSBhbnRhcmEgMCBkYW4gMTAgKHNlc3VhaSBkZW5nYW4gc3RhdHVzIHBlcmthd2luYW4pDQoqICoqUHJpdmF0ZV92ZWhpY2xlKiogICA6IG1lbmV0YXBrYW4ga2VtdW5na2luYW4ga2VuZGFyYWFuIHByaWJhZGkgdW50dWsgc2V0aWFwIG9yYW5nICgiTW9iaWwiLCAic2VwZWRhIG1vdG9yIiwgIlVtdW0iKSANCiogKipIb21lKiogICAgICAgICAgICAgIDogIlNld2EiLCAiTWlsaWsiLCAiS3JlZGl0IiANCg0KIyMgU29hbCAxIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNClRvbG9uZyBiZXJpa2FuIHNheWEga3VtcHVsYW4gZGF0YSB0ZW50YW5nIGluZm9ybWFzaSA1MDAwMCBwZWxhbmdnYW4geWFuZyBtZW5nYWN1IHBhZGEgc2V0aWFwIHZhcmlhYmVsIGRpIGF0YXMhIA0KDQojIyMgUiANCg0KYGBge3J9DQpNYXJpdGFsX1N0YXR1cyA8LSBzYW1wbGUoYygiWWEiLCJUaWRhayIpLDUwMDAwLHJlcGxhY2UgPSBUKQ0KQWRkcmVzcyAgICAgICAgPC0gc2FtcGxlKGMoIkpha2FydGEiLCJCb2dvciIsIkRlcG9rIiwiVGFuZ2VyYW5nIiwiQmVrYXNpIiksNTAwMDAsIHJlcGxhY2UgPSBUKQ0KV29ya19Mb2NhdGlvbiAgPC0gc2FtcGxlKGMoIkpha2FydGEiLCJCb2dvciIsIkRlcG9rIiwiVGFuZ2VyYW5nIiwiQmVrYXNpIiksNTAwMDAsIHJlcGxhY2UgPSBUKQ0KQWdlICAgICAgICAgICAgPC0gc2FtcGxlKGMoMTk6NjApLDUwMDAwLHJlcGxhY2UgPSBUKQ0KQWNhZGVtaWMgICAgICAgPC0gc2FtcGxlKGMoIkouU2Nob29sIiwiSC5TY2hvb2wiLCJTYXJqYW5hIiwiTWFnaXN0ZXIiLCJQaGQiKSw1MDAwMCxyZXBsYWNlID0gVCkNCkpvYiAgICAgICAgICAgIDwtIGlmZWxzZShBY2FkZW1pYz09IkouU2Nob29sIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGUoYygiT2ZmaWNlIEJveSIsIlN0YWYgR3VkYW5nIikpLA0KICAgICAgICAgICAgICAgICAgaWZlbHNlKEFjYWRlbWljPT0iSC5TY2hvb2wiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZShjKCJzdGFmZiBhZG1pbiIsIkN1c3RvbWVyIFJlbGF0aW9uc2hpcCIpKSwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShBY2FkZW1pYz09IlNhcmphbmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZShjKCJGaW5hbmNlIEFjY291bnRpbmcgRXhlY3V0aXZlIiwiQXNpc3RlbiBBZG1pbmlzdHJhc2kgKEFETSkiKSksDQogICAgICAgICAgICAgICAgICBpZmVsc2UoQWNhZGVtaWM9PSJNYWdpc3RlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlKGMoIlNlbmlvciBGaW5hbnNpYWwgUGxhbm5lciIsIlN1cnZleW9yIikpLA0KICAgICAgICAgICAgICAgICAgaWZlbHNlKEFjYWRlbWljPT0iUGhkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGUoYygiSW5zdXJhbmNlIEJyb2tlciIsIlJlaW5zdXJhbmNlIEJyb2tlciIpKSwwKSkpKSkNCkdyYWRlICAgICAgICAgIDwtIHNhbXBsZShjKDE6NSksNTAwMDAscmVwbGFjZSA9IFQpDQpJbmNvbWUgICAgICAgICA8LSBpZmVsc2UoSm9iID09ICJPZmZpY2UgQm95IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAyNTAwMDAwLA0KICAgICAgICAgICAgICAgICAgaWZlbHNlKEpvYiA9PSAiU3RhZiBHdWRhbmciLA0KICAgICAgICAgICAgICAgICAgICAgICAgIDMwMDAwMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoSm9iID09ICJzdGFmZiBhZG1pbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgMzI1MDAwMCwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShKb2IgPT0gIkN1c3RvbWVyIFJlbGF0aW9uc2hpcCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgMzUwMDAwMCwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShKb2IgPT0gIkZpbmFuY2UgQWNjb3VudGluZyBFeGVjdXRpdmUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIDUwMDAwMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoSm9iID09ICJBc2lzdGVuIEFkbWluaXN0cmFzaSAoQURNKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgNTUwMDAwMCwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShKb2IgPT0gIlNlbmlvciBGaW5hbnNpYWwgUGxhbm5lciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgNjAwMDAwMCwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShKb2IgPT0gIlN1cnZleW9yIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICA2NTAwMDAwLA0KICAgICAgICAgICAgICAgICAgaWZlbHNlKEpvYiA9PSAiSW5zdXJhbmNlIEJyb2tlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgNzAwMDAwMCwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShKb2IgPT0gIlJlaW5zdXJhbmNlIEJyb2tlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgNzUwMDAwMCwwKSkpKSkpKSkpKQ0KU3BlbmRpbmcgICAgICAgPC0gaWZlbHNlKEpvYiA9PSAiT2ZmaWNlIEJveSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMCwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShKb2IgPT0gIlN0YWYgR3VkYW5nIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAxNTAwMDAwLA0KICAgICAgICAgICAgICAgICAgaWZlbHNlKEpvYiA9PSAic3RhZmYgYWRtaW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDAwMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoSm9iID09ICJDdXN0b21lciBSZWxhdGlvbnNoaXAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIDI1MDAwMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoSm9iID09ICJGaW5hbmNlIEFjY291bnRpbmcgRXhlY3V0aXZlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAzMDAwMDAwLA0KICAgICAgICAgICAgICAgICAgaWZlbHNlKEpvYiA9PSAiQXNpc3RlbiBBZG1pbmlzdHJhc2kgKEFETSkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIDM1MDAwMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoSm9iID09ICJTZW5pb3IgRmluYW5zaWFsIFBsYW5uZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIDQwMDAwMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoSm9iID09ICJTdXJ2ZXlvciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgNDUwMDAwMCwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShKb2IgPT0gIkluc3VyYW5jZSBCcm9rZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIDUwMDAwMDAsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoSm9iID09ICJSZWluc3VyYW5jZSBCcm9rZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIDU1MDAwMCwwKSkpKSkpKSkpKQ0KTnVtYmVyX29mX2NoaWxkcmVuIDwtIGlmZWxzZShNYXJpdGFsX1N0YXR1cyA9PSAiWWEiLCBzYW1wbGUoYygwOjEwKSksIi0iKQ0KUHJpdmF0ZV92ZWhpY2xlICAgIDwtIHNhbXBsZShjKCJtb2JpbCIsInNlcGVkYSBtb3RvciIsInVtdW0iKSw1MDAwMCwgcmVwbGFjZSA9IFQpDQpIb21lICAgICAgICAgICAgICAgPC0gc2FtcGxlKGMoIlNld2EiLCJNaWxpayIsIktyZWRpdCIpLDUwMDAwLCByZXBsYWNlID0gVCkNCg0KRGF0YV9LYXN1czAyIDwtIGRhdGEuZnJhbWUoTWFyaXRhbF9TdGF0dXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya19Mb2NhdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFnZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjYWRlbWljLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgSm9iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNvbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVuZGluZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcl9vZl9jaGlsZHJlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZhdGVfdmVoaWNsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvbWUpDQpsaWJyYXJ5KERUKQ0KZGF0YXRhYmxlKERhdGFfS2FzdXMwMikNCmBgYA0KDQpgYGB7cn0NCndyaXRlLmNzdihEYXRhX0thc3VzMDIsImM6XFxVc2Vyc1xcUHVibGljXFxLYXN1czAyLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQ0KYGBgDQoNCg0KIyMgU29hbCAyIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNClJpbmdrYXNhbiBTdGF0aXN0aWsgcGVudGluZyBzZXBlcnRpIGFwYSB5YW5nIGJpc2EgQW5kYSBkYXBhdGthbiBkYXJpIGt1bXB1bGFuIGRhdGEgQW5kYT8NCg0KIyMjIFINCg0KYGBge3J9DQpzdW1tYXJ5KERhdGFfS2FzdXMwMikNCmBgYA0KDQoNCiMjIFNvYWwgMyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpNZW51cnV0IHBlcmhpdHVuZ2FuIGRhbiBhbmFsaXNpcyBBbmRhLCBwZWxhbmdnYW4gbWFuYSB5YW5nIHBvdGVuc2lhbCB1bnR1ayBBbmRhIHBlcnRhaGFua2FuPyANCg0KIyMjIFINCg0KYGBge3J9DQpEYXRhX0thc3VzMDIkUGVuZGFwYXRhbiA9IERhdGFfS2FzdXMwMiRJbmNvbWUgLSBEYXRhX0thc3VzMDIkU3BlbmRpbmcNCg0KeCA8LSBmaWx0ZXIoRGF0YV9LYXN1czAyLCBJbmNvbWUgPj0gNTAwMDAwMCkNCg0KbGlicmFyeShEVCkNCmRhdGF0YWJsZSh4KQ0KYGBgDQoNCg0KDQoNCiMgUmVmZXJlbnNpDQoNCjEuICAgcmVmIDENCjIuICAgcmVmIDINCjMuICAgcmVmIDMNCg0KDQoNCg0K