Package: Ecdat - Datasets: FriendFoe(Data from the Television Game Show Friend Or Foe ?)

“Dữ liệu quan sát về một game show Bạn hay thù? là một chương trình trò chơi của Mỹ dựa trên kiến thức và sự tin tưởng được phát sóng trên Game Show Network”.

Ta có thể tìm hiểu kỹ hơn về dữ liệu thông qua trang web được gắn link ở đây: Friend_or_Foe

Mô tả dữ liệu

Số quan sát : 227

Quan sát : Cá nhân

Quốc gia : Mỹ

Ý nghĩa các biến thuộc dữ liệu FriendFoe

Biến Giải thích sex Giới tính thí sinh white Thí sinh có phải là người da trắng không? age Tuổi của thí sinh play Lựa chọn của thí sinh: một yếu tố có cấp độ “kẻ thù” và “bạn bè” round Vòng chơi thí sinh bị loại, theo từng cấp độ 1,2,3 season Mùa chương trình ( mùa 1,2) cash Số tiền trong hộp ủy thác sex1 Giới tính của đối thủ white1 Đối thủ có phải là người da trắng hay không? age1 Tuổi của đối thủ play1 Sự lựa chọn của đối tác : một yếu tố có cấp độ “kẻ thù” và “bạn bè” win Số tiền thí sinh giành được (tính theo đôla $) win1 Số tiền đối thủ giành được (tính theo đôla $)

library(kableExtra)
library(tidyverse)
library(dplyr)
library(ggplot2)
library(gridExtra)
library(DescTools)
library(ggplot2)
library(tidyverse)
library(DT)
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor
library(dplyr)
library(cowplot)
## 
## Attaching package: 'cowplot'
## The following object is masked from 'package:lubridate':
## 
##     stamp
#Bộ dữ liệu chương trình game show "Bạn hay thù" trong packages Ecdat 
library(Ecdat)
## Loading required package: Ecfun
## 
## Attaching package: 'Ecfun'
## The following object is masked from 'package:DescTools':
## 
##     BoxCox
## The following object is masked from 'package:base':
## 
##     sign
## 
## Attaching package: 'Ecdat'
## The following object is masked from 'package:datasets':
## 
##     Orange
data(FriendFoe)
ffoe <- na.omit(FriendFoe)
#Xem cấu trúc data frame 
str(ffoe)
## 'data.frame':    227 obs. of  13 variables:
##  $ sex   : Factor w/ 2 levels "female","male": 2 2 1 2 1 1 1 2 1 1 ...
##  $ white : Factor w/ 2 levels "no","yes": 2 2 1 2 2 2 2 1 2 2 ...
##  $ age   : int  20 40 35 26 40 28 26 30 30 25 ...
##  $ play  : Factor w/ 2 levels "friend","foe": 2 2 2 1 1 2 1 2 1 1 ...
##  $ round : Factor w/ 3 levels "1","2","3": 1 3 2 1 3 2 1 3 2 1 ...
##  $ season: Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
##  $ cash  : num  1.2 7.7 3.2 1.2 5.7 3.7 1.2 7.2 3.7 0.7 ...
##  $ sex1  : Factor w/ 2 levels "female","male": 2 1 1 2 2 1 1 2 2 2 ...
##  $ white1: Factor w/ 2 levels "no","yes": 2 2 1 2 2 2 2 1 2 2 ...
##  $ age1  : int  32 31 24 40 26 23 48 27 22 61 ...
##  $ play1 : Factor w/ 2 levels "friend","foe": 1 2 2 1 2 1 1 1 2 1 ...
##  $ win   : num  1.2 0 0 0.6 0 3.7 0.6 7.2 0 0.35 ...
##  $ win1  : num  0 0 0 0.6 5.7 0 0.6 0 3.7 0.35 ...
#Tạo bảng cho data frame 
datatable(ffoe)

1 Lập bảng tần số

Ta muốn xem xét trong các thí sinh tham gia thì có bao nhiêu người là da trắng và bao nhiêu người không phải da trắng theo từng giới tính

