#giới thiệu về dữ liệu

Dữ liệu PharmacoSmoking chứa thông tin về một nghiên cứu về hiệu quả của các phương pháp điều trị cai thuốc lá. Dưới đây là mô tả về các cột trong dữ liệu:

rownames: Số thứ tự của từng dòng dữ liệu.

id: Mã định danh của người tham gia nghiên cứu.

ttr: Thời gian đến khi tái phát (tính bằng ngày).

relapse: Biến nhị phân (0 hoặc 1) cho biết liệu người tham gia có tái phát hay không.

grp: Nhóm điều trị, gồm các giá trị: patchOnly (chỉ dùng miếng dán) và combination (kết hợp các phương pháp).

age: Tuổi của người tham gia.

gender: Giới tính của người tham gia (Male hoặc Female).

race: Chủng tộc của người tham gia (white hoặc nonwhite).

employment: Tình trạng công việc của người tham gia (ft - làm việc toàn thời gian, pt - làm việc bán thời gian, other - khác).

yearsSmoking: Số năm hút thuốc.

levelSmoking: Mức độ hút thuốc (heavy - nặng, light - nhẹ).

ageGroup2: Nhóm tuổi chia thành hai nhóm (21-49 và 50+).

ageGroup4: Nhóm tuổi chia thành bốn nhóm (21-34, 35-49, 50-64, và 65+).

priorAttempts: Số lần cố gắng cai thuốc trước đây.

longestNoSmoke: Khoảng thời gian dài nhất không hút thuốc (tính bằng ngày).

Ở đây chúng ta chỉ lấy 3 biến để phân tích dữ liệu định tính là relapse, gender, grp

library("ggplot2")
library("data.table")
data <- read.csv("Downloads/pharmacoSmoking.csv")
data01 <- data.frame(data$relapse,data$gender,data$grp)
data.table(data01)

bảng tần suất

library(data.table)
data <- fread("Downloads/pharmacoSmoking.csv")

# Lập bảng tần số cho từng biến
relapse_table <- data[, .N, by = relapse]
print("Bảng tần số của biến relapse:")
## [1] "Bảng tần số của biến relapse:"
print(relapse_table)
##    relapse  N
## 1:       0 36
## 2:       1 89
print("Trong đây 0 là số người không tái phát nghiện thuốc và 1 là tái nghiện. Phần lớn người tham gia nghiên cứu đã tái phát sau khi cố gắng cai thuốc lá, chỉ có số ít người không tái phát.")
## [1] "Trong đây 0 là số người không tái phát nghiện thuốc và 1 là tái nghiện. Phần lớn người tham gia nghiên cứu đã tái phát sau khi cố gắng cai thuốc lá, chỉ có số ít người không tái phát."
gender_table <- data[, .N, by = gender]
print("Bảng tần số của biến gender:")
## [1] "Bảng tần số của biến gender:"
print(gender_table)
##    gender  N
## 1:   Male 44
## 2: Female 81
print("Nhiều ngươi nữ tham gia nghiên cứu hơn là lượng người nam ")
## [1] "Nhiều ngươi nữ tham gia nghiên cứu hơn là lượng người nam "
grp_table <- data[, .N, by = grp]
print("Bảng tần số của biến grp:")
## [1] "Bảng tần số của biến grp:"
print(grp_table)
##            grp  N
## 1:   patchOnly 64
## 2: combination 61
print("Số người tham gia sử dụng phương pháp patchOnly chiếm tỷ lệ nhỉnh hơn một chút so với nhóm sử dụng phương pháp kết hợp")
## [1] "Số người tham gia sử dụng phương pháp patchOnly chiếm tỷ lệ nhỉnh hơn một chút so với nhóm sử dụng phương pháp kết hợp"

vẽ đồ thị

biến relapse

# Vẽ đồ thị thanh cho biến relapse
ggplot(data, aes(x=factor(relapse)),) + 
  geom_bar(color ="red") +
  labs(title="đồ thị biến relapse ", x="Relapse", y="Count")

biến gender

