1 Phần mở đầu

1.1 Lý do chọn đề tài

Trong bối cảnh hiện nay, vấn đề sức khỏe tinh thần ngày càng nhận được nhiều sự quan tâm của xã hội, đặc biệt là trong giới sinh viên. Sinh viên là đối tượng dễ bị ảnh hưởng bởi nhiều yếu tố khác nhau như áp lực học tập, cuộc sống xa nhà, môi trường sống và học tập mới, cùng với những mối quan hệ xã hội phức tạp. Những yếu tố này có thể dẫn đến tình trạng căng thẳng và trầm cảm, gây ảnh hưởng nghiêm trọng đến sức khỏe, học tập và cuộc sống của sinh viên.

Theo Tổ chức Y tế Thế giới (WHO), trầm cảm là căn bệnh phổ biến nhất trên toàn thế giới và đứng thứ hai trong gánh nặng bệnh lý toàn cầu, chỉ sau bệnh lý mạch vành. Ước tính trên thế giới có khoảng 335 triệu người bị ảnh hưởng bởi trầm cảm. Theo thống kê năm 2022, tại Việt Nam, tỉ lệ mắc 10 rối loạn tâm thần thường gặp là 14,9% dân số - tương đương gần 15 triệu người. Một điều đáng chú ý là đa số người dân cho rằng rối loạn tâm thần chỉ liên quan đến tâm thần phân liệt, nhưng thực tế là các rối loạn lo âu và trầm cảm chiếm tỉ lệ cao, lên đến 5,4% dân số, còn lại là các rối loạn tâm thần khác như chậm phát triển tâm thần, rối loạn hành vi ở thanh thiếu niên, lạm dụng rượu, chất kích thích,…Hậu quả nghiêm trọng nhất của trầm cảm là hành vi tự tử. Thống kê tại Việt Nam cho thấy số người tự tử hàng năm lên tới 36.000 – 40.000 người, cao gấp 3 – 4 lần số ca tử vong do tai nạn giao thông. Trầm cảm chịu trách nhiệm cho 75% các vụ tự tử kể trên, còn lại là 22% là do nghiện rượu, ma tuý, cờ bạc và chỉ có 3% do tâm thần phân liệt, động kinh.

Một số yếu tố ảnh hưởng đến việc bị trầm cảm ở sinh viên bao gồm: áp lực từ việc học tập với khối lượng bài vở lớn và yêu cầu cao, áp lực từ gia đình về thành tích học tập, môi trường sống thay đổi khi phải sống xa nhà, mối quan hệ xã hội phức tạp và thiếu sự hỗ trợ từ người thân, bạn bè. Ngoài ra, sự phát triển mạnh mẽ của công nghệ và mạng xã hội cũng góp phần làm tăng thêm áp lực và sự so sánh trong giới trẻ, dẫn đến tình trạng trầm cảm.Việc nghiên cứu và hiểu rõ các yếu tố này là cần thiết để có thể đề xuất các giải pháp hỗ trợ kịp thời và hiệu quả. Đồng thời, việc nâng cao nhận thức về trầm cảm trong cộng đồng sinh viên cũng góp phần tạo ra môi trường học tập và sinh hoạt lành mạnh hơn.

Chính vì lý do này, tôi đã chọn đề tài “Phân tích các yếu tố ảnh hưởng đến việc bị trầm cảm ở sinh viên” với hy vọng góp phần nhỏ bé vào việc nâng cao nhận thức và tìm kiếm các biện pháp hữu hiệu nhằm giảm thiểu tình trạng trầm cảm trong giới sinh viên. Qua đó, tôi mong muốn đóng góp vào việc xây dựng một môi trường học đường lành mạnh và hỗ trợ tốt hơn cho sinh viên trong việc phát triển toàn diện cả về thể chất lẫn tinh thần.

1.2 Mục tiêu nghiên cứu

Mục tiêu chính của đề tài là đánh giá mức độ ảnh hưởng của các yếu tố liên quan đến bệnh trầm cảm ở sinh viên., từ đó đề xuất các biện pháp giáo dục và can thiệp thích hợp nhằm giảm thiểu tình trạng trầm cảm và tăng cường sức khỏe tâm lý cho cộng đồng sinh viên.

1.3 Đối tượng nghiên cứu và phạm vi nghiên cứu

Đối tượng nghiên cứu: sinh viên ở các cấp học khác nhau như trung học phổ thông, đại học và thạc sĩ.

Phạm vi nghiên cứu: 352 sinh viên Hoa Kỳ.

1.4 Phương pháp nghiên cứu

Nghiên cứu sử dụng phương pháp hồi quy đối với dữ liệu định tính để phân tích dữ liệu khảo sát từ 352 sinh viên Hoa Kỳ. Phương pháp này cho phép chúng tôi xác định độ ảnh hưởng của từng yếu tố đến việc bị trầm cảm ở sinh viên

1.5 Ý nghĩa nghiên cứu

Nghiên cứu này sẽ giúp làm rõ các yếu tố gây ra trầm cảm, những khó khăn và rào cản mà sinh viên phải đối mặt khi tìm kiếm sự hỗ trợ và can thiệp. Kết quả của nghiên cứu sẽ cung cấp những kiến thức hữu ích để tăng cường nhận thức về trầm cảm và giúp định hướng các biện pháp can thiệp, hỗ trợ và giáo dục hiệu quả nhằm giảm thiểu tình trạng trầm cảm trong cộng đồng sinh viên. Điều này sẽ đóng góp tích cực vào việc nâng cao sức khỏe tâm lý và chất lượng cuộc sống của các bạn trẻ, đồng thời giảm thiểu tác động xã hội của vấn đề này.

2 Dữ liệu nghiên cứu

Data <- read_excel("C:/Users/Admin/Downloads/Data.xlsx")
str (Data)
## tibble [352 × 14] (S3: tbl_df/tbl/data.frame)
##  $ Gender            : chr [1:352] "Male" "Male" "Female" "Female" ...
##  $ Age               : num [1:352] 22 22 17 18 19 26 23 21 21 22 ...
##  $ Education         : chr [1:352] "College - Bachelor's" "College - Bachelor's" "High School" "High School" ...
##  $ Pleasureinthings  : num [1:352] 3 2 2 3 1 1 2 3 3 3 ...
##  $ Feelingdown       : num [1:352] 2 1 2 1 2 2 2 3 1 4 ...
##  $ Littleenergy      : num [1:352] 4 1 2 3 3 4 3 3 3 2 ...
##  $ Feelingbadyourself: num [1:352] 3 1 1 1 1 1 1 3 2 3 ...
##  $ Hurtingyourself   : num [1:352] 2 1 1 2 1 1 1 3 1 2 ...
##  $ Job               : chr [1:352] "Yes" "Yes" "No" "No" ...
##  $ Accommodation     : chr [1:352] "Home (with parents)" "Private rented accommodation" "Home (with parents)" "Home (with parents)" ...
##  $ Selfstudy         : chr [1:352] "2 - 4 hours" "1 - 2 hours" "1 - 2 hours" "1 - 2 hours" ...
##  $ Media             : chr [1:352] "More than 4 Hours" "1 - 2 Hours" "More than 4 Hours" "2 - 4 Hours" ...
##  $ GPA               : num [1:352] 2.3 2.7 2.97 2.74 3.37 3.33 2.75 3.25 3.97 2.75 ...
##  $ Depression        : chr [1:352] "No" "Yes" "No" "No" ...
datatable(Data)

Dữ liệu sử dụng trong bài nghiên cứu được lấy từ tác giả Kane Rudolph trên trang web kaggle.com.

Dữ liệu được thu thập bằng cách khảo sát sinh viên Hoa Kỳ đang theo học ở các cấp học khác nhau như trung học, đại học và thạc sĩ. Tổng cộng có 352 sinh viên được đưa vào nghiên cứu. Dữ liệu được thu thập từ các sinh viên bằng phương pháp câu hỏi với sự đồng ý có hiểu biết.

Bộ dữ liệu gồm có 14 biến. Trong đó có 7 biến định tính và 7 biến định lượng:

Biến định tính:

  • Biến Depression - Sinh viên có biểu hiện trầm cảm hay không, gồm 2 giá trị: Yes hoặc No.

  • Biến Gender - Giới tính của sinh viên, gồm 2 giá trị Male (Nam) hoặc Female (Nữ).

  • Accommodation - Nơi ở hiện tại của sinh viên, gồm 2 giá trị: Home with parents (Tại nhà với gia đình) và Private rented accommodation (Phòng trọ tư nhân).

  • Biến Education - Trình độ học vấn hiện tại, gồm 3 giá trị - High School (Trung học phổ thông), College - Bachelor’s (Đại học) và Master (Thạc sĩ).

  • Biến Job - hiện tại có đi làm hay không, gồm 2 giá trị: Yes hoặc No

  • Biến Media - số giờ dành cho phương tiện truyền thông mỗi ngày, gồm 3 giá trị: 1 - 2 hours (từ 1 đến 2 tiếng), 2 - 4 hours (từ 2 đến 4 tiếng) và More than 4 hours (hơn 4 tiếng).

  • Biến Selfstudy - Số giờ tự học mỗi ngày, gồm 3 giá trị: 1 - 2 hours (từ 1 đến 2 tiếng), 2 - 4 hours (từ 2 đến 4 tiếng) và More than 4 hours (hơn 4 tiếng).

Biến định lượng:

  • Biến Age - Tuổi của sinh viên.

  • Biến Pleasureinthings - Ít hứng thú hoặc niềm vui trong công việc, gồm 4 mức độ: 1 (Chưa bao giờ), 2(Thi thoảng), 3 (Thường xuyên), 4 (Luôn luôn).

  • Biến Littleenergy - Cảm thấy mệt mỏi hoặc có ít năng lượng, gồm 4 mức độ tương tự như biến Pleasureinthings.

  • Biến Feelingbadyourself - Cảm thấy tồi tệ về bản thân hoặc rằng bạn là một kẻ thất bại hoặc đã không làm bản thân hoặc gia đình thất vọng, gồm 4 mức độ tương tự như biến Pleasureinthings.

  • Biến Feelingdown - Cảm thấy thất vọng, chán nản, hoặc vô vọng, gồm 4 mức độ tương tự như biến Pleasureinthings.

  • Biến Hurtingyourself - Suy nghĩ rằng bạn nên chết đi hoặc làm tổn thương chính mình theo một cách nào đó, gồm 4 mức độ tương tự như biến Pleasureinthings.

  • Biến GPA - Điểm số tích luỹ hiện tại tính theo thang điểm 4.

3 Chọn biến định tính làm biến phụ thuộc

Phân tích các yếu tố ảnh hưởng đến việc bị trầm cảm ở sinh viên

Tôi chọn biến Depression (biểu hiện cho việc có trầm cảm hoặc không trầm cảm ở sinh viên) làm biến phụ thuộc. Với mục đích, tôi muốn khảo sát xem các yếu tố về giới tính, độ tuổi, nơi ở hiện tại, công việc hiện tại, thời gian tự học mỗi ngày, điểm số GPA… ảnh hưởng như thế nào đối với việc có biểu hiện trầm cảm của sinh viên được khảo sát.

Các biến phân tích bao gồm:

  • Biến định tính: Depression, Gender, Accommodation, Job, Education

  • Biến định lượng: Age, GPA

3.1 Thống kê mô tả

3.1.1 Thống kê mô tả cho 1 biến

Thống kê mô tả cho biến định tính

dnt <- Data[,c("Gender","Accommodation","Education","Selfstudy","Job","Media","Depression")]

3.1.1.1 Biến Depression - Trầm cảm

table(Data$Depression)
## 
##  No Yes 
## 182 170
prop.table(table(Data$Depression))
## 
##        No       Yes 
## 0.5170455 0.4829545
ggplot(Data,aes(Depression))+
  geom_bar(color = "blue", fill = "skyblue")+
   geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat=  'count', color = 'black', vjust = -.5)+
  ylab("Number of Students")+ xlab("Depression") + labs(title = 'Đồ thị về bệnh trầm cảm của 352 người được khảo sát')

Theo như kết quả khảo sát thu thập được, cho thấy một sự thật khá bất ngờ và đáng báo động: số sinh viên tham gia khảo sát cụ thể là 170 sinh viên trên tổng số sinh viên được lấy thông tin khảo sát (chiếm 48.3%) báo cáo rằng họ có biểu hiện bị mắc bệnh trầm cảm. Đây là một tỷ lệ cao, và nó gợi lên một câu hỏi đáng quan ngại về tình hình tâm lý của sinh viên trong thời đại ngày nay. Số còn lại là 182 sinh viên (xấp xỉ 51.7%) thì không có biểu hiện của sự trầm cảm này.

3.1.1.2 Biến Gender - Giới tính

table(Data$Gender)
## 
## Female   Male 
##    313     39
prop.table(table(Data$Gender))
## 
##    Female      Male 
## 0.8892045 0.1107955
ggplot(Data,aes(Gender))+
  geom_bar(color = "blue", fill = "skyblue")+
   geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat=  'count', color = 'black', vjust = -.5)+
  ylab("Number of Students")+ xlab("Gender") + labs(title = 'Đồ thị về giới tính của 352 người được khảo sát')

Trong tổng số 352 học sinh sinh viên tham gia khảo sát thì có đến 313 sinh viên nữ (chiếm gần 89%) và 39 sinh viên nam (chiếm 11%).

3.1.1.3 Biến Education - Trình độ học vấn

table(Data$Education)
## 
## College - Bachelor's          High School               Master 
##                  204                  124                   24
prop.table(table(Data$Education))
## 
## College - Bachelor's          High School               Master 
##           0.57954545           0.35227273           0.06818182
ggplot(Data,aes(Education))+
  geom_bar(color = "blue", fill = "skyblue")+
   geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat=  'count', color = 'black', vjust = -.5)+
  ylab("Number of Students")+ xlab("Education") + labs(title = 'Đồ thị về trình độ học vấn của 352 người được khảo sát')

Kết quả khảo sát 352 học sinh sinh viên cho thấy :

  • Có 204 sinh viên đang theo học đại học (college - Bachelor’s) chiếm tỉ lệ 58%

  • Có 124 học sinh đang học trung học phổ thông (High School) chiếm tỉ lệ 35%

  • Có 24 sinh viên đang theo học thạc sĩ (Master) chiếm tỉ lệ 7%

3.1.1.4 Biến Job - Công việc hiện tại

table(Data$Job)
## 
##  No Yes 
## 119 233
prop.table(table(Data$Job))
## 
##        No       Yes 
## 0.3380682 0.6619318
ggplot(Data,aes(Job))+
  geom_bar(color = "blue", fill = "skyblue")+
   geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat=  'count', color = 'black', vjust = -.5)+
  ylab("Number of Students")+ xlab("Job") + labs(title = 'Đồ thị về công việc hiện tại của 352 người được khảo sát')

Trong tổng số những học sinh, sinh viên được khảo sát (352 người) thì có đến 233 người có việc làm bao gồm cả công việc full-tim và part-time (chiếm 66% ) và có 119 người không đi làm (chiếm 34%).

3.1.1.5 Biến Accommodation - Nơi ở hiện tại

table(Data$Accommodation)
## 
##          Home (with parents) Private rented accommodation 
##                          155                          197
prop.table(table(Data$Accommodation))
## 
##          Home (with parents) Private rented accommodation 
##                    0.4403409                    0.5596591
ggplot(Data,aes(Accommodation))+
  geom_bar(color = "blue", fill = "skyblue")+
   geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat=  'count', color = 'black', vjust = -.5)+
  ylab("Number of Students")+ xlab("Accommodation") + labs(title = 'Đồ thị về nơi ở hiện tại của 352 người được khảo sát')

Theo kết quả của bảng khảo sát 352 học sinh sinh viên thì có :

  • 155 học sinh sinh viên sống chung với gia đình chiếm 44%

  • 197 học sinh sinh viên ở tại các phòng trọ tư nhân chiếm 56%

Đa số học sinh sinh viên có xu hướng ở các phòng trọ tư nhân hơn là sống chung với gia đình

Thống kê mô tả cho biến định lượng

dnl <- Data[,c("Age","Pleasureinthings","Littleenergy","Feelingbadyourself","Feelingdown","Hurtingyourself","GPA")]

3.1.1.6 Biến Age - Tuổi

summary(Data$Age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   17.00   19.00   22.00   21.97   24.00   28.00

Trong 352 học sinh, sinh viên được khảo sát về bệnh trầm cảm có độ tuổi từ 17 đến 28 tuổi, trong đó:

  • Độ tuổi trung bình là 21.97

  • Có 25% người dưới 19 tuổi

  • Có 50% người dưới 22 tuổi

  • Có 75% người dưới 24 tuổi

sd(Data$Age)
## [1] 3.21924

Độ lệch chuẩn của tuổi những người khả sát là 3.2, cho biết mức độ phân tán về tuổi của từng người được khảo sát trong 352 người so với giá trị trung bình là 3.2.

table(Data$Age)
## 
## 17 18 19 20 21 22 23 24 25 26 27 28 
## 32 23 46 31 26 44 34 40 14 18 26 18
prop.table(table(Data$Age))
## 
##         17         18         19         20         21         22         23 
## 0.09090909 0.06534091 0.13068182 0.08806818 0.07386364 0.12500000 0.09659091 
##         24         25         26         27         28 
## 0.11363636 0.03977273 0.05113636 0.07386364 0.05113636
ggplot(Data,aes(Age))+
  geom_bar(color = "blue", fill = "skyblue")+
   geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat=  'count', color = 'black', vjust = -.5)+
  ylab("Number of Students")+ xlab("Age")  + labs(title = 'Đồ thị độ tuổi của 352 người được khảo sát')

Những người được khảo sát nằm trong 12 độ tuổi khác nhau từ 17 đến 28 tuổi. Trong đó, người ở độ tuổi 19 có số lượng đông nhất (46 người, chiếm 13.07%), người ở độ tuổi 25 là ít nhất (14 người, chiếm 3.98%).

Người ở độ tuổi cao nhất là 28 tuổi (18 người, chiếm 5.11%), người ở độ tuổi thấp nhất là 17 tuổi (32 người, chiếm 9.09%).

3.1.1.7 Biến GPA - Điểm số tích luỹ hiện tại tính theo thang điểm 4

summary(Data$GPA)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.300   3.350   3.009   3.350   4.000

Trong 352 người được khảo sát về điểm số tích luỹ hiện tại tính theo thang điểm 4 có điểm thấy nhất là 1 và điểm cao nhất là 4:

  • Số điểm trung bình là 3.009 điểm

  • Có 25% người dưới 2.3 điểm

  • Có 50% người dưới 3.35 điểm

  • Có 75% người dưới 3.35 điểm

sd(Data$GPA)
## [1] 0.760909

Độ lệch chuẩn của điểm số tích lũy những người khảo sát là 0.76, cho biết mức độ phân tán về điểm số tích lũy của từng người khảo sát trong 352 người so với giá trị trung bình là 0.76.

table(Data$GPA)
## 
##    1  1.3    2  2.2 2.25  2.3 2.32  2.4 2.47  2.5  2.7 2.73 2.74 2.75 2.78 2.83 
##    2   21    1    1    2   91    1    1    1    1    1    1    1   10    1    1 
## 2.85 2.87 2.97 2.98 3.05  3.1 3.15  3.2 3.23 3.24 3.25 3.27 3.33 3.35 3.37 3.41 
##    1    1    5    1    1    1    1    1    1    1    6    2    1  112    2    1 
## 3.42  3.5 3.54  3.7 3.73 3.75 3.76 3.84 3.89 3.93 3.97 3.98    4 
##    1    1    1    2    1    4    2    1    1    1    1    1   60
prop.table(table(Data$GPA))
## 
##           1         1.3           2         2.2        2.25         2.3 
## 0.005681818 0.059659091 0.002840909 0.002840909 0.005681818 0.258522727 
##        2.32         2.4        2.47         2.5         2.7        2.73 
## 0.002840909 0.002840909 0.002840909 0.002840909 0.002840909 0.002840909 
##        2.74        2.75        2.78        2.83        2.85        2.87 
## 0.002840909 0.028409091 0.002840909 0.002840909 0.002840909 0.002840909 
##        2.97        2.98        3.05         3.1        3.15         3.2 
## 0.014204545 0.002840909 0.002840909 0.002840909 0.002840909 0.002840909 
##        3.23        3.24        3.25        3.27        3.33        3.35 
## 0.002840909 0.002840909 0.017045455 0.005681818 0.002840909 0.318181818 
##        3.37        3.41        3.42         3.5        3.54         3.7 
## 0.005681818 0.002840909 0.002840909 0.002840909 0.002840909 0.005681818 
##        3.73        3.75        3.76        3.84        3.89        3.93 
## 0.002840909 0.011363636 0.005681818 0.002840909 0.002840909 0.002840909 
##        3.97        3.98           4 
## 0.002840909 0.002840909 0.170454545
hist(Data$GPA)

Theo kết quả khảo sát cho thấy:

  • Số điểm tích lũy GPA có mức điểm GPA 3.35 là mức điểm có tỷ lệ xác suất cao nhất là 31.82%.

  • Biến GPA (số điểm tích lũy trên thang điểm 4) có giá trị từ 1.0 đến 4.0, trong đó chiếm nhiều nhất là mức điểm GPA nằm trong vùng từ 3.0 đến 3.5; Còn mức điểm GPA tích lũy chiếm ít nhất là từ mức điểm 1.5 đến 2.0

3.1.2 Thống kê mô tả cho các cặp biến

3.1.2.1 Biến Depression (Sinh viên có biểu hiện trầm cảm) và biến Gender (Giới tính)

risk1 <- table(Data$Gender, Data$Depression)
addmargins(risk1)
##         
##           No Yes Sum
##   Female 164 149 313
##   Male    18  21  39
##   Sum    182 170 352
prop.table(risk1)
##         
##                  No        Yes
##   Female 0.46590909 0.42329545
##   Male   0.05113636 0.05965909
prop.table(risk1,margin=2)
##         
##                 No       Yes
##   Female 0.9010989 0.8764706
##   Male   0.0989011 0.1235294
ggplot(Data, aes(Gender, fill = Depression)) + geom_bar(position = 'dodge') + geom_text(aes(label = scales::percent(after_stat(count / sum(count)), accuracy = 0.01)), 
            stat = "count", 
            position = position_dodge(width = 0.9), 
            vjust = -0.5, 
            color = 'black')

Từ bảng tần số về việc sinh viên có biểu hiện trầm cảm và giới tính ta thấy:

  • Trong số 182 sinh viên không có biểu hiện trầm cảm: sinh viên nữ là 164 người (chiếm hơn 90.1%), sinh viên nam là 18 người (khoảng 9.9%).

  • Trong số 170 sinh viên có biểu hiện trầm cảm: sinh viên nữ là 149 người (khoảng 87.6%), sinh viên nam là 21 người (khoảng 12.4%).

