Dữ liệu Khoảng cách Đại học

Giới thiệu bộ dữ liệu CollegeDistance

Dữ liệu từ cuộc khảo sát High School and Beyond được tiến hành bởi Bộ Giáo dục vào năm 1980, với một cuộc theo dõi vào năm 1986. Cuộc khảo sát bao gồm học sinh từ khoảng 1.100 trường trung học.

library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
CollegeDistance <- read_excel("C:/Users/admin/Downloads/CollegeDistance.xlsx")
View(CollegeDistance)

Định dạng

Một khung dữ liệu chứa 4.739 quan sát trên 14 biến.

gender: giới tính.

ethnicity: dân tộc (Người Mỹ gốc Phi, người Mỹ gốc Latin hoặc khác).

score: điểm kiểm tra tổng hợp năm cơ sở

fcollege: Cha có tốt nghiệp đại học không?

mcollege: Mẹ có tốt nghiệp đại học không?

home: Gia đình Có sở hữu nhà riêng không?

urban: Trường có nằm trong khu vực đô thị không?

unemp: tỷ lệ thất nghiệp vào năm 1980.

wage: mức lương hàng giờ của tiểu bang trong ngành sản xuất vào năm 1980.

distance: khoảng cách từ trường đại học 4 năm (tính bằng 10 dặm).

tuition: học phí trung bình của trường đại học 4 năm của tiểu bang (tính bằng 1000 USD).

education: số năm học.

income: Thu nhập gia đình có vượt quá 25.000 USD mỗi năm không?

region: Vùng (Tây hoặc khác).

Mô tả dữ liệu

tính số năm học bằng cách gán 12 năm cho tất cả các thành viên của lớp học cuối cùng. Mỗi năm học trung học bổ sung được tính là một năm. Học sinh có bằng cấp nghề được gán 13 năm, bằng cấp AA được gán 14 năm, bằng cấp BA được gán 16 năm, những người có một số giáo dục sau đại học được gán 17 năm và những người có bằng cấp sau đại học được gán 18 năm.

t <- CollegeDistance
str(t)
## tibble [4,739 × 15] (S3: tbl_df/tbl/data.frame)
##  $ rownames : num [1:4739] 1 2 3 4 5 6 7 8 9 10 ...
##  $ gender   : chr [1:4739] "male" "female" "male" "male" ...
##  $ ethnicity: chr [1:4739] "other" "other" "other" "afam" ...
##  $ score    : num [1:4739] 39.2 48.9 48.7 40.4 40.5 ...
##  $ fcollege : chr [1:4739] "yes" "no" "no" "no" ...
##  $ mcollege : chr [1:4739] "no" "no" "no" "no" ...
##  $ home     : chr [1:4739] "yes" "yes" "yes" "yes" ...
##  $ urban    : chr [1:4739] "yes" "yes" "yes" "yes" ...
##  $ unemp    : num [1:4739] 6.2 6.2 6.2 6.2 5.6 ...
##  $ wage     : num [1:4739] 8.09 8.09 8.09 8.09 8.09 ...
##  $ distance : num [1:4739] 0.2 0.2 0.2 0.2 0.4 ...
##  $ tuition  : num [1:4739] 0.889 0.889 0.889 0.889 0.889 ...
##  $ education: num [1:4739] 12 12 12 12 13 12 13 15 13 15 ...
##  $ income   : chr [1:4739] "high" "low" "low" "low" ...
##  $ region   : chr [1:4739] "other" "other" "other" "other" ...

Phân tích

Phân tích gia đình có sở hữu nhà qua việc thu nhập có cao hay thấp (25.000 USD mỗi năm)

income: Thu nhập gia đình có vượt quá 25.000 USD mỗi năm không?

home: Gia đình Có sở hữu nhà riêng không?

library(DT)
## Warning: package 'DT' was built under R version 4.3.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tibble' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'purrr' was built under R version 4.3.3
## Warning: package 'dplyr' was built under R version 4.3.3
## Warning: package 'stringr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
t$home <- recode(t$home,"yes"="có sở hữu nhà","no"="không sở hữu nhà")
t$income <- recode(t$income,"high"="Cao","low"="Thấp")
t$ethnicity <- recode(t$ethnicity,"afam"="Người Mỹ gốc Phi","hispanic"="Người Mỹ gốc Latin","other"="Người Mỹ gốc khác")

Lập bảng tần số và vẽ đồ thị cột

Bảng tần số biến Home

table(t$home)
## 
##    có sở hữu nhà không sở hữu nhà 
##             3887              852
prop.table(table(t$home))
## 
##    có sở hữu nhà không sở hữu nhà 
##        0.8202152        0.1797848

Nhận xét: Ta thấy được việc gia đình Có sở hữu nhà chiếm tỷ lệ rất cao khoảng 82.02% so với các gia đình Không sở hữu nhà là 17.98%

library(ggplot2)
t |> ggplot(aes(x = t$home, y = after_stat(count))) +
geom_bar(fill = 'green') +geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat ='count', color = 'red', vjust = - .5) +labs(x = 'Sở hữu nhà', y = 'Số gia đình')
## Warning: Use of `t$home` is discouraged.
## ℹ Use `home` instead.
## Use of `t$home` is discouraged.
## ℹ Use `home` instead.

Bảng tần số biến Income

table(t$income)
## 
##  Cao Thấp 
## 1365 3374
prop.table(table(t$income))
## 
##       Cao      Thấp 
## 0.2880355 0.7119645

Nhận xét: Theo như kết quả trên thì việc các gia đình thu nhập cao (trên 25.000 USD/năm) chiếm tỷ lệ thấp khoảng 28.8% và còn lại là 71.2% các gia đình có thu nhập thấp

t |> ggplot(aes(x = t$income, y = after_stat(count))) +
geom_bar(fill = 'cyan') +geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat ='count', color = 'red', vjust = - .5) +labs(x = 'Mức thu nhập', y = 'Số gia đình')
## Warning: Use of `t$income` is discouraged.
## ℹ Use `income` instead.
## Use of `t$income` is discouraged.
## ℹ Use `income` instead.

