library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(webshot2)

Đề tài: Phân tích các yếu tố ảnh hưởng đến quyết định mua hàng của khách hàng

Link bộ dữ liệu: https://drive.google.com/drive/u/0/my-drive

Link bài tiểu luận: https://drive.google.com/drive/u/0/my-drive

LỜI CẢM ƠN

Lời đầu tiên, tôi xin gửi lời cảm ơn chân thành đến Trường Đại học Tài Chính – Marketing đã đưa môn Phân tích dữ liệu định tính vào chương trình học. Trong thời gian tham gia lớp học môn Mô phỏng ngẫu nhiên vừa qua, tôi đã được tiếp cận nhiều kiến thức chuyên ngành và kinh nghiệm thực tiễn bổ ích qua sự hướng dẫn của giảng viên hướng dẫn- ThS. Trần Mạnh Tường. Mặc dù còn gặp khó khăn trong quá trình tiếp thu kiến thức, nhưng với sự hướng dẫn tận tình và góp ý một cách chi tiết của giảng viên hướng dẫn, tôi đã có thể tiếp thu kiến thức và thực hiện bài tiểu luận này một cách tốt hơn. Đây chắc chắn sẽ là những kiến thức quý báu, là hành trang để tôi có thể vững bước sau này.

Tuy nhiên, do vốn kiến thức còn nhiều hạn chế và khả năng tiếp thu thực tế còn nhiều bỡ ngỡ. Mặc dù đã cố gắng hết sức nhưng bài tiểu luận khó có thể tránh khỏi những thiếu sót, kính mong thầy xem xét và góp ý để những bài tiểu luận trong tương lai của tôi được hoàn thiện hơn.

 Tôi xin chân thành cảm ơn!
 

TP. Hồ Chí Minh, ngày 09 tháng 08 năm 2023.

Chương 1. MỞ ĐẦU

1.1 Vấn đề cần nghiên cứu

Giống như bất kỳ hành vi nào của người khác, hành vi mua hàng của người tiêu dùng có thể được xác định bởi nhiều yếu tố. Các công ty này không tìm cách bán hàng mà hướng tới sự hài lòng lâu dài của người tiêu dùng bằng cách cung cấp các sản phẩm có chất lượng cao với mục tiêu tồn tại lâu dài và liên tục của chính họ (Haghshenas et al. 2013).

Hiểu hành vi mua của người tiêu dùng là một yếu tố quan trọng của bất kỳ hoạt động kinh doanh nào. Trong một nền kinh tế định hướng tiếp thị, hành vi mua của người tiêu dùng là một yếu tố rất quan trọng trong sự thành công của doanh nghiệp. Vì vậy, đã có rất nhiều nghiên cứu, công trình nghiên cứu tập trung vào hiện tượng này. Nhiều yếu tố và đặc điểm khác nhau có tác động tích cực hoặc tiêu cực đến hành vi mua hàng của người tiêu dùng.

Nghiên cứu và hiểu các yếu tố này góp phần hiểu rõ hơn về hành vi của người tiêu dùng. Các đặc điểm cá nhân và nhân khẩu xã hội như tuổi tác, lối sống, nghề nghiệp và nhiều yếu tố khác ảnh hưởng đáng kể đến hành vi mua hàng của người tiêu dùng. Vì vậy bài viết này đặc biệt tập trung tìm hiểu các yếu tố như tình trạng hôn nhân, trình độ học vấn, thu nhập và số con trong hộ gia đình để xem chúng có ảnh hưởng như thế nào đến hành vi mua hàng của người tiêu dùng, mặt hàng được quan tâm trong bài là mặt hàng rượu.

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

Tập trung tìm hiểu các yếu tố như tình trạng hôn nhân, trình độ học vấn, thu nhập và số con trong hộ gia đình để xem chúng có ảnh hưởng như thế nào đến hành vi mua hàng của người tiêu dùng, mặt hàng được quan tâm trong bài là mặt hàng rượu.

1.3 Đối tượng nghiên cứu

Đối tượng nghiên cứu là thông tin của 2217 khách hàng được ghi nhận lại sau 2 năm mua hàng tại một cửa hàng bán lẻ.

1.4 Kết cấu nghiên cứu

Chương 1. Mở đầu

Chương 2. Tổng quan nghiên cứu

Chương 3. Thiết kế nghiên cứu

Chương 4. Kết quả nghiên cứu

Chương 5. Kết luận và khuyến nghị

Chương 2. TỔNG QUAN NGHIÊN CỨU

2.1 Hành vi tiêu dùng

Hành vi tiêu dùng được hiểu là những hành vi được mỗi cá nhân thể hiện trong quá trình ra quyết định mua sản phẩm, dịch vụ nào đó. Nắm rõ hành vi của người tiêu dùng sẽ hỗ trợ doanh nghiệp đề ra chiến lược sản phẩm, các kế hoạch tiếp thị và phân phối sản phẩm sao cho hợp lý.

Hành vi người tiêu dùng sẽ ảnh hưởng trực tiếp đến việc mua sắm hay từ chối sản phẩm của họ. Điều này có vai trò quyết định, trong quá trình lập và thực hiện các chiến lược như chiến lược marketing. Hành vi của người mua chịu ảnh hưởng của bốn yếu tố chủ yếu: văn hoá, xã hội, xã hội, và tâm lý. Tất cả các yếu tố trên đều cho ta các cơ sở để tìm cách tác động nhằm đáp ứng người mua một cách tốt hơn.

Hiểu bản chất của hành vi mua hàng của người tiêu dùng là một thành phần quan trọng của nghiên cứu tiếp thị trong một thời gian đáng kể. Nếu các tổ chức có thể dự đoán các phản ứng có thể xảy ra của khách hàng đối với các chiến lược tiếp thị của họ và tác động đến họ khi thích hợp, thì điều quan trọng là họ phải hiểu nhu cầu và động cơ của khách hàng và khách hàng tiềm năng của mình.

Vì thế, nghiên cứu hành vi tiêu dùng cùng với các yếu tố ảnh hưởng đến hành vi tiêu dùng giúp doanh nghiệp nhận diện và dự đoán hành vi tiêu dùng của những đối tượng quý khách cụ thể.Từ đó đưa ra các chiến lược phù hợp và hiệu quả. Doanh nghiệp cần phải nghiên cứu các nhu cầu, nhận thức, thị hiếu và những thói quen chọn lựa và mua sắm của nhóm khách hàng mục tiêu. Việc nghiên cứu thị trường sẽ cho ta các ý tưởng về phát triển sản phẩm mới, chức năng của sản phẩm, quyết định giá, chọn hình thức, nội dung quảng cáo cùng các vấn đề liên quan đến công tác marketing của doanh nghiệp. Lắng nghe thị trường để nắm bắt chính xác các suy nghĩ và cảm nhận của khách hàng mục tiêu - đặc biệt khi khách hàng có quan tâm về sản phẩm hoặc dịch vụ của doanh nghiệp - và sẵn sàng nói chuyện trực tiếp với khách hàng. Tìm hiểu thị trường để nhận thấy những xu thế mới và các thời cơ mang về lợi nhuận cho doanh nghiệp.

Theo Hiệp hội marketing Hoa Kỳ, hành vi người tiêu dùng là các ý nghĩ, quan điểm và các hành vi được khách hàng thực hiện trong quá trình mua sắm. Việc mua sắm của người tiêu dùng chịu tác động mạnh mẽ của yếu tố tự nhiên, xã hội, con người và tâm lí. Đối với nhà quản trị thì các yếu tố trên không kiểm soát được, tuy nhiên chúng phải được xem xét kỹ lưỡng và đánh giá các tác động của chúng lên hành vi người mua hàng.

Theo Kotler & Levy, hành vi người tiêu dùng là các hành vi cụ thể của một cá nhân khi thực hiện những hành vi mua sắm, tiêu dùng và vứt bỏ hàng hoá hay dịch vụ.

Xác định hành vi người tiêu dùng:

Thứ nhất: Là suy nghĩ và cảm xúc của con người đối với quá trình mua sắm và tiêu dùng.

Thứ hai: Hành vi người tiêu dùng là vận động và tương tác vì nó bị tác động bởi các yếu tố từ môi trường bên ngoài và có sự tác động trở lại với môi trường xã hội.

Thứ ba: Hành vi người tiêu dùng bao gồm các hành vi: mua sắm, tiêu dùng và xử lý sản phẩm dịch vụ.

2.2 Lý thuyết về quyết định mua hàng

Người tiêu dùng tìm kiếm các mặt hàng để thỏa mãn những nhu cầu và mong muốn cơ bản của họ. Nghiên cứu hành vi tiêu dùng, nhưng không phải nghiên cứu xem người tiêu dùng lựa chọn mặt hàng nào mà chúng ta cố gắng hiểu cách diễn ra quá trình ra quyết định và nhân tố ảnh hưởng đến hành vi mua sắm (Solomon,2005, tr.6-8). Quyết định mua liên quan đếnmột chuỗi các lựa chọn được hình thành bởi người tiêu dùng trước khi mua hàng, người tiêu dùng đưa ra quyết định liên quan đến địa điểm mua, nhãn hiệu mong muốn, mẫu mã, số lượng mua, thời gian mua, chi phí và phương thức thanh toán (Hanaysha, 2018).

Kotler và Levy (1969) chỉ ra cho thấy người tiêu dùng quyết định mua dựa trên nền tảng cơ bản:

  • Xã hội – Đối tượng khách hàng sống trong xã hội, cho nên hành vi của họ chi phối bởi nhiều yếu tố trong xã hội. Từ lựa chọn ăn mặc cho đến thói quen ăn uống đều chịu sự chi phối mạnh mẽ của văn hóa. Mỗi tầng lớp giai cấp trong xã hội đều có tư duy lựa chọn khác nhau, do đó, hiểu rõ xã hội là thực hiện phương châm bán những thứ mà khách hàng cần.

  • Yếu tố cá nhân- Cá tính là một con người có tính cách khác biệt dẫn đến các hành vi ứng xử đối với môi trường xung quanh. Tuổi tác, tình trạng kinh tế, lối sống có tác động đến nhu cầu về các loại hàng hoá, dịch vụ. Người cẩn thận tỉ mỉ, người lớn tuổi có thể quan tâm đến chất lượng sản phẩm hơn, hay người có điều kiện kinh tế sẽ quan tâm đến sản phẩm chất lượng hơn sản phẩm giá rẻ.

  • Các yếu tố mang tính chất tâm lý: Động cơ, Tri giác, Lĩnh hội, Niềm tin và Thái độ. Nhu cầu sẽ thúc đẩy con người hành động (đi mua sắm) để đáp ứng nhu cầu. Tri giác là một quá trình thông qua đó con người tuyển chọn, tổ chức các thông tin nhận được, sự thiết kế nổi bật của cửa hàng hay sự quảng cáo truyền thông tác động đến tri thức của khách hàng. Càng trực nghiệm nhiều kiến thức được lĩnh hội càng

2.3 Các mô hình hồi quy

Mô hình hồi quy được chia làm 2 nhóm:

Mô hình hồi quy cổ điển

\(μ_i[y_i]= (β_0+ β_{1x1i}+...+ β_kx_{ki})\)

Để mô hình hồi quy cổ điển phải thỏa mãn 3 điều kiện sau:

  • Tính tuyến tính của mối quan hệ giữa biến phụ thuộc và các biến độc lập.

  • Phương sai sai số không đổi.

  • Phân phối chuẩn của phần dư

Mô hình hồi quy tổng quát:

\(μ_i = g^{-1}(β_0+ β_{1x1i}+...+ β_kx_{ki})\)

Trong mô hình này hàm g(.) được gọi là hàm liên kết (link function) và g(.) phải là hàm đơn điệu.

Trong một mô hình hồi quy tuyến tính tổng quát sẽ có 3 thành phần:

Thành phần hệ thống (systematic component): Là thành tổ hợp tuyến tính của các biến độc lập.

Thành phần ngẫu nhiên (random component): Là phân phối xác suất của biến phụ thuộc (dependent/response variable).

Hàm liên kết (link function).

Chương 3. THIẾT KẾ NGHIÊN CỨU

3.1 Mô hình nghiên cứu

3.1.1 Mô hình logit

\(logit(π) = log (π/1-π) = β_0+ β_1X_1+ β_2X_2+...+ B_kX_k\)