Tỷ lệ phần trăm nhóm sinh viên có biểu hiện trầm cảm là nữ nhiều hơn nam. Tỷ lệ phần trăm nhóm sinh viên không có biểu hiện trầm cảm là nữ nhiều hơn nam.

Như vậy, giữa hai nhóm người có hay không có biểu hiện trầm cảm đều có số lượng là nữ nhiều hơn là nam.

Risk ratio/ Odd ratio

Risk ratio

riskratio(risk1)
## $data
##         
##           No Yes Total
##   Female 164 149   313
##   Male    18  21    39
##   Total  182 170   352
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate     lower    upper
##   Female 1.000000        NA       NA
##   Male   1.131131 0.8271825 1.546765
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male     0.468275    0.4997283  0.4619536
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Tỷ lệ sinh viên nam có biểu hiện trầm cảm so với tỷ lệ sinh viên nữ có biểu hiện trầm cảm là 1.13, cho thấy tỷ lệ sinh viên nam có biểu hiện trầm cảm nhiều hơn 13% so với tỷ lệ sinh viên nữ có biểu hiện trầm cảm.

Odd ratio

oddsratio(risk1, rev = 'c')
## $data
##         
##          Yes  No Total
##   Female 149 164   313
##   Male    21  18    39
##   Total  170 182   352
## 
## $measure
##         odds ratio with 95% C.I.
##           estimate     lower    upper
##   Female 1.0000000        NA       NA
##   Male   0.7802242 0.3948421 1.527056
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male     0.468275    0.4997283  0.4619536
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Tỷ lệ giữa những sinh viên nữ có biểu hiện trầm cảm so với không có biểu hiện trầm cảm bằng 78% tỷ lệ giữa những sinh viên nam có biểu hiện trầm cảm so với không có biểu hiện trầm cảm.

Giá trị trên cho biết tỷ lệ có biểu hiện trầm cảm so với không có biểu hiện trầm cảm của những sinh viên nữ ít hơn 22% so với những sinh viên nam.

3.1.2.2 Biến Depression (Sinh viên có biểu hiện trầm cảm) và biến Age (Độ tuổi)

mean(Data$Age)
## [1] 21.96591

Ta chia độ tuổi của nhóm sinh viên khảo sát thành hai nhóm dưới 22 tuổi và trên 22 tuổi.

age2 <- cut(Data$Age, breaks = c(0,22,28), labels = c('dưới 22 tuổi', 'trên 22 tuổi'))
d <- mutate(Data,age2)
risk2 <- table(d$age2,Data$Depression)
addmargins(risk2)
##               
##                 No Yes Sum
##   dưới 22 tuổi 115  87 202
##   trên 22 tuổi  67  83 150
##   Sum          182 170 352
prop.table(risk2)
##               
##                       No       Yes
##   dưới 22 tuổi 0.3267045 0.2471591
##   trên 22 tuổi 0.1903409 0.2357955
prop.table(risk2, margin=2)
##               
##                       No       Yes
##   dưới 22 tuổi 0.6318681 0.5117647
##   trên 22 tuổi 0.3681319 0.4882353
ggplot(Data, aes(age2, fill = Depression)) + geom_bar(position = 'dodge') + geom_text(aes(label = scales::percent(after_stat(count / sum(count)), accuracy = 0.01)), 
            stat = "count", 
            position = position_dodge(width = 0.9), 
            vjust = -0.5, 
            color = 'black')

Ta chia độ tuổi của nhóm sinh viên khảo sát thành hai nhóm dưới 22 tuổi và trên 22 tuổi.

Từ bảng tần số và đồ thị về việc sinh viên có biểu hiện trầm cảm và độ tuổi ta thấy:

  • Trong số 182 sinh viên không có biểu hiện trầm cảm: sinh viên dưới 22 tuổi là 115 người (khoảng 63%), sinh viên trên 22 tuổi là 67 người (khoảng 37%).

  • Trong số 170 sinh viên có biểu hiện trầm cảm: sinh viên dưới 22 tuổi là 87 người (khoảng 51%), sinh viên trên 22 tuổi là 83 người (khoảng 49%).

Tỷ lệ phần trăm nhóm sinh viên có biểu hiện trầm cảm dưới 22 tuổi nhiều hơn nhóm người trên 22 tuổi. Tỷ lệ phần trăm nhóm sinh viên không có biểu hiện trầm cảm dưới 22 tuổi nhiều hơn nhóm người trên 22 tuổi

Như vậy, giữa hai nhóm người có hay không có biểu hiện trầm cảm đều có số lượng người dưới 22 tuổi nhiều hơn nhóm người trên 22 tuổi.

Risk ratio/ Odd ratio

Risk ratio

riskratio(risk2)
## $data
##               
##                 No Yes Total
##   dưới 22 tuổi 115  87   202
##   trên 22 tuổi  67  83   150
##   Total        182 170   352
## 
## $measure
##               risk ratio with 95% C.I.
##                estimate    lower    upper
##   dưới 22 tuổi 1.000000       NA       NA
##   trên 22 tuổi 1.284751 1.037207 1.591376
## 
## $p.value
##               two-sided
##                midp.exact fisher.exact chi.square
##   dưới 22 tuổi         NA           NA         NA
##   trên 22 tuổi 0.02347745   0.02402141 0.02278543
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Tỷ lệ sinh viên trên 22 tuổi có biểu hiện trầm cảm so với tỷ lệ sinh viên dưới 22 tuổi có biểu hiện trầm cảm là 1.28, cho thấy tỷ lệ sinh viên trên 22 tuổi có biểu hiện trầm cảm nhiều hơn 28% so với tỷ lệ sinh viên dưới 22 tuổi có biểu hiện trầm cảm.

Odd ratio

oddsratio(risk2, rev = 'c')
## $data
##               
##                Yes  No Total
##   dưới 22 tuổi  87 115   202
##   trên 22 tuổi  83  67   150
##   Total        170 182   352
## 
## $measure
##               odds ratio with 95% C.I.
##                 estimate     lower     upper
##   dưới 22 tuổi 1.0000000        NA        NA
##   trên 22 tuổi 0.6118381 0.3984962 0.9359955
## 
## $p.value
##               two-sided
##                midp.exact fisher.exact chi.square
##   dưới 22 tuổi         NA           NA         NA
##   trên 22 tuổi 0.02347745   0.02402141 0.02278543
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Tỷ lệ giữa những sinh viên dưới 22 tuổi có biểu hiện trầm cảm so với không có biểu hiện trầm cảm bằng 61.18% tỷ lệ giữa những sinh viên trên 22 tuổi có biểu hiện trầm cảm so với không có biểu hiện trầm cảm.

Giá trị trên cho biết tỷ lệ có biểu hiện trầm cảm so với không có biểu hiện trầm cảm của những sinh viên dưới 22 tuổi ít hơn 38.82% so với những sinh viên trên 22 tuổi.

3.1.2.3 Biến Depression (Sinh viên có biểu hiện trầm cảm) và biến Accommodation (Nơi ở hiện tại)

risk3 <- table(Data$Accommodation, Data$Depression)
addmargins(risk3)
##                               
##                                 No Yes Sum
##   Home (with parents)          106  49 155
##   Private rented accommodation  76 121 197
##   Sum                          182 170 352
prop.table(risk3)
##                               
##                                       No       Yes
##   Home (with parents)          0.3011364 0.1392045
##   Private rented accommodation 0.2159091 0.3437500
prop.table(risk3, margin=2)
##                               
##                                       No       Yes
##   Home (with parents)          0.5824176 0.2882353
##   Private rented accommodation 0.4175824 0.7117647
ggplot(Data, aes(Accommodation, fill = Depression)) + geom_bar(position = 'dodge') + geom_text(aes(label = scales::percent(after_stat(count / sum(count)), accuracy = 0.01)), 
            stat = "count", 
            position = position_dodge(width = 0.9), 
            vjust = -0.5, 
            color = 'black')

Từ bảng tần số và đồ thị về việc sinh viên có biểu hiện trầm cảm và nơi ở hiện tại ta thấy:

  • Trong số 182 sinh viên không có biểu hiện trầm cảm: sinh viên ở với gia đình là 106 người (khoảng 58.2%), sinh viên ở phòng trọ tư nhân là 76 người (khoảng 41.8%).

  • Trong số 170 sinh viên có biểu hiện trầm cảm: sinh viên ở với gia đình là 49 người (khoảng 28.8%), sinh viên ở phòng trọ tư nhân là 121 người (khoảng 71.2%).

Tỷ lệ phần trăm nhóm sinh viên ở phòng trọ tư nhân có biểu hiện trầm cảm nhiều hơn nhóm sinh viên ở với gia đình có biểu hiện trầm cảm.

Ris kratio/ Odd ratio

Risk ratio

riskratio(risk3)
## $data
##                               
##                                 No Yes Total
##   Home (with parents)          106  49   155
##   Private rented accommodation  76 121   197
##   Total                        182 170   352
## 
## $measure
##                               risk ratio with 95% C.I.
##                                estimate    lower    upper
##   Home (with parents)          1.000000       NA       NA
##   Private rented accommodation 1.942919 1.503141 2.511365
## 
## $p.value
##                               two-sided
##                                  midp.exact fisher.exact   chi.square
##   Home (with parents)                    NA           NA           NA
##   Private rented accommodation 2.518255e-08 3.421661e-08 2.762937e-08
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Tỷ lệ sinh viên ở phòng trọ tư nhân có biểu hiện trầm cảm so với tỷ lệ sinh viên ở với gia đình có biểu hiện trầm cảm là 1.94, cho thấy tỷ lệ sinh viên ở phòng trọ tư nhân có biểu hiện trầm cảm nhiều hơn 94% so với tỷ lệ sinh viên ở với gia đình có biểu hiện trầm cảm.

Odd ratio

oddsratio(risk3, rev = 'c')
## $data
##                               
##                                Yes  No Total
##   Home (with parents)           49 106   155
##   Private rented accommodation 121  76   197
##   Total                        170 182   352
## 
## $measure
##                               odds ratio with 95% C.I.
##                                 estimate     lower     upper
##   Home (with parents)          1.0000000        NA        NA
##   Private rented accommodation 0.2918336 0.1859577 0.4530455
## 
## $p.value
##                               two-sided
##                                  midp.exact fisher.exact   chi.square
##   Home (with parents)                    NA           NA           NA
##   Private rented accommodation 2.518255e-08 3.421661e-08 2.762937e-08
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Tỷ lệ giữa những sinh viên ở với gia đình có biểu hiện trầm cảm so với không có biểu hiện trầm cảm bằng 29.18% tỷ lệ giữa những sinh viên ở nhà trọ tư nhân có biểu hiện trầm cảm so với không có biểu hiện trầm cảm.

Giá trị trên cho biết tỷ lệ có biểu hiện trầm cảm so với không có biểu hiện trầm cảm của những sinh viên ở với gia đình ít hơn 70.82% so với những sinh viên ở các nhà trọ tư nhân.

3.1.2.4 Biến Depression (Sinh viên có biểu hiện trầm cảm) và biến Job (Công việc hiện tại)

risk4 <- table(Data$Job, Data$Depression)
addmargins(risk4)
##      
##        No Yes Sum
##   No   97  22 119
##   Yes  85 148 233
##   Sum 182 170 352
prop.table(risk4)
##      
##              No       Yes
##   No  0.2755682 0.0625000
##   Yes 0.2414773 0.4204545
prop.table(risk4, margin=2)
##      
##              No       Yes
##   No  0.5329670 0.1294118
##   Yes 0.4670330 0.8705882
ggplot(Data, aes(Job, fill = Depression)) + geom_bar(position = 'dodge') + geom_text(aes(label = scales::percent(after_stat(count / sum(count)), accuracy = 0.01)), 
            stat = "count", 
            position = position_dodge(width = 0.9), 
            vjust = -0.5, 
            color = 'black')

Từ bảng tần số và đồ thị về việc sinh viên có biểu hiện trầm cảm và công việc hiện tại ta thấy:

  • Trong số 182 sinh viên không có biểu hiện trầm cảm: sinh viên không có công việc hiện tại là 97 người (khoảng 53.3%), sinh viên có công việc hiện tại là 85 người (khoảng 46.7%).

  • Trong số 170 sinh viên có biểu hiện trầm cảm: sinh viên không có công việc hiện tại là 22 người (khoảng 13%), sinh viên có công việc hiện tại là 148 người (khoảng 87%).

Tỷ lệ phần trăm nhóm sinh viên có công việc hiện tại có biểu hiện trầm cảm nhiều hơn nhóm sinh viên không có công việc hiện tại có biểu hiện trầm cảm.

Risk ratio/ Odd ratio

Risk ratio

riskratio(risk4)
## $data
##        
##          No Yes Total
##   No     97  22   119
##   Yes    85 148   233
##   Total 182 170   352
## 
## $measure
##      risk ratio with 95% C.I.
##       estimate    lower   upper
##   No  1.000000       NA      NA
##   Yes 3.435817 2.327141 5.07268
## 
## $p.value
##      two-sided
##         midp.exact fisher.exact   chi.square
##   No            NA           NA           NA
##   Yes 2.220446e-16 3.019072e-16 1.264249e-15
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Tỷ lệ sinh viên có công việc hiện tại có biểu hiện trầm cảm so với tỷ lệ sinh viên không có công việc hiện tại có biểu hiện trầm cảm là 3.44

Odd ratio

oddsratio(risk4, rev = 'c')
## $data
##        
##         Yes  No Total
##   No     22  97   119
##   Yes   148  85   233
##   Total 170 182   352
## 
## $measure
##      odds ratio with 95% C.I.
##        estimate      lower     upper
##   No  1.0000000         NA        NA
##   Yes 0.1316801 0.07552533 0.2213838
## 
## $p.value
##      two-sided
##         midp.exact fisher.exact   chi.square
##   No            NA           NA           NA
##   Yes 2.220446e-16 3.019072e-16 1.264249e-15
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Tỷ lệ giữa những sinh viên không có công việc hiện tại có biểu hiện trầm cảm so với không có biểu hiện trầm cảm bằng 13.17% tỷ lệ giữa những sinh viên có công việc hiện tại có biểu hiện trầm cảm so với không có biểu hiện trầm cảm.

Giá trị trên cho biết tỷ lệ có biểu hiện trầm cảm so với không có biểu hiện trầm cảm của những sinh viên không có công việc hiện tại ít hơn 86.83% so với những sinh viên có công việc hiện tại.

3.1.2.5 Biến Depression (Sinh viên có biểu hiện trầm cảm) và biến GPA (Điểm số tích luỹ hiện tại tính theo thang điểm 4)

Ta chia điểm số tích lũy GPA của nhóm sinh viên khảo sát thành 2 nhóm dưới 3.2 điểm và trên 3.2 điểm.

GPA2 <- cut(Data$GPA, breaks = c(0,3.2,4), labels = c('dưới 3.2', 'trên 3.2'))
d <- mutate(Data,GPA2)
risk5 <- table(d$GPA2,Data$Depression)
addmargins(risk5)
##           
##             No Yes Sum
##   dưới 3.2 104  45 149
##   trên 3.2  78 125 203
##   Sum      182 170 352
prop.table(risk5)
##           
##                   No       Yes
##   dưới 3.2 0.2954545 0.1278409
##   trên 3.2 0.2215909 0.3551136
prop.table(risk5, margin=2)
##           
##                   No       Yes
##   dưới 3.2 0.5714286 0.2647059
##   trên 3.2 0.4285714 0.7352941
ggplot(Data, aes(GPA2, fill = Depression)) + geom_bar(position = 'dodge') + geom_text(aes(label = scales::percent(after_stat(count / sum(count)), accuracy = 0.01)), 
            stat = "count", 
            position = position_dodge(width = 0.9), 
            vjust = -0.5, 
            color = 'black')

Ta chia điểm số tích lũy GPA của nhóm sinh viên khảo sát thành 2 nhóm dưới 3.2 điểm và trên 3.2 điểm.

Từ bảng tần số và đồ thị về việc sinh viên có biểu hiện trầm cảm và điểm số tích lũy GPA ta thấy:

  • Trong số 182 sinh viên không có biểu hiện trầm cảm: sinh viên dưới 3.2 điểm là 104 người (khoảng 57%), sinh viên trên 3.2 điểm là 78 người (khoảng 43%).

  • Trong số 170 sinh viên có biểu hiện trầm cảm: sinh viên dưới 3.2 điểm là 45 người (khoảng 26.5%), sinh viên trên 3.2 điểm là 125 người (khoảng 73.5%).

Tỷ lệ phần trăm nhóm sinh viên có biểu hiện trầm cảm trên 3.2 điểm nhiều hơn nhóm người dưới 3.2 điểm.

Risk ratio/ Odd ratio

Risk ratio

riskratio(risk5)
## $data
##           
##             No Yes Total
##   dưới 3.2 104  45   149
##   trên 3.2  78 125   203
##   Total    182 170   352
## 
## $measure
##           risk ratio with 95% C.I.
##            estimate    lower    upper
##   dưới 3.2 1.000000       NA       NA
##   trên 3.2 2.038862 1.560799 2.663351
## 
## $p.value
##           two-sided
##              midp.exact fisher.exact   chi.square
##   dưới 3.2           NA           NA           NA
##   trên 3.2 5.055705e-09 7.920993e-09 5.878513e-09
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Tỷ lệ sinh viên trên 3.2 điểm có biểu hiện trầm cảm so với tỷ lệ sinh viên dưới 3.2 điểm có biểu hiện trầm cảm là 2.04.

Odd ratio

oddsratio(risk5, rev = 'c')
## $data
##           
##            Yes  No Total
##   dưới 3.2  45 104   149
##   trên 3.2 125  78   203
##   Total    170 182   352
## 
## $measure
##           odds ratio with 95% C.I.
##             estimate     lower   upper
##   dưới 3.2 1.0000000        NA      NA
##   trên 3.2 0.2714654 0.1718042 0.42374
## 
## $p.value
##           two-sided
##              midp.exact fisher.exact   chi.square
##   dưới 3.2           NA           NA           NA
##   trên 3.2 5.055705e-09 7.920993e-09 5.878513e-09
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Tỷ lệ giữa những sinh viên dưới 3.2 điểm có biểu hiện trầm cảm so với không có biểu hiện trầm cảm bằng 27.14% tỷ lệ giữa những sinh viên trên 3.2 điểm có biểu hiện trầm cảm so với không có biểu hiện trầm cảm.

Giá trị trên cho biết tỷ lệ có biểu hiện trầm cảm so với không có biểu hiện trầm cảm của những sinh viên dưới 3.2 điểm ít hơn 72.86% so với những sinh viên trên 3.2 điểm.

3.1.2.6 Biến Depression (Sinh viên có biểu hiện trầm cảm) và biến Education (Trình độ học vấn)

risk6 <- table(Data$Education, Data$Depression)
addmargins(risk6)
##                       
##                         No Yes Sum
##   College - Bachelor's  96 108 204
##   High School           78  46 124
##   Master                 8  16  24
##   Sum                  182 170 352
prop.table(risk6)
##                       
##                                No        Yes
##   College - Bachelor's 0.27272727 0.30681818
##   High School          0.22159091 0.13068182
##   Master               0.02272727 0.04545455
prop.table(risk6, margin=2)
##                       
##                                No        Yes
##   College - Bachelor's 0.52747253 0.63529412
##   High School          0.42857143 0.27058824
##   Master               0.04395604 0.09411765
ggplot(Data, aes(Education, fill = Depression)) + geom_bar(position = 'dodge') + geom_text(aes(label = scales::percent(after_stat(count / sum(count)), accuracy = 0.01)), 
            stat = "count", 
            position = position_dodge(width = 0.9), 
            vjust = -0.5, 
            color = 'black')

Từ bảng tần số và đồ thị về việc sinh viên có biểu hiện trầm cảm và trình độ học vấn ta thấy:

  • Trong số 182 sinh viên không có biểu hiện trầm cảm: sinh viên sinh viên đang học đại học là 96 người (khoảng 52.7%), sinh viên đang học cấp 2 là 78 người (khoảng 42.9%), sinh viên đang học thạc sĩ là 8 người (chiếm khoảng 4.4%).

  • Trong số 170 sinh viên có biểu hiện trầm cảm: sinh viên sinh viên đang học đại học là 108 người (khoảng 63.5%), sinh viên đang học cấp 2 là 46 người (khoảng 27.1%), sinh viên đang học thạc sĩ là 16 người (chiếm khoảng 9.4%).

Tỷ lệ phần trăm nhóm sinh viên đang học đại học có biểu hiện trầm cảm chiếm tỷ lệ cao nhất 30.68% trên tổng số sinh viên tham gia khảo sát.

3.2 Thống kê suy diễn cho biến định tính

3.2.1 Kiểm tra tính độc lập cho 2 biến định tính

3.2.1.1 Biến Depression và biến Gender

chisq.test(table(Data$Gender, Data$Depression))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(Data$Gender, Data$Depression)
## X-squared = 0.32004, df = 1, p-value = 0.5716

Giả thuyết:

  • \(H_0\): biến Depression và biến Gender độc lập

  • \(H_1\): biến Depression và biến Gender không độc lập

Mức ý nghĩa: \(\alpha\) = 0.05

Ta có p_value > \(\alpha\), vậy chấp nhận giả thuyết \(H_0\).

Với mức ý nghĩa 5%, việc sinh viên có biểu hiện trầm cảm độc lập với giới tính.

3.2.1.2 Biến Depression và biến Age

chisq.test(risk2)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  risk2
## X-squared = 4.7053, df = 1, p-value = 0.03007

Giả thuyết:

  • \(H_0\): biến Depression và biến Age độc lập

  • \(H_1\): biến Depression và biến Age không độc lập

Mức ý nghĩa: \(\alpha\) = 0.05

Ta có p_value < \(\alpha\), vậy bác bỏ giả thuyết \(H_0\).

Với mức ý nghĩa 5%, việc sinh viên có biểu hiện trầm cảm không độc lập với độ tuổi.

3.2.1.3 Biến Depression và biến Accommodation

chisq.test(table(Data$Accommodation, Data$Depression))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(Data$Accommodation, Data$Depression)
## X-squared = 29.685, df = 1, p-value = 5.082e-08

Giả thuyết:

  • \(H_0\): biến Depression và biến Accommodation độc lập

  • \(H_1\): biến Depression và biến Accommodation không độc lập

Mức ý nghĩa: \(\alpha\) = 0.05

Ta có p_value < \(\alpha\), vậy bác bỏ giả thuyết \(H_0\).