ggplot(data, aes(x=gender)) + 
  geom_bar(fill = "red") +
  labs(title="Đồ thị biến gender ", x="Gender", y="Count")

biểu đồ grp

ggplot(data, aes(x=grp)) + 
  geom_bar() +
  labs(title="Frequency of grp", x="grp", y="Count")

# ước lượng tỷ lệ

ước lượng tỷ lệ relapse vs gender

library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.3
## 
## Attaching package: 'DescTools'
## The following object is masked from 'package:data.table':
## 
##     %like%
a <- table(data$relapse,data$gender)
addmargins(a)
##      
##       Female Male Sum
##   0       20   16  36
##   1       61   28  89
##   Sum     81   44 125

ước lượng tỷ lệ relapse với grp

library(DescTools)
b <- table(data$relapse,data$grp)
addmargins(b)
##      
##       combination patchOnly Sum
##   0            24        12  36
##   1            37        52  89
##   Sum          61        64 125

ước lượng tỷ lệ gender vs grp

library(DescTools)
c <- table(data$grp,data$gender)
addmargins(c)
##              
##               Female Male Sum
##   combination     39   22  61
##   patchOnly       42   22  64
##   Sum             81   44 125

Ước lượng Relative Risk

RelRisk(a)
## [1] 0.8106

     Tỷ lệ tái phát ở nam giới thấp hơn so với nữ giới (RR < 1). Điều này cho thấy nam giới có khả năng tái phát thấp hơn nữ giới sau khi cố gắng cai thuốc lá.

table(data$relapse,data$gender)
##    
##     Female Male
##   0     20   16
##   1     61   28

      ước lượng relative

m <- matrix(c(20, 61, 16, 28), nrow = 2)
RelRisk(m, conf.level = .95)
## rel. risk    lwr.ci    upr.ci 
##    0.8106    0.5643    1.0839

Relative Risk (RR) = 0.8106:

Tỷ lệ tái phát ở nam giới thấp hơn so với nữ giới. Cụ thể, nam giới có khả năng tái phát sau khi cố gắng cai thuốc lá thấp hơn khoảng 19% so với nữ giới. Khoảng tin cậy 95% (CI) = (0.5643, 1.0839):

Khoảng tin cậy cho thấy rằng với độ tin cậy 95%, tỷ lệ tái phát ở nam giới so với nữ giới có thể dao động từ 56.43% đến 108.39% . Vì khoảng tin cậy chứa giá trị 1 (tức là 1 nằm trong khoảng CI), không có đủ bằng chứng để khẳng định rằng tỷ lệ tái phát ở nam và nữ có sự khác biệt đáng kể về mặt thống kê.

table(data$relapse,data$grp)
##    
##     combination patchOnly
##   0          24        12
##   1          37        52
n <- matrix(c(24, 37,12,52), nrow = 2)
RelRisk(n, conf.level = .95)
## rel. risk    lwr.ci    upr.ci 
##     1.604     1.122     2.231

Relative Risk (RR) = 1.604:

Tỷ lệ tái phát của nhóm patchOnly cao hơn nhóm combination.

Cụ thể, nhóm sử dụng phương pháp patchOnly có khả năng tái phát sau khi cố gắng cai thuốc lá cao hơn khoảng 60.4% sovới nhóm sử dụng phương pháp combination.

Khoảng tin cậy 95% (CI) = (1.122, 2.231):

Khoảng tin cậy cho thấy rằng với độ tin cậy 95%, tỷ lệ tái phát của nhóm patchOnly so với nhóm combination dao động từ 1.122 (112.2%) đến 2.231 (223.1%).

Vì khoảng tin cậy không chứa giá trị 1 (tức là 1 không nằm trong khoảng CI), có đủ bằng chứng để khẳng định rằng tỷ lệ tái phát ở hai nhóm này có sự khác biệt đáng kể về mặt thống kê.

Ước lượng Odd ratio

Biến relapse với biến gender

OddsRatio(a, conf.level = .95)
## odds ratio     lwr.ci     upr.ci 
##     0.5738     0.2591     1.2708