#Tạo bảng tần số và tính toán bảng tần số đó 
f <-table(ffoe$white,ffoe$sex)
addmargins(f)
##      
##       female male Sum
##   no      17   20  37
##   yes    102   88 190
##   Sum    119  108 227
ff <- prop.table(table(ffoe$white,ffoe$sex))
addmargins (ff)
##      
##           female       male        Sum
##   no  0.07488987 0.08810573 0.16299559
##   yes 0.44933921 0.38766520 0.83700441
##   Sum 0.52422907 0.47577093 1.00000000
# Bảng phân phối biên

2 Vẽ đồ thị

#Trực quan hóa dữ liệu 
w1 <- ggplot(ffoe, aes(x = sex,
                y = after_stat(count))) +
  geom_bar(fill = "cornflowerblue", 
           color="black") +
  geom_text(aes(label = (after_stat(count))), stat = 'count', color = 'black', vjust = - .25) +
  theme_classic() +
  labs(x = "Giới tính",
       y = "Số người",
       title = "Giới tính và màu da") +
facet_grid(. ~ white) 
 
w2 <- ggplot(ffoe, aes(x = sex,
                y = after_stat(count))) +
  geom_bar( fill = "indianred3", 
           color = "black") +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), 
            stat = 'count', color = 'black', vjust = - .25) +
  theme_classic() +
  labs(x = "Giới tính",
       y = "Phần trăm",
       title = "Phần trăm thí sinh tham gia theo màu da") +
  facet_grid(. ~ white)

plot_grid(w1,w2)

Nhận xét:Nhìn vào kết quả sau khi trực quan hóa dữ liệu ta có thể thấy được số thí sinh tham gia là giới tính nữ màu da trắng có 102 người (44.9%) và không phải da trắng có 17 người (7.5%). Thí sinh tham gia là giới tính nam có 88 người (38.8%) da trắng và 20 người (8.8%) người không phải da trắng.

#Chia đồ thị giá trị số theo biến sex (giới tính)
g7 <- ggplot(ffoe, aes(x = round,
                y = after_stat(count))) +
  geom_bar(fill = "cornflowerblue", 
           color="black") +
  geom_text(aes(label = (after_stat(count))), stat = 'count', color = 'black', vjust = - .25) +
  theme_classic() +
  labs(x = "Cấp độ trò chơi",
       y = "Số người",
       title = "Số người và cấp độ bị loại của từng giới tính thí sinh") +
facet_grid(. ~ sex)

# Chia đồ thị theo tỷ lệ phần trăm giới tính đối thủ
g8  <- ggplot(ffoe, aes(x = round,
                y = after_stat(count/sum(count)))) +
  geom_bar( fill = "indianred3", 
           color = "black") +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), 
            stat = 'count', color = 'black', vjust = - .1) +
  theme_classic() +
  labs(x = "Cấp độ trò chơi",
       y = "Số người",
       title = "Phần trăm số người và cấp độ bị loại của từng giới tính thí sinh") +
  scale_y_continuous(labels = scales::percent) +
  facet_grid(.~ sex)
plot_grid(g7,g8)

3 Ước lượng tỷ lệ

f <-table(ffoe$white,ffoe$sex)
addmargins(f)
##      
##       female male Sum
##   no      17   20  37
##   yes    102   88 190
##   Sum    119  108 227
RelRisk(f)
## [1] 0.8558559

4 Ước lượng chênh lệch 2 tỷ lệ

table(ffoe$white,ffoe$sex)
##      
##       female male
##   no      17   20
##   yes    102   88
m <- matrix(c(17,102,20,88),nrow = 2)

# Ước lượng Relative risk
RelRisk(m, conf.level = .95)
## rel. risk    lwr.ci    upr.ci 
## 0.8558559 0.5672504 1.1895780
# Ước lượng Odd ratio
OddsRatio(f)
## [1] 0.7333333
OddsRatio(f,conf.level = .95)
## odds ratio     lwr.ci     upr.ci 
##  0.7333333  0.3617486  1.4866064

7 Hồi quy

hoiquytuyentinh <- function(data,x, y) {
  # Chạy hồi quy tuyến tính
  fit <- lm(formula = paste(y, "~", x), data = data)
  # Trả về mô hình hồi quy tuyến tính
  options(digits = 10)
  return(summary(fit))
}