Với mức ý nghĩa 5%, việc sinh viên có biểu hiện trầm cảm không độc lập với biến nơi ở hiện tại.

3.2.1.4 Biến Depression và biến Job

chisq.test(table(Data$Job, Data$Depression))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(Data$Job, Data$Depression)
## X-squared = 62.178, df = 1, p-value = 3.138e-15

Giả thuyết:

  • \(H_0\): biến Depression và biến Job độc lập

  • \(H_1\): biến Depression và biến Job không độc lập

Mức ý nghĩa: \(\alpha\) = 0.05

Ta có p_value < \(\alpha\), vậy bác bỏ giả thuyết \(H_0\).

Với mức ý nghĩa 5%, việc sinh viên có biểu hiện trầm cảm không độc lập với biến công việc hiện tại.

3.2.1.5 Biến Depression và biến GPA

chisq.test(risk5)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  risk5
## X-squared = 32.63, df = 1, p-value = 1.115e-08

Giả thuyết:

  • \(H_0\): biến Depression và biến GPA độc lập

  • \(H_1\): biến Depression và biến GPA không độc lập

Mức ý nghĩa: \(\alpha\) = 0.05

Ta có p_value < \(\alpha\), vậy bác bỏ giả thuyết \(H_0\).

Với mức ý nghĩa 5%, việc sinh viên có biểu hiện trầm cảm không độc lập với điểm số tích luỹ hiện tại tính theo thang điểm 4.

3.2.1.6 Biến Depression và biến Education

chisq.test(table(Data$Depression, Data$Education ))
## 
##  Pearson's Chi-squared test
## 
## data:  table(Data$Depression, Data$Education)
## X-squared = 11.235, df = 2, p-value = 0.003634

Giả thuyết:

  • \(H_0\): biến Depression và biến Education độc lập

  • \(H_1\): biến Depression và biến Education không độc lập

Mức ý nghĩa: \(\alpha\) = 0.05

Ta có p_value < \(\alpha\), ậy bác bỏ giả thuyết \(H_0\).

Với mức ý nghĩa 5%, việc sinh viên có biểu hiện trầm cảm không độc lập với trình độ học vấn.

3.2.2 Khoảng ước lượng cho tỷ lệ

3.2.2.1 Ước lượng tỷ lệ người có và không có biểu hiện trầm cảm

p <- Data[Data$Depression == 'Yes',]
prop.test(length(p$Depression), length(Data$Depression))
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(p$Depression) out of length(Data$Depression), null probability 0.5
## X-squared = 0.34375, df = 1, p-value = 0.5577
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4298180 0.5364691
## sample estimates:
##         p 
## 0.4829545
p <- Data[Data$Depression == 'No',]
prop.test(length(p$Depression), length(Data$Depression))
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(p$Depression) out of length(Data$Depression), null probability 0.5
## X-squared = 0.34375, df = 1, p-value = 0.5577
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4635309 0.5701820
## sample estimates:
##         p 
## 0.5170455

Với độ tin cậy 95%, ta có tỷ lệ người có biểu hiện trầm cảm so với tổng thể nằm trong khoảng từ 43% đến 53.6%. Hay nói cách khác, tỷ lệ người không có biểu hiện trầm cảm sẽ chiếm khoảng từ 46.4% đến 57%.

3.2.2.2 Ước lượng tỷ lệ người có và không có công việc hiện tại

p <- Data[Data$Job == 'Yes',]
prop.test(length(p$Job), length(Data$Job))
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(p$Job) out of length(Data$Job), null probability 0.5
## X-squared = 36.276, df = 1, p-value = 1.713e-09
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.6095472 0.7107203
## sample estimates:
##         p 
## 0.6619318
p <- Data[Data$Job == 'No',]
prop.test(length(p$Job), length(Data$Job))
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(p$Job) out of length(Data$Job), null probability 0.5
## X-squared = 36.276, df = 1, p-value = 1.713e-09
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.2892797 0.3904528
## sample estimates:
##         p 
## 0.3380682

Với độ tin cậy 95%, ta có tỷ lệ người có công việc hiện tại so với tổng thể nằm trong khoảng từ 61% đến 71%. Hay nói cách khác, tỷ lệ người không có công việc hiện tại sẽ chiếm khoảng từ 29% đến 39%.

3.2.2.3 Ước lượng tỷ lệ người ở với gia đình và ở các phòng trọ tư nhân

p <- Data[Data$Accommodation == 'Home (with parents)',]
prop.test(length(p$Accommodation), length(Data$Accommodation))
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(p$Accommodation) out of length(Data$Accommodation), null probability 0.5
## X-squared = 4.7756, df = 1, p-value = 0.02887
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.3880142 0.4939908
## sample estimates:
##         p 
## 0.4403409
p <- Data[Data$Accommodation == 'Private rented accommodation',]
prop.test(length(p$Accommodation), length(Data$Accommodation))
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(p$Accommodation) out of length(Data$Accommodation), null probability 0.5
## X-squared = 4.7756, df = 1, p-value = 0.02887
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.5060092 0.6119858
## sample estimates:
##         p 
## 0.5596591

Với độ tin cậy 95%, ta có tỷ lệ người ở với gia đình so với tổng thể nằm trong khoảng từ 38.8% đến 49%. Hay nói cách khác, tỷ lệ người ở các phòng trọ tư nhân sẽ chiếm khoảng từ 51% đến 61.2%.

4 Mô hình hồi quy

Từ kết quả kiểm định chi bình phương về tính độc lập của các cặp biến, ta thấy việc sinh viên có biểu hiện trầm cảm phụ thuộc vào độ tuổi, công việc hiện tại, nơi ở hiện tại, điểm số tích luỹ, trình độ học vấn. Vì vậy tôi sẽ tiến hành hồi quy biến phụ thuộc Depression (việc sinh viên có biểu hiện trầm cảm) với các biến độc lập tương ứng gồm Age, Job, Accommodation, GPA, Education.

4.1 Mô hình logit

mh1 <- glm(factor(Depression, levels = c("No", "Yes")) ~ Age + Job + Accommodation + GPA + Education, family = binomial(link = 'logit'), data = Data)
summary(mh1)
## 
## Call:
## glm(formula = factor(Depression, levels = c("No", "Yes")) ~ Age + 
##     Job + Accommodation + GPA + Education, family = binomial(link = "logit"), 
##     data = Data)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                               -6.42320    1.30736  -4.913 8.97e-07
## Age                                        0.02432    0.04749   0.512   0.6086
## JobYes                                     2.21464    0.31758   6.974 3.09e-12
## AccommodationPrivate rented accommodation  1.30814    0.28172   4.643 3.43e-06
## GPA                                        1.25778    0.19949   6.305 2.88e-10
## EducationHigh School                      -0.73283    0.29870  -2.453   0.0142
## EducationMaster                           -0.40339    0.54765  -0.737   0.4614
##                                              
## (Intercept)                               ***
## Age                                          
## JobYes                                    ***
## AccommodationPrivate rented accommodation ***
## GPA                                       ***
## EducationHigh School                      *  
## EducationMaster                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 487.57  on 351  degrees of freedom
## Residual deviance: 345.59  on 345  degrees of freedom
## AIC: 359.59
## 
## Number of Fisher Scoring iterations: 5

Các biến Age, EducationHigh School, EducationMaster có giá trị P_value rất lớn, p_value > 0.05 nên không có ý nghĩa thống kê trong mô hình này. Bỏ các biến Age và Education

MHlogit <- glm(factor(Depression, levels = c("No", "Yes")) ~ Job + Accommodation + GPA, family = binomial(link = 'logit'), data = Data)
summary(MHlogit)
## 
## Call:
## glm(formula = factor(Depression, levels = c("No", "Yes")) ~ Job + 
##     Accommodation + GPA, family = binomial(link = "logit"), data = Data)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                                -5.9804     0.7447  -8.030 9.73e-16
## JobYes                                      2.2558     0.3103   7.271 3.58e-13
## AccommodationPrivate rented accommodation   1.3203     0.2717   4.859 1.18e-06
## GPA                                         1.1829     0.1916   6.175 6.62e-10
##                                              
## (Intercept)                               ***
## JobYes                                    ***
## AccommodationPrivate rented accommodation ***
## GPA                                       ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 487.57  on 351  degrees of freedom
## Residual deviance: 353.12  on 348  degrees of freedom
## AIC: 361.12
## 
## Number of Fisher Scoring iterations: 4
lr_test <- anova(MHlogit, test = "Chisq")
p_value <- lr_test$Pr[2] 
p_value
## [1] 1.740653e-16

Kiểm định sự phù hơp của mô hình

  • Giả thuyết [Math Processing Error]: Mô hình không phù hợp

Với P-value = Prob(LR) < 0 bác bỏ giả thuyết [Math Processing Error] nên mô hình phù hợp với dữ liệu.

Trong mô hình hồi quy logistic cho biến Depression trên, ta nhận thấy trong Age, Job, Accommodation, GPA, Education, chỉ có ba biến có ý nghĩa thống kê là Job, Accommodation, GPA.

Ma trận nhầm lẫn

a <- predict(MHlogit, type = "response")
b <- ifelse(a > 0.5, "1", "0")
c <-factor(b, levels = c("0","1"))
d <- factor(Data$Depression, labels = c("0", "1"))
confusionMatrix(table(c, d))
## Confusion Matrix and Statistics
## 
##    d
## c     0   1
##   0 124  31
##   1  58 139
##                                           
##                Accuracy : 0.7472          
##                  95% CI : (0.6984, 0.7917)
##     No Information Rate : 0.517           
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.4964          
##                                           
##  Mcnemar's Test P-Value : 0.005851        
##                                           
##             Sensitivity : 0.6813          
##             Specificity : 0.8176          
##          Pos Pred Value : 0.8000          
##          Neg Pred Value : 0.7056          
##              Prevalence : 0.5170          
##          Detection Rate : 0.3523          
##    Detection Prevalence : 0.4403          
##       Balanced Accuracy : 0.7495          
##                                           
##        'Positive' Class : 0               
## 

4.2 Mô hình probit

mh1 <- glm(factor(Depression, levels = c("No", "Yes")) ~ Age + Job + Accommodation + GPA + Education, family = binomial(link = 'probit'), data = Data)
summary(mh1)
## 
## Call:
## glm(formula = factor(Depression, levels = c("No", "Yes")) ~ Age + 
##     Job + Accommodation + GPA + Education, family = binomial(link = "probit"), 
##     data = Data)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                               -3.75293    0.74511  -5.037 4.74e-07
## Age                                        0.01284    0.02769   0.464   0.6428
## JobYes                                     1.31014    0.17925   7.309 2.69e-13
## AccommodationPrivate rented accommodation  0.76200    0.16354   4.659 3.17e-06
## GPA                                        0.74834    0.11305   6.620 3.60e-11
## EducationHigh School                      -0.43959    0.17444  -2.520   0.0117
## EducationMaster                           -0.19986    0.32169  -0.621   0.5344
##                                              
## (Intercept)                               ***
## Age                                          
## JobYes                                    ***
## AccommodationPrivate rented accommodation ***
## GPA                                       ***
## EducationHigh School                      *  
## EducationMaster                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 487.57  on 351  degrees of freedom
## Residual deviance: 345.00  on 345  degrees of freedom
## AIC: 359
## 
## Number of Fisher Scoring iterations: 5

Các biến Age, EducationHigh School, EducationMaster có giá trị P_value rất lớn, p_value > 0.05 nên không có ý nghĩa thống kê trong mô hình này. Bỏ các biến Age và Education

MHprobit <- glm(factor(Depression, levels = c("No", "Yes")) ~ Job + Accommodation + GPA, family = binomial(link = 'probit'), data = Data)
summary(MHprobit)
## 
## Call:
## glm(formula = factor(Depression, levels = c("No", "Yes")) ~ Job + 
##     Accommodation + GPA, family = binomial(link = "probit"), 
##     data = Data)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                                -3.5348     0.4105  -8.612  < 2e-16
## JobYes                                      1.3394     0.1754   7.637 2.23e-14
## AccommodationPrivate rented accommodation   0.7674     0.1575   4.872 1.10e-06
## GPA                                         0.7048     0.1091   6.462 1.03e-10
##                                              
## (Intercept)                               ***
## JobYes                                    ***
## AccommodationPrivate rented accommodation ***
## GPA                                       ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 487.57  on 351  degrees of freedom
## Residual deviance: 352.89  on 348  degrees of freedom
## AIC: 360.89
## 
## Number of Fisher Scoring iterations: 5
lr_test <- anova(MHprobit, test = "Chisq")
p_value <- lr_test$Pr[2] 
p_value
## [1] 1.740653e-16

Kiểm định sự phù hơp của mô hình

  • Giả thuyết [Math Processing Error]: Mô hình không phù hợp

Với P-value = Prob(LR) < 0 bác bỏ giả thuyết [Math Processing Error] nên mô hình phù hợp với dữ liệu.

Trong mô hình probit cho biến Depression trên, ta nhận thấy trong Age, Job, Accommodation, GPA, Education, chỉ có ba biến có ý nghĩa thống kê là Job, Accommodation, GPA.

Ma trận nhầm lẫn

a <- predict(MHprobit, type = "response")
b <- ifelse(a > 0.5, "1", "0")
c <-factor(b, levels = c("0","1"))
d <- factor(Data$Depression, labels = c("0", "1"))
confusionMatrix(table(c, d))
## Confusion Matrix and Statistics
## 
##    d
## c     0   1
##   0 124  31
##   1  58 139
##                                           
##                Accuracy : 0.7472          
##                  95% CI : (0.6984, 0.7917)
##     No Information Rate : 0.517           
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.4964          
##                                           
##  Mcnemar's Test P-Value : 0.005851        
##                                           
##             Sensitivity : 0.6813          
##             Specificity : 0.8176          
##          Pos Pred Value : 0.8000          
##          Neg Pred Value : 0.7056          
##              Prevalence : 0.5170          
##          Detection Rate : 0.3523          
##    Detection Prevalence : 0.4403          
##       Balanced Accuracy : 0.7495          
##                                           
##        'Positive' Class : 0               
## 

4.3 Mô hình cloglog

mh1 <- glm(factor(Depression, levels = c("No", "Yes")) ~ Age + Job + Accommodation + GPA + Education, family = binomial(link = 'cloglog'), data = Data)
summary(mh1)
## 
## Call:
## glm(formula = factor(Depression, levels = c("No", "Yes")) ~ Age + 
##     Job + Accommodation + GPA + Education, family = binomial(link = "cloglog"), 
##     data = Data)
## 
## Coefficients:
##                                            Estimate Std. Error z value Pr(>|z|)
## (Intercept)                               -4.915152   0.849829  -5.784 7.31e-09
## Age                                        0.005947   0.030294   0.196  0.84437
## JobYes                                     1.666022   0.241272   6.905 5.01e-12
## AccommodationPrivate rented accommodation  1.010254   0.193290   5.227 1.73e-07
## GPA                                        0.910507   0.137161   6.638 3.17e-11
## EducationHigh School                      -0.638495   0.201748  -3.165  0.00155
## EducationMaster                           -0.317781   0.328746  -0.967  0.33372
##                                              
## (Intercept)                               ***
## Age                                          
## JobYes                                    ***
## AccommodationPrivate rented accommodation ***
## GPA                                       ***
## EducationHigh School                      ** 
## EducationMaster                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 487.57  on 351  degrees of freedom
## Residual deviance: 338.96  on 345  degrees of freedom
## AIC: 352.96
## 
## Number of Fisher Scoring iterations: 7

Các biến Age, EducationHigh School, EducationMaster có giá trị P_value rất lớn, p_value > 0.05 nên không có ý nghĩa thống kê trong mô hình này. Bỏ các biến Age và Education

MHcloglog <- glm(factor(Depression, levels = c("No", "Yes")) ~ Job + Accommodation + GPA, family = binomial(link = 'cloglog'), data = Data)
summary(MHcloglog)
## 
## Call:
## glm(formula = factor(Depression, levels = c("No", "Yes")) ~ Job + 
##     Accommodation + GPA, family = binomial(link = "cloglog"), 
##     data = Data)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                                -4.7273     0.5243  -9.016  < 2e-16
## JobYes                                      1.6537     0.2356   7.018 2.25e-12
## AccommodationPrivate rented accommodation   0.9197     0.1827   5.035 4.77e-07
## GPA                                         0.8327     0.1313   6.340 2.29e-10
##                                              
## (Intercept)                               ***
## JobYes                                    ***
## AccommodationPrivate rented accommodation ***
## GPA                                       ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 487.57  on 351  degrees of freedom
## Residual deviance: 350.61  on 348  degrees of freedom
## AIC: 358.61
## 
## Number of Fisher Scoring iterations: 5
lr_test <- anova(MHcloglog, test = "Chisq")
p_value <- lr_test$Pr[2] 
p_value
## [1] 1.740653e-16

Kiểm định sự phù hơp của mô hình

  • Giả thuyết [Math Processing Error]: Mô hình không phù hợp

Với P-value = Prob(LR) < 0 bác bỏ giả thuyết [Math Processing Error] nên mô hình phù hợp với dữ liệu.

Trong mô hình cloglog cho biến Depression trên, ta nhận thấy trong Age, Job, Accommodation, GPA, Education, chỉ có ba biến có ý nghĩa thống kê là Job, Accommodation, GPA.

Ma trận nhầm lẫn

a <- predict(MHcloglog, type = "response")
b <- ifelse(a > 0.5, "1", "0")
c <-factor(b, levels = c("0","1"))
d <- factor(Data$Depression, labels = c("0", "1"))
confusionMatrix(table(c, d))
## Confusion Matrix and Statistics
## 
##    d
## c     0   1
##   0 132  36
##   1  50 134
##                                           
##                Accuracy : 0.7557          
##                  95% CI : (0.7073, 0.7997)
##     No Information Rate : 0.517           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.5121          
##                                           
##  Mcnemar's Test P-Value : 0.161           
##                                           
##             Sensitivity : 0.7253          
##             Specificity : 0.7882          
##          Pos Pred Value : 0.7857          
##          Neg Pred Value : 0.7283          
##              Prevalence : 0.5170          
##          Detection Rate : 0.3750          
##    Detection Prevalence : 0.4773          
##       Balanced Accuracy : 0.7568          
##                                           
##        'Positive' Class : 0               
## 

4.4 Các chỉ tiêu đánh giá mô hình

4.4.1 Chỉ số AIC

Mô hình logit: AIC = 361.12

Mô hình probit: AIC = 360.89

Mô hình cloglog: AIC = 358.61

4.4.2 Deviance

Mô Hình logit: 353.12

Mô hình probit: 352.89

Mô hình cloglog: 350.61

4.4.3 Chỉ số Brier Score

bs1 <- BrierScore(MHlogit)
bs2 <- BrierScore(MHprobit)
bs3 <- BrierScore(MHcloglog)
BrierScore <- c(bs1,bs2,bs3)
BrierScore
## [1] 0.1664483 0.1664942 0.1650521

Mô Hình logit: 0.1664483

Mô hình probit: 0.1664942

Mô hình cloglog: 0.1650521

4.4.4 Ma trận nhầm lẫn

Từ kết quả chạy ma trận nhầm lẫn của các mô hồi hồi quy ở trên ta có kết quả như sau:

Độ chính xác của mô hình logit là 0.7472

Độ chính xác của mô hình probit là 0.7472

Độ chính xác của mô hình cloglog là 0.7557

5 Kết luận

DanhGiaMH
##    MoHinh    AIC Deviance BrierScore confusionMatrix
## 1   logit 361.12   353.12  0.1664483          0.7472
## 2  probit 360.89   352.89  0.1664942          0.7472
## 3 cloglog 358.61   350.61  0.1650521          0.7557

Từ kết quả các chỉ số đánh giá mô hình ta có kết luận: chỉ số AIC = 358.61, Deviance = 350.61, chỉ số Brier = 0.1650521 của mô hình cloglog là nhỏ nhất trong ba mô hình và confusionMatrix = 0.7557 là lớn nhất trong ba mô hình. Do mô hình cloglog là đạt nhiều tiêu chí nhất nên ta có thể kết luận rằng mô hình cloglog là phù hợp nhất trong 3 mô hình để mô tả sự ảnh hưởng của các yếu tố đến trầm cảm ở sinh viên.

\(cloglog[\pi(x)] = -4.7273 + 1.6537Job_Yes + 0.9197Accommodation_Private + 0.8327GPA\)

Kết quả từ mô hình hồi quy cloglog ta thấy việc sinh viên có biểu hiện trầm cảm có chịu ảnh hưởng bởi công việc hiện tại, nơi ở hiện tại và điểm số tích lũy GPA .

  • Hệ số \(-4.7273\): Đây là hệ số chặn (intercept), tức là giá trị của \(cloglog[\pi(x)]\) khi tất cả các biến độc lập (Job, Accommodation, GPA) đều bằng 0.

  • \(Job\) (việc làm): Hệ số 1.6537 cho biến này có nghĩa là nếu một sinh viên có việc làm, xác suất số sinh viên có biểu hiện tầm cảm sẽ tăng lên 1.6537 đơn vị, giả định các yếu tố khác không đổi.

  • \(Accommodation\) (chỗ ở): Hệ số 0.9197 cho biến này có nghĩa là nếu một sinh viên ở các phòng trọ tư nhân, xác suất số sinh viên có biểu hiện tầm cảm sẽ tăng lên 0.9197 đơn vị, giả định các yếu tố khác không đổi.

  • \(GPA\) (điểm tích lũy trung bình): Hệ số 0.8327 cho biến này có nghĩa là nếu một sinh viên có điểm trung bình cao, xác suất số sinh viên có biểu hiện tầm cảm sẽ tăng lên 0.8327 đơn vị, giả định các yếu tố khác không đổi.