Giá trị OR < 1: Odds của tái phát ở nam giới thấp hơn so với nữ giới.

Khoảng tin cậy 95% chứa giá trị 1: Không có sự khác biệt đáng kể về mặt thống kê giữa odds của tái phát ở nam và nữ.

Kết luận: Mặc dù kết quả cho thấy odds của tái phát ở nam giới thấp hơn so với nữ giới, sự khác biệt này không đủ lớn để kết luận rằng giới tính có ảnh hưởng đáng kể đến odds của tái phát sau khi cố gắng cai thuốc lá. Điều này tương tự như phân tích relative risk, cần thêm các nghiên cứu với kích thước mẫu lớn hơn hoặc kiểm tra thêm các yếu tố khác để có kết luận chính xác hơn.

##biến relapse với biến grp

OddsRatio(b, conf.level = .95)
## odds ratio     lwr.ci     upr.ci 
##      2.811      1.249      6.325

Giá trị OR > 1: Odds của tái phát trong nhóm patchOnly cao hơn so với nhóm combination.

Khoảng tin cậy 95% không chứa giá trị 1: Sự khác biệt về odds của tái phát giữa hai nhóm là đáng kể về mặt thống kê.

Kết luận: Những người sử dụng phương pháp điều trị patchOnly có odds của tái phát cao hơn rõ rệt so với những người sử dụng phương pháp combination. Điều này chỉ ra rằng việc kết hợp nhiều phương pháp điều trị có thể giúp giảm odds của tái phát khi cai thuốc lá. Phương pháp điều trị combination có vẻ là hiệu quả hơn trong việc giảm tỷ lệ tái phát.

