library(ggplot2)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(DT)
## Warning: package 'DT' was built under R version 4.3.3
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.3
library(epitools)

A. Giới thiệu dữ liệu

1. Nguồn thu thập dữ liệu

Dữ liệu được sử dụng nghiên cứu trong bài tập này mang tên “Student Mental Health Analysis During Online Learning”, tạm dịch: Phân tích sức khỏe tâm thần của học sinh trong quá trình học trực tuyến

Dữ liệu trong bộ này chủ yếu được thu thập thông qua các cuộc khảo sát, với các phản hồi từ sinh viên về tình trạng sức khỏe tâm thần của họ trong thời đại học trực tuyến. Khảo sát tập trung vào nhiều khía cạnh tâm lý và hành vi khác nhau khi chịu ảnh hưởng của giáo dục từ xa.

2. Đọc dữ liệu

Dữ liệu được tải từ trang Kaggle là file csv, vì thế ta tiến hành đọc dữ liệu vào với đuôi csv.

Ta gán bộ dữ liệu với tên smt - viết tắt của Student Mental Health

library(csv)
smt <- read.csv("D:/UFM/2025- Kì 2/Phân tích dữ liệu định tính - Trần Mạnh Tường/Data/Student Mental Health Analysis During Online Learning.csv", header = T)
datatable(smt)

3. Các thông tin tổng quan về dữ liệu

3.1 Tổng số biến và số quan sát

Bộ dữ liệu “Student Mental Health Analysis During Online Learning” thu thập thông tin từ 1.000 học sinh và sinh viên với mục tiêu đánh giá tình trạng sức khỏe tâm thần của họ trong bối cảnh học trực tuyến kéo dài

Với bộ dữ liệu trên, kết quả có :

  • 1000 quan sát - đại diện cho 1000 học sinh sinh viên (HSSV)

  • 10 biến - đại diện cho các biến nhân khẩu học

dim(smt)
## [1] 1000   10

3.2 Dữ liệu là thông tin định tính hay định lượng

Ta sẽ sử dụng lệnh is.data.frame để biết dữ liệu có mang thông tin định tính hay không, kết quả trả về TRUE hoặc FALSE.

  • Nếu kết quả là TRUE - bộ dữ liệu mang thông tin định tính

  • Nếu kết quả là FALSE - bộ dữ liệu mang thông tin định lượng

Với bộ dữ liệu smt, kết quả trả về là TRUE, đồng nghĩa là dữ liệu mang thông tin định tính

is.data.frame(smt)
## [1] TRUE

3.3 Tên cụ thể và ý nghĩa của các biến

10 biến nhân khẩu học được đưa ra để khảo sát 1000 HSSV bao gồm:

names(smt)
##  [1] "Name"                        "Gender"                     
##  [3] "Age"                         "Education.Level"            
##  [5] "Screen.Time"                 "Sleep.Duration"             
##  [7] "Physical.Activity"           "Stress.Level"               
##  [9] "Anxious.Before.Exams"        "Academic.Performance.Change"

Tên và ý nghĩa cụ thể như sau:

  • Name: Tên của các HHSV

  • Gender: Giới tính, bao gồm (Male - nam/ Female - nữ/ Other - giới tính khác)

  • Age: Độ tuổi (được tính theo năm)

  • Education Level: Trình độ học vấn, kết quả sẽ bao gồm nhóm học sinh phổ thông, nhóm sinh viên đại họchọc viên sau đại học:

    • Class 8 to 12 - Học sinh từ lớp 8, 9, 10, 11 và 12

    • BA - Bachelor of Arts (cử nhân nghệ thuật)

    • BSc - Bachelor of Science (cử nhân khoa học)

    • BTech - Bachelor of Technology (cử nhân công nghệ)

    • MA - Master of Arts (Thạc sĩ nghệ thuật)

    • MSc - Master of Science (Thạc sĩ khoa học)

    • MTech - Master of Technology (Thạc sĩ công nghệ)

  • Screen Time: Thời gian sử dụng màn hình trung bình mỗi ngày trong quá trình học trực tuyến (giờ/ngày)

  • Sleep Duration: Thời gian ngủ trung bình hàng ngày

  • Physical Activity: Thời gian tập thể dục hàng tuần

  • Stress Level: Mức độ căng thẳng

    • Low - Mức độ căng thẳng thấp

    • Medium - Mức độ căng thẳng trung bình (bình thường)

    • High - Mức độ căng thẳng cao

  • Anxious Before Exams: HSSV có cảm thấy lo lắng trước kỳ thi không

    • Yes - HSSV có cảm thấy lo lắng trước kỳ thi

    • No - HSSV không cảm thấy lo lắng trước kỳ thi

  • Academic Performance Change: Tự đánh giá sự thay đổi trong kết quả học tập

    • Declined - kết quả học tập giảm

    • Improved - kết quả học tập có cải thiện

    • Same - kết quả học tập không có gì thay đổi

4. Kiểm tra cấu trúc tổng quát dữ liệu

Ta kiểm tra cấu trúc tổng quát của dữ liệu như sau:

str(smt)
## 'data.frame':    1000 obs. of  10 variables:
##  $ Name                       : chr  "Aarav" "Meera" "Ishaan" "Aditya" ...
##  $ Gender                     : chr  "Male" "Female" "Male" "Male" ...
##  $ Age                        : int  15 25 20 20 17 23 22 25 20 16 ...
##  $ Education.Level            : chr  "Class 8" "MSc" "BTech" "BA" ...
##  $ Screen.Time                : num  7.1 3.3 9.5 10.8 2.8 8.6 3.6 7 4.8 8.9 ...
##  $ Sleep.Duration             : num  8.9 5 5.4 5.6 5.4 8.4 6.6 4.7 5 8.4 ...
##  $ Physical.Activity          : num  9.3 0.2 6.2 5.5 3.1 0.1 0.5 4.5 7.9 7.8 ...
##  $ Stress.Level               : chr  "Medium" "Medium" "Medium" "High" ...
##  $ Anxious.Before.Exams       : chr  "No" "No" "No" "Yes" ...
##  $ Academic.Performance.Change: chr  "Same" "Same" "Same" "Same" ...

Các biến định tính có thể phân tích bao gồm:

  • Gender

  • Education.Level

  • Stress.Level

  • Anxious.Before.Exams

  • Academic.Performance.Change

Các biến định lượng có thể phân tích bao gồm:

  • Age

  • Screen.Time

  • Sleep.Duration

  • Physical.Activity

Ở bài tập này, ta sẽ chủ đích phân tích các biến định tính


B. Phân tích Mô tả 1 biến định tính

1. Thống kê tần số và tần suất

1.1 Biến Gender

Trong 1000 HSSV, thì sẽ bao gồm bao nhiêu người là nữ, bao nhiêu người là nam, bao nhiêu người là giới tính khác?, ta có thể coi kết quả thống kê sau:

table(smt$Gender)
## 
## Female   Male  Other 
##    475    475     50
table(smt$Gender)/sum(table(smt$Gender))
## 
## Female   Male  Other 
##  0.475  0.475  0.050

Từ kết quả ta thấy, dữ liệu được thu thập từ 475 người là nữ, 475 người là nam50 người thuộc giới tính khác. Phần trăm khảo sát giữa 2 giới tính nam và nữ là cân bằng nhau (47,5% cho mỗi bên). Còn với giới tính khác chỉ chiếm một phần nhỏ 5%.

Vậy ta thấy có sự cân bằng về giới tính giữa nam và nữ, ngoài ra còn có 1 nhóm nhỏ giới tính khác, lựa chọn này thể hiện tính toàn diện và tôn trọng sự đa dạng giới trong khảo sát.

Ta trực quan hóa kết quả thành biểu đồ như sau:

smt %>% group_by(Gender) %>% summarise(n = n()) %>%
  ggplot(aes(x = Gender, y = n))+
  geom_col(fill='pink')+
  labs(x="Giới tính", y = "Số lượng")+
  labs(caption = "Biểu đồ phân bổ giới tính của người khảo sát")+
  geom_text(aes(label =n), vjust=0, color = 'black')

1.2 Biến Education Level

Và trong 1000 người khảo sát, sẽ bao gồm cả học sinh, sinh viên đại học lẫn học viên sau đại học, kết quả như sau:

table(smt$Education.Level)
## 
##       BA      BSc    BTech Class 10 Class 11 Class 12  Class 8  Class 9 
##       62       85       84       87       88       47       50       87 
##       MA      MSc    MTech 
##      129      138      143
table(smt$Education.Level)/sum(table(smt$Education.Level))
## 
##       BA      BSc    BTech Class 10 Class 11 Class 12  Class 8  Class 9 
##    0.062    0.085    0.084    0.087    0.088    0.047    0.050    0.087 
##       MA      MSc    MTech 
##    0.129    0.138    0.143

Dựa theo kết quả:

  • Nhóm học viên sau đại học chiếm tỷ trọng cao nhất, với 143 người theo học MTech, 138 người theo học MSc và 129 người học MA, cho thấy rằng hơn 40% người tham gia khảo sát đang theo học ở cấp độ thạc sĩ

  • nhóm đại học, các chuyên ngành phổ biến như BSc (85 người), BTech (84 người) và BA (62 người) cũng có số lượng tương đối đồng đều, phần trăm số lượng các sinh viên đại học tham gia khảo sát chỉ dưới 10% với mỗi ngành

  • Nhóm học sinh là nhóm có số lượng tham gia khảo sát ít nhất, chỉ từ 4 - 8% cho mỗi khối

Nhìn chung, sức khỏe tâm thần khi học trực tuyến là vấn đề được quan tâm không chỉ ở bậc đại học mà còn ngay từ bậc trung học. Phân bố học vấn cho thấy khảo sát này bao phủ nhiều cấp học, tạo tiền đề thuận lợi để phân tích ảnh hưởng của học trực tuyến đến sức khỏe tâm thần ở các nhóm tuổi và trình độ khác nhau.

Ta trực quan hóa kết quả thành biểu đồ như sau:

smt %>% group_by(Education.Level) %>% summarise(n = n()) %>%
  ggplot(aes(x = Education.Level, y = n))+
  geom_col(fill='lightblue')+
  labs(x="Trình độ học vấn của HSSV", y = "Số lượng")+
  labs(caption = "Biểu đồ phân bổ trình độ học vấn của người khảo sát")+
  geom_text(aes(label =n), vjust=0, color = 'black')

1.3 Biến Stress Level

Khảo sát mức độ căng thằng của các HSSV như sau:

table(smt$Stress.Level)
## 
##   High    Low Medium 
##    181    327    492
table(smt$Stress.Level)/sum(table(smt$Stress.Level))
## 
##   High    Low Medium 
##  0.181  0.327  0.492

Kết quả thống kê mức độ căng thẳng như sau:

  • 492 người (49,2%) cho biết họ đang ở mức căng thẳng trung bình, cho thấy đây là trạng thái phổ biến nhất trong môi trường học tập trực tuyến

  • 181 người (18,1%) ghi nhận mức độ căng thẳng cao, phản ánh một bộ phận không nhỏ HSSV đang chịu áp lực đáng kể, có nguy cơ ảnh hưởng đến sức khỏe tâm thần nếu không được can thiệp kịp thời

  • 327 người (32,7%) báo cáo mức độ căng thẳng thấp

Phân bố này cho thấy rằng hơn 2/3 số người học trực tuyến đang trải qua mức độ căng thẳng từ trung bình đến cao, đặt ra một vấn đề đáng quan ngại về tác động tiêu cực của hình thức học online đối với sức khỏe tâm thần.

Ta trực quan hóa kết quả thành biểu đồ như sau:

smt %>% group_by(Stress.Level) %>% summarise(n = n()) %>%
  ggplot(aes(x = '', y = n,fill = Stress.Level)) +
    geom_col(color = 'black') +
    coord_polar('y') +
    geom_text(aes(x = 1.3, label = n),position = position_stack(vjust = .5)) +
    labs(caption = "Biểu đồ tròn về số lượng người của các mức độ căng thẳng") +
    theme_void()

1.4 Biến Anxious Before Exams

Kết quả về mức độ lo lắng trước kỳ thi của 1000 người như sau:

table(smt$Anxious.Before.Exams)
## 
##  No Yes 
## 487 513
table(smt$Anxious.Before.Exams)/sum(table(smt$Anxious.Before.Exams))
## 
##    No   Yes 
## 0.487 0.513

Trong số 1.000 người tham gia khảo sát:

  • 513 người (51,3%) cho biết họ cảm thấy lo lắng trước kỳ thi

  • Còn lại 487 người (48,7%) không gặp phải tình trạng này

Tỷ lệ này phản ánh một thực trạng phổ biến rằng lo âu trước kỳ thi là hiện tượng thường gặp ở hơn một nửa số người học, đặc biệt trong bối cảnh học tập trực tuyến – nơi người học có thể gặp khó khăn trong việc tiếp cận tài liệu, tương tác với giảng viên, hoặc thiếu kỹ năng quản lý thời gian. Sự chênh lệch không quá lớn giữa hai nhóm cho thấy vấn đề lo âu có tính phổ quát

Ta trực quan hóa kết quả thành biểu đồ như sau:

smt %>% group_by(Anxious.Before.Exams) %>% summarise(n = n()) %>%
  mutate(perc = round(n / sum(n) * 100, 1)) %>%
  ggplot(aes(x = "", y = perc, fill = Anxious.Before.Exams)) +
    geom_col(color = 'black') +
    coord_polar("y") +
    geom_text(aes(x = 1.3, label = paste0(perc, "%")), 
              position = position_stack(vjust = 0.5)) +
    labs(caption = "Biểu đồ tròn về tỷ lệ số người cảm thấy lo lắng trước kỳ thi") +
    theme_void()

1.5 Biến Academic Performance Change

Kết quả tự đánh giá về sự thay đổi trong kết quả học tập của 1000 người là:

table(smt$Academic.Performance.Change)
## 
## Declined Improved     Same 
##      298      303      399
table(smt$Academic.Performance.Change)/sum(table(smt$Academic.Performance.Change))
## 
## Declined Improved     Same 
##    0.298    0.303    0.399

Kết quả thống kê cho thấy trong 1.000 người được khảo sát về sự thay đổi trong kết quả học tập khi học trực tuyến, có 39,9% cho biết kết quả học tập của họ giữ nguyên, trong khi 30,3% cảm thấy đã cải thiện29,8% cho rằng kết quả học tập của họ giảm sút

Tỷ lệ người học cảm thấy giữ vững kết quả học tập là cao nhất, cho thấy một bộ phận đáng kể có khả năng thích nghi tốt với hình thức học trực tuyến. Tuy nhiên, tỷ lệ giữa hai nhóm “Cải thiện” và “Giảm sút” là khá cân bằng, điều này phản ánh rõ sự phân hóa trong trải nghiệm học trực tuyến

Trong khi một số người tận dụng tốt thời gian linh hoạt và công nghệ để học hiệu quả hơn, thì ngược lại, không ít người lại gặp khó khăn trong việc tự học, thiếu tương tác và giảm động lực học tập. Sự phân bố này còn phụ thuộc vào khả năng thích nghi, điều kiện học tập cá nhân và các yếu tố tâm lý đi kèm như căng thẳng hay lo âu.

Ta trực quan hóa kết quả thành biểu đồ như sau:

smt %>% group_by(Academic.Performance.Change) %>% summarise(n = n()) %>%
  mutate(perc = round(n / sum(n) * 100, 1)) %>%
  ggplot(aes(x = "", y = perc, fill = Academic.Performance.Change)) +
    geom_col(color = 'black') +
    coord_polar("y") +
    geom_text(aes(x = 1.3, label = paste0(perc, "%")), 
              position = position_stack(vjust = 0.5)) +
    labs(caption = "Biểu đồ tròn về tỷ lệ thay đổi trong kết quả học tập") +
    theme_void()

2. Ước lượng khoảng và Kiểm định giả thuyết

2.1 Xác định hạng mục Quan tâm

Sau khi đã thống kê tần số và tần suất của tất cả các biến định tính, ta sẽ tiến hành ước lượng khoảng cho 1 trong số các biến này. Ta chọn 2 hạng mục quan tâm từ 2 biến bao gồm:

  • Hạng mục “High” của biến Stress Level (Mức độ căng thẳng cao)

  • Hạng mục “Yes” của biến Anxious Before Exams (Có sự lo lắng trước kỳ thi)

2.2 Hạng mục “High” của biến Stress Level

Giả sử ta muốn kiểm định xem tỷ lệ người có mức độ căng thẳng cao có bằng 50% hay không trong tổng thể HSSV

  • Giả thuyết không H0: Tỷ lệ sinh viên có mức căng thẳng cao bằng 50%

  • Giả thuyết đối H1: Tỷ lệ sinh viên có mức căng thẳng cao khác 50%