LS0tDQp0aXRsZTogIlBIw4JOIFTDjUNIIEPDgUMgWeG6vlUgVOG7kCDhuqJOSCBIxq/hu55ORyDEkOG6vk4gVknhu4ZDIELhu4ogVFLhuqZNIEPhuqJNIOG7niBTSU5IIFZJw4pOIg0KYXV0aG9yOiAiTkdVWeG7hE4gQ+G6qE0gTkdVWcOKTiAtIMSQ4bq2TkcgVEhBTkggVFLDmkMgLSBQSOG6oE0gVEhVIFBIxq/GoE5HIg0KZGF0ZTogIjIwMjQtMDYtMDkiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgdG9jX2RlcGh0OiAzDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQphbHdheXNfYWxsb3dfaHRtbDogdHJ1ZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5IChyZWFkeGwpDQpsaWJyYXJ5IChnZ3Bsb3QyKQ0KbGlicmFyeSAoRGVzY1Rvb2xzKQ0KbGlicmFyeShlcGl0b29scykNCmxpYnJhcnkoY2FyZXQpDQpsaWJyYXJ5KERUKQ0KYGBgDQoNCiMgKipQaOG6p24gbeG7nyDEkeG6p3UqKg0KDQojIyAqKkzDvSBkbyBjaOG7jW4gxJHhu4EgdMOgaSoqDQoNClRyb25nIGLhu5FpIGPhuqNuaCBoaeG7h24gbmF5LCB24bqlbiDEkeG7gSBz4bupYyBraOG7j2UgdGluaCB0aOG6p24gbmfDoHkgY8Ogbmcgbmjhuq1uIMSRxrDhu6NjIG5oaeG7gXUgc+G7sSBxdWFuIHTDom0gY+G7p2EgeMOjIGjhu5lpLCDEkeG6t2MgYmnhu4d0IGzDoCB0cm9uZyBnaeG7m2kgc2luaCB2acOqbi4gU2luaCB2acOqbiBsw6AgxJHhu5FpIHTGsOG7o25nIGThu4UgYuG7iyDhuqNuaCBoxrDhu59uZyBi4bufaSBuaGnhu4F1IHnhur91IHThu5Ega2jDoWMgbmhhdSBuaMawIMOhcCBs4buxYyBo4buNYyB04bqtcCwgY3Xhu5ljIHPhu5FuZyB4YSBuaMOgLCBtw7RpIHRyxrDhu51uZyBz4buRbmcgdsOgIGjhu41jIHThuq1wIG3hu5tpLCBjw7luZyB24bubaSBuaOG7r25nIG3hu5FpIHF1YW4gaOG7hyB4w6MgaOG7mWkgcGjhu6ljIHThuqFwLiBOaOG7r25nIHnhur91IHThu5EgbsOgeSBjw7MgdGjhu4MgZOG6q24gxJHhur9uIHTDrG5oIHRy4bqhbmcgY8SDbmcgdGjhurNuZyB2w6AgdHLhuqdtIGPhuqNtLCBnw6J5IOG6o25oIGjGsOG7n25nIG5naGnDqm0gdHLhu41uZyDEkeG6v24gc+G7qWMga2jhu49lLCBo4buNYyB04bqtcCB2w6AgY3Xhu5ljIHPhu5FuZyBj4bunYSBzaW5oIHZpw6puLg0KDQpUaGVvIFThu5UgY2jhu6ljIFkgdOG6vyBUaOG6vyBnaeG7m2kgKFdITyksIHRy4bqnbSBj4bqjbSBsw6AgY8SDbiBi4buHbmggcGjhu5UgYmnhur9uIG5o4bqldCB0csOqbiB0b8OgbiB0aOG6vyBnaeG7m2kgdsOgIMSR4bupbmcgdGjhu6kgaGFpIHRyb25nIGfDoW5oIG7hurduZyBi4buHbmggbMO9IHRvw6BuIGPhuqd1LCBjaOG7iSBzYXUgYuG7h25oIGzDvSBt4bqhY2ggdsOgbmguIMav4bubYyB0w61uaCB0csOqbiB0aOG6vyBnaeG7m2kgY8OzIGtob+G6o25nIDMzNSB0cmnhu4d1IG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcgYuG7n2kgdHLhuqdtIGPhuqNtLiBUaGVvIHRo4buRbmcga8OqIG7Eg20gMjAyMiwgdOG6oWkgVmnhu4d0IE5hbSwgdOG7iSBs4buHIG3huq9jIDEwIHLhu5FpIGxv4bqhbiB0w6JtIHRo4bqnbiB0aMaw4budbmcgZ+G6t3AgbMOgIDE0LDklIGTDom4gc+G7kSAtIHTGsMahbmcgxJHGsMahbmcgZ+G6p24gMTUgdHJp4buHdSBuZ8aw4budaS4gTeG7mXQgxJFp4buBdSDEkcOhbmcgY2jDuiDDvSBsw6AgxJFhIHPhu5EgbmfGsOG7nWkgZMOibiBjaG8gcuG6sW5nIHLhu5FpIGxv4bqhbiB0w6JtIHRo4bqnbiBjaOG7iSBsacOqbiBxdWFuIMSR4bq/biB0w6JtIHRo4bqnbiBwaMOibiBsaeG7h3QsIG5oxrBuZyB0aOG7sWMgdOG6vyBsw6AgY8OhYyBy4buRaSBsb+G6oW4gbG8gw6J1IHbDoCB0cuG6p20gY+G6o20gY2hp4bq/bSB04buJIGzhu4cgY2FvLCBsw6puIMSR4bq/biA1LDQlIGTDom4gc+G7kSwgY8OybiBs4bqhaSBsw6AgY8OhYyBy4buRaSBsb+G6oW4gdMOibSB0aOG6p24ga2jDoWMgbmjGsCBjaOG6rW0gcGjDoXQgdHJp4buDbiB0w6JtIHRo4bqnbiwgcuG7kWkgbG/huqFuIGjDoG5oIHZpIOG7nyB0aGFuaCB0aGnhur91IG5pw6puLCBs4bqhbSBk4bulbmcgcsaw4bujdSwgY2jhuqV0IGvDrWNoIHRow61jaCzigKZI4bqtdSBxdeG6oyBuZ2hpw6ptIHRy4buNbmcgbmjhuqV0IGPhu6dhIHRy4bqnbSBj4bqjbSBsw6AgaMOgbmggdmkgdOG7sSB04butLiBUaOG7kW5nIGvDqiB04bqhaSBWaeG7h3QgTmFtIGNobyB0aOG6pXkgc+G7kSBuZ8aw4budaSB04buxIHThu60gaMOgbmcgbsSDbSBsw6puIHThu5tpIDM2LjAwMCDigJMgNDAuMDAwIG5nxrDhu51pLCBjYW8gZ+G6pXAgMyDigJMgNCBs4bqnbiBz4buRIGNhIHThu60gdm9uZyBkbyB0YWkgbuG6oW4gZ2lhbyB0aMO0bmcuIFRy4bqnbSBj4bqjbSBjaOG7i3UgdHLDoWNoIG5oaeG7h20gY2hvIDc1JSBjw6FjIHbhu6UgdOG7sSB04butIGvhu4MgdHLDqm4sIGPDsm4gbOG6oWkgbMOgIDIyJSBsw6AgZG8gbmdoaeG7h24gcsaw4bujdSwgbWEgdHXDvSwgY+G7nSBi4bqhYyB2w6AgY2jhu4kgY8OzIDMlIGRvIHTDom0gdGjhuqduIHBow6JuIGxp4buHdCwgxJHhu5luZyBraW5oLg0KDQpN4buZdCBz4buRIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBi4buLIHRy4bqnbSBj4bqjbSDhu58gc2luaCB2acOqbiBiYW8gZ+G7k206IMOhcCBs4buxYyB04burIHZp4buHYyBo4buNYyB04bqtcCB24bubaSBraOG7kWkgbMaw4bujbmcgYsOgaSB24bufIGzhu5tuIHbDoCB5w6p1IGPhuqd1IGNhbywgw6FwIGzhu7FjIHThu6sgZ2lhIMSRw6xuaCB24buBIHRow6BuaCB0w61jaCBo4buNYyB04bqtcCwgbcO0aSB0csaw4budbmcgc+G7kW5nIHRoYXkgxJHhu5VpIGtoaSBwaOG6o2kgc+G7kW5nIHhhIG5ow6AsIG3hu5FpIHF1YW4gaOG7hyB4w6MgaOG7mWkgcGjhu6ljIHThuqFwIHbDoCB0aGnhur91IHPhu7EgaOG7lyB0cuG7oyB04burIG5nxrDhu51pIHRow6JuLCBi4bqhbiBiw6guIE5nb8OgaSByYSwgc+G7sSBwaMOhdCB0cmnhu4NuIG3huqFuaCBt4bq9IGPhu6dhIGPDtG5nIG5naOG7hyB2w6AgbeG6oW5nIHjDoyBo4buZaSBjxaluZyBnw7NwIHBo4bqnbiBsw6BtIHTEg25nIHRow6ptIMOhcCBs4buxYyB2w6Agc+G7sSBzbyBzw6FuaCB0cm9uZyBnaeG7m2kgdHLhurssIGThuqtuIMSR4bq/biB0w6xuaCB0cuG6oW5nIHRy4bqnbSBj4bqjbS5WaeG7h2MgbmdoacOqbiBj4bupdSB2w6AgaGnhu4N1IHLDtSBjw6FjIHnhur91IHThu5EgbsOgeSBsw6AgY+G6p24gdGhp4bq/dCDEkeG7gyBjw7MgdGjhu4MgxJHhu4EgeHXhuqV0IGPDoWMgZ2nhuqNpIHBow6FwIGjhu5cgdHLhu6Mga+G7i3AgdGjhu51pIHbDoCBoaeG7h3UgcXXhuqMuIMSQ4buTbmcgdGjhu51pLCB2aeG7h2MgbsOibmcgY2FvIG5o4bqtbiB0aOG7qWMgduG7gSB0cuG6p20gY+G6o20gdHJvbmcgY+G7mW5nIMSR4buTbmcgc2luaCB2acOqbiBjxaluZyBnw7NwIHBo4bqnbiB04bqhbyByYSBtw7RpIHRyxrDhu51uZyBo4buNYyB04bqtcCB2w6Agc2luaCBob+G6oXQgbMOgbmggbeG6oW5oIGjGoW4uDQoNCkNow61uaCB2w6wgbMO9IGRvIG7DoHksIHTDtGkgxJHDoyBjaOG7jW4gxJHhu4EgdMOgaSAiUGjDom4gdMOtY2ggY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biB2aeG7h2MgYuG7iyB0cuG6p20gY+G6o20g4bufIHNpbmggdmnDqm4iIHbhu5tpIGh5IHbhu41uZyBnw7NwIHBo4bqnbiBuaOG7jyBiw6kgdsOgbyB2aeG7h2MgbsOibmcgY2FvIG5o4bqtbiB0aOG7qWMgdsOgIHTDrG0ga2nhur9tIGPDoWMgYmnhu4duIHBow6FwIGjhu691IGhp4buHdSBuaOG6sW0gZ2nhuqNtIHRoaeG7g3UgdMOsbmggdHLhuqFuZyB0cuG6p20gY+G6o20gdHJvbmcgZ2nhu5tpIHNpbmggdmnDqm4uIFF1YSDEkcOzLCB0w7RpIG1vbmcgbXXhu5FuIMSRw7NuZyBnw7NwIHbDoG8gdmnhu4djIHjDonkgZOG7sW5nIG3hu5l0IG3DtGkgdHLGsOG7nW5nIGjhu41jIMSRxrDhu51uZyBsw6BuaCBt4bqhbmggdsOgIGjhu5cgdHLhu6MgdOG7kXQgaMahbiBjaG8gc2luaCB2acOqbiB0cm9uZyB2aeG7h2MgcGjDoXQgdHJp4buDbiB0b8OgbiBkaeG7h24gY+G6oyB24buBIHRo4buDIGNo4bqldCBs4bqrbiB0aW5oIHRo4bqnbi4NCg0KIyMgKipN4bulYyB0acOqdSBuZ2hpw6puIGPhu6l1KioNCg0KTeG7pWMgdGnDqnUgY2jDrW5oIGPhu6dhIMSR4buBIHTDoGkgbMOgIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIGPDoWMgeeG6v3UgdOG7kSBsacOqbiBxdWFuIMSR4bq/biBi4buHbmggdHLhuqdtIGPhuqNtIOG7nyBzaW5oIHZpw6puLiwgdOG7qyDEkcOzIMSR4buBIHh14bqldCBjw6FjIGJp4buHbiBwaMOhcCBnacOhbyBk4bulYyB2w6AgY2FuIHRoaeG7h3AgdGjDrWNoIGjhu6NwIG5o4bqxbSBnaeG6o20gdGhp4buDdSB0w6xuaCB0cuG6oW5nIHRy4bqnbSBj4bqjbSB2w6AgdMSDbmcgY8aw4budbmcgc+G7qWMga2jhu49lIHTDom0gbMO9IGNobyBj4buZbmcgxJHhu5NuZyBzaW5oIHZpw6puLg0KDQojIyAqKsSQ4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1IHbDoCBwaOG6oW0gdmkgbmdoacOqbiBj4bupdSoqDQoNCsSQ4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1OiBzaW5oIHZpw6puIOG7nyBjw6FjIGPhuqVwIGjhu41jIGtow6FjIG5oYXUgbmjGsCB0cnVuZyBo4buNYyBwaOG7lSB0aMO0bmcsIMSR4bqhaSBo4buNYyB2w6AgdGjhuqFjIHPEqS4NCg0KUGjhuqFtIHZpIG5naGnDqm4gY+G7qXU6IDM1MiBzaW5oIHZpw6puIEhvYSBL4buzLg0KDQojIyAqKlBoxrDGoW5nIHBow6FwIG5naGnDqm4gY+G7qXUqKg0KDQpOZ2hpw6puIGPhu6l1IHPhu60gZOG7pW5nIHBoxrDGoW5nIHBow6FwIGjhu5NpIHF1eSDEkeG7kWkgduG7m2kgZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCDEkeG7gyBwaMOibiB0w61jaCBk4buvIGxp4buHdSBraOG6o28gc8OhdCB04burIDM1MiBzaW5oIHZpw6puIEhvYSBL4buzLiBQaMawxqFuZyBwaMOhcCBuw6B5IGNobyBwaMOpcCBjaMO6bmcgdMO0aSB4w6FjIMSR4buLbmggxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIHnhur91IHThu5EgxJHhur9uIHZp4buHYyBi4buLIHRy4bqnbSBj4bqjbSDhu58gc2luaCB2acOqbiANCg0KIyMgKirDnSBuZ2jEqWEgbmdoacOqbiBj4bupdSoqDQoNCk5naGnDqm4gY+G7qXUgbsOgeSBz4bq9IGdpw7pwIGzDoG0gcsO1IGPDoWMgeeG6v3UgdOG7kSBnw6J5IHJhIHRy4bqnbSBj4bqjbSwgbmjhu69uZyBraMOzIGtoxINuIHbDoCByw6BvIGPhuqNuIG3DoCBzaW5oIHZpw6puIHBo4bqjaSDEkeG7kWkgbeG6t3Qga2hpIHTDrG0ga2nhur9tIHPhu7EgaOG7lyB0cuG7oyB2w6AgY2FuIHRoaeG7h3AuIEvhur90IHF14bqjIGPhu6dhIG5naGnDqm4gY+G7qXUgc+G6vSBjdW5nIGPhuqVwIG5o4buvbmcga2nhur9uIHRo4bupYyBo4buvdSDDrWNoIMSR4buDIHTEg25nIGPGsOG7nW5nIG5o4bqtbiB0aOG7qWMgduG7gSB0cuG6p20gY+G6o20gdsOgIGdpw7pwIMSR4buLbmggaMaw4bubbmcgY8OhYyBiaeG7h24gcGjDoXAgY2FuIHRoaeG7h3AsIGjhu5cgdHLhu6MgdsOgIGdpw6FvIGThu6VjIGhp4buHdSBxdeG6oyBuaOG6sW0gZ2nhuqNtIHRoaeG7g3UgdMOsbmggdHLhuqFuZyB0cuG6p20gY+G6o20gdHJvbmcgY+G7mW5nIMSR4buTbmcgc2luaCB2acOqbi4gxJBp4buBdSBuw6B5IHPhur0gxJHDs25nIGfDs3AgdMOtY2ggY+G7sWMgdsOgbyB2aeG7h2MgbsOibmcgY2FvIHPhu6ljIGto4buPZSB0w6JtIGzDvSB2w6AgY2jhuqV0IGzGsOG7o25nIGN14buZYyBz4buRbmcgY+G7p2EgY8OhYyBi4bqhbiB0cuG6uywgxJHhu5NuZyB0aOG7nWkgZ2nhuqNtIHRoaeG7g3UgdMOhYyDEkeG7mW5nIHjDoyBo4buZaSBj4bunYSB24bqlbiDEkeG7gSBuw6B5Lg0KDQojICoqROG7ryBsaeG7h3UgbmdoacOqbiBj4bupdSoqDQoNCmBgYHtyfQ0KRGF0YSA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9BZG1pbi9Eb3dubG9hZHMvRGF0YS54bHN4IikNCnN0ciAoRGF0YSkNCg0KYGBgDQoNCmBgYHtyfQ0KZGF0YXRhYmxlKERhdGEpDQpgYGANCkThu68gbGnhu4d1IHPhu60gZOG7pW5nIHRyb25nIGLDoGkgbmdoacOqbiBj4bupdSDEkcaw4bujYyBs4bqleSB04burIHTDoWMgZ2nhuqMgS2FuZSBSdWRvbHBoIHRyw6puIHRyYW5nIHdlYiBrYWdnbGUuY29tLiANCg0KROG7ryBsaeG7h3UgxJHGsOG7o2MgdGh1IHRo4bqtcCBi4bqxbmcgY8OhY2gga2jhuqNvIHPDoXQgc2luaCB2acOqbiBIb2EgS+G7syDEkWFuZyB0aGVvIGjhu41jIOG7nyBjw6FjIGPhuqVwIGjhu41jIGtow6FjIG5oYXUgbmjGsCB0cnVuZyBo4buNYywgxJHhuqFpIGjhu41jIHbDoCB0aOG6oWMgc8SpLiBU4buVbmcgY+G7mW5nIGPDsyAzNTIgc2luaCB2acOqbiDEkcaw4bujYyDEkcawYSB2w6BvIG5naGnDqm4gY+G7qXUuIEThu68gbGnhu4d1IMSRxrDhu6NjIHRodSB0aOG6rXAgdOG7qyBjw6FjIHNpbmggdmnDqm4gYuG6sW5nIHBoxrDGoW5nIHBow6FwIGPDonUgaOG7j2kgduG7m2kgc+G7sSDEkeG7k25nIMO9IGPDsyBoaeG7g3UgYmnhur90Lg0KDQpC4buZIGThu68gbGnhu4d1IGfhu5NtIGPDsyAxNCBiaeG6v24uIFRyb25nIMSRw7MgY8OzIDcgYmnhur9uIMSR4buLbmggdMOtbmggdsOgIDcgYmnhur9uIMSR4buLbmggbMaw4bujbmc6DQoNCioqKkJp4bq/biDEkeG7i25oIHTDrW5oOioqKg0KDQotIEJp4bq/biBEZXByZXNzaW9uIC0gU2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gaGF5IGtow7RuZywgZ+G7k20gMiBnacOhIHRy4buLOiBZZXMgaG/hurdjIE5vLg0KDQotIEJp4bq/biBHZW5kZXIgLSBHaeG7m2kgdMOtbmggY+G7p2Egc2luaCB2acOqbiwgZ+G7k20gMiBnacOhIHRy4buLIE1hbGUgKE5hbSkgaG/hurdjIEZlbWFsZSAoTuG7rykuDQoNCi0gQWNjb21tb2RhdGlvbiAtIE7GoWkg4bufIGhp4buHbiB04bqhaSBj4bunYSBzaW5oIHZpw6puLCBn4buTbSAyIGdpw6EgdHLhu4s6IEhvbWUgd2l0aCBwYXJlbnRzIChU4bqhaSBuaMOgIHbhu5tpIGdpYSDEkcOsbmgpIHbDoCBQcml2YXRlIHJlbnRlZCBhY2NvbW1vZGF0aW9uIChQaMOybmcgdHLhu40gdMawIG5ow6JuKS4NCg0KLSBCaeG6v24gRWR1Y2F0aW9uIC0gVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGhp4buHbiB04bqhaSwgZ+G7k20gMyBnacOhIHRy4buLIC0gSGlnaCBTY2hvb2wgKFRydW5nIGjhu41jIHBo4buVIHRow7RuZyksIENvbGxlZ2UgLSBCYWNoZWxvcidzICjEkOG6oWkgaOG7jWMpIHbDoCBNYXN0ZXIgKFRo4bqhYyBzxKkpLg0KDQotIEJp4bq/biBKb2IgLSBoaeG7h24gdOG6oWkgY8OzIMSRaSBsw6BtIGhheSBraMO0bmcsIGfhu5NtIDIgZ2nDoSB0cuG7izogWWVzIGhv4bq3YyBObw0KDQotIEJp4bq/biBNZWRpYSAtIHPhu5EgZ2nhu50gZMOgbmggY2hvIHBoxrDGoW5nIHRp4buHbiB0cnV54buBbiB0aMO0bmcgbeG7l2kgbmfDoHksIGfhu5NtIDMgZ2nDoSB0cuG7izogMSAtIDIgaG91cnMgKHThu6sgMSDEkeG6v24gMiB0aeG6v25nKSwgMiAtIDQgaG91cnMgKHThu6sgMiDEkeG6v24gNCB0aeG6v25nKSB2w6AgTW9yZSB0aGFuIDQgaG91cnMgKGjGoW4gNCB0aeG6v25nKS4NCg0KLSBCaeG6v24gU2VsZnN0dWR5IC0gU+G7kSBnaeG7nSB04buxIGjhu41jIG3hu5dpIG5nw6B5LCBn4buTbSAzIGdpw6EgdHLhu4s6IDEgLSAyIGhvdXJzICh04burIDEgxJHhur9uIDIgdGnhur9uZyksIDIgLSA0IGhvdXJzICh04burIDIgxJHhur9uIDQgdGnhur9uZykgdsOgIE1vcmUgdGhhbiA0IGhvdXJzIChoxqFuIDQgdGnhur9uZykuDQoNCioqKkJp4bq/biDEkeG7i25oIGzGsOG7o25nOioqKg0KDQotIEJp4bq/biBBZ2UgLSBUdeG7lWkgY+G7p2Egc2luaCB2acOqbi4NCg0KLSBCaeG6v24gUGxlYXN1cmVpbnRoaW5ncyAtIMONdCBo4bupbmcgdGjDuiBob+G6t2Mgbmnhu4FtIHZ1aSB0cm9uZyBjw7RuZyB2aeG7h2MsIGfhu5NtIDQgbeG7qWMgxJHhu5k6IDEgKENoxrBhIGJhbyBnaeG7nSksIDIoVGhpIHRob+G6o25nKSwgMyAoVGjGsOG7nW5nIHh1ecOqbiksIDQgKEx1w7RuIGx1w7RuKS4NCg0KLSBCaeG6v24gTGl0dGxlZW5lcmd5IC0gQ+G6o20gdGjhuqV5IG3hu4d0IG3hu49pIGhv4bq3YyBjw7Mgw610IG7Eg25nIGzGsOG7o25nLCBn4buTbSA0IG3hu6ljIMSR4buZIHTGsMahbmcgdOG7sSBuaMawIGJp4bq/biBQbGVhc3VyZWludGhpbmdzLg0KDQotIEJp4bq/biBGZWVsaW5nYmFkeW91cnNlbGYgLSBD4bqjbSB0aOG6pXkgdOG7k2kgdOG7hyB24buBIGLhuqNuIHRow6JuIGhv4bq3YyBy4bqxbmcgYuG6oW4gbMOgIG3hu5l0IGvhursgdGjhuqV0IGLhuqFpIGhv4bq3YyDEkcOjIGtow7RuZyBsw6BtIGLhuqNuIHRow6JuIGhv4bq3YyBnaWEgxJHDrG5oIHRo4bqldCB24buNbmcsIGfhu5NtIDQgbeG7qWMgxJHhu5kgdMawxqFuZyB04buxIG5oxrAgYmnhur9uIFBsZWFzdXJlaW50aGluZ3MuDQoNCi0gQmnhur9uIEZlZWxpbmdkb3duIC0gQ+G6o20gdGjhuqV5IHRo4bqldCB24buNbmcsIGNow6FuIG7huqNuLCBob+G6t2MgdsO0IHbhu41uZywgZ+G7k20gNCBt4bupYyDEkeG7mSB0xrDGoW5nIHThu7EgbmjGsCBiaeG6v24gUGxlYXN1cmVpbnRoaW5ncy4NCg0KLSBCaeG6v24gSHVydGluZ3lvdXJzZWxmIC0gU3V5IG5naMSpIHLhurFuZyBi4bqhbiBuw6puIGNo4bq/dCDEkWkgaG/hurdjIGzDoG0gdOG7lW4gdGjGsMahbmcgY2jDrW5oIG3DrG5oIHRoZW8gbeG7mXQgY8OhY2ggbsOgbyDEkcOzLCBn4buTbSA0IG3hu6ljIMSR4buZIHTGsMahbmcgdOG7sSBuaMawIGJp4bq/biBQbGVhc3VyZWludGhpbmdzLg0KDQotIEJp4bq/biBHUEEgLSDEkGnhu4NtIHPhu5EgdMOtY2ggbHXhu7kgaGnhu4duIHThuqFpIHTDrW5oIHRoZW8gdGhhbmcgxJFp4buDbSA0Lg0KDQojICoqQ2jhu41uIGJp4bq/biDEkeG7i25oIHTDrW5oIGzDoG0gYmnhur9uIHBo4bulIHRodeG7mWMqKg0KDQoqKipQaMOibiB0w61jaCBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBi4buLIHRy4bqnbSBj4bqjbSDhu58gc2luaCB2acOqbioqKg0KDQpUw7RpIGNo4buNbiBiaeG6v24gRGVwcmVzc2lvbiAoYmnhu4N1IGhp4buHbiBjaG8gdmnhu4djIGPDsyB0cuG6p20gY+G6o20gaG/hurdjIGtow7RuZyB0cuG6p20gY+G6o20g4bufIHNpbmggdmnDqm4pIGzDoG0gYmnhur9uIHBo4bulIHRodeG7mWMuIFbhu5tpIG3hu6VjIMSRw61jaCwgdMO0aSBtdeG7kW4ga2jhuqNvIHPDoXQgeGVtIGPDoWMgeeG6v3UgdOG7kSB24buBIGdp4bubaSB0w61uaCwgxJHhu5kgdHXhu5VpLCBuxqFpIOG7nyBoaeG7h24gdOG6oWksIGPDtG5nIHZp4buHYyBoaeG7h24gdOG6oWksIHRo4budaSBnaWFuIHThu7EgaOG7jWMgbeG7l2kgbmfDoHksIMSRaeG7g20gc+G7kSBHUEHigKYg4bqjbmggaMaw4bufbmcgbmjGsCB0aOG6vyBuw6BvIMSR4buRaSB24bubaSB2aeG7h2MgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGPhu6dhIHNpbmggdmnDqm4gxJHGsOG7o2Mga2jhuqNvIHPDoXQuDQoNCkPDoWMgYmnhur9uIHBow6JuIHTDrWNoIGJhbyBn4buTbToNCg0KLSBCaeG6v24gxJHhu4tuaCB0w61uaDogRGVwcmVzc2lvbiwgR2VuZGVyLCBBY2NvbW1vZGF0aW9uLCBKb2IsIEVkdWNhdGlvbg0KDQotIEJp4bq/biDEkeG7i25oIGzGsOG7o25nOiBBZ2UsIEdQQQ0KDQojIyAqKlRo4buRbmcga8OqIG3DtCB04bqjKioNCg0KIyMjICoqVGjhu5FuZyBrw6ogbcO0IHThuqMgY2hvIDEgYmnhur9uKioNCg0KKioqVGjhu5FuZyBrw6ogbcO0IHThuqMgY2hvIGJp4bq/biDEkeG7i25oIHTDrW5oKioqDQoNCmBgYHtyfQ0KZG50IDwtIERhdGFbLGMoIkdlbmRlciIsIkFjY29tbW9kYXRpb24iLCJFZHVjYXRpb24iLCJTZWxmc3R1ZHkiLCJKb2IiLCJNZWRpYSIsIkRlcHJlc3Npb24iKV0NCmBgYA0KDQojIyMjICoqQmnhur9uIERlcHJlc3Npb24gLSBUcuG6p20gY+G6o20qKg0KDQpgYGB7cn0NCnRhYmxlKERhdGEkRGVwcmVzc2lvbikNCnByb3AudGFibGUodGFibGUoRGF0YSREZXByZXNzaW9uKSkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChEYXRhLGFlcyhEZXByZXNzaW9uKSkrDQogIGdlb21fYmFyKGNvbG9yID0gImJsdWUiLCBmaWxsID0gInNreWJsdWUiKSsNCiAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXMgOjogcGVyY2VudChhZnRlcl9zdGF0KGNvdW50L3N1bShjb3VudCkpKSksIHN0YXQ9ICAnY291bnQnLCBjb2xvciA9ICdibGFjaycsIHZqdXN0ID0gLS41KSsNCiAgeWxhYigiTnVtYmVyIG9mIFN0dWRlbnRzIikrIHhsYWIoIkRlcHJlc3Npb24iKSArIGxhYnModGl0bGUgPSAnxJDhu5MgdGjhu4sgduG7gSBi4buHbmggdHLhuqdtIGPhuqNtIGPhu6dhIDM1MiBuZ8aw4budaSDEkcaw4bujYyBraOG6o28gc8OhdCcpDQpgYGANCg0KVGhlbyBuaMawIGvhur90IHF14bqjIGto4bqjbyBzw6F0IHRodSB0aOG6rXAgxJHGsOG7o2MsIGNobyB0aOG6pXkgbeG7mXQgc+G7sSB0aOG6rXQga2jDoSBi4bqldCBuZ+G7nSB2w6AgxJHDoW5nIGLDoW8gxJHhu5luZzogc+G7kSBzaW5oIHZpw6puIHRoYW0gZ2lhIGto4bqjbyBzw6F0IGPhu6UgdGjhu4MgbMOgIDE3MCBzaW5oIHZpw6puIHRyw6puIHThu5VuZyBz4buRIHNpbmggdmnDqm4gxJHGsOG7o2MgbOG6pXkgdGjDtG5nIHRpbiBraOG6o28gc8OhdCAoY2hp4bq/bSA0OC4zJSkgYsOhbyBjw6FvIHLhurFuZyBo4buNIGPDsyBiaeG7g3UgaGnhu4duIGLhu4sgbeG6r2MgYuG7h25oIHRy4bqnbSBj4bqjbS4gxJDDonkgbMOgIG3hu5l0IHThu7cgbOG7hyBjYW8sIHbDoCBuw7MgZ+G7o2kgbMOqbiBt4buZdCBjw6J1IGjhu49pIMSRw6FuZyBxdWFuIG5n4bqhaSB24buBIHTDrG5oIGjDrG5oIHTDom0gbMO9IGPhu6dhIHNpbmggdmnDqm4gdHJvbmcgdGjhu51pIMSR4bqhaSBuZ8OgeSBuYXkuIFPhu5EgY8OybiBs4bqhaSBsw6AgMTgyIHNpbmggdmnDqm4gKHjhuqVwIHjhu4kgNTEuNyUpIHRow6wga2jDtG5nIGPDsyBiaeG7g3UgaGnhu4duIGPhu6dhIHPhu7EgdHLhuqdtIGPhuqNtIG7DoHkuDQoNCiMjIyMgKipCaeG6v24gR2VuZGVyIC0gR2nhu5tpIHTDrW5oKioNCg0KYGBge3J9DQp0YWJsZShEYXRhJEdlbmRlcikNCnByb3AudGFibGUodGFibGUoRGF0YSRHZW5kZXIpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KERhdGEsYWVzKEdlbmRlcikpKw0KICBnZW9tX2Jhcihjb2xvciA9ICJibHVlIiwgZmlsbCA9ICJza3libHVlIikrDQogICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzIDo6IHBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpLCBzdGF0PSAgJ2NvdW50JywgY29sb3IgPSAnYmxhY2snLCB2anVzdCA9IC0uNSkrDQogIHlsYWIoIk51bWJlciBvZiBTdHVkZW50cyIpKyB4bGFiKCJHZW5kZXIiKSArIGxhYnModGl0bGUgPSAnxJDhu5MgdGjhu4sgduG7gSBnaeG7m2kgdMOtbmggY+G7p2EgMzUyIG5nxrDhu51pIMSRxrDhu6NjIGto4bqjbyBzw6F0JykNCmBgYA0KDQpUcm9uZyB04buVbmcgc+G7kSAzNTIgaOG7jWMgc2luaCBzaW5oIHZpw6puIHRoYW0gZ2lhIGto4bqjbyBzw6F0IHRow6wgY8OzIMSR4bq/biAzMTMgc2luaCB2acOqbiBu4buvIChjaGnhur9tIGfhuqduIDg5JSkgdsOgIDM5IHNpbmggdmnDqm4gbmFtIChjaGnhur9tIDExJSkuDQoNCiMjIyMgKipCaeG6v24gRWR1Y2F0aW9uIC0gVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuKioNCg0KYGBge3J9DQp0YWJsZShEYXRhJEVkdWNhdGlvbikNCnByb3AudGFibGUodGFibGUoRGF0YSRFZHVjYXRpb24pKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KERhdGEsYWVzKEVkdWNhdGlvbikpKw0KICBnZW9tX2Jhcihjb2xvciA9ICJibHVlIiwgZmlsbCA9ICJza3libHVlIikrDQogICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzIDo6IHBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpLCBzdGF0PSAgJ2NvdW50JywgY29sb3IgPSAnYmxhY2snLCB2anVzdCA9IC0uNSkrDQogIHlsYWIoIk51bWJlciBvZiBTdHVkZW50cyIpKyB4bGFiKCJFZHVjYXRpb24iKSArIGxhYnModGl0bGUgPSAnxJDhu5MgdGjhu4sgduG7gSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgMzUyIG5nxrDhu51pIMSRxrDhu6NjIGto4bqjbyBzw6F0JykNCmBgYA0KDQpL4bq/dCBxdeG6oyBraOG6o28gc8OhdCAzNTIgaOG7jWMgc2luaCBzaW5oIHZpw6puIGNobyB0aOG6pXkgOg0KDQogIC0gQ8OzIDIwNCBzaW5oIHZpw6puIMSRYW5nIHRoZW8gaOG7jWMgxJHhuqFpIGjhu41jIChjb2xsZWdlIC0gQmFjaGVsb3LigJlzKSBjaGnhur9tIHThu4kgbOG7hyA1OCUNCg0KICAtIEPDsyAxMjQgaOG7jWMgc2luaCDEkWFuZyBo4buNYyB0cnVuZyBo4buNYyBwaOG7lSB0aMO0bmcgKEhpZ2ggU2Nob29sKSBjaGnhur9tIHThu4kgbOG7hyAzNSUNCg0KICAtIEPDsyAyNCBzaW5oIHZpw6puIMSRYW5nIHRoZW8gaOG7jWMgdGjhuqFjIHPEqSAoTWFzdGVyKSBjaGnhur9tIHThu4kgbOG7hyA3JQ0KDQojIyMjICoqQmnhur9uIEpvYiAtIEPDtG5nIHZp4buHYyBoaeG7h24gdOG6oWkqKg0KDQpgYGB7cn0NCnRhYmxlKERhdGEkSm9iKQ0KcHJvcC50YWJsZSh0YWJsZShEYXRhJEpvYikpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoRGF0YSxhZXMoSm9iKSkrDQogIGdlb21fYmFyKGNvbG9yID0gImJsdWUiLCBmaWxsID0gInNreWJsdWUiKSsNCiAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXMgOjogcGVyY2VudChhZnRlcl9zdGF0KGNvdW50L3N1bShjb3VudCkpKSksIHN0YXQ9ICAnY291bnQnLCBjb2xvciA9ICdibGFjaycsIHZqdXN0ID0gLS41KSsNCiAgeWxhYigiTnVtYmVyIG9mIFN0dWRlbnRzIikrIHhsYWIoIkpvYiIpICsgbGFicyh0aXRsZSA9ICfEkOG7kyB0aOG7iyB24buBIGPDtG5nIHZp4buHYyBoaeG7h24gdOG6oWkgY+G7p2EgMzUyIG5nxrDhu51pIMSRxrDhu6NjIGto4bqjbyBzw6F0JykNCmBgYA0KDQpUcm9uZyB04buVbmcgc+G7kSBuaOG7r25nIGjhu41jIHNpbmgsIHNpbmggdmnDqm4gxJHGsOG7o2Mga2jhuqNvIHPDoXQgKDM1MiBuZ8aw4budaSkgdGjDrCBjw7MgxJHhur9uIDIzMyBuZ8aw4budaSBjw7Mgdmnhu4djIGzDoG0gYmFvIGfhu5NtIGPhuqMgY8O0bmcgdmnhu4djIGZ1bGwtdGltIHbDoCBwYXJ0LXRpbWUgKGNoaeG6v20gNjYlICkgdsOgIGPDsyAxMTkgbmfGsOG7nWkga2jDtG5nIMSRaSBsw6BtIChjaGnhur9tIDM0JSkuDQoNCiMjIyMgKipCaeG6v24gQWNjb21tb2RhdGlvbiAtIE7GoWkg4bufIGhp4buHbiB04bqhaSoqDQoNCmBgYHtyfQ0KdGFibGUoRGF0YSRBY2NvbW1vZGF0aW9uKQ0KcHJvcC50YWJsZSh0YWJsZShEYXRhJEFjY29tbW9kYXRpb24pKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KERhdGEsYWVzKEFjY29tbW9kYXRpb24pKSsNCiAgZ2VvbV9iYXIoY29sb3IgPSAiYmx1ZSIsIGZpbGwgPSAic2t5Ymx1ZSIpKw0KICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlcyA6OiBwZXJjZW50KGFmdGVyX3N0YXQoY291bnQvc3VtKGNvdW50KSkpKSwgc3RhdD0gICdjb3VudCcsIGNvbG9yID0gJ2JsYWNrJywgdmp1c3QgPSAtLjUpKw0KICB5bGFiKCJOdW1iZXIgb2YgU3R1ZGVudHMiKSsgeGxhYigiQWNjb21tb2RhdGlvbiIpICsgbGFicyh0aXRsZSA9ICfEkOG7kyB0aOG7iyB24buBIG7GoWkg4bufIGhp4buHbiB04bqhaSBj4bunYSAzNTIgbmfGsOG7nWkgxJHGsOG7o2Mga2jhuqNvIHPDoXQnKQ0KYGBgDQoNClRoZW8ga+G6v3QgcXXhuqMgY+G7p2EgYuG6o25nIGto4bqjbyBzw6F0IDM1MiBo4buNYyBzaW5oIHNpbmggdmnDqm4gdGjDrCBjw7MgOg0KDQogIC0gMTU1IGjhu41jIHNpbmggc2luaCB2acOqbiBz4buRbmcgY2h1bmcgduG7m2kgZ2lhIMSRw6xuaCBjaGnhur9tIDQ0JQ0KDQogIC0gMTk3IGjhu41jIHNpbmggc2luaCB2acOqbiDhu58gdOG6oWkgY8OhYyBwaMOybmcgdHLhu40gdMawIG5ow6JuIGNoaeG6v20gNTYlDQoNCsSQYSBz4buRIGjhu41jIHNpbmggc2luaCB2acOqbiBjw7MgeHUgaMaw4bubbmcg4bufIGPDoWMgcGjDsm5nIHRy4buNIHTGsCBuaMOibiBoxqFuIGzDoCBz4buRbmcgY2h1bmcgduG7m2kgZ2lhIMSRw6xuaA0KDQoqKipUaOG7kW5nIGvDqiBtw7QgdOG6oyBjaG8gYmnhur9uIMSR4buLbmggbMaw4bujbmcqKioNCg0KYGBge3J9DQpkbmwgPC0gRGF0YVssYygiQWdlIiwiUGxlYXN1cmVpbnRoaW5ncyIsIkxpdHRsZWVuZXJneSIsIkZlZWxpbmdiYWR5b3Vyc2VsZiIsIkZlZWxpbmdkb3duIiwiSHVydGluZ3lvdXJzZWxmIiwiR1BBIildDQpgYGANCg0KIyMjIyAqKkJp4bq/biBBZ2UgLSBUdeG7lWkqKg0KDQpgYGB7cn0NCnN1bW1hcnkoRGF0YSRBZ2UpDQpgYGANCg0KVHJvbmcgMzUyIGjhu41jIHNpbmgsIHNpbmggdmnDqm4gxJHGsOG7o2Mga2jhuqNvIHPDoXQgduG7gSBi4buHbmggdHLhuqdtIGPhuqNtIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAxNyDEkeG6v24gMjggdHXhu5VpLCB0cm9uZyDEkcOzOg0KDQogIC0gxJDhu5kgdHXhu5VpIHRydW5nIGLDrG5oIGzDoCAyMS45Nw0KICANCiAgLSBDw7MgMjUlIG5nxrDhu51pIGTGsOG7m2kgMTkgdHXhu5VpDQogIA0KICAtIEPDsyA1MCUgbmfGsOG7nWkgZMaw4bubaSAyMiB0deG7lWkNCiAgDQogIC0gQ8OzIDc1JSBuZ8aw4budaSBkxrDhu5tpIDI0IHR14buVaQ0KDQpgYGB7cn0NCnNkKERhdGEkQWdlKQ0KYGBgDQrEkOG7mSBs4buHY2ggY2h14bqpbiBj4bunYSB0deG7lWkgbmjhu69uZyBuZ8aw4budaSBraOG6oyBzw6F0IGzDoCAzLjIsIGNobyBiaeG6v3QgbeG7qWMgxJHhu5kgcGjDom4gdMOhbiB24buBIHR14buVaSBj4bunYSB04burbmcgbmfGsOG7nWkgxJHGsOG7o2Mga2jhuqNvIHPDoXQgdHJvbmcgMzUyIG5nxrDhu51pIHNvIHbhu5tpIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggbMOgIDMuMi4NCg0KYGBge3J9DQp0YWJsZShEYXRhJEFnZSkNCnByb3AudGFibGUodGFibGUoRGF0YSRBZ2UpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KERhdGEsYWVzKEFnZSkpKw0KICBnZW9tX2Jhcihjb2xvciA9ICJibHVlIiwgZmlsbCA9ICJza3libHVlIikrDQogICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzIDo6IHBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpLCBzdGF0PSAgJ2NvdW50JywgY29sb3IgPSAnYmxhY2snLCB2anVzdCA9IC0uNSkrDQogIHlsYWIoIk51bWJlciBvZiBTdHVkZW50cyIpKyB4bGFiKCJBZ2UiKSAgKyBsYWJzKHRpdGxlID0gJ8SQ4buTIHRo4buLIMSR4buZIHR14buVaSBj4bunYSAzNTIgbmfGsOG7nWkgxJHGsOG7o2Mga2jhuqNvIHPDoXQnKQ0KYGBgDQoNCk5o4buvbmcgbmfGsOG7nWkgxJHGsOG7o2Mga2jhuqNvIHPDoXQgbuG6sW0gdHJvbmcgMTIgxJHhu5kgdHXhu5VpIGtow6FjIG5oYXUgdOG7qyAxNyDEkeG6v24gMjggdHXhu5VpLiBUcm9uZyDEkcOzLCBuZ8aw4budaSDhu58gxJHhu5kgdHXhu5VpIDE5IGPDsyBz4buRIGzGsOG7o25nIMSRw7RuZyBuaOG6pXQgKDQ2IG5nxrDhu51pLCBjaGnhur9tIDEzLjA3JSksIG5nxrDhu51pIOG7nyDEkeG7mSB0deG7lWkgMjUgbMOgIMOtdCBuaOG6pXQgKDE0IG5nxrDhu51pLCBjaGnhur9tIDMuOTglKS4NCg0KTmfGsOG7nWkg4bufIMSR4buZIHR14buVaSBjYW8gbmjhuqV0IGzDoCAyOCB0deG7lWkgKDE4IG5nxrDhu51pLCBjaGnhur9tIDUuMTElKSwgbmfGsOG7nWkg4bufIMSR4buZIHR14buVaSB0aOG6pXAgbmjhuqV0IGzDoCAxNyB0deG7lWkgKDMyIG5nxrDhu51pLCBjaGnhur9tIDkuMDklKS4NCg0KIyMjIyAqKkJp4bq/biBHUEEgLSDEkGnhu4NtIHPhu5EgdMOtY2ggbHXhu7kgaGnhu4duIHThuqFpIHTDrW5oIHRoZW8gdGhhbmcgxJFp4buDbSA0KioNCg0KYGBge3J9DQpzdW1tYXJ5KERhdGEkR1BBKQ0KYGBgDQpUcm9uZyAzNTIgbmfGsOG7nWkgxJHGsOG7o2Mga2jhuqNvIHPDoXQgduG7gSDEkWnhu4NtIHPhu5EgdMOtY2ggbHXhu7kgaGnhu4duIHThuqFpIHTDrW5oIHRoZW8gdGhhbmcgxJFp4buDbSA0IGPDsyDEkWnhu4NtIHRo4bqleSBuaOG6pXQgbMOgIDEgdsOgIMSRaeG7g20gY2FvIG5o4bqldCBsw6AgNDoNCg0KICAtIFPhu5EgxJFp4buDbSB0cnVuZyBiw6xuaCBsw6AgMy4wMDkgxJFp4buDbQ0KDQogIC0gQ8OzIDI1JSBuZ8aw4budaSBkxrDhu5tpIDIuMyDEkWnhu4NtDQogIA0KICAtIEPDsyA1MCUgbmfGsOG7nWkgZMaw4bubaSAzLjM1IMSRaeG7g20NCiAgDQogIC0gQ8OzIDc1JSBuZ8aw4budaSBkxrDhu5tpIDMuMzUgxJFp4buDbQ0KDQpgYGB7cn0NCnNkKERhdGEkR1BBKQ0KYGBgDQrEkOG7mSBs4buHY2ggY2h14bqpbiBj4bunYSDEkWnhu4NtIHPhu5EgdMOtY2ggbMWpeSBuaOG7r25nIG5nxrDhu51pIGto4bqjbyBzw6F0IGzDoCAwLjc2LCBjaG8gYmnhur90IG3hu6ljIMSR4buZIHBow6JuIHTDoW4gduG7gSDEkWnhu4NtIHPhu5EgdMOtY2ggbMWpeSBj4bunYSB04burbmcgbmfGsOG7nWkga2jhuqNvIHPDoXQgdHJvbmcgMzUyIG5nxrDhu51pIHNvIHbhu5tpIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggbMOgIDAuNzYuDQoNCmBgYHtyfQ0KdGFibGUoRGF0YSRHUEEpDQpwcm9wLnRhYmxlKHRhYmxlKERhdGEkR1BBKSkNCmBgYA0KDQpgYGB7cn0NCmhpc3QoRGF0YSRHUEEpDQpgYGANCg0KVGhlbyBr4bq/dCBxdeG6oyBraOG6o28gc8OhdCBjaG8gdGjhuqV5OiANCg0KICAtIFPhu5EgxJFp4buDbSB0w61jaCBsxal5IEdQQSBjw7MgbeG7qWMgxJFp4buDbSBHUEEgMy4zNSBsw6AgbeG7qWMgxJFp4buDbSBjw7MgdOG7tyBs4buHIHjDoWMgc3XhuqV0IGNhbyBuaOG6pXQgbMOgIDMxLjgyJS4NCiAgDQogIC0gQmnhur9uIEdQQSAoc+G7kSDEkWnhu4NtIHTDrWNoIGzFqXkgdHLDqm4gdGhhbmcgxJFp4buDbSA0KSBjw7MgZ2nDoSB0cuG7iyB04burIDEuMCDEkeG6v24gNC4wLCB0cm9uZyDEkcOzIGNoaeG6v20gbmhp4buBdSBuaOG6pXQgbMOgIG3hu6ljIMSRaeG7g20gR1BBIG7hurFtIHRyb25nIHbDuW5nIHThu6sgMy4wIMSR4bq/biAzLjU7IEPDsm4gbeG7qWMgxJFp4buDbSBHUEEgdMOtY2ggbMWpeSBjaGnhur9tIMOtdCBuaOG6pXQgbMOgIHThu6sgbeG7qWMgxJFp4buDbSAxLjUgxJHhur9uIDIuMA0KDQojIyMgKipUaOG7kW5nIGvDqiBtw7QgdOG6oyBjaG8gY8OhYyBj4bq3cCBiaeG6v24qKg0KDQojIyMjICoqQmnhur9uIERlcHJlc3Npb24gKFNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtKSB2w6AgYmnhur9uIEdlbmRlciAoR2nhu5tpIHTDrW5oKSoqDQoNCmBgYHtyfQ0KcmlzazEgPC0gdGFibGUoRGF0YSRHZW5kZXIsIERhdGEkRGVwcmVzc2lvbikNCmFkZG1hcmdpbnMocmlzazEpDQpgYGANCg0KYGBge3J9DQpwcm9wLnRhYmxlKHJpc2sxKQ0KYGBgDQoNCmBgYHtyfQ0KcHJvcC50YWJsZShyaXNrMSxtYXJnaW49MikNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChEYXRhLCBhZXMoR2VuZGVyLCBmaWxsID0gRGVwcmVzc2lvbikpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZG9kZ2UnKSArIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudCAvIHN1bShjb3VudCkpLCBhY2N1cmFjeSA9IDAuMDEpKSwgDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwgDQogICAgICAgICAgICB2anVzdCA9IC0wLjUsIA0KICAgICAgICAgICAgY29sb3IgPSAnYmxhY2snKQ0KYGBgDQoNClThu6sgYuG6o25nIHThuqduIHPhu5EgduG7gSB2aeG7h2Mgc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gdsOgIGdp4bubaSB0w61uaCB0YSB0aOG6pXk6DQoNCi0gVHJvbmcgc+G7kSAxODIgc2luaCB2acOqbiBraMO0bmcgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtOiBzaW5oIHZpw6puIG7hu68gbMOgIDE2NCBuZ8aw4budaSAoY2hp4bq/bSBoxqFuIDkwLjElKSwgc2luaCB2acOqbiBuYW0gbMOgIDE4IG5nxrDhu51pIChraG/huqNuZyA5LjklKS4gDQoNCi0gVHJvbmcgc+G7kSAxNzAgc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o206IHNpbmggdmnDqm4gbuG7ryBsw6AgMTQ5IG5nxrDhu51pIChraG/huqNuZyA4Ny42JSksIHNpbmggdmnDqm4gbmFtIGzDoCAyMSBuZ8aw4budaSAoa2hv4bqjbmcgMTIuNCUpLg0KDQpU4bu3IGzhu4cgcGjhuqduIHRyxINtIG5ow7NtIHNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGzDoCBu4buvIG5oaeG7gXUgaMahbiBuYW0uIFThu7cgbOG7hyBwaOG6p24gdHLEg20gbmjDs20gc2luaCB2acOqbiBraMO0bmcgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGzDoCBu4buvIG5oaeG7gXUgaMahbiBuYW0uDQoNCk5oxrAgduG6rXksIGdp4buvYSBoYWkgbmjDs20gbmfGsOG7nWkgY8OzIGhheSBraMO0bmcgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIMSR4buBdSBjw7Mgc+G7kSBsxrDhu6NuZyBsw6AgbuG7ryBuaGnhu4F1IGjGoW4gbMOgIG5hbS4NCg0KKipSaXNrIHJhdGlvLyBPZGQgcmF0aW8qKg0KDQoqKipSaXNrIHJhdGlvKioqDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKHJpc2sxKQ0KYGBgDQpU4bu3IGzhu4cgc2luaCB2acOqbiBuYW0gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIHThu7cgbOG7hyBzaW5oIHZpw6puIG7hu68gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGzDoCAxLjEzLCBjaG8gdGjhuqV5IHThu7cgbOG7hyBzaW5oIHZpw6puIG5hbSBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gbmhp4buBdSBoxqFuIDEzJSBzbyB24bubaSB04bu3IGzhu4cgc2luaCB2acOqbiBu4buvIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbS4NCg0KKioqT2RkIHJhdGlvKioqDQoNCmBgYHtyfQ0Kb2Rkc3JhdGlvKHJpc2sxLCByZXYgPSAnYycpDQpgYGANClThu7cgbOG7hyBnaeG7r2Egbmjhu69uZyBzaW5oIHZpw6puIG7hu68gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gYuG6sW5nIDc4JSB04bu3IGzhu4cgZ2nhu69hIG5o4buvbmcgc2luaCB2acOqbiBuYW0gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20uDQoNCkdpw6EgdHLhu4sgdHLDqm4gY2hvIGJp4bq/dCB04bu3IGzhu4cgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gY+G7p2Egbmjhu69uZyBzaW5oIHZpw6puIG7hu68gw610IGjGoW4gMjIlIHNvIHbhu5tpIG5o4buvbmcgc2luaCB2acOqbiBuYW0uDQoNCiMjIyMgKipCaeG6v24gRGVwcmVzc2lvbiAoU2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20pIHbDoCBiaeG6v24gQWdlICjEkOG7mSB0deG7lWkpKioNCg0KYGBge3J9DQptZWFuKERhdGEkQWdlKQ0KYGBgDQoNClRhIGNoaWEgxJHhu5kgdHXhu5VpIGPhu6dhIG5ow7NtIHNpbmggdmnDqm4ga2jhuqNvIHPDoXQgdGjDoG5oIGhhaSBuaMOzbSBkxrDhu5tpIDIyIHR14buVaSB2w6AgdHLDqm4gMjIgdHXhu5VpLg0KYGBge3J9DQphZ2UyIDwtIGN1dChEYXRhJEFnZSwgYnJlYWtzID0gYygwLDIyLDI4KSwgbGFiZWxzID0gYygnZMaw4bubaSAyMiB0deG7lWknLCAndHLDqm4gMjIgdHXhu5VpJykpDQpkIDwtIG11dGF0ZShEYXRhLGFnZTIpDQpyaXNrMiA8LSB0YWJsZShkJGFnZTIsRGF0YSREZXByZXNzaW9uKQ0KYWRkbWFyZ2lucyhyaXNrMikNCmBgYA0KDQpgYGB7cn0NCnByb3AudGFibGUocmlzazIpDQpgYGANCg0KYGBge3J9DQpwcm9wLnRhYmxlKHJpc2syLCBtYXJnaW49MikNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChEYXRhLCBhZXMoYWdlMiwgZmlsbCA9IERlcHJlc3Npb24pKSArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2RvZGdlJykgKyBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpwZXJjZW50KGFmdGVyX3N0YXQoY291bnQgLyBzdW0oY291bnQpKSwgYWNjdXJhY3kgPSAwLjAxKSksIA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksIA0KICAgICAgICAgICAgdmp1c3QgPSAtMC41LCANCiAgICAgICAgICAgIGNvbG9yID0gJ2JsYWNrJykNCmBgYA0KDQpUYSBjaGlhIMSR4buZIHR14buVaSBj4bunYSBuaMOzbSBzaW5oIHZpw6puIGto4bqjbyBzw6F0IHRow6BuaCBoYWkgbmjDs20gZMaw4bubaSAyMiB0deG7lWkgdsOgIHRyw6puIDIyIHR14buVaS4NCg0KVOG7qyBi4bqjbmcgdOG6p24gc+G7kSB2w6AgxJHhu5MgdGjhu4sgduG7gSB2aeG7h2Mgc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gdsOgIMSR4buZIHR14buVaSB0YSB0aOG6pXk6DQoNCi0gVHJvbmcgc+G7kSAxODIgc2luaCB2acOqbiBraMO0bmcgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtOiBzaW5oIHZpw6puIGTGsOG7m2kgMjIgdHXhu5VpIGzDoCAxMTUgbmfGsOG7nWkgKGtob+G6o25nIDYzJSksIHNpbmggdmnDqm4gdHLDqm4gMjIgdHXhu5VpIGzDoCA2NyBuZ8aw4budaSAoa2hv4bqjbmcgMzclKS4gDQoNCi0gVHJvbmcgc+G7kSAxNzAgc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o206IHNpbmggdmnDqm4gZMaw4bubaSAyMiB0deG7lWkgbMOgIDg3IG5nxrDhu51pIChraG/huqNuZyA1MSUpLCBzaW5oIHZpw6puIHRyw6puIDIyIHR14buVaSBsw6AgODMgbmfGsOG7nWkgKGtob+G6o25nIDQ5JSkuDQoNClThu7cgbOG7hyBwaOG6p24gdHLEg20gbmjDs20gc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gZMaw4bubaSAyMiB0deG7lWkgbmhp4buBdSBoxqFuIG5ow7NtIG5nxrDhu51pIHRyw6puIDIyIHR14buVaS4gVOG7tyBs4buHIHBo4bqnbiB0csSDbSBuaMOzbSBzaW5oIHZpw6puIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gZMaw4bubaSAyMiB0deG7lWkgbmhp4buBdSBoxqFuIG5ow7NtIG5nxrDhu51pIHRyw6puIDIyIHR14buVaQ0KDQpOaMawIHbhuq15LCBnaeG7r2EgaGFpIG5ow7NtIG5nxrDhu51pIGPDsyBoYXkga2jDtG5nIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSDEkeG7gXUgY8OzIHPhu5EgbMaw4bujbmcgbmfGsOG7nWkgZMaw4bubaSAyMiB0deG7lWkgbmhp4buBdSBoxqFuIG5ow7NtIG5nxrDhu51pIHRyw6puIDIyIHR14buVaS4NCg0KKipSaXNrIHJhdGlvLyBPZGQgcmF0aW8qKg0KDQoqKipSaXNrIHJhdGlvKioqDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKHJpc2syKQ0KYGBgDQpU4bu3IGzhu4cgc2luaCB2acOqbiB0csOqbiAyMiB0deG7lWkgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIHThu7cgbOG7hyBzaW5oIHZpw6puIGTGsOG7m2kgMjIgdHXhu5VpIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSBsw6AgMS4yOCwgY2hvIHRo4bqleSB04bu3IGzhu4cgc2luaCB2acOqbiB0csOqbiAyMiB0deG7lWkgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIG5oaeG7gXUgaMahbiAyOCUgc28gduG7m2kgdOG7tyBs4buHIHNpbmggdmnDqm4gZMaw4bubaSAyMiB0deG7lWkgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtLg0KDQoqKipPZGQgcmF0aW8qKioNCg0KYGBge3J9DQpvZGRzcmF0aW8ocmlzazIsIHJldiA9ICdjJykNCmBgYA0KVOG7tyBs4buHIGdp4buvYSBuaOG7r25nIHNpbmggdmnDqm4gZMaw4bubaSAyMiB0deG7lWkgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gYuG6sW5nIDYxLjE4JSB04bu3IGzhu4cgZ2nhu69hIG5o4buvbmcgc2luaCB2acOqbiB0csOqbiAyMiB0deG7lWkgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20uDQoNCkdpw6EgdHLhu4sgdHLDqm4gY2hvIGJp4bq/dCB04bu3IGzhu4cgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gY+G7p2Egbmjhu69uZyBzaW5oIHZpw6puIGTGsOG7m2kgMjIgdHXhu5VpIMOtdCBoxqFuIDM4LjgyJSBzbyB24bubaSBuaOG7r25nIHNpbmggdmnDqm4gdHLDqm4gMjIgdHXhu5VpLg0KDQojIyMjICoqQmnhur9uIERlcHJlc3Npb24gKFNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtKSB2w6AgYmnhur9uICBBY2NvbW1vZGF0aW9uIChOxqFpIOG7nyBoaeG7h24gdOG6oWkpKioNCg0KYGBge3J9DQpyaXNrMyA8LSB0YWJsZShEYXRhJEFjY29tbW9kYXRpb24sIERhdGEkRGVwcmVzc2lvbikNCmFkZG1hcmdpbnMocmlzazMpDQpgYGANCg0KYGBge3J9DQpwcm9wLnRhYmxlKHJpc2szKQ0KYGBgDQoNCmBgYHtyfQ0KcHJvcC50YWJsZShyaXNrMywgbWFyZ2luPTIpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoRGF0YSwgYWVzKEFjY29tbW9kYXRpb24sIGZpbGwgPSBEZXByZXNzaW9uKSkgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdkb2RnZScpICsgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudChhZnRlcl9zdGF0KGNvdW50IC8gc3VtKGNvdW50KSksIGFjY3VyYWN5ID0gMC4wMSkpLCANCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLCANCiAgICAgICAgICAgIHZqdXN0ID0gLTAuNSwgDQogICAgICAgICAgICBjb2xvciA9ICdibGFjaycpDQpgYGANCg0KVOG7qyBi4bqjbmcgdOG6p24gc+G7kSB2w6AgxJHhu5MgdGjhu4sgduG7gSB2aeG7h2Mgc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gdsOgIG7GoWkg4bufIGhp4buHbiB04bqhaSB0YSB0aOG6pXk6DQoNCi0gVHJvbmcgc+G7kSAxODIgc2luaCB2acOqbiBraMO0bmcgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtOiBzaW5oIHZpw6puIOG7nyB24bubaSBnaWEgxJHDrG5oIGzDoCAxMDYgbmfGsOG7nWkgKGtob+G6o25nIDU4LjIlKSwgc2luaCB2acOqbiDhu58gcGjDsm5nIHRy4buNIHTGsCBuaMOibiBsw6AgNzYgbmfGsOG7nWkgKGtob+G6o25nIDQxLjglKS4NCg0KLSBUcm9uZyBz4buRIDE3MCBzaW5oIHZpw6puIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbTogc2luaCB2acOqbiDhu58gduG7m2kgZ2lhIMSRw6xuaCBsw6AgNDkgbmfGsOG7nWkgKGtob+G6o25nIDI4LjglKSwgc2luaCB2acOqbiDhu58gcGjDsm5nIHRy4buNIHTGsCBuaMOibiBsw6AgMTIxIG5nxrDhu51pIChraG/huqNuZyA3MS4yJSkuDQoNClThu7cgbOG7hyBwaOG6p24gdHLEg20gbmjDs20gc2luaCB2acOqbiDhu58gcGjDsm5nIHRy4buNIHTGsCBuaMOibiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gbmhp4buBdSBoxqFuIG5ow7NtIHNpbmggdmnDqm4g4bufIHbhu5tpIGdpYSDEkcOsbmggY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtLg0KDQoqKlJpcyBrcmF0aW8vIE9kZCByYXRpbyoqDQoNCioqKlJpc2sgcmF0aW8qKioNCg0KYGBge3J9DQpyaXNrcmF0aW8ocmlzazMpDQpgYGANClThu7cgbOG7hyBzaW5oIHZpw6puIOG7nyBwaMOybmcgdHLhu40gdMawIG5ow6JuIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSBzbyB24bubaSB04bu3IGzhu4cgc2luaCB2acOqbiDhu58gduG7m2kgZ2lhIMSRw6xuaCBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gbMOgIDEuOTQsIGNobyB0aOG6pXkgdOG7tyBs4buHIHNpbmggdmnDqm4g4bufIHBow7JuZyB0cuG7jSB0xrAgbmjDom4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIG5oaeG7gXUgaMahbiA5NCUgc28gduG7m2kgdOG7tyBs4buHIHNpbmggdmnDqm4g4bufIHbhu5tpIGdpYSDEkcOsbmggY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtLg0KDQoqKipPZGQgcmF0aW8qKioNCg0KYGBge3J9DQpvZGRzcmF0aW8ocmlzazMsIHJldiA9ICdjJykNCmBgYA0KVOG7tyBs4buHIGdp4buvYSBuaOG7r25nIHNpbmggdmnDqm4g4bufIHbhu5tpIGdpYSDEkcOsbmggY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gYuG6sW5nIDI5LjE4JSB04bu3IGzhu4cgZ2nhu69hIG5o4buvbmcgc2luaCB2acOqbiDhu58gbmjDoCB0cuG7jSB0xrAgbmjDom4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20uDQoNCkdpw6EgdHLhu4sgdHLDqm4gY2hvIGJp4bq/dCB04bu3IGzhu4cgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gY+G7p2Egbmjhu69uZyBzaW5oIHZpw6puIOG7nyB24bubaSBnaWEgxJHDrG5oIMOtdCBoxqFuIDcwLjgyJSBzbyB24bubaSBuaOG7r25nIHNpbmggdmnDqm4g4bufIGPDoWMgbmjDoCB0cuG7jSB0xrAgbmjDom4uDQoNCiMjIyMgKipCaeG6v24gRGVwcmVzc2lvbiAoU2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20pIHbDoCBiaeG6v24gSm9iIChDw7RuZyB2aeG7h2MgaGnhu4duIHThuqFpKSoqDQoNCmBgYHtyfQ0KcmlzazQgPC0gdGFibGUoRGF0YSRKb2IsIERhdGEkRGVwcmVzc2lvbikNCmFkZG1hcmdpbnMocmlzazQpDQpgYGANCg0KYGBge3J9DQpwcm9wLnRhYmxlKHJpc2s0KQ0KYGBgDQoNCmBgYHtyfQ0KcHJvcC50YWJsZShyaXNrNCwgbWFyZ2luPTIpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoRGF0YSwgYWVzKEpvYiwgZmlsbCA9IERlcHJlc3Npb24pKSArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2RvZGdlJykgKyBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpwZXJjZW50KGFmdGVyX3N0YXQoY291bnQgLyBzdW0oY291bnQpKSwgYWNjdXJhY3kgPSAwLjAxKSksIA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksIA0KICAgICAgICAgICAgdmp1c3QgPSAtMC41LCANCiAgICAgICAgICAgIGNvbG9yID0gJ2JsYWNrJykNCmBgYA0KDQpU4burIGLhuqNuZyB04bqnbiBz4buRIHbDoCDEkeG7kyB0aOG7iyB24buBIHZp4buHYyBzaW5oIHZpw6puIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSB2w6AgY8O0bmcgdmnhu4djIGhp4buHbiB04bqhaSB0YSB0aOG6pXk6DQoNCi0gVHJvbmcgc+G7kSAxODIgc2luaCB2acOqbiBraMO0bmcgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtOiBzaW5oIHZpw6puIGtow7RuZyBjw7MgY8O0bmcgdmnhu4djIGhp4buHbiB04bqhaSBsw6AgOTcgbmfGsOG7nWkgKGtob+G6o25nIDUzLjMlKSwgc2luaCB2acOqbiBjw7MgY8O0bmcgdmnhu4djIGhp4buHbiB04bqhaSBsw6AgODUgbmfGsOG7nWkgKGtob+G6o25nIDQ2LjclKS4NCg0KLSBUcm9uZyBz4buRIDE3MCBzaW5oIHZpw6puIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbTogc2luaCB2acOqbiBraMO0bmcgY8OzIGPDtG5nIHZp4buHYyBoaeG7h24gdOG6oWkgbMOgIDIyIG5nxrDhu51pIChraG/huqNuZyAxMyUpLCBzaW5oIHZpw6puIGPDsyBjw7RuZyB2aeG7h2MgaGnhu4duIHThuqFpIGzDoCAxNDggbmfGsOG7nWkgKGtob+G6o25nIDg3JSkuDQoNClThu7cgbOG7hyBwaOG6p24gdHLEg20gbmjDs20gc2luaCB2acOqbiBjw7MgY8O0bmcgdmnhu4djIGhp4buHbiB04bqhaSBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gbmhp4buBdSBoxqFuIG5ow7NtIHNpbmggdmnDqm4ga2jDtG5nIGPDsyBjw7RuZyB2aeG7h2MgaGnhu4duIHThuqFpIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbS4NCg0KKipSaXNrIHJhdGlvLyBPZGQgcmF0aW8qKg0KDQoqKipSaXNrIHJhdGlvKioqDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKHJpc2s0KQ0KYGBgDQpU4bu3IGzhu4cgc2luaCB2acOqbiBjw7MgY8O0bmcgdmnhu4djIGhp4buHbiB04bqhaSBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gc28gduG7m2kgdOG7tyBs4buHIHNpbmggdmnDqm4ga2jDtG5nIGPDsyBjw7RuZyB2aeG7h2MgaGnhu4duIHThuqFpIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSBsw6AgMy40NA0KDQoqKipPZGQgcmF0aW8qKioNCg0KYGBge3J9DQpvZGRzcmF0aW8ocmlzazQsIHJldiA9ICdjJykNCmBgYA0KVOG7tyBs4buHIGdp4buvYSBuaOG7r25nIHNpbmggdmnDqm4ga2jDtG5nIGPDsyBjw7RuZyB2aeG7h2MgaGnhu4duIHThuqFpIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSBzbyB24bubaSBraMO0bmcgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGLhurFuZyAxMy4xNyUgdOG7tyBs4buHIGdp4buvYSBuaOG7r25nIHNpbmggdmnDqm4gY8OzIGPDtG5nIHZp4buHYyBoaeG7h24gdOG6oWkgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20uDQoNCkdpw6EgdHLhu4sgdHLDqm4gY2hvIGJp4bq/dCB04bu3IGzhu4cgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gY+G7p2Egbmjhu69uZyBzaW5oIHZpw6puIGtow7RuZyBjw7MgY8O0bmcgdmnhu4djIGhp4buHbiB04bqhaSDDrXQgaMahbiA4Ni44MyUgc28gduG7m2kgbmjhu69uZyBzaW5oIHZpw6puIGPDsyBjw7RuZyB2aeG7h2MgaGnhu4duIHThuqFpLg0KDQojIyMjICoqQmnhur9uIERlcHJlc3Npb24gKFNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtKSB2w6AgYmnhur9uIEdQQSAgKMSQaeG7g20gc+G7kSB0w61jaCBsdeG7uSBoaeG7h24gdOG6oWkgdMOtbmggdGhlbyB0aGFuZyDEkWnhu4NtIDQpKioNCg0KVGEgY2hpYSDEkWnhu4NtIHPhu5EgdMOtY2ggbMWpeSBHUEEgY+G7p2EgbmjDs20gc2luaCB2acOqbiBraOG6o28gc8OhdCB0aMOgbmggMiBuaMOzbSBkxrDhu5tpIDMuMiDEkWnhu4NtIHbDoCB0csOqbiAzLjIgxJFp4buDbS4NCg0KYGBge3J9DQpHUEEyIDwtIGN1dChEYXRhJEdQQSwgYnJlYWtzID0gYygwLDMuMiw0KSwgbGFiZWxzID0gYygnZMaw4bubaSAzLjInLCAndHLDqm4gMy4yJykpDQpkIDwtIG11dGF0ZShEYXRhLEdQQTIpDQpyaXNrNSA8LSB0YWJsZShkJEdQQTIsRGF0YSREZXByZXNzaW9uKQ0KYWRkbWFyZ2lucyhyaXNrNSkNCmBgYA0KDQpgYGB7cn0NCnByb3AudGFibGUocmlzazUpDQpgYGANCg0KYGBge3J9DQpwcm9wLnRhYmxlKHJpc2s1LCBtYXJnaW49MikNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChEYXRhLCBhZXMoR1BBMiwgZmlsbCA9IERlcHJlc3Npb24pKSArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2RvZGdlJykgKyBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpwZXJjZW50KGFmdGVyX3N0YXQoY291bnQgLyBzdW0oY291bnQpKSwgYWNjdXJhY3kgPSAwLjAxKSksIA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksIA0KICAgICAgICAgICAgdmp1c3QgPSAtMC41LCANCiAgICAgICAgICAgIGNvbG9yID0gJ2JsYWNrJykNCmBgYA0KDQpUYSBjaGlhIMSRaeG7g20gc+G7kSB0w61jaCBsxal5IEdQQSBj4bunYSBuaMOzbSBzaW5oIHZpw6puIGto4bqjbyBzw6F0IHRow6BuaCAyIG5ow7NtIGTGsOG7m2kgMy4yIMSRaeG7g20gdsOgIHRyw6puIDMuMiDEkWnhu4NtLg0KDQpU4burIGLhuqNuZyB04bqnbiBz4buRIHbDoCDEkeG7kyB0aOG7iyB24buBIHZp4buHYyBzaW5oIHZpw6puIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSB2w6AgxJFp4buDbSBz4buRIHTDrWNoIGzFqXkgR1BBIHRhIHRo4bqleToNCg0KLSBUcm9uZyBz4buRIDE4MiBzaW5oIHZpw6puIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o206IHNpbmggdmnDqm4gZMaw4bubaSAzLjIgxJFp4buDbSBsw6AgMTA0IG5nxrDhu51pIChraG/huqNuZyA1NyUpLCBzaW5oIHZpw6puIHRyw6puIDMuMiDEkWnhu4NtIGzDoCA3OCBuZ8aw4budaSAoa2hv4bqjbmcgNDMlKS4NCg0KLSBUcm9uZyBz4buRIDE3MCBzaW5oIHZpw6puIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbTogc2luaCB2acOqbiBkxrDhu5tpIDMuMiDEkWnhu4NtIGzDoCA0NSBuZ8aw4budaSAoa2hv4bqjbmcgMjYuNSUpLCBzaW5oIHZpw6puIHRyw6puIDMuMiDEkWnhu4NtIGzDoCAxMjUgbmfGsOG7nWkgKGtob+G6o25nIDczLjUlKS4NCg0KVOG7tyBs4buHIHBo4bqnbiB0csSDbSBuaMOzbSBzaW5oIHZpw6puIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSB0csOqbiAzLjIgxJFp4buDbSBuaGnhu4F1IGjGoW4gbmjDs20gbmfGsOG7nWkgZMaw4bubaSAzLjIgxJFp4buDbS4gDQoNCioqUmlzayByYXRpby8gT2RkIHJhdGlvKioNCg0KKioqUmlzayByYXRpbyoqKg0KDQpgYGB7cn0NCnJpc2tyYXRpbyhyaXNrNSkNCmBgYA0KVOG7tyBs4buHIHNpbmggdmnDqm4gdHLDqm4gMy4yIMSRaeG7g20gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIHThu7cgbOG7hyBzaW5oIHZpw6puIGTGsOG7m2kgMy4yIMSRaeG7g20gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGzDoCAyLjA0Lg0KDQoqKipPZGQgcmF0aW8qKioNCg0KYGBge3J9DQpvZGRzcmF0aW8ocmlzazUsIHJldiA9ICdjJykNCmBgYA0KDQpU4bu3IGzhu4cgZ2nhu69hIG5o4buvbmcgc2luaCB2acOqbiBkxrDhu5tpIDMuMiDEkWnhu4NtIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSBzbyB24bubaSBraMO0bmcgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGLhurFuZyAyNy4xNCUgdOG7tyBs4buHIGdp4buvYSBuaOG7r25nIHNpbmggdmnDqm4gdHLDqm4gMy4yIMSRaeG7g20gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20uDQoNCkdpw6EgdHLhu4sgdHLDqm4gY2hvIGJp4bq/dCB04bu3IGzhu4cgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHNvIHbhu5tpIGtow7RuZyBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gY+G7p2Egbmjhu69uZyBzaW5oIHZpw6puIGTGsOG7m2kgMy4yIMSRaeG7g20gw610IGjGoW4gNzIuODYlIHNvIHbhu5tpIG5o4buvbmcgc2luaCB2acOqbiB0csOqbiAzLjIgxJFp4buDbS4NCg0KIyMjIyAqKkJp4bq/biBEZXByZXNzaW9uIChTaW5oIHZpw6puIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSkgdsOgIGJp4bq/biBFZHVjYXRpb24gIChUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4pKioNCg0KYGBge3J9DQpyaXNrNiA8LSB0YWJsZShEYXRhJEVkdWNhdGlvbiwgRGF0YSREZXByZXNzaW9uKQ0KYWRkbWFyZ2lucyhyaXNrNikNCmBgYA0KDQpgYGB7cn0NCnByb3AudGFibGUocmlzazYpDQpgYGANCg0KYGBge3J9DQpwcm9wLnRhYmxlKHJpc2s2LCBtYXJnaW49MikNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChEYXRhLCBhZXMoRWR1Y2F0aW9uLCBmaWxsID0gRGVwcmVzc2lvbikpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZG9kZ2UnKSArIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudCAvIHN1bShjb3VudCkpLCBhY2N1cmFjeSA9IDAuMDEpKSwgDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwgDQogICAgICAgICAgICB2anVzdCA9IC0wLjUsIA0KICAgICAgICAgICAgY29sb3IgPSAnYmxhY2snKQ0KYGBgDQoNClThu6sgYuG6o25nIHThuqduIHPhu5EgdsOgIMSR4buTIHRo4buLIHbhu4Egdmnhu4djIHNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHbDoCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdGEgdGjhuqV5Og0KDQotIFRyb25nIHPhu5EgMTgyIHNpbmggdmnDqm4ga2jDtG5nIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbTogc2luaCB2acOqbiBzaW5oIHZpw6puIMSRYW5nIGjhu41jIMSR4bqhaSBo4buNYyBsw6AgOTYgbmfGsOG7nWkgKGtob+G6o25nIDUyLjclKSwgc2luaCB2acOqbiDEkWFuZyBo4buNYyBj4bqlcCAyIGzDoCA3OCBuZ8aw4budaSAoa2hv4bqjbmcgNDIuOSUpLCBzaW5oIHZpw6puIMSRYW5nIGjhu41jIHRo4bqhYyBzxKkgbMOgIDggbmfGsOG7nWkgKGNoaeG6v20ga2hv4bqjbmcgNC40JSkuDQoNCi0gVHJvbmcgc+G7kSAxNzAgc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o206IHNpbmggdmnDqm4gc2luaCB2acOqbiDEkWFuZyBo4buNYyDEkeG6oWkgaOG7jWMgbMOgIDEwOCBuZ8aw4budaSAoa2hv4bqjbmcgNjMuNSUpLCBzaW5oIHZpw6puIMSRYW5nIGjhu41jIGPhuqVwIDIgbMOgIDQ2IG5nxrDhu51pIChraG/huqNuZyAyNy4xJSksIHNpbmggdmnDqm4gxJFhbmcgaOG7jWMgdGjhuqFjIHPEqSBsw6AgMTYgbmfGsOG7nWkgKGNoaeG6v20ga2hv4bqjbmcgOS40JSkuDQoNClThu7cgbOG7hyBwaOG6p24gdHLEg20gbmjDs20gc2luaCB2acOqbiDEkWFuZyBo4buNYyDEkeG6oWkgaOG7jWMgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGNoaeG6v20gdOG7tyBs4buHIGNhbyBuaOG6pXQgMzAuNjglIHRyw6puIHThu5VuZyBz4buRIHNpbmggdmnDqm4gdGhhbSBnaWEga2jhuqNvIHPDoXQuDQoNCiMjICoqVGjhu5FuZyBrw6ogc3V5IGRp4buFbiBjaG8gYmnhur9uIMSR4buLbmggdMOtbmgqKg0KDQojIyMgKipLaeG7g20gdHJhIHTDrW5oIMSR4buZYyBs4bqtcCBjaG8gMiBiaeG6v24gxJHhu4tuaCB0w61uaCoqDQoNCiMjIyMgKipCaeG6v24gRGVwcmVzc2lvbiB2w6AgYmnhur9uIEdlbmRlcioqDQoNCmBgYHtyfQ0KY2hpc3EudGVzdCh0YWJsZShEYXRhJEdlbmRlciwgRGF0YSREZXByZXNzaW9uKSkNCmBgYA0KR2nhuqMgdGh1eeG6v3Q6DQoNCi0gJEhfMCQ6IGJp4bq/biBEZXByZXNzaW9uIHbDoCBiaeG6v24gR2VuZGVyIMSR4buZYyBs4bqtcA0KDQotICRIXzEkOiBiaeG6v24gRGVwcmVzc2lvbiB2w6AgYmnhur9uIEdlbmRlciBraMO0bmcgxJHhu5ljIGzhuq1wDQoNCk3hu6ljIMO9IG5naMSpYTogJFxhbHBoYSQgPSAwLjA1DQoNClRhIGPDsyBwX3ZhbHVlID4gJFxhbHBoYSQsIHbhuq15IGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgJEhfMCQuDQoNClbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JSwgdmnhu4djIHNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIMSR4buZYyBs4bqtcCB24bubaSBnaeG7m2kgdMOtbmguDQoNCiMjIyMgKipCaeG6v24gRGVwcmVzc2lvbiB2w6AgYmnhur9uIEFnZSoqIA0KDQpgYGB7cn0NCmNoaXNxLnRlc3QocmlzazIpDQpgYGANCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCi0gJEhfMCQ6IGJp4bq/biBEZXByZXNzaW9uIHbDoCBiaeG6v24gQWdlIMSR4buZYyBs4bqtcA0KDQotICRIXzEkOiBiaeG6v24gRGVwcmVzc2lvbiB2w6AgYmnhur9uIEFnZSBraMO0bmcgxJHhu5ljIGzhuq1wDQoNCk3hu6ljIMO9IG5naMSpYTogJFxhbHBoYSQgPSAwLjA1DQoNClRhIGPDsyBwX3ZhbHVlIDwgJFxhbHBoYSQsIHbhuq15IGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF8wJC4NCg0KVuG7m2kgbeG7qWMgw70gbmdoxKlhIDUlLCB2aeG7h2Mgc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20ga2jDtG5nIMSR4buZYyBs4bqtcCB24bubaSDEkeG7mSB0deG7lWkuDQoNCiMjIyMgKipCaeG6v24gRGVwcmVzc2lvbiB2w6AgYmnhur9uIEFjY29tbW9kYXRpb24qKg0KDQpgYGB7cn0NCmNoaXNxLnRlc3QodGFibGUoRGF0YSRBY2NvbW1vZGF0aW9uLCBEYXRhJERlcHJlc3Npb24pKQ0KYGBgDQpHaeG6oyB0aHV54bq/dDoNCg0KLSAkSF8wJDogYmnhur9uIERlcHJlc3Npb24gdsOgIGJp4bq/biBBY2NvbW1vZGF0aW9uIMSR4buZYyBs4bqtcA0KDQotICRIXzEkOiBiaeG6v24gRGVwcmVzc2lvbiB2w6AgYmnhur9uIEFjY29tbW9kYXRpb24ga2jDtG5nIMSR4buZYyBs4bqtcA0KDQpN4bupYyDDvSBuZ2jEqWE6ICRcYWxwaGEkID0gMC4wNQ0KDQpUYSBjw7MgcF92YWx1ZSA8ICRcYWxwaGEkLCB24bqteSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfMCQuDQoNClbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JSwgdmnhu4djIHNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGtow7RuZyDEkeG7mWMgbOG6rXAgduG7m2kgYmnhur9uIG7GoWkg4bufIGhp4buHbiB04bqhaS4NCg0KIyMjIyAqKkJp4bq/biBEZXByZXNzaW9uIHbDoCBiaeG6v24gSm9iKioNCg0KYGBge3J9DQpjaGlzcS50ZXN0KHRhYmxlKERhdGEkSm9iLCBEYXRhJERlcHJlc3Npb24pKQ0KYGBgDQpHaeG6oyB0aHV54bq/dDoNCg0KLSAkSF8wJDogYmnhur9uIERlcHJlc3Npb24gdsOgIGJp4bq/biBKb2IgxJHhu5ljIGzhuq1wDQoNCi0gJEhfMSQ6IGJp4bq/biBEZXByZXNzaW9uIHbDoCBiaeG6v24gSm9iIGtow7RuZyDEkeG7mWMgbOG6rXANCg0KTeG7qWMgw70gbmdoxKlhOiAkXGFscGhhJCA9IDAuMDUNCg0KVGEgY8OzIHBfdmFsdWUgPCAkXGFscGhhJCwgduG6rXkgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkLg0KDQpW4bubaSBt4bupYyDDvSBuZ2jEqWEgNSUsIHZp4buHYyBzaW5oIHZpw6puIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSBraMO0bmcgxJHhu5ljIGzhuq1wIHbhu5tpIGJp4bq/biBjw7RuZyB2aeG7h2MgaGnhu4duIHThuqFpLg0KDQojIyMjICoqQmnhur9uIERlcHJlc3Npb24gdsOgIGJp4bq/biBHUEEqKiANCg0KYGBge3J9DQpjaGlzcS50ZXN0KHJpc2s1KQ0KYGBgDQpHaeG6oyB0aHV54bq/dDoNCg0KLSAkSF8wJDogYmnhur9uIERlcHJlc3Npb24gdsOgIGJp4bq/biBHUEEgxJHhu5ljIGzhuq1wDQoNCi0gJEhfMSQ6IGJp4bq/biBEZXByZXNzaW9uIHbDoCBiaeG6v24gR1BBIGtow7RuZyDEkeG7mWMgbOG6rXANCg0KTeG7qWMgw70gbmdoxKlhOiAkXGFscGhhJCA9IDAuMDUNCg0KVGEgY8OzIHBfdmFsdWUgPCAkXGFscGhhJCwgduG6rXkgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkLg0KDQpW4bubaSBt4bupYyDDvSBuZ2jEqWEgNSUsIHZp4buHYyBzaW5oIHZpw6puIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSBraMO0bmcgxJHhu5ljIGzhuq1wIHbhu5tpIMSRaeG7g20gc+G7kSB0w61jaCBsdeG7uSBoaeG7h24gdOG6oWkgdMOtbmggdGhlbyB0aGFuZyDEkWnhu4NtIDQuDQoNCiMjIyMgKipCaeG6v24gRGVwcmVzc2lvbiB2w6AgYmnhur9uIEVkdWNhdGlvbioqIA0KDQpgYGB7cn0NCmNoaXNxLnRlc3QodGFibGUoRGF0YSREZXByZXNzaW9uLCBEYXRhJEVkdWNhdGlvbiApKQ0KYGBgDQpHaeG6oyB0aHV54bq/dDoNCg0KLSAkSF8wJDogYmnhur9uIERlcHJlc3Npb24gdsOgIGJp4bq/biBFZHVjYXRpb24gxJHhu5ljIGzhuq1wDQoNCi0gJEhfMSQ6IGJp4bq/biBEZXByZXNzaW9uIHbDoCBiaeG6v24gRWR1Y2F0aW9uIGtow7RuZyDEkeG7mWMgbOG6rXANCg0KTeG7qWMgw70gbmdoxKlhOiAkXGFscGhhJCA9IDAuMDUNCg0KVGEgY8OzIHBfdmFsdWUgPCAkXGFscGhhJCwg4bqteSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfMCQuDQoNClbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JSwgdmnhu4djIHNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGtow7RuZyDEkeG7mWMgbOG6rXAgduG7m2kgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuLg0KDQojIyMgKipLaG/huqNuZyDGsOG7m2MgbMaw4bujbmcgY2hvIHThu7cgbOG7hyoqDQoNCiMjIyMgKirGr+G7m2MgbMaw4bujbmcgdOG7tyBs4buHIG5nxrDhu51pIGPDsyB2w6Aga2jDtG5nIGPDsyBiaeG7g3UgaGnhu4duIHRy4bqnbSBj4bqjbSoqDQoNCmBgYHtyfQ0KcCA8LSBEYXRhW0RhdGEkRGVwcmVzc2lvbiA9PSAnWWVzJyxdDQpwcm9wLnRlc3QobGVuZ3RoKHAkRGVwcmVzc2lvbiksIGxlbmd0aChEYXRhJERlcHJlc3Npb24pKQ0KYGBgDQoNCmBgYHtyfQ0KcCA8LSBEYXRhW0RhdGEkRGVwcmVzc2lvbiA9PSAnTm8nLF0NCnByb3AudGVzdChsZW5ndGgocCREZXByZXNzaW9uKSwgbGVuZ3RoKERhdGEkRGVwcmVzc2lvbikpDQpgYGANCg0KVuG7m2kgxJHhu5kgdGluIGPhuq15IDk1JSwgdGEgY8OzIHThu7cgbOG7hyBuZ8aw4budaSBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20gc28gduG7m2kgdOG7lW5nIHRo4buDIG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgNDMlIMSR4bq/biA1My42JS4gSGF5IG7Ds2kgY8OhY2gga2jDoWMsIHThu7cgbOG7hyBuZ8aw4budaSBraMO0bmcgY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHPhur0gY2hp4bq/bSBraG/huqNuZyB04burIDQ2LjQlIMSR4bq/biA1NyUuDQoNCiMjIyMgKirGr+G7m2MgbMaw4bujbmcgdOG7tyBs4buHIG5nxrDhu51pIGPDsyB2w6Aga2jDtG5nIGPDsyBjw7RuZyB2aeG7h2MgaGnhu4duIHThuqFpKioNCg0KYGBge3J9DQpwIDwtIERhdGFbRGF0YSRKb2IgPT0gJ1llcycsXQ0KcHJvcC50ZXN0KGxlbmd0aChwJEpvYiksIGxlbmd0aChEYXRhJEpvYikpDQpgYGANCg0KYGBge3J9DQpwIDwtIERhdGFbRGF0YSRKb2IgPT0gJ05vJyxdDQpwcm9wLnRlc3QobGVuZ3RoKHAkSm9iKSwgbGVuZ3RoKERhdGEkSm9iKSkNCmBgYA0KVuG7m2kgxJHhu5kgdGluIGPhuq15IDk1JSwgdGEgY8OzIHThu7cgbOG7hyBuZ8aw4budaSBjw7MgY8O0bmcgdmnhu4djIGhp4buHbiB04bqhaSBzbyB24bubaSB04buVbmcgdGjhu4MgbuG6sW0gdHJvbmcga2hv4bqjbmcgdOG7qyA2MSUgxJHhur9uIDcxJS4gSGF5IG7Ds2kgY8OhY2gga2jDoWMsIHThu7cgbOG7hyBuZ8aw4budaSBraMO0bmcgY8OzIGPDtG5nIHZp4buHYyBoaeG7h24gdOG6oWkgc+G6vSBjaGnhur9tIGtob+G6o25nIHThu6sgMjklIMSR4bq/biAzOSUuDQoNCiMjIyMgKirGr+G7m2MgbMaw4bujbmcgdOG7tyBs4buHIG5nxrDhu51pIOG7nyB24bubaSBnaWEgxJHDrG5oIHbDoCDhu58gY8OhYyBwaMOybmcgdHLhu40gdMawIG5ow6JuKioNCg0KYGBge3J9DQpwIDwtIERhdGFbRGF0YSRBY2NvbW1vZGF0aW9uID09ICdIb21lICh3aXRoIHBhcmVudHMpJyxdDQpwcm9wLnRlc3QobGVuZ3RoKHAkQWNjb21tb2RhdGlvbiksIGxlbmd0aChEYXRhJEFjY29tbW9kYXRpb24pKQ0KYGBgDQoNCmBgYHtyfQ0KcCA8LSBEYXRhW0RhdGEkQWNjb21tb2RhdGlvbiA9PSAnUHJpdmF0ZSByZW50ZWQgYWNjb21tb2RhdGlvbicsXQ0KcHJvcC50ZXN0KGxlbmd0aChwJEFjY29tbW9kYXRpb24pLCBsZW5ndGgoRGF0YSRBY2NvbW1vZGF0aW9uKSkNCmBgYA0KDQpW4bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlLCB0YSBjw7MgdOG7tyBs4buHIG5nxrDhu51pIOG7nyB24bubaSBnaWEgxJHDrG5oIHNvIHbhu5tpIHThu5VuZyB0aOG7gyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDM4LjglIMSR4bq/biA0OSUuIEhheSBuw7NpIGPDoWNoIGtow6FjLCB04bu3IGzhu4cgbmfGsOG7nWkg4bufIGPDoWMgcGjDsm5nIHRy4buNIHTGsCBuaMOibiBz4bq9IGNoaeG6v20ga2hv4bqjbmcgdOG7qyA1MSUgxJHhur9uIDYxLjIlLg0KDQojICoqTcO0IGjDrG5oIGjhu5NpIHF1eSoqDQoNClThu6sga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggY2hpIGLDrG5oIHBoxrDGoW5nIHbhu4EgdMOtbmggxJHhu5ljIGzhuq1wIGPhu6dhIGPDoWMgY+G6t3AgYmnhur9uLCB0YSB0aOG6pXkgdmnhu4djIHNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIHBo4bulIHRodeG7mWMgdsOgbyDEkeG7mSB0deG7lWksIGPDtG5nIHZp4buHYyBoaeG7h24gdOG6oWksIG7GoWkg4bufIGhp4buHbiB04bqhaSwgxJFp4buDbSBz4buRIHTDrWNoIGx14bu5LCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4uIFbDrCB24bqteSB0w7RpIHPhur0gdGnhur9uIGjDoG5oIGjhu5NpIHF1eSBiaeG6v24gcGjhu6UgdGh14buZYyBEZXByZXNzaW9uICh2aeG7h2Mgc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB0cuG6p20gY+G6o20pIHbhu5tpIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCB0xrDGoW5nIOG7qW5nIGfhu5NtIEFnZSwgSm9iLCBBY2NvbW1vZGF0aW9uLCBHUEEsIEVkdWNhdGlvbi4NCg0KIyMgKipNw7QgaMOsbmggbG9naXQqKg0KDQpgYGB7cn0NCm1oMSA8LSBnbG0oZmFjdG9yKERlcHJlc3Npb24sIGxldmVscyA9IGMoIk5vIiwgIlllcyIpKSB+IEFnZSArIEpvYiArIEFjY29tbW9kYXRpb24gKyBHUEEgKyBFZHVjYXRpb24sIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAnbG9naXQnKSwgZGF0YSA9IERhdGEpDQpzdW1tYXJ5KG1oMSkNCmBgYA0KDQpDw6FjIGJp4bq/biBBZ2UsIEVkdWNhdGlvbkhpZ2ggU2Nob29sLCBFZHVjYXRpb25NYXN0ZXIgY8OzIGdpw6EgdHLhu4sgUF92YWx1ZSBy4bqldCBs4bubbiwgcF92YWx1ZSA+IDAuMDUgbsOqbiBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB0cm9uZyBtw7QgaMOsbmggbsOgeS4gQuG7jyBjw6FjIGJp4bq/biBBZ2UgdsOgIEVkdWNhdGlvbg0KDQpgYGB7cn0NCk1IbG9naXQgPC0gZ2xtKGZhY3RvcihEZXByZXNzaW9uLCBsZXZlbHMgPSBjKCJObyIsICJZZXMiKSkgfiBKb2IgKyBBY2NvbW1vZGF0aW9uICsgR1BBLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gJ2xvZ2l0JyksIGRhdGEgPSBEYXRhKQ0Kc3VtbWFyeShNSGxvZ2l0KQ0KYGBgDQoNCmBgYHtyfQ0KbHJfdGVzdCA8LSBhbm92YShNSGxvZ2l0LCB0ZXN0ID0gIkNoaXNxIikNCnBfdmFsdWUgPC0gbHJfdGVzdCRQclsyXSANCnBfdmFsdWUNCmBgYA0KDQpLaeG7g20gxJHhu4tuaCBz4buxIHBow7kgaMahcCBj4bunYSBtw7QgaMOsbmgNCg0KLSBHaeG6oyB0aHV54bq/dCAqKipbTWF0aCBQcm9jZXNzaW5nIEVycm9yXSoqKjogTcO0IGjDrG5oIGtow7RuZyBwaMO5IGjhu6NwDQoNClbhu5tpIFAtdmFsdWUgPSBQcm9iKExSKSA8IDAgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICoqKltNYXRoIFByb2Nlc3NpbmcgRXJyb3JdKioqIG7Dqm4gbcO0IGjDrG5oIHBow7kgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3UuDQoNClRyb25nIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgY2hvIGJp4bq/biBEZXByZXNzaW9uIHRyw6puLCB0YSBuaOG6rW4gdGjhuqV5IHRyb25nIEFnZSwgSm9iLCBBY2NvbW1vZGF0aW9uLCBHUEEsIEVkdWNhdGlvbiwgY2jhu4kgY8OzIGJhIGJp4bq/biBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGzDoCBKb2IsIEFjY29tbW9kYXRpb24sIEdQQS4NCg0KKioqTWEgdHLhuq1uIG5o4bqnbSBs4bqrbioqKg0KDQpgYGB7cn0NCmEgPC0gcHJlZGljdChNSGxvZ2l0LCB0eXBlID0gInJlc3BvbnNlIikNCmIgPC0gaWZlbHNlKGEgPiAwLjUsICIxIiwgIjAiKQ0KYyA8LWZhY3RvcihiLCBsZXZlbHMgPSBjKCIwIiwiMSIpKQ0KZCA8LSBmYWN0b3IoRGF0YSREZXByZXNzaW9uLCBsYWJlbHMgPSBjKCIwIiwgIjEiKSkNCmNvbmZ1c2lvbk1hdHJpeCh0YWJsZShjLCBkKSkNCmBgYA0KDQojIyAqKk3DtCBow6xuaCBwcm9iaXQqKg0KDQpgYGB7cn0NCm1oMSA8LSBnbG0oZmFjdG9yKERlcHJlc3Npb24sIGxldmVscyA9IGMoIk5vIiwgIlllcyIpKSB+IEFnZSArIEpvYiArIEFjY29tbW9kYXRpb24gKyBHUEEgKyBFZHVjYXRpb24sIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAncHJvYml0JyksIGRhdGEgPSBEYXRhKQ0Kc3VtbWFyeShtaDEpDQpgYGANCg0KQ8OhYyBiaeG6v24gQWdlLCBFZHVjYXRpb25IaWdoIFNjaG9vbCwgRWR1Y2F0aW9uTWFzdGVyIGPDsyBnacOhIHRy4buLIFBfdmFsdWUgcuG6pXQgbOG7m24sIHBfdmFsdWUgPiAwLjA1IG7Dqm4ga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogdHJvbmcgbcO0IGjDrG5oIG7DoHkuIELhu48gY8OhYyBiaeG6v24gQWdlIHbDoCBFZHVjYXRpb24NCg0KYGBge3J9DQpNSHByb2JpdCA8LSBnbG0oZmFjdG9yKERlcHJlc3Npb24sIGxldmVscyA9IGMoIk5vIiwgIlllcyIpKSB+IEpvYiArIEFjY29tbW9kYXRpb24gKyBHUEEsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAncHJvYml0JyksIGRhdGEgPSBEYXRhKQ0Kc3VtbWFyeShNSHByb2JpdCkNCmBgYA0KDQpgYGB7cn0NCmxyX3Rlc3QgPC0gYW5vdmEoTUhwcm9iaXQsIHRlc3QgPSAiQ2hpc3EiKQ0KcF92YWx1ZSA8LSBscl90ZXN0JFByWzJdIA0KcF92YWx1ZQ0KYGBgDQoNCktp4buDbSDEkeG7i25oIHPhu7EgcGjDuSBoxqFwIGPhu6dhIG3DtCBow6xuaA0KDQotIEdp4bqjIHRodXnhur90ICoqKltNYXRoIFByb2Nlc3NpbmcgRXJyb3JdKioqOiBNw7QgaMOsbmgga2jDtG5nIHBow7kgaOG7o3ANCg0KVuG7m2kgUC12YWx1ZSA9IFByb2IoTFIpIDwgMCBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgKioqW01hdGggUHJvY2Vzc2luZyBFcnJvcl0qKiogbsOqbiBtw7QgaMOsbmggcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdS4NCg0KVHJvbmcgbcO0IGjDrG5oIHByb2JpdCBjaG8gYmnhur9uIERlcHJlc3Npb24gdHLDqm4sIHRhIG5o4bqtbiB0aOG6pXkgdHJvbmcgQWdlLCBKb2IsIEFjY29tbW9kYXRpb24sIEdQQSwgRWR1Y2F0aW9uLCBjaOG7iSBjw7MgYmEgYmnhur9uIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbMOgIEpvYiwgQWNjb21tb2RhdGlvbiwgR1BBLg0KDQoqKipNYSB0cuG6rW4gbmjhuqdtIGzhuqtuKioqDQoNCmBgYHtyfQ0KYSA8LSBwcmVkaWN0KE1IcHJvYml0LCB0eXBlID0gInJlc3BvbnNlIikNCmIgPC0gaWZlbHNlKGEgPiAwLjUsICIxIiwgIjAiKQ0KYyA8LWZhY3RvcihiLCBsZXZlbHMgPSBjKCIwIiwiMSIpKQ0KZCA8LSBmYWN0b3IoRGF0YSREZXByZXNzaW9uLCBsYWJlbHMgPSBjKCIwIiwgIjEiKSkNCmNvbmZ1c2lvbk1hdHJpeCh0YWJsZShjLCBkKSkNCmBgYA0KDQojIyAqKk3DtCBow6xuaCBjbG9nbG9nKioNCg0KYGBge3J9DQptaDEgPC0gZ2xtKGZhY3RvcihEZXByZXNzaW9uLCBsZXZlbHMgPSBjKCJObyIsICJZZXMiKSkgfiBBZ2UgKyBKb2IgKyBBY2NvbW1vZGF0aW9uICsgR1BBICsgRWR1Y2F0aW9uLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gJ2Nsb2dsb2cnKSwgZGF0YSA9IERhdGEpDQpzdW1tYXJ5KG1oMSkNCmBgYA0KDQpDw6FjIGJp4bq/biBBZ2UsIEVkdWNhdGlvbkhpZ2ggU2Nob29sLCBFZHVjYXRpb25NYXN0ZXIgY8OzIGdpw6EgdHLhu4sgUF92YWx1ZSBy4bqldCBs4bubbiwgcF92YWx1ZSA+IDAuMDUgbsOqbiBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB0cm9uZyBtw7QgaMOsbmggbsOgeS4gQuG7jyBjw6FjIGJp4bq/biBBZ2UgdsOgIEVkdWNhdGlvbg0KDQpgYGB7cn0NCk1IY2xvZ2xvZyA8LSBnbG0oZmFjdG9yKERlcHJlc3Npb24sIGxldmVscyA9IGMoIk5vIiwgIlllcyIpKSB+IEpvYiArIEFjY29tbW9kYXRpb24gKyBHUEEsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAnY2xvZ2xvZycpLCBkYXRhID0gRGF0YSkNCnN1bW1hcnkoTUhjbG9nbG9nKQ0KYGBgDQoNCmBgYHtyfQ0KbHJfdGVzdCA8LSBhbm92YShNSGNsb2dsb2csIHRlc3QgPSAiQ2hpc3EiKQ0KcF92YWx1ZSA8LSBscl90ZXN0JFByWzJdIA0KcF92YWx1ZQ0KYGBgDQoNCktp4buDbSDEkeG7i25oIHPhu7EgcGjDuSBoxqFwIGPhu6dhIG3DtCBow6xuaA0KDQotIEdp4bqjIHRodXnhur90ICoqKltNYXRoIFByb2Nlc3NpbmcgRXJyb3JdKioqOiBNw7QgaMOsbmgga2jDtG5nIHBow7kgaOG7o3ANCg0KVuG7m2kgUC12YWx1ZSA9IFByb2IoTFIpIDwgMCBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgKioqW01hdGggUHJvY2Vzc2luZyBFcnJvcl0qKiogbsOqbiBtw7QgaMOsbmggcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdS4NCg0KVHJvbmcgbcO0IGjDrG5oIGNsb2dsb2cgY2hvIGJp4bq/biBEZXByZXNzaW9uIHRyw6puLCB0YSBuaOG6rW4gdGjhuqV5IHRyb25nIEFnZSwgSm9iLCBBY2NvbW1vZGF0aW9uLCBHUEEsIEVkdWNhdGlvbiwgY2jhu4kgY8OzIGJhIGJp4bq/biBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGzDoCBKb2IsIEFjY29tbW9kYXRpb24sIEdQQS4NCg0KKioqTWEgdHLhuq1uIG5o4bqnbSBs4bqrbioqKg0KDQpgYGB7cn0NCmEgPC0gcHJlZGljdChNSGNsb2dsb2csIHR5cGUgPSAicmVzcG9uc2UiKQ0KYiA8LSBpZmVsc2UoYSA+IDAuNSwgIjEiLCAiMCIpDQpjIDwtZmFjdG9yKGIsIGxldmVscyA9IGMoIjAiLCIxIikpDQpkIDwtIGZhY3RvcihEYXRhJERlcHJlc3Npb24sIGxhYmVscyA9IGMoIjAiLCAiMSIpKQ0KY29uZnVzaW9uTWF0cml4KHRhYmxlKGMsIGQpKQ0KYGBgDQoNCiMjICoqQ8OhYyBjaOG7iSB0acOqdSDEkcOhbmggZ2nDoSBtw7QgaMOsbmgqKg0KDQojIyMgKipDaOG7iSBz4buRIEFJQyoqDQoNCk3DtCBow6xuaCBsb2dpdDogQUlDID0gMzYxLjEyDQoNCk3DtCBow6xuaCBwcm9iaXQ6IEFJQyA9IDM2MC44OQ0KDQpNw7QgaMOsbmggY2xvZ2xvZzogQUlDID0gMzU4LjYxDQoNCiMjIyAqKkRldmlhbmNlKioNCg0KTcO0IEjDrG5oIGxvZ2l0OiAzNTMuMTINCg0KTcO0IGjDrG5oIHByb2JpdDogMzUyLjg5DQoNCk3DtCBow6xuaCBjbG9nbG9nOiAzNTAuNjENCg0KIyMjICoqQ2jhu4kgc+G7kSBCcmllciBTY29yZSoqDQoNCmBgYHtyfQ0KYnMxIDwtIEJyaWVyU2NvcmUoTUhsb2dpdCkNCmJzMiA8LSBCcmllclNjb3JlKE1IcHJvYml0KQ0KYnMzIDwtIEJyaWVyU2NvcmUoTUhjbG9nbG9nKQ0KQnJpZXJTY29yZSA8LSBjKGJzMSxiczIsYnMzKQ0KQnJpZXJTY29yZQ0KYGBgDQoNCk3DtCBIw6xuaCBsb2dpdDogMC4xNjY0NDgzDQoNCk3DtCBow6xuaCBwcm9iaXQ6IDAuMTY2NDk0Mg0KDQpNw7QgaMOsbmggY2xvZ2xvZzogMC4xNjUwNTIxDQoNCiMjIyAqKk1hIHRy4bqtbiBuaOG6p20gbOG6q24qKg0KDQpU4burIGvhur90IHF14bqjIGNo4bqheSBtYSB0cuG6rW4gbmjhuqdtIGzhuqtuIGPhu6dhIGPDoWMgbcO0IGjhu5NpIGjhu5NpIHF1eSDhu58gdHLDqm4gdGEgY8OzIGvhur90IHF14bqjIG5oxrAgc2F1Og0KDQrEkOG7mSBjaMOtbmggeMOhYyBj4bunYSBtw7QgaMOsbmggbG9naXQgbMOgIDAuNzQ3Mg0KDQrEkOG7mSBjaMOtbmggeMOhYyBj4bunYSBtw7QgaMOsbmggcHJvYml0IGzDoCAwLjc0NzINCg0KxJDhu5kgY2jDrW5oIHjDoWMgY+G7p2EgbcO0IGjDrG5oIGNsb2dsb2cgbMOgIDAuNzU1Nw0KDQojICoqKkvhur90IGx14bqtbioqKg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KQUlDIDwtIGMoMzYxLjEyLCAzNjAuODksIDM1OC42MSkNCkRldmlhbmNlIDwtIGMoIDM1My4xMiwzNTIuODksMzUwLjYxICkNCmNvbmZ1c2lvbk1hdHJpeCA8LSBjKDAuNzQ3MiwwLjc0NzIsMC43NTU3KQ0KTW9IaW5oIDwtIGMoJ2xvZ2l0JywncHJvYml0JywnY2xvZ2xvZycpDQpEYW5oR2lhTUggPC0gZGF0YS5mcmFtZShNb0hpbmgsQUlDLERldmlhbmNlLEJyaWVyU2NvcmUsY29uZnVzaW9uTWF0cml4KQ0KYGBgDQoNCmBgYHtyfQ0KRGFuaEdpYU1IDQpgYGANCg0KVOG7qyBr4bq/dCBxdeG6oyBjw6FjIGNo4buJIHPhu5EgxJHDoW5oIGdpw6EgbcO0IGjDrG5oIHRhIGPDsyBr4bq/dCBsdeG6rW46IGNo4buJIHPhu5EgQUlDID0gMzU4LjYxLCBEZXZpYW5jZSA9IDM1MC42MSwgY2jhu4kgc+G7kSBCcmllciA9IDAuMTY1MDUyMSBj4bunYSBtw7QgaMOsbmggY2xvZ2xvZyBsw6Agbmjhu48gbmjhuqV0IHRyb25nIGJhIG3DtCBow6xuaCB2w6AgY29uZnVzaW9uTWF0cml4ID0gMC43NTU3IGzDoCBs4bubbiBuaOG6pXQgdHJvbmcgYmEgbcO0IGjDrG5oLiBEbyBtw7QgaMOsbmggY2xvZ2xvZyBsw6AgxJHhuqF0IG5oaeG7gXUgdGnDqnUgY2jDrSBuaOG6pXQgbsOqbiB0YSBjw7MgdGjhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyBtw7QgaMOsbmggY2xvZ2xvZyBsw6AgcGjDuSBo4bujcCBuaOG6pXQgdHJvbmcgMyBtw7QgaMOsbmggxJHhu4MgbcO0IHThuqMgc+G7sSDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIHnhur91IHThu5EgxJHhur9uIHRy4bqnbSBj4bqjbSDhu58gc2luaCB2acOqbi4NCg0KJGNsb2dsb2dbXHBpKHgpXSA9IC00LjcyNzMgKyAxLjY1MzdKb2JfWWVzICsgMC45MTk3QWNjb21tb2RhdGlvbl9Qcml2YXRlICsgMC44MzI3R1BBJA0KDQpL4bq/dCBxdeG6oyB04burIG3DtCBow6xuaCBo4buTaSBxdXkgY2xvZ2xvZyB0YSB0aOG6pXkgdmnhu4djIHNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdHLhuqdtIGPhuqNtIGPDsyBjaOG7i3Ug4bqjbmggaMaw4bufbmcgYuG7n2kgY8O0bmcgdmnhu4djIGhp4buHbiB04bqhaSwgbsahaSDhu58gaGnhu4duIHThuqFpIHbDoCDEkWnhu4NtIHPhu5EgdMOtY2ggbMWpeSBHUEEgLg0KDQotIEjhu4cgc+G7kSAkLTQuNzI3MyQ6IMSQw6J5IGzDoCBo4buHIHPhu5EgY2jhurduIChpbnRlcmNlcHQpLCB04bupYyBsw6AgZ2nDoSB0cuG7iyBj4bunYSAkY2xvZ2xvZ1tccGkoeCldJCBraGkgdOG6pXQgY+G6oyBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgKEpvYiwgQWNjb21tb2RhdGlvbiwgR1BBKSDEkeG7gXUgYuG6sW5nIDAuDQoNCi0gJEpvYiQgKHZp4buHYyBsw6BtKTogSOG7hyBz4buRIDEuNjUzNyBjaG8gYmnhur9uIG7DoHkgY8OzIG5naMSpYSBsw6AgbuG6v3UgbeG7mXQgc2luaCB2acOqbiBjw7Mgdmnhu4djIGzDoG0sIHjDoWMgc3XhuqV0IHPhu5Egc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB04bqnbSBj4bqjbSBz4bq9IHTEg25nIGzDqm4gMS42NTM3IMSRxqFuIHbhu4ssIGdp4bqjIMSR4buLbmggY8OhYyB54bq/dSB04buRIGtow6FjIGtow7RuZyDEkeG7lWkuDQoNCi0gJEFjY29tbW9kYXRpb24kIChjaOG7lyDhu58pOiBI4buHIHPhu5EgMC45MTk3IGNobyBiaeG6v24gbsOgeSBjw7MgbmdoxKlhIGzDoCBu4bq/dSBt4buZdCBzaW5oIHZpw6puIOG7nyBjw6FjIHBow7JuZyB0cuG7jSB0xrAgbmjDom4sIHjDoWMgc3XhuqV0IHPhu5Egc2luaCB2acOqbiBjw7MgYmnhu4N1IGhp4buHbiB04bqnbSBj4bqjbSBz4bq9IHTEg25nIGzDqm4gMC45MTk3IMSRxqFuIHbhu4ssIGdp4bqjIMSR4buLbmggY8OhYyB54bq/dSB04buRIGtow6FjIGtow7RuZyDEkeG7lWkuDQoNCi0gJEdQQSQgKMSRaeG7g20gdMOtY2ggbMWpeSB0cnVuZyBiw6xuaCk6IEjhu4cgc+G7kSAwLjgzMjcgY2hvIGJp4bq/biBuw6B5IGPDsyBuZ2jEqWEgbMOgIG7hur91IG3hu5l0IHNpbmggdmnDqm4gY8OzIMSRaeG7g20gdHJ1bmcgYsOsbmggY2FvLCB4w6FjIHN14bqldCBz4buRIHNpbmggdmnDqm4gY8OzIGJp4buDdSBoaeG7h24gdOG6p20gY+G6o20gc+G6vSB0xINuZyBsw6puIDAuODMyNyDEkcahbiB24buLLCBnaeG6oyDEkeG7i25oIGPDoWMgeeG6v3UgdOG7kSBraMOhYyBraMO0bmcgxJHhu5VpLg0KDQoNCg0K