bieudo <- function(data, x, y) {
  library(ggplot2) 
   # Vẽ đồ thị phân tán và đường hồi quy
  ggplot(data, aes_string(x = x, y = y)) +
    geom_point() +
    geom_smooth(method = "lm", se = FALSE, color = "yellow") +
    labs(title = "Biểu đồ phân tán và đường hồi quy",
         x = x,
         y = y) +
    theme_minimal()
}
LS0tDQp0aXRsZTogIkJULVQzIg0KYXV0aG9yOiAiTmd1eeG7hW4gVGjhu4sgSHXhu7NuaCBOaMawIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgcGRmX2RvY3VtZW50Og0KICAgIGV4dHJhX2RlcGVuZGVuY2llczoNCiAgICAgIHZpZXRuYW06IHV0ZjgNCiAgICB0b2M6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KZ2VvbWV0cnk6DQogICAgICAtIGlubmVyPTNjbQ0KICAgICAgLSBvdXRlcj00Y20NCiAgICAgIC0gdG9wPTNjbQ0KICAgICAgLSBib3R0b209NGNtDQogICAgICAtIGhlYWRzZXA9MjJwdA0KICAgICAgLSBoZWFkaGVpZ2h0PTExcHQNCiAgICAgIC0gZm9vdHNraXA9MzNwdA0KICAgICAgLSBpZ25vcmVoZWFkDQogICAgICAtIGlnbm9yZWZvb3QNCiAgICAgIC0gaGVpZ2h0cm91bmRlZA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNClBhY2thZ2U6IEVjZGF0IC0gRGF0YXNldHM6IEZyaWVuZEZvZShEYXRhIGZyb20gdGhlIFRlbGV2aXNpb24gR2FtZSBTaG93DQpGcmllbmQgT3IgRm9lID8pDQoNCiJE4buvIGxp4buHdSBxdWFuIHPDoXQgduG7gSBt4buZdCBnYW1lIHNob3cgQuG6oW4gaGF5IHRow7k/IGzDoCBt4buZdCBjaMawxqFuZyB0csOsbmggdHLDsg0KY2jGoWkgY+G7p2EgTeG7uSBk4buxYSB0csOqbiBraeG6v24gdGjhu6ljIHbDoCBz4buxIHRpbiB0xrDhu59uZyDEkcaw4bujYyBwaMOhdCBzw7NuZyB0csOqbiBHYW1lDQpTaG93IE5ldHdvcmsiLg0KDQpUYSBjw7MgdGjhu4MgdMOsbSBoaeG7g3Uga+G7uSBoxqFuIHbhu4EgZOG7ryBsaeG7h3UgdGjDtG5nIHF1YSB0cmFuZyB3ZWIgxJHGsOG7o2MgZ+G6r24gbGluayDhu58NCsSRw6J5OiBGcmllbmRfb3JfRm9lDQoNCk3DtCB04bqjIGThu68gbGnhu4d1DQoNClPhu5EgcXVhbiBzw6F0IDogMjI3DQoNClF1YW4gc8OhdCA6IEPDoSBuaMOibg0KDQpRdeG7kWMgZ2lhIDogTeG7uQ0KDQrDnSBuZ2jEqWEgY8OhYyBiaeG6v24gdGh14buZYyBk4buvIGxp4buHdSBGcmllbmRGb2UNCg0KQmnhur9uIEdp4bqjaSB0aMOtY2ggc2V4IEdp4bubaSB0w61uaCB0aMOtIHNpbmggd2hpdGUgVGjDrSBzaW5oIGPDsyBwaOG6o2kgbMOgIG5nxrDhu51pDQpkYSB0cuG6r25nIGtow7RuZz8gYWdlIFR14buVaSBj4bunYSB0aMOtIHNpbmggcGxheSBM4buxYSBjaOG7jW4gY+G7p2EgdGjDrSBzaW5oOiBt4buZdA0KeeG6v3UgdOG7kSBjw7MgY+G6pXAgxJHhu5kgImvhursgdGjDuSIgdsOgICJi4bqhbiBiw6giIHJvdW5kIFbDsm5nIGNoxqFpIHRow60gc2luaCBi4buLIGxv4bqhaSwNCnRoZW8gdOG7q25nIGPhuqVwIMSR4buZIDEsMiwzIHNlYXNvbiBNw7lhIGNoxrDGoW5nIHRyw6xuaCAoIG3DuWEgMSwyKSBjYXNoIFPhu5EgdGnhu4FuDQp0cm9uZyBo4buZcCDhu6d5IHRow6FjIHNleDEgR2nhu5tpIHTDrW5oIGPhu6dhIMSR4buRaSB0aOG7pyB3aGl0ZTEgxJDhu5FpIHRo4bunIGPDsyBwaOG6o2kgbMOgDQpuZ8aw4budaSBkYSB0cuG6r25nIGhheSBraMO0bmc/IGFnZTEgVHXhu5VpIGPhu6dhIMSR4buRaSB0aOG7pyBwbGF5MSBT4buxIGzhu7FhIGNo4buNbiBj4bunYQ0KxJHhu5FpIHTDoWMgOiBt4buZdCB54bq/dSB04buRIGPDsyBj4bqlcCDEkeG7mSAia+G6uyB0aMO5IiB2w6AgImLhuqFuIGLDqCIgd2luIFPhu5EgdGnhu4FuIHRow60gc2luaA0KZ2nDoG5oIMSRxrDhu6NjICh0w61uaCB0aGVvIMSRw7RsYSBcJCkgd2luMSBT4buRIHRp4buBbiDEkeG7kWkgdGjhu6cgZ2nDoG5oIMSRxrDhu6NjICh0w61uaA0KdGhlbyDEkcO0bGEgXCQpDQoNCmBgYHtyLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KbGlicmFyeShEZXNjVG9vbHMpDQpgYGANCg0KYGBge3Isd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoY293cGxvdCkNCiNC4buZIGThu68gbGnhu4d1IGNoxrDGoW5nIHRyw6xuaCBnYW1lIHNob3cgIkLhuqFuIGhheSB0aMO5IiB0cm9uZyBwYWNrYWdlcyBFY2RhdCANCmxpYnJhcnkoRWNkYXQpDQpkYXRhKEZyaWVuZEZvZSkNCmZmb2UgPC0gbmEub21pdChGcmllbmRGb2UpDQojWGVtIGPhuqV1IHRyw7pjIGRhdGEgZnJhbWUgDQpzdHIoZmZvZSkNCiNU4bqhbyBi4bqjbmcgY2hvIGRhdGEgZnJhbWUgDQpkYXRhdGFibGUoZmZvZSkNCmBgYA0KDQoqKjEgTOG6rXAgYuG6o25nIHThuqduIHPhu5EqKg0KDQpUYSBtdeG7kW4geGVtIHjDqXQgdHJvbmcgY8OhYyB0aMOtIHNpbmggdGhhbSBnaWEgdGjDrCBjw7MgYmFvIG5oacOqdSBuZ8aw4budaSBsw6AgZGENCnRy4bqvbmcgdsOgIGJhbyBuaGnDqnUgbmfGsOG7nWkga2jDtG5nIHBo4bqjaSBkYSB0cuG6r25nIHRoZW8gdOG7q25nIGdp4bubaSB0w61uaA0KDQpgYGB7cn0NCiNU4bqhbyBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdMOtbmggdG/DoW4gYuG6o25nIHThuqduIHPhu5EgxJHDsyANCmYgPC10YWJsZShmZm9lJHdoaXRlLGZmb2Ukc2V4KQ0KYWRkbWFyZ2lucyhmKQ0KZmYgPC0gcHJvcC50YWJsZSh0YWJsZShmZm9lJHdoaXRlLGZmb2Ukc2V4KSkNCmFkZG1hcmdpbnMgKGZmKQ0KIyBC4bqjbmcgcGjDom4gcGjhu5FpIGJpw6puDQpgYGANCg0KKioyIFbhur0gxJHhu5MgdGjhu4sqKg0KDQpgYGB7cn0NCiNUcuG7sWMgcXVhbiBow7NhIGThu68gbGnhu4d1IA0KdzEgPC0gZ2dwbG90KGZmb2UsIGFlcyh4ID0gc2V4LA0KICAgICAgICAgICAgICAgIHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV9iYXIoZmlsbCA9ICJjb3JuZmxvd2VyYmx1ZSIsIA0KICAgICAgICAgICBjb2xvcj0iYmxhY2siKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSAoYWZ0ZXJfc3RhdChjb3VudCkpKSwgc3RhdCA9ICdjb3VudCcsIGNvbG9yID0gJ2JsYWNrJywgdmp1c3QgPSAtIC4yNSkgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICBsYWJzKHggPSAiR2nhu5tpIHTDrW5oIiwNCiAgICAgICB5ID0gIlPhu5EgbmfGsOG7nWkiLA0KICAgICAgIHRpdGxlID0gIkdp4bubaSB0w61uaCB2w6AgbcOgdSBkYSIpICsNCmZhY2V0X2dyaWQoLiB+IHdoaXRlKSANCiANCncyIDwtIGdncGxvdChmZm9lLCBhZXMoeCA9IHNleCwNCiAgICAgICAgICAgICAgICB5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fYmFyKCBmaWxsID0gImluZGlhbnJlZDMiLCANCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpLCANCiAgICAgICAgICAgIHN0YXQgPSAnY291bnQnLCBjb2xvciA9ICdibGFjaycsIHZqdXN0ID0gLSAuMjUpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgbGFicyh4ID0gIkdp4bubaSB0w61uaCIsDQogICAgICAgeSA9ICJQaOG6p24gdHLEg20iLA0KICAgICAgIHRpdGxlID0gIlBo4bqnbiB0csSDbSB0aMOtIHNpbmggdGhhbSBnaWEgdGhlbyBtw6B1IGRhIikgKw0KICBmYWNldF9ncmlkKC4gfiB3aGl0ZSkNCg0KcGxvdF9ncmlkKHcxLHcyKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KipOaMOsbiB2w6BvIGvhur90IHF14bqjIHNhdSBraGkgdHLhu7FjIHF1YW4gaMOzYSBk4buvIGxp4buHdSB0YSBjw7MgdGjhu4MgdGjhuqV5IMSRxrDhu6NjIHPhu5EgdGjDrSBzaW5oIHRoYW0gZ2lhIGzDoCBnaeG7m2kgdMOtbmggbuG7ryBtw6B1IGRhIHRy4bqvbmcgY8OzIDEwMiBuZ8aw4budaSAoNDQuOSUpIHbDoCBraMO0bmcgcGjhuqNpIGRhIHRy4bqvbmcgY8OzIDE3IG5nxrDhu51pICg3LjUlKS4gVGjDrSBzaW5oIHRoYW0gZ2lhIGzDoCBnaeG7m2kgdMOtbmggbmFtIGPDsyA4OCBuZ8aw4budaSAoMzguOCUpIGRhIHRy4bqvbmcgdsOgIDIwIG5nxrDhu51pICg4LjglKSBuZ8aw4budaSBraMO0bmcgcGjhuqNpIGRhIHRy4bqvbmcuDQoNCmBgYHtyfQ0KI0NoaWEgxJHhu5MgdGjhu4sgZ2nDoSB0cuG7iyBz4buRIHRoZW8gYmnhur9uIHNleCAoZ2nhu5tpIHTDrW5oKQ0KZzcgPC0gZ2dwbG90KGZmb2UsIGFlcyh4ID0gcm91bmQsDQogICAgICAgICAgICAgICAgeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX2JhcihmaWxsID0gImNvcm5mbG93ZXJibHVlIiwgDQogICAgICAgICAgIGNvbG9yPSJibGFjayIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IChhZnRlcl9zdGF0KGNvdW50KSkpLCBzdGF0ID0gJ2NvdW50JywgY29sb3IgPSAnYmxhY2snLCB2anVzdCA9IC0gLjI1KSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIGxhYnMoeCA9ICJD4bqlcCDEkeG7mSB0csOyIGNoxqFpIiwNCiAgICAgICB5ID0gIlPhu5EgbmfGsOG7nWkiLA0KICAgICAgIHRpdGxlID0gIlPhu5EgbmfGsOG7nWkgdsOgIGPhuqVwIMSR4buZIGLhu4sgbG/huqFpIGPhu6dhIHThu6tuZyBnaeG7m2kgdMOtbmggdGjDrSBzaW5oIikgKw0KZmFjZXRfZ3JpZCguIH4gc2V4KQ0KDQojIENoaWEgxJHhu5MgdGjhu4sgdGhlbyB04bu3IGzhu4cgcGjhuqduIHRyxINtIGdp4bubaSB0w61uaCDEkeG7kWkgdGjhu6cNCmc4ICA8LSBnZ3Bsb3QoZmZvZSwgYWVzKHggPSByb3VuZCwNCiAgICAgICAgICAgICAgICB5ID0gYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpICsNCiAgZ2VvbV9iYXIoIGZpbGwgPSAiaW5kaWFucmVkMyIsIA0KICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudChhZnRlcl9zdGF0KGNvdW50L3N1bShjb3VudCkpKSksIA0KICAgICAgICAgICAgc3RhdCA9ICdjb3VudCcsIGNvbG9yID0gJ2JsYWNrJywgdmp1c3QgPSAtIC4xKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIGxhYnMoeCA9ICJD4bqlcCDEkeG7mSB0csOyIGNoxqFpIiwNCiAgICAgICB5ID0gIlPhu5EgbmfGsOG7nWkiLA0KICAgICAgIHRpdGxlID0gIlBo4bqnbiB0csSDbSBz4buRIG5nxrDhu51pIHbDoCBj4bqlcCDEkeG7mSBi4buLIGxv4bqhaSBj4bunYSB04burbmcgZ2nhu5tpIHTDrW5oIHRow60gc2luaCIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKw0KICBmYWNldF9ncmlkKC5+IHNleCkNCnBsb3RfZ3JpZChnNyxnOCkNCmBgYA0KDQoqKjMgxq/hu5tjIGzGsOG7o25nIHThu7cgbOG7hyoqDQoNCmBgYHtyfQ0KZiA8LXRhYmxlKGZmb2Ukd2hpdGUsZmZvZSRzZXgpDQphZGRtYXJnaW5zKGYpDQpSZWxSaXNrKGYpDQpgYGANCg0KKio0IMav4bubYyBsxrDhu6NuZyBjaMOqbmggbOG7h2NoIDIgdOG7tyBs4buHKioNCg0KYGBge3J9DQp0YWJsZShmZm9lJHdoaXRlLGZmb2Ukc2V4KQ0KbSA8LSBtYXRyaXgoYygxNywxMDIsMjAsODgpLG5yb3cgPSAyKQ0KDQojIMav4bubYyBsxrDhu6NuZyBSZWxhdGl2ZSByaXNrDQpSZWxSaXNrKG0sIGNvbmYubGV2ZWwgPSAuOTUpDQoNCiMgxq/hu5tjIGzGsOG7o25nIE9kZCByYXRpbw0KT2Rkc1JhdGlvKGYpDQoNCk9kZHNSYXRpbyhmLGNvbmYubGV2ZWwgPSAuOTUpDQpgYGANCg0KKio3IEjhu5NpIHF1eSoqDQoNCmBgYHtyfQ0KaG9pcXV5dHV5ZW50aW5oIDwtIGZ1bmN0aW9uKGRhdGEseCwgeSkgew0KICAjIENo4bqheSBo4buTaSBxdXkgdHV54bq/biB0w61uaA0KICBmaXQgPC0gbG0oZm9ybXVsYSA9IHBhc3RlKHksICJ+IiwgeCksIGRhdGEgPSBkYXRhKQ0KICAjIFRy4bqjIHbhu4EgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oDQogIG9wdGlvbnMoZGlnaXRzID0gMTApDQogIHJldHVybihzdW1tYXJ5KGZpdCkpDQp9DQoNCmJpZXVkbyA8LSBmdW5jdGlvbihkYXRhLCB4LCB5KSB7DQogIGxpYnJhcnkoZ2dwbG90MikgDQogICAjIFbhur0gxJHhu5MgdGjhu4sgcGjDom4gdMOhbiB2w6AgxJHGsOG7nW5nIGjhu5NpIHF1eQ0KICBnZ3Bsb3QoZGF0YSwgYWVzX3N0cmluZyh4ID0geCwgeSA9IHkpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFLCBjb2xvciA9ICJ5ZWxsb3ciKSArDQogICAgbGFicyh0aXRsZSA9ICJCaeG7g3UgxJHhu5MgcGjDom4gdMOhbiB2w6AgxJHGsOG7nW5nIGjhu5NpIHF1eSIsDQogICAgICAgICB4ID0geCwNCiAgICAgICAgIHkgPSB5KSArDQogICAgdGhlbWVfbWluaW1hbCgpDQp9DQpgYGANCg==