prop.test(sum(smt$Stress.Level == "High"), nrow(smt), conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(smt$Stress.Level == "High") out of nrow(smt), null probability 0.5
## X-squared = 405.77, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.1578994 0.2065931
## sample estimates:
##     p 
## 0.181

Kết quả kiểm định như sau:

  • Giá trị X-squared = 405.77 là rất lớn, cho thấy chênh lệch giữa tỷ lệ quan sát và giả định là đáng kể.

  • Giá trị p-value < 2.2e-16 là rất nhỏ, nhỏ hơn 5%, vì thế ta bác bỏ H0, có bằng chứng thống kê mạnh cho thấy tỷ lệ thực tế khác 50%.

  • Khoảng tin cậy 95% cho tỷ lệ sinh viên có mức stress cao là từ 15.79% đến 20.66%

  • Tỷ lệ mẫu ước lượng là 18,1%, tức là trong 1.000 sinh viên thì có 18.1% là thuộc nhóm stress ở mức cao

Thông qua kiểm định ước lượng khoảng với độ tin cậy 95%, ta thu được khoảng tin cậy cho tỷ lệ này là từ 15.79% đến 20.66%. Điều này cho thấy tỷ lệ sinh viên bị căng thẳng cao nằm trong khoảng từ 15.79% đến 20.66%**

Phần lớn sinh viên không rơi vào nhóm căng thẳng nghiêm trọng, tuy nhiên khoảng 1/5 sinh viên có mức độ căng thẳng cao — một tỷ lệ không nhỏ, đặc biệt trong bối cảnh học tập trực tuyến vốn tiềm ẩn nhiều yếu tố gây áp lực về tinh thần.

2.3 Hạng mục Yes của biến Anxious Before Exams

Đặt giả thuyết kiểm định:

  • Giả thuyết không H0: Tỷ lệ sinh viên lo lắng trước kỳ thi là bằng 50%

  • Giả thuyết đối H1: Tỷ lệ sinh viên lo lắng trước kỳ thi khác 50%

prop.test(sum(smt$Anxious.Before.Exams == "Yes"), nrow(smt), conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(smt$Anxious.Before.Exams == "Yes") out of nrow(smt), null probability 0.5
## X-squared = 0.625, df = 1, p-value = 0.4292
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4815314 0.5443675
## sample estimates:
##     p 
## 0.513

Kết quả kiểm định như sau:

  • Giá trị p-value = 0.4292 → Lớn hơn 5%, không đủ bằng chứng để bác bỏ giả thuyết H0

  • Khoảng tin cậy 95%: [0.4815 ; 0.5444], Với độ tin cậy 95%, tỷ lệ sinh viên lo lắng trước kỳ thi nằm trong khoảng từ 48.15% đến 54.44%.

  • Tỷ lệ mẫu là 0.513, có nghĩa có 51.3% sinh viên trả lời có, tức là lo lắng trước kỳ thi

Kết quả kiểm định cho thấy không có sự khác biệt có ý nghĩa thống kê giữa tỷ lệ sinh viên lo lắng trước kỳ thi và mốc giả định 50%. Với tỷ lệ mẫu là 51.3% và khoảng tin cậy khá hẹp, ta có thể kết luận rằng tỷ lệ sinh viên lo lắng trước kỳ thi là xấp xỉ 50%

Dù mức độ lo lắng không chênh lệch đáng kể với giả định trung lập, điều này vẫn cho thấy rằng cứ mỗi 2 sinh viên thì có 1 người cảm thấy lo lắng trước kỳ thi, đây là một tỉ lệ đáng quan tâm khi xem xét sức khỏe tâm thần trong môi trường học trực tuyến.


C. Mối quan hệ giữa 2 biến định tính

Ta chọn 2 cặp biến định tính để phân tích bao gồm:

  • Cặp biến Gender và Stress Level

  • Cặp biến Gender và Anxious Before Exams

1. Bảng tần số và tần suất chéo

1.1 Cặp biến Gender và Stress Level

Đầu tiên, ta sẽ lập bảng tần số 2 chiều cho 2 biến Gender và Stress Level. Việc lập bảng tần số sẽ giúp ta thấy rõ mức độ căng thẳng trong từng giới tính.

Tần số, Tần số biên

table(smt$Gender, smt$Stress.Level)
##         
##          High Low Medium
##   Female   85 157    233
##   Male     81 155    239
##   Other    15  15     20

Nếu trong bảng tần số trên mà ta tính tổng theo hàng và theo cột thì ta gọi các tổng này là tần số biên - Marginal). Ta sẽ thực hiện như sau:

addmargins(table(smt$Gender, smt$Stress.Level))
##         
##          High  Low Medium  Sum
##   Female   85  157    233  475
##   Male     81  155    239  475
##   Other    15   15     20   50
##   Sum     181  327    492 1000

Dựa trên các con số hiển thị, ta có một số nhận xét như sau:

  • Về số người có mức độ căng thẳng cao, nhóm nữ có 85 người, nam có 81 người, và giới tính khác là 15 người

  • Đối với mức độ căng thẳng trung bình, nữ có 233 người, nam 239 người, và giới tính khác là 20 người

  • Với mức độ căng thẳng thấp, nữ và nam có số lượng gần bằng nhau lần lượt là 157 và 155, trong khi giới tính khác là 15 người.

  • Các con số này cho thấy mức độ căng thẳng là khá đều giữa nam và nữ, trong khi nhóm giới tính khác tuy ít người hơn nhưng vẫn có số lượng đáng kể ở tất cả các mức độ.

  • Bảng tần số biên được bổ sung thêm dòng và cột “Sum”, tức tổng theo hàng và cột, giúp ta hiểu tổng số người ở từng nhóm hoặc từng mức độ stress, rất hữu ích để tính tỷ lệ phần trăm và so sánh tổng thể.

Tần suất, Tần suất biên

prop.table(table(smt$Gender, smt$Stress.Level))
##         
##           High   Low Medium
##   Female 0.085 0.157  0.233
##   Male   0.081 0.155  0.239
##   Other  0.015 0.015  0.020
addmargins(prop.table(table(smt$Gender, smt$Stress.Level)))
##         
##           High   Low Medium   Sum
##   Female 0.085 0.157  0.233 0.475
##   Male   0.081 0.155  0.239 0.475
##   Other  0.015 0.015  0.020 0.050
##   Sum    0.181 0.327  0.492 1.000

Khi xét đến tần suất, tức tỷ lệ phần trăm trong mỗi nhóm giới tính, có thể thấy rằng:

  • Tỷ lệ người có mức độ căng thẳng cao trong nhóm giới tính khác là đáng chú ý nhất, chiếm 30% (15/50), trong khi tỷ lệ này ở nhóm nữ là khoảng 17.9% (85/475) và ở nhóm nam là 17.1% (81/475)

  • Tương tự,mức độ căng thẳng trung bình chiếm khoảng 49% ở cả nam và nữ, và 40% ở giới tính khác

  • Mức độ căng thẳng thấp chiếm khoảng 32-33% ở nam và nữ, trong khi ở giới tính khác là 30%.

  • Các tỷ lệ này cho thấy rằng mặc dù số lượng người thuộc nhóm giới tính khác ít hơn, họ lại có xu hướng đối mặt với mức độ căng thẳng cao hơn so với các nhóm còn lại. Điều này là dấu hiệu đáng quan tâm trong việc thiết kế các biện pháp hỗ trợ tâm lý phù hợp cho từng nhóm giới tính.

Trực quan hóa

Ta có thể trực quan hóa kết quả thành biểu đồ cột đôi như sau:

ggplot(smt %>% group_by(Gender, Stress.Level) %>% summarise(count = n()) %>% ungroup(), aes(x = Gender, y = count, fill = Stress.Level)) +
  geom_col(position = position_dodge()) +
  geom_text(aes(label = count), position = position_dodge(width = 0.9), vjust = -0.5) +
  labs(title = "Mức độ căng thẳng trong mỗi giới tính", y = "Số lượng", x = "Giới tính")
## `summarise()` has grouped output by 'Gender'. You can override using the
## `.groups` argument.

1.2 Cặp biến Gender và Anxious Before Exams

Tiếp theo, ta sẽ lập bảng tần số và tần suất 2 chiều cho 2 biến Gender và Anxious Before Exams. Liệu rằng trong mỗi giới tính thì sẽ có bao nhiêu người cảm thấy căng thẳng trước kỳ thi

Tần số, Tần số biên

table(smt$Gender, smt$Anxious.Before.Exams)
##         
##           No Yes
##   Female 220 255
##   Male   239 236
##   Other   28  22
addmargins(table(smt$Gender, smt$Anxious.Before.Exams))
##         
##            No  Yes  Sum
##   Female  220  255  475
##   Male    239  236  475
##   Other    28   22   50
##   Sum     487  513 1000

Từ bảng tần số và tần số biên, ta có một số nhận xét sau:

  • Trong tổng số 475 nữ, có 255 người cảm thấy lo lắng trước kỳ thi, cao hơn một chút so với 220 người còn lại không cảm thấy lo lắng. Điều này cho thấy hơn một nửa số nữ sinh trong khảo sát có biểu hiện bất an hoặc áp lực trước các kỳ kiểm tra

  • Cũng với tổng số 475 nam, số người cảm thấy căng thẳng trước kỳ thi là 236 người, gần như ngang bằng với 239 người không cảm thấy lo lắng. Tỷ lệ này khá cân bằng và thấp hơn một chút so với nhóm nữ, cho thấy nam giới có xu hướng ít lo lắng hơn

  • Trong 50 người thuộc giới tính khác, có 22 người cảm thấy lo lắng trước kỳ thi, trong khi 28 người không lo lắng. So với nam và nữ, nhóm này có tỷ lệ lo lắng thấp nhất

Tần suất, Tần suất biên

prop.table(table(smt$Gender, smt$Anxious.Before.Exams))
##         
##             No   Yes
##   Female 0.220 0.255
##   Male   0.239 0.236
##   Other  0.028 0.022
addmargins(prop.table(table(smt$Gender, smt$Anxious.Before.Exams)))
##         
##             No   Yes   Sum
##   Female 0.220 0.255 0.475
##   Male   0.239 0.236 0.475
##   Other  0.028 0.022 0.050
##   Sum    0.487 0.513 1.000
  • Nữ giới là nhóm có tỷ lệ lo lắng trước kỳ thi cao nhất trong toàn bộ mẫu, chiếm 25.5% mẫu khảo sát, cao hơn so với nam giới (23.6%) và giới tính khác (2.2%). Điều này cho thấy nữ giới dễ bị căng thẳng hơn trước kỳ thi.

  • Ngược lại, nam giới lại có tỷ lệ không lo lắng cao nhất, chiếm 23.9% mẫu, nhỉnh hơn nữ (22.0%) và giới tính khác (2.8%). Điều này cho thấy nam giới có xu hướng ổn định tâm lý hơn một chút trong kỳ thi.

  • Tổng tỷ lệ những người cảm thấy lo lắng trước kỳ thi chiếm hơn nửa mẫu khảo sát (51.3%), cho thấy đây là một vấn đề phổ biến và cần được quan tâm trong toàn bộ sinh viên.

Trực quan hóa

Ta có thể trực quan hóa kết quả thành biểu đồ cột đôi như sau:

ggplot(smt %>% group_by(Gender, Anxious.Before.Exams) %>% summarise(count = n()) %>% mutate(total = sum(count), pct = count / total) %>% ungroup(), aes(x = Gender, y = pct, fill = Anxious.Before.Exams)) +
  geom_col(position = position_dodge()) +
  geom_text(aes(label = scales::percent(pct, accuracy = 0.1)),
            position = position_dodge(width = 0.9), vjust = -0.3, size = 3) +
  scale_y_continuous(labels = scales::percent_format()) +
  labs(title = "Tỷ lệ lo lắng trước kỳ thi ở các giới tính",
       y = "Tỷ lệ",
       x = "Giới tính")
## `summarise()` has grouped output by 'Gender'. You can override using the
## `.groups` argument.

2. Kiểm định Chi-bình phương

2.1 Cặp biến Gender và Stress Level

Ta thực hiện kiểm định Chi-squared như sau:

chisq.test(table(smt$Gender, smt$Stress.Level))
## 
##  Pearson's Chi-squared test
## 
## data:  table(smt$Gender, smt$Stress.Level)
## X-squared = 5.3235, df = 4, p-value = 0.2557

Giả thuyết kiểm định:

  • Giả thuyết không H0: Không có mối liên hệ giữa giới tính và mức độ căng thẳng, hai biến độc lập nhau.

  • Giả thuyết đối H1: Có mối liên hệ giữa giới tính và mức độ căng thẳng, hai biến không độc lập.

Kết quả kiểm định:

  • X-squared = 5.3235

  • Số bậc tự do df = 4

  • Giá trị p-value = 0.2557

Kết luận:p-value = 0.2557 > 0.05, không đủ bằng chứng để bác bỏ giả thuyết h0. Do đó, không có mối liên hệ có ý nghĩa thống kê giữa giới tính và mức độ căng thẳng.

Trong khảo sát này, giới tính không ảnh hưởng đáng kể đến mức độ căng thẳng của người tham gia. Có thể các yếu tố khác (không phải giới tính) mới là nguyên nhân ảnh hưởng đến mức độ stress.

2.2 Cặp biến Gender và Anxious Before Exams

Tương tự cặp biến trên, ta cũng có kết quả kiểm định Chi-squared của Gender và Anxious Before Exams như sau:

chisq.test(table(smt$Gender, smt$Anxious.Before.Exams))
## 
##  Pearson's Chi-squared test
## 
## data:  table(smt$Gender, smt$Anxious.Before.Exams)
## X-squared = 2.6437, df = 2, p-value = 0.2666

Giả thuyết kiểm định:

  • Giả thuyết không H0: Không có mối liên hệ giữa giới tính và cảm giác lo lắng trước kỳ thi.

  • Giả thuyết đối H1: Có mối liên hệ giữa giới tính và cảm giác lo lắng trước kỳ thi.

Kết quả kiểm định:

  • X-squared = 2.6437

  • Số bậc tự do df = 2

  • Giá trị p-value = 0.2666

Kết luận:p-value = 0.2666 > 0.05, không đủ bằng chứng để bác bỏ giả thuyết h0. Vì thế, giới tính và sự lo lắng trước kỳ thi không có mối liên hệ có ý nghĩa thống kê

Cả 2 kiểm định đều cho ra p-value > 0.05, nên không có bằng chứng thống kê để kết luận rằng giới tính ảnh hưởng đến mức độ stress hay lo lắng trước kỳ thi trong mẫu dữ liệu này. Điều này có thể gợi ý rằng các chương trình giảm căng thẳng hay hỗ trợ tâm lý nên hướng đến tất cả sinh viên, không phân biệt giới tính.

3. Tỷ số nguy cơ Relative Risk

3.1 Cặp biến Gender và Stress level

Trong thống kê, Relative Risk (RR) chỉ được định nghĩa rõ ràng cho bảng 2x2, nên vì thế ta chỉ xét giới tính Nam/ Nữmức Stress Cao/ Thấp. Ta tiến hành lọc lại dữ liệu như sau:

Gen_Stress <- subset(smt, Gender %in% c("Male", "Female") & Stress.Level %in% c("High", "Low"))

table(Gen_Stress$Gender, Gen_Stress$Stress.Level)
##         
##          High Low
##   Female   85 157
##   Male     81 155
RelRisk(table(Gen_Stress$Gender, Gen_Stress$Stress.Level))
## [1] 1.023365

Sau khi lọc dữ liệu để chỉ xét hai nhóm giới tính Nam và Nữhai mức độ căng thẳng Cao và Thấp, kết quả tính toán Relative Risk cho thấy:

  • Hàm RelRisk() trả về giá trị 1.023365, đây là tỷ số nguy cơ của nữ giới so với nam giới về việc trải qua mức độ căng thẳng cao.

  • Giá trị RR = 1.023 nghĩa là nữ giới có nguy cơ bị căng thẳng cao cao hơn nam giới khoảng 2.3% trong bối cảnh học tập trực tuyến

  • Tuy nhiên, giá trị này rất gần 1, cho thấy sự khác biệt về nguy cơ giữa hai giới không đáng kể. Nói cách khác, không có bằng chứng rõ ràng cho thấy giới tính là yếu tố quyết định mức độ căng thẳng trong mẫu khảo sát này.

  • Điều này phù hợp với kết quả kiểm định Chi-squared trước đó, vốn cũng cho thấy không có mối liên hệ có ý nghĩa giữa giới tính và mức độ căng thẳng.

Mặc dù nữ giới có chỉ số RR nhỉnh hơn một chút, nhưng vì sự chênh lệch nhỏ, ta không nên kết luận vội rằng nữ giới chịu căng thẳng cao hơn. Kết quả này có thể cho thấy rằng cả nam và nữ đều chịu ảnh hưởng gần như tương đương từ học trực tuyến.

riskratio(table(Gen_Stress$Gender, Gen_Stress$Stress.Level))
## $data
##         
##          High Low Total
##   Female   85 157   242
##   Male     81 155   236
##   Total   166 312   478
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate     lower    upper
##   Female 1.000000        NA       NA
##   Male   1.012361 0.8882669 1.153791
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male    0.8547156    0.9234815  0.8539248
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Ta có thể giải thích kết quả như sau:

Tỷ số nguy cơ (Risk Ratio) với khoảng tin cậy 95%

  • RR = 1.012361 Nam giới có mức stress thấp cao hơn một chút so với nữ giới, hay nói cách khác là Nam giới có xu hướng ít bị stress hơn nữ giới một chút, nhưng sự khác biệt này rất nhỏ.

  • Khoảng tin cậy 95%: [0.8883; 1.1538] bao gồm giá trị 1, điều này cho thấy không có sự khác biệt có ý nghĩa thống kê giữa hai giới về mức độ căng thẳng cao**.

Kiểm định ý nghĩa thống kê (p-value)

  • Các p-value đều lớn hơn 0.05

  • Điều này đồng nghĩa với không có bằng chứng thống kê để bác bỏ giả thuyết rằng nguy cơ căng thẳng thấp là như nhau giữa nam và nữ.

Do đó, các biện pháp hỗ trợ sức khỏe tinh thần trong giáo dục đại học nên được thiết kế trên cơ sở bao quát, không ưu tiên một giới nào cụ thể mà cần tập trung vào các yếu tố ảnh hưởng chung như điều kiện học tập, khả năng thích nghi với công nghệ, và hỗ trợ xã hội.

3.2 Cặp biến Gender và Anxious Before Exams

Tương tự với cặp biến trên, ta cũng sẽ tiến hành lọc dữ liệu để có thể tiến hành tính toán RR. Ta cũng sẽ chỉ xét trên giới tính nam và nữ (không có giới tính khác)

Ta lọc lại dữ liệu và tính toán như sau:

Gen_Anx <- subset(smt, Gender %in% c("Male", "Female"))

table(Gen_Anx$Gender, Gen_Anx$Anxious.Before.Exams)
##         
##           No Yes
##   Female 220 255
##   Male   239 236
RelRisk(table(Gen_Anx$Gender, Gen_Anx$Anxious.Before.Exams))
## [1] 0.9205021

Ta diễn giải kết quả giá trị RR = 0.92 như sau:

  • Nam giới có nguy cơ lo lắng trước kỳ thi thấp hơn khoảng 8% so với nữ giới, Nói cách khác, nam ít có khả năng lo lắng trước kỳ thi hơn nữ.

  • RR < 1 → đây là dấu hiệu cho thấy nam giới ít lo lắng hơn nữ giới trước kỳ thi.

  • Tuy nhiên, RR = 0.92 là một con số gần bằng 1, vì vậy mức độ chênh lệch là không đáng kể về mặt thực tiễn.

Mức độ lo lắng trước kỳ thi giữa hai giới cho thấy rằng nam giới có nguy cơ trải qua cảm giác lo lắng thấp hơn một chút so với nữ giới (RR = 0.92). Tuy nhiên, sự khác biệt chỉ ở mức 8% và không quá lớn để đưa ra kết luận chắc chắn về mối liên hệ mạnh giữa giới tính và cảm giác lo âu trước kỳ thi.

Kết quả này phản ánh một xu hướng thường thấy trong nhiều nghiên cứu trước đây, rằng nữ sinh có thể cảm nhận và phản ứng với áp lực thi cử nhạy cảm hơn. Tuy vậy, vì tỷ số nguy cơ khá gần với 1, nên kết luận mang tính thận trọng là sự khác biệt giữa hai giới là có thể có nhưng không rõ ràng.

riskratio(table(Gen_Anx$Gender, Gen_Anx$Anxious.Before.Exams))
## $data
##         
##           No Yes Total
##   Female 220 255   475
##   Male   239 236   475
##   Total  459 491   950
## 
## $measure
##         risk ratio with 95% C.I.
##           estimate     lower    upper
##   Female 1.0000000        NA       NA
##   Male   0.9254902 0.8182499 1.046786
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male    0.2183064    0.2425268  0.2173584
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Ta có thể giải thích kết quả như sau:

Tỷ số nguy cơ (Risk Ratio) với khoảng tin cậy 95%

  • RR = 0.925 nghĩa là nam giới có nguy cơ cảm thấy lo lắng trước kỳ thi thấp hơn nữ giới khoảng 7.5%.

  • Do giá trị < 1, ta hiểu rằng giới tính nam có mức nguy cơ thấp hơn so với nữ (tức nữ có nguy cơ cao hơn một chút)

  • Khoảng tin cậy 95% [0.8182499; 1.046786] bao gồm giá trị 1, đồng nghĩa không có bằng chứng** thống kê đủ mạnh để khẳng định rằng nguy cơ lo lắng thực sự khác biệt giữa nam và nữ.

Kiểm định ý nghĩa thống kê (p-value)

  • Mọi giá trị p đều lớn hơn > 0.05Không có đủ bằng chứng để bác bỏ giả thuyết rằng nguy cơ lo lắng là như nhau giữa hai giới.

Điều này cho thấy, mặc dù nữ giới có tỷ lệ lo lắng trước kỳ thi cao hơn một chút so với nam giới, nhưng sự khác biệt đó có thể là do ngẫu nhiên và không đáng kể về mặt thống kê. Do đó, trong quá trình thiết kế các chương trình hỗ trợ tâm lý học đường, không nên chỉ tập trung riêng vào giới tính mà cần hướng đến toàn thể sinh viên, vì cả nam và nữ đều có mức độ lo lắng tương đối giống nhau.

4. Tỷ số chênh Odds Ratio

3.1 Cặp biến Gender và Stress level

oddsratio(table(Gen_Stress$Gender, Gen_Stress$Stress.Level))
## $data
##         
##          High Low Total
##   Female   85 157   242
##   Male     81 155   236
##   Total   166 312   478
## 
## $measure
##         odds ratio with 95% C.I.
##          estimate     lower   upper
##   Female 1.000000        NA      NA
##   Male   1.035878 0.7101946 1.51163
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male    0.8547156    0.9234815  0.8539248
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Diễn giải Tỷ số chênh Odds Ratio - OR như sau:

  • OR = 1.036, nam giới có khả năng bị căng thẳng cao hơn nữ giới khoảng 3.58%, nếu xét theo tỷ lệ chênh giữa nhóm căng thẳng cao và thấp.

  • OR rất gần 1, chênh lệch rất nhỏ, cho thấy không có sự khác biệt đáng kể trong xác suất bị căng thẳng giữa nam và nữ.

  • Khoảng tin cậy 95%: [0.7101946; 1.51163] bao gồm giá trị 1.0, ta hiểu rằng không có bằng chứng thống kê đủ mạnh để khẳng định sự khác biệt thật sự giữa hai giới tính về mức độ căng thẳng.

Giá trị p-value

  • Tất cả các kiểm định đều có p-value > 0.05

  • Như vậy, ta không thể bác bỏ giả thuyết không, tức là không có sự khác biệt có ý nghĩa thống kê giữa nam và nữ về khả năng bị căng thẳng.

Kết luận này mang ý nghĩa thực tiễn trong nghiên cứu tâm lý học đường: thay vì tập trung vào sự khác biệt giới tính, các biện pháp hỗ trợ nên tiếp cận theo chiều rộng toàn bộ quần thể học sinh/sinh viên, vì căng thẳng có thể xảy ra ở cả hai giới với xác suất gần tương đương.

4.2 Cặp biến Gender và Anxious Before Exams

oddsratio(table(Gen_Anx$Gender, Gen_Anx$Anxious.Before.Exams))
## $data
##         
##           No Yes Total
##   Female 220 255   475
##   Male   239 236   475
##   Total  459 491   950
## 
## $measure
##         odds ratio with 95% C.I.
##           estimate     lower    upper
##   Female 1.0000000        NA       NA
##   Male   0.8521095 0.6601614 1.099371
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male    0.2183064    0.2425268  0.2173584
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả phân tích cho thấy Odds Ratio = 0.8521, nghĩa là nam giới có khả năng cảm thấy lo lắng trước kỳ thi thấp hơn khoảng 14.8% so với nữ giới. Tuy nhiên:

  • Khoảng tin cậy 95% bao gồm giá trị 1, điều này cho thấy sự khác biệt về odds là không có ý nghĩa thống kê.

  • Các giá trị p đều lớn hơn 0.05, chứng tỏ không có bằng chứng thống kê rõ ràng để kết luận rằng giới tính có ảnh hưởng đến mức độ lo lắng trước kỳ thi.

Trong tập dữ liệu này, không tìm thấy mối liên hệ có ý nghĩa thống kê giữa giới tính và cảm giác lo lắng trước kỳ thi. Nói cách khác, nam và nữ có xác suất lo lắng tương đương nhau.

LS0tDQp0aXRsZTogIk5oaeG7h20gduG7pSB0deG6p24gNCBQVERMRFQiDQphdXRob3I6ICJWxakgUXXhu7NuaCBUcsO6YyBWeSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVIOiVNOiVTLCAlZCAtICVtIC0gJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIHRvYzogdHJ1ZQ0KICAgIGRmX3ByaW50OiBrYWJsZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShEZXNjVG9vbHMpDQpsaWJyYXJ5KGVwaXRvb2xzKQ0KYGBgDQoNCg0KIyAqKkEuIEdp4bubaSB0aGnhu4d1IGThu68gbGnhu4d1KioNCg0KIyMgKioxLiBOZ3Xhu5NuIHRodSB0aOG6rXAgZOG7ryBsaeG7h3UqKg0KDQpE4buvIGxp4buHdSDEkcaw4bujYyBz4butIGThu6VuZyBuZ2hpw6puIGPhu6l1IHRyb25nIGLDoGkgdOG6rXAgbsOgeSBtYW5nIHTDqm4gKioiU3R1ZGVudCBNZW50YWwgSGVhbHRoIEFuYWx5c2lzIER1cmluZyBPbmxpbmUgTGVhcm5pbmciKiosIHThuqFtIGThu4tjaDogKipQaMOibiB0w61jaCBz4bupYyBraOG7j2UgdMOibSB0aOG6p24gY+G7p2EgaOG7jWMgc2luaCB0cm9uZyBxdcOhIHRyw6xuaCBo4buNYyB0cuG7sWMgdHV54bq/bioqDQoNCi0gROG7ryBsaeG7h3UgxJHGsOG7o2MgdGh1IHRo4bqtcCB2w6AgY8O0bmcgYuG7kSB0csOqbiBu4buBbiB04bqjbmcgW0thZ2dsZV0oaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS8pIA0KDQotIE5ndeG7k24gdHLDrWNoIGThuqtuIGPhu6UgdGjhu4MgY+G7p2EgYuG7mSBk4buvIGxp4buHdTogW1N0dWRlbnQgTWVudGFsIEhlYWx0aCBBbmFseXNpcyBEdXJpbmcgT25saW5lIExlYXJuaW5nXShodHRwczovL3d3dy5rYWdnbGUuY29tL2RhdGFzZXRzL3V0a2Fyc2hzaGFybWExMXIvc3R1ZGVudC1tZW50YWwtaGVhbHRoLWFuYWx5c2lzKSANCg0KROG7ryBsaeG7h3UgdHJvbmcgYuG7mSBuw6B5IGNo4bunIHnhur91IMSRxrDhu6NjIHRodSB0aOG6rXAgdGjDtG5nIHF1YSBjw6FjIGN14buZYyAqKmto4bqjbyBzw6F0KiosIHbhu5tpIGPDoWMgKipwaOG6o24gaOG7k2kgdOG7qyBzaW5oIHZpw6puKiogduG7gSB0w6xuaCB0cuG6oW5nIHPhu6ljIGto4buPZSB0w6JtIHRo4bqnbiBj4bunYSBo4buNIHRyb25nIHRo4budaSDEkeG6oWkgaOG7jWMgdHLhu7FjIHR1eeG6v24uIEto4bqjbyBzw6F0IHThuq1wIHRydW5nIHbDoG8gbmhp4buBdSAqKmtow61hIGPhuqFuaCB0w6JtIGzDvSB2w6AgaMOgbmggdmkga2jDoWMgbmhhdSoqIGtoaSBjaOG7i3Ug4bqjbmggaMaw4bufbmcgY+G7p2EgZ2nDoW8gZOG7pWMgdOG7qyB4YS4NCg0KIyMgKioyLiDEkOG7jWMgZOG7ryBsaeG7h3UqKg0KDQpE4buvIGxp4buHdSDEkcaw4bujYyB04bqjaSB04burIHRyYW5nIEthZ2dsZSBsw6AgKipmaWxlIGNzdioqLCB2w6wgdGjhur8gdGEgdGnhur9uIGjDoG5oIMSR4buNYyBk4buvIGxp4buHdSB2w6BvIHbhu5tpIMSRdcO0aSBjc3YuDQoNClRhIGfDoW4gYuG7mSBk4buvIGxp4buHdSB24bubaSB0w6puICoqc210KiogLSAqKnZp4bq/dCB04bqvdCBj4bunYSBTdHVkZW50IE1lbnRhbCBIZWFsdGgqKg0KDQpgYGB7cn0NCmxpYnJhcnkoY3N2KQ0Kc210IDwtIHJlYWQuY3N2KCJEOi9VRk0vMjAyNS0gS8OsIDIvUGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCAtIFRy4bqnbiBN4bqhbmggVMaw4budbmcvRGF0YS9TdHVkZW50IE1lbnRhbCBIZWFsdGggQW5hbHlzaXMgRHVyaW5nIE9ubGluZSBMZWFybmluZy5jc3YiLCBoZWFkZXIgPSBUKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0YXRhYmxlKHNtdCkNCmBgYA0KDQoNCiMjICoqMy4gQ8OhYyB0aMO0bmcgdGluIHThu5VuZyBxdWFuIHbhu4EgZOG7ryBsaeG7h3UqKg0KDQojIyMgKiozLjEgVOG7lW5nIHPhu5EgYmnhur9uIHbDoCBz4buRIHF1YW4gc8OhdCoqDQoNCkLhu5kgZOG7ryBsaeG7h3UgKirigJxTdHVkZW50IE1lbnRhbCBIZWFsdGggQW5hbHlzaXMgRHVyaW5nIE9ubGluZSBMZWFybmluZ+KAnSoqIHRodSB0aOG6rXAgdGjDtG5nIHRpbiB04burICoqMS4wMDAgaOG7jWMgc2luaCB2w6Agc2luaCB2acOqbioqIHbhu5tpIG3hu6VjIHRpw6p1IMSRw6FuaCBnacOhICoqdMOsbmggdHLhuqFuZyBz4bupYyBraOG7j2UgdMOibSB0aOG6p24qKiBj4bunYSBo4buNIHRyb25nIGLhu5FpIGPhuqNuaCBo4buNYyB0cuG7sWMgdHV54bq/biBrw6lvIGTDoGkNCg0KVuG7m2kgYuG7mSBk4buvIGxp4buHdSB0csOqbiwga+G6v3QgcXXhuqMgY8OzIDogDQoNCi0gKioxMDAwICBxdWFuIHPDoXQqKiAtIMSR4bqhaSBkaeG7h24gY2hvICoqMTAwMCBo4buNYyBzaW5oIHNpbmggdmnDqm4gKEhTU1YpKioNCg0KLSAqKjEwIGJp4bq/bioqIC0gxJHhuqFpIGRp4buHbiBjaG8gKipjw6FjIGJp4bq/biBuaMOibiBraOG6qXUgaOG7jWMqKg0KDQpgYGB7cn0NCmRpbShzbXQpDQpgYGANCg0KIyMjICoqMy4yIEThu68gbGnhu4d1IGzDoCB0aMO0bmcgdGluIMSR4buLbmggdMOtbmggaGF5IMSR4buLbmggbMaw4bujbmcqKg0KDQpUYSBz4bq9IHPhu60gZOG7pW5nIGzhu4duaCBgaXMuZGF0YS5mcmFtZWAgxJHhu4MgYmnhur90IGThu68gbGnhu4d1ICoqY8OzIG1hbmcgdGjDtG5nIHRpbiDEkeG7i25oIHTDrW5oKiogaGF5IGtow7RuZywga+G6v3QgcXXhuqMgdHLhuqMgduG7gSAqKlRSVUUgaG/hurdjIEZBTFNFKiouDQoNCi0gTuG6v3Uga+G6v3QgcXXhuqMgbMOgICoqVFJVRSoqIC0gYuG7mSBk4buvIGxp4buHdSBtYW5nIHRow7RuZyB0aW4gKirEkeG7i25oIHTDrW5oKioNCg0KLSBO4bq/dSBr4bq/dCBxdeG6oyBsw6AgKipGQUxTRSoqIC0gYuG7mSBk4buvIGxp4buHdSBtYW5nIHRow7RuZyB0aW4gKirEkeG7i25oIGzGsOG7o25nKioNCg0KVuG7m2kgYuG7mSBk4buvIGxp4buHdSBzbXQsIGvhur90IHF14bqjIHRy4bqjIHbhu4EgbMOgICoqVFJVRSoqLCDEkeG7k25nIG5naMSpYSBsw6AgZOG7ryBsaeG7h3UgKiptYW5nIHRow7RuZyB0aW4gxJHhu4tuaCB0w61uaCoqDQoNCmBgYHtyfQ0KaXMuZGF0YS5mcmFtZShzbXQpDQpgYGANCg0KIyMjICoqMy4zIFTDqm4gY+G7pSB0aOG7gyB2w6Agw70gbmdoxKlhIGPhu6dhIGPDoWMgYmnhur9uKioNCg0KKioxMCBiaeG6v24gbmjDom4ga2jhuql1IGjhu41jKiogxJHGsOG7o2MgxJHGsGEgcmEgxJHhu4Mga2jhuqNvIHPDoXQgMTAwMCBIU1NWIGJhbyBn4buTbToNCg0KYGBge3J9DQpuYW1lcyhzbXQpDQpgYGANClTDqm4gdsOgIMO9IG5naMSpYSBj4bulIHRo4buDIG5oxrAgc2F1Og0KDQotICoqTmFtZSoqOiBUw6puIGPhu6dhIGPDoWMgSEhTVg0KDQotICoqR2VuZGVyKio6IEdp4bubaSB0w61uaCwgYmFvIGfhu5NtIChNYWxlIC0gbmFtLyBGZW1hbGUgLSBu4buvLyBPdGhlciAtIGdp4bubaSB0w61uaCBraMOhYykNCg0KLSAqKkFnZSoqOiDEkOG7mSB0deG7lWkgKMSRxrDhu6NjIHTDrW5oIHRoZW8gbsSDbSkNCg0KLSAqKkVkdWNhdGlvbiBMZXZlbCoqOiBUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4sIGvhur90IHF14bqjIHPhur0gYmFvIGfhu5NtICoqbmjDs20gaOG7jWMgc2luaCBwaOG7lSB0aMO0bmcqKiwgKipuaMOzbSBzaW5oIHZpw6puIMSR4bqhaSBo4buNYyoqIHbDoCAqKmjhu41jIHZpw6puIHNhdSDEkeG6oWkgaOG7jWMqKjoNCg0KICAgLSAqKkNsYXNzIDggdG8gMTIqKiAtIEjhu41jIHNpbmggdOG7qyBs4bubcCA4LCA5LCAxMCwgMTEgdsOgIDEyDQogICANCiAgIC0gKipCQSoqIC0gQmFjaGVsb3Igb2YgQXJ0cyAoY+G7rSBuaMOibiBuZ2jhu4cgdGh14bqtdCkNCiAgIA0KICAgLSAqKkJTYyoqIC0gQmFjaGVsb3Igb2YgU2NpZW5jZSAoY+G7rSBuaMOibiBraG9hIGjhu41jKQ0KICAgDQogICAtICoqQlRlY2gqKiAtIEJhY2hlbG9yIG9mIFRlY2hub2xvZ3kgKGPhu60gbmjDom4gY8O0bmcgbmdo4buHKQ0KICAgDQogICAtICoqTUEqKiAtIE1hc3RlciBvZiBBcnRzIChUaOG6oWMgc8SpIG5naOG7hyB0aHXhuq10KQ0KICAgDQogICAtICoqTVNjKiogLSBNYXN0ZXIgb2YgU2NpZW5jZSAoVGjhuqFjIHPEqSBraG9hIGjhu41jKQ0KICAgDQogICAtICoqTVRlY2gqKiAtIE1hc3RlciBvZiBUZWNobm9sb2d5IChUaOG6oWMgc8SpIGPDtG5nIG5naOG7hykNCg0KLSAqKlNjcmVlbiBUaW1lKio6IFRo4budaSBnaWFuIHPhu60gZOG7pW5nIG3DoG4gaMOsbmggdHJ1bmcgYsOsbmggbeG7l2kgbmfDoHkgdHJvbmcgcXXDoSB0csOsbmggaOG7jWMgdHLhu7FjIHR1eeG6v24gKGdp4budL25nw6B5KQ0KDQotICoqU2xlZXAgRHVyYXRpb24qKjogVGjhu51pIGdpYW4gbmfhu6cgdHJ1bmcgYsOsbmggaMOgbmcgbmfDoHkNCg0KLSAqKlBoeXNpY2FsIEFjdGl2aXR5Kio6IFRo4budaSBnaWFuIHThuq1wIHRo4buDIGThu6VjIGjDoG5nIHR14bqnbg0KDQotICoqU3RyZXNzIExldmVsKio6IE3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgDQoNCiAgIC0gKipMb3cqKiAtIE3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgdGjhuqVwDQogICANCiAgIC0gKipNZWRpdW0qKiAtIE3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgdHJ1bmcgYsOsbmggKGLDrG5oIHRoxrDhu51uZykNCiAgIA0KICAgLSAqKkhpZ2gqKiAtIE3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgY2FvDQoNCi0gKipBbnhpb3VzIEJlZm9yZSBFeGFtcyoqOiBIU1NWIGPDsyBj4bqjbSB0aOG6pXkgbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpIGtow7RuZw0KDQogICAtICoqWWVzKiogLSBIU1NWIGPDsyBj4bqjbSB0aOG6pXkgbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpDQogICANCiAgIC0gKipObyoqIC0gSFNTViBraMO0bmcgY+G6o20gdGjhuqV5IGxvIGzhuq9uZyB0csaw4bubYyBr4buzIHRoaQ0KDQotICoqQWNhZGVtaWMgUGVyZm9ybWFuY2UgQ2hhbmdlKio6IFThu7EgxJHDoW5oIGdpw6Egc+G7sSB0aGF5IMSR4buVaSB0cm9uZyBr4bq/dCBxdeG6oyBo4buNYyB04bqtcA0KDQogICAtICoqRGVjbGluZWQqKiAtIGvhur90IHF14bqjIGjhu41jIHThuq1wIGdp4bqjbQ0KICAgDQogICAtICoqSW1wcm92ZWQqKiAtIGvhur90IHF14bqjIGjhu41jIHThuq1wIGPDsyBj4bqjaSB0aGnhu4duDQogICANCiAgIC0gKipTYW1lKiogLSBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCBraMO0bmcgY8OzIGfDrCB0aGF5IMSR4buVaQ0KDQojIyAqKjQuIEtp4buDbSB0cmEgY+G6pXUgdHLDumMgdOG7lW5nIHF1w6F0IGThu68gbGnhu4d1KioNCg0KVGEga2nhu4NtIHRyYSBj4bqldSB0csO6YyB04buVbmcgcXXDoXQgY+G7p2EgZOG7ryBsaeG7h3UgbmjGsCBzYXU6DQoNCmBgYHtyfQ0Kc3RyKHNtdCkNCmBgYA0KDQpDw6FjICoqYmnhur9uIMSR4buLbmggdMOtbmgqKiBjw7MgdGjhu4MgcGjDom4gdMOtY2ggYmFvIGfhu5NtOiANCg0KLSBHZW5kZXINCg0KLSBFZHVjYXRpb24uTGV2ZWwJDQoNCi0gU3RyZXNzLkxldmVsDQoNCi0gQW54aW91cy5CZWZvcmUuRXhhbXMNCg0KLSBBY2FkZW1pYy5QZXJmb3JtYW5jZS5DaGFuZ2UNCg0KQ8OhYyAqKmJp4bq/biDEkeG7i25oIGzGsOG7o25nKiogY8OzIHRo4buDIHBow6JuIHTDrWNoIGJhbyBn4buTbTogDQoNCi0gQWdlDQoNCi0gU2NyZWVuLlRpbWUNCg0KLSBTbGVlcC5EdXJhdGlvbg0KDQotIFBoeXNpY2FsLkFjdGl2aXR5DQoNCuG7niBiw6BpIHThuq1wIG7DoHksIHRhIHPhur0gKipjaOG7pyDEkcOtY2ggcGjDom4gdMOtY2ggY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCoqDQoNCi0tLQ0KDQojICoqQi4gUGjDom4gdMOtY2ggTcO0IHThuqMgMSBiaeG6v24gxJHhu4tuaCB0w61uaCoqDQoNCiMjICoqMS4gVGjhu5FuZyBrw6ogdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0KioNCg0KIyMjICoqMS4xIEJp4bq/biBHZW5kZXIqKg0KDQpUcm9uZyAxMDAwIEhTU1YsIHRow6wgc+G6vSBiYW8gZ+G7k20gKipiYW8gbmhpw6p1IG5nxrDhu51pIGzDoCBu4buvLCBiYW8gbmhpw6p1IG5nxrDhu51pIGzDoCBuYW0sIGJhbyBuaGnDqnUgbmfGsOG7nWkgbMOgIGdp4bubaSB0w61uaCBraMOhYz8qKiwgdGEgY8OzIHRo4buDIGNvaSBr4bq/dCBxdeG6oyB0aOG7kW5nIGvDqiBzYXU6DQoNCmBgYHtyfQ0KdGFibGUoc210JEdlbmRlcikNCmBgYA0KYGBge3J9DQp0YWJsZShzbXQkR2VuZGVyKS9zdW0odGFibGUoc210JEdlbmRlcikpDQpgYGANCg0KDQpU4burIGvhur90IHF14bqjIHRhIHRo4bqleSwgZOG7ryBsaeG7h3UgxJHGsOG7o2MgdGh1IHRo4bqtcCB04burICoqNDc1IG5nxrDhu51pIGzDoCBu4buvKiosICoqNDc1IG5nxrDhu51pIGzDoCBuYW0qKiB2w6AgKio1MCBuZ8aw4budaSB0aHXhu5ljIGdp4bubaSB0w61uaCBraMOhYyoqLiBQaOG6p24gdHLEg20ga2jhuqNvIHPDoXQgZ2nhu69hIDIgZ2nhu5tpIHTDrW5oIG5hbSB2w6AgbuG7ryBsw6AgY8OibiBi4bqxbmcgbmhhdSAoNDcsNSUgY2hvIG3hu5dpIGLDqm4pLiBDw7JuIHbhu5tpIGdp4bubaSB0w61uaCBraMOhYyBjaOG7iSBjaGnhur9tIG3hu5l0IHBo4bqnbiBuaOG7jyA1JS4NCg0KVuG6rXkgdGEgdGjhuqV5IGPDsyAqKnPhu7EgY8OibiBi4bqxbmcgduG7gSBnaeG7m2kgdMOtbmgqKiBnaeG7r2EgbmFtIHbDoCBu4buvLCBuZ2/DoGkgcmEgY8OybiBjw7MgMSBuaMOzbSBuaOG7jyBnaeG7m2kgdMOtbmgga2jDoWMsIGzhu7FhIGNo4buNbiBuw6B5IHRo4buDIGhp4buHbiB0w61uaCB0b8OgbiBkaeG7h24gdsOgIHTDtG4gdHLhu41uZyBz4buxIMSRYSBk4bqhbmcgZ2nhu5tpIHRyb25nIGto4bqjbyBzw6F0Lg0KDQpUYSB0cuG7sWMgcXVhbiBow7NhIGvhur90IHF14bqjIHRow6BuaCBiaeG7g3UgxJHhu5MgbmjGsCBzYXU6DQoNCmBgYHtyfQ0Kc210ICU+JSBncm91cF9ieShHZW5kZXIpICU+JSBzdW1tYXJpc2UobiA9IG4oKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEdlbmRlciwgeSA9IG4pKSsNCiAgZ2VvbV9jb2woZmlsbD0ncGluaycpKw0KICBsYWJzKHg9Ikdp4bubaSB0w61uaCIsIHkgPSAiU+G7kSBsxrDhu6NuZyIpKw0KICBsYWJzKGNhcHRpb24gPSAiQmnhu4N1IMSR4buTIHBow6JuIGLhu5UgZ2nhu5tpIHTDrW5oIGPhu6dhIG5nxrDhu51pIGto4bqjbyBzw6F0IikrDQogIGdlb21fdGV4dChhZXMobGFiZWwgPW4pLCB2anVzdD0wLCBjb2xvciA9ICdibGFjaycpDQpgYGANCg0KIyMjICoqMS4yIEJp4bq/biBFZHVjYXRpb24gTGV2ZWwqKg0KDQpWw6AgdHJvbmcgMTAwMCBuZ8aw4budaSBraOG6o28gc8OhdCwgc+G6vSBiYW8gZ+G7k20gY+G6oyBo4buNYyBzaW5oLCBzaW5oIHZpw6puIMSR4bqhaSBo4buNYyBs4bqrbiBo4buNYyB2acOqbiBzYXUgxJHhuqFpIGjhu41jLCBr4bq/dCBxdeG6oyBuaMawIHNhdToNCg0KYGBge3J9DQp0YWJsZShzbXQkRWR1Y2F0aW9uLkxldmVsKQ0KYGBgDQoNCmBgYHtyfQ0KdGFibGUoc210JEVkdWNhdGlvbi5MZXZlbCkvc3VtKHRhYmxlKHNtdCRFZHVjYXRpb24uTGV2ZWwpKQ0KYGBgDQoNCkThu7FhIHRoZW8ga+G6v3QgcXXhuqM6DQoNCi0gKipOaMOzbSBo4buNYyB2acOqbiBzYXUgxJHhuqFpIGjhu41jIGNoaeG6v20gdOG7tyB0cuG7jW5nIGNhbyBuaOG6pXQqKiwgduG7m2kgMTQzIG5nxrDhu51pIHRoZW8gaOG7jWMgTVRlY2gsIDEzOCBuZ8aw4budaSB0aGVvIGjhu41jIE1TYyB2w6AgMTI5IG5nxrDhu51pIGjhu41jIE1BLCBjaG8gdGjhuqV5IHLhurFuZyBoxqFuICoqNDAlIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0IMSRYW5nIHRoZW8gaOG7jWMg4bufIGPhuqVwIMSR4buZIHRo4bqhYyBzxKkqKg0KDQotIOG7niAqKm5ow7NtIMSR4bqhaSBo4buNYyoqLCBjw6FjIGNodXnDqm4gbmfDoG5oIHBo4buVIGJp4bq/biBuaMawIEJTYyAoODUgbmfGsOG7nWkpLCBCVGVjaCAoODQgbmfGsOG7nWkpIHbDoCBCQSAoNjIgbmfGsOG7nWkpIGPFqW5nIGPDsyBz4buRIGzGsOG7o25nIHTGsMahbmcgxJHhu5FpIMSR4buTbmcgxJHhu4F1LCBwaOG6p24gdHLEg20gc+G7kSBsxrDhu6NuZyBjw6FjIHNpbmggdmnDqm4gxJHhuqFpIGjhu41jIHRoYW0gZ2lhIGto4bqjbyBzw6F0ICoqY2jhu4kgZMaw4bubaSAxMCUgduG7m2kgbeG7l2kgbmfDoG5oKioNCg0KLSAqKk5ow7NtIGjhu41jIHNpbmgqKiBsw6AgbmjDs20gY8OzIHPhu5EgbMaw4bujbmcgdGhhbSBnaWEga2jhuqNvIHPDoXQgw610IG5o4bqldCwgY2jhu4kgdOG7qyAqKjQgLSA4JSoqIGNobyBt4buXaSBraOG7kWkNCg0KTmjDrG4gY2h1bmcsIHPhu6ljIGto4buPZSB0w6JtIHRo4bqnbiBraGkgaOG7jWMgdHLhu7FjIHR1eeG6v24gbMOgIHbhuqVuIMSR4buBIMSRxrDhu6NjIHF1YW4gdMOibSBraMO0bmcgY2jhu4kg4bufIGLhuq1jIMSR4bqhaSBo4buNYyBtw6AgY8OybiBuZ2F5IHThu6sgYuG6rWMgdHJ1bmcgaOG7jWMuIFBow6JuIGLhu5EgaOG7jWMgduG6pW4gY2hvIHRo4bqleSBraOG6o28gc8OhdCBuw6B5IGJhbyBwaOG7pyBuaGnhu4F1IGPhuqVwIGjhu41jLCB04bqhbyB0aeG7gW4gxJHhu4EgdGh14bqtbiBs4bujaSDEkeG7gyBwaMOibiB0w61jaCDhuqNuaCBoxrDhu59uZyBj4bunYSBo4buNYyB0cuG7sWMgdHV54bq/biDEkeG6v24gc+G7qWMga2jhu49lIHTDom0gdGjhuqduIOG7nyBjw6FjIG5ow7NtIHR14buVaSB2w6AgdHLDrG5oIMSR4buZIGtow6FjIG5oYXUuDQoNClRhIHRy4buxYyBxdWFuIGjDs2Ega+G6v3QgcXXhuqMgdGjDoG5oIGJp4buDdSDEkeG7kyBuaMawIHNhdToNCg0KYGBge3J9DQpzbXQgJT4lIGdyb3VwX2J5KEVkdWNhdGlvbi5MZXZlbCkgJT4lIHN1bW1hcmlzZShuID0gbigpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gRWR1Y2F0aW9uLkxldmVsLCB5ID0gbikpKw0KICBnZW9tX2NvbChmaWxsPSdsaWdodGJsdWUnKSsNCiAgbGFicyh4PSJUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgSFNTViIsIHkgPSAiU+G7kSBsxrDhu6NuZyIpKw0KICBsYWJzKGNhcHRpb24gPSAiQmnhu4N1IMSR4buTIHBow6JuIGLhu5UgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGPhu6dhIG5nxrDhu51pIGto4bqjbyBzw6F0IikrDQogIGdlb21fdGV4dChhZXMobGFiZWwgPW4pLCB2anVzdD0wLCBjb2xvciA9ICdibGFjaycpDQpgYGANCg0KDQojIyMgKioxLjMgQmnhur9uIFN0cmVzcyBMZXZlbCoqDQoNCkto4bqjbyBzw6F0IG3hu6ljIMSR4buZIGPEg25nIHRo4bqxbmcgY+G7p2EgY8OhYyBIU1NWIG5oxrAgc2F1Og0KDQpgYGB7cn0NCnRhYmxlKHNtdCRTdHJlc3MuTGV2ZWwpDQpgYGANCg0KYGBge3J9DQp0YWJsZShzbXQkU3RyZXNzLkxldmVsKS9zdW0odGFibGUoc210JFN0cmVzcy5MZXZlbCkpDQpgYGANCg0KS+G6v3QgcXXhuqMgdGjhu5FuZyBrw6ogbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyBuaMawIHNhdTogDQoNCi0gQ8OzICoqNDkyIG5nxrDhu51pICg0OSwyJSkqKiBjaG8gYmnhur90IGjhu40gxJFhbmcg4bufICoqbeG7qWMgY8SDbmcgdGjhurNuZyB0cnVuZyBiw6xuaCoqLCBjaG8gdGjhuqV5IMSRw6J5IGzDoCAqKnRy4bqhbmcgdGjDoWkgcGjhu5UgYmnhur9uIG5o4bqldCoqIHRyb25nIG3DtGkgdHLGsOG7nW5nIGjhu41jIHThuq1wIHRy4buxYyB0dXnhur9uDQoNCi0gQ8OzICoqMTgxIG5nxrDhu51pICgxOCwxJSkqKiBnaGkgbmjhuq1uICoqbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyBjYW8qKiwgcGjhuqNuIMOhbmggbeG7mXQgYuG7mSBwaOG6rW4ga2jDtG5nIG5o4buPIEhTU1YgKirEkWFuZyBjaOG7i3Ugw6FwIGzhu7FjIMSRw6FuZyBr4buDKiosIGPDsyBuZ3V5IGPGoSDhuqNuaCBoxrDhu59uZyDEkeG6v24gc+G7qWMga2jhu49lIHTDom0gdGjhuqduIG7hur91IGtow7RuZyDEkcaw4bujYyBjYW4gdGhp4buHcCBr4buLcCB0aOG7nWkNCg0KLSBDw7MgKiozMjcgbmfGsOG7nWkgKDMyLDclKSoqIGLDoW8gY8OhbyAqKm3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgdGjhuqVwKioNCg0KUGjDom4gYuG7kSBuw6B5IGNobyB0aOG6pXkgcuG6sW5nICoqaMahbiAyLzMgc+G7kSBuZ8aw4budaSBo4buNYyB0cuG7sWMgdHV54bq/bioqIMSRYW5nIHRy4bqjaSBxdWEgKipt4bupYyDEkeG7mSBjxINuZyB0aOG6s25nIHThu6sgdHJ1bmcgYsOsbmggxJHhur9uIGNhbyoqLCDEkeG6t3QgcmEgbeG7mXQgduG6pW4gxJHhu4EgxJHDoW5nIHF1YW4gbmfhuqFpIHbhu4EgdMOhYyDEkeG7mW5nIHRpw6p1IGPhu7FjIGPhu6dhIGjDrG5oIHRo4bupYyBo4buNYyBvbmxpbmUgxJHhu5FpIHbhu5tpIHPhu6ljIGto4buPZSB0w6JtIHRo4bqnbi4NCg0KVGEgdHLhu7FjIHF1YW4gaMOzYSBr4bq/dCBxdeG6oyB0aMOgbmggYmnhu4N1IMSR4buTIG5oxrAgc2F1Og0KDQpgYGB7cn0NCnNtdCAlPiUgZ3JvdXBfYnkoU3RyZXNzLkxldmVsKSAlPiUgc3VtbWFyaXNlKG4gPSBuKCkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSAnJywgeSA9IG4sZmlsbCA9IFN0cmVzcy5MZXZlbCkpICsNCiAgICBnZW9tX2NvbChjb2xvciA9ICdibGFjaycpICsNCiAgICBjb29yZF9wb2xhcigneScpICsNCiAgICBnZW9tX3RleHQoYWVzKHggPSAxLjMsIGxhYmVsID0gbikscG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IC41KSkgKw0KICAgIGxhYnMoY2FwdGlvbiA9ICJCaeG7g3UgxJHhu5MgdHLDsm4gduG7gSBz4buRIGzGsOG7o25nIG5nxrDhu51pIGPhu6dhIGPDoWMgbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyIpICsNCiAgICB0aGVtZV92b2lkKCkNCmBgYA0KDQoNCiMjIyAqKjEuNCBCaeG6v24gQW54aW91cyBCZWZvcmUgRXhhbXMqKg0KDQpL4bq/dCBxdeG6oyB24buBIG3hu6ljIMSR4buZIGxvIGzhuq9uZyB0csaw4bubYyBr4buzIHRoaSBj4bunYSAxMDAwIG5nxrDhu51pIG5oxrAgc2F1Og0KDQpgYGB7cn0NCnRhYmxlKHNtdCRBbnhpb3VzLkJlZm9yZS5FeGFtcykNCmBgYA0KDQpgYGB7cn0NCnRhYmxlKHNtdCRBbnhpb3VzLkJlZm9yZS5FeGFtcykvc3VtKHRhYmxlKHNtdCRBbnhpb3VzLkJlZm9yZS5FeGFtcykpDQpgYGANCg0KVHJvbmcgc+G7kSAxLjAwMCBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdDogDQoNCi0gQ8OzICoqNTEzIG5nxrDhu51pICg1MSwzJSkqKiBjaG8gYmnhur90IGjhu40gKipj4bqjbSB0aOG6pXkgbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpKioNCg0KLSBDw7JuIGzhuqFpICoqNDg3IG5nxrDhu51pICg0OCw3JSkga2jDtG5nIGfhurdwIHBo4bqjaSB0w6xuaCB0cuG6oW5nIG7DoHkqKg0KDQpU4bu3IGzhu4cgbsOgeSAqKnBo4bqjbiDDoW5oIG3hu5l0IHRo4buxYyB0cuG6oW5nKiogcGjhu5UgYmnhur9uIHLhurFuZyBsbyDDonUgdHLGsOG7m2Mga+G7syB0aGkgbMOgICoqaGnhu4duIHTGsOG7o25nIHRoxrDhu51uZyBn4bq3cCDhu58gaMahbiBt4buZdCBu4butYSBz4buRIG5nxrDhu51pIGjhu41jKiosIMSR4bq3YyBiaeG7h3QgdHJvbmcgYuG7kWkgY+G6o25oIGjhu41jIHThuq1wIHRy4buxYyB0dXnhur9uIOKAkyBuxqFpIG5nxrDhu51pIGjhu41jIGPDsyB0aOG7gyBn4bq3cCBraMOzIGtoxINuIHRyb25nIHZp4buHYyB0aeG6v3AgY+G6rW4gdMOgaSBsaeG7h3UsIHTGsMahbmcgdMOhYyB24bubaSBnaeG6o25nIHZpw6puLCBob+G6t2MgdGhp4bq/dSBr4bu5IG7Eg25nIHF14bqjbiBsw70gdGjhu51pIGdpYW4uICoqU+G7sSBjaMOqbmggbOG7h2NoIGtow7RuZyBxdcOhIGzhu5tuKiogZ2nhu69hIGhhaSBuaMOzbSBjaG8gdGjhuqV5ICoqduG6pW4gxJHhu4EgbG8gw6J1IGPDsyB0w61uaCBwaOG7lSBxdcOhdCoqDQoNClRhIHRy4buxYyBxdWFuIGjDs2Ega+G6v3QgcXXhuqMgdGjDoG5oIGJp4buDdSDEkeG7kyBuaMawIHNhdToNCg0KYGBge3J9DQpzbXQgJT4lIGdyb3VwX2J5KEFueGlvdXMuQmVmb3JlLkV4YW1zKSAlPiUgc3VtbWFyaXNlKG4gPSBuKCkpICU+JQ0KICBtdXRhdGUocGVyYyA9IHJvdW5kKG4gLyBzdW0obikgKiAxMDAsIDEpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gIiIsIHkgPSBwZXJjLCBmaWxsID0gQW54aW91cy5CZWZvcmUuRXhhbXMpKSArDQogICAgZ2VvbV9jb2woY29sb3IgPSAnYmxhY2snKSArDQogICAgY29vcmRfcG9sYXIoInkiKSArDQogICAgZ2VvbV90ZXh0KGFlcyh4ID0gMS4zLCBsYWJlbCA9IHBhc3RlMChwZXJjLCAiJSIpKSwgDQogICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSArDQogICAgbGFicyhjYXB0aW9uID0gIkJp4buDdSDEkeG7kyB0csOybiB24buBIHThu7cgbOG7hyBz4buRIG5nxrDhu51pIGPhuqNtIHRo4bqleSBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkiKSArDQogICAgdGhlbWVfdm9pZCgpDQpgYGANCg0KDQojIyMgKioxLjUgQmnhur9uIEFjYWRlbWljIFBlcmZvcm1hbmNlIENoYW5nZSoqDQoNCkvhur90IHF14bqjIHThu7EgxJHDoW5oIGdpw6EgduG7gSBz4buxIHRoYXkgxJHhu5VpIHRyb25nIGvhur90IHF14bqjIGjhu41jIHThuq1wIGPhu6dhIDEwMDAgbmfGsOG7nWkgbMOgOg0KDQpgYGB7cn0NCnRhYmxlKHNtdCRBY2FkZW1pYy5QZXJmb3JtYW5jZS5DaGFuZ2UpDQpgYGANCg0KYGBge3J9DQp0YWJsZShzbXQkQWNhZGVtaWMuUGVyZm9ybWFuY2UuQ2hhbmdlKS9zdW0odGFibGUoc210JEFjYWRlbWljLlBlcmZvcm1hbmNlLkNoYW5nZSkpDQpgYGANCg0KS+G6v3QgcXXhuqMgdGjhu5FuZyBrw6ogY2hvIHRo4bqleSB0cm9uZyAxLjAwMCBuZ8aw4budaSDEkcaw4bujYyBraOG6o28gc8OhdCB24buBIHPhu7EgdGhheSDEkeG7lWkgdHJvbmcga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAga2hpIGjhu41jIHRy4buxYyB0dXnhur9uLCBjw7MgKiozOSw5JSBjaG8gYmnhur90IGvhur90IHF14bqjIGjhu41jIHThuq1wIGPhu6dhIGjhu40gZ2nhu68gbmd1ecOqbioqLCB0cm9uZyBraGkgKiozMCwzJSBj4bqjbSB0aOG6pXkgxJHDoyBj4bqjaSB0aGnhu4duKiogdsOgICoqMjksOCUgY2hvIHLhurFuZyBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCBj4bunYSBo4buNIGdp4bqjbSBzw7p0KioNCg0KKipU4bu3IGzhu4cgbmfGsOG7nWkgaOG7jWMgY+G6o20gdGjhuqV5IGdp4buvIHbhu69uZyBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCBsw6AgY2FvIG5o4bqldCoqLCBjaG8gdGjhuqV5IG3hu5l0IGLhu5kgcGjhuq1uIMSRw6FuZyBr4buDIGPDsyBraOG6oyBuxINuZyB0aMOtY2ggbmdoaSB04buRdCB24bubaSBow6xuaCB0aOG7qWMgaOG7jWMgdHLhu7FjIHR1eeG6v24uIFR1eSBuaGnDqm4sICoqdOG7tyBs4buHIGdp4buvYSBoYWkgbmjDs20g4oCcQ+G6o2kgdGhp4buHbuKAnSB2w6Ag4oCcR2nhuqNtIHPDunTigJ0gbMOgIGtow6EgY8OibiBi4bqxbmcqKiwgxJFp4buBdSBuw6B5IHBo4bqjbiDDoW5oIHLDtSBz4buxIHBow6JuIGjDs2EgdHJvbmcgdHLhuqNpIG5naGnhu4dtIGjhu41jIHRy4buxYyB0dXnhur9uDQoNClRyb25nIGtoaSBt4buZdCBz4buRIG5nxrDhu51pIHThuq1uIGThu6VuZyB04buRdCB0aOG7nWkgZ2lhbiBsaW5oIGhv4bqhdCB2w6AgY8O0bmcgbmdo4buHIMSR4buDIGjhu41jIGhp4buHdSBxdeG6oyBoxqFuLCB0aMOsIG5nxrDhu6NjIGzhuqFpLCBraMO0bmcgw610IG5nxrDhu51pIGzhuqFpIGfhurdwIGtow7Mga2jEg24gdHJvbmcgdmnhu4djIHThu7EgaOG7jWMsIHRoaeG6v3UgdMawxqFuZyB0w6FjIHbDoCBnaeG6o20gxJHhu5luZyBs4buxYyBo4buNYyB04bqtcC4gU+G7sSBwaMOibiBi4buRIG7DoHkgY8OybiBwaOG7pSB0aHXhu5ljIHbDoG8ga2jhuqMgbsSDbmcgdGjDrWNoIG5naGksIMSRaeG7gXUga2nhu4duIGjhu41jIHThuq1wIGPDoSBuaMOibiB2w6AgY8OhYyB54bq/dSB04buRIHTDom0gbMO9IMSRaSBrw6htIG5oxrAgY8SDbmcgdGjhurNuZyBoYXkgbG8gw6J1Lg0KDQpUYSB0cuG7sWMgcXVhbiBow7NhIGvhur90IHF14bqjIHRow6BuaCBiaeG7g3UgxJHhu5MgbmjGsCBzYXU6DQoNCmBgYHtyfQ0Kc210ICU+JSBncm91cF9ieShBY2FkZW1pYy5QZXJmb3JtYW5jZS5DaGFuZ2UpICU+JSBzdW1tYXJpc2UobiA9IG4oKSkgJT4lDQogIG11dGF0ZShwZXJjID0gcm91bmQobiAvIHN1bShuKSAqIDEwMCwgMSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSAiIiwgeSA9IHBlcmMsIGZpbGwgPSBBY2FkZW1pYy5QZXJmb3JtYW5jZS5DaGFuZ2UpKSArDQogICAgZ2VvbV9jb2woY29sb3IgPSAnYmxhY2snKSArDQogICAgY29vcmRfcG9sYXIoInkiKSArDQogICAgZ2VvbV90ZXh0KGFlcyh4ID0gMS4zLCBsYWJlbCA9IHBhc3RlMChwZXJjLCAiJSIpKSwgDQogICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSArDQogICAgbGFicyhjYXB0aW9uID0gIkJp4buDdSDEkeG7kyB0csOybiB24buBIHThu7cgbOG7hyB0aGF5IMSR4buVaSB0cm9uZyBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCIpICsNCiAgICB0aGVtZV92b2lkKCkNCmBgYA0KDQoNCiMjICoqMi4gxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHbDoCBLaeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCoqDQoNCiMjIyAqKjIuMSBYw6FjIMSR4buLbmggaOG6oW5nIG3hu6VjIFF1YW4gdMOibSoqDQoNClNhdSBraGkgxJHDoyB0aOG7kW5nIGvDqiB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgY+G7p2EgdOG6pXQgY+G6oyBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oLCB0YSBz4bq9IHRp4bq/biBow6BuaCAqKsaw4bubYyBsxrDhu6NuZyBraG/huqNuZyoqIGNobyAxIHRyb25nIHPhu5EgY8OhYyBiaeG6v24gbsOgeS4gVGEgY2jhu41uIDIgaOG6oW5nIG3hu6VjIHF1YW4gdMOibSB04burIDIgYmnhur9uIGJhbyBn4buTbToNCg0KLSBI4bqhbmcgbeG7pWMgKioiSGlnaCIqKiBj4bunYSBiaeG6v24gKipTdHJlc3MgTGV2ZWwqKiAoTeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyBjYW8pDQoNCi0gSOG6oW5nIG3hu6VjICoqIlllcyIqKiBj4bunYSBiaeG6v24gKipBbnhpb3VzIEJlZm9yZSBFeGFtcyoqIChDw7Mgc+G7sSBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkpDQoNCiMjIyAqKjIuMiBI4bqhbmcgbeG7pWMgIkhpZ2giIGPhu6dhIGJp4bq/biBTdHJlc3MgTGV2ZWwqKg0KDQpHaeG6oyBz4butIHRhIG114buRbiBraeG7g20gxJHhu4tuaCB4ZW0gKip04bu3IGzhu4cgbmfGsOG7nWkgY8OzIG3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgY2FvIGPDsyBi4bqxbmcgNTAlIGhheSBraMO0bmcgdHJvbmcgdOG7lW5nIHRo4buDIEhTU1YqKg0KDQotICoqR2nhuqMgdGh1eeG6v3Qga2jDtG5nIEgwKio6IFThu7cgbOG7hyBzaW5oIHZpw6puIGPDsyBt4bupYyBjxINuZyB0aOG6s25nIGNhbyBi4bqxbmcgNTAlDQoNCi0gKipHaeG6oyB0aHV54bq/dCDEkeG7kWkgSDEqKjogVOG7tyBs4buHIHNpbmggdmnDqm4gY8OzIG3hu6ljIGPEg25nIHRo4bqzbmcgY2FvIGtow6FjIDUwJQ0KDQoNCmBgYHtyfQ0KcHJvcC50ZXN0KHN1bShzbXQkU3RyZXNzLkxldmVsID09ICJIaWdoIiksIG5yb3coc210KSwgY29uZi5sZXZlbCA9IDAuOTUpDQpgYGANCg0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggbmjGsCBzYXU6DQoNCi0gKipHacOhIHRy4buLIFgtc3F1YXJlZCA9IDQwNS43NyoqIGzDoCBy4bqldCBs4bubbiwgY2hvIHRo4bqleSBjaMOqbmggbOG7h2NoIGdp4buvYSB04bu3IGzhu4cgcXVhbiBzw6F0IHbDoCBnaeG6oyDEkeG7i25oIGzDoCDEkcOhbmcga+G7gy4NCg0KLSAqKkdpw6EgdHLhu4sgcC12YWx1ZSA8IDIuMmUtMTYqKiBsw6AgcuG6pXQgbmjhu48sIG5o4buPIGjGoW4gNSUsIHbDrCB0aOG6vyB0YSAqKmLDoWMgYuG7jyBIMCoqLCBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogbeG6oW5oIGNobyB0aOG6pXkgdOG7tyBs4buHIHRo4buxYyB04bq/IGtow6FjIDUwJS4NCg0KLSAqKktob+G6o25nIHRpbiBj4bqteSA5NSUqKiBjaG8gdOG7tyBs4buHIHNpbmggdmnDqm4gY8OzIG3hu6ljIHN0cmVzcyBjYW8gbMOgICoqdOG7qyAxNS43OSUgxJHhur9uIDIwLjY2JSoqDQoNCi0gKipU4bu3IGzhu4cgbeG6q3UgxrDhu5tjIGzGsOG7o25nIGzDoCAxOCwxJSoqLCB04bupYyBsw6AgdHJvbmcgMS4wMDAgc2luaCB2acOqbiB0aMOsIGPDsyAxOC4xJSBsw6AgdGh14buZYyBuaMOzbSBzdHJlc3Mg4bufIG3hu6ljIGNhbw0KDQpUaMO0bmcgcXVhIGtp4buDbSDEkeG7i25oIMaw4bubYyBsxrDhu6NuZyBraG/huqNuZyB24bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlLCB0YSB0aHUgxJHGsOG7o2Mga2hv4bqjbmcgdGluIGPhuq15IGNobyB04bu3IGzhu4cgbsOgeSBsw6AgdOG7qyAxNS43OSUgxJHhur9uIDIwLjY2JS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgdOG7tyBs4buHIHNpbmggdmnDqm4gYuG7iyBjxINuZyB0aOG6s25nIGNhbyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDE1Ljc5JSDEkeG6v24gMjAuNjYlKioNCg0KUGjhuqduIGzhu5tuIHNpbmggdmnDqm4ga2jDtG5nIHLGoWkgdsOgbyBuaMOzbSBjxINuZyB0aOG6s25nIG5naGnDqm0gdHLhu41uZywgdHV5IG5oacOqbiBraG/huqNuZyAxLzUgc2luaCB2acOqbiBjw7MgbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyBjYW8g4oCUIG3hu5l0IHThu7cgbOG7hyBraMO0bmcgbmjhu48sIMSR4bq3YyBiaeG7h3QgdHJvbmcgYuG7kWkgY+G6o25oIGjhu41jIHThuq1wIHRy4buxYyB0dXnhur9uIHbhu5FuIHRp4buBbSDhuqluIG5oaeG7gXUgeeG6v3UgdOG7kSBnw6J5IMOhcCBs4buxYyB24buBIHRpbmggdGjhuqduLg0KDQojIyMgKioyLjMgSOG6oW5nIG3hu6VjIFllcyBj4bunYSBiaeG6v24gQW54aW91cyBCZWZvcmUgRXhhbXMqKg0KDQrEkOG6t3QgZ2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6DQoNCi0gKipHaeG6oyB0aHV54bq/dCBraMO0bmcgSDAqKjogVOG7tyBs4buHIHNpbmggdmnDqm4gbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpIGzDoCBi4bqxbmcgNTAlDQoNCi0gKipHaeG6oyB0aHV54bq/dCDEkeG7kWkgSDEqKjogVOG7tyBs4buHIHNpbmggdmnDqm4gbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpIGtow6FjIDUwJQ0KDQoNCmBgYHtyfQ0KcHJvcC50ZXN0KHN1bShzbXQkQW54aW91cy5CZWZvcmUuRXhhbXMgPT0gIlllcyIpLCBucm93KHNtdCksIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIG5oxrAgc2F1Og0KDQotICoqR2nDoSB0cuG7iyBwLXZhbHVlID0gMC40MjkyKiog4oaSIEzhu5tuIGjGoW4gNSUsICoqa2jDtG5nIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMCoqDQoNCi0gKipLaG/huqNuZyB0aW4gY+G6rXkgOTUlOioqIFswLjQ4MTUgOyAwLjU0NDRdLCBW4bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlLCB04bu3IGzhu4cgc2luaCB2acOqbiBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkgbuG6sW0gdHJvbmcga2hv4bqjbmcgdOG7qyA0OC4xNSUgxJHhur9uIDU0LjQ0JS4NCg0KLSAqKlThu7cgbOG7hyBt4bqrdSBsw6AgMC41MTMqKiwgY8OzIG5naMSpYSBjw7MgNTEuMyUgc2luaCB2acOqbiB0cuG6oyBs4budaSBjw7MsIHThu6ljIGzDoCBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkNCg0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggY2hvIHRo4bqleSAqKmtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2EgdOG7tyBs4buHIHNpbmggdmnDqm4gbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpIHbDoCBt4buRYyBnaeG6oyDEkeG7i25oIDUwJSoqLiBW4bubaSB04bu3IGzhu4cgbeG6q3UgbMOgIDUxLjMlIHbDoCBraG/huqNuZyB0aW4gY+G6rXkga2jDoSBo4bq5cCwgdGEgY8OzIHRo4buDIGvhur90IGx14bqtbiBy4bqxbmcgKip04bu3IGzhu4cgc2luaCB2acOqbiBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkgbMOgIHjhuqVwIHjhu4kgNTAlKioNCg0KRMO5IG3hu6ljIMSR4buZIGxvIGzhuq9uZyBraMO0bmcgY2jDqm5oIGzhu4djaCDEkcOhbmcga+G7gyB24bubaSBnaeG6oyDEkeG7i25oIHRydW5nIGzhuq1wLCDEkWnhu4F1IG7DoHkgduG6q24gY2hvIHRo4bqleSBy4bqxbmcgKipj4bupIG3hu5dpIDIgc2luaCB2acOqbiB0aMOsIGPDsyAxIG5nxrDhu51pIGPhuqNtIHRo4bqleSBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkqKiwgIMSRw6J5IGzDoCBt4buZdCB04buJIGzhu4cgxJHDoW5nIHF1YW4gdMOibSBraGkgeGVtIHjDqXQgc+G7qWMga2jhu49lIHTDom0gdGjhuqduIHRyb25nIG3DtGkgdHLGsOG7nW5nIGjhu41jIHRy4buxYyB0dXnhur9uLg0KDQotLS0NCg0KIyAqKkMuIE3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgMiBiaeG6v24gxJHhu4tuaCB0w61uaCoqDQoNClRhIGNo4buNbiAyIGPhurdwIGJp4bq/biDEkeG7i25oIHTDrW5oIMSR4buDIHBow6JuIHTDrWNoIGJhbyBn4buTbToNCg0KLSBD4bq3cCBiaeG6v24gKipHZW5kZXIgdsOgIFN0cmVzcyBMZXZlbCoqDQoNCi0gQ+G6t3AgYmnhur9uICoqR2VuZGVyIHbDoCAgQW54aW91cyBCZWZvcmUgRXhhbXMqKg0KDQojIyAqKjEuIELhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgY2jDqW8qKg0KDQojIyMgKioxLjEgQ+G6t3AgYmnhur9uIEdlbmRlciB2w6AgU3RyZXNzIExldmVsKioNCg0KxJDhuqd1IHRpw6puLCB0YSBz4bq9IGzhuq1wIGLhuqNuZyB04bqnbiBz4buRIDIgY2hp4buBdSBjaG8gMiBiaeG6v24gR2VuZGVyIHbDoCBTdHJlc3MgTGV2ZWwuIFZp4buHYyBs4bqtcCBi4bqjbmcgdOG6p24gc+G7kSBz4bq9IGdpw7pwIHRhIHRo4bqleSByw7UgbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyB0cm9uZyB04burbmcgZ2nhu5tpIHTDrW5oLiANCg0KIyMjIyAqKlThuqduIHPhu5EsIFThuqduIHPhu5EgYmnDqm4qKg0KDQpgYGB7cn0NCnRhYmxlKHNtdCRHZW5kZXIsIHNtdCRTdHJlc3MuTGV2ZWwpDQpgYGANCk7hur91IHRyb25nIGLhuqNuZyB04bqnbiBz4buRIHRyw6puIG3DoCB0YSB0w61uaCB04buVbmcgdGhlbyBow6BuZyB2w6AgdGhlbyBj4buZdCB0aMOsIHRhIGfhu41pIGPDoWMgdOG7lW5nIG7DoHkgbMOgICoqdOG6p24gc+G7kSBiacOqbiAtIE1hcmdpbmFsKSoqLiBUYSBz4bq9IHRo4buxYyBoaeG7h24gbmjGsCBzYXU6DQoNCmBgYHtyfQ0KYWRkbWFyZ2lucyh0YWJsZShzbXQkR2VuZGVyLCBzbXQkU3RyZXNzLkxldmVsKSkNCmBgYA0KDQpE4buxYSB0csOqbiBjw6FjIGNvbiBz4buRIGhp4buDbiB0aOG7iywgdGEgY8OzIG3hu5l0IHPhu5Egbmjhuq1uIHjDqXQgbmjGsCBzYXU6DQoNCi0gVuG7gSBz4buRIG5nxrDhu51pIGPDsyAqKm3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgY2FvKiosIG5ow7NtIG7hu68gY8OzIDg1IG5nxrDhu51pLCBuYW0gY8OzIDgxIG5nxrDhu51pLCB2w6AgZ2nhu5tpIHTDrW5oIGtow6FjIGzDoCAxNSBuZ8aw4budaQ0KDQotIMSQ4buRaSB24bubaSAqKm3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgdHJ1bmcgYsOsbmgqKiwgbuG7ryBjw7MgMjMzIG5nxrDhu51pLCBuYW0gMjM5IG5nxrDhu51pLCB2w6AgZ2nhu5tpIHTDrW5oIGtow6FjIGzDoCAyMCBuZ8aw4budaQ0KDQotIFbhu5tpICoqbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyB0aOG6pXAqKiwgbuG7ryB2w6AgbmFtIGPDsyBz4buRIGzGsOG7o25nIGfhuqduIGLhurFuZyBuaGF1IGzhuqduIGzGsOG7o3QgbMOgIDE1NyB2w6AgMTU1LCB0cm9uZyBraGkgZ2nhu5tpIHTDrW5oIGtow6FjIGzDoCAxNSBuZ8aw4budaS4NCg0KLSBDw6FjIGNvbiBz4buRIG7DoHkgY2hvIHRo4bqleSAqKm3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgbMOgIGtow6EgxJHhu4F1IGdp4buvYSBuYW0gdsOgIG7hu68qKiwgdHJvbmcga2hpICoqbmjDs20gZ2nhu5tpIHTDrW5oIGtow6FjIHR1eSDDrXQgbmfGsOG7nWkgaMahbiBuaMawbmcgduG6q24gY8OzIHPhu5EgbMaw4bujbmcgxJHDoW5nIGvhu4MqKiDhu58gdOG6pXQgY+G6oyBjw6FjIG3hu6ljIMSR4buZLg0KDQotICoqQuG6o25nIHThuqduIHPhu5EgYmnDqm4qKiDEkcaw4bujYyBi4buVIHN1bmcgdGjDqm0gKipkw7JuZyB2w6AgY+G7mXQgIlN1bSIqKiwgdOG7qWMgdOG7lW5nIHRoZW8gaMOgbmcgdsOgIGPhu5l0LCBnacO6cCB0YSBoaeG7g3UgdOG7lW5nIHPhu5EgbmfGsOG7nWkg4bufIHThu6tuZyBuaMOzbSBob+G6t2MgdOG7q25nIG3hu6ljIMSR4buZIHN0cmVzcywgcuG6pXQgaOG7r3Ugw61jaCDEkeG7gyB0w61uaCB04bu3IGzhu4cgcGjhuqduIHRyxINtIHbDoCBzbyBzw6FuaCB04buVbmcgdGjhu4MuDQoNCg0KDQojIyMjICoqVOG6p24gc3XhuqV0LCBU4bqnbiBzdeG6pXQgYmnDqm4qKg0KDQpgYGB7cn0NCnByb3AudGFibGUodGFibGUoc210JEdlbmRlciwgc210JFN0cmVzcy5MZXZlbCkpDQpgYGANCg0KYGBge3J9DQphZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoc210JEdlbmRlciwgc210JFN0cmVzcy5MZXZlbCkpKQ0KYGBgDQoNCktoaSB4w6l0IMSR4bq/biB04bqnbiBzdeG6pXQsIHThu6ljIHThu7cgbOG7hyBwaOG6p24gdHLEg20gdHJvbmcgbeG7l2kgbmjDs20gZ2nhu5tpIHTDrW5oLCBjw7MgdGjhu4MgdGjhuqV5IHLhurFuZzoNCg0KLSBU4bu3IGzhu4cgbmfGsOG7nWkgY8OzICoqbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyBjYW8qKiB0cm9uZyAqKm5ow7NtIGdp4bubaSB0w61uaCBraMOhYyBsw6AgxJHDoW5nIGNow7ogw70gbmjhuqV0KiosIGNoaeG6v20gMzAlICgxNS81MCksIHRyb25nIGtoaSB04bu3IGzhu4cgbsOgeSDhu58gbmjDs20gbuG7ryBsw6Aga2hv4bqjbmcgMTcuOSUgKDg1LzQ3NSkgdsOgIOG7nyBuaMOzbSBuYW0gbMOgIDE3LjElICg4MS80NzUpDQoNCi0gVMawxqFuZyB04buxLCoqbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyB0cnVuZyBiw6xuaCoqIGNoaeG6v20ga2hv4bqjbmcgNDklIOG7nyBj4bqjIG5hbSB2w6AgbuG7rywgdsOgIDQwJSDhu58gZ2nhu5tpIHTDrW5oIGtow6FjDQoNCi0gKipN4bupYyDEkeG7mSBjxINuZyB0aOG6s25nIHRo4bqlcCoqIGNoaeG6v20ga2hv4bqjbmcgMzItMzMlIOG7nyBuYW0gdsOgIG7hu68sIHRyb25nIGtoaSDhu58gZ2nhu5tpIHTDrW5oIGtow6FjIGzDoCAzMCUuIA0KDQotIEPDoWMgdOG7tyBs4buHIG7DoHkgY2hvIHRo4bqleSBy4bqxbmcgbeG6t2MgZMO5ICoqc+G7kSBsxrDhu6NuZyBuZ8aw4budaSB0aHXhu5ljIG5ow7NtIGdp4bubaSB0w61uaCBraMOhYyDDrXQgaMahbioqLCAqKmjhu40gbOG6oWkgY8OzIHh1IGjGsOG7m25nIMSR4buRaSBt4bq3dCB24bubaSBt4bupYyDEkeG7mSBjxINuZyB0aOG6s25nIGNhbyBoxqFuKiogc28gduG7m2kgY8OhYyBuaMOzbSBjw7JuIGzhuqFpLiDEkGnhu4F1IG7DoHkgbMOgIGThuqV1IGhp4buHdSDEkcOhbmcgcXVhbiB0w6JtIHRyb25nIHZp4buHYyB0aGnhur90IGvhur8gY8OhYyBiaeG7h24gcGjDoXAgaOG7lyB0cuG7oyB0w6JtIGzDvSBwaMO5IGjhu6NwIGNobyB04burbmcgbmjDs20gZ2nhu5tpIHTDrW5oLg0KDQoNCiMjIyMgKipUcuG7sWMgcXVhbiBow7NhKioNCg0KVGEgY8OzIHRo4buDIHRy4buxYyBxdWFuIGjDs2Ega+G6v3QgcXXhuqMgdGjDoG5oIGJp4buDdSDEkeG7kyBj4buZdCDEkcO0aSBuaMawIHNhdToNCg0KYGBge3J9DQpnZ3Bsb3Qoc210ICU+JSBncm91cF9ieShHZW5kZXIsIFN0cmVzcy5MZXZlbCkgJT4lIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lIHVuZ3JvdXAoKSwgYWVzKHggPSBHZW5kZXIsIHkgPSBjb3VudCwgZmlsbCA9IFN0cmVzcy5MZXZlbCkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb3VudCksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLCB2anVzdCA9IC0wLjUpICsNCiAgbGFicyh0aXRsZSA9ICJN4bupYyDEkeG7mSBjxINuZyB0aOG6s25nIHRyb25nIG3hu5dpIGdp4bubaSB0w61uaCIsIHkgPSAiU+G7kSBsxrDhu6NuZyIsIHggPSAiR2nhu5tpIHTDrW5oIikNCmBgYA0KDQojIyMgKioxLjIgQ+G6t3AgYmnhur9uIEdlbmRlciB2w6AgQW54aW91cyBCZWZvcmUgRXhhbXMqKg0KDQpUaeG6v3AgdGhlbywgdGEgc+G6vSBs4bqtcCBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0IDIgY2hp4buBdSBjaG8gMiBiaeG6v24gR2VuZGVyIHbDoCBBbnhpb3VzIEJlZm9yZSBFeGFtcy4gTGnhu4d1IHLhurFuZyB0cm9uZyBt4buXaSBnaeG7m2kgdMOtbmggdGjDrCBz4bq9IGPDsyBiYW8gbmhpw6p1IG5nxrDhu51pIGPhuqNtIHRo4bqleSBjxINuZyB0aOG6s25nIHRyxrDhu5tjIGvhu7MgdGhpDQoNCiMjIyMgKipU4bqnbiBz4buRLCBU4bqnbiBz4buRIGJpw6puKioNCg0KYGBge3J9DQp0YWJsZShzbXQkR2VuZGVyLCBzbXQkQW54aW91cy5CZWZvcmUuRXhhbXMpDQpgYGANCg0KYGBge3J9DQphZGRtYXJnaW5zKHRhYmxlKHNtdCRHZW5kZXIsIHNtdCRBbnhpb3VzLkJlZm9yZS5FeGFtcykpDQpgYGANCg0KVOG7qyBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc+G7kSBiacOqbiwgdGEgY8OzIG3hu5l0IHPhu5Egbmjhuq1uIHjDqXQgc2F1Og0KDQotIFRyb25nICoqdOG7lW5nIHPhu5EgNDc1IG7hu68qKiwgY8OzICoqMjU1IG5nxrDhu51pIGPhuqNtIHRo4bqleSBsbyBs4bqvbmcqKiB0csaw4bubYyBr4buzIHRoaSwgY2FvIGjGoW4gbeG7mXQgY2jDunQgKipzbyB24bubaSAyMjAgbmfGsOG7nWkgY8OybiBs4bqhaSoqIGtow7RuZyBj4bqjbSB0aOG6pXkgbG8gbOG6r25nLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSAqKmjGoW4gbeG7mXQgbuG7rWEgc+G7kSBu4buvIHNpbmggdHJvbmcga2jhuqNvIHPDoXQgY8OzIGJp4buDdSBoaeG7h24gYuG6pXQgYW4gaG/hurdjIMOhcCBs4buxYyoqIHRyxrDhu5tjIGPDoWMga+G7syBraeG7g20gdHJhDQoNCi0gQ8WpbmcgduG7m2kgdOG7lW5nIHPhu5EgNDc1IG5hbSwgc+G7kSBuZ8aw4budaSBj4bqjbSB0aOG6pXkgKipjxINuZyB0aOG6s25nIHRyxrDhu5tjIGvhu7MgdGhpIGzDoCAyMzYgbmfGsOG7nWkqKiwgZ+G6p24gbmjGsCBuZ2FuZyBi4bqxbmcgduG7m2kgKioyMzkgbmfGsOG7nWkga2jDtG5nIGPhuqNtIHRo4bqleSBsbyBs4bqvbmcqKi4gVOG7tyBs4buHIG7DoHkgKipraMOhIGPDom4gYuG6sW5nIHbDoCB0aOG6pXAgaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBuaMOzbSBu4buvKiosIGNobyB0aOG6pXkgbmFtIGdp4bubaSBjw7MgeHUgaMaw4bubbmcgw610IGxvIGzhuq9uZyBoxqFuDQoNCi0gVHJvbmcgKio1MCBuZ8aw4budaSB0aHXhu5ljIGdp4bubaSB0w61uaCBraMOhYyoqLCBjw7MgKioyMiBuZ8aw4budaSBj4bqjbSB0aOG6pXkgbG8gbOG6r25nKiogdHLGsOG7m2Mga+G7syB0aGksIHRyb25nIGtoaSAqKjI4IG5nxrDhu51pIGtow7RuZyBsbyBs4bqvbmcqKi4gU28gduG7m2kgbmFtIHbDoCBu4buvLCAqKm5ow7NtIG7DoHkgY8OzIHThu7cgbOG7hyBsbyBs4bqvbmcgdGjhuqVwIG5o4bqldCoqDQoNCg0KIyMjIyAqKlThuqduIHN14bqldCwgVOG6p24gc3XhuqV0IGJpw6puKioNCg0KYGBge3J9DQpwcm9wLnRhYmxlKHRhYmxlKHNtdCRHZW5kZXIsIHNtdCRBbnhpb3VzLkJlZm9yZS5FeGFtcykpDQpgYGANCg0KYGBge3J9DQphZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoc210JEdlbmRlciwgc210JEFueGlvdXMuQmVmb3JlLkV4YW1zKSkpDQpgYGANCg0KDQotICoqTuG7ryBnaeG7m2kgbMOgIG5ow7NtIGPDsyB04bu3IGzhu4cgbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpIGNhbyBuaOG6pXQqKiB0cm9uZyB0b8OgbiBi4buZIG3huqt1LCBjaGnhur9tIDI1LjUlIG3huqt1IGto4bqjbyBzw6F0LCBjYW8gaMahbiBzbyB24bubaSBuYW0gZ2nhu5tpICgyMy42JSkgdsOgIGdp4bubaSB0w61uaCBraMOhYyAoMi4yJSkuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG7hu68gZ2nhu5tpIGThu4UgYuG7iyBjxINuZyB0aOG6s25nIGjGoW4gdHLGsOG7m2Mga+G7syB0aGkuDQoNCi0gTmfGsOG7o2MgbOG6oWksICoqbmFtIGdp4bubaSBs4bqhaSBjw7MgdOG7tyBs4buHIGtow7RuZyBsbyBs4bqvbmcgY2FvIG5o4bqldCoqLCBjaGnhur9tIDIzLjklIG3huqt1LCBuaOG7iW5oIGjGoW4gbuG7ryAoMjIuMCUpIHbDoCBnaeG7m2kgdMOtbmgga2jDoWMgKDIuOCUpLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBuYW0gZ2nhu5tpIGPDsyB4dSBoxrDhu5tuZyDhu5VuIMSR4buLbmggdMOibSBsw70gaMahbiBt4buZdCBjaMO6dCB0cm9uZyBr4buzIHRoaS4NCg0KLSBU4buVbmcgdOG7tyBs4buHICoqbmjhu69uZyBuZ8aw4budaSBj4bqjbSB0aOG6pXkgbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpIGNoaeG6v20gaMahbiBu4butYSBt4bqrdSBraOG6o28gc8OhdCAoNTEuMyUpKiosIGNobyB0aOG6pXkgxJHDonkgbMOgIG3hu5l0IHbhuqVuIMSR4buBIHBo4buVIGJp4bq/biB2w6AgY+G6p24gxJHGsOG7o2MgcXVhbiB0w6JtIHRyb25nIHRvw6BuIGLhu5kgc2luaCB2acOqbi4NCg0KIyMjIyAqKlRy4buxYyBxdWFuIGjDs2EqKg0KDQpUYSBjw7MgdGjhu4MgdHLhu7FjIHF1YW4gaMOzYSBr4bq/dCBxdeG6oyB0aMOgbmggYmnhu4N1IMSR4buTIGPhu5l0IMSRw7RpIG5oxrAgc2F1Og0KDQoNCmBgYHtyfQ0KZ2dwbG90KHNtdCAlPiUgZ3JvdXBfYnkoR2VuZGVyLCBBbnhpb3VzLkJlZm9yZS5FeGFtcykgJT4lIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lIG11dGF0ZSh0b3RhbCA9IHN1bShjb3VudCksIHBjdCA9IGNvdW50IC8gdG90YWwpICU+JSB1bmdyb3VwKCksIGFlcyh4ID0gR2VuZGVyLCB5ID0gcGN0LCBmaWxsID0gQW54aW91cy5CZWZvcmUuRXhhbXMpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpwZXJjZW50KHBjdCwgYWNjdXJhY3kgPSAwLjEpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLCB2anVzdCA9IC0wLjMsIHNpemUgPSAzKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnRfZm9ybWF0KCkpICsNCiAgbGFicyh0aXRsZSA9ICJU4bu3IGzhu4cgbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpIOG7nyBjw6FjIGdp4bubaSB0w61uaCIsDQogICAgICAgeSA9ICJU4bu3IGzhu4ciLA0KICAgICAgIHggPSAiR2nhu5tpIHTDrW5oIikNCmBgYA0KDQoNCiMjICoqMi4gS2nhu4NtIMSR4buLbmggQ2hpLWLDrG5oIHBoxrDGoW5nKioNCg0KIyMjICoqMi4xIEPhurdwIGJp4bq/biBHZW5kZXIgdsOgIFN0cmVzcyBMZXZlbCoqDQoNClRhIHRo4buxYyBoaeG7h24ga2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZWQgbmjGsCBzYXU6DQoNCmBgYHtyfQ0KY2hpc3EudGVzdCh0YWJsZShzbXQkR2VuZGVyLCBzbXQkU3RyZXNzLkxldmVsKSkNCmBgYA0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oOioqDQoNCi0gKipHaeG6oyB0aHV54bq/dCBraMO0bmcgSDAqKjogS2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBnaeG7m2kgdMOtbmggdsOgIG3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcsIGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wIG5oYXUuDQoNCi0gKipHaeG6oyB0aHV54bq/dCDEkeG7kWkgSDEqKjogQ8OzIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGdp4bubaSB0w61uaCB2w6AgbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZywgaGFpIGJp4bq/biBraMO0bmcgxJHhu5ljIGzhuq1wLg0KDQoqKkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oOioqDQoNCi0gWC1zcXVhcmVkID0gNS4zMjM1DQoNCi0gU+G7kSBi4bqtYyB04buxIGRvIGRmID0gNA0KDQotIEdpw6EgdHLhu4sgKipwLXZhbHVlID0gMC4yNTU3KioNCg0KKipL4bq/dCBsdeG6rW46KiogVsOsICoqcC12YWx1ZSA9IDAuMjU1NyA+IDAuMDUqKiwgKipraMO0bmcgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGgwKiouIERvIMSRw7MsIGtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBnaeG7m2kgdMOtbmggdsOgIG3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcuDQoNClRyb25nIGto4bqjbyBzw6F0IG7DoHksIGdp4bubaSB0w61uaCBraMO0bmcg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIG3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgY+G7p2EgbmfGsOG7nWkgdGhhbSBnaWEuIEPDsyB0aOG7gyBjw6FjIHnhur91IHThu5Ega2jDoWMgKGtow7RuZyBwaOG6o2kgZ2nhu5tpIHTDrW5oKSBt4bubaSBsw6Agbmd1ecOqbiBuaMOibiDhuqNuaCBoxrDhu59uZyDEkeG6v24gbeG7qWMgxJHhu5kgc3RyZXNzLg0KDQojIyMgKioyLjIgQ+G6t3AgYmnhur9uIEdlbmRlciB2w6AgQW54aW91cyBCZWZvcmUgRXhhbXMqKg0KDQpUxrDGoW5nIHThu7EgY+G6t3AgYmnhur9uIHRyw6puLCB0YSBjxaluZyBjw7Mga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZWQgIGPhu6dhIEdlbmRlciB2w6AgQW54aW91cyBCZWZvcmUgRXhhbXMgbmjGsCBzYXU6DQoNCmBgYHtyfQ0KY2hpc3EudGVzdCh0YWJsZShzbXQkR2VuZGVyLCBzbXQkQW54aW91cy5CZWZvcmUuRXhhbXMpKQ0KYGBgDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSAqKkdp4bqjIHRodXnhur90IGtow7RuZyBIMCoqOiBLaMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGdp4bubaSB0w61uaCB2w6AgY+G6o20gZ2nDoWMgbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpLg0KDQotICoqR2nhuqMgdGh1eeG6v3QgxJHhu5FpIEgxKio6IEPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBnaeG7m2kgdMOtbmggdsOgIGPhuqNtIGdpw6FjIGxvIGzhuq9uZyB0csaw4bubYyBr4buzIHRoaS4NCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDoqKg0KDQotIFgtc3F1YXJlZCA9IDIuNjQzNw0KDQotIFPhu5EgYuG6rWMgdOG7sSBkbyBkZiA9IDINCg0KLSBHacOhIHRy4buLICoqcC12YWx1ZSA9IDAuMjY2NioqDQoNCioqS+G6v3QgbHXhuq1uOioqIFbDrCAqKnAtdmFsdWUgPSAwLjI2NjYgPiAwLjA1KiosICoqa2jDtG5nIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBoMCoqLiBWw6wgdGjhur8sIGdp4bubaSB0w61uaCB2w6Agc+G7sSBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkga2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oNCg0KKipD4bqjIDIga2nhu4NtIMSR4buLbmggxJHhu4F1IGNobyByYSBwLXZhbHVlID4gMC4wNSoqLCBuw6puIGtow7RuZyBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyAqKmdp4bubaSB0w61uaCDhuqNuaCBoxrDhu59uZyDEkeG6v24gbeG7qWMgxJHhu5kgc3RyZXNzIGhheSBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkgdHJvbmcgbeG6q3UgZOG7ryBsaeG7h3UgbsOgeS4qKiDEkGnhu4F1IG7DoHkgY8OzIHRo4buDIGfhu6NpIMO9IHLhurFuZyBjw6FjIGNoxrDGoW5nIHRyw6xuaCBnaeG6o20gY8SDbmcgdGjhurNuZyBoYXkgaOG7lyB0cuG7oyB0w6JtIGzDvSBuw6puIGjGsOG7m25nIMSR4bq/biB04bqldCBj4bqjIHNpbmggdmnDqm4sIGtow7RuZyBwaMOibiBiaeG7h3QgZ2nhu5tpIHTDrW5oLg0KDQojIyAqKjMuIFThu7cgc+G7kSBuZ3V5IGPGoSBSZWxhdGl2ZSBSaXNrKioNCg0KIyMjICoqMy4xIEPhurdwIGJp4bq/biBHZW5kZXIgdsOgIFN0cmVzcyBsZXZlbCoqDQoNClRyb25nIHRo4buRbmcga8OqLCBSZWxhdGl2ZSBSaXNrIChSUikgY2jhu4kgxJHGsOG7o2MgxJHhu4tuaCBuZ2jEqWEgcsO1IHLDoG5nIGNobyBi4bqjbmcgMngyLCBuw6puIHbDrCB0aOG6vyB0YSBjaOG7iSB4w6l0ICoqZ2nhu5tpIHTDrW5oIE5hbS8gTuG7ryoqIHbDoCAqKm3hu6ljIFN0cmVzcyBDYW8vIFRo4bqlcCoqLiBUYSB0aeG6v24gaMOgbmggbOG7jWMgbOG6oWkgZOG7ryBsaeG7h3UgbmjGsCBzYXU6DQoNCmBgYHtyfQ0KR2VuX1N0cmVzcyA8LSBzdWJzZXQoc210LCBHZW5kZXIgJWluJSBjKCJNYWxlIiwgIkZlbWFsZSIpICYgU3RyZXNzLkxldmVsICVpbiUgYygiSGlnaCIsICJMb3ciKSkNCg0KdGFibGUoR2VuX1N0cmVzcyRHZW5kZXIsIEdlbl9TdHJlc3MkU3RyZXNzLkxldmVsKQ0KYGBgDQpgYGB7cn0NClJlbFJpc2sodGFibGUoR2VuX1N0cmVzcyRHZW5kZXIsIEdlbl9TdHJlc3MkU3RyZXNzLkxldmVsKSkNCmBgYA0KDQpTYXUga2hpIGzhu41jIGThu68gbGnhu4d1IMSR4buDIGNo4buJIHjDqXQgKipoYWkgbmjDs20gZ2nhu5tpIHTDrW5oIE5hbSB2w6AgTuG7ryoqIHbDoCAqKmhhaSBt4bupYyDEkeG7mSBjxINuZyB0aOG6s25nIENhbyB2w6AgVGjhuqVwKiosIGvhur90IHF14bqjIHTDrW5oIHRvw6FuIFJlbGF0aXZlIFJpc2sgY2hvIHRo4bqleToNCg0KLSBIw6BtIGBSZWxSaXNrKClgIHRy4bqjIHbhu4EgZ2nDoSB0cuG7iyAxLjAyMzM2NSwgxJHDonkgbMOgICoqdOG7tyBz4buRIG5ndXkgY8ahIGPhu6dhIG7hu68gZ2nhu5tpIHNvIHbhu5tpIG5hbSBnaeG7m2kgduG7gSB2aeG7h2MgdHLhuqNpIHF1YSBt4bupYyDEkeG7mSBjxINuZyB0aOG6s25nIGNhbyoqLg0KDQotICoqR2nDoSB0cuG7iyBSUiA9IDEuMDIzKiogbmdoxKlhIGzDoCAqKm7hu68gZ2nhu5tpIGPDsyBuZ3V5IGPGoSBi4buLIGPEg25nIHRo4bqzbmcgY2FvIGNhbyBoxqFuIG5hbSBnaeG7m2kga2hv4bqjbmcgMi4zJSoqIHRyb25nIGLhu5FpIGPhuqNuaCBo4buNYyB04bqtcCB0cuG7sWMgdHV54bq/bg0KDQotIFR1eSBuaGnDqm4sICoqZ2nDoSB0cuG7iyBuw6B5IHLhuqV0IGfhuqduIDEqKiwgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCB24buBIG5ndXkgY8ahIGdp4buvYSBoYWkgZ2nhu5tpIGtow7RuZyDEkcOhbmcga+G7gy4gTsOzaSBjw6FjaCBraMOhYywgKipraMO0bmcgY8OzIGLhurFuZyBjaOG7qW5nIHLDtSByw6BuZyoqIGNobyB0aOG6pXkgKipnaeG7m2kgdMOtbmggbMOgIHnhur91IHThu5EgcXV54bq/dCDEkeG7i25oIG3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcqKiB0cm9uZyBt4bqrdSBraOG6o28gc8OhdCBuw6B5Lg0KDQotIMSQaeG7gXUgbsOgeSAqKnBow7kgaOG7o3AgduG7m2kga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZWQgdHLGsOG7m2MgxJHDsyoqLCB24buRbiBjxaluZyBjaG8gdGjhuqV5IGtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIGdp4buvYSBnaeG7m2kgdMOtbmggdsOgIG3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcuDQoNCk3hurdjIGTDuSBu4buvIGdp4bubaSBjw7MgY2jhu4kgc+G7kSBSUiBuaOG7iW5oIGjGoW4gbeG7mXQgY2jDunQsIG5oxrBuZyB2w6wgc+G7sSBjaMOqbmggbOG7h2NoIG5o4buPLCB0YSBraMO0bmcgbsOqbiBr4bq/dCBsdeG6rW4gduG7mWkgcuG6sW5nIG7hu68gZ2nhu5tpIGNo4buLdSBjxINuZyB0aOG6s25nIGNhbyBoxqFuLiBL4bq/dCBxdeG6oyBuw6B5IGPDsyB0aOG7gyBjaG8gdGjhuqV5IHLhurFuZyBj4bqjIG5hbSB2w6AgbuG7ryDEkeG7gXUgY2jhu4t1IOG6o25oIGjGsOG7n25nIGfhuqduIG5oxrAgdMawxqFuZyDEkcawxqFuZyB04burIGjhu41jIHRy4buxYyB0dXnhur9uLg0KDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKHRhYmxlKEdlbl9TdHJlc3MkR2VuZGVyLCBHZW5fU3RyZXNzJFN0cmVzcy5MZXZlbCkpDQpgYGANCg0KVGEgY8OzIHRo4buDIGdp4bqjaSB0aMOtY2gga+G6v3QgcXXhuqMgbmjGsCBzYXU6DQoNCioqVOG7tyBz4buRIG5ndXkgY8ahIChSaXNrIFJhdGlvKSB24bubaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlKioNCg0KLSAqKlJSID0gMS4wMTIzNjEqKiBOYW0gZ2nhu5tpIGPDsyBt4bupYyBzdHJlc3MgdGjhuqVwIGNhbyBoxqFuIG3hu5l0IGNow7p0IHNvIHbhu5tpIG7hu68gZ2nhu5tpLCBoYXkgbsOzaSBjw6FjaCBraMOhYyBsw6AgKipOYW0gZ2nhu5tpIGPDsyB4dSBoxrDhu5tuZyDDrXQgYuG7iyBzdHJlc3MgaMahbiBu4buvIGdp4bubaSBt4buZdCBjaMO6dCoqLCBuaMawbmcgc+G7sSBraMOhYyBiaeG7h3QgbsOgeSBy4bqldCBuaOG7jy4NCg0KLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlOiAqKlswLjg4ODM7IDEuMTUzOF0qKiBiYW8gZ+G7k20gZ2nDoSB0cuG7iyAxKiosIMSRaeG7gXUgbsOgeSBjaG8gdGjhuqV5ICoqa2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBoYWkgZ2nhu5tpIHbhu4EgbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZyBjYW8qKi4NCg0KKipLaeG7g20gxJHhu4tuaCDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKHAtdmFsdWUpKioNCg0KLSBDw6FjICoqcC12YWx1ZSDEkeG7gXUgbOG7m24gaMahbiAwLjA1KioNCg0KLSDEkGnhu4F1IG7DoHkgxJHhu5NuZyBuZ2jEqWEgduG7m2kga2jDtG5nIGPDsyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgcuG6sW5nICoqbmd1eSBjxqEgY8SDbmcgdGjhurNuZyB0aOG6pXAgbMOgIG5oxrAgbmhhdSBnaeG7r2EgbmFtIHbDoCBu4buvKiouDQoNCkRvIMSRw7MsIGPDoWMgYmnhu4duIHBow6FwIGjhu5cgdHLhu6Mgc+G7qWMga2jhu49lIHRpbmggdGjhuqduIHRyb25nIGdpw6FvIGThu6VjIMSR4bqhaSBo4buNYyBuw6puIMSRxrDhu6NjIHRoaeG6v3Qga+G6vyB0csOqbiBjxqEgc+G7nyBiYW8gcXXDoXQsIGtow7RuZyDGsHUgdGnDqm4gbeG7mXQgZ2nhu5tpIG7DoG8gY+G7pSB0aOG7gyBtw6AgY+G6p24gdOG6rXAgdHJ1bmcgdsOgbyBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgY2h1bmcgbmjGsCDEkWnhu4F1IGtp4buHbiBo4buNYyB04bqtcCwga2jhuqMgbsSDbmcgdGjDrWNoIG5naGkgduG7m2kgY8O0bmcgbmdo4buHLCB2w6AgaOG7lyB0cuG7oyB4w6MgaOG7mWkuDQoNCg0KIyMjICoqMy4yIEPhurdwIGJp4bq/biBHZW5kZXIgdsOgIEFueGlvdXMgQmVmb3JlIEV4YW1zKioNCg0KVMawxqFuZyB04buxIHbhu5tpIGPhurdwIGJp4bq/biB0csOqbiwgdGEgY8Wpbmcgc+G6vSB0aeG6v24gaMOgbmggbOG7jWMgZOG7ryBsaeG7h3UgxJHhu4MgY8OzIHRo4buDIHRp4bq/biBow6BuaCB0w61uaCB0b8OhbiBSUi4gVGEgY8Wpbmcgc+G6vSAqKmNo4buJIHjDqXQgdHLDqm4gZ2nhu5tpIHTDrW5oIG5hbSB2w6AgbuG7ryoqIChraMO0bmcgY8OzIGdp4bubaSB0w61uaCBraMOhYykNCg0KVGEgbOG7jWMgbOG6oWkgZOG7ryBsaeG7h3UgdsOgIHTDrW5oIHRvw6FuIG5oxrAgc2F1Og0KDQpgYGB7cn0NCkdlbl9BbnggPC0gc3Vic2V0KHNtdCwgR2VuZGVyICVpbiUgYygiTWFsZSIsICJGZW1hbGUiKSkNCg0KdGFibGUoR2VuX0FueCRHZW5kZXIsIEdlbl9BbngkQW54aW91cy5CZWZvcmUuRXhhbXMpDQpgYGANCg0KYGBge3J9DQpSZWxSaXNrKHRhYmxlKEdlbl9BbngkR2VuZGVyLCBHZW5fQW54JEFueGlvdXMuQmVmb3JlLkV4YW1zKSkNCmBgYA0KDQpUYSBkaeG7hW4gZ2nhuqNpIGvhur90IHF14bqjIGdpw6EgdHLhu4sgUlIgPSAwLjkyIG5oxrAgc2F1Og0KDQotICoqTmFtIGdp4bubaSBjw7Mgbmd1eSBjxqEgbG8gbOG6r25nIHRyxrDhu5tjIGvhu7MgdGhpIHRo4bqlcCBoxqFuIGtob+G6o25nIDglIHNvIHbhu5tpIG7hu68gZ2nhu5tpKiosIE7Ds2kgY8OhY2gga2jDoWMsIG5hbSDDrXQgY8OzIGto4bqjIG7Eg25nIGxvIGzhuq9uZyB0csaw4bubYyBr4buzIHRoaSBoxqFuIG7hu68uDQoNCi0gKipSUiA8IDEqKiDihpIgxJHDonkgbMOgIGThuqV1IGhp4buHdSBjaG8gdGjhuqV5ICoqbmFtIGdp4bubaSDDrXQgbG8gbOG6r25nIGjGoW4gbuG7ryBnaeG7m2kqKiB0csaw4bubYyBr4buzIHRoaS4NCg0KLSBUdXkgbmhpw6puLCBSUiA9IDAuOTIgbMOgIG3hu5l0ICoqY29uIHPhu5EgZ+G6p24gYuG6sW5nIDEqKiwgdsOsIHbhuq15ICoqbeG7qWMgxJHhu5kgY2jDqm5oIGzhu4djaCBsw6Aga2jDtG5nIMSRw6FuZyBr4buDIHbhu4EgbeG6t3QgdGjhu7FjIHRp4buFbi4qKg0KDQpN4bupYyDEkeG7mSBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkgZ2nhu69hIGhhaSBnaeG7m2kgY2hvIHRo4bqleSBy4bqxbmcgKipuYW0gZ2nhu5tpIGPDsyBuZ3V5IGPGoSB0cuG6o2kgcXVhIGPhuqNtIGdpw6FjIGxvIGzhuq9uZyB0aOG6pXAgaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBu4buvIGdp4bubaSoqIChSUiA9IDAuOTIpLiBUdXkgbmhpw6puLCBz4buxIGtow6FjIGJp4buHdCBjaOG7iSDhu58gKipt4bupYyA4JSB2w6Aga2jDtG5nIHF1w6EgbOG7m24qKiDEkeG7gyDEkcawYSByYSBr4bq/dCBsdeG6rW4gY2jhuq9jIGNo4bqvbiB24buBIG3hu5FpIGxpw6puIGjhu4cgbeG6oW5oIGdp4buvYSBnaeG7m2kgdMOtbmggdsOgIGPhuqNtIGdpw6FjIGxvIMOidSB0csaw4bubYyBr4buzIHRoaS4gDQoNCkvhur90IHF14bqjIG7DoHkgcGjhuqNuIMOhbmggbeG7mXQgeHUgaMaw4bubbmcgdGjGsOG7nW5nIHRo4bqleSB0cm9uZyBuaGnhu4F1IG5naGnDqm4gY+G7qXUgdHLGsOG7m2MgxJHDonksIHLhurFuZyBu4buvIHNpbmggY8OzIHRo4buDIGPhuqNtIG5o4bqtbiB2w6AgcGjhuqNuIOG7qW5nIHbhu5tpIMOhcCBs4buxYyB0aGkgY+G7rSBuaOG6oXkgY+G6o20gaMahbi4gVHV5IHbhuq15LCB2w6wgdOG7tyBz4buRIG5ndXkgY8ahIGtow6EgZ+G6p24gduG7m2kgMSwgbsOqbiBr4bq/dCBsdeG6rW4gbWFuZyB0w61uaCB0aOG6rW4gdHLhu41uZyBsw6Agc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSBnaeG7m2kgbMOgIGPDsyB0aOG7gyBjw7MgbmjGsG5nIGtow7RuZyByw7UgcsOgbmcuDQoNCg0KDQpgYGB7cn0NCnJpc2tyYXRpbyh0YWJsZShHZW5fQW54JEdlbmRlciwgR2VuX0FueCRBbnhpb3VzLkJlZm9yZS5FeGFtcykpDQpgYGANCg0KVGEgY8OzIHRo4buDIGdp4bqjaSB0aMOtY2gga+G6v3QgcXXhuqMgbmjGsCBzYXU6DQoNCioqVOG7tyBz4buRIG5ndXkgY8ahIChSaXNrIFJhdGlvKSB24bubaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlKioNCg0KLSAqKlJSID0gMC45MjUqKiBuZ2jEqWEgbMOgICoqbmFtIGdp4bubaSBjw7Mgbmd1eSBjxqEgY+G6o20gdGjhuqV5IGxvIGzhuq9uZyB0csaw4bubYyBr4buzIHRoaSB0aOG6pXAgaMahbiBu4buvIGdp4bubaSBraG/huqNuZyA3LjUlLioqDQoNCi0gRG8gZ2nDoSB0cuG7iyA8IDEsIHRhIGhp4buDdSBy4bqxbmcgZ2nhu5tpIHTDrW5oIG5hbSBjw7MgbeG7qWMgbmd1eSBjxqEgdGjhuqVwIGjGoW4gc28gduG7m2kgbuG7ryAodOG7qWMgbuG7ryBjw7Mgbmd1eSBjxqEgY2FvIGjGoW4gbeG7mXQgY2jDunQpDQoNCi0gS2hv4bqjbmcgdGluIGPhuq15IDk1JSAqKlswLjgxODI0OTk7IDEuMDQ2Nzg2XSoqIGJhbyBn4buTbSBnacOhIHRy4buLIDEqKiwgxJHhu5NuZyBuZ2jEqWEgKipraMO0bmcgY8OzIGLhurFuZyBjaOG7qW5nKiogdGjhu5FuZyBrw6ogxJHhu6cgbeG6oW5oIMSR4buDIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgbmd1eSBjxqEgbG8gbOG6r25nICoqdGjhu7FjIHPhu7Ega2jDoWMgYmnhu4d0KiogZ2nhu69hIG5hbSB2w6AgbuG7ry4NCiAgIA0KKipLaeG7g20gxJHhu4tuaCDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKHAtdmFsdWUpKioNCg0KLSBN4buNaSBnacOhIHRy4buLICoqcCDEkeG7gXUgbOG7m24gaMahbiA+IDAuMDUqKiDihpIgKipLaMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCoqIHLhurFuZyAqKm5ndXkgY8ahIGxvIGzhuq9uZyBsw6AgbmjGsCBuaGF1IGdp4buvYSBoYWkgZ2nhu5tpLioqDQoNCsSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5LCBt4bq3YyBkw7kgbuG7ryBnaeG7m2kgY8OzIHThu7cgbOG7hyBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkgY2FvIGjGoW4gbeG7mXQgY2jDunQgc28gduG7m2kgbmFtIGdp4bubaSwgbmjGsG5nIHPhu7Ega2jDoWMgYmnhu4d0IMSRw7MgY8OzIHRo4buDIGzDoCBkbyBuZ+G6q3Ugbmhpw6puIHbDoCBraMO0bmcgxJHDoW5nIGvhu4MgduG7gSBt4bq3dCB0aOG7kW5nIGvDqi4gRG8gxJHDsywgdHJvbmcgcXXDoSB0csOsbmggdGhp4bq/dCBr4bq/IGPDoWMgY2jGsMahbmcgdHLDrG5oIGjhu5cgdHLhu6MgdMOibSBsw70gaOG7jWMgxJHGsOG7nW5nLCBraMO0bmcgbsOqbiBjaOG7iSB04bqtcCB0cnVuZyByacOqbmcgdsOgbyBnaeG7m2kgdMOtbmggbcOgIGPhuqduIGjGsOG7m25nIMSR4bq/biB0b8OgbiB0aOG7gyBzaW5oIHZpw6puLCB2w6wgY+G6oyBuYW0gdsOgIG7hu68gxJHhu4F1IGPDsyBt4bupYyDEkeG7mSBsbyBs4bqvbmcgdMawxqFuZyDEkeG7kWkgZ2nhu5FuZyBuaGF1Lg0KDQojIyAqKjQuIFThu7cgc+G7kSBjaMOqbmggT2RkcyBSYXRpbyoqDQoNCiMjIyAqKjMuMSBD4bq3cCBiaeG6v24gR2VuZGVyIHbDoCBTdHJlc3MgbGV2ZWwqKg0KDQpgYGB7cn0NCm9kZHNyYXRpbyh0YWJsZShHZW5fU3RyZXNzJEdlbmRlciwgR2VuX1N0cmVzcyRTdHJlc3MuTGV2ZWwpKQ0KYGBgDQoNCkRp4buFbiBnaeG6o2kgKipU4bu3IHPhu5EgY2jDqm5oIE9kZHMgUmF0aW8gLSBPUioqIG5oxrAgc2F1Og0KDQotIE9SID0gMS4wMzYsICoqbmFtIGdp4bubaSBjw7Mga2jhuqMgbsSDbmcgYuG7iyBjxINuZyB0aOG6s25nIGNhbyBoxqFuIG7hu68gZ2nhu5tpIGtob+G6o25nIDMuNTglKiosIG7hur91IHjDqXQgdGhlbyB04bu3IGzhu4cgY2jDqm5oIGdp4buvYSBuaMOzbSBjxINuZyB0aOG6s25nIGNhbyB2w6AgdGjhuqVwLg0KDQotIFbDrCAqKk9SIHLhuqV0IGfhuqduIDEqKiwgY2jDqm5oIGzhu4djaCBy4bqldCBuaOG7jywgY2hvIHRo4bqleSBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHRyb25nIHjDoWMgc3XhuqV0IGLhu4sgY8SDbmcgdGjhurNuZyBnaeG7r2EgbmFtIHbDoCBu4buvLg0KDQotICoqS2hv4bqjbmcgdGluIGPhuq15IDk1JToqKiBbMC43MTAxOTQ2OyAxLjUxMTYzXSBiYW8gZ+G7k20gZ2nDoSB0cuG7iyAxLjAsIHRhIGhp4buDdSBy4bqxbmcga2jDtG5nIGPDsyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiDEkeG7pyBt4bqhbmggxJHhu4Mga2jhurNuZyDEkeG7i25oIHPhu7Ega2jDoWMgYmnhu4d0IHRo4bqtdCBz4buxIGdp4buvYSBoYWkgZ2nhu5tpIHTDrW5oIHbhu4EgbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZy4NCg0KKipHacOhIHRy4buLIHAtdmFsdWUqKg0KDQotIFThuqV0IGPhuqMgY8OhYyBraeG7g20gxJHhu4tuaCDEkeG7gXUgY8OzICoqcC12YWx1ZSA+IDAuMDUqKg0KDQotIE5oxrAgduG6rXksIHRhIGtow7RuZyB0aOG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nLCB04bupYyBsw6AgKipraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogZ2nhu69hIG5hbSB2w6AgbuG7ryB24buBIGto4bqjIG7Eg25nIGLhu4sgY8SDbmcgdGjhurNuZy4qKg0KDQpL4bq/dCBsdeG6rW4gbsOgeSBtYW5nIMO9IG5naMSpYSB0aOG7sWMgdGnhu4VuIHRyb25nIG5naGnDqm4gY+G7qXUgdMOibSBsw70gaOG7jWMgxJHGsOG7nW5nOiB0aGF5IHbDrCB04bqtcCB0cnVuZyB2w6BvIHPhu7Ega2jDoWMgYmnhu4d0IGdp4bubaSB0w61uaCwgY8OhYyBiaeG7h24gcGjDoXAgaOG7lyB0cuG7oyBuw6puIHRp4bq/cCBj4bqtbiB0aGVvIGNoaeG7gXUgcuG7mW5nIHRvw6BuIGLhu5kgcXXhuqduIHRo4buDIGjhu41jIHNpbmgvc2luaCB2acOqbiwgdsOsIGPEg25nIHRo4bqzbmcgY8OzIHRo4buDIHjhuqN5IHJhIOG7nyBj4bqjIGhhaSBnaeG7m2kgduG7m2kgeMOhYyBzdeG6pXQgZ+G6p24gdMawxqFuZyDEkcawxqFuZy4NCg0KDQojIyMgKio0LjIgQ+G6t3AgYmnhur9uIEdlbmRlciB2w6AgQW54aW91cyBCZWZvcmUgRXhhbXMqKg0KDQpgYGB7cn0NCm9kZHNyYXRpbyh0YWJsZShHZW5fQW54JEdlbmRlciwgR2VuX0FueCRBbnhpb3VzLkJlZm9yZS5FeGFtcykpDQpgYGANCg0KS+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggY2hvIHRo4bqleSAqKk9kZHMgUmF0aW8gPSAwLjg1MjEqKiwgbmdoxKlhIGzDoCAqKm5hbSBnaeG7m2kgY8OzIGto4bqjIG7Eg25nIGPhuqNtIHRo4bqleSBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkgdGjhuqVwIGjGoW4ga2hv4bqjbmcgMTQuOCUgc28gduG7m2kgbuG7ryBnaeG7m2kqKi4gVHV5IG5oacOqbjoNCg0KLSAqKktob+G6o25nIHRpbiBj4bqteSA5NSUgYmFvIGfhu5NtIGdpw6EgdHLhu4sgMSoqLCDEkWnhu4F1IG7DoHkgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCB24buBIG9kZHMgbMOgIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQotIEPDoWMgZ2nDoSB0cuG7iyAqKnAgxJHhu4F1IGzhu5tuIGjGoW4gMC4wNSoqLCBjaOG7qW5nIHThu48ga2jDtG5nIGPDsyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiByw7UgcsOgbmcgxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyBnaeG7m2kgdMOtbmggY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biBt4bupYyDEkeG7mSBsbyBs4bqvbmcgdHLGsOG7m2Mga+G7syB0aGkuDQoNClRyb25nIHThuq1wIGThu68gbGnhu4d1IG7DoHksICoqa2jDtG5nIHTDrG0gdGjhuqV5IG3hu5FpIGxpw6puIGjhu4cgY8OzIMO9IG5naMSpYSoqIHRo4buRbmcga8OqIGdp4buvYSBnaeG7m2kgdMOtbmggdsOgIGPhuqNtIGdpw6FjIGxvIGzhuq9uZyB0csaw4bubYyBr4buzIHRoaS4gTsOzaSBjw6FjaCBraMOhYywgbmFtIHbDoCBu4buvIGPDsyB4w6FjIHN14bqldCBsbyBs4bqvbmcgdMawxqFuZyDEkcawxqFuZyBuaGF1Lg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=