Với π là xác suất để biến phụ thuộc nhận giá trị “thành công”. Đối với hàm glm phạm trù thứ hai của biến nhị phân thể hiện cho “thành công” (chúng ta sử dụng hàm levels() để kiểm tra thứ tự của các phạm trù của một biến định tính.

3.1.2 Các tiêu chí đánh giá mô hình

Để đánh giá các mô hình hồi cổ điển chúng ta thường dựa vào hệ số xác định mô hình \((R^2)\), nhưng đối với mô các mô hình hồi quy tuyến tính tổng quát chúng ta sử dụng các tiêu chí sau:

AIC - Akaike Information Criterion

AIC được đề xuất bởi Akaike Hirotugu, một nhà thống kê học người Nhật. AIC là một tiêu chí được sử dụng một cách phổ biến để đánh giá một mô hình hồi quy được ước lượng bởi phương pháp Maximum Likekihood (ML). Một cách chung chung giá trị của AIC càng nhỏ thì mô hình càng tốt. AIC được tính bằng công thức sau: \(AIC= -2ln(L)+2k\) Với L là giá trị cực đại của hàm hợp lý (likelihood function) và k là số tham số của mô hình.

Khi thực hiện việc ước lượng mô hình hồi quy bằng lệnh glm thì chỉ số AIC đã được tính toán và thể hiện trên bảng kết quả ( bằng lệnh summary)

Deviance

Deviance cũng là một tiêu chí rất phổ biến được sử dụng để đánh giá một mô hình hồi quy được ước lượng bởi phương pháp Hợp lý cực đại (ML). Một cách tổng quá, cũng giống như chỉ tiêu AIC, giá trị của Deviance càng nhỏ thì mô hình càng tốt.

lưu ý: Khi thực hiện việc ước lượng mô hình hồi quy bằng lệnh glm thì chỉ số AIC và Deviance đã được tính toán và thể hiện trên bảng kết quả ( bằng lệnh summary).

Brier Score Là chỉ tiêu dùng để đánh giá mô hình hồi quy logistic, Brier Score được tính như sau: \(B= 1/n \sum_{i=1}^{n}(p_i-o_i)\)

Trong đó: pi,oi lần lượt là giá trị xác suất quan sát được, và giá trị xác suất tính ra từ mô hình.

3.2 Dữ liệu ngiên cứu

Bộ dữ liệu được thu thập từ bài nghiên cứu “Consumer Buying Behavior Analysis” có địa chỉ: https://www.kaggle.com/code/aradhanapratap/consumer-buying-behavior-analysis/notebook từ trang Kaggle.com.

Đây là bộ dữ liệu thu thập thông tin về người tiêu dùng như: Độ tuổi, giới tính, tình trạng hôn nhân, thu nhập… và thói quen mua hàng của họ dựa trên số tiền chi cho các sản phẩm về rượu, thịt, cá, đồ ngọt… Qua đó giúp doanh nghiệp hiểu rõ hơn về khách hàng của mình và dễ dàng điều chỉnh sản phẩm tùy theo nhu cầu, hành vi và mối quan tâm cụ thể của các nhóm đối tượng khách hàng khác nhau.

Xét theo đặc điểm, các biến được chia thành 2 nhóm, gồm: nhóm thông tin về khách hang và nhóm thông tin về sản phẩm được chọn mua. Các biến được đặt tên như sau:

Nhóm Khách hàng

• ID: Định danh duy nhất của khách hàng • Year_Birth: Năm sinh của khách hàng • Education: Trình độ học vấn của khách hàng • Marital_Status: Tình trạng hôn nhân của khách hàng • Income: Thu nhập hộ gia đình hàng năm của khách hàng • Kidhome: Số con trong hộ gia đình khách hàng • Teenhome: Số lượng thanh thiếu niên trong hộ gia đình khách hàng • Recency: Số ngày kể từ lần mua cuối cùng của khách hàng.

Nhóm Các sản phẩm (Đơn vị: Đô la Mỹ)

• MntWines: Số tiền chi cho rượu trong 2 năm qua • MntFruits: Số tiền chi cho trái cây trong 2 năm qua • MntMeatProducts: Số tiền chi cho thịt trong 2 năm qua • MntFishProducts: Số tiền chi cho cá trong 2 năm qua • MntSweetProducts: Số tiền chi cho đồ ngọt trong 2 năm qua • MntGoldProds: Số tiền mua vàng trong 2 năm qua.

df <- read.csv("C:/Users/MSII/Downloads/vlvy_marketing_dataset (1).csv ")

3.3 Thống kê mô tả cho dữ liệu định lượng

3.3.1 Thống kê mô tả biến Income

Income: Thu nhập hộ gia đình hàng năm của khách hàng (Đơn vị: Đô la Mỹ)

summary(df$Income)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    1730   35303   51382   52247   68522  666666       1

Thống kê mô tả cho thấy thu nhập trung bình theo hộ gia đình của những khách hàng đến mua tại cửa hàng là $5224, người có thu nhập thấp nhất có mức $1730 , người có thu nhập cao nhất có mức thu nhập $666666. Có 25% hộ gia đình có thu nhập nhỏ hơn hoặc bằng mức $35303, 50% hộ có mức thu nhập nhỏ hơn hoặc bằng $51382 và 75% hộ có thu nhập nhỏ hơn hoặc bằng $68522.

summary(df$Income)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    1730   35303   51382   52247   68522  666666       1
# Turn of scientific values
options(scipen = 999)
# Histogram
hist(df$Income, breaks = "FD", col = "navy", main = "Histogram of Income", xlab = "Income", ylab = "Frequency", xlim = c(1, 100000), ylim = c(1, 200))

3.3.2 Thống kê mô tả biến Kidhome

Kidhome: Số con trong hộ gia đình khách hàng.

table(df$Kidhome)
## 
##    0    1    2 
## 1284  887   46
table(df$Kidhome)/sum(table(df$Kidhome))
## 
##          0          1          2 
## 0.57916103 0.40009021 0.02074876

Thống kê cho thấy số hộ gia đình không có con lên đến 1284 hộ chiếm tỷ lệ 57,92%, số hộ gia đình có 1 con là 887 hộ chiếm tỷ lệ 40,01%, số hộ gia đình có 2 con là 46 hộ chiếm tỷ lệ 2,07%.

kidhome_counts <- table(df$Kidhome)

library(ggplot2)
ggplot(df,aes(df$Kidhome))+
  geom_bar(fill = "navy")+
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', vjust = - .5, col = "red") +
  theme_minimal () +
  labs(title = "Barplot of Kidhome", x = "Kidhome")
## Warning: Use of `df$Kidhome` is discouraged.
## ℹ Use `Kidhome` instead.
## Use of `df$Kidhome` is discouraged.
## ℹ Use `Kidhome` instead.

3.2.1 Thống kê mô tả nhóm các sản phẩm

(Đơn vị: Đô la Mỹ)

  • MntWines: Số tiền chi cho rượu trong 2 năm qua

  • MntMeatProducts: Số tiền chi cho thịt trong 2 năm qua

  • MntFishProducts: Số tiền chi cho cá trong 2 năm qua

  • MntSweetProducts: Số tiền chi cho đồ ngọt trong 2 năm qua

Thống kê mô tả của các biến như sau:

products <- data.frame(df$MntWines, df$MntMeatProducts, df$MntFishProducts, df$MntSweetProducts)
pr <- summary(products)
pr
##   df.MntWines   df.MntMeatProducts df.MntFishProducts df.MntSweetProducts
##  Min.   :   0   Min.   :   0.0     Min.   :  0.00     Min.   :  0.00     
##  1st Qu.:  24   1st Qu.:  16.0     1st Qu.:  3.00     1st Qu.:  1.00     
##  Median : 174   Median :  68.0     Median : 12.00     Median :  8.00     
##  Mean   : 305   Mean   : 167.6     Mean   : 37.63     Mean   : 27.02     
##  3rd Qu.: 505   3rd Qu.: 233.0     3rd Qu.: 50.00     3rd Qu.: 33.00     
##  Max.   :1493   Max.   :1725.0     Max.   :259.00     Max.   :262.00

Qua thống kê ta thấy:

  • Số tiền chi cho rượu của các hộ gia đình trong 2 năm qua trung bình là $305. Trong đó có những hộ gia đình không chi tiền cho rượu. Số tiền hộ gia đình chi cho rượu nhiều nhất trong mẫu là $1493. 25% hộ có mức chi tiền cho rượu nhỏ hơn hoặc bằng $24, 50% hộ có mức chi nhỏ hơn hoặc bằng $174 và 75% có mức chi nhỏ hơn hoặc bằng $505.

  • Số tiền chi cho các sản phẩm thịt của các hộ gia đình trong 2 năm qua trung bình là $167.6. Trong đó có những hộ gia đình không chi tiền cho thịt. Số tiền hộ gia đình chi cho thịt nhiều nhất trong mẫu là $1725.0. 25% hộ có mức chi tiền cho thịt nhỏ hơn hoặc bằng $16.0, 50% hộ có mức chi nhỏ hơn hoặc bằng $68.0 và 75% có mức chi nhỏ hơn hoặc bằng $233.0.

  • Số tiền chi cho các sản phẩm cá của các hộ gia đình trong 2 năm qua trung bình là $37.63. Trong đó có những hộ gia đình không chi tiền cho cá. Số tiền hộ gia đình chi cho cá nhiều nhất trong mẫu là $259.00. 25% hộ có mức chi tiền cho cá nhỏ hơn hoặc bằng $3.00, 50% hộ có mức chi nhỏ hơn hoặc bằng $12.00 và 75% có mức chi nhỏ hơn hoặc bằng $50.00.

  • Số tiền chi cho các sản phẩm đồ ngọt của các hộ gia đình trong 2 năm qua trung bình là $27.02. Trong đó có những hộ gia đình không chi tiền cho đồ ngọt. Số tiền hộ gia đình chi cho đồ ngọt nhiều nhất trong mẫu là $262.00. 25% hộ có mức chi tiền cho đồ ngọt nhỏ hơn hoặc bằng $1.00, 50% hộ có mức chi nhỏ hơn hoặc bằng $8.00 và 75% có mức chi nhỏ hơn hoặc bằng $33.00.

column_names <- names(df[9:13])
product_counts <- colSums(df[9:13])
proportions <- product_counts/sum(product_counts)
pie(proportions, labels = column_names, main = "Pie Chart of 5 Products", col = rainbow(length(product_counts)))

3.4 Thống kê mô tả cho dữ liệu định tính

3.4.1 Thống kê mô tả biến Marital_Status

Biến Marital_Status thể hiện Tình trạng hôn nhân của các khách hàng được khảo sát.

table(df$Marital_Status)
## 
## Divorced  Married   Single Together    Widow 
##      232      858      476      575       76

Tình trạng hôn nhân của 2217 khách hàng được khảo sát như sau:

  • Đã ly hôn: 232 chiếm 10,46%
  • Đã kết hôn: 858 chiếm 38,66%
  • Độc thân: 476 chiếm 21,47%
  • Chung sống: 575 chiếm 25,89%
  • Góa phụ: 76 chiếm 3,43%

Tỷ lệ của các tình trạng trên được thể hiện như sau:

table(df$Marital_Status)
## 
## Divorced  Married   Single Together    Widow 
##      232      858      476      575       76
library(ggplot2)
ggplot(df,aes(df$Marital_Status))+
  geom_bar(fill = "navy")+
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', vjust = - .5, col = "red") +
  theme_minimal () +
  labs(title = "Customer's marital status", x = "Marital Status")
## Warning: Use of `df$Marital_Status` is discouraged.
## ℹ Use `Marital_Status` instead.
## Use of `df$Marital_Status` is discouraged.
## ℹ Use `Marital_Status` instead.

Ta có thể thấy người đã kết hôn chiếm tỷ lệ cao nhất về tình trạng hôn nhân của khách hàng đến với cửa hàng này, tiếp theo sau đó lần lượt là chung sống, độc thân, đã ly thân và góa phụ.

3.2.2 Thống kê mô tả biến Education

table(df$Education)
## 
##   2n Cycle      Basic Graduation     Master        PhD 
##        201         54       1116        365        481
table(df$Education)
## 
##   2n Cycle      Basic Graduation     Master        PhD 
##        201         54       1116        365        481
library(ggplot2)
ggplot(df,aes(df$Education))+
  geom_bar(fill = "navy")+
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', vjust = - .5, col = "red") +
  theme_minimal () +
  labs(title = "Customer's Education", x = "Education")
## Warning: Use of `df$Education` is discouraged.
## ℹ Use `Education` instead.
## Use of `df$Education` is discouraged.
## ℹ Use `Education` instead.

Qua biểu đồ ta có thể thấy số lượng khách hàng có tình trạng học vấn đã tốt nghiệp chiếm tỷ lệ cao nhất trong nhóm khảo sát chiếm 50,3%

3.5 Chuyển đổi dữ liệu định tính

Nhóm “Married”, “Together” sẽ được xem là “Relationship”. Trong khi “Divorced”, “Widow”, “Single” trở thành “Single”

# Chuyển đổi biến Marital_Status
df$Marital_Status <- gsub("Married|Together", "Relationship", df$Marital_Status)
df$Marital_Status <- gsub("Divorced|Widow|Single", "Single", df$Marital_Status)
Marital_Status <- df$Marital_Status

Nhóm “PhD”, “Graduation” và “Master” trở thành “PG”. Nhóm “Basic” và “2n Cycle” trở thành “UG

# Chuyển đổi biến Education
df$Education <- gsub("PhD|Graduation|Master", "PG", df$Education)
df$Education <- gsub("Basic|2n Cycle", "UG", df$Education)
Education <- df$Education

Số con trong hộ gia đình bằng trẻ em trong hô gia đình cộng với số trẻ vị thành niên trong hộ gia đình

# Create Kids
Kids <- df$Kidhome + df$Teenhome
product_data <- list()
for (i in 1:length(df)) {
  productdata <- c(df$MntWines[i], df$MntMeatProducts[i], df$MntFishProducts[i], 
                   df$MntSweetProducts[i], df$MntGoldProds[i])
  product_data <- c(product_data, list(productdata))
}
Products_DF <- data.frame(matrix(unlist(product_data), nrow=length(product_data), byrow=TRUE))
colnames(Products_DF) <- c('Wines', 'Meat', 'Fish', 'Sweets', 'Gold')
head(Products_DF)
##   Wines Meat Fish Sweets Gold
## 1   635  546  172     88   88
## 2    11    6    2      1    6
## 3   426  127  111     21   42
## 4    11   20   10      3    5
## 5   173  118   46     27   15
## 6   520   98    0     42   14

Tính số tuổi từ năm sinh khách hàng, độ tuổi từ 0- 30 được gán thành “Young” chỉ khách hàng giới trẻ, độ tuổi từ 30- 45 gán thành “Adutl” được gọi là người lớn, độ tuổi từ 45- 65 gán thành “Mature” chỉ người trưởng thành, độ tuổi từ 65- 120 gán thành “Senior” là nhóm người cao tuổi.

Khách hàng chi từ 0- 100$ cho rượu trong vòng 2 năm được gọi là khách hàng chi tiêu thấp cho rượu, gán thành “Least Active Customer”. Trong khi đó, khách hàng chi từ 100- 1500$ cho rượu trong vòng 2 năm qua được gọi là khách hàng chi tiêu cao cho rượu, gán thành “Highly Active Customer”

library(dplyr)

#Create Age segment
Age <- 2023 - df$Year_Birth
cut_labels_Age <- c("Young", "Adult", "Mature", "Senior")
cut_bins <- c(0, 30, 45, 65, 120)
Age_segment <- cut(Age, breaks=cut_bins, labels=cut_labels_Age)

#Create Wines segment
cut_labels <- c('Least Active Customer', 'Highly Active Customer')
cut_bins <- c(0, 100, 1500)
Wines_segment <- cut(df$MntWines, breaks=cut_bins, labels=cut_labels)

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

3.6.1 Phân tích mối quan hệ giữa Marital_Status và Wines_segment

Bảng tần suất của hai biến Marital_Status và Wines_segment

mw <-table(Marital_Status, Wines_segment)
mw
##               Wines_segment
## Marital_Status Least Active Customer Highly Active Customer
##   Relationship                   600                    826
##   Single                         327                    451
mw2 <- data.frame(Marital_Status, Wines_segment)
library(ggplot2)
ggplot(mw2, aes(Marital_Status, fill = Wines_segment)) + geom_bar(position = 'dodge') +
  labs(title = "Analysis of the Correlation between Marital Status and Wines_segment")

Qua biểu đồ ta có thể thấy, dù ở tình trạng độc thân hay trong mối quan hệ thì số tiền bỏ ra cho rượu ở các hộ gia đình trong nhóm quan sát là khá cao. Trong đó, nhóm khách hàng trong mối quan hệ là chi nhiều tiền cho rượu trong vòng 2 năm qua nhất. Khoảng 600 khách hàng ở nhóm trong mối quan hệ có thói quen chi ít tiền cho rượu và đến hơn 800 người trong nhóm này chi nhiều tiền cho rượu trong vòng 2 năm qua. Trong khi đó, nhóm khách hàng độc thân có khoảng hơn 200 người chi ít tiền cho rượu và khoảng 450 người chi nhiều tiền cho rượu trong 2 năm qua.

3.6.2 Phân tích mối quan hệ giữa Age_segment và Wines_segment

Bảng tần suất của hai biến Marital_Status và Wines_segment

aw <-table(Age_segment, Wines_segment)
aw
##            Wines_segment
## Age_segment Least Active Customer Highly Active Customer
##      Young                      3                     11
##      Adult                    303                    226
##      Mature                   496                    706
##      Senior                   123                    333
aw2 <- data.frame(Age_segment, Wines_segment)
library(ggplot2)
ggplot(mw2, aes(Age_segment, fill = Wines_segment)) + geom_bar(position = 'dodge') +
  labs(title = "Analysis of the Correlation between Age_segment and Expenses")

Qua biểu đồ ta có thể thấy, nhóm khách hàng từ 30 tuổi trở lên chi nhiều tiền cho rượu hơn nhóm khách hàng U30 tuổi. Trong đó, nhóm khách hàng trưởng thành từ 45- 65 là nhóm chi nhiều tiền cho rượu nhất trong vòng 2 năm qua khi đến hơn 800 người thuộc nhóm khách hàng có hoạt động chi tiêu cao.

3.6.3 Phân tích mối quan hệ giữa Education và Wines_segment

ew <-table(Education, Wines_segment)
ew
##          Wines_segment
## Education Least Active Customer Highly Active Customer
##        PG                   770                   1189
##        UG                   157                     88
ew2 <- data.frame(Education, Wines_segment)
library(ggplot2)
ggplot(ew2, aes(Education, fill = Wines_segment)) + geom_bar(position = 'dodge') +
  labs(title = "Analysis of the Correlation between Education and Wines_segment")

Qua biểu đồ ta có thể thấy, khách hàng ở nhóm có trình độ học vấn là PG có thói quen chi nhiều tiền hơn cho rượu khi có đến khoảng 1200 khách hàng thuộc nhóm chi tiêu cao cho rượu trong vòng 2 năm qua.

3.7 Rủi ro tương đối

Ký hiệu \(π_i\) là tỷ lệ “thành công” của biến phụ thuộc (response variable) tương ứng với từng biểu hiện của biến độc lập.

Từ bảng tần suất, chúng ta tính \(π_1/π_2\), phân số này gọi là Rủi ro tương đối (Relative risk) giữa 2 biểu hiện khác nhau của biến phụ thuộc.

3.7.1 Rủi ro tương đối giữa Marital_Status và Wines_segment

addmargins(mw)
##               Wines_segment
## Marital_Status Least Active Customer Highly Active Customer  Sum
##   Relationship                   600                    826 1426
##   Single                         327                    451  778
##   Sum                            927                   1277 2204

Từ bảng tần suất chúng ta thấy

  • Khách hàng có tình trạng hôn nhân là trong mối quan hệ có 600 khách hàng thuộc nhóm chi tiêu thấp cho rượu trong vòng 2 năm qua và 826 khách hàng thuộc nhóm chi tiêu cao cho rượu trong vòng 2 năm qua.

  • Khách hàng có tình trạng hôn nhân là độc thân có 327 khách hàng thuộc nhóm chi tiêu thấp cho rượu trong vòng 2 năm qua và 451 khách hàng trong thuộc nhóm chi tiêu cao cho rượu trong vòng 2 năm qua.

Chúng ta tính rủi ro tương đối (relative risk).

## Lệnh này tính relativerisk cho vị trí 12 và 22
library("DescTools") 
RelRisk(mw)
## [1] 1.001068

Theo kết quả trên cho thấy tỷ lệ rủi ro tương đối của khách hàng chi tiêu cao cho rượu là tính là 1,001068, có nghĩa là tỷ lệ những khách hàng khách hàng chi tiêu cao cho rượu có tình trạng hôn nhân là trong mối quan hệ gấp 1,001068 lần tỷ lệ những khách hàng khách hàng chi tiêu cao cho rượu có tình trạng hôn nhân là độc thân.

3.7.2 Bảng tần suất giữa Age_segment và Wines_segment

addmargins(aw)
##            Wines_segment
## Age_segment Least Active Customer Highly Active Customer  Sum
##      Young                      3                     11   14
##      Adult                    303                    226  529
##      Mature                   496                    706 1202
##      Senior                   123                    333  456
##      Sum                      925                   1276 2201

Từ bảng tần suất chúng ta thấy

  • Khách hàng có độ tuổi là người trẻ có 3 khách hàng thuộc nhóm chi tiêu thấp cho rượu trong vòng 2 năm qua và 11 khách hàng thuộc nhóm chi tiêu cao cho rượu trong vòng 2 năm qua.

  • Khách hàng có độ tuổi là người là người lớn có 303 khách hàng thuộc nhóm chi tiêu thấp cho rượu trong vòng 2 năm qua và 226 khách hàng trong thuộc nhóm chi tiêu cao cho rượu trong vòng 2 năm qua.

  • Khách hàng có độ tuổi là người là người trưởng thành có 496 khách hàng thuộc nhóm chi tiêu thấp cho rượu trong vòng 2 năm qua và 706 khách hàng trong thuộc nhóm chi tiêu cao cho rượu trong vòng 2 năm qua.

  • Khách hàng có độ tuổi là người là người lớn tuổi có 123 khách hàng thuộc nhóm chi tiêu thấp cho rượu trong vòng 2 năm qua và 333 khách hàng trong thuộc nhóm chi tiêu cao cho rượu trong vòng 2 năm qua.

3.7.3 Rủi ro tương đối giữa Education và Wines_segment

addmargins(ew)
##          Wines_segment
## Education Least Active Customer Highly Active Customer  Sum
##       PG                    770                   1189 1959
##       UG                    157                     88  245
##       Sum                   927                   1277 2204

Từ bảng tần suất chúng ta thấy

  • Khách hàng có trình độ học vấn là PG có 770 khách hàng thuộc nhóm chi tiêu thấp cho rượu trong vòng 2 năm qua và 1189 khách hàng thuộc nhóm chi tiêu cao cho rượu trong vòng 2 năm qua.

  • Khách hàng có trình độc học vấn là UG có 157 khách hàng thuộc nhóm chi tiêu thấp cho rượu trong vòng 2 năm qua và 88 khách hàng trong thuộc nhóm chi tiêu cao cho rượu trong vòng 2 năm qua.

Chúng ta tính rủi ro tương đối (relative risk).

## Lệnh này tính relativerisk cho vị trí 12 và 22

library("DescTools") 
RelRisk(ew)
## [1] 0.6133703

Theo kết quả trên cho thấy tỷ lệ rủi ro tương đối của khách hàng chi tiêu cao cho rượu là tính là 0,6133703, có nghĩa là tỷ lệ những khách hàng khách hàng chi tiêu cao cho rượu có trình độ học vấn là PG gấp 0,6133703 lần tỷ lệ những khách hàng khách hàng chi tiêu cao cho rượu có trình độ học vấn là UG.

3.8 Tỷ lệ chênh

3.8.1 Tỷ lệ chênh giữa Marital_Status và Wines_segment

## Câu lệnh này sẽ tính oddratio cho vị trí 11 và 21
OddsRatio(mw)
## [1] 1.001844

Theo kết quả trên cho thấy, tỷ lệ khách hàng có tình trạng hôn nhân là trong mối quan hệ và thuộc nhóm chi tiêu thấp cho rượu bằng 100,184% tỷ lệ khách hàng có tình trạng hôn nhân là độc thân và thuộc nhóm chi tiêu thấp cho rượu. Điều này có nghĩa là xác suất xảy ra sự kiện khách hàng trong mối quan hệ và thuộc nhóm chi tiêu thấp cho rượu nhiều hơn nhóm khách hàng độc thân và thuộc nhóm chi tiêu thấp cho rượu

3.8.2 Tỷ lệ chênh giữa Education và Wines_segment

## Câu lệnh này sẽ tính oddratio cho vị trí 11 và 21
OddsRatio(ew)
## [1] 0.3629877

Theo kết quả trên cho thấy, tỷ lệ khách hàng có trình độ học vấn là PG và thuộc nhóm chi tiêu thấp cho rượu bằng 38,95% tỷ lệ khách hàng có trình độ học vấn UG và thuộc nhóm chi tiêu thấp cho rượu. Điều này có nghĩa xác suất xảy ra trường hợp khách hàng có trình độ học vấn PG và thuộc nhóm chi tiêu thấp thấp hơn trường hợp khách hàng có trình độ học vấn UG và thuộc nhóm chi tiêu thấp.

3.9 Thống kê suy diễn cho dữ liệu

Để xác định xem hai biến có độc lập hay không, kiểm định chi bình phương (chi-square test) sẽ được sử dụng để kiểm tra mối quan hệ giữa hai biến phân loại (categorical variables) trong một bảng tần số (frequency table).

Khi p-value nhỏ hơn mức ý nghĩa (0.05) trong kiểm định chi bình phương, ta kết luận rằng hai biến là phụ thuộc lẫn nhau, tức là không độc lập. Ngược lại, khi p-value lớn hơn mức ý nghĩa, ta không có đủ bằng chứng để bác bỏ giả thuyết không độc lập giữa hai biến.

3.9.1 Kiểm định tính độc lập cho Marital và Wines_segment

Ta kiểm tra xem tình trạng hôn nhân có ảnh hưởng đến mức chi tiêu rượu của khách hàng trong vòng 2 năm qua hay không.

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

Kết quả kiểm định p- value= 1 > 0,05. Như vậy, với mức ý nghĩa 5% ta không có đủ bằng chứng để bác bỏ giả thuyết không độc lập giữa tình trạng hôn nhân và mức chi tiêu cho rượu chủa khách hàng.

3.9.2 Kiểm định tính độc lập cho Education và Wines_segment

Ta kiểm tra xem trình độ học vấn có ảnh hưởng đến mức chi tiêu rượu của khách hàng trong vòng 2 năm qua hay không.

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

Kết quả kiểm định p- value= 0,000001468 < 0,05. Như vậy, với mức ý nghĩa 5% ta kết luận trình độ học vấn và mức chi tiêu rượu của khách hàng là phụ thuộc lẫn nhau.

3.9.3 Kiểm định tính độc lập cho Age_segment và Wines_segment

Ta kiểm tra xem độ tuổi có ảnh hưởng đến mức chi tiêu rượu của khách hàng trong vòng 2 năm qua hay không.

chisq.test(aw)
## 
##  Pearson's Chi-squared test
## 
## data:  aw
## X-squared = 95.636, df = 3, p-value < 0.00000000000000022

Kết quả kiểm định p- value= 0,00000000000000022 < 0,05. Như vậy, với mức ý nghĩa 5% ta kết luận độ tuổi và mức chi tiêu rượu của khách hàng là phụ thuộc lẫn nhau.

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

  • Ước lượng tỷ lệ khách hàng trong mối quan hệ thuộc nhóm chi tiêu cao cho rượu đồng thời kiểm định xem tỷ lệ khách hàng trong mối quan hệ thuộc nhóm chi tiêu cao có bằng 37,47% hay không.
ul.mw <-  mw2[Marital_Status == "Relationship",]
prop.test(length(ul.mw$Marital_Status), length(Marital_Status), p = 0.3747)
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(ul.mw$Marital_Status) out of length(Marital_Status), null probability 0.3747
## X-squared = 697.19, df = 1, p-value < 0.00000000000000022
## alternative hypothesis: true p is not equal to 0.3747
## 95 percent confidence interval:
##  0.6260021 0.6662237
## sample estimates:
##        p 
## 0.646369

Với khoảng tin cậy 95% uớc lượng tỷ lệ khách hàng trong mối quan hệ thuộc nhóm chi tiêu cao cho rượu nằm trong khoảng từ 0,6260021 0,6662237

p-value > 0, chưa đủ cơ sở bác bỏ giả thuyết H0. Do đó tỷ lệ khách hàng trong mối quan hệ thuộc nhóm chi tiêu cao cho rượu bằng 37,47% với mức ý nghĩa 5%.

  • Ước lượng tỷ lệ khách hàng độc thân thuộc nhóm chi tiêu cao cho rượu đồng thời kiểm định xem tỷ lệ khách hàng độc thân thuộc nhóm chi tiêu cao có bằng 20,46% hay không.
ul.mw2  <-  mw2[Marital_Status == "Single",]
prop.test(length(ul.mw2$Marital_Status), length(Marital_Status), p = 0.2046)
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(ul.mw2$Marital_Status) out of length(Marital_Status), null probability 0.2046
## X-squared = 301.66, df = 1, p-value < 0.00000000000000022
## alternative hypothesis: true p is not equal to 0.2046
## 95 percent confidence interval:
##  0.3337763 0.3739979
## sample estimates:
##        p 
## 0.353631

Với khoảng tin cậy 95% uớc lượng tỷ lệ khách hàng độc thân thuộc nhóm chi tiêu cao cho rượu nằm trong khoảng từ 0,3337763 đến 0,3739979

p-value > 0, chưa đủ cơ sở bác bỏ giả thuyết H0. Do đó tỷ lệ tỷ lệ khách hàng trong mối quan hệ thuộc nhóm chi tiêu cao cho rượu bằng 20,46% với mức ý nghĩa 5%.

  • Ước lượng sự chênh lệch về tỷ lệ thuộc nhóm chi tiêu cao cho rượu giữa khách hàng trong mối quan hệ và khách hàng độc thân. Đồng thời thực hiện bài toán kiển định sự chênh lệch này.
ul.m <-  mw2[Marital_Status == "Relationship",]
ul.w<-  mw2[Wines_segment == "Highly Active Customer",]
ul.m2  <-  mw2[Marital_Status == "Single",]
a <- c(nrow(ul.m), nrow(ul.w))
b <- c(nrow(ul.m2), nrow(ul.w))
prop.test(b,a)
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  b out of a
## X-squared = 764.56, df = 1, p-value < 0.00000000000000022
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.4794052 -0.4263869
## sample estimates:
##   prop 1   prop 2 
## 0.547104 1.000000

P_value < 0, bác bỏ giả thuyết H0. Như vậy, có sự chênh lệnh giữa tỷ lệ khách hàng trong mối quan hệ và độc thân thuộc nhóm chi tiêu cao cho rượu.

Khoảng tin cậy 95% cho chênh lệch tỷ lệ nằm trong khoảng từ -0,4794052 đến -0,4263869.

Chương 4. KẾT QUẢ NGHIÊN CỨU

4.1 Ước lượng hàm hồi quy cho dữ liệu

Từ kiểm định tính độc lập và các đánh giá trên, mô hình hồi quy được đề xuất như sau:

Wines_segment= Marital_Status + Income + Kids + Age_segment + Education

4.1.1 Ước lượng mô hình hồi quy Logit

income = df$Income
data = data.frame(Marital_Status, Education, Kids, Age_segment, Wines_segment, income)
income <- cut(income,2, labels = c('low','high'))

mlogit <- glm(data = data, formula = factor(Wines_segment) ~ Marital_Status + income + Kids + Age_segment + Education, family = binomial(link = "logit"))
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
levels(factor(Wines_segment))
## [1] "Least Active Customer"  "Highly Active Customer"
summary(mlogit)
## 
## Call:
## glm(formula = factor(Wines_segment) ~ Marital_Status + income + 
##     Kids + Age_segment + Education, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                          Estimate   Std. Error z value             Pr(>|z|)    
## (Intercept)          -5.398829808  1.242706116  -4.344  0.00001396479585113 ***
## Marital_StatusSingle -0.056107707  0.135152439  -0.415              0.67804    
## income                0.000115674  0.000005136  22.520 < 0.0000000000000002 ***
## Kids                 -0.762051941  0.096838293  -7.869  0.00000000000000357 ***
## Age_segmentAdult      0.477666580  1.217178048   0.392              0.69473    
## Age_segmentMature     1.143391637  1.214053053   0.942              0.34630    
## Age_segmentSenior     1.356035007  1.219425601   1.112              0.26613    
## EducationUG          -0.705033275  0.229279827  -3.075              0.00211 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2993.3  on 2199  degrees of freedom
## Residual deviance: 1464.7  on 2192  degrees of freedom
##   (17 observations deleted due to missingness)
## AIC: 1480.7
## 
## Number of Fisher Scoring iterations: 7

Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic) Đặt giả thuyết H0: Mô hình không phù hợp