ggplot(t, aes(home, fill = income)) + geom_bar(position = 'dodge')  

Nhận xét: Độ thị hiển thị kết quả của 2 bảng tần số trên, ta có thể thấy được việc sở hữu nhà và mức thu nhập có liên quan đến nhau, cụ thể như việc gia đình có nhà mà thu nhập cao chiếm 1/3 nhóm sở hữu nhà và ngược lại thì nhóm không có nhà mà gia đình có mức thu nhập cao lại chiếm tỷ lệ rất thấp.

Ước lượng tỷ lệ

Biến Home và Biến Income

addmargins(table(t$income,t$home))
##       
##        có sở hữu nhà không sở hữu nhà  Sum
##   Cao           1234              131 1365
##   Thấp          2653              721 3374
##   Sum           3887              852 4739
prop.table(addmargins(table(t$income,t$home)))
##       
##        có sở hữu nhà không sở hữu nhà         Sum
##   Cao    0.065098122      0.006910741 0.072008863
##   Thấp   0.139955687      0.038035451 0.177991137
##   Sum    0.205053809      0.044946191 0.250000000

Nhận xét: Xét việc sở hữu nhà phụ thuộc vào mức độ thu nhập của mỗi hộ gia đình

Tỷ lệ gia đình có thu nhập cao nhưng lại Không sở hữu nhà chiếm 0.69% trong nhóm có mức thu nhập cao nhưng lại thấp hơn tỷ lệ gia đình có thu nhập thấp mà không có nhà ở chiếm 3.8% trong nhóm có mức thu thập thấp.

Tỷ lệ gia đình có thu nhập cao và sở hữu nhà chiếm 6.51% trong nhóm có mức thu nhập cao nhưng lại thấp hơn tỷ lệ gia đình có thu nhập thấp và sở hữu nhà chiếm 13.99% trong nhóm có mức thu nhập thấp.

Ước lượng tỷ lệ gia đình sở hữu nhà (biến Home)

ta kiểm định giả thuyết: H(0): Ước lượng tỷ lệ gia đình Có nhà ở (p) trong nhóm sở hữu nhà là 0.4 (40%).

rhy <- t[t$home == 'có sở hữu nhà',]

prop.test(length(rhy$home), length(t$home), p = 0.4)
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(rhy$home) out of length(t$home), null probability 0.4
## X-squared = 3485, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.4
## 95 percent confidence interval:
##  0.8089162 0.8309906
## sample estimates:
##         p 
## 0.8202152

Kết quả trên cho ta thấy giá trị kiểm định p-value < 2.2e-16 gần như là bằng 0 và nhỏ hơn giá trị α = 0.05 cho thấy giả thuyết H(0) có thể bác bỏ rằng tỷ lệ gia đình có nhà ở trong nhóm sở hữu nhà với xác suất 82.02%. Với độ tin cậy 95% thì khoảng xác suất là 80.9% đến 83.1%.

ta kiểm định giả thuyết: H(0): Ước lượng tỷ lệ gia đình không Có sở hữu nhà ở (p) trong nhóm sở hữu nhà là 0.6 (60%).

rhn <- t[t$home == 'không sở hữu nhà',]

prop.test(length(rhn$home), length(t$home), p = 0.6)
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(rhn$home) out of length(t$home), null probability 0.6
## X-squared = 3485, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.6
## 95 percent confidence interval:
##  0.1690094 0.1910838
## sample estimates:
##         p 
## 0.1797848

Kết quả trên cho ta thấy giá trị kiểm định p-value < 2.2e-16 gần như là bằng 0 và nhỏ hơn giá trị α = 0.05 cho thấy giả thuyết H(0) có thể bác bỏ rằng tỷ lệ gia đình không có nhà ở trong nhóm sở hữu nhà với xác suất 17.97%. Với độ tin cậy 95% thì khoảng xác suất là 16.9% đến 19.1%.

Ước lượng tỷ lệ biến Income

ta kiểm định giả thuyết: H(0): Ước lượng tỷ lệ gia đình có thu nhập cao (p) trong nhóm thu nhập là 0.5 (50%).

rih <- t[t$income == 'Cao',]

prop.test(length(rih$income), length(t$income), p = 0.5)
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(rih$income) out of length(t$income), null probability 0.5
## X-squared = 850.83, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.2752141 0.3012030
## sample estimates:
##         p 
## 0.2880355

Kết quả trên cho ta thấy giá trị kiểm định p-value < 2.2e-16 gần như là bằng 0 và nhỏ hơn giá trị α = 0.05 cho thấy giả thuyết H(0) có thể bác bỏ rằng tỷ lệ gia đình có thu nhập cao ở trong nhóm thu nhập với xác suất 28.8%. Với độ tin cậy 95% thì khoảng xác suất là 27.5% đến 30.12%.

ta kiểm định giả thuyết: H(0): Ước lượng tỷ lệ gia đình có thu nhập thấp (p) trong nhóm thu nhập là 0.8 (80%).

ril <- t[t$income == 'Thấp',]

prop.test(length(ril$home), length(t$income), p = 0.8)
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(ril$home) out of length(t$income), null probability 0.8
## X-squared = 229, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.8
## 95 percent confidence interval:
##  0.6987970 0.7247859
## sample estimates:
##         p 
## 0.7119645

Kết quả trên cho ta thấy giá trị kiểm định p-value < 2.2e-16 gần như là bằng 0 và nhỏ hơn giá trị α = 0.05 cho thấy giả thuyết H(0) có thể bác bỏ rằng tỷ lệ gia đình có thu nhập thấp ở trong nhóm thu nhập với xác suất 71.19%. Với độ tin cậy 95% thì khoảng xác suất là 69.87% đến 72.47%.

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

Thực hiện bài toán kiểm định giả thuyết sự bằng nhau về tỷ lệ việc sở hữu nhà phụ thuộc vào mức thu nhập của 2 tổng thể