LS0tDQp0aXRsZTogIkLDoGkgdOG6rXAgMDEvMDYvMjAyNCINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVIOiVNOiVTLCAlZCAtICVtIC0gJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICBwZGZfZG9jdW1lbnQ6DQogICAgZXh0cmFfZGVwZW5kZW5jaWVzOg0KICAgICAgdmlldG5hbTogdXRmOA0KICAgIHRvYzogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQpnZW9tZXRyeToNCiAgICAgIC0gaW5uZXI9M2NtDQogICAgICAtIG91dGVyPTRjbQ0KICAgICAgLSB0b3A9M2NtDQogICAgICAtIGJvdHRvbT00Y20NCiAgICAgIC0gaGVhZHNlcD0yMnB0DQogICAgICAtIGhlYWRoZWlnaHQ9MTFwdA0KICAgICAgLSBmb290c2tpcD0zM3B0DQogICAgICAtIGlnbm9yZWhlYWQNCiAgICAgIC0gaWdub3JlZm9vdA0KICAgICAgLSBoZWlnaHRyb3VuZGVkDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG9wdGlvbnMoZGlnaXRzID0gNCksICBhdHRyLnNvdXJjZT0nLm51bWJlckxpbmVzJykNCmBgYA0KIA0KDQojZ2nhu5tpIHRoaeG7h3UgduG7gSBk4buvIGxp4buHdSANCg0KROG7ryBsaeG7h3UgUGhhcm1hY29TbW9raW5nIGNo4bupYSB0aMO0bmcgdGluIHbhu4EgbeG7mXQgbmdoacOqbiBj4bupdSB24buBIGhp4buHdSBxdeG6oyBj4bunYSBjw6FjIHBoxrDGoW5nIHBow6FwIMSRaeG7gXUgdHLhu4sgY2FpIHRodeG7kWMgbMOhLiBExrDhu5tpIMSRw6J5IGzDoCBtw7QgdOG6oyB24buBIGPDoWMgY+G7mXQgdHJvbmcgZOG7ryBsaeG7h3U6DQoNCnJvd25hbWVzOiBT4buRIHRo4bupIHThu7EgY+G7p2EgdOG7q25nIGTDsm5nIGThu68gbGnhu4d1Lg0KDQppZDogTcOjIMSR4buLbmggZGFuaCBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSBuZ2hpw6puIGPhu6l1Lg0KDQp0dHI6IFRo4budaSBnaWFuIMSR4bq/biBraGkgdMOhaSBwaMOhdCAodMOtbmggYuG6sW5nIG5nw6B5KS4NCg0KcmVsYXBzZTogQmnhur9uIG5o4buLIHBow6JuICgwIGhv4bq3YyAxKSBjaG8gYmnhur90IGxp4buHdSBuZ8aw4budaSB0aGFtIGdpYSBjw7MgdMOhaSBwaMOhdCBoYXkga2jDtG5nLg0KDQpncnA6IE5ow7NtIMSRaeG7gXUgdHLhu4ssIGfhu5NtIGPDoWMgZ2nDoSB0cuG7izogcGF0Y2hPbmx5IChjaOG7iSBkw7luZyBtaeG6v25nIGTDoW4pIHbDoCBjb21iaW5hdGlvbiAoa+G6v3QgaOG7o3AgY8OhYyBwaMawxqFuZyBwaMOhcCkuDQoNCmFnZTogVHXhu5VpIGPhu6dhIG5nxrDhu51pIHRoYW0gZ2lhLg0KDQpnZW5kZXI6IEdp4bubaSB0w61uaCBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSAoTWFsZSBob+G6t2MgRmVtYWxlKS4NCg0KcmFjZTogQ2jhu6duZyB04buZYyBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSAod2hpdGUgaG/hurdjIG5vbndoaXRlKS4NCg0KZW1wbG95bWVudDogVMOsbmggdHLhuqFuZyBjw7RuZyB2aeG7h2MgY+G7p2EgbmfGsOG7nWkgdGhhbSBnaWEgKGZ0IC0gbMOgbSB2aeG7h2MgdG/DoG4gdGjhu51pIGdpYW4sIHB0IC0gbMOgbSB2aeG7h2MgYsOhbiB0aOG7nWkgZ2lhbiwgb3RoZXIgLSBraMOhYykuDQoNCnllYXJzU21va2luZzogU+G7kSBuxINtIGjDunQgdGh14buRYy4NCg0KbGV2ZWxTbW9raW5nOiBN4bupYyDEkeG7mSBow7p0IHRodeG7kWMgKGhlYXZ5IC0gbuG6t25nLCBsaWdodCAtIG5o4bq5KS4NCg0KYWdlR3JvdXAyOiBOaMOzbSB0deG7lWkgY2hpYSB0aMOgbmggaGFpIG5ow7NtICgyMS00OSB2w6AgNTArKS4NCg0KYWdlR3JvdXA0OiBOaMOzbSB0deG7lWkgY2hpYSB0aMOgbmggYuG7kW4gbmjDs20gKDIxLTM0LCAzNS00OSwgNTAtNjQsIHbDoCA2NSspLg0KDQpwcmlvckF0dGVtcHRzOiBT4buRIGzhuqduIGPhu5EgZ+G6r25nIGNhaSB0aHXhu5FjIHRyxrDhu5tjIMSRw6J5Lg0KDQpsb25nZXN0Tm9TbW9rZTogS2hv4bqjbmcgdGjhu51pIGdpYW4gZMOgaSBuaOG6pXQga2jDtG5nIGjDunQgdGh14buRYyAodMOtbmggYuG6sW5nIG5nw6B5KS4gDQoNCuG7niDEkcOieSBjaMO6bmcgdGEgY2jhu4kgbOG6pXkgMyBiaeG6v24gxJHhu4MgcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCBsw6AgcmVsYXBzZSwgZ2VuZGVyLCBncnANCmBgYCB7cn0NCmxpYnJhcnkoImdncGxvdDIiKQ0KbGlicmFyeSgiZGF0YS50YWJsZSIpDQpkYXRhIDwtIHJlYWQuY3N2KCJEb3dubG9hZHMvcGhhcm1hY29TbW9raW5nLmNzdiIpDQpkYXRhMDEgPC0gZGF0YS5mcmFtZShkYXRhJHJlbGFwc2UsZGF0YSRnZW5kZXIsZGF0YSRncnApDQpkYXRhLnRhYmxlKGRhdGEwMSkNCmBgYA0KDQojIGLhuqNuZyB04bqnbiBzdeG6pXQNCg0KYGBge3J9DQpsaWJyYXJ5KGRhdGEudGFibGUpDQpkYXRhIDwtIGZyZWFkKCJEb3dubG9hZHMvcGhhcm1hY29TbW9raW5nLmNzdiIpDQoNCiMgTOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2hvIHThu6tuZyBiaeG6v24NCnJlbGFwc2VfdGFibGUgPC0gZGF0YVssIC5OLCBieSA9IHJlbGFwc2VdDQpwcmludCgiQuG6o25nIHThuqduIHPhu5EgY+G7p2EgYmnhur9uIHJlbGFwc2U6IikNCnByaW50KHJlbGFwc2VfdGFibGUpDQpwcmludCgiVHJvbmcgxJHDonkgMCBsw6Agc+G7kSBuZ8aw4budaSBraMO0bmcgdMOhaSBwaMOhdCBuZ2hp4buHbiB0aHXhu5FjIHbDoCAxIGzDoCB0w6FpIG5naGnhu4duLiBQaOG6p24gbOG7m24gbmfGsOG7nWkgdGhhbSBnaWEgbmdoacOqbiBj4bupdSDEkcOjIHTDoWkgcGjDoXQgc2F1IGtoaSBj4buRIGfhuq9uZyBjYWkgdGh14buRYyBsw6EsIGNo4buJIGPDsyBz4buRIMOtdCBuZ8aw4budaSBraMO0bmcgdMOhaSBwaMOhdC4iKQ0KDQpnZW5kZXJfdGFibGUgPC0gZGF0YVssIC5OLCBieSA9IGdlbmRlcl0NCnByaW50KCJC4bqjbmcgdOG6p24gc+G7kSBj4bunYSBiaeG6v24gZ2VuZGVyOiIpDQpwcmludChnZW5kZXJfdGFibGUpDQpwcmludCgiTmhp4buBdSBuZ8awxqFpIG7hu68gdGhhbSBnaWEgbmdoacOqbiBj4bupdSBoxqFuIGzDoCBsxrDhu6NuZyBuZ8aw4budaSBuYW0gIikNCg0KZ3JwX3RhYmxlIDwtIGRhdGFbLCAuTiwgYnkgPSBncnBdDQpwcmludCgiQuG6o25nIHThuqduIHPhu5EgY+G7p2EgYmnhur9uIGdycDoiKQ0KcHJpbnQoZ3JwX3RhYmxlKQ0KcHJpbnQoIlPhu5EgbmfGsOG7nWkgdGhhbSBnaWEgc+G7rSBk4bulbmcgcGjGsMahbmcgcGjDoXAgcGF0Y2hPbmx5IGNoaeG6v20gdOG7tyBs4buHIG5o4buJbmggaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBuaMOzbSBz4butIGThu6VuZyBwaMawxqFuZyBwaMOhcCBr4bq/dCBo4bujcCIpDQoNCmBgYA0KIyB24bq9IMSR4buTIHRo4buLIA0KIyMgYmnhur9uIHJlbGFwc2UgDQpgYGB7cn0NCiMgVuG6vSDEkeG7kyB0aOG7iyB0aGFuaCBjaG8gYmnhur9uIHJlbGFwc2UNCmdncGxvdChkYXRhLCBhZXMoeD1mYWN0b3IocmVsYXBzZSkpLCkgKyANCiAgZ2VvbV9iYXIoY29sb3IgPSJyZWQiKSArDQogIGxhYnModGl0bGU9IsSR4buTIHRo4buLIGJp4bq/biByZWxhcHNlICIsIHg9IlJlbGFwc2UiLCB5PSJDb3VudCIpDQoNCmBgYA0KDQojIyBiaeG6v24gZ2VuZGVyIA0KYGBge3J9DQpnZ3Bsb3QoZGF0YSwgYWVzKHg9Z2VuZGVyKSkgKyANCiAgZ2VvbV9iYXIoZmlsbCA9ICJyZWQiKSArDQogIGxhYnModGl0bGU9IsSQ4buTIHRo4buLIGJp4bq/biBnZW5kZXIgIiwgeD0iR2VuZGVyIiwgeT0iQ291bnQiKQ0KYGBgDQoNCiMjIGJp4buDdSDEkeG7kyBncnAgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEsIGFlcyh4PWdycCkpICsgDQogIGdlb21fYmFyKCkgKw0KICBsYWJzKHRpdGxlPSJGcmVxdWVuY3kgb2YgZ3JwIiwgeD0iZ3JwIiwgeT0iQ291bnQiKQ0KDQpgYGANCiMgxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyANCg0KxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyByZWxhcHNlIHZzIGdlbmRlciANCg0KYGBge3J9DQpsaWJyYXJ5KERlc2NUb29scykNCmEgPC0gdGFibGUoZGF0YSRyZWxhcHNlLGRhdGEkZ2VuZGVyKQ0KYWRkbWFyZ2lucyhhKQ0KYGBgDQoNCsaw4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgcmVsYXBzZSB24bubaSBncnANCmBgYHtyfQ0KbGlicmFyeShEZXNjVG9vbHMpDQpiIDwtIHRhYmxlKGRhdGEkcmVsYXBzZSxkYXRhJGdycCkNCmFkZG1hcmdpbnMoYikNCmBgYA0KDQrGsOG7m2MgbMaw4bujbmcgdOG7tyBs4buHIGdlbmRlciB2cyBncnAgDQpgYGB7cn0NCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KYyA8LSB0YWJsZShkYXRhJGdycCxkYXRhJGdlbmRlcikNCmFkZG1hcmdpbnMoYykNCmBgYA0KIyDGr+G7m2MgbMaw4bujbmcgUmVsYXRpdmUgUmlzaw0KDQpgYGB7cn0NClJlbFJpc2soYSkNCmBgYA0KwqDCoMKgwqDCoFThu7cgbOG7hyB0w6FpIHBow6F0IOG7nyBuYW0gZ2nhu5tpIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG7hu68gZ2nhu5tpIChSUiA8IDEpLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBuYW0gZ2nhu5tpIGPDsyBraOG6oyBuxINuZyB0w6FpIHBow6F0IHRo4bqlcCBoxqFuIG7hu68gZ2nhu5tpIHNhdSBraGkgY+G7kSBn4bqvbmcgY2FpIHRodeG7kWMgbMOhLg0KDQpgYGB7cn0NCnRhYmxlKGRhdGEkcmVsYXBzZSxkYXRhJGdlbmRlcikNCmBgYA0KwqDCoMKgwqDCoCDGsOG7m2MgbMaw4bujbmcgcmVsYXRpdmUNCmBgYHtyfQ0KbSA8LSBtYXRyaXgoYygyMCwgNjEsIDE2LCAyOCksIG5yb3cgPSAyKQ0KUmVsUmlzayhtLCBjb25mLmxldmVsID0gLjk1KQ0KYGBgDQpSZWxhdGl2ZSBSaXNrIChSUikgPSAwLjgxMDY6DQoNClThu7cgbOG7hyB0w6FpIHBow6F0IOG7nyBuYW0gZ2nhu5tpIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG7hu68gZ2nhu5tpLg0KQ+G7pSB0aOG7gywgbmFtIGdp4bubaSBjw7Mga2jhuqMgbsSDbmcgdMOhaSBwaMOhdCBzYXUga2hpIGPhu5EgZ+G6r25nIGNhaSB0aHXhu5FjIGzDoSB0aOG6pXAgaMahbiBraG/huqNuZyAxOSUgc28gduG7m2kgbuG7ryBnaeG7m2kuDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIChDSSkgPSAoMC41NjQzLCAxLjA4MzkpOg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIHRo4bqleSBy4bqxbmcgduG7m2kgxJHhu5kgdGluIGPhuq15IDk1JSwgdOG7tyBs4buHIHTDoWkgcGjDoXQg4bufIG5hbSBnaeG7m2kgc28gduG7m2kgbuG7ryBnaeG7m2kgY8OzIHRo4buDIGRhbyDEkeG7mW5nIHThu6sgNTYuNDMlIMSR4bq/biAxMDguMzklDQouDQpWw6wga2hv4bqjbmcgdGluIGPhuq15IGNo4bupYSBnacOhIHRy4buLIDEgKHThu6ljIGzDoCAxIG7hurFtIHRyb25nIGtob+G6o25nIENJKSwga2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBraOG6s25nIMSR4buLbmggcuG6sW5nIHThu7cgbOG7hyB0w6FpIHBow6F0IOG7nyBuYW0gdsOgIG7hu68gY8OzIHPhu7Ega2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHbhu4EgbeG6t3QgdGjhu5FuZyBrw6ouDQoNCg0KYGBge3J9DQp0YWJsZShkYXRhJHJlbGFwc2UsZGF0YSRncnApDQpgYGANCg0KYGBge3J9DQpuIDwtIG1hdHJpeChjKDI0LCAzNywxMiw1MiksIG5yb3cgPSAyKQ0KUmVsUmlzayhuLCBjb25mLmxldmVsID0gLjk1KQ0KYGBgDQoNClJlbGF0aXZlIFJpc2sgKFJSKSA9IDEuNjA0Og0KDQpU4bu3IGzhu4cgdMOhaSBwaMOhdCBj4bunYSBuaMOzbSBwYXRjaE9ubHkgY2FvIGjGoW4gbmjDs20gY29tYmluYXRpb24uDQoNCkPhu6UgdGjhu4MsIG5ow7NtIHPhu60gZOG7pW5nIHBoxrDGoW5nIHBow6FwIHBhdGNoT25seSBjw7Mga2jhuqMgbsSDbmcgdMOhaSBwaMOhdCBzYXUga2hpIGPhu5EgZ+G6r25nIGNhaSB0aHXhu5FjIGzDoSBjYW8gaMahbiBraG/huqNuZyA2MC40JSBzb3bhu5tpIG5ow7NtIHPhu60gZOG7pW5nIHBoxrDGoW5nIHBow6FwIGNvbWJpbmF0aW9uLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIChDSSkgPSAoMS4xMjIsIDIuMjMxKToNCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyB0aOG6pXkgcuG6sW5nIHbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSUsIHThu7cgbOG7hyB0w6FpIHBow6F0IGPhu6dhIG5ow7NtIHBhdGNoT25seSBzbyB24bubaSBuaMOzbSBjb21iaW5hdGlvbiBkYW8gxJHhu5luZyB04burIDEuMTIyICgxMTIuMiUpIMSR4bq/biAyLjIzMSAoMjIzLjElKS4NCg0KVsOsIGtob+G6o25nIHRpbiBj4bqteSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMSAodOG7qWMgbMOgIDEga2jDtG5nIG7hurFtIHRyb25nIGtob+G6o25nIENJKSwgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgdOG7tyBs4buHIHTDoWkgcGjDoXQg4bufIGhhaSBuaMOzbSBuw6B5IGPDsyBz4buxIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyB24buBIG3hurd0IHRo4buRbmcga8OqLg0KDQojIMav4bubYyBsxrDhu6NuZyBPZGQgcmF0aW8gDQoNCkJp4bq/biByZWxhcHNlIHbhu5tpIGJp4bq/biBnZW5kZXIgDQpgYGB7cn0NCk9kZHNSYXRpbyhhLCBjb25mLmxldmVsID0gLjk1KQ0KYGBgDQpHacOhIHRy4buLIE9SIDwgMTogT2RkcyBj4bunYSB0w6FpIHBow6F0IOG7nyBuYW0gZ2nhu5tpIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG7hu68gZ2nhu5tpLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNo4bupYSBnacOhIHRy4buLIDE6IEtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgduG7gSBt4bq3dCB0aOG7kW5nIGvDqiBnaeG7r2Egb2RkcyBj4bunYSB0w6FpIHBow6F0IOG7nyBuYW0gdsOgIG7hu68uDQoNCkvhur90IGx14bqtbjogTeG6t2MgZMO5IGvhur90IHF14bqjIGNobyB0aOG6pXkgb2RkcyBj4bunYSB0w6FpIHBow6F0IOG7nyBuYW0gZ2nhu5tpIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG7hu68gZ2nhu5tpLCBz4buxIGtow6FjIGJp4buHdCBuw6B5IGtow7RuZyDEkeG7pyBs4bubbiDEkeG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nIGdp4bubaSB0w61uaCBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIG9kZHMgY+G7p2EgdMOhaSBwaMOhdCBzYXUga2hpIGPhu5EgZ+G6r25nIGNhaSB0aHXhu5FjIGzDoS4gxJBp4buBdSBuw6B5IHTGsMahbmcgdOG7sSBuaMawIHBow6JuIHTDrWNoIHJlbGF0aXZlIHJpc2ssIGPhuqduIHRow6ptIGPDoWMgbmdoacOqbiBj4bupdSB24bubaSBrw61jaCB0aMaw4bubYyBt4bqrdSBs4bubbiBoxqFuIGhv4bq3YyBraeG7g20gdHJhIHRow6ptIGPDoWMgeeG6v3UgdOG7kSBraMOhYyDEkeG7gyBjw7Mga+G6v3QgbHXhuq1uIGNow61uaCB4w6FjIGjGoW4uDQoNCiMjYmnhur9uIHJlbGFwc2UgduG7m2kgYmnhur9uIGdycCANCg0KYGBge3J9DQpPZGRzUmF0aW8oYiwgY29uZi5sZXZlbCA9IC45NSkNCmBgYA0KR2nDoSB0cuG7iyBPUiA+IDE6IE9kZHMgY+G7p2EgdMOhaSBwaMOhdCB0cm9uZyBuaMOzbQ0KcGF0Y2hPbmx5IGNhbyBoxqFuIHNvIHbhu5tpIG5ow7NtIGNvbWJpbmF0aW9uLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGtow7RuZyBjaOG7qWEgZ2nDoSB0cuG7iyAxOiBT4buxIGtow6FjIGJp4buHdCB24buBIG9kZHMgY+G7p2EgdMOhaSBwaMOhdCBnaeG7r2EgaGFpIG5ow7NtIGzDoCDEkcOhbmcga+G7gyB24buBIG3hurd0IHRo4buRbmcga8OqLg0KDQpL4bq/dCBsdeG6rW46IE5o4buvbmcgbmfGsOG7nWkgc+G7rSBk4bulbmcgcGjGsMahbmcgcGjDoXAgxJFp4buBdSB0cuG7iyBwYXRjaE9ubHkgY8OzIG9kZHMgY+G7p2EgdMOhaSBwaMOhdCBjYW8gaMahbiByw7UgcuG7h3Qgc28gduG7m2kgbmjhu69uZyBuZ8aw4budaSBz4butIGThu6VuZyBwaMawxqFuZyBwaMOhcCBjb21iaW5hdGlvbi4gxJBp4buBdSBuw6B5IGNo4buJIHJhIHLhurFuZyB2aeG7h2Mga+G6v3QgaOG7o3Agbmhp4buBdSBwaMawxqFuZyBwaMOhcCDEkWnhu4F1IHRy4buLIGPDsyB0aOG7gyBnacO6cCBnaeG6o20gb2RkcyBj4bunYSB0w6FpIHBow6F0IGtoaSBjYWkgdGh14buRYyBsw6EuIFBoxrDGoW5nIHBow6FwIMSRaeG7gXUgdHLhu4sgY29tYmluYXRpb24gY8OzIHbhursgbMOgIGhp4buHdSBxdeG6oyBoxqFuIHRyb25nIHZp4buHYyBnaeG6o20gdOG7tyBs4buHIHTDoWkgcGjDoXQuDQoNCg0KDQoNCg0K