# Kiểm định sự phù hợp của mô hình 
lr_test <- anova(mlogit, test = "Chisq")
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
p_value <- lr_test$Pr[2] 
p_value
## [1] 0.9337112

Kết quả kiểm định cho thấy p- value = 0,9337112 > 0,05. Như vậy, với mức ý nghĩa 5% chưa đủ cơ sở bác bỏ giả thuyết H0 nên mô hình không phù hợp với dữ liệu.

Ta thấy biến Age_segment và Marital_Status không có ý nghĩa thống kê vì vậy loại bỏ hai biến này và thực hiện lại hồi quy Logit. Mô hình trở thành

Wines_segment= Income + Kids + Education

income = df$Income
data = data.frame(Education, Kids, Wines_segment, income)

income <- cut(income,2, labels = c('low','high'))

mlogit2<- glm(data = data, formula = factor(Wines_segment) ~  income + Kids + Education, family = binomial(link = "logit"))
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
levels(factor(Wines_segment))
## [1] "Least Active Customer"  "Highly Active Customer"
summary(mlogit2)
## 
## Call:
## glm(formula = factor(Wines_segment) ~ income + Kids + Education, 
##     family = binomial(link = "logit"), data = data)
## 
## Coefficients:
##                 Estimate   Std. Error z value             Pr(>|z|)    
## (Intercept) -4.640720431  0.265047377 -17.509 < 0.0000000000000002 ***
## income       0.000119066  0.000005126  23.227 < 0.0000000000000002 ***
## Kids        -0.662237934  0.094135992  -7.035     0.00000000000199 ***
## EducationUG -0.842173559  0.225855237  -3.729             0.000192 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2997.8  on 2202  degrees of freedom
## Residual deviance: 1485.1  on 2199  degrees of freedom
##   (14 observations deleted due to missingness)
## AIC: 1493.1
## 
## Number of Fisher Scoring iterations: 7
# Kiểm định sự phù hợp của mô hình 
lr_test <- anova(mlogit2, test = "Chisq")
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
p_value <- lr_test$Pr[2] 
p_value
## [1] 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008423049

Kết quả kiểm định cho thấy p- value= 8,423049e-318 < 0,05. Như vậy, với mức ý nghĩa 5% chưa đủ cơ sở bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.

4.1.2 Ước lượng mô hình hồi quy Probit

mprobit <- glm(data = data, formula = factor(Wines_segment) ~  income + Kids + Education, family = binomial(link = "probit"))
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
levels(factor(Wines_segment))
## [1] "Least Active Customer"  "Highly Active Customer"
summary(mprobit)
## 
## Call:
## glm(formula = factor(Wines_segment) ~ income + Kids + Education, 
##     family = binomial(link = "probit"), data = data)
## 
## Coefficients:
##                 Estimate   Std. Error z value             Pr(>|z|)    
## (Intercept) -1.933177781  0.123831843 -15.611 < 0.0000000000000002 ***
## income       0.000050745  0.000002091  24.273 < 0.0000000000000002 ***
## Kids        -0.341549929  0.047513611  -7.188    0.000000000000655 ***
## EducationUG -0.448139489  0.111014386  -4.037    0.000054192258211 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2997.8  on 2202  degrees of freedom
## Residual deviance: 1728.8  on 2199  degrees of freedom
##   (14 observations deleted due to missingness)
## AIC: 1736.8
## 
## Number of Fisher Scoring iterations: 12

Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic) Đặt giả thuyết H0: Mô hình không phù hợp

# Kiểm định sự phù hợp của mô hình 
lr_test <- anova(mprobit, test = "Chisq")
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
p_value <- lr_test$Pr[2] 
p_value
## [1] 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001639956

Kết quả kiểm định cho thấy p- value= 1,639956e-265 < 0,05. Như vậy, với mức ý nghĩa 5% bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.

4.1.3 Ước lượng mô hình hồi quy Cloglog

mclog <- glm(data = data, formula = factor(Wines_segment) ~ income + Kids + Education, family = binomial(link = "cloglog"))
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
levels(factor(Wines_segment))
## [1] "Least Active Customer"  "Highly Active Customer"
summary(mclog)
## 
## Call:
## glm(formula = factor(Wines_segment) ~ income + Kids + Education, 
##     family = binomial(link = "cloglog"), data = data)
## 
## Coefficients:
##                 Estimate   Std. Error z value             Pr(>|z|)    
## (Intercept) -3.611084030  0.188761579 -19.130 < 0.0000000000000002 ***
## income       0.000077777  0.000003287  23.664 < 0.0000000000000002 ***
## Kids        -0.335843218  0.061808103  -5.434         0.0000000552 ***
## EducationUG -0.571887684  0.147439643  -3.879             0.000105 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2997.8  on 2202  degrees of freedom
## Residual deviance: 1900.1  on 2199  degrees of freedom
##   (14 observations deleted due to missingness)
## AIC: 1908.1
## 
## Number of Fisher Scoring iterations: 10

Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic) Đặt giả thuyết H0: Mô hình không phù hợp

# Kiểm định sự phù hợp của mô hình
lr_test <- anova(mclog, test = "Chisq")
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
p_value <- lr_test$Pr[2] 
p_value
## [1] 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000231772

Kết quả kiểm định cho thấy p- value= 2.033432e-232 < 0,05. Như vậy, với mức ý nghĩa 5% bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.

4.2 Các tiêu chí đánh giá mô hình

4.2.1 AIC - Akaike Information Criterion

aic <- data.frame(mlogit2$aic, mprobit$aic, mclog$aic)
colnames(aic) <- c("AIC(Logit)", "AIC(Probit)", "AIC(Cloglog)")
aic
##   AIC(Logit) AIC(Probit) AIC(Cloglog)
## 1   1493.113    1736.766     1908.087

Ta thấy mô hình hồi quy Logit có hệ số AIC nhỏ nhất (1493,113) nên ta chọn mô hình hồi quy Logit.

4.2.2 Deviance

dev <- data.frame(mlogit2$deviance, mprobit$deviance, mclog$deviance)
colnames(dev) <- c("Deviance(Logit)", "Deviance(Probit)", "Deviance(Cloglog)")
dev
##   Deviance(Logit) Deviance(Probit) Deviance(Cloglog)
## 1        1485.113         1728.766          1900.087

Ta thấy mô hình hồi quy Logit có hệ số Deviance nhỏ nhất (1485,113 ) nên ta chọn mô hình hồi quy Logit.

4.2.3 Brier Score

a <- BrierScore(mlogit2)
b <- BrierScore(mprobit)
c <- BrierScore(mclog)
bri <- data.frame(a, b, c)
colnames(bri) <- c("Logit", "Probit", "Cloglog")
bri
##        Logit     Probit    Cloglog
## 1 0.08522824 0.09483843 0.08790602

Ta thấy mô hình hồi quy Logit có hệ số Brier Score nhỏ nhất (0,08522824) nên ta chọn mô hình hồi quy Logit.

Qua các kiểm định cho thấy mô hình hồi quy Logit được lựa chọn nhiều nhất nên mô hình này sẽ được dùng để phân tích kết quả.

4.2.4 Giải thích kết quả

summary(mlogit2)
## 
## Call:
## glm(formula = factor(Wines_segment) ~ income + Kids + Education, 
##     family = binomial(link = "logit"), data = data)
## 
## Coefficients:
##                 Estimate   Std. Error z value             Pr(>|z|)    
## (Intercept) -4.640720431  0.265047377 -17.509 < 0.0000000000000002 ***
## income       0.000119066  0.000005126  23.227 < 0.0000000000000002 ***
## Kids        -0.662237934  0.094135992  -7.035     0.00000000000199 ***
## EducationUG -0.842173559  0.225855237  -3.729             0.000192 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2997.8  on 2202  degrees of freedom
## Residual deviance: 1485.1  on 2199  degrees of freedom
##   (14 observations deleted due to missingness)
## AIC: 1493.1
## 
## Number of Fisher Scoring iterations: 7

Kết quả ước lượng cho mô hình hồi quy là:

Wines_segment= -4,641e+00 + 1,191e-04Income -6,622e-01Kids -8,422e-01Education

Khoảng ước lượng cho các hệ số hồi quy

confint.default(mlogit2)
##                     2.5 %        97.5 %
## (Intercept) -5.1602037446 -4.1212371175
## income       0.0001090193  0.0001291135
## Kids        -0.8467410878 -0.4777347810
## EducationUG -1.2848416896 -0.3995054274

Chương 5. KẾT LUẬN

5.1 Kết luận

Qua kết quả phân tích ta có thể thấy quyết định chọn mua hàng rượu thông qua số tiền chi cho rượu trong vòng 2 năm qua của khách hàng tham gia khảo sát tại cửa hàng chịu tác động bởi các yếu tố: Thu nhập hộ gia dình; Số con trong nhà và Trình độ học vấn của khách hàng.

5.2 Hạn chế và hướng nghiên cứu tiếp theo

Do hạn chế về mặt thời gian cũng như khả năng tài chính nên nghiên cứu chỉ được thực hiện với số mẫu hạn chế và đối tượng khảo sát chỉ mang tính chất đại diện, chưa mang tính chất khái quát. Đây cũng là đề xuất cho hướng nghiên cứu tiếp theo.

TÀI LIỆU THAM KHẢO

[1] Erdem, T. & Swait, J., 2004. Brand Credibility, Brand Consideration, and Choice. Journal of Consumer Research, 31(1), pp.191-198.

[2] Chen, C.-H., Nguyen, B., Klaus, P. “Phil,” & Wu, M.-S., 2015. Exploring Electronic Wordof-Mouth (eWOM) in The Consumer Purchase Decision-Making Process: The Case of Online Holidays – Evidence from United Kingdom (UK) Consumers. Journal of Travel & Tourism Marketing, 32(8), pp.953–970.

[3] Hair, J. F., Anderson, R. E., Tatham, R. L., & Grablowsky, B. J., 1979.Multivariate data analysis.Tulsa, OK: Pipe Booksair, J. F., Anderson, R. E., Tatham, R. L., & Grablowsky, B. J. (1979).Multivariate data analysis.Tulsa, OK: Pipe Books.

[4] Hoàng Trọng, Chu Nguyễn Mộng Ngọc (2005), Phân tích dữ liệu nghiên cứu với SPSS, NXB Thống kê.Kotler, P. & Levy, S.J. 1969, Broadening the concept of marketing, Journal of Marketing,33(1), pp.10-15.

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