ty <- t[t$home == 'có sở hữu nhà',]
tn <- t[t$home == 'không sở hữu nhà',]

th <- ty[ty$income == 'Cao',]
tl <- tn[tn$income == 'Thấp' ,]

a <- c(nrow(ty), nrow(tn))
b <- c(nrow(th), nrow(tl))

prop.test(b,a)
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  b out of a
## X-squared = 804.07, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.5577895 -0.4997617
## sample estimates:
##    prop 1    prop 2 
## 0.3174685 0.8462441

Ta có thể thấy rằng Tỷ lệ 1 “thành công” được hiểu là khi Mức thu nhập cao thì việc có nhà ở chiếm tỷ lệ 31.74% so với tổng thể 1 (Tổng số hộ gia đình có sở hữu nhà). Tỷ lệ 2 “thành công” được hiểu là khi mức thu nhập thấp thì việc không có nhà ở chiếm tỷ lệ 84.62% so với tổng thể 2 (Tổng số hộ gia đình không sở hữu nhà).

Ước lượng tỷ lệ Relative Risk

library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.3
x <- matrix(c(1234,131,2653,721),nrow = 2) 
RelRisk(x, conf.level = .95)
## rel. risk    lwr.ci    upr.ci 
##  2.064757  1.756302  2.437252

Kết quả cho thấy Tỷ lệ nhóm thu nhập cao và có sở hữu nhà gấp nhóm thu nhập cao mà không có sở hữu nhà khoảng 2.064757 lần. Với mức độ tin cậy 95%. Có 5% khả năng tỷ lệ rủi ro thực sự nằm ngoài khoảng 1.756302 và 2.437252.

Ước lượng Odd Ratio

library(epitools)
OddsRatio(x)
## [1] 2.560011

Nhận xét: Với kết quả này ta có hiểu là ta phải tính tỷ lệ 2 nhóm

Nhóm 1: Tỷ lệ giữa nhóm thu nhập cao mà có nhà và nhóm thu nhập cao mà không có nhà là 9.41, nghĩa là nhóm thu nhập cao mà có nhà sẽ 9.41 lần so với nhóm thu nhập cao mà không có nhà.

Nhóm 2: Tỷ lệ giữa nhóm thu nhập thấp mà có nhà và nhóm thu nhập thấp mà không có nhà là 3.68, nghĩa là nhóm thu nhập thấp mà có nhà sẽ gấp 3.68 lần so với nhóm thu nhập thấp mà không có nhà.

Vậy chỉ số OddsRatio là 2.56 có thể hiểu là tỷ lệ giữa nhóm 1 và nhóm 2 là 2.56 lần.

Ước lượng mô hình

library(GLMsData)
fitted <- glm(factor(t$home) ~ t$income, family = binomial(link = 'logit'), data = t )
summary(fitted)
## 
## Call:
## glm(formula = factor(t$home) ~ t$income, family = binomial(link = "logit"), 
##     data = t)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -2.24282    0.09188 -24.410   <2e-16 ***
## t$incomeThấp  0.94001    0.10102   9.305   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 4464.8  on 4738  degrees of freedom
## Residual deviance: 4364.0  on 4737  degrees of freedom
## AIC: 4368
## 
## Number of Fisher Scoring iterations: 4

ta có hàm hồi quy là:

Gia đình sở hữu nhà (Home) = -2.24282 + 0.94001*Nhóm thu nhập thấp

Nhận xét: Nếu nhóm gia đình sở hữu nhà tăng 1 đơn vị thì nhóm thu nhập thấp sẽ tăng trung bình 0.94 đơn vị.