LS0tDQp0aXRsZTogIlRp4buDdSBsdeG6rW4ga+G6v3QgdGjDumMgbcO0biINCmF1dGhvcjogIlbDtSBMYW0gVnkiDQpkYXRlOiAiMjAyMy0wNy0xNyINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgdG9jX2NvbGxhcHNlZDogbm8NCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQpgYGB7ciByZHBseXJ9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeSh3ZWJzaG90MikNCmBgYA0KDQrEkOG7gSB0w6BpOiBQaMOibiB0w61jaCBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgY+G7p2Ega2jDoWNoIGjDoG5nDQoNCkxpbmsgYuG7mSBk4buvIGxp4buHdTogaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2RyaXZlL3UvMC9teS1kcml2ZQ0KDQpMaW5rIGLDoGkgdGnhu4N1IGx14bqtbjogaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2RyaXZlL3UvMC9teS1kcml2ZQ0KDQojIEzhu5xJIEPhuqJNIMagTg0KDQpM4budaSDEkeG6p3UgdGnDqm4sIHTDtGkgeGluIGfhu61pIGzhu51pIGPhuqNtIMahbiBjaMOibiB0aMOgbmggxJHhur9uIFRyxrDhu51uZyDEkOG6oWkgaOG7jWMgVMOgaSBDaMOtbmgg4oCTIE1hcmtldGluZyDEkcOjIMSRxrBhIG3DtG4gUGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCB2w6BvIGNoxrDGoW5nIHRyw6xuaCBo4buNYy4gVHJvbmcgdGjhu51pIGdpYW4gdGhhbSBnaWEgbOG7m3AgaOG7jWMgbcO0biBNw7QgcGjhu49uZyBuZ+G6q3Ugbmhpw6puIHbhu6thIHF1YSwgdMO0aSDEkcOjIMSRxrDhu6NjIHRp4bq/cCBj4bqtbiBuaGnhu4F1IGtp4bq/biB0aOG7qWMgY2h1ecOqbiBuZ8OgbmggdsOgIGtpbmggbmdoaeG7h20gdGjhu7FjIHRp4buFbiBi4buVIMOtY2ggcXVhIHPhu7EgaMaw4bubbmcgZOG6q24gY+G7p2EgZ2nhuqNuZyB2acOqbiBoxrDhu5tuZyBk4bqrbi0gVGhTLiBUcuG6p24gTeG6oW5oIFTGsOG7nW5nLiBN4bq3YyBkw7kgY8OybiBn4bq3cCBraMOzIGtoxINuIHRyb25nIHF1w6EgdHLDrG5oIHRp4bq/cCB0aHUga2nhur9uIHRo4bupYywgbmjGsG5nIHbhu5tpIHPhu7EgaMaw4bubbmcgZOG6q24gdOG6rW4gdMOsbmggdsOgIGfDs3Agw70gbeG7mXQgY8OhY2ggY2hpIHRp4bq/dCBj4bunYSBnaeG6o25nIHZpw6puIGjGsOG7m25nIGThuqtuLCB0w7RpIMSRw6MgY8OzIHRo4buDIHRp4bq/cCB0aHUga2nhur9uIHRo4bupYyB2w6AgdGjhu7FjIGhp4buHbiBiw6BpIHRp4buDdSBsdeG6rW4gbsOgeSBt4buZdCBjw6FjaCB04buRdCBoxqFuLiDEkMOieSBjaOG6r2MgY2jhuq9uIHPhur0gbMOgIG5o4buvbmcga2nhur9uIHRo4bupYyBxdcO9IGLDoXUsIGzDoCBow6BuaCB0cmFuZyDEkeG7gyB0w7RpIGPDsyB0aOG7gyB24buvbmcgYsaw4bubYyBzYXUgbsOgeS4NCg0KVHV5IG5oacOqbiwgZG8gduG7kW4ga2nhur9uIHRo4bupYyBjw7JuIG5oaeG7gXUgaOG6oW4gY2jhur8gdsOgIGto4bqjIG7Eg25nIHRp4bq/cCB0aHUgdGjhu7FjIHThur8gY8OybiBuaGnhu4F1IGLhu6Egbmfhu6EuIE3hurdjIGTDuSDEkcOjIGPhu5EgZ+G6r25nIGjhur90IHPhu6ljIG5oxrBuZyBiw6BpIHRp4buDdSBsdeG6rW4ga2jDsyBjw7MgdGjhu4MgdHLDoW5oIGto4buPaSBuaOG7r25nIHRoaeG6v3Ugc8OzdCwga8OtbmggbW9uZyB0aOG6p3kgeGVtIHjDqXQgdsOgIGfDs3Agw70gxJHhu4Mgbmjhu69uZyBiw6BpIHRp4buDdSBsdeG6rW4gdHJvbmcgdMawxqFuZyBsYWkgY+G7p2EgdMO0aSDEkcaw4bujYyBob8OgbiB0aGnhu4duIGjGoW4uDQoNCgkgVMO0aSB4aW4gY2jDom4gdGjDoG5oIGPhuqNtIMahbiENCgkgDQpUUC4gSOG7kyBDaMOtIE1pbmgsIG5nw6B5IDA5IHRow6FuZyAwOCBuxINtIDIwMjMuDQoNCiMgQ2jGsMahbmcgMS4gTeG7niDEkOG6plUNCg0KIyMgMS4xIFbhuqVuIMSR4buBIGPhuqduIG5naGnDqm4gY+G7qXUNCg0KR2nhu5FuZyBuaMawIGLhuqV0IGvhu7MgaMOgbmggdmkgbsOgbyBj4bunYSBuZ8aw4budaSBraMOhYywgaMOgbmggdmkgbXVhIGjDoG5nIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nIGPDsyB0aOG7gyDEkcaw4bujYyB4w6FjIMSR4buLbmggYuG7n2kgbmhp4buBdSB54bq/dSB04buRLiBDw6FjIGPDtG5nIHR5IG7DoHkga2jDtG5nIHTDrG0gY8OhY2ggYsOhbiBow6BuZyBtw6AgaMaw4bubbmcgdOG7m2kgc+G7sSBow6BpIGzDsm5nIGzDonUgZMOgaSBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZyBi4bqxbmcgY8OhY2ggY3VuZyBj4bqlcCBjw6FjIHPhuqNuIHBo4bqpbSBjw7MgY2jhuqV0IGzGsOG7o25nIGNhbyB24bubaSBt4bulYyB0acOqdSB04buTbiB04bqhaSBsw6J1IGTDoGkgdsOgIGxpw6puIHThu6VjIGPhu6dhIGNow61uaCBo4buNIChIYWdoc2hlbmFzIGV0IGFsLiAyMDEzKS4NCg0KSGnhu4N1IGjDoG5oIHZpIG11YSBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZyBsw6AgbeG7mXQgeeG6v3UgdOG7kSBxdWFuIHRy4buNbmcgY+G7p2EgYuG6pXQga+G7syBob+G6oXQgxJHhu5luZyBraW5oIGRvYW5oIG7DoG8uIFRyb25nIG3hu5l0IG7hu4FuIGtpbmggdOG6vyDEkeG7i25oIGjGsOG7m25nIHRp4bq/cCB0aOG7iywgaMOgbmggdmkgbXVhIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nIGzDoCBt4buZdCB54bq/dSB04buRIHLhuqV0IHF1YW4gdHLhu41uZyB0cm9uZyBz4buxIHRow6BuaCBjw7RuZyBj4bunYSBkb2FuaCBuZ2hp4buHcC4gVsOsIHbhuq15LCDEkcOjIGPDsyBy4bqldCBuaGnhu4F1IG5naGnDqm4gY+G7qXUsIGPDtG5nIHRyw6xuaCBuZ2hpw6puIGPhu6l1IHThuq1wIHRydW5nIHbDoG8gaGnhu4duIHTGsOG7o25nIG7DoHkuIE5oaeG7gXUgeeG6v3UgdOG7kSB2w6AgxJHhurdjIMSRaeG7g20ga2jDoWMgbmhhdSBjw7MgdMOhYyDEkeG7mW5nIHTDrWNoIGPhu7FjIGhv4bq3YyB0acOqdSBj4buxYyDEkeG6v24gaMOgbmggdmkgbXVhIGjDoG5nIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nLg0KDQpOZ2hpw6puIGPhu6l1IHbDoCBoaeG7g3UgY8OhYyB54bq/dSB04buRIG7DoHkgZ8OzcCBwaOG6p24gaGnhu4N1IHLDtSBoxqFuIHbhu4EgaMOgbmggdmkgY+G7p2EgbmfGsOG7nWkgdGnDqnUgZMO5bmcuIEPDoWMgxJHhurdjIMSRaeG7g20gY8OhIG5ow6JuIHbDoCBuaMOibiBraOG6qXUgeMOjIGjhu5lpIG5oxrAgdHXhu5VpIHTDoWMsIGzhu5FpIHPhu5FuZywgbmdo4buBIG5naGnhu4dwIHbDoCBuaGnhu4F1IHnhur91IHThu5Ega2jDoWMg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIGjDoG5oIHZpIG11YSBow6BuZyBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZy4gVsOsIHbhuq15IGLDoGkgdmnhur90IG7DoHkgxJHhurdjIGJp4buHdCB04bqtcCB0cnVuZyB0w6xtIGhp4buDdSBjw6FjIHnhur91IHThu5EgbmjGsCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4sIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiwgdGh1IG5o4bqtcCB2w6Agc+G7kSBjb24gdHJvbmcgaOG7mSBnaWEgxJHDrG5oIMSR4buDIHhlbSBjaMO6bmcgY8OzIOG6o25oIGjGsOG7n25nIG5oxrAgdGjhur8gbsOgbyDEkeG6v24gaMOgbmggdmkgbXVhIGjDoG5nIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nLCBt4bq3dCBow6BuZyDEkcaw4bujYyBxdWFuIHTDom0gdHJvbmcgYsOgaSBsw6AgbeG6t3QgaMOgbmcgcsaw4bujdS4NCg0KIyMgMS4yIE3hu6VjIHRpw6p1IG5naGnDqm4gY+G7qXUNCg0KVOG6rXAgdHJ1bmcgdMOsbSBoaeG7g3UgY8OhYyB54bq/dSB04buRIG5oxrAgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIHRodSBuaOG6rXAgdsOgIHPhu5EgY29uIHRyb25nIGjhu5kgZ2lhIMSRw6xuaCDEkeG7gyB4ZW0gY2jDum5nIGPDsyDhuqNuaCBoxrDhu59uZyBuaMawIHRo4bq/IG7DoG8gxJHhur9uIGjDoG5oIHZpIG11YSBow6BuZyBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZywgbeG6t3QgaMOgbmcgxJHGsOG7o2MgcXVhbiB0w6JtIHRyb25nIGLDoGkgbMOgIG3hurd0IGjDoG5nIHLGsOG7o3UuDQoNCiMjIDEuMyDEkOG7kWkgdMaw4bujbmcgbmdoacOqbiBj4bupdQ0KDQrEkOG7kWkgdMaw4bujbmcgbmdoacOqbiBj4bupdSBsw6AgdGjDtG5nIHRpbiBj4bunYSAyMjE3IGtow6FjaCBow6BuZyDEkcaw4bujYyBnaGkgbmjhuq1uIGzhuqFpIHNhdSAyIG7Eg20gbXVhIGjDoG5nIHThuqFpIG3hu5l0IGPhu61hIGjDoG5nIGLDoW4gbOG6uy4gDQoNCiMjIDEuNCBL4bq/dCBj4bqldSBuZ2hpw6puIGPhu6l1DQoNCkNoxrDGoW5nIDEuIE3hu58gxJHhuqd1DQoNCkNoxrDGoW5nIDIuIFThu5VuZyBxdWFuIG5naGnDqm4gY+G7qXUNCg0KQ2jGsMahbmcgMy4gVGhp4bq/dCBr4bq/IG5naGnDqm4gY+G7qXUNCg0KQ2jGsMahbmcgNC4gS+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdQ0KDQpDaMawxqFuZyA1LiBL4bq/dCBsdeG6rW4gdsOgIGtodXnhur9uIG5naOG7iw0KDQojIENoxrDGoW5nIDIuIFThu5RORyBRVUFOIE5HSEnDik4gQ+G7qFUNCg0KIyMgMi4xIEjDoG5oIHZpIHRpw6p1IGTDuW5nDQoNCkjDoG5oIHZpIHRpw6p1IGTDuW5nIMSRxrDhu6NjIGhp4buDdSBsw6Agbmjhu69uZyBow6BuaCB2aSDEkcaw4bujYyBt4buXaSBjw6EgbmjDom4gdGjhu4MgaGnhu4duIHRyb25nIHF1w6EgdHLDrG5oIHJhIHF1eeG6v3QgxJHhu4tuaCBtdWEgc+G6o24gcGjhuqltLCBk4buLY2ggduG7pSBuw6BvIMSRw7MuIE7huq9tIHLDtSBow6BuaCB2aSBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZyBz4bq9IGjhu5cgdHLhu6MgZG9hbmggbmdoaeG7h3AgxJHhu4EgcmEgY2hp4bq/biBsxrDhu6NjIHPhuqNuIHBo4bqpbSwgY8OhYyBr4bq/IGhv4bqhY2ggdGnhur9wIHRo4buLIHbDoCBwaMOibiBwaOG7kWkgc+G6o24gcGjhuqltIHNhbyBjaG8gaOG7o3AgbMO9LiANCg0KIEjDoG5oIHZpIG5nxrDhu51pIHRpw6p1IGTDuW5nIHPhur0g4bqjbmggaMaw4bufbmcgdHLhu7FjIHRp4bq/cCDEkeG6v24gdmnhu4djIG11YSBz4bqvbSBoYXkgdOG7qyBjaOG7kWkgc+G6o24gcGjhuqltIGPhu6dhIGjhu40uIMSQaeG7gXUgbsOgeSBjw7MgdmFpIHRyw7IgcXV54bq/dCDEkeG7i25oLCB0cm9uZyBxdcOhIHRyw6xuaCBs4bqtcCB2w6AgdGjhu7FjIGhp4buHbiBjw6FjIGNoaeG6v24gbMaw4bujYyBuaMawIGNoaeG6v24gbMaw4bujYyBtYXJrZXRpbmcuIEjDoG5oIHZpIGPhu6dhIG5nxrDhu51pIG11YSBjaOG7i3Ug4bqjbmggaMaw4bufbmcgY+G7p2EgYuG7kW4geeG6v3UgdOG7kSBjaOG7pyB54bq/dTogdsSDbiBob8OhLCB4w6MgaOG7mWksIHjDoyBo4buZaSwgdsOgIHTDom0gbMO9LiBU4bqldCBj4bqjIGPDoWMgeeG6v3UgdOG7kSB0csOqbiDEkeG7gXUgY2hvIHRhIGPDoWMgY8ahIHPhu58gxJHhu4MgdMOsbSBjw6FjaCB0w6FjIMSR4buZbmcgbmjhurFtIMSRw6FwIOG7qW5nIG5nxrDhu51pIG11YSBt4buZdCBjw6FjaCB04buRdCBoxqFuLiANCiANCiBIaeG7g3UgYuG6o24gY2jhuqV0IGPhu6dhIGjDoG5oIHZpIG11YSBow6BuZyBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZyBsw6AgbeG7mXQgdGjDoG5oIHBo4bqnbiBxdWFuIHRy4buNbmcgY+G7p2EgbmdoacOqbiBj4bupdSB0aeG6v3AgdGjhu4sgdHJvbmcgbeG7mXQgdGjhu51pIGdpYW4gxJHDoW5nIGvhu4MuIE7hur91IGPDoWMgdOG7lSBjaOG7qWMgY8OzIHRo4buDIGThu7EgxJFvw6FuIGPDoWMgcGjhuqNuIOG7qW5nIGPDsyB0aOG7gyB44bqjeSByYSBj4bunYSBraMOhY2ggaMOgbmcgxJHhu5FpIHbhu5tpIGPDoWMgY2hp4bq/biBsxrDhu6NjIHRp4bq/cCB0aOG7iyBj4bunYSBo4buNIHbDoCB0w6FjIMSR4buZbmcgxJHhur9uIGjhu40ga2hpIHRow61jaCBo4bujcCwgdGjDrCDEkWnhu4F1IHF1YW4gdHLhu41uZyBsw6AgaOG7jSBwaOG6o2kgaGnhu4N1IG5odSBj4bqndSB2w6AgxJHhu5luZyBjxqEgY+G7p2Ega2jDoWNoIGjDoG5nIHbDoCBraMOhY2ggaMOgbmcgdGnhu4FtIG7Eg25nIGPhu6dhIG3DrG5oLg0KIA0KIFbDrCB0aOG6vywgbmdoacOqbiBj4bupdSBow6BuaCB2aSB0acOqdSBkw7luZyBjw7luZyB24bubaSBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIGjDoG5oIHZpIHRpw6p1IGTDuW5nIGdpw7pwIGRvYW5oIG5naGnhu4dwIG5o4bqtbiBkaeG7h24gdsOgIGThu7EgxJFvw6FuIGjDoG5oIHZpIHRpw6p1IGTDuW5nIGPhu6dhIG5o4buvbmcgxJHhu5FpIHTGsOG7o25nIHF1w70ga2jDoWNoIGPhu6UgdGjhu4MuVOG7qyDEkcOzIMSRxrBhIHJhIGPDoWMgY2hp4bq/biBsxrDhu6NjIHBow7kgaOG7o3AgdsOgIGhp4buHdSBxdeG6oy4gRG9hbmggbmdoaeG7h3AgY+G6p24gcGjhuqNpIG5naGnDqm4gY+G7qXUgY8OhYyBuaHUgY+G6p3UsIG5o4bqtbiB0aOG7qWMsIHRo4buLIGhp4bq/dSB2w6Agbmjhu69uZyB0aMOzaSBxdWVuIGNo4buNbiBs4buxYSB2w6AgbXVhIHPhuq9tIGPhu6dhIG5ow7NtIGtow6FjaCBow6BuZyBt4bulYyB0acOqdS4gVmnhu4djIG5naGnDqm4gY+G7qXUgdGjhu4sgdHLGsOG7nW5nIHPhur0gY2hvIHRhIGPDoWMgw70gdMaw4bufbmcgduG7gSBwaMOhdCB0cmnhu4NuIHPhuqNuIHBo4bqpbSBt4bubaSwgY2jhu6ljIG7Eg25nIGPhu6dhIHPhuqNuIHBo4bqpbSwgcXV54bq/dCDEkeG7i25oIGdpw6EsIGNo4buNbiBow6xuaCB0aOG7qWMsIG7hu5lpIGR1bmcgcXXhuqNuZyBjw6FvIGPDuW5nIGPDoWMgduG6pW4gxJHhu4EgbGnDqm4gcXVhbiDEkeG6v24gY8O0bmcgdMOhYyBtYXJrZXRpbmcgY+G7p2EgZG9hbmggbmdoaeG7h3AuIEzhuq9uZyBuZ2hlIHRo4buLIHRyxrDhu51uZyDEkeG7gyBu4bqvbSBi4bqvdCBjaMOtbmggeMOhYyBjw6FjIHN1eSBuZ2jEqSB2w6AgY+G6o20gbmjhuq1uIGPhu6dhIGtow6FjaCBow6BuZyBt4bulYyB0acOqdSAtIMSR4bq3YyBiaeG7h3Qga2hpIGtow6FjaCBow6BuZyBjw7MgcXVhbiB0w6JtIHbhu4Egc+G6o24gcGjhuqltIGhv4bq3YyBk4buLY2ggduG7pSBj4bunYSBkb2FuaCBuZ2hp4buHcCAtIHbDoCBz4bq1biBzw6BuZyBuw7NpIGNodXnhu4duIHRy4buxYyB0aeG6v3AgduG7m2kga2jDoWNoIGjDoG5nLiBUw6xtIGhp4buDdSB0aOG7iyB0csaw4budbmcgxJHhu4Mgbmjhuq1uIHRo4bqleSBuaOG7r25nIHh1IHRo4bq/IG3hu5tpIHbDoCBjw6FjIHRo4budaSBjxqEgbWFuZyB24buBIGzhu6NpIG5odeG6rW4gY2hvIGRvYW5oIG5naGnhu4dwLiANCiANCiBUaGVvIEhp4buHcCBo4buZaSBtYXJrZXRpbmcgSG9hIEvhu7MsIGjDoG5oIHZpIG5nxrDhu51pIHRpw6p1IGTDuW5nIGzDoCBjw6FjIMO9IG5naMSpLCBxdWFuIMSRaeG7g20gdsOgIGPDoWMgaMOgbmggdmkgxJHGsOG7o2Mga2jDoWNoIGjDoG5nIHRo4buxYyBoaeG7h24gdHJvbmcgcXXDoSB0csOsbmggbXVhIHPhuq9tLiAgVmnhu4djIG11YSBz4bqvbSBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZyBjaOG7i3UgdMOhYyDEkeG7mW5nIG3huqFuaCBt4bq9IGPhu6dhIHnhur91IHThu5EgdOG7sSBuaGnDqm4sIHjDoyBo4buZaSwgY29uIG5nxrDhu51pIHbDoCB0w6JtIGzDrS4gxJDhu5FpIHbhu5tpIG5ow6AgcXXhuqNuIHRy4buLIHRow6wgY8OhYyB54bq/dSB04buRIHRyw6puIGtow7RuZyBraeG7g20gc2/DoXQgxJHGsOG7o2MsIHR1eSBuaGnDqm4gY2jDum5nIHBo4bqjaSDEkcaw4bujYyB4ZW0geMOpdCBr4bu5IGzGsOG7oW5nIHbDoCDEkcOhbmggZ2nDoSBjw6FjIHTDoWMgxJHhu5luZyBj4bunYSBjaMO6bmcgbMOqbiBow6BuaCB2aSBuZ8aw4budaSBtdWEgaMOgbmcuIA0KIA0KIFRoZW8gS290bGVyICYgTGV2eSwgaMOgbmggdmkgbmfGsOG7nWkgdGnDqnUgZMO5bmcgbMOgIGPDoWMgaMOgbmggdmkgY+G7pSB0aOG7gyBj4bunYSBt4buZdCBjw6EgbmjDom4ga2hpIHRo4buxYyBoaeG7h24gbmjhu69uZyBow6BuaCB2aSBtdWEgc+G6r20sIHRpw6p1IGTDuW5nIHbDoCB24bupdCBi4buPIGjDoG5nIGhvw6EgaGF5IGThu4tjaCB24bulLiANCiANCiBYw6FjIMSR4buLbmggaMOgbmggdmkgbmfGsOG7nWkgdGnDqnUgZMO5bmc6IA0KIA0KVGjhu6kgbmjhuqV0OiBMw6Agc3V5IG5naMSpIHbDoCBj4bqjbSB4w7pjIGPhu6dhIGNvbiBuZ8aw4budaSDEkeG7kWkgduG7m2kgcXXDoSB0csOsbmggbXVhIHPhuq9tIHbDoCB0acOqdSBkw7luZy4gDQogDQpUaOG7qSBoYWk6IEjDoG5oIHZpIG5nxrDhu51pIHRpw6p1IGTDuW5nIGzDoCB24bqtbiDEkeG7mW5nIHbDoCB0xrDGoW5nIHTDoWMgdsOsIG7DsyBi4buLIHTDoWMgxJHhu5luZyBi4bufaSBjw6FjIHnhur91IHThu5EgdOG7qyBtw7RpIHRyxrDhu51uZyBiw6puIG5nb8OgaSB2w6AgY8OzIHPhu7EgdMOhYyDEkeG7mW5nIHRy4bufIGzhuqFpIHbhu5tpIG3DtGkgdHLGsOG7nW5nIHjDoyBo4buZaS4gDQogDQpUaOG7qSBiYTogSMOgbmggdmkgbmfGsOG7nWkgdGnDqnUgZMO5bmcgYmFvIGfhu5NtIGPDoWMgaMOgbmggdmk6IG11YSBz4bqvbSwgdGnDqnUgZMO5bmcgdsOgIHjhu60gbMO9IHPhuqNuIHBo4bqpbSBk4buLY2ggduG7pS4gDQoNCiMjIDIuMiBMw70gdGh1eeG6v3QgduG7gSBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nDQoNCk5nxrDhu51pIHRpw6p1IGTDuW5nIHTDrG0ga2nhur9tIGPDoWMgbeG6t3QgaMOgbmcgxJHhu4MgdGjhu49hIG3Do24gbmjhu69uZyBuaHUgY+G6p3UgdsOgIG1vbmcgbXXhu5FuIGPGoSBi4bqjbiBj4bunYSBo4buNLiBOZ2hpw6puIGPhu6l1IGjDoG5oIHZpIHRpw6p1IGTDuW5nLCBuaMawbmcga2jDtG5nIHBo4bqjaSBuZ2hpw6puIGPhu6l1IHhlbSBuZ8aw4budaSB0acOqdSBkw7luZyBs4buxYSBjaOG7jW4gbeG6t3QgaMOgbmcgbsOgbyBtw6AgY2jDum5nIHRhIGPhu5EgZ+G6r25nIGhp4buDdSBjw6FjaCBkaeG7hW4gcmEgcXXDoSB0csOsbmggcmEgcXV54bq/dCDEkeG7i25oIHbDoCBuaMOibiB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBow6BuaCB2aSBtdWEgc+G6r20gKFNvbG9tb24sMjAwNSwgdHIuNi04KS4gUXV54bq/dCDEkeG7i25oIG11YSBsacOqbiBxdWFuIMSR4bq/bm3hu5l0IGNodeG7l2kgY8OhYyBs4buxYSBjaOG7jW4gxJHGsOG7o2MgaMOsbmggdGjDoG5oIGLhu59pIG5nxrDhu51pIHRpw6p1IGTDuW5nIHRyxrDhu5tjIGtoaSBtdWEgaMOgbmcsIG5nxrDhu51pIHRpw6p1IGTDuW5nIMSRxrBhIHJhIHF1eeG6v3QgxJHhu4tuaCBsacOqbiBxdWFuIMSR4bq/biDEkeG7i2EgxJFp4buDbSBtdWEsIG5ow6NuIGhp4buHdSBtb25nIG114buRbiwgbeG6q3UgbcOjLCBz4buRIGzGsOG7o25nIG11YSwgdGjhu51pIGdpYW4gbXVhLCBjaGkgcGjDrSB2w6AgcGjGsMahbmcgdGjhu6ljIHRoYW5oIHRvw6FuIChIYW5heXNoYSwgMjAxOCkuDQoNCktvdGxlciB2w6AgTGV2eSAoMTk2OSkgY2jhu4kgcmEgY2hvIHRo4bqleSBuZ8aw4budaSB0acOqdSBkw7luZyBxdXnhur90IMSR4buLbmggbXVhIGThu7FhIHRyw6puIG7hu4FuIHThuqNuZyBjxqEgYuG6o246DQoNCi0gWMOjIGjhu5lpIOKAkyDEkOG7kWkgdMaw4bujbmcga2jDoWNoIGjDoG5nIHPhu5FuZyB0cm9uZyB4w6MgaOG7mWksIGNobyBuw6puIGjDoG5oIHZpIGPhu6dhIGjhu40gY2hpIHBo4buRaSBi4bufaSBuaGnhu4F1IHnhur91IHThu5EgdHJvbmcgeMOjIGjhu5lpLiBU4burIGzhu7FhIGNo4buNbiDEg24gbeG6t2MgY2hvIMSR4bq/biB0aMOzaSBxdWVuIMSDbiB14buRbmcgxJHhu4F1IGNo4buLdSBz4buxIGNoaSBwaOG7kWkgbeG6oW5oIG3hur0gY+G7p2EgdsSDbiBow7NhLiBN4buXaSB04bqnbmcgbOG7m3AgZ2lhaSBj4bqlcCB0cm9uZyB4w6MgaOG7mWkgxJHhu4F1IGPDsyB0xrAgZHV5IGzhu7FhIGNo4buNbiBraMOhYyBuaGF1LCBkbyDEkcOzLCBoaeG7g3UgcsO1IHjDoyBo4buZaSBsw6AgdGjhu7FjIGhp4buHbiBwaMawxqFuZyBjaMOibSBiw6FuIG5o4buvbmcgdGjhu6kgbcOgIGtow6FjaCBow6BuZyBj4bqnbi4gDQoNCi0gWeG6v3UgdOG7kSBjw6EgbmjDom4tIEPDoSB0w61uaCBsw6AgbeG7mXQgY29uIG5nxrDhu51pIGPDsyB0w61uaCBjw6FjaCBraMOhYyBiaeG7h3QgZOG6q24gxJHhur9uIGPDoWMgaMOgbmggdmkg4bupbmcgeOG7rSDEkeG7kWkgduG7m2kgbcO0aSB0csaw4budbmcgeHVuZyBxdWFuaC4gVHXhu5VpIHTDoWMsIHTDrG5oIHRy4bqhbmcga2luaCB04bq/LCBs4buRaSBz4buRbmcgY8OzIHTDoWMgxJHhu5luZyDEkeG6v24gbmh1IGPhuqd1IHbhu4EgY8OhYyBsb+G6oWkgaMOgbmcgaG/DoSwgZOG7i2NoIHbhu6UuIE5nxrDhu51pIGPhuqluIHRo4bqtbiB04buJIG3hu4ksIG5nxrDhu51pIGzhu5tuIHR14buVaSBjw7MgdGjhu4MgcXVhbiB0w6JtIMSR4bq/biBjaOG6pXQgbMaw4bujbmcgc+G6o24gcGjhuqltIGjGoW4sIGhheSBuZ8aw4budaSBjw7MgxJFp4buBdSBraeG7h24ga2luaCB04bq/IHPhur0gcXVhbiB0w6JtIMSR4bq/biBz4bqjbiBwaOG6qW0gY2jhuqV0IGzGsOG7o25nIGjGoW4gc+G6o24gcGjhuqltIGdpw6EgcuG6uy4NCg0KLSBDw6FjIHnhur91IHThu5EgbWFuZyB0w61uaCBjaOG6pXQgdMOibSBsw706IMSQ4buZbmcgY8ahLCBUcmkgZ2nDoWMsIEzEqW5oIGjhu5lpLCBOaeG7gW0gdGluIHbDoCBUaMOhaSDEkeG7mS4gTmh1IGPhuqd1IHPhur0gdGjDumMgxJHhuql5IGNvbiBuZ8aw4budaSBow6BuaCDEkeG7mW5nICjEkWkgbXVhIHPhuq9tKSDEkeG7gyDEkcOhcCDhu6luZyBuaHUgY+G6p3UuIFRyaSBnacOhYyBsw6AgbeG7mXQgcXXDoSB0csOsbmggdGjDtG5nIHF1YSDEkcOzIGNvbiBuZ8aw4budaSB0dXnhu4NuIGNo4buNbiwgdOG7lSBjaOG7qWMgY8OhYyB0aMO0bmcgdGluIG5o4bqtbiDEkcaw4bujYywgc+G7sSB0aGnhur90IGvhur8gbuG7lWkgYuG6rXQgY+G7p2EgY+G7rWEgaMOgbmcgaGF5IHPhu7EgcXXhuqNuZyBjw6FvIHRydXnhu4FuIHRow7RuZyB0w6FjIMSR4buZbmcgxJHhur9uIHRyaSB0aOG7qWMgY+G7p2Ega2jDoWNoIGjDoG5nLiBDw6BuZyB0cuG7sWMgbmdoaeG7h20gbmhp4buBdSBraeG6v24gdGjhu6ljIMSRxrDhu6NjIGzEqW5oIGjhu5lpIGPDoG5nDQoNCiMjIDIuMyBDw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgxJHGsOG7o2MgY2hpYSBsw6BtIDIgbmjDs206DQoNCk3DtCBow6xuaCBo4buTaSBxdXkgY+G7lSDEkWnhu4NuDQoNCiAkzrxfaVt5X2ldPSAozrJfMCsgzrJfezF4MWl9Ky4uLisgzrJfa3hfe2tpfSkkDQoNCsSQ4buDIG3DtCBow6xuaCBo4buTaSBxdXkgY+G7lSDEkWnhu4NuIHBo4bqjaSB0aOG7j2EgbcOjbiAzIMSRaeG7gXUga2nhu4duIHNhdToNCg0KLSBUw61uaCB0dXnhur9uIHTDrW5oIGPhu6dhIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgYmnhur9uIHBo4bulIHRodeG7mWMgdsOgIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcC4NCg0KLSBQaMawxqFuZyBzYWkgc2FpIHPhu5Ega2jDtG5nIMSR4buVaS4NCg0KLSBQaMOibiBwaOG7kWkgY2h14bqpbiBj4bunYSBwaOG6p24gZMawDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgdOG7lW5nIHF1w6F0Og0KDQokzrxfaSA9IGdeey0xfSjOsl8wKyDOsl97MXgxaX0rLi4uKyDOsl9reF97a2l9KSQNCg0KVHJvbmcgbcO0IGjDrG5oIG7DoHkgaMOgbSBnKC4pIMSRxrDhu6NjIGfhu41pIGzDoCBow6BtIGxpw6puIGvhur90IChsaW5rIGZ1bmN0aW9uKSB2w6AgZyguKSBwaOG6o2kgbMOgIGjDoG0gxJHGoW4gxJFp4buHdS4NCg0KVHJvbmcgbeG7mXQgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIHThu5VuZyBxdcOhdCBz4bq9IGPDsyAzIHRow6BuaCBwaOG6p246DQoNClRow6BuaCBwaOG6p24gaOG7hyB0aOG7kW5nIChzeXN0ZW1hdGljIGNvbXBvbmVudCk6IEzDoCB0aMOgbmggdOG7lSBo4bujcCB0dXnhur9uIHTDrW5oIGPhu6dhIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcC4NCg0KVGjDoG5oIHBo4bqnbiBuZ+G6q3Ugbmhpw6puIChyYW5kb20gY29tcG9uZW50KTogTMOgIHBow6JuIHBo4buRaSB4w6FjIHN14bqldCBj4bunYSBiaeG6v24gcGjhu6UgdGh14buZYyAoZGVwZW5kZW50L3Jlc3BvbnNlIHZhcmlhYmxlKS4NCg0KSMOgbSBsacOqbiBr4bq/dCAobGluayBmdW5jdGlvbikuDQoNCiMgQ2jGsMahbmcgMy4gVEhJ4bq+VCBL4bq+IE5HSEnDik4gQ+G7qFUNCg0KIyMgMy4xIE3DtCBow6xuaCBuZ2hpw6puIGPhu6l1DQoNCiMjIyAzLjEuMSBNw7QgaMOsbmggbG9naXQNCg0KJGxvZ2l0KM+AKSA9IGxvZyAoz4AvMS3PgCkgPSDOsl8wKyDOsl8xWF8xKyDOsl8yWF8yKy4uLisgQl9rWF9rJA0KDQpW4bubaSDPgCBsw6AgeMOhYyBzdeG6pXQgxJHhu4MgYmnhur9uIHBo4bulIHRodeG7mWMgbmjhuq1uIGdpw6EgdHLhu4sg4oCcdGjDoG5oIGPDtG5n4oCdLiDEkOG7kWkgduG7m2kgaMOgbSBnbG0gcGjhuqFtIHRyw7kgdGjhu6kgaGFpIGPhu6dhIGJp4bq/biBuaOG7iyBwaMOibiB0aOG7gyBoaeG7h24gY2hvIOKAnHRow6BuaCBjw7RuZ+KAnSAoY2jDum5nIHRhIHPhu60gZOG7pW5nIGjDoG0gbGV2ZWxzKCkgxJHhu4Mga2nhu4NtIHRyYSB0aOG7qSB04buxIGPhu6dhIGPDoWMgcGjhuqFtIHRyw7kgY+G7p2EgbeG7mXQgYmnhur9uIMSR4buLbmggdMOtbmguDQoNCiMjIyAzLjEuMiBDw6FjIHRpw6p1IGNow60gxJHDoW5oIGdpw6EgbcO0IGjDrG5oDQoNCsSQ4buDIMSRw6FuaCBnacOhIGPDoWMgbcO0IGjDrG5oIGjhu5NpIGPhu5UgxJFp4buDbiBjaMO6bmcgdGEgdGjGsOG7nW5nIGThu7FhIHbDoG8gaOG7hyBz4buRIHjDoWMgxJHhu4tuaCBtw7QgaMOsbmggJChSXjIpJCwgbmjGsG5nIMSR4buRaSB24bubaSBtw7QgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggdOG7lW5nIHF1w6F0IGNow7puZyB0YSBz4butIGThu6VuZyBjw6FjIHRpw6p1IGNow60gc2F1Og0KDQoqKkFJQyAtIEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24qKg0KDQpBSUMgxJHGsOG7o2MgxJHhu4EgeHXhuqV0IGLhu59pIEFrYWlrZSBIaXJvdHVndSwgbeG7mXQgbmjDoCB0aOG7kW5nIGvDqiBo4buNYyBuZ8aw4budaSBOaOG6rXQuIEFJQyBsw6AgbeG7mXQgdGnDqnUgY2jDrSDEkcaw4bujYyBz4butIGThu6VuZyBt4buZdCBjw6FjaCBwaOG7lSBiaeG6v24gxJHhu4MgxJHDoW5oIGdpw6EgbeG7mXQgbcO0IGjDrG5oIGjhu5NpIHF1eSDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG7n2kgcGjGsMahbmcgcGjDoXAgTWF4aW11bSBMaWtla2lob29kIChNTCkuIE3hu5l0IGPDoWNoIGNodW5nIGNodW5nIGdpw6EgdHLhu4sgY+G7p2EgQUlDIGPDoG5nIG5o4buPIHRow6wgbcO0IGjDrG5oIGPDoG5nIHThu5F0LiBBSUMgxJHGsOG7o2MgdMOtbmggYuG6sW5nIGPDtG5nIHRo4bupYyBzYXU6DQokQUlDPSAtMmxuKEwpKzJrJA0KVuG7m2kgTCBsw6AgZ2nDoSB0cuG7iyBj4buxYyDEkeG6oWkgY+G7p2EgaMOgbSBo4bujcCBsw70gKGxpa2VsaWhvb2QgZnVuY3Rpb24pIHbDoCBrIGzDoCBz4buRIHRoYW0gc+G7kSBj4bunYSBtw7QgaMOsbmguDQoNCktoaSB0aOG7sWMgaGnhu4duIHZp4buHYyDGsOG7m2MgbMaw4bujbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBi4bqxbmcgbOG7h25oIGdsbSB0aMOsIGNo4buJIHPhu5EgQUlDIMSRw6MgxJHGsOG7o2MgdMOtbmggdG/DoW4gdsOgIHRo4buDIGhp4buHbiB0csOqbiBi4bqjbmcga+G6v3QgcXXhuqMgKCBi4bqxbmcgbOG7h25oIHN1bW1hcnkpDQoNCioqRGV2aWFuY2UqKg0KDQpEZXZpYW5jZSBjxaluZyBsw6AgbeG7mXQgdGnDqnUgY2jDrSBy4bqldCBwaOG7lSBiaeG6v24gxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgxJHDoW5oIGdpw6EgbeG7mXQgbcO0IGjDrG5oIGjhu5NpIHF1eSDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG7n2kgcGjGsMahbmcgcGjDoXAgSOG7o3AgbMO9IGPhu7FjIMSR4bqhaSAoTUwpLiBN4buZdCBjw6FjaCB04buVbmcgcXXDoSwgY8WpbmcgZ2nhu5FuZyBuaMawIGNo4buJIHRpw6p1IEFJQywgZ2nDoSB0cuG7iyBj4bunYSBEZXZpYW5jZSBjw6BuZyBuaOG7jyB0aMOsIG3DtCBow6xuaCBjw6BuZyB04buRdC4NCg0KbMawdSDDvTogS2hpIHRo4buxYyBoaeG7h24gdmnhu4djIMaw4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggaOG7k2kgcXV5IGLhurFuZyBs4buHbmggZ2xtIHRow6wgY2jhu4kgc+G7kSBBSUMgdsOgIERldmlhbmNlIMSRw6MgxJHGsOG7o2MgdMOtbmggdG/DoW4gdsOgIHRo4buDIGhp4buHbiB0csOqbiBi4bqjbmcga+G6v3QgcXXhuqMgKCBi4bqxbmcgbOG7h25oIHN1bW1hcnkpLg0KDQoqKkJyaWVyIFNjb3JlKioNCkzDoCBjaOG7iSB0acOqdSBkw7luZyDEkeG7gyDEkcOhbmggZ2nDoSBtw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljLCBCcmllciBTY29yZSDEkcaw4bujYyB0w61uaCBuaMawIHNhdToNCiRCPSAxL24gXHN1bV97aT0xfV57bn0ocF9pLW9faSkkDQoNClRyb25nIMSRw7M6IHBpLG9pIGzhuqduIGzGsOG7o3QgbMOgIGdpw6EgdHLhu4sgeMOhYyBzdeG6pXQgcXVhbiBzw6F0IMSRxrDhu6NjLCB2w6AgZ2nDoSB0cuG7iyB4w6FjIHN14bqldCB0w61uaCByYSB04burIG3DtCBow6xuaC4NCg0KIyMgMy4yIEThu68gbGnhu4d1IG5nacOqbiBj4bupdQ0KDQpC4buZIGThu68gbGnhu4d1IMSRxrDhu6NjIHRodSB0aOG6rXAgdOG7qyBiw6BpIG5naGnDqm4gY+G7qXUg4oCcQ29uc3VtZXIgQnV5aW5nIEJlaGF2aW9yIEFuYWx5c2lz4oCdIGPDsyDEkeG7i2EgY2jhu4k6IGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vY29kZS9hcmFkaGFuYXByYXRhcC9jb25zdW1lci1idXlpbmctYmVoYXZpb3ItYW5hbHlzaXMvbm90ZWJvb2sgdOG7qyB0cmFuZyBLYWdnbGUuY29tLiANCg0KxJDDonkgbMOgIGLhu5kgZOG7ryBsaeG7h3UgdGh1IHRo4bqtcCB0aMO0bmcgdGluIHbhu4EgbmfGsOG7nWkgdGnDqnUgZMO5bmcgbmjGsDogxJDhu5kgdHXhu5VpLCBnaeG7m2kgdMOtbmgsIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiwgdGh1IG5o4bqtcOKApiB2w6AgdGjDs2kgcXVlbiBtdWEgaMOgbmcgY+G7p2EgaOG7jSBk4buxYSB0csOqbiBz4buRIHRp4buBbiBjaGkgY2hvIGPDoWMgc+G6o24gcGjhuqltIHbhu4Egcsaw4bujdSwgdGjhu4t0LCBjw6EsIMSR4buTIG5n4buNdOKApiBRdWEgxJHDsyBnacO6cCBkb2FuaCBuZ2hp4buHcCBoaeG7g3UgcsO1IGjGoW4gduG7gSBraMOhY2ggaMOgbmcgY+G7p2EgbcOsbmggdsOgIGThu4UgZMOgbmcgxJFp4buBdSBjaOG7iW5oIHPhuqNuIHBo4bqpbSB0w7l5IHRoZW8gbmh1IGPhuqd1LCBow6BuaCB2aSB2w6AgbeG7kWkgcXVhbiB0w6JtIGPhu6UgdGjhu4MgY+G7p2EgY8OhYyBuaMOzbSDEkeG7kWkgdMaw4bujbmcga2jDoWNoIGjDoG5nIGtow6FjIG5oYXUuDQoNCljDqXQgdGhlbyDEkeG6t2MgxJFp4buDbSwgY8OhYyBiaeG6v24gxJHGsOG7o2MgY2hpYSB0aMOgbmggMiBuaMOzbSwgZ+G7k206IG5ow7NtIHRow7RuZyB0aW4gduG7gSBraMOhY2ggaGFuZyB2w6AgbmjDs20gdGjDtG5nIHRpbiB24buBIHPhuqNuIHBo4bqpbSDEkcaw4bujYyBjaOG7jW4gbXVhLiBDw6FjIGJp4bq/biDEkcaw4bujYyDEkeG6t3QgdMOqbiBuaMawIHNhdToNCg0KKipOaMOzbSBLaMOhY2ggaMOgbmcqKg0KDQrigKIJSUQ6IMSQ4buLbmggZGFuaCBkdXkgbmjhuqV0IGPhu6dhIGtow6FjaCBow6BuZw0K4oCiCVllYXJfQmlydGg6IE7Eg20gc2luaCBj4bunYSBraMOhY2ggaMOgbmcNCuKAoglFZHVjYXRpb246IFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBj4bunYSBraMOhY2ggaMOgbmcNCuKAoglNYXJpdGFsX1N0YXR1czogVMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPhu6dhIGtow6FjaCBow6BuZw0K4oCiCUluY29tZTogVGh1IG5o4bqtcCBo4buZIGdpYSDEkcOsbmggaMOgbmcgbsSDbSBj4bunYSBraMOhY2ggaMOgbmcNCuKAoglLaWRob21lOiBT4buRIGNvbiB0cm9uZyBo4buZIGdpYSDEkcOsbmgga2jDoWNoIGjDoG5nDQrigKIJVGVlbmhvbWU6IFPhu5EgbMaw4bujbmcgdGhhbmggdGhp4bq/dSBuacOqbiB0cm9uZyBo4buZIGdpYSDEkcOsbmgga2jDoWNoIGjDoG5nDQrigKIJUmVjZW5jeTogU+G7kSBuZ8OgeSBr4buDIHThu6sgbOG6p24gbXVhIGN14buRaSBjw7luZyBj4bunYSBraMOhY2ggaMOgbmcuDQoNCioqTmjDs20gQ8OhYyBz4bqjbiBwaOG6qW0gKMSQxqFuIHbhu4s6IMSQw7QgbGEgTeG7uSkqKiANCg0K4oCiCU1udFdpbmVzOiBT4buRIHRp4buBbiBjaGkgY2hvIHLGsOG7o3UgdHJvbmcgMiBuxINtIHF1YQ0K4oCiCU1udEZydWl0czogU+G7kSB0aeG7gW4gY2hpIGNobyB0csOhaSBjw6J5IHRyb25nIDIgbsSDbSBxdWENCuKAoglNbnRNZWF0UHJvZHVjdHM6IFPhu5EgdGnhu4FuIGNoaSBjaG8gdGjhu4t0IHRyb25nIDIgbsSDbSBxdWENCuKAoglNbnRGaXNoUHJvZHVjdHM6IFPhu5EgdGnhu4FuIGNoaSBjaG8gY8OhIHRyb25nIDIgbsSDbSBxdWENCuKAoglNbnRTd2VldFByb2R1Y3RzOiBT4buRIHRp4buBbiBjaGkgY2hvIMSR4buTIG5n4buNdCB0cm9uZyAyIG7Eg20gcXVhDQrigKIJTW50R29sZFByb2RzOiBT4buRIHRp4buBbiBtdWEgdsOgbmcgdHJvbmcgMiBuxINtIHF1YS4NCg0KYGBge3IgYzIyfQ0KZGYgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL01TSUkvRG93bmxvYWRzL3ZsdnlfbWFya2V0aW5nX2RhdGFzZXQgKDEpLmNzdiAiKQ0KYGBgDQoNCiMjIDMuMyBUaOG7kW5nIGvDqiBtw7QgdOG6oyBjaG8gZOG7ryBsaeG7h3UgxJHhu4tuaCBsxrDhu6NuZw0KDQojIyMgMy4zLjEgVGjhu5FuZyBrw6ogbcO0IHThuqMgYmnhur9uIEluY29tZQ0KDQpJbmNvbWU6IFRodSBuaOG6rXAgaOG7mSBnaWEgxJHDrG5oIGjDoG5nIG7Eg20gY+G7p2Ega2jDoWNoIGjDoG5nICjEkMahbiB24buLOiDEkMO0IGxhIE3hu7kpDQoNCmBgYHtyIHN1bWluY29tZX0NCnN1bW1hcnkoZGYkSW5jb21lKQ0KYGBgDQoNClRo4buRbmcga8OqIG3DtCB04bqjIGNobyB0aOG6pXkgdGh1IG5o4bqtcCB0cnVuZyBiw6xuaCB0aGVvIGjhu5kgZ2lhIMSRw6xuaCBj4bunYSBuaOG7r25nIGtow6FjaCBow6BuZyDEkeG6v24gbXVhIHThuqFpIGPhu61hIGjDoG5nIGzDoCAkNTIyNCwgbmfGsOG7nWkgY8OzIHRodSBuaOG6rXAgdGjhuqVwIG5o4bqldCBjw7MgbeG7qWMgJDE3MzAgLCBuZ8aw4budaSBjw7MgdGh1IG5o4bqtcCBjYW8gbmjhuqV0IGPDsyBt4bupYyB0aHUgbmjhuq1wICQ2NjY2NjYuIEPDsyAyNSUgaOG7mSBnaWEgxJHDrG5oIGPDsyB0aHUgbmjhuq1wIG5o4buPIGjGoW4gaG/hurdjIGLhurFuZyBt4bupYyAkMzUzMDMsIDUwJSBo4buZIGPDsyBt4bupYyB0aHUgbmjhuq1wIG5o4buPIGjGoW4gaG/hurdjIGLhurFuZyAkNTEzODIgdsOgIDc1JSBo4buZIGPDsyB0aHUgbmjhuq1wIG5o4buPIGjGoW4gaG/hurdjIGLhurFuZyAkNjg1MjIuDQoNCmBgYHtyIHBwaW5jb21lfQ0Kc3VtbWFyeShkZiRJbmNvbWUpDQojIFR1cm4gb2Ygc2NpZW50aWZpYyB2YWx1ZXMNCm9wdGlvbnMoc2NpcGVuID0gOTk5KQ0KIyBIaXN0b2dyYW0NCmhpc3QoZGYkSW5jb21lLCBicmVha3MgPSAiRkQiLCBjb2wgPSAibmF2eSIsIG1haW4gPSAiSGlzdG9ncmFtIG9mIEluY29tZSIsIHhsYWIgPSAiSW5jb21lIiwgeWxhYiA9ICJGcmVxdWVuY3kiLCB4bGltID0gYygxLCAxMDAwMDApLCB5bGltID0gYygxLCAyMDApKQ0KYGBgDQoNCiMjIyAzLjMuMiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBiaeG6v24gS2lkaG9tZQ0KDQpLaWRob21lOiBT4buRIGNvbiB0cm9uZyBo4buZIGdpYSDEkcOsbmgga2jDoWNoIGjDoG5nLg0KDQpgYGB7ciB0YmtpZH0NCnRhYmxlKGRmJEtpZGhvbWUpDQpgYGANCg0KYGBge3IgdGJraWRzfQ0KdGFibGUoZGYkS2lkaG9tZSkvc3VtKHRhYmxlKGRmJEtpZGhvbWUpKQ0KYGBgDQoNClRo4buRbmcga8OqIGNobyB0aOG6pXkgc+G7kSBo4buZIGdpYSDEkcOsbmgga2jDtG5nIGPDsyBjb24gbMOqbiDEkeG6v24gMTI4NCBo4buZIGNoaeG6v20gdOG7tyBs4buHIDU3LDkyJSwgc+G7kSBo4buZIGdpYSDEkcOsbmggY8OzIDEgY29uIGzDoCA4ODcgaOG7mSBjaGnhur9tIHThu7cgbOG7hyA0MCwwMSUsIHPhu5EgaOG7mSBnaWEgxJHDrG5oIGPDsyAyIGNvbiBsw6AgNDYgaOG7mSBjaGnhur9tIHThu7cgbOG7hyAyLDA3JS4NCg0KYGBge3IgYmRraWR9DQpraWRob21lX2NvdW50cyA8LSB0YWJsZShkZiRLaWRob21lKQ0KDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGYsYWVzKGRmJEtpZGhvbWUpKSsNCiAgZ2VvbV9iYXIoZmlsbCA9ICJuYXZ5IikrDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpLCBzdGF0ID0gJ2NvdW50Jywgdmp1c3QgPSAtIC41LCBjb2wgPSAicmVkIikgKw0KICB0aGVtZV9taW5pbWFsICgpICsNCiAgbGFicyh0aXRsZSA9ICJCYXJwbG90IG9mIEtpZGhvbWUiLCB4ID0gIktpZGhvbWUiKQ0KYGBgDQoNCg0KIyMjIDMuMi4xIFRo4buRbmcga8OqIG3DtCB04bqjIG5ow7NtIGPDoWMgc+G6o24gcGjhuqltDQoNCijEkMahbiB24buLOiDEkMO0IGxhIE3hu7kpDQoNCi0gTW50V2luZXM6IFPhu5EgdGnhu4FuIGNoaSBjaG8gcsaw4bujdSB0cm9uZyAyIG7Eg20gcXVhDQoNCi0gTW50TWVhdFByb2R1Y3RzOiBT4buRIHRp4buBbiBjaGkgY2hvIHRo4buLdCB0cm9uZyAyIG7Eg20gcXVhDQoNCi0gTW50RmlzaFByb2R1Y3RzOiBT4buRIHRp4buBbiBjaGkgY2hvIGPDoSB0cm9uZyAyIG7Eg20gcXVhDQoNCi0gTW50U3dlZXRQcm9kdWN0czogU+G7kSB0aeG7gW4gY2hpIGNobyDEkeG7kyBuZ+G7jXQgdHJvbmcgMiBuxINtIHF1YQ0KDQpUaOG7kW5nIGvDqiBtw7QgdOG6oyBj4bunYSBjw6FjIGJp4bq/biBuaMawIHNhdToNCg0KYGBge3IgZ2dwcmR9DQpwcm9kdWN0cyA8LSBkYXRhLmZyYW1lKGRmJE1udFdpbmVzLCBkZiRNbnRNZWF0UHJvZHVjdHMsIGRmJE1udEZpc2hQcm9kdWN0cywgZGYkTW50U3dlZXRQcm9kdWN0cykNCnByIDwtIHN1bW1hcnkocHJvZHVjdHMpDQpwcg0KYGBgDQoNClF1YSB0aOG7kW5nIGvDqiB0YSB0aOG6pXk6DQoNCi0gU+G7kSB0aeG7gW4gY2hpIGNobyByxrDhu6N1IGPhu6dhIGPDoWMgaOG7mSBnaWEgxJHDrG5oIHRyb25nIDIgbsSDbSBxdWEgdHJ1bmcgYsOsbmggbMOgICQzMDUuIFRyb25nIMSRw7MgY8OzIG5o4buvbmcgaOG7mSBnaWEgxJHDrG5oIGtow7RuZyBjaGkgdGnhu4FuIGNobyByxrDhu6N1LiBT4buRIHRp4buBbiBo4buZIGdpYSDEkcOsbmggY2hpIGNobyByxrDhu6N1IG5oaeG7gXUgbmjhuqV0IHRyb25nIG3huqt1IGzDoCAkMTQ5My4gMjUlIGjhu5kgY8OzIG3hu6ljIGNoaSB0aeG7gW4gY2hvIHLGsOG7o3Ugbmjhu48gaMahbiBob+G6t2MgYuG6sW5nICQyNCwgNTAlIGjhu5kgY8OzIG3hu6ljIGNoaSBuaOG7jyBoxqFuIGhv4bq3YyBi4bqxbmcgJDE3NCB2w6AgNzUlIGPDsyBt4bupYyBjaGkgbmjhu48gaMahbiBob+G6t2MgYuG6sW5nICQ1MDUuDQoNCi0gU+G7kSB0aeG7gW4gY2hpIGNobyBjw6FjIHPhuqNuIHBo4bqpbSB0aOG7i3QgY+G7p2EgY8OhYyBo4buZIGdpYSDEkcOsbmggdHJvbmcgMiBuxINtIHF1YSB0cnVuZyBiw6xuaCBsw6AgJDE2Ny42LiBUcm9uZyDEkcOzIGPDsyBuaOG7r25nIGjhu5kgZ2lhIMSRw6xuaCBraMO0bmcgY2hpIHRp4buBbiBjaG8gdGjhu4t0LiBT4buRIHRp4buBbiBo4buZIGdpYSDEkcOsbmggY2hpIGNobyB0aOG7i3Qgbmhp4buBdSBuaOG6pXQgdHJvbmcgbeG6q3UgbMOgICQxNzI1LjAuIDI1JSBo4buZIGPDsyBt4bupYyBjaGkgdGnhu4FuIGNobyB0aOG7i3Qgbmjhu48gaMahbiBob+G6t2MgYuG6sW5nICQxNi4wLCA1MCUgaOG7mSBjw7MgbeG7qWMgY2hpIG5o4buPIGjGoW4gaG/hurdjIGLhurFuZyAkNjguMCB2w6AgNzUlIGPDsyBt4bupYyBjaGkgbmjhu48gaMahbiBob+G6t2MgYuG6sW5nICQyMzMuMC4NCg0KLSBT4buRIHRp4buBbiBjaGkgY2hvIGPDoWMgc+G6o24gcGjhuqltIGPDoSBj4bunYSBjw6FjIGjhu5kgZ2lhIMSRw6xuaCB0cm9uZyAyIG7Eg20gcXVhIHRydW5nIGLDrG5oIGzDoCAkMzcuNjMuIFRyb25nIMSRw7MgY8OzIG5o4buvbmcgaOG7mSBnaWEgxJHDrG5oIGtow7RuZyBjaGkgdGnhu4FuIGNobyBjw6EuIFPhu5EgdGnhu4FuIGjhu5kgZ2lhIMSRw6xuaCBjaGkgY2hvIGPDoSBuaGnhu4F1IG5o4bqldCB0cm9uZyBt4bqrdSBsw6AgJDI1OS4wMC4gMjUlIGjhu5kgY8OzIG3hu6ljIGNoaSB0aeG7gW4gY2hvIGPDoSBuaOG7jyBoxqFuIGhv4bq3YyBi4bqxbmcgJDMuMDAsIDUwJSBo4buZIGPDsyBt4bupYyBjaGkgbmjhu48gaMahbiBob+G6t2MgYuG6sW5nICQxMi4wMCB2w6AgNzUlIGPDsyBt4bupYyBjaGkgbmjhu48gaMahbiBob+G6t2MgYuG6sW5nICQ1MC4wMC4NCg0KLSBT4buRIHRp4buBbiBjaGkgY2hvIGPDoWMgc+G6o24gcGjhuqltIMSR4buTIG5n4buNdCBj4bunYSBjw6FjIGjhu5kgZ2lhIMSRw6xuaCB0cm9uZyAyIG7Eg20gcXVhIHRydW5nIGLDrG5oIGzDoCAkMjcuMDIuIFRyb25nIMSRw7MgY8OzIG5o4buvbmcgaOG7mSBnaWEgxJHDrG5oIGtow7RuZyBjaGkgdGnhu4FuIGNobyDEkeG7kyBuZ+G7jXQuIFPhu5EgdGnhu4FuIGjhu5kgZ2lhIMSRw6xuaCBjaGkgY2hvIMSR4buTIG5n4buNdCBuaGnhu4F1IG5o4bqldCB0cm9uZyBt4bqrdSBsw6AgJDI2Mi4wMC4gMjUlIGjhu5kgY8OzIG3hu6ljIGNoaSB0aeG7gW4gY2hvIMSR4buTIG5n4buNdCBuaOG7jyBoxqFuIGhv4bq3YyBi4bqxbmcgJDEuMDAsIDUwJSBo4buZIGPDsyBt4bupYyBjaGkgbmjhu48gaMahbiBob+G6t2MgYuG6sW5nICQ4LjAwIHbDoCA3NSUgY8OzIG3hu6ljIGNoaSBuaOG7jyBoxqFuIGhv4bq3YyBi4bqxbmcgJDMzLjAwLg0KDQpgYGB7ciBnZ3ByZGR9DQoNCmNvbHVtbl9uYW1lcyA8LSBuYW1lcyhkZls5OjEzXSkNCnByb2R1Y3RfY291bnRzIDwtIGNvbFN1bXMoZGZbOToxM10pDQpwcm9wb3J0aW9ucyA8LSBwcm9kdWN0X2NvdW50cy9zdW0ocHJvZHVjdF9jb3VudHMpDQpwaWUocHJvcG9ydGlvbnMsIGxhYmVscyA9IGNvbHVtbl9uYW1lcywgbWFpbiA9ICJQaWUgQ2hhcnQgb2YgNSBQcm9kdWN0cyIsIGNvbCA9IHJhaW5ib3cobGVuZ3RoKHByb2R1Y3RfY291bnRzKSkpDQpgYGANCg0KIyMgMy40IFRo4buRbmcga8OqIG3DtCB04bqjIGNobyBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oIA0KDQojIyMgMy40LjEgVGjhu5FuZyBrw6ogbcO0IHThuqMgYmnhur9uIE1hcml0YWxfU3RhdHVzDQoNCkJp4bq/biBNYXJpdGFsX1N0YXR1cyB0aOG7gyBoaeG7h24gVMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPhu6dhIGPDoWMga2jDoWNoIGjDoG5nIMSRxrDhu6NjIGto4bqjbyBzw6F0LiANCg0KYGBge3IgdGJzdHQxfQ0KDQp0YWJsZShkZiRNYXJpdGFsX1N0YXR1cykNCmBgYA0KDQpUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gY+G7p2EgMjIxNyBraMOhY2ggaMOgbmcgxJHGsOG7o2Mga2jhuqNvIHPDoXQgbmjGsCBzYXU6DQoNCi0gxJDDoyBseSBow7RuOiAyMzIgY2hp4bq/bSAxMCw0NiUNCi0gxJDDoyBr4bq/dCBow7RuOiA4NTggY2hp4bq/bSAzOCw2NiUNCi0gxJDhu5ljIHRow6JuOiA0NzYgY2hp4bq/bSAyMSw0NyUNCi0gQ2h1bmcgc+G7kW5nOiA1NzUgY2hp4bq/bSAyNSw4OSUNCi0gR8OzYSBwaOG7pTogNzYgY2hp4bq/bSAzLDQzJQ0KDQpU4bu3IGzhu4cgY+G7p2EgY8OhYyB0w6xuaCB0cuG6oW5nIHRyw6puIMSRxrDhu6NjIHRo4buDIGhp4buHbiBuaMawIHNhdToNCg0KYGBge3Igc3Vtc3R0MX0NCnRhYmxlKGRmJE1hcml0YWxfU3RhdHVzKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGRmLGFlcyhkZiRNYXJpdGFsX1N0YXR1cykpKw0KICBnZW9tX2JhcihmaWxsID0gIm5hdnkiKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudChhZnRlcl9zdGF0KGNvdW50L3N1bShjb3VudCkpKSksIHN0YXQgPSAnY291bnQnLCB2anVzdCA9IC0gLjUsIGNvbCA9ICJyZWQiKSArDQogIHRoZW1lX21pbmltYWwgKCkgKw0KICBsYWJzKHRpdGxlID0gIkN1c3RvbWVyJ3MgbWFyaXRhbCBzdGF0dXMiLCB4ID0gIk1hcml0YWwgU3RhdHVzIikNCg0KYGBgDQoNClRhIGPDsyB0aOG7gyB0aOG6pXkgbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIGNoaeG6v20gdOG7tyBs4buHIGNhbyBuaOG6pXQgduG7gSB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gY+G7p2Ega2jDoWNoIGjDoG5nIMSR4bq/biB24bubaSBj4butYSBow6BuZyBuw6B5LCB0aeG6v3AgdGhlbyBzYXUgxJHDsyBs4bqnbiBsxrDhu6N0IGzDoCBjaHVuZyBz4buRbmcsIMSR4buZYyB0aMOibiwgxJHDoyBseSB0aMOibiB2w6AgZ8OzYSBwaOG7pS4gDQoNCg0KIyMjIDMuMi4yIFRo4buRbmcga8OqIG3DtCB04bqjIGJp4bq/biBFZHVjYXRpb24NCg0KYGBge3IgdGJzdHR9DQp0YWJsZShkZiRFZHVjYXRpb24pDQpgYGANCg0KYGBge3Igc3Vtc3R0fQ0KDQp0YWJsZShkZiRFZHVjYXRpb24pDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGYsYWVzKGRmJEVkdWNhdGlvbikpKw0KICBnZW9tX2JhcihmaWxsID0gIm5hdnkiKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudChhZnRlcl9zdGF0KGNvdW50L3N1bShjb3VudCkpKSksIHN0YXQgPSAnY291bnQnLCB2anVzdCA9IC0gLjUsIGNvbCA9ICJyZWQiKSArDQogIHRoZW1lX21pbmltYWwgKCkgKw0KICBsYWJzKHRpdGxlID0gIkN1c3RvbWVyJ3MgRWR1Y2F0aW9uIiwgeCA9ICJFZHVjYXRpb24iKQ0KYGBgDQoNClF1YSBiaeG7g3UgxJHhu5MgdGEgY8OzIHRo4buDIHRo4bqleSBz4buRIGzGsOG7o25nIGtow6FjaCBow6BuZyBjw7MgdMOsbmggdHLhuqFuZyBo4buNYyB24bqlbiDEkcOjIHThu5F0IG5naGnhu4dwIGNoaeG6v20gdOG7tyBs4buHIGNhbyBuaOG6pXQgdHJvbmcgbmjDs20ga2jhuqNvIHPDoXQgY2hp4bq/bSA1MCwzJSANCg0KIyMgMy41IENodXnhu4NuIMSR4buVaSBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oDQoNCk5ow7NtICJNYXJyaWVkIiwgIlRvZ2V0aGVyIiBz4bq9IMSRxrDhu6NjIHhlbSBsw6AgIlJlbGF0aW9uc2hpcCIuIFRyb25nIGtoaSAiRGl2b3JjZWQiLCAiV2lkb3ciLCAiU2luZ2xlIiB0cuG7nyB0aMOgbmggIlNpbmdsZSINCg0KYGBge3IgcmMzMjF9DQojIENodXnhu4NuIMSR4buVaSBiaeG6v24gTWFyaXRhbF9TdGF0dXMNCmRmJE1hcml0YWxfU3RhdHVzIDwtIGdzdWIoIk1hcnJpZWR8VG9nZXRoZXIiLCAiUmVsYXRpb25zaGlwIiwgZGYkTWFyaXRhbF9TdGF0dXMpDQpkZiRNYXJpdGFsX1N0YXR1cyA8LSBnc3ViKCJEaXZvcmNlZHxXaWRvd3xTaW5nbGUiLCAiU2luZ2xlIiwgZGYkTWFyaXRhbF9TdGF0dXMpDQpNYXJpdGFsX1N0YXR1cyA8LSBkZiRNYXJpdGFsX1N0YXR1cw0KYGBgDQoNCk5ow7NtICJQaEQiLCAiR3JhZHVhdGlvbiIgdsOgICJNYXN0ZXIiIHRy4bufIHRow6BuaCAiUEciLiBOaMOzbSAiQmFzaWMiIHbDoCAiMm4gQ3ljbGUiIHRy4bufIHRow6BuaCAiVUcNCmBgYHtyIHJjMzIyfQ0KIyBDaHV54buDbiDEkeG7lWkgYmnhur9uIEVkdWNhdGlvbg0KZGYkRWR1Y2F0aW9uIDwtIGdzdWIoIlBoRHxHcmFkdWF0aW9ufE1hc3RlciIsICJQRyIsIGRmJEVkdWNhdGlvbikNCmRmJEVkdWNhdGlvbiA8LSBnc3ViKCJCYXNpY3wybiBDeWNsZSIsICJVRyIsIGRmJEVkdWNhdGlvbikNCkVkdWNhdGlvbiA8LSBkZiRFZHVjYXRpb24NCmBgYA0KDQpT4buRIGNvbiB0cm9uZyBo4buZIGdpYSDEkcOsbmggYuG6sW5nIHRy4bq7IGVtIHRyb25nIGjDtCBnaWEgxJHDrG5oIGPhu5luZyB24bubaSBz4buRIHRy4bq7IHbhu4sgdGjDoG5oIG5pw6puIHRyb25nIGjhu5kgZ2lhIMSRw6xuaA0KYGBge3IgcmMzMzN9DQojIENyZWF0ZSBLaWRzDQpLaWRzIDwtIGRmJEtpZGhvbWUgKyBkZiRUZWVuaG9tZQ0KYGBgDQoNCmBgYHtyIHBkYXRhfQ0KcHJvZHVjdF9kYXRhIDwtIGxpc3QoKQ0KZm9yIChpIGluIDE6bGVuZ3RoKGRmKSkgew0KICBwcm9kdWN0ZGF0YSA8LSBjKGRmJE1udFdpbmVzW2ldLCBkZiRNbnRNZWF0UHJvZHVjdHNbaV0sIGRmJE1udEZpc2hQcm9kdWN0c1tpXSwgDQogICAgICAgICAgICAgICAgICAgZGYkTW50U3dlZXRQcm9kdWN0c1tpXSwgZGYkTW50R29sZFByb2RzW2ldKQ0KICBwcm9kdWN0X2RhdGEgPC0gYyhwcm9kdWN0X2RhdGEsIGxpc3QocHJvZHVjdGRhdGEpKQ0KfQ0KUHJvZHVjdHNfREYgPC0gZGF0YS5mcmFtZShtYXRyaXgodW5saXN0KHByb2R1Y3RfZGF0YSksIG5yb3c9bGVuZ3RoKHByb2R1Y3RfZGF0YSksIGJ5cm93PVRSVUUpKQ0KY29sbmFtZXMoUHJvZHVjdHNfREYpIDwtIGMoJ1dpbmVzJywgJ01lYXQnLCAnRmlzaCcsICdTd2VldHMnLCAnR29sZCcpDQpoZWFkKFByb2R1Y3RzX0RGKQ0KYGBgDQpUw61uaCBz4buRIHR14buVaSB04burIG7Eg20gc2luaCBraMOhY2ggaMOgbmcsIMSR4buZIHR14buVaSB04burIDAtIDMwIMSRxrDhu6NjIGfDoW4gdGjDoG5oICJZb3VuZyIgY2jhu4kga2jDoWNoIGjDoG5nIGdp4bubaSB0cuG6uywgxJHhu5kgdHXhu5VpIHThu6sgMzAtIDQ1IGfDoW4gdGjDoG5oICJBZHV0bCIgxJHGsOG7o2MgZ+G7jWkgbMOgIG5nxrDhu51pIGzhu5tuLCAgxJHhu5kgdHXhu5VpIHThu6sgNDUtIDY1IGfDoW4gdGjDoG5oICJNYXR1cmUiIGNo4buJIG5nxrDhu51pIHRyxrDhu59uZyB0aMOgbmgsIMSR4buZIHR14buVaSB04burIDY1LSAxMjAgZ8OhbiB0aMOgbmggIlNlbmlvciIgIGzDoCBuaMOzbSBuZ8aw4budaSBjYW8gdHXhu5VpLg0KDQpLaMOhY2ggaMOgbmcgY2hpIHThu6sgMC0gMTAwJCBjaG8gcsaw4bujdSB0cm9uZyB2w7JuZyAyIG7Eg20gxJHGsOG7o2MgZ+G7jWkgbMOgIGtow6FjaCBow6BuZyBjaGkgdGnDqnUgdGjhuqVwIGNobyByxrDhu6N1LCBnw6FuIHRow6BuaCAiTGVhc3QgQWN0aXZlIEN1c3RvbWVyIi4gVHJvbmcga2hpIMSRw7MsIGtow6FjaCBow6BuZyBjaGkgdOG7qyAxMDAtIDE1MDAkIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEgxJHGsOG7o2MgZ+G7jWkgbMOgIGtow6FjaCBow6BuZyBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1LCBnw6FuIHRow6BuaCAiSGlnaGx5IEFjdGl2ZSBDdXN0b21lciINCg0KYGBge3IgNn0NCmxpYnJhcnkoZHBseXIpDQoNCiNDcmVhdGUgQWdlIHNlZ21lbnQNCkFnZSA8LSAyMDIzIC0gZGYkWWVhcl9CaXJ0aA0KY3V0X2xhYmVsc19BZ2UgPC0gYygiWW91bmciLCAiQWR1bHQiLCAiTWF0dXJlIiwgIlNlbmlvciIpDQpjdXRfYmlucyA8LSBjKDAsIDMwLCA0NSwgNjUsIDEyMCkNCkFnZV9zZWdtZW50IDwtIGN1dChBZ2UsIGJyZWFrcz1jdXRfYmlucywgbGFiZWxzPWN1dF9sYWJlbHNfQWdlKQ0KDQojQ3JlYXRlIFdpbmVzIHNlZ21lbnQNCmN1dF9sYWJlbHMgPC0gYygnTGVhc3QgQWN0aXZlIEN1c3RvbWVyJywgJ0hpZ2hseSBBY3RpdmUgQ3VzdG9tZXInKQ0KY3V0X2JpbnMgPC0gYygwLCAxMDAsIDE1MDApDQpXaW5lc19zZWdtZW50IDwtIGN1dChkZiRNbnRXaW5lcywgYnJlYWtzPWN1dF9iaW5zLCBsYWJlbHM9Y3V0X2xhYmVscykNCmBgYA0KDQojIyAzLjYgVGjhu5FuZyBrw6ogbcO0IHThuqMgY2hvIDIgYmnhur9uIMSR4buLbmggdMOtbmgNCg0KIyMjIDMuNi4xIFBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgTWFyaXRhbF9TdGF0dXMgdsOgIFdpbmVzX3NlZ21lbnQNCg0KQuG6o25nIHThuqduIHN14bqldCBj4bunYSBoYWkgYmnhur9uIE1hcml0YWxfU3RhdHVzIHbDoCBXaW5lc19zZWdtZW50DQoNCmBgYHtyIHRzbXd9DQptdyA8LXRhYmxlKE1hcml0YWxfU3RhdHVzLCBXaW5lc19zZWdtZW50KQ0KbXcNCmBgYA0KDQpgYGB7ciAyYjFtd30NCm13MiA8LSBkYXRhLmZyYW1lKE1hcml0YWxfU3RhdHVzLCBXaW5lc19zZWdtZW50KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KG13MiwgYWVzKE1hcml0YWxfU3RhdHVzLCBmaWxsID0gV2luZXNfc2VnbWVudCkpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZG9kZ2UnKSArDQogIGxhYnModGl0bGUgPSAiQW5hbHlzaXMgb2YgdGhlIENvcnJlbGF0aW9uIGJldHdlZW4gTWFyaXRhbCBTdGF0dXMgYW5kIFdpbmVzX3NlZ21lbnQiKQ0KYGBgDQoNClF1YSBiaeG7g3UgxJHhu5MgdGEgY8OzIHRo4buDIHRo4bqleSwgZMO5IOG7nyB0w6xuaCB0cuG6oW5nIMSR4buZYyB0aMOibiBoYXkgdHJvbmcgbeG7kWkgcXVhbiBo4buHIHRow6wgc+G7kSB0aeG7gW4gYuG7jyByYSBjaG8gcsaw4bujdSDhu58gY8OhYyBo4buZIGdpYSDEkcOsbmggdHJvbmcgbmjDs20gcXVhbiBzw6F0IGzDoCBraMOhIGNhby4gVHJvbmcgxJHDsywgbmjDs20ga2jDoWNoIGjDoG5nIHRyb25nIG3hu5FpIHF1YW4gaOG7hyBsw6AgY2hpIG5oaeG7gXUgdGnhu4FuIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEgbmjhuqV0LiBLaG/huqNuZyA2MDAga2jDoWNoIGjDoG5nIOG7nyBuaMOzbSB0cm9uZyBt4buRaSBxdWFuIGjhu4cgY8OzIHRow7NpIHF1ZW4gY2hpIMOtdCB0aeG7gW4gY2hvIHLGsOG7o3UgdsOgIMSR4bq/biBoxqFuIDgwMCBuZ8aw4budaSB0cm9uZyBuaMOzbSBuw6B5IGNoaSBuaGnhu4F1IHRp4buBbiBjaG8gcsaw4bujdSB0cm9uZyB2w7JuZyAyIG7Eg20gcXVhLiBUcm9uZyBraGkgxJHDsywgbmjDs20ga2jDoWNoIGjDoG5nIMSR4buZYyB0aMOibiBjw7Mga2hv4bqjbmcgaMahbiAyMDAgbmfGsOG7nWkgY2hpIMOtdCB0aeG7gW4gY2hvIHLGsOG7o3UgdsOgIGtob+G6o25nIDQ1MCBuZ8aw4budaSBjaGkgbmhp4buBdSB0aeG7gW4gY2hvIHLGsOG7o3UgdHJvbmcgMiBuxINtIHF1YS4NCg0KIyMjIDMuNi4yIFBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgQWdlX3NlZ21lbnQgdsOgIFdpbmVzX3NlZ21lbnQNCg0KQuG6o25nIHThuqduIHN14bqldCBj4bunYSBoYWkgYmnhur9uIE1hcml0YWxfU3RhdHVzIHbDoCBXaW5lc19zZWdtZW50DQoNCmBgYHtyIHRzd2F9DQphdyA8LXRhYmxlKEFnZV9zZWdtZW50LCBXaW5lc19zZWdtZW50KQ0KYXcNCmBgYA0KDQpgYGB7ciAyYjFhd30NCmF3MiA8LSBkYXRhLmZyYW1lKEFnZV9zZWdtZW50LCBXaW5lc19zZWdtZW50KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KG13MiwgYWVzKEFnZV9zZWdtZW50LCBmaWxsID0gV2luZXNfc2VnbWVudCkpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZG9kZ2UnKSArDQogIGxhYnModGl0bGUgPSAiQW5hbHlzaXMgb2YgdGhlIENvcnJlbGF0aW9uIGJldHdlZW4gQWdlX3NlZ21lbnQgYW5kIEV4cGVuc2VzIikNCmBgYA0KDQoNClF1YSBiaeG7g3UgxJHhu5MgdGEgY8OzIHRo4buDIHRo4bqleSwgbmjDs20ga2jDoWNoIGjDoG5nIHThu6sgMzAgdHXhu5VpIHRy4bufIGzDqm4gY2hpIG5oaeG7gXUgdGnhu4FuIGNobyByxrDhu6N1IGjGoW4gbmjDs20ga2jDoWNoIGjDoG5nIFUzMCB0deG7lWkuIFRyb25nIMSRw7MsIG5ow7NtIGtow6FjaCBow6BuZyB0csaw4bufbmcgdGjDoG5oIHThu6sgNDUtIDY1IGzDoCBuaMOzbSBjaGkgbmhp4buBdSB0aeG7gW4gY2hvIHLGsOG7o3UgbmjhuqV0IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEga2hpIMSR4bq/biBoxqFuIDgwMCBuZ8aw4budaSB0aHXhu5ljIG5ow7NtIGtow6FjaCBow6BuZyBjw7MgaG/huqF0IMSR4buZbmcgY2hpIHRpw6p1IGNhby4gDQoNCiMjIyAzLjYuMyBQaMOibiB0w61jaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIEVkdWNhdGlvbiB2w6AgV2luZXNfc2VnbWVudA0KDQpgYGB7ciB0c2V3fQ0KZXcgPC10YWJsZShFZHVjYXRpb24sIFdpbmVzX3NlZ21lbnQpDQpldw0KYGBgDQoNCmBgYHtyIDJiMW1lfQ0KZXcyIDwtIGRhdGEuZnJhbWUoRWR1Y2F0aW9uLCBXaW5lc19zZWdtZW50KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGV3MiwgYWVzKEVkdWNhdGlvbiwgZmlsbCA9IFdpbmVzX3NlZ21lbnQpKSArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2RvZGdlJykgKw0KICBsYWJzKHRpdGxlID0gIkFuYWx5c2lzIG9mIHRoZSBDb3JyZWxhdGlvbiBiZXR3ZWVuIEVkdWNhdGlvbiBhbmQgV2luZXNfc2VnbWVudCIpDQpgYGANClF1YSBiaeG7g3UgxJHhu5MgdGEgY8OzIHRo4buDIHRo4bqleSwga2jDoWNoIGjDoG5nIOG7nyBuaMOzbSBjw7MgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGzDoCBQRyBjw7MgdGjDs2kgcXVlbiBjaGkgbmhp4buBdSB0aeG7gW4gaMahbiBjaG8gcsaw4bujdSBraGkgY8OzIMSR4bq/biBraG/huqNuZyAxMjAwIGtow6FjaCBow6BuZyB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSBjYW8gY2hvIHLGsOG7o3UgdHJvbmcgdsOybmcgMiBuxINtIHF1YS4NCg0KDQojIyAzLjcgUuG7p2kgcm8gdMawxqFuZyDEkeG7kWkgDQoNCkvDvSBoaeG7h3UgJM+AX2kkIGzDoCB04bu3IGzhu4cg4oCcdGjDoG5oIGPDtG5n4oCdIGPhu6dhIGJp4bq/biBwaOG7pSB0aHXhu5ljIChyZXNwb25zZSB2YXJpYWJsZSkgdMawxqFuZyDhu6luZyB24bubaSB04burbmcgYmnhu4N1IGhp4buHbiBj4bunYSBiaeG6v24gxJHhu5ljIGzhuq1wLg0KDQpU4burIGLhuqNuZyB04bqnbiBzdeG6pXQsIGNow7puZyB0YSB0w61uaCAkz4BfMS/PgF8yJCwgcGjDom4gc+G7kSBuw6B5IGfhu41pIGzDoCBS4bunaSBybyB0xrDGoW5nIMSR4buRaSAoUmVsYXRpdmUgcmlzaykgZ2nhu69hIDIgYmnhu4N1IGhp4buHbiBraMOhYyBuaGF1IGPhu6dhIGJp4bq/biBwaOG7pSB0aHXhu5ljLg0KDQojIyMgMy43LjEgUuG7p2kgcm8gdMawxqFuZyDEkeG7kWkgZ2nhu69hIE1hcml0YWxfU3RhdHVzIHbDoCBXaW5lc19zZWdtZW50DQoNCmBgYHtyIGM4NDF9DQphZGRtYXJnaW5zKG13KQ0KYGBgDQpU4burIGLhuqNuZyB04bqnbiBzdeG6pXQgY2jDum5nIHRhIHRo4bqleQ0KDQotIEtow6FjaCBow6BuZyBjw7MgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGzDoCB0cm9uZyBt4buRaSBxdWFuIGjhu4cgY8OzIDYwMCBraMOhY2ggaMOgbmcgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgdGjhuqVwIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEgdsOgIDgyNiBraMOhY2ggaMOgbmcgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEuDQoNCi0gS2jDoWNoIGjDoG5nIGPDsyB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gbMOgIMSR4buZYyB0aMOibiBjw7MgMzI3IGtow6FjaCBow6BuZyB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSB0aOG6pXAgY2hvIHLGsOG7o3UgdHJvbmcgdsOybmcgMiBuxINtIHF1YSB2w6AgNDUxIGtow6FjaCBow6BuZyB0cm9uZyB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSBjYW8gY2hvIHLGsOG7o3UgdHJvbmcgdsOybmcgMiBuxINtIHF1YS4NCg0KQ2jDum5nIHRhIHTDrW5oIHLhu6dpIHJvIHTGsMahbmcgxJHhu5FpIChyZWxhdGl2ZSByaXNrKS4NCg0KYGBge3IgYzgxMX0NCiMjIEzhu4duaCBuw6B5IHTDrW5oIHJlbGF0aXZlcmlzayBjaG8gduG7iyB0csOtIDEyIHbDoCAyMg0KbGlicmFyeSgiRGVzY1Rvb2xzIikgDQpSZWxSaXNrKG13KQ0KYGBgDQoNClRoZW8ga+G6v3QgcXXhuqMgdHLDqm4gY2hvIHRo4bqleSB04bu3IGzhu4cgcuG7p2kgcm8gdMawxqFuZyDEkeG7kWkgY+G7p2Ega2jDoWNoIGjDoG5nIGNoaSB0acOqdSBjYW8gY2hvIHLGsOG7o3UgbMOgIHTDrW5oIGzDoCAxLDAwMTA2OCwgY8OzIG5naMSpYSBsw6AgdOG7tyBs4buHIG5o4buvbmcga2jDoWNoIGjDoG5nIGtow6FjaCBow6BuZyBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IGPDsyB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gbMOgIHRyb25nIG3hu5FpIHF1YW4gaOG7hyBn4bqlcCAxLDAwMTA2OCBs4bqnbiB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcga2jDoWNoIGjDoG5nIGNoaSB0acOqdSBjYW8gY2hvIHLGsOG7o3UgY8OzIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBsw6AgxJHhu5ljIHRow6JuLg0KDQojIyMgMy43LjIgQuG6o25nIHThuqduIHN14bqldCBnaeG7r2EgQWdlX3NlZ21lbnQgdsOgIFdpbmVzX3NlZ21lbnQNCg0KYGBge3IgYzgyfQ0KYWRkbWFyZ2lucyhhdykNCmBgYA0KVOG7qyBi4bqjbmcgdOG6p24gc3XhuqV0IGNow7puZyB0YSB0aOG6pXkNCg0KLSBLaMOhY2ggaMOgbmcgY8OzIMSR4buZIHR14buVaSBsw6AgbmfGsOG7nWkgdHLhursgY8OzIDMga2jDoWNoIGjDoG5nIHRodeG7mWMgbmjDs20gY2hpIHRpw6p1IHRo4bqlcCBjaG8gcsaw4bujdSB0cm9uZyB2w7JuZyAyIG7Eg20gcXVhIHbDoCAxMSBraMOhY2ggaMOgbmcgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEuDQoNCi0gS2jDoWNoIGjDoG5nIGPDsyDEkeG7mSB0deG7lWkgbMOgIG5nxrDhu51pIGzDoCBuZ8aw4budaSBs4bubbiBjw7MgMzAzIGtow6FjaCBow6BuZyB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSB0aOG6pXAgY2hvIHLGsOG7o3UgdHJvbmcgdsOybmcgMiBuxINtIHF1YSB2w6AgMjI2IGtow6FjaCBow6BuZyB0cm9uZyB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSBjYW8gY2hvIHLGsOG7o3UgdHJvbmcgdsOybmcgMiBuxINtIHF1YS4NCg0KLSBLaMOhY2ggaMOgbmcgY8OzIMSR4buZIHR14buVaSBsw6AgbmfGsOG7nWkgbMOgIG5nxrDhu51pIHRyxrDhu59uZyB0aMOgbmggY8OzIDQ5NiBraMOhY2ggaMOgbmcgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgdGjhuqVwIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEgdsOgIDcwNiBraMOhY2ggaMOgbmcgdHJvbmcgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEuDQoNCi0gS2jDoWNoIGjDoG5nIGPDsyDEkeG7mSB0deG7lWkgbMOgIG5nxrDhu51pIGzDoCBuZ8aw4budaSBs4bubbiB0deG7lWkgY8OzIDEyMyBraMOhY2ggaMOgbmcgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgdGjhuqVwIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEgdsOgIDMzMyBraMOhY2ggaMOgbmcgdHJvbmcgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEuDQoNCiMjIyAzLjcuMyBS4bunaSBybyB0xrDGoW5nIMSR4buRaSBnaeG7r2EgRWR1Y2F0aW9uIHbDoCBXaW5lc19zZWdtZW50DQoNCmBgYHtyIGM4M30NCmFkZG1hcmdpbnMoZXcpDQpgYGANCg0KVOG7qyBi4bqjbmcgdOG6p24gc3XhuqV0IGNow7puZyB0YSB0aOG6pXkNCg0KLSBLaMOhY2ggaMOgbmcgY8OzIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBsw6AgUEcgY8OzIDc3MCBraMOhY2ggaMOgbmcgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgdGjhuqVwIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEgdsOgIDExODkga2jDoWNoIGjDoG5nIHRodeG7mWMgbmjDs20gY2hpIHRpw6p1IGNhbyBjaG8gcsaw4bujdSB0cm9uZyB2w7JuZyAyIG7Eg20gcXVhLg0KDQotIEtow6FjaCBow6BuZyBjw7MgdHLDrG5oIMSR4buZYyBo4buNYyB24bqlbiBsw6AgVUcgY8OzIDE1NyBraMOhY2ggaMOgbmcgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgdGjhuqVwIGNobyByxrDhu6N1IHRyb25nIHbDsm5nIDIgbsSDbSBxdWEgdsOgIDg4IGtow6FjaCBow6BuZyB0cm9uZyB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSBjYW8gY2hvIHLGsOG7o3UgdHJvbmcgdsOybmcgMiBuxINtIHF1YS4NCg0KQ2jDum5nIHRhIHTDrW5oIHLhu6dpIHJvIHTGsMahbmcgxJHhu5FpIChyZWxhdGl2ZSByaXNrKS4NCg0KYGBge3IgYzgzM30NCiMjIEzhu4duaCBuw6B5IHTDrW5oIHJlbGF0aXZlcmlzayBjaG8gduG7iyB0csOtIDEyIHbDoCAyMg0KDQpsaWJyYXJ5KCJEZXNjVG9vbHMiKSANClJlbFJpc2soZXcpDQpgYGANClRoZW8ga+G6v3QgcXXhuqMgdHLDqm4gY2hvIHRo4bqleSB04bu3IGzhu4cgcuG7p2kgcm8gdMawxqFuZyDEkeG7kWkgY+G7p2Ega2jDoWNoIGjDoG5nIGNoaSB0acOqdSBjYW8gY2hvIHLGsOG7o3UgbMOgIHTDrW5oIGzDoCAwLDYxMzM3MDMsIGPDsyBuZ2jEqWEgbMOgIHThu7cgbOG7hyBuaOG7r25nIGtow6FjaCBow6BuZyBraMOhY2ggaMOgbmcgY2hpIHRpw6p1IGNhbyBjaG8gcsaw4bujdSBjw7MgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGzDoCBQRyBn4bqlcCAwLDYxMzM3MDMgbOG6p24gdOG7tyBs4buHIG5o4buvbmcga2jDoWNoIGjDoG5nIGtow6FjaCBow6BuZyBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gbMOgIFVHLg0KDQojIyAzLjggVOG7tyBs4buHIGNow6puaA0KDQojIyMgMy44LjEgVOG7tyBs4buHIGNow6puaCBnaeG7r2EgTWFyaXRhbF9TdGF0dXMgdsOgIFdpbmVzX3NlZ21lbnQNCg0KYGBge3IgcjM5MX0NCiMjIEPDonUgbOG7h25oIG7DoHkgc+G6vSB0w61uaCBvZGRyYXRpbyBjaG8gduG7iyB0csOtIDExIHbDoCAyMQ0KT2Rkc1JhdGlvKG13KQ0KYGBgDQpUaGVvIGvhur90IHF14bqjIHRyw6puIGNobyB0aOG6pXksIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgY8OzIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBsw6AgdHJvbmcgbeG7kWkgcXVhbiBo4buHIHbDoCB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSB0aOG6pXAgY2hvIHLGsOG7o3UgYuG6sW5nIDEwMCwxODQlIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgY8OzIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBsw6AgxJHhu5ljIHRow6JuIHbDoCB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSB0aOG6pXAgY2hvIHLGsOG7o3UuIMSQaeG7gXUgbsOgeSBjw7MgbmdoxKlhIGzDoCB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBraMOhY2ggaMOgbmcgdHJvbmcgbeG7kWkgcXVhbiBo4buHIHbDoCB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSB0aOG6pXAgY2hvIHLGsOG7o3Ugbmhp4buBdSBoxqFuIG5ow7NtIGtow6FjaCBow6BuZyDEkeG7mWMgdGjDom4gdsOgIHRodeG7mWMgbmjDs20gY2hpIHRpw6p1IHRo4bqlcCBjaG8gcsaw4bujdQ0KDQojIyMgMy44LjIgVOG7tyBs4buHIGNow6puaCBnaeG7r2EgRWR1Y2F0aW9uIHbDoCBXaW5lc19zZWdtZW50DQoNCmBgYHtyIHIzOTExfQ0KIyMgQ8OidSBs4buHbmggbsOgeSBz4bq9IHTDrW5oIG9kZHJhdGlvIGNobyB24buLIHRyw60gMTEgdsOgIDIxDQpPZGRzUmF0aW8oZXcpDQpgYGANCg0KVGhlbyBr4bq/dCBxdeG6oyB0csOqbiBjaG8gdGjhuqV5LCB04bu3IGzhu4cga2jDoWNoIGjDoG5nIGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gbMOgIFBHIHbDoCB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSB0aOG6pXAgY2hvIHLGsOG7o3UgYuG6sW5nIDM4LDk1JSB04bu3IGzhu4cga2jDoWNoIGjDoG5nIGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gVUcgdsOgIHRodeG7mWMgbmjDs20gY2hpIHRpw6p1IHRo4bqlcCBjaG8gcsaw4bujdS4gxJBp4buBdSBuw6B5IGPDsyBuZ2jEqWEgeMOhYyBzdeG6pXQgeOG6o3kgcmEgdHLGsOG7nW5nIGjhu6NwIGtow6FjaCBow6BuZyBjw7MgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIFBHIHbDoCB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSB0aOG6pXAgdGjhuqVwIGjGoW4gdHLGsOG7nW5nIGjhu6NwIGtow6FjaCBow6BuZyBjw7MgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIFVHIHbDoCB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSB0aOG6pXAuDQoNCg0KIyMgMy45IFRo4buRbmcga8OqIHN1eSBkaeG7hW4gY2hvIGThu68gbGnhu4d1IA0KDQrEkOG7gyB4w6FjIMSR4buLbmggeGVtIGhhaSBiaeG6v24gY8OzIMSR4buZYyBs4bqtcCBoYXkga2jDtG5nLCBraeG7g20gxJHhu4tuaCBjaGkgYsOsbmggcGjGsMahbmcgKGNoaS1zcXVhcmUgdGVzdCkgc+G6vSDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBraeG7g20gdHJhIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgaGFpIGJp4bq/biBwaMOibiBsb+G6oWkgKGNhdGVnb3JpY2FsIHZhcmlhYmxlcykgdHJvbmcgbeG7mXQgYuG6o25nIHThuqduIHPhu5EgKGZyZXF1ZW5jeSB0YWJsZSkuDQoNCktoaSBwLXZhbHVlIG5o4buPIGjGoW4gbeG7qWMgw70gbmdoxKlhICgwLjA1KSB0cm9uZyBraeG7g20gxJHhu4tuaCBjaGkgYsOsbmggcGjGsMahbmcsIHRhIGvhur90IGx14bqtbiBy4bqxbmcgaGFpIGJp4bq/biBsw6AgcGjhu6UgdGh14buZYyBs4bqrbiBuaGF1LCB04bupYyBsw6Aga2jDtG5nIMSR4buZYyBs4bqtcC4gTmfGsOG7o2MgbOG6oWksIGtoaSBwLXZhbHVlIGzhu5tuIGjGoW4gbeG7qWMgw70gbmdoxKlhLCB0YSBraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBraMO0bmcgxJHhu5ljIGzhuq1wIGdp4buvYSBoYWkgYmnhur9uLg0KDQojIyMgMy45LjEgS2nhu4NtIMSR4buLbmggdMOtbmggxJHhu5ljIGzhuq1wIGNobyBNYXJpdGFsIHbDoCBXaW5lc19zZWdtZW50DQoNClRhIGtp4buDbSB0cmEgeGVtIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIG3hu6ljIGNoaSB0acOqdSByxrDhu6N1IGPhu6dhIGtow6FjaCBow6BuZyB0cm9uZyB2w7JuZyAyIG7Eg20gcXVhIGhheSBraMO0bmcuDQoNCmBgYHtyIG13fQ0KY2hpc3EudGVzdChtdykNCmBgYA0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBwLSB2YWx1ZT0gMSA+IDAsMDUuIE5oxrAgduG6rXksIHbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JSB0YSBraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBraMO0bmcgxJHhu5ljIGzhuq1wIGdp4buvYSB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gdsOgIG3hu6ljIGNoaSB0acOqdSBjaG8gcsaw4bujdSBjaOG7p2Ega2jDoWNoIGjDoG5nLiANCg0KIyMjIDMuOS4yIEtp4buDbSDEkeG7i25oIHTDrW5oIMSR4buZYyBs4bqtcCBjaG8gRWR1Y2F0aW9uIHbDoCBXaW5lc19zZWdtZW50DQoNClRhIGtp4buDbSB0cmEgeGVtIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIG3hu6ljIGNoaSB0acOqdSByxrDhu6N1IGPhu6dhIGtow6FjaCBow6BuZyB0cm9uZyB2w7JuZyAyIG7Eg20gcXVhIGhheSBraMO0bmcuDQoNCmBgYHtyIGV3fQ0KY2hpc3EudGVzdChldykNCmBgYA0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggcC0gdmFsdWU9IDAsMDAwMDAxNDY4IDwgMCwwNS4gTmjGsCB24bqteSwgduG7m2kgbeG7qWMgw70gbmdoxKlhIDUlIHRhIGvhur90IGx14bqtbiB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdsOgIG3hu6ljIGNoaSB0acOqdSByxrDhu6N1IGPhu6dhIGtow6FjaCBow6BuZyBsw6AgcGjhu6UgdGh14buZYyBs4bqrbiBuaGF1LiANCg0KIyMjIDMuOS4zIEtp4buDbSDEkeG7i25oIHTDrW5oIMSR4buZYyBs4bqtcCBjaG8gQWdlX3NlZ21lbnQgdsOgIFdpbmVzX3NlZ21lbnQNCg0KVGEga2nhu4NtIHRyYSB4ZW0gxJHhu5kgdHXhu5VpIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gbeG7qWMgY2hpIHRpw6p1IHLGsOG7o3UgY+G7p2Ega2jDoWNoIGjDoG5nIHRyb25nIHbDsm5nIDIgbsSDbSBxdWEgaGF5IGtow7RuZy4NCg0KYGBge3IgYXd9DQpjaGlzcS50ZXN0KGF3KQ0KYGBgDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBwLSB2YWx1ZT0gMCwwMDAwMDAwMDAwMDAwMDAyMiA8IDAsMDUuIE5oxrAgduG6rXksIHbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JSB0YSBr4bq/dCBsdeG6rW4gxJHhu5kgdHXhu5VpIHbDoCBt4bupYyBjaGkgdGnDqnUgcsaw4bujdSBj4bunYSBraMOhY2ggaMOgbmcgbMOgIHBo4bulIHRodeG7mWMgbOG6q24gbmhhdS4gDQoNCiMjIDMuMTAgS2hv4bqjbmcgxrDhu5tjIGzGsOG7o25nIGNobyB04bu3IGzhu4cNCg0KLSDGr+G7m2MgbMaw4bujbmcgdOG7tyBs4buHIGtow6FjaCBow6BuZyB0cm9uZyBt4buRaSBxdWFuIGjhu4cgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IMSR4buTbmcgdGjhu51pIGtp4buDbSDEkeG7i25oIHhlbSB04bu3IGzhu4cga2jDoWNoIGjDoG5nIHRyb25nIG3hu5FpIHF1YW4gaOG7hyB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSBjYW8gY8OzIGLhurFuZyAzNyw0NyUgaGF5IGtow7RuZy4NCmBgYHtyIHVtd30NCnVsLm13IDwtICBtdzJbTWFyaXRhbF9TdGF0dXMgPT0gIlJlbGF0aW9uc2hpcCIsXQ0KcHJvcC50ZXN0KGxlbmd0aCh1bC5tdyRNYXJpdGFsX1N0YXR1cyksIGxlbmd0aChNYXJpdGFsX1N0YXR1cyksIHAgPSAwLjM3NDcpDQpgYGANClbhu5tpIGtob+G6o25nIHRpbiBj4bqteSA5NSUgdeG7m2MgbMaw4bujbmcgdOG7tyBs4buHIGtow6FjaCBow6BuZyB0cm9uZyBt4buRaSBxdWFuIGjhu4cgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgMCw2MjYwMDIxIDAsNjY2MjIzNw0KDQpwLXZhbHVlID4gMCwgY2jGsGEgxJHhu6cgY8ahIHPhu58gYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwLiBEbyDEkcOzIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgdHJvbmcgbeG7kWkgcXVhbiBo4buHIHRodeG7mWMgbmjDs20gY2hpIHRpw6p1IGNhbyBjaG8gcsaw4bujdSBi4bqxbmcgMzcsNDclIHbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JS4NCg0KLSDGr+G7m2MgbMaw4bujbmcgdOG7tyBs4buHIGtow6FjaCBow6BuZyDEkeG7mWMgdGjDom4gdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IMSR4buTbmcgdGjhu51pIGtp4buDbSDEkeG7i25oIHhlbSB04bu3IGzhu4cga2jDoWNoIGjDoG5nIMSR4buZYyB0aMOibiB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSBjYW8gY8OzIGLhurFuZyAyMCw0NiUgaGF5IGtow7RuZy4NCg0KYGBge3IgdW13Mn0NCnVsLm13MiAgPC0gIG13MltNYXJpdGFsX1N0YXR1cyA9PSAiU2luZ2xlIixdDQpwcm9wLnRlc3QobGVuZ3RoKHVsLm13MiRNYXJpdGFsX1N0YXR1cyksIGxlbmd0aChNYXJpdGFsX1N0YXR1cyksIHAgPSAwLjIwNDYpDQpgYGANClbhu5tpIGtob+G6o25nIHRpbiBj4bqteSA5NSUgdeG7m2MgbMaw4bujbmcgdOG7tyBs4buHIGtow6FjaCBow6BuZyDEkeG7mWMgdGjDom4gdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgMCwzMzM3NzYzIMSR4bq/biAwLDM3Mzk5NzkNCg0KcC12YWx1ZSA+IDAsIGNoxrBhIMSR4bunIGPGoSBz4bufIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMC4gRG8gxJHDsyB04bu3IGzhu4cgdOG7tyBs4buHIGtow6FjaCBow6BuZyB0cm9uZyBt4buRaSBxdWFuIGjhu4cgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IGLhurFuZyAyMCw0NiUgduG7m2kgbeG7qWMgw70gbmdoxKlhIDUlLg0KDQotIMav4bubYyBsxrDhu6NuZyBz4buxIGNow6puaCBs4buHY2ggduG7gSB04bu3IGzhu4cgdGh14buZYyBuaMOzbSBjaGkgdGnDqnUgY2FvIGNobyByxrDhu6N1IGdp4buvYSBraMOhY2ggaMOgbmcgdHJvbmcgbeG7kWkgcXVhbiBo4buHIHbDoCBraMOhY2ggaMOgbmcgxJHhu5ljIHRow6JuLiDEkOG7k25nIHRo4budaSB0aOG7sWMgaGnhu4duIGLDoGkgdG/DoW4ga2nhu4NuIMSR4buLbmggc+G7sSBjaMOqbmggbOG7h2NoIG7DoHkuDQoNCmBgYHtyfQ0KdWwubSA8LSAgbXcyW01hcml0YWxfU3RhdHVzID09ICJSZWxhdGlvbnNoaXAiLF0NCnVsLnc8LSAgbXcyW1dpbmVzX3NlZ21lbnQgPT0gIkhpZ2hseSBBY3RpdmUgQ3VzdG9tZXIiLF0NCnVsLm0yICA8LSAgbXcyW01hcml0YWxfU3RhdHVzID09ICJTaW5nbGUiLF0NCmEgPC0gYyhucm93KHVsLm0pLCBucm93KHVsLncpKQ0KYiA8LSBjKG5yb3codWwubTIpLCBucm93KHVsLncpKQ0KcHJvcC50ZXN0KGIsYSkNCmBgYA0KUF92YWx1ZSA8IDAsIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMC4gTmjGsCB24bqteSwgY8OzIHPhu7EgY2jDqm5oIGzhu4duaCBnaeG7r2EgdOG7tyBs4buHIGtow6FjaCBow6BuZyB0cm9uZyBt4buRaSBxdWFuIGjhu4cgdsOgIMSR4buZYyB0aMOibiB0aHXhu5ljIG5ow7NtIGNoaSB0acOqdSBjYW8gY2hvIHLGsOG7o3UuDQoNCktob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGNow6puaCBs4buHY2ggdOG7tyBs4buHIG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgIC0wLDQ3OTQwNTIgxJHhur9uIC0wLDQyNjM4NjkuDQoNCg0KIyBDaMawxqFuZyA0LiBL4bq+VCBRVeG6oiBOR0hJw4pOIEPhu6hVDQoNCiMjIDQuMSDGr+G7m2MgbMaw4bujbmcgaMOgbSBo4buTaSBxdXkgY2hvIGThu68gbGnhu4d1IA0KDQpU4burIGtp4buDbSDEkeG7i25oIHTDrW5oIMSR4buZYyBs4bqtcCB2w6AgY8OhYyDEkcOhbmggZ2nDoSB0csOqbiwgbcO0IGjDrG5oIGjhu5NpIHF1eSDEkcaw4bujYyDEkeG7gSB4deG6pXQgbmjGsCBzYXU6DQoNCldpbmVzX3NlZ21lbnQ9IE1hcml0YWxfU3RhdHVzICsgSW5jb21lICsgS2lkcyArIEFnZV9zZWdtZW50ICsgRWR1Y2F0aW9uDQoNCiMjIyA0LjEuMSDGr+G7m2MgbMaw4bujbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBMb2dpdA0KDQpgYGB7ciBtbzF9DQppbmNvbWUgPSBkZiRJbmNvbWUNCmRhdGEgPSBkYXRhLmZyYW1lKE1hcml0YWxfU3RhdHVzLCBFZHVjYXRpb24sIEtpZHMsIEFnZV9zZWdtZW50LCBXaW5lc19zZWdtZW50LCBpbmNvbWUpDQppbmNvbWUgPC0gY3V0KGluY29tZSwyLCBsYWJlbHMgPSBjKCdsb3cnLCdoaWdoJykpDQoNCm1sb2dpdCA8LSBnbG0oZGF0YSA9IGRhdGEsIGZvcm11bGEgPSBmYWN0b3IoV2luZXNfc2VnbWVudCkgfiBNYXJpdGFsX1N0YXR1cyArIGluY29tZSArIEtpZHMgKyBBZ2Vfc2VnbWVudCArIEVkdWNhdGlvbiwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpKQ0KbGV2ZWxzKGZhY3RvcihXaW5lc19zZWdtZW50KSkNCnN1bW1hcnkobWxvZ2l0KQ0KYGBgDQoNCktp4buDbSDEkeG7i25oIHPhu7EgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmggYuG6sW5nIGPDoWNoIHTDrW5oIGdpw6EgdHLhu4sgUHJvYihMUiBzdGF0aXN0aWMpDQrEkOG6t3QgZ2nhuqMgdGh1eeG6v3QgSDA6IE3DtCBow6xuaCBraMO0bmcgcGjDuSBo4bujcCANCg0KYGBge3IgY2xvZ2l0fQ0KIyBLaeG7g20gxJHhu4tuaCBz4buxIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oIA0KbHJfdGVzdCA8LSBhbm92YShtbG9naXQsIHRlc3QgPSAiQ2hpc3EiKQ0KcF92YWx1ZSA8LSBscl90ZXN0JFByWzJdIA0KcF92YWx1ZQ0KYGBgDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5IHAtIHZhbHVlID0gMCw5MzM3MTEyID4gMCwwNS4gTmjGsCB24bqteSwgduG7m2kgbeG7qWMgw70gbmdoxKlhIDUlIGNoxrBhIMSR4bunIGPGoSBz4bufIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMCBuw6puIG3DtCBow6xuaCBraMO0bmcgcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdS4NCg0KVGEgdGjhuqV5IGJp4bq/biBBZ2Vfc2VnbWVudCB2w6AgTWFyaXRhbF9TdGF0dXMga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogdsOsIHbhuq15IGxv4bqhaSBi4buPIGhhaSBiaeG6v24gbsOgeSB2w6AgdGjhu7FjIGhp4buHbiBs4bqhaSBo4buTaSBxdXkgTG9naXQuIE3DtCBow6xuaCB0cuG7nyB0aMOgbmggDQoNCldpbmVzX3NlZ21lbnQ9IEluY29tZSArIEtpZHMgKyBFZHVjYXRpb24NCg0KYGBge3IgbW8xMn0NCmluY29tZSA9IGRmJEluY29tZQ0KZGF0YSA9IGRhdGEuZnJhbWUoRWR1Y2F0aW9uLCBLaWRzLCBXaW5lc19zZWdtZW50LCBpbmNvbWUpDQoNCmluY29tZSA8LSBjdXQoaW5jb21lLDIsIGxhYmVscyA9IGMoJ2xvdycsJ2hpZ2gnKSkNCg0KbWxvZ2l0MjwtIGdsbShkYXRhID0gZGF0YSwgZm9ybXVsYSA9IGZhY3RvcihXaW5lc19zZWdtZW50KSB+ICBpbmNvbWUgKyBLaWRzICsgRWR1Y2F0aW9uLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IikpDQpsZXZlbHMoZmFjdG9yKFdpbmVzX3NlZ21lbnQpKQ0Kc3VtbWFyeShtbG9naXQyKQ0KYGBgDQoNCmBgYHtyIGNsb2dpdDJ9DQojIEtp4buDbSDEkeG7i25oIHPhu7EgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmggDQpscl90ZXN0IDwtIGFub3ZhKG1sb2dpdDIsIHRlc3QgPSAiQ2hpc3EiKQ0KcF92YWx1ZSA8LSBscl90ZXN0JFByWzJdIA0KcF92YWx1ZQ0KYGBgDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5IHAtIHZhbHVlPSA4LDQyMzA0OWUtMzE4IDwgMCwwNS4gTmjGsCB24bqteSwgduG7m2kgbeG7qWMgw70gbmdoxKlhIDUlIGNoxrBhIMSR4bunIGPGoSBz4bufIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMCBuw6puIG3DtCBow6xuaCBwaMO5IGjhu6NwIHbhu5tpIGThu68gbGnhu4d1Lg0KDQojIyMgNC4xLjIgxq/hu5tjIGzGsOG7o25nIG3DtCBow6xuaCBo4buTaSBxdXkgUHJvYml0DQoNCmBgYHtyIG1vMn0NCm1wcm9iaXQgPC0gZ2xtKGRhdGEgPSBkYXRhLCBmb3JtdWxhID0gZmFjdG9yKFdpbmVzX3NlZ21lbnQpIH4gIGluY29tZSArIEtpZHMgKyBFZHVjYXRpb24sIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IikpDQpsZXZlbHMoZmFjdG9yKFdpbmVzX3NlZ21lbnQpKQ0Kc3VtbWFyeShtcHJvYml0KQ0KYGBgDQoNCg0KS2nhu4NtIMSR4buLbmggc+G7sSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaCBi4bqxbmcgY8OhY2ggdMOtbmggZ2nDoSB0cuG7iyBQcm9iKExSIHN0YXRpc3RpYykNCsSQ4bq3dCBnaeG6oyB0aHV54bq/dCBIMDogTcO0IGjDrG5oIGtow7RuZyBwaMO5IGjhu6NwIA0KDQpgYGB7ciBjcHJvYml0fQ0KIyBLaeG7g20gxJHhu4tuaCBz4buxIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oIA0KbHJfdGVzdCA8LSBhbm92YShtcHJvYml0LCB0ZXN0ID0gIkNoaXNxIikNCnBfdmFsdWUgPC0gbHJfdGVzdCRQclsyXSANCnBfdmFsdWUNCmBgYA0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggY2hvIHRo4bqleSBwLSB2YWx1ZT0gMSw2Mzk5NTZlLTI2NSA8IDAsMDUuIE5oxrAgduG6rXksIHbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAgbsOqbiBtw7QgaMOsbmggcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdS4NCg0KIyMjIDQuMS4zIMav4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggaOG7k2kgcXV5IENsb2dsb2cNCg0KYGBge3IgbW8zfQ0KbWNsb2cgPC0gZ2xtKGRhdGEgPSBkYXRhLCBmb3JtdWxhID0gZmFjdG9yKFdpbmVzX3NlZ21lbnQpIH4gaW5jb21lICsgS2lkcyArIEVkdWNhdGlvbiwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJjbG9nbG9nIikpDQpsZXZlbHMoZmFjdG9yKFdpbmVzX3NlZ21lbnQpKQ0Kc3VtbWFyeShtY2xvZykNCmBgYA0KDQpLaeG7g20gxJHhu4tuaCBz4buxIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oIGLhurFuZyBjw6FjaCB0w61uaCBnacOhIHRy4buLIFByb2IoTFIgc3RhdGlzdGljKQ0KxJDhurd0IGdp4bqjIHRodXnhur90IEgwOiBNw7QgaMOsbmgga2jDtG5nIHBow7kgaOG7o3AgDQoNCmBgYHtyIGNtY2xvZ30NCiMgS2nhu4NtIMSR4buLbmggc+G7sSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaA0KbHJfdGVzdCA8LSBhbm92YShtY2xvZywgdGVzdCA9ICJDaGlzcSIpDQpwX3ZhbHVlIDwtIGxyX3Rlc3QkUHJbMl0gDQpwX3ZhbHVlDQpgYGANCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgcC0gdmFsdWU9IDIuMDMzNDMyZS0yMzIgPCAwLDA1LiBOaMawIHbhuq15LCB24bubaSBt4bupYyDDvSBuZ2jEqWEgNSUgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwIG7Dqm4gbcO0IGjDrG5oIHBow7kgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3UuDQoNCiMjIDQuMiBDw6FjIHRpw6p1IGNow60gxJHDoW5oIGdpw6EgbcO0IGjDrG5oDQoNCiMjIyA0LjIuMSBBSUMgLSBBa2Fpa2UgSW5mb3JtYXRpb24gQ3JpdGVyaW9uDQpgYGB7cn0NCmFpYyA8LSBkYXRhLmZyYW1lKG1sb2dpdDIkYWljLCBtcHJvYml0JGFpYywgbWNsb2ckYWljKQ0KY29sbmFtZXMoYWljKSA8LSBjKCJBSUMoTG9naXQpIiwgIkFJQyhQcm9iaXQpIiwgIkFJQyhDbG9nbG9nKSIpDQphaWMNCmBgYA0KVGEgdGjhuqV5IG3DtCBow6xuaCBo4buTaSBxdXkgTG9naXQgY8OzIGjhu4cgc+G7kSBBSUMgbmjhu48gbmjhuqV0ICgxNDkzLDExMykgbsOqbiB0YSBjaOG7jW4gbcO0IGjDrG5oIGjhu5NpIHF1eSBMb2dpdC4NCg0KIyMjIDQuMi4yIERldmlhbmNlDQoNCmBgYHtyfQ0KZGV2IDwtIGRhdGEuZnJhbWUobWxvZ2l0MiRkZXZpYW5jZSwgbXByb2JpdCRkZXZpYW5jZSwgbWNsb2ckZGV2aWFuY2UpDQpjb2xuYW1lcyhkZXYpIDwtIGMoIkRldmlhbmNlKExvZ2l0KSIsICJEZXZpYW5jZShQcm9iaXQpIiwgIkRldmlhbmNlKENsb2dsb2cpIikNCmRldg0KYGBgDQpUYSB0aOG6pXkgbcO0IGjDrG5oIGjhu5NpIHF1eSBMb2dpdCBjw7MgaOG7hyBz4buRIERldmlhbmNlIG5o4buPIG5o4bqldCAoMTQ4NSwxMTMJKSBuw6puIHRhIGNo4buNbiBtw7QgaMOsbmggaOG7k2kgcXV5IExvZ2l0Lg0KDQojIyMgNC4yLjMgQnJpZXIgU2NvcmUNCmBgYHtyfQ0KDQphIDwtIEJyaWVyU2NvcmUobWxvZ2l0MikNCmIgPC0gQnJpZXJTY29yZShtcHJvYml0KQ0KYyA8LSBCcmllclNjb3JlKG1jbG9nKQ0KYnJpIDwtIGRhdGEuZnJhbWUoYSwgYiwgYykNCmNvbG5hbWVzKGJyaSkgPC0gYygiTG9naXQiLCAiUHJvYml0IiwgIkNsb2dsb2ciKQ0KYnJpDQpgYGANClRhIHRo4bqleSBtw7QgaMOsbmggaOG7k2kgcXV5IExvZ2l0IGPDsyBo4buHIHPhu5EgQnJpZXIgU2NvcmUgbmjhu48gbmjhuqV0ICgwLDA4NTIyODI0KSBuw6puIHRhIGNo4buNbiBtw7QgaMOsbmggaOG7k2kgcXV5IExvZ2l0Lg0KDQpRdWEgY8OhYyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5IG3DtCBow6xuaCBo4buTaSBxdXkgTG9naXQgxJHGsOG7o2MgbOG7sWEgY2jhu41uIG5oaeG7gXUgbmjhuqV0IG7Dqm4gbcO0IGjDrG5oIG7DoHkgc+G6vSDEkcaw4bujYyBkw7luZyDEkeG7gyBwaMOibiB0w61jaCBr4bq/dCBxdeG6oy4NCg0KIyMjIDQuMi40IEdp4bqjaSB0aMOtY2gga+G6v3QgcXXhuqMgDQpgYGB7cn0NCnN1bW1hcnkobWxvZ2l0MikNCmBgYA0KS+G6v3QgcXXhuqMgxrDhu5tjIGzGsOG7o25nIGNobyBtw7QgaMOsbmggaOG7k2kgcXV5IGzDoDoNCg0KV2luZXNfc2VnbWVudD0gLTQsNjQxZSswMCArIDEsMTkxZS0wNEluY29tZSAtNiw2MjJlLTAxS2lkcyAtOCw0MjJlLTAxRWR1Y2F0aW9uDQoNCktob+G6o25nIMaw4bubYyBsxrDhu6NuZyBjaG8gY8OhYyBo4buHIHPhu5EgaOG7k2kgcXV5IA0KDQpgYGB7cn0NCmNvbmZpbnQuZGVmYXVsdChtbG9naXQyKQ0KYGBgDQoNCiMgQ2jGsMahbmcgNS4gS+G6vlQgTFXhuqxOIA0KDQojIyA1LjEgS+G6v3QgbHXhuq1uDQoNClF1YSBr4bq/dCBxdeG6oyBwaMOibiB0w61jaCB0YSBjw7MgdGjhu4MgdGjhuqV5IHF1eeG6v3QgxJHhu4tuaCBjaOG7jW4gbXVhIGjDoG5nIHLGsOG7o3UgdGjDtG5nIHF1YSBz4buRIHRp4buBbiBjaGkgY2hvIHLGsOG7o3UgdHJvbmcgdsOybmcgMiBuxINtIHF1YSBj4bunYSBraMOhY2ggaMOgbmcgdGhhbSBnaWEga2jhuqNvIHPDoXQgdOG6oWkgY+G7rWEgaMOgbmcgY2jhu4t1IHTDoWMgxJHhu5luZyBi4bufaSBjw6FjIHnhur91IHThu5E6IFRodSBuaOG6rXAgaOG7mSBnaWEgZMOsbmg7IFPhu5EgY29uIHRyb25nIG5ow6AgdsOgIFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBj4bunYSBraMOhY2ggaMOgbmcuDQoNCiMjIDUuMiBI4bqhbiBjaOG6vyB2w6AgaMaw4bubbmcgbmdoacOqbiBj4bupdSB0aeG6v3AgdGhlbw0KDQpEbyBo4bqhbiBjaOG6vyB24buBIG3hurd0IHRo4budaSBnaWFuIGPFqW5nIG5oxrAga2jhuqMgbsSDbmcgdMOgaSBjaMOtbmggbsOqbiBuZ2hpw6puIGPhu6l1IGNo4buJIMSRxrDhu6NjIHRo4buxYyBoaeG7h24gduG7m2kgc+G7kSBt4bqrdSBo4bqhbiBjaOG6vyB2w6AgxJHhu5FpIHTGsOG7o25nIGto4bqjbyBzw6F0IGNo4buJIG1hbmcgdMOtbmggY2jhuqV0IMSR4bqhaSBkaeG7h24sIGNoxrBhIG1hbmcgdMOtbmggY2jhuqV0IGtow6FpIHF1w6F0LiDEkMOieSBjxaluZyBsw6AgxJHhu4EgeHXhuqV0IGNobyBoxrDhu5tuZyBuZ2hpw6puIGPhu6l1IHRp4bq/cCB0aGVvLg0KDQojIFTDgEkgTEnhu4ZVIFRIQU0gS0jhuqJPDQoNClsxXSBFcmRlbSwgVC4gJiBTd2FpdCwgSi4sIDIwMDQuIEJyYW5kIENyZWRpYmlsaXR5LCBCcmFuZCBDb25zaWRlcmF0aW9uLCBhbmQgQ2hvaWNlLiBKb3VybmFsIG9mIENvbnN1bWVyIFJlc2VhcmNoLCAzMSgxKSwgcHAuMTkxLTE5OC4NCg0KWzJdIENoZW4sIEMuLUguLCBOZ3V5ZW4sIEIuLCBLbGF1cywgUC4g4oCcUGhpbCzigJ0gJiBXdSwgTS4tUy4sIDIwMTUuIEV4cGxvcmluZyBFbGVjdHJvbmljIFdvcmRvZi1Nb3V0aCAoZVdPTSkgaW4gVGhlIENvbnN1bWVyIFB1cmNoYXNlIERlY2lzaW9uLU1ha2luZyBQcm9jZXNzOiBUaGUgQ2FzZSBvZiBPbmxpbmUgSG9saWRheXMg4oCTIEV2aWRlbmNlIGZyb20gVW5pdGVkIEtpbmdkb20gKFVLKSBDb25zdW1lcnMuIEpvdXJuYWwgb2YgVHJhdmVsICYgVG91cmlzbSBNYXJrZXRpbmcsIDMyKDgpLCBwcC45NTPigJM5NzAuDQoNClszXSBIYWlyLCBKLiBGLiwgQW5kZXJzb24sIFIuIEUuLCBUYXRoYW0sIFIuIEwuLCAmIEdyYWJsb3dza3ksIEIuIEouLCAxOTc5Lk11bHRpdmFyaWF0ZSBkYXRhIGFuYWx5c2lzLlR1bHNhLCBPSzogUGlwZSBCb29rc2FpciwgSi4gRi4sIEFuZGVyc29uLCBSLiBFLiwgVGF0aGFtLCBSLiBMLiwgJiBHcmFibG93c2t5LCBCLiBKLiAoMTk3OSkuTXVsdGl2YXJpYXRlIGRhdGEgYW5hbHlzaXMuVHVsc2EsIE9LOiBQaXBlIEJvb2tzLg0KDQpbNF0gSG/DoG5nIFRy4buNbmcsIENodSBOZ3V54buFbiBN4buZbmcgTmfhu41jICgyMDA1KSwgUGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgbmdoacOqbiBj4bupdSB24bubaSBTUFNTLCBOWEIgVGjhu5FuZyBrw6ouS290bGVyLCBQLiAmIExldnksIFMuSi4gMTk2OSwgQnJvYWRlbmluZyB0aGUgY29uY2VwdCBvZiBtYXJrZXRpbmcsIEpvdXJuYWwgb2YgTWFya2V0aW5nLDMzKDEpLCBwcC4xMC0xNS4NCg0KTm90ZSB0aGF0IHRoZSBgZWNobyA9IEZBTFNFYCBwYXJhbWV0ZXIgd2FzIGFkZGVkIHRvIHRoZSBjb2RlIGNodW5rIHRvIHByZXZlbnQgcHJpbnRpbmcgb2YgdGhlIFIgY29kZSB0aGF0IGdlbmVyYXRlZCB0aGUgcGxvdC4NCg==