LS0tDQp0aXRsZTogIk5oaeG7h20gduG7pSAyIg0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUg6JU06JVMsICVkIC0gJW0gLSAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogIHBkZl9kb2N1bWVudDoNCiAgICBleHRyYV9kZXBlbmRlbmNpZXM6DQogICAgICB2aWV0bmFtOiB1dGY4DQogICAgdG9jOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCmdlb21ldHJ5Og0KICAgICAgLSBpbm5lcj0zY20NCiAgICAgIC0gb3V0ZXI9NGNtDQogICAgICAtIHRvcD0zY20NCiAgICAgIC0gYm90dG9tPTRjbQ0KICAgICAgLSBoZWFkc2VwPTIycHQNCiAgICAgIC0gaGVhZGhlaWdodD0xMXB0DQogICAgICAtIGZvb3Rza2lwPTMzcHQNCiAgICAgIC0gaWdub3JlaGVhZA0KICAgICAgLSBpZ25vcmVmb290DQogICAgICAtIGhlaWdodHJvdW5kZWQNCmVkaXRvcl9vcHRpb25zOiANCiAgbWFya2Rvd246IA0KICAgIHdyYXA6IDcyDQotLS0NCiMgROG7ryBsaeG7h3UgS2hv4bqjbmcgY8OhY2ggxJDhuqFpIGjhu41jDQoNCiMjIEdp4bubaSB0aGnhu4d1IGLhu5kgZOG7ryBsaeG7h3UgQ29sbGVnZURpc3RhbmNlDQoNCkThu68gbGnhu4d1IHThu6sgY3Xhu5ljIGto4bqjbyBzw6F0IEhpZ2ggU2Nob29sIGFuZCBCZXlvbmQgxJHGsOG7o2MgdGnhur9uIGjDoG5oIGLhu59pIELhu5kgR2nDoW8gZOG7pWMgdsOgbyBuxINtIDE5ODAsIHbhu5tpIG3hu5l0IGN14buZYyB0aGVvIGTDtWkgdsOgbyBuxINtIDE5ODYuIEN14buZYyBraOG6o28gc8OhdCBiYW8gZ+G7k20gaOG7jWMgc2luaCB04burIGtob+G6o25nIDEuMTAwIHRyxrDhu51uZyB0cnVuZyBo4buNYy4NCg0KYGBge3J9DQpsaWJyYXJ5KHJlYWR4bCkNCkNvbGxlZ2VEaXN0YW5jZSA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9hZG1pbi9Eb3dubG9hZHMvQ29sbGVnZURpc3RhbmNlLnhsc3giKQ0KVmlldyhDb2xsZWdlRGlzdGFuY2UpDQpgYGANCg0KIyMgxJDhu4tuaCBk4bqhbmcNCg0KTeG7mXQga2h1bmcgZOG7ryBsaeG7h3UgY2jhu6lhIDQuNzM5IHF1YW4gc8OhdCB0csOqbiAxNCBiaeG6v24uDQoNCmdlbmRlcjogZ2nhu5tpIHTDrW5oLg0KDQpldGhuaWNpdHk6IGTDom4gdOG7mWMgKE5nxrDhu51pIE3hu7kgZ+G7kWMgUGhpLCBuZ8aw4budaSBN4bu5IGfhu5FjIExhdGluIGhv4bq3YyBraMOhYykuDQoNCnNjb3JlOiDEkWnhu4NtIGtp4buDbSB0cmEgdOG7lW5nIGjhu6NwIG7Eg20gY8ahIHPhu58NCg0KZmNvbGxlZ2U6ICBDaGEgY8OzIHThu5F0IG5naGnhu4dwIMSR4bqhaSBo4buNYyBraMO0bmc/DQoNCm1jb2xsZWdlOiAgTeG6uSBjw7MgdOG7kXQgbmdoaeG7h3AgxJHhuqFpIGjhu41jIGtow7RuZz8NCg0KaG9tZTogIEdpYSDEkcOsbmggQ8OzIHPhu58gaOG7r3UgbmjDoCByacOqbmcga2jDtG5nPw0KDQp1cmJhbjogIFRyxrDhu51uZyBjw7MgbuG6sW0gdHJvbmcga2h1IHbhu7FjIMSRw7QgdGjhu4sga2jDtG5nPw0KDQp1bmVtcDogdOG7tyBs4buHIHRo4bqldCBuZ2hp4buHcCB2w6BvIG7Eg20gMTk4MC4NCg0Kd2FnZTogbeG7qWMgbMawxqFuZyBow6BuZyBnaeG7nSBj4bunYSB0aeG7g3UgYmFuZyB0cm9uZyBuZ8Ogbmggc+G6o24geHXhuqV0IHbDoG8gbsSDbSAxOTgwLg0KDQpkaXN0YW5jZToga2hv4bqjbmcgY8OhY2ggdOG7qyB0csaw4budbmcgxJHhuqFpIGjhu41jIDQgbsSDbSAodMOtbmggYuG6sW5nIDEwIGThurdtKS4NCg0KdHVpdGlvbjogaOG7jWMgcGjDrSB0cnVuZyBiw6xuaCBj4bunYSB0csaw4budbmcgxJHhuqFpIGjhu41jIDQgbsSDbSBj4bunYSB0aeG7g3UgYmFuZyAodMOtbmggYuG6sW5nIDEwMDAgVVNEKS4NCg0KZWR1Y2F0aW9uOiBz4buRIG7Eg20gaOG7jWMuDQoNCmluY29tZTogIFRodSBuaOG6rXAgZ2lhIMSRw6xuaCBjw7Mgdsaw4bujdCBxdcOhIDI1LjAwMCBVU0QgbeG7l2kgbsSDbSBraMO0bmc/DQoNCnJlZ2lvbjogVsO5bmcgKFTDonkgaG/hurdjIGtow6FjKS4NCg0KIyMgTcO0IHThuqMgZOG7ryBsaeG7h3UNCg0KdMOtbmggc+G7kSBuxINtIGjhu41jIGLhurFuZyBjw6FjaCBnw6FuIDEyIG7Eg20gY2hvIHThuqV0IGPhuqMgY8OhYyB0aMOgbmggdmnDqm4gY+G7p2EgbOG7m3AgaOG7jWMgY3Xhu5FpIGPDuW5nLiBN4buXaSBuxINtIGjhu41jIHRydW5nIGjhu41jIGLhu5Ugc3VuZyDEkcaw4bujYyB0w61uaCBsw6AgbeG7mXQgbsSDbS4gSOG7jWMgc2luaCBjw7MgYuG6sW5nIGPhuqVwIG5naOG7gSDEkcaw4bujYyBnw6FuIDEzIG7Eg20sIGLhurFuZyBj4bqlcCBBQSDEkcaw4bujYyBnw6FuIDE0IG7Eg20sIGLhurFuZyBj4bqlcCBCQSDEkcaw4bujYyBnw6FuIDE2IG7Eg20sIG5o4buvbmcgbmfGsOG7nWkgY8OzIG3hu5l0IHPhu5EgZ2nDoW8gZOG7pWMgc2F1IMSR4bqhaSBo4buNYyDEkcaw4bujYyBnw6FuIDE3IG7Eg20gdsOgIG5o4buvbmcgbmfGsOG7nWkgY8OzIGLhurFuZyBj4bqlcCBzYXUgxJHhuqFpIGjhu41jIMSRxrDhu6NjIGfDoW4gMTggbsSDbS4NCg0KYGBge3J9DQp0IDwtIENvbGxlZ2VEaXN0YW5jZQ0Kc3RyKHQpDQpgYGANCg0KIyMgUGjDom4gdMOtY2gNCg0KKipQaMOibiB0w61jaCBnaWEgxJHDrG5oIGPDsyBz4bufIGjhu691IG5ow6AgcXVhIHZp4buHYyB0aHUgbmjhuq1wIGPDsyBjYW8gaGF5IHRo4bqlcCAoMjUuMDAwIFVTRCBt4buXaSBuxINtKSoqDQoNCmluY29tZTogIFRodSBuaOG6rXAgZ2lhIMSRw6xuaCBjw7Mgdsaw4bujdCBxdcOhIDI1LjAwMCBVU0QgbeG7l2kgbsSDbSBraMO0bmc/DQoNCmhvbWU6ICBHaWEgxJHDrG5oIEPDsyBz4bufIGjhu691IG5ow6AgcmnDqm5nIGtow7RuZz8NCg0KYGBge3J9DQpsaWJyYXJ5KERUKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQp0JGhvbWUgPC0gcmVjb2RlKHQkaG9tZSwieWVzIj0iY8OzIHPhu58gaOG7r3UgbmjDoCIsIm5vIj0ia2jDtG5nIHPhu58gaOG7r3UgbmjDoCIpDQp0JGluY29tZSA8LSByZWNvZGUodCRpbmNvbWUsImhpZ2giPSJDYW8iLCJsb3ciPSJUaOG6pXAiKQ0KdCRldGhuaWNpdHkgPC0gcmVjb2RlKHQkZXRobmljaXR5LCJhZmFtIj0iTmfGsOG7nWkgTeG7uSBn4buRYyBQaGkiLCJoaXNwYW5pYyI9Ik5nxrDhu51pIE3hu7kgZ+G7kWMgTGF0aW4iLCJvdGhlciI9Ik5nxrDhu51pIE3hu7kgZ+G7kWMga2jDoWMiKQ0KDQpgYGANCg0KIyMjIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbDoCB24bq9IMSR4buTIHRo4buLIGPhu5l0DQoNCiMjIyMgQuG6o25nIHThuqduIHPhu5EgYmnhur9uIEhvbWUNCmBgYHtyfQ0KdGFibGUodCRob21lKQ0KcHJvcC50YWJsZSh0YWJsZSh0JGhvbWUpKQ0KYGBgDQpOaOG6rW4geMOpdDogVGEgdGjhuqV5IMSRxrDhu6NjIHZp4buHYyBnaWEgxJHDrG5oIEPDsyBz4bufIGjhu691IG5ow6AgY2hp4bq/bSB04bu3IGzhu4cgcuG6pXQgY2FvIGtob+G6o25nIDgyLjAyJSBzbyB24bubaSBjw6FjIGdpYSDEkcOsbmggS2jDtG5nIHPhu58gaOG7r3UgbmjDoCBsw6AgMTcuOTglDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KdCB8PiBnZ3Bsb3QoYWVzKHggPSB0JGhvbWUsIHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCmdlb21fYmFyKGZpbGwgPSAnZ3JlZW4nKSArZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudChhZnRlcl9zdGF0KGNvdW50L3N1bShjb3VudCkpKSksIHN0YXQgPSdjb3VudCcsIGNvbG9yID0gJ3JlZCcsIHZqdXN0ID0gLSAuNSkgK2xhYnMoeCA9ICdT4bufIGjhu691IG5ow6AnLCB5ID0gJ1Phu5EgZ2lhIMSRw6xuaCcpDQpgYGANCg0KIyMjIyBC4bqjbmcgdOG6p24gc+G7kSBiaeG6v24gSW5jb21lDQpgYGB7cn0NCnRhYmxlKHQkaW5jb21lKQ0KcHJvcC50YWJsZSh0YWJsZSh0JGluY29tZSkpDQpgYGANCk5o4bqtbiB4w6l0OiBUaGVvIG5oxrAga+G6v3QgcXXhuqMgdHLDqm4gdGjDrCB2aeG7h2MgY8OhYyBnaWEgxJHDrG5oIHRodSBuaOG6rXAgY2FvICh0csOqbiAyNS4wMDAgVVNEL27Eg20pIGNoaeG6v20gdOG7tyBs4buHIHRo4bqlcCBraG/huqNuZyAyOC44JSB2w6AgY8OybiBs4bqhaSBsw6AgNzEuMiUgY8OhYyBnaWEgxJHDrG5oIGPDsyB0aHUgbmjhuq1wIHRo4bqlcA0KDQpgYGB7cn0NCnQgfD4gZ2dwbG90KGFlcyh4ID0gdCRpbmNvbWUsIHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCmdlb21fYmFyKGZpbGwgPSAnY3lhbicpICtnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpwZXJjZW50KGFmdGVyX3N0YXQoY291bnQvc3VtKGNvdW50KSkpKSwgc3RhdCA9J2NvdW50JywgY29sb3IgPSAncmVkJywgdmp1c3QgPSAtIC41KSArbGFicyh4ID0gJ03hu6ljIHRodSBuaOG6rXAnLCB5ID0gJ1Phu5EgZ2lhIMSRw6xuaCcpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QodCwgYWVzKGhvbWUsIGZpbGwgPSBpbmNvbWUpKSArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2RvZGdlJykgIA0KYGBgDQoNCk5o4bqtbiB4w6l0OiDEkOG7mSB0aOG7iyBoaeG7g24gdGjhu4sga+G6v3QgcXXhuqMgY+G7p2EgMiBi4bqjbmcgdOG6p24gc+G7kSB0csOqbiwgdGEgY8OzIHRo4buDIHRo4bqleSDEkcaw4bujYyB2aeG7h2Mgc+G7nyBo4buvdSBuaMOgIHbDoCBt4bupYyB0aHUgbmjhuq1wIGPDsyBsacOqbiBxdWFuIMSR4bq/biBuaGF1LCBj4bulIHRo4buDIG5oxrAgdmnhu4djIGdpYSDEkcOsbmggY8OzIG5ow6AgbcOgIHRodSBuaOG6rXAgY2FvIGNoaeG6v20gMS8zIG5ow7NtIHPhu58gaOG7r3UgbmjDoCB2w6AgbmfGsOG7o2MgbOG6oWkgdGjDrCBuaMOzbSBraMO0bmcgY8OzIG5ow6AgbcOgIGdpYSDEkcOsbmggY8OzIG3hu6ljIHRodSBuaOG6rXAgY2FvIGzhuqFpIGNoaeG6v20gdOG7tyBs4buHIHLhuqV0IHRo4bqlcC4gDQoNCiMjIyDGr+G7m2MgbMaw4bujbmcgdOG7tyBs4buHDQoNCiMjIyMgQmnhur9uIEhvbWUgdsOgIEJp4bq/biBJbmNvbWUNCmBgYHtyfQ0KYWRkbWFyZ2lucyh0YWJsZSh0JGluY29tZSx0JGhvbWUpKQ0KcHJvcC50YWJsZShhZGRtYXJnaW5zKHRhYmxlKHQkaW5jb21lLHQkaG9tZSkpKQ0KYGBgDQpOaOG6rW4geMOpdDogWMOpdCB2aeG7h2Mgc+G7nyBo4buvdSBuaMOgIHBo4bulIHRodeG7mWMgdsOgbyBt4bupYyDEkeG7mSB0aHUgbmjhuq1wIGPhu6dhIG3hu5dpIGjhu5kgZ2lhIMSRw6xuaA0KDQpU4bu3IGzhu4cgZ2lhIMSRw6xuaCBjw7MgdGh1IG5o4bqtcCBjYW8gbmjGsG5nIGzhuqFpIEtow7RuZyBz4bufIGjhu691IG5ow6AgY2hp4bq/bSAwLjY5JSB0cm9uZyBuaMOzbSBjw7MgbeG7qWMgdGh1IG5o4bqtcCBjYW8gbmjGsG5nIGzhuqFpIHRo4bqlcCBoxqFuIHThu7cgbOG7hyBnaWEgxJHDrG5oIGPDsyB0aHUgbmjhuq1wIHRo4bqlcCBtw6Aga2jDtG5nIGPDsyBuaMOgIOG7nyBjaGnhur9tIDMuOCUgdHJvbmcgbmjDs20gY8OzIG3hu6ljIHRodSB0aOG6rXAgdGjhuqVwLg0KDQpU4bu3IGzhu4cgZ2lhIMSRw6xuaCBjw7MgdGh1IG5o4bqtcCBjYW8gdsOgIHPhu58gaOG7r3UgbmjDoCBjaGnhur9tIDYuNTElIHRyb25nIG5ow7NtIGPDsyBt4bupYyB0aHUgbmjhuq1wIGNhbyBuaMawbmcgbOG6oWkgdGjhuqVwIGjGoW4gdOG7tyBs4buHIGdpYSDEkcOsbmggY8OzIHRodSBuaOG6rXAgdGjhuqVwIHbDoCBz4bufIGjhu691IG5ow6AgY2hp4bq/bSAxMy45OSUgdHJvbmcgbmjDs20gY8OzIG3hu6ljIHRodSBuaOG6rXAgdGjhuqVwLg0KDQojIyMjIMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgZ2lhIMSRw6xuaCBz4bufIGjhu691IG5ow6AgKGJp4bq/biBIb21lKQ0KDQogdGEga2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3Q6IEgoMCk6IMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgZ2lhIMSRw6xuaCBDw7MgbmjDoCDhu58gKHApIHRyb25nIG5ow7NtIHPhu58gaOG7r3UgbmjDoCBsw6AgMC40ICg0MCUpLg0KYGBge3J9DQpyaHkgPC0gdFt0JGhvbWUgPT0gJ2PDsyBz4bufIGjhu691IG5ow6AnLF0NCg0KcHJvcC50ZXN0KGxlbmd0aChyaHkkaG9tZSksIGxlbmd0aCh0JGhvbWUpLCBwID0gMC40KQ0KYGBgDQpL4bq/dCBxdeG6oyB0csOqbiBjaG8gdGEgdGjhuqV5IGdpw6EgdHLhu4sga2nhu4NtIMSR4buLbmggcC12YWx1ZSA8IDIuMmUtMTYgZ+G6p24gbmjGsCBsw6AgYuG6sW5nIDAgdsOgIG5o4buPIGjGoW4gZ2nDoSB0cuG7iyDOsSA9IDAuMDUNCiAgY2hvIHRo4bqleSBnaeG6oyB0aHV54bq/dCBIKDApIGPDsyB0aOG7gyBiw6FjIGLhu48gcuG6sW5nIHThu7cgbOG7hyBnaWEgxJHDrG5oIGPDsyBuaMOgIOG7nyB0cm9uZyBuaMOzbSBz4bufIGjhu691IG5ow6AgduG7m2kgeMOhYyBzdeG6pXQgODIuMDIlLiBW4bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlIHRow6wga2hv4bqjbmcgeMOhYyBzdeG6pXQgbMOgIDgwLjklIMSR4bq/biA4My4xJS4NCg0KDQp0YSBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dDogSCgwKTogxq/hu5tjIGzGsOG7o25nIHThu7cgbOG7hyBnaWEgxJHDrG5oIGtow7RuZyBDw7Mgc+G7nyBo4buvdSBuaMOgIOG7nyAocCkgdHJvbmcgbmjDs20gc+G7nyBo4buvdSBuaMOgIGzDoCAwLjYgKDYwJSkuDQpgYGB7cn0NCnJobiA8LSB0W3QkaG9tZSA9PSAna2jDtG5nIHPhu58gaOG7r3UgbmjDoCcsXQ0KDQpwcm9wLnRlc3QobGVuZ3RoKHJobiRob21lKSwgbGVuZ3RoKHQkaG9tZSksIHAgPSAwLjYpDQpgYGANCkvhur90IHF14bqjIHRyw6puIGNobyB0YSB0aOG6pXkgZ2nDoSB0cuG7iyBraeG7g20gxJHhu4tuaCBwLXZhbHVlIDwgMi4yZS0xNiBn4bqnbiBuaMawIGzDoCBi4bqxbmcgMCB2w6Agbmjhu48gaMahbiBnacOhIHRy4buLIM6xID0gMC4wNQ0KICBjaG8gdGjhuqV5IGdp4bqjIHRodXnhur90IEgoMCkgY8OzIHRo4buDIGLDoWMgYuG7jyBy4bqxbmcgdOG7tyBs4buHIGdpYSDEkcOsbmgga2jDtG5nIGPDsyBuaMOgIOG7nyB0cm9uZyBuaMOzbSBz4bufIGjhu691IG5ow6AgduG7m2kgeMOhYyBzdeG6pXQgMTcuOTclLiBW4bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlIHRow6wga2hv4bqjbmcgeMOhYyBzdeG6pXQgbMOgIDE2LjklIMSR4bq/biAxOS4xJS4NCiAgDQojIyMjIMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgYmnhur9uIEluY29tZQ0KDQp0YSBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dDogSCgwKTogxq/hu5tjIGzGsOG7o25nIHThu7cgbOG7hyBnaWEgxJHDrG5oIGPDsyB0aHUgbmjhuq1wIGNhbyAocCkgdHJvbmcgbmjDs20gdGh1IG5o4bqtcCBsw6AgMC41ICg1MCUpLg0KYGBge3J9DQpyaWggPC0gdFt0JGluY29tZSA9PSAnQ2FvJyxdDQoNCnByb3AudGVzdChsZW5ndGgocmloJGluY29tZSksIGxlbmd0aCh0JGluY29tZSksIHAgPSAwLjUpDQpgYGANCkvhur90IHF14bqjIHRyw6puIGNobyB0YSB0aOG6pXkgZ2nDoSB0cuG7iyBraeG7g20gxJHhu4tuaCBwLXZhbHVlIDwgMi4yZS0xNiBn4bqnbiBuaMawIGzDoCBi4bqxbmcgMCB2w6Agbmjhu48gaMahbiBnacOhIHRy4buLIM6xID0gMC4wNQ0KICBjaG8gdGjhuqV5IGdp4bqjIHRodXnhur90IEgoMCkgY8OzIHRo4buDIGLDoWMgYuG7jyBy4bqxbmcgdOG7tyBs4buHIGdpYSDEkcOsbmggY8OzIHRodSBuaOG6rXAgY2FvIOG7nyB0cm9uZyBuaMOzbSB0aHUgbmjhuq1wIHbhu5tpIHjDoWMgc3XhuqV0IDI4LjglLiBW4bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlIHRow6wga2hv4bqjbmcgeMOhYyBzdeG6pXQgbMOgIDI3LjUlIMSR4bq/biAzMC4xMiUuDQogIA0KICB0YSBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dDogSCgwKTogxq/hu5tjIGzGsOG7o25nIHThu7cgbOG7hyBnaWEgxJHDrG5oIGPDsyB0aHUgbmjhuq1wIHRo4bqlcCAocCkgdHJvbmcgbmjDs20gdGh1IG5o4bqtcCBsw6AgMC44ICg4MCUpLg0KYGBge3J9DQpyaWwgPC0gdFt0JGluY29tZSA9PSAnVGjhuqVwJyxdDQoNCnByb3AudGVzdChsZW5ndGgocmlsJGhvbWUpLCBsZW5ndGgodCRpbmNvbWUpLCBwID0gMC44KQ0KYGBgDQpL4bq/dCBxdeG6oyB0csOqbiBjaG8gdGEgdGjhuqV5IGdpw6EgdHLhu4sga2nhu4NtIMSR4buLbmggcC12YWx1ZSA8IDIuMmUtMTYgZ+G6p24gbmjGsCBsw6AgYuG6sW5nIDAgdsOgIG5o4buPIGjGoW4gZ2nDoSB0cuG7iyDOsSA9IDAuMDUNCiAgY2hvIHRo4bqleSBnaeG6oyB0aHV54bq/dCBIKDApIGPDsyB0aOG7gyBiw6FjIGLhu48gcuG6sW5nIHThu7cgbOG7hyBnaWEgxJHDrG5oIGPDsyB0aHUgbmjhuq1wIHRo4bqlcCDhu58gdHJvbmcgbmjDs20gdGh1IG5o4bqtcCB24bubaSB4w6FjIHN14bqldCA3MS4xOSUuIFbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSUgdGjDrCBraG/huqNuZyB4w6FjIHN14bqldCBsw6AgNjkuODclIMSR4bq/biA3Mi40NyUuDQoNCiMjIyDGr+G7m2MgbMaw4bujbmcgY2jDqm5oIGzhu4djaCAyIHThu7cgbOG7hw0KDQpUaOG7sWMgaGnhu4duIGLDoGkgdG/DoW4ga2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3Qgc+G7sSBi4bqxbmcgbmhhdSB24buBIHThu7cgbOG7hyB2aeG7h2Mgc+G7nyBo4buvdSBuaMOgIHBo4bulIHRodeG7mWMgdsOgbyBt4bupYyB0aHUgbmjhuq1wIGPhu6dhIDIgdOG7lW5nIHRo4buDDQpgYGB7cn0NCnR5IDwtIHRbdCRob21lID09ICdjw7Mgc+G7nyBo4buvdSBuaMOgJyxdDQp0biA8LSB0W3QkaG9tZSA9PSAna2jDtG5nIHPhu58gaOG7r3UgbmjDoCcsXQ0KDQp0aCA8LSB0eVt0eSRpbmNvbWUgPT0gJ0NhbycsXQ0KdGwgPC0gdG5bdG4kaW5jb21lID09ICdUaOG6pXAnICxdDQoNCmEgPC0gYyhucm93KHR5KSwgbnJvdyh0bikpDQpiIDwtIGMobnJvdyh0aCksIG5yb3codGwpKQ0KDQpwcm9wLnRlc3QoYixhKQ0KYGBgDQpUYSBjw7MgdGjhu4MgdGjhuqV5IHLhurFuZyBU4bu3IGzhu4cgMSAidGjDoG5oIGPDtG5nIiDEkcaw4bujYyBoaeG7g3UgbMOgIGtoaSBN4bupYyB0aHUgbmjhuq1wIGNhbyB0aMOsIHZp4buHYyBjw7MgbmjDoCDhu58gY2hp4bq/bSB04bu3IGzhu4cgMzEuNzQlIHNvIHbhu5tpIHThu5VuZyB0aOG7gyAxIChU4buVbmcgc+G7kSBo4buZIGdpYSDEkcOsbmggY8OzIHPhu58gaOG7r3UgbmjDoCkuIFThu7cgbOG7hyAyICJ0aMOgbmggY8O0bmciIMSRxrDhu6NjIGhp4buDdSBsw6Aga2hpIG3hu6ljIHRodSBuaOG6rXAgdGjhuqVwIHRow6wgdmnhu4djIGtow7RuZyBjw7MgbmjDoCDhu58gY2hp4bq/bSB04bu3IGzhu4cgODQuNjIlIHNvIHbhu5tpIHThu5VuZyB0aOG7gyAyIChU4buVbmcgc+G7kSBo4buZIGdpYSDEkcOsbmgga2jDtG5nIHPhu58gaOG7r3UgbmjDoCkuDQoNCg0KIyMjIMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgUmVsYXRpdmUgUmlzaw0KDQpgYGB7cn0NCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KeCA8LSBtYXRyaXgoYygxMjM0LDEzMSwyNjUzLDcyMSksbnJvdyA9IDIpIA0KUmVsUmlzayh4LCBjb25mLmxldmVsID0gLjk1KQ0KYGBgDQpL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IFThu7cgbOG7hyBuaMOzbSB0aHUgbmjhuq1wIGNhbyB2w6AgY8OzIHPhu58gaOG7r3UgbmjDoCBn4bqlcCBuaMOzbSB0aHUgbmjhuq1wIGNhbyBtw6Aga2jDtG5nIGPDsyBz4bufIGjhu691IG5ow6Aga2hv4bqjbmcgMi4wNjQ3NTcgbOG6p24uIFbhu5tpIG3hu6ljIMSR4buZIHRpbiBj4bqteSA5NSUuIEPDsyA1JSBraOG6oyBuxINuZyB04bu3IGzhu4cgcuG7p2kgcm8gdGjhu7FjIHPhu7EgbuG6sW0gbmdvw6BpIGtob+G6o25nIDEuNzU2MzAyIHbDoCAyLjQzNzI1Mi4NCg0KIyMjIMav4bubYyBsxrDhu6NuZyBPZGQgUmF0aW8NCg0KYGBge3J9DQpsaWJyYXJ5KGVwaXRvb2xzKQ0KT2Rkc1JhdGlvKHgpDQpgYGANCk5o4bqtbiB4w6l0OiBW4bubaSBr4bq/dCBxdeG6oyBuw6B5IHRhIGPDsyBoaeG7g3UgbMOgIHRhIHBo4bqjaSB0w61uaCB04bu3IGzhu4cgMiBuaMOzbQ0KDQpOaMOzbSAxOiBU4bu3IGzhu4cgZ2nhu69hIG5ow7NtIHRodSBuaOG6rXAgY2FvIG3DoCBjw7MgbmjDoCB2w6AgbmjDs20gdGh1IG5o4bqtcCBjYW8gbcOgIGtow7RuZyBjw7MgbmjDoCBsw6AgOS40MSwgbmdoxKlhIGzDoCBuaMOzbSB0aHUgbmjhuq1wIGNhbyBtw6AgY8OzIG5ow6Agc+G6vSA5LjQxIGzhuqduIHNvIHbhu5tpIG5ow7NtIHRodSBuaOG6rXAgY2FvIG3DoCBraMO0bmcgY8OzIG5ow6AuDQoNCk5ow7NtIDI6IFThu7cgbOG7hyBnaeG7r2EgbmjDs20gdGh1IG5o4bqtcCB0aOG6pXAgbcOgIGPDsyBuaMOgIHbDoCBuaMOzbSB0aHUgbmjhuq1wIHRo4bqlcCBtw6Aga2jDtG5nIGPDsyBuaMOgIGzDoCAzLjY4LCBuZ2jEqWEgbMOgIG5ow7NtIHRodSBuaOG6rXAgdGjhuqVwIG3DoCBjw7MgbmjDoCBz4bq9IGfhuqVwIDMuNjggbOG6p24gc28gduG7m2kgbmjDs20gdGh1IG5o4bqtcCB0aOG6pXAgbcOgIGtow7RuZyBjw7MgbmjDoC4NCg0KVuG6rXkgY2jhu4kgc+G7kSBPZGRzUmF0aW8gbMOgIDIuNTYgY8OzIHRo4buDIGhp4buDdSBsw6AgdOG7tyBs4buHIGdp4buvYSBuaMOzbSAxIHbDoCBuaMOzbSAyIGzDoCAyLjU2IGzhuqduLg0KDQojIyMgxq/hu5tjIGzGsOG7o25nIG3DtCBow6xuaA0KDQpgYGB7cn0NCmxpYnJhcnkoR0xNc0RhdGEpDQpmaXR0ZWQgPC0gZ2xtKGZhY3Rvcih0JGhvbWUpIH4gdCRpbmNvbWUsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAnbG9naXQnKSwgZGF0YSA9IHQgKQ0Kc3VtbWFyeShmaXR0ZWQpDQpgYGANCnRhIGPDsyBow6BtIGjhu5NpIHF1eSBsw6A6IA0KICANCkdpYSDEkcOsbmggc+G7nyBo4buvdSBuaMOgIChIb21lKSA9IC0yLjI0MjgyICsgMC45NDAwMSpOaMOzbSB0aHUgbmjhuq1wIHRo4bqlcA0KDQpOaOG6rW4geMOpdDogTuG6v3UgbmjDs20gZ2lhIMSRw6xuaCBz4bufIGjhu691IG5ow6AgdMSDbmcgMSDEkcahbiB24buLIHRow6wgbmjDs20gdGh1IG5o4bqtcCB0aOG6pXAgc+G6vSB0xINuZyB0cnVuZyBiw6xuaCAwLjk0IMSRxqFuIHbhu4suDQo=