knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## 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(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(nnet)
library(pscl)
## Warning: package 'pscl' was built under R version 4.4.3
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
library(pROC)
## Warning: package 'pROC' was built under R version 4.4.3
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
library(MASS)
## Warning: package 'MASS' was built under R version 4.4.3
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
library(epitools)
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
library(xlsx)
## Warning: package 'xlsx' was built under R version 4.4.3

LỜI CAM ĐOAN

Em xin cam đoan rằng đề tài “Phân tích các yếu tố nhân khẩu học và tín dụng ảnh hưởng đến quyết định vay tiêu dùng của khách hàng” là công trình nghiên cứu do chính tôi thực hiện. Các số liệu, kết quả phân tích và các nhận định trong đề tài là trung thực, có cơ sở khoa học, được thu thập và xử lý theo đúng quy trình nghiên cứu. Em khẳng định không sao chép, không vi phạm bản quyền của bất kỳ cá nhân hay tổ chức nào. Mọi trích dẫn trong đề tài đều được ghi rõ nguồn gốc. Em xin chịu hoàn toàn trách nhiệm trước nhà trường về tính trung thực và nguyên bản của nội dung đề tài này.


LỜI CẢM ƠN

Em xin chân thành cảm ơn Thầy Trần Mạnh Tường – người đã tận tình hướng dẫn, định hướng và góp ý chuyên môn giúp em hoàn thiện tiểu luận “Phân tích các yếu tố nhân khẩu học và tín dụng ảnh hưởng đến quyết định vay tiêu dùng của khách hàng” một cách khoa học và sát với thực tiễn. Em cũng xin gửi lời cảm ơn sâu sắc đến quý Thầy Cô trong khoa Khoa học Dữ liệu – Trường Đại học Tài chính – Marketing đã giảng dạy, truyền đạt kiến thức và tạo điều kiện thuận lợi để em có thể hoàn thành tốt quá trình học tập và nghiên cứu của mình. Em xin chân thành cảm ơn!


CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI

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

Trong bối cảnh nền kinh tế Việt Nam ngày càng phát triển và mức sống người dân được cải thiện rõ rệt, nhu cầu vay tiêu dùng đang trở thành một xu hướng phổ biến và đóng vai trò ngày càng quan trọng trong tài chính cá nhân. Vay tiêu dùng không chỉ hỗ trợ người dân nâng cao chất lượng cuộc sống mà còn góp phần thúc đẩy tăng trưởng kinh tế thông qua việc gia tăng sức mua, kích thích tiêu dùng nội địa. Tuy nhiên, không phải mọi cá nhân đều có xu hướng hoặc khả năng tiếp cận tín dụng tiêu dùng như nhau. Các yếu tố nhân khẩu học như giới tính, độ tuổi, trình độ học vấn, tình trạng hôn nhân và nghề nghiệp có thể ảnh hưởng đáng kể đến nhận thức, động cơ cũng như hành vi vay vốn của khách hàng. Việc hiểu rõ các đặc điểm này sẽ cung cấp cơ sở khoa học cho việc dự đoán hành vi tài chính, đồng thời giúp các tổ chức tín dụng tối ưu hóa chiến lược sản phẩm, tiếp thị và quản trị rủi ro.

Trên thực tế, nhiều tổ chức tín dụng vẫn đang áp dụng các chính sách tín dụng tương đối đồng nhất cho mọi đối tượng khách hàng, dẫn đến việc bỏ lỡ cơ hội tiếp cận hiệu quả các phân khúc tiềm năng. Ngoài ra, tình trạng tín dụng của khách hàng – đặc biệt là lịch sử nợ xấu – cũng là một yếu tố quan trọng ảnh hưởng đến khả năng tiếp cận vay vốn, nhưng vẫn chưa được tích hợp đầy đủ vào các mô hình phân tích hành vi vay tiêu dùng. Xuất phát từ những lý do trên, đề tài “Phân tích các yếu tố nhân khẩu học và tín dụng ảnh hưởng đến quyết định vay tiêu dùng của khách hàng” được lựa chọn với kỳ vọng mang lại những phát hiện có giá trị cho cả lĩnh vực nghiên cứu và thực tiễn hoạt động tín dụng tiêu dùng tại Việt Nam.

1.2 Mục tiêu và câu hỏi nghiên cứu

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

Mục tiêu của đề tài là phân tích các yếu tố nhân khẩu học ảnh hưởng đến quyết định vay tiêu dùng của khách hàng. Cụ thể, nghiên cứu tập trung vào việc mô tả đặc điểm nhân khẩu học của khách hàng trong tập dữ liệu khảo sát, đồng thời xác định mối quan hệ giữa các yếu tố như giới tính, trình độ học vấn, tình trạng hôn nhân, nghề nghiệp, tình trạng vay mua nhà và vay nợ tín dụng với hành vi vay tiêu dùng. Trên cơ sở đó, đề tài tiến hành đánh giá mức độ ảnh hưởng của từng yếu tố đến xu hướng vay tiêu dùng, nhằm làm rõ nhóm đối tượng nào có khả năng vay cao hơn. Cuối cùng, từ những phát hiện thực nghiệm, nghiên cứu đề xuất một số khuyến nghị cụ thể dành cho các tổ chức tín dụng trong việc phát triển sản phẩm tài chính phù hợp, nâng cao hiệu quả tiếp cận và quản lý khách hàng mục tiêu.

1.2.2 Câu hỏi nghiên cứu

  • Các đặc điểm nhân khẩu học và tín dụng nào có mối liên hệ đáng kể với quyết định vay tiêu dùng của khách hàng?

  • Nghề nghiệp, trình độ học vấn, tình trạng hôn nhân và tình trạng nợ tín dụng ảnh hưởng như thế nào đến khả năng vay tiêu dùng?

  • Nhóm nhân khẩu học nào có xu hướng vay tiêu dùng cao hơn hoặc thấp hơn so với các nhóm khác?

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

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

Đối tượng nghiên cứu của đề tài là hành vi vay tiêu dùng của khách hàng cá nhân, cụ thể là quyết định có hoặc không vay tiêu dùng, được đo lường thông qua biến định tính nhị phân trong tập dữ liệu khảo sát. Bên cạnh đó, đề tài xem xét các yếu tố nhân khẩu học bao gồm giới tính, trình độ học vấn, tình trạng hôn nhân, nghề nghiệp, tình trạng vay mua nhà và vay nợ tín dụng được giả định là các biến độc lập có khả năng ảnh hưởng đến hành vi vay tiêu dùng.

1.3.2 Phạm vi nghiên cứu

  • Về nội dung: Tập trung phân tích mối quan hệ giữa đặc điểm nhân khẩu học và hành vi vay tiêu dùng cá nhân, không đi sâu vào các yếu tố tài chính hoặc tín dụng cụ thể như thu nhập, điểm tín dụng hay khả năng trả nợ.
  • Về không gian: Nghiên cứu sử dụng dữ liệu khảo sát từ khách hàng phạm vi trong một nước.

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

Trong nghiên cứu này, phương pháp định lượng được sử dụng nhằm phân tích mối quan hệ giữa các yếu tố nhân khẩu học và tín dụng (giới tính, độ tuổi, trình độ học vấn, tình trạng hôn nhân, thu nhập, v.v.) với quyết định vay tiêu dùng của khách hàng.

  • Đầu tiên, dữ liệu được xử lý và trình bày thông qua thống kê mô tả đơn biến và phân tích bảng tần số để làm rõ đặc điểm tổng quan của mẫu nghiên cứu.
  • Tiếp theo, kiểm định Chi-bình phương được áp dụng nhằm xác định mối liên hệ giữa từng biến độc lập và biến phụ thuộc (quyết định vay).
  • Những biến có ý nghĩa thống kê sẽ được chọn đưa vào phân tích hồi quy nhị phân bằng bốn mô hình: (1) Hồi quy logistic, (2) Hồi quy probit, (3) Hồi quy cloglog, và (4) Mô hình xác suất tuyến tính (LPM).
  • Mỗi mô hình đều được triển khai theo hai bước: phân tích đơn biến và đa biến. Kết quả hồi quy được trình bày dưới dạng hệ số ước lượng, sai số chuẩn, giá trị p và độ tin cậy, qua đó đánh giá hướng và mức độ ảnh hưởng của từng biến độc lập đến xác suất vay.
  • Sau cùng, để so sánh hiệu quả giữa các mô hình, nghiên cứu sử dụng các tiêu chí đánh giá gồm chỉ số AIC (Akaike Information Criterion), đường cong ROC (Receiver Operating Characteristic) và ma trận nhầm lẫn.

1.5 Kết cấu của đề tài

Ngoài mục lục, danh mục chữ viết tắt, danh mục hình ảnh và bảng biểu, phụ lục cùng tài liệu tham khảo đề tài được chia thành ba chương chính:

Chương 1: Giới thiệu đề tài

Trình bày bối cảnh, lý do chọn đề tài, mục tiêu và câu hỏi nghiên cứu, đối tượng phạm vi nghiên cứu, phương pháp và kết cấu của đề tài.

Chương 2: Cơ sở lý thuyết và phương pháp nghiên cứu

Tổng hợp các khái niệm, lý thuyết liên quan đến hành vi vay tiêu dùng và đặc điểm nhân khẩu học. Trình bày các phương pháp thống kê và mô hình định lượng được sử dụng trong phân tích.

Chương 3: Kết quả nghiên cứu

Phân tích dữ liệu thực nghiệm, trình bày kết quả từ các phương pháp thống kê và mô hình hồi quy, đánh giá mức độ ảnh hưởng của các yếu tố, và đề xuất một số khuyến nghị thực tiễn.


CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VÀ PHƯƠNG PHÁP NGHIÊN CỨU

2.1 Lý thuyết về hành vi vay tiêu dùng

Vay tiêu dùng là một dạng hành vi tài chính trong đó cá nhân sử dụng các hình thức tín dụng để tài trợ cho nhu cầu chi tiêu cá nhân như mua sắm, học tập, sinh hoạt hoặc các mục đích không mang tính sản xuất. Đây là hoạt động phổ biến trong nền kinh tế hiện đại, góp phần thúc đẩy tiêu dùng hộ gia đình và lưu chuyển dòng vốn trong xã hội.

Quyết định vay tiêu dùng của một cá nhân không chỉ phụ thuộc vào điều kiện tài chính hiện tại mà còn bị chi phối bởi nhiều yếu tố phi tài chính, trong đó đáng chú ý là các đặc điểm nhân khẩu học. Các yếu tố như giới tính, độ tuổi, trình độ học vấn, tình trạng hôn nhân và nghề nghiệp có ảnh hưởng đáng kể đến thái độ đối với rủi ro tài chính, khả năng tiếp cận tín dụng cũng như nhu cầu vay vốn trong từng giai đoạn của cuộc sống. Việc nghiên cứu vai trò của các yếu tố nhân khẩu học đối với hành vi vay tiêu dùng là cơ sở quan trọng để hiểu rõ hơn về hành vi tài chính cá nhân và đưa ra các chính sách tín dụng phù hợp theo từng phân khúc khách hàng.

Các đặc điểm nhân khẩu học và tín dụng đóng vai trò quan trọng trong việc lý giải sự khác biệt trong hành vi vay tiêu dùng giữa các cá nhân hoặc nhóm xã hội. Trong nghiên cứu này, các yếu tố bao gồm:

  • Nghề nghiệp (job): Thể hiện khả năng tạo thu nhập và mức độ ổn định tài chính. Người có nghề nghiệp ổn định thường dễ được phê duyệt tín dụng hơn.
  • Tình trạng hôn nhân (marital): Người đã kết hôn thường có nhu cầu chi tiêu cao hơn và xu hướng vay để phục vụ mục đích chung như nhà ở, con cái.
  • Trình độ học vấn (education): Tác động đến khả năng hiểu biết tài chính và tiếp cận các sản phẩm tín dụng phù hợp.
  • Tình trạng nợ quá hạn (default): Phản ánh lịch sử tín dụng và khả năng tuân thủ nghĩa vụ tài chính.
  • Tình trạng vay mua nhà (housing): Có thể đại diện cho cam kết tài chính dài hạn, ảnh hưởng đến khả năng hoặc nhu cầu vay tiêu dùng bổ sung.

2.2 Mô hình hồi quy nhị phân

Mô hình hồi quy nhị phân là công cụ phổ biến được sử dụng để phân tích và dự báo xác suất xảy ra của một sự kiện nhị phân, trong đó biến phụ thuộc chỉ nhận giá trị 0 hoặc 1. Trong bối cảnh nghiên cứu này, biến phụ thuộc là hành vi vay tiêu dùng của khách hàng (1 = có vay, 0 = không vay). Mục tiêu của các mô hình hồi quy nhị phân là ước lượng xác suất xảy ra sự kiện \(Y=1\) dựa trên các biến độc lập \(X_1, X_2, \dots, X_k\).

Dạng tổng quát của mô hình:

\[ P(Y = 1|X) = G(X\beta) \]

Trong đó:

  • \(G(.)\) là hàm liên kết (link function), xác định loại mô hình cụ thể
  • \(X\) là vector các biến độc lập (predictors)
  • \(\beta\) là vector hệ số hồi quy cần ước lượng

2.2.1 Mô hình Logistic (Logit)

Sử dụng hàm logistic:

\[ P(Y=1|X) = \frac{e^{X\beta}}{1 + e^{X\beta}} \]

Hàm logit giữ xác suất trong khoảng (0,1) và hệ số \(\beta\) được diễn giải thông qua log(Odds Ratio).

2.2.2 Mô hình Probit

Sử dụng hàm phân phối tích lũy chuẩn hóa:

\[ P(Y=1|X) = \Phi(X\beta) \]

Phù hợp trong các trường hợp dữ liệu giả định có phân phối chuẩn ở sai số.

2.2.3 Mô hình Complementary log-log (Cloglog)

Sử dụng hàm:

\[ P(Y=1|X) = 1 - e^{-e^{X\beta}} \]

Phù hợp khi xác suất xảy ra sự kiện gần bằng 0 hoặc gần bằng 1.

2.2.4 Mô hình xác suất tuyến tính (LMP)

Mô hình xác suất tuyến tính là một trường hợp đặc biệt của Mô hình Tuyến tính Tổng quát (Generalized Linear Model - GLM), trong đó hàm liên kết là hàm đồng nhất (identity link function). Công thức mô hình được biểu diễn như sau:

\[ P(Y = 1 \mid X) = X\beta \]

Trong đó:

  • \(Y\) là biến phản hồi nhị phân (giá trị 0 hoặc 1),
  • \(X\) là ma trận các biến độc lập,
  • \(\beta\) là vector các hệ số hồi quy.

Mô hình này cho phép diễn giải trực tiếp xác suất xảy ra sự kiện \(Y = 1\) như một hàm tuyến tính của các biến giải thích \(X\).

Ưu điểm của mô hình này là đơn giản, dễ ước lượng bằng phương pháp OLS và dễ diễn giải. Tuy nhiên, vì giá trị dự báo có thể nằm ngoài khoảng [0, 1], mô hình này thường không đảm bảo ý nghĩa xác suất. Điều này dẫn đến vi phạm giả định và độ chính xác thấp khi dự đoán hành vi nhị phân.

Trong GLM, mô hình xác suất tuyến tính vẫn được sử dụng như một bước tham chiếu ban đầu để so sánh với các mô hình logit, probit hoặc cloglog.

2.2.5 Phương pháp ước lượng: Maximum Likelihood Estimation (MLE)

Các mô hình nhị phân như logit, probit và cloglog đều được ước lượng bằng phương pháp ước lượng hợp lý tối đa (MLE). Đây là phương pháp tìm giá trị tham số \(\beta\) sao cho xác suất tạo ra dữ liệu quan sát là cao nhất. Trong GLMs, hàm hợp lý được xây dựng dựa trên phân phối nhị thức và tối ưu hóa bằng các thuật toán như Newton-Raphson.

Trong các mô hình hồi quy nhị phân thuộc họ GLM như logit, probit và cloglog, tham số \(\beta\) không được ước lượng bằng phương pháp bình phương tối thiểu như trong hồi quy tuyến tính cổ điển, mà thay vào đó sử dụng phương pháp ước lượng hợp lý tối đa (Maximum Likelihood Estimation - MLE).

Phương pháp MLE tìm tập giá trị của \(\beta\) sao cho hàm hợp lý (likelihood function) đạt cực đại – nghĩa là, khả năng tạo ra bộ dữ liệu quan sát từ mô hình là cao nhất. Hàm hợp lý trong trường hợp nhị phân dựa trên phân phối nhị thức:

\[ L(\beta) = \prod_{i=1}^{n} [P_i]^{y_i} [1 - P_i]^{1 - y_i}, \quad \text{trong đó } P_i = G(X_i\beta) \]

Để đơn giản hóa tính toán, ta lấy log của hàm hợp lý để có log-likelihood:

\[ \log L(\beta) = \sum_{i=1}^{n} \left[ y_i \log P_i + (1 - y_i) \log(1 - P_i) \right] \]

Giải bài toán tối đa hóa log-likelihood bằng các thuật toán số học như Newton-Raphson hoặc Fisher Scoring, ta thu được ước lượng \(\hat{\beta}\).

2.3 Relative Risk và Odds Ratio

Trong nghiên cứu xã hội học, marketing hay tài chính tiêu dùng, hai chỉ số phổ biến dùng để đo lường mối quan hệ giữa đặc điểm cá nhân và hành vi (như vay tiêu dùng) là Relative Risk (RR)Odds Ratio (OR). Các chỉ số này giúp đánh giá mức độ khác biệt về khả năng xảy ra hành vi giữa các nhóm khách hàng có hoặc không có một đặc điểm nhất định (ví dụ: có nhà ở hoặc không, đã kết hôn hoặc độc thân).

2.3.1 Relative Risk (RR)

Relative Risk (RR) – hay còn gọi là nguy cơ tương đối – so sánh xác suất xảy ra hành vi vay tiêu dùng giữa hai nhóm:

\[ RR = \frac{P_1}{P_0} \]

Trong đó:

  • \(P_1\): Xác suất khách hàng có đặc điểm thực hiện hành vi vay tiêu dùng
  • \(P_0\): Xác suất khách hàng không có đặc điểm thực hiện hành vi vay tiêu dùng

Diễn giải:

  • RR = 1: Không có sự khác biệt giữa hai nhóm
  • RR > 1: Nhóm có đặc điểm có khả năng vay cao hơn
  • RR < 1: Nhóm có đặc điểm có khả năng vay thấp hơn

2.3.2 Odds Ratio (OR)

Odds Ratio (OR) đo lường tỷ lệ odds (khả năng xảy ra so với không xảy ra) giữa hai nhóm:

\[ OR = \frac{P_1 / (1 - P_1)}{P_0 / (1 - P_0)} = \frac{P_1 (1 - P_0)}{P_0 (1 - P_1)} \]

Trong mô hình hồi quy logistic, kết quả hồi quy chính là log(OR):

\[ \log(OR) = X\beta \]

Diễn giải:

  • OR = 1: Không có sự khác biệt giữa hai nhóm
  • OR > 1: Nhóm có đặc điểm có odds vay cao hơn
  • OR < 1: Nhóm có đặc điểm có odds vay thấp hơn

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

2.4.1 Giới thiệu dữ liệu gốc

library()
data <- read.xlsx("D:/PTDLDT/data.xlsx", sheetIndex = 1, header = TRUE)

data <- data %>%
  mutate(
    loan = as.factor(loan),
    housing = as.factor(housing),
    job = as.factor(job),
    marital = as.factor(marital),
    education = as.factor(education),
    default = as.factor(default),
    contact = as.factor(contact)
  )
str(data)
## 'data.frame':    4521 obs. of  8 variables:
##  $ age      : num  30 33 35 30 59 35 36 39 41 43 ...
##  $ job      : Factor w/ 12 levels "admin.","blue-collar",..: 11 8 5 5 2 5 7 10 3 8 ...
##  $ marital  : Factor w/ 3 levels "divorced","married",..: 2 2 3 2 2 3 2 2 2 2 ...
##  $ education: Factor w/ 4 levels "primary","secondary",..: 1 2 3 3 2 3 3 2 3 1 ...
##  $ default  : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ housing  : Factor w/ 2 levels "no","yes": 1 2 2 2 2 1 2 2 2 2 ...
##  $ loan     : Factor w/ 2 levels "no","yes": 1 2 1 2 1 1 1 1 1 2 ...
##  $ contact  : Factor w/ 3 levels "cellular","telephone",..: 1 1 1 3 3 1 1 1 3 1 ...
Tên biến Kiểu dữ liệu Số lượng giá trị duy nhất Mô tả nội dung
age Numeric 67 Tuổi của khách hàng (từ 19 đến 87 tuổi).
job Character 12 Nghề nghiệp của khách hàng như: management, blue-collar, services, student, retired, unemployed,…
marital Character 3 Tình trạng hôn nhân: single, married, divorced.
education Character 4 Trình độ học vấn: primary, secondary, tertiary, unknown.
default Character 2 Khách hàng có nợ tín dụng quá hạn không? (yes, no)
housing Character 2 Khách hàng có vay mua nhà không? (yes, no)
loan Character 2 Khách hàng có vay tiêu dùng không? (yes, no)
contact Character 3 Hình thức liên hệ: cellular, telephone, unknown

Nhận xét

Bộ dữ liệu gồm 8 biến và 4251 quan sát, được chia thành hai nhóm chính: biến định lượng và biến định tính.

  • Biến định lượng: Chỉ có một biến duy nhất là biến định lượng, đó là biến age. Đây là biến đo lường tuổi của khách hàng, có kiểu số (numeric), có thể sử dụng để tính toán trung bình, độ lệch chuẩn, phân phối, v.v. Biến này mang thông tin liên tục và có thể dùng cho các phương pháp phân tích định lượng như hồi quy tuyến tính hoặc phân tích phương sai.

  • Các biến định tính: Có bảy biến còn lại thuộc loại biến định tính. Các biến này mang thông tin dạng danh mục (categorical), không dùng để tính toán trực tiếp mà thường được phân tích bằng cách đếm tần số, tỷ lệ, hoặc dùng các phương pháp thống kê cho dữ liệu định tính như kiểm định Chi bình phương, tính Odds Ratio, Relative Risk,…

2.4.2 Dữ liệu và các biến sử dụng trong nghiên cứu

Dữ liệu sử dụng trong nghiên cứu được trích xuất từ một chiến dịch tiếp thị qua điện thoại của một ngân hàng. Tập dữ liệu ban đầu nhằm phục vụ cho việc dự đoán khả năng khách hàng đăng ký gửi tiền có kỳ hạn. Tuy nhiên, trong phạm vi nghiên cứu này, tác giả tập trung phân tích hành vi tài chính cụ thể là vay tiêu dùng cá nhân.

Biến phụ thuộc chính trong mô hình là:

  • loan: Thể hiện khách hàng có vay tiêu dùng hay không, được mã hóa lại dưới dạng nhị phân:
    • 1: nếu khách hàng có vay tiêu dùng (loan = “yes”)
    • 0: nếu khách hàng không vay tiêu dùng (loan = “no”)

Các biến độc lập là các yếu tố nhân khẩu học và đặc điểm tài chính của khách hàng, được chọn lọc từ bộ dữ liệu gốc:

  • job: Nghề nghiệp của khách hàng (admin., technician, blue-collar, etc.)
  • marital: Tình trạng hôn nhân (married, single, divorced)
  • education: Trình độ học vấn (primary, secondary, tertiary, unknown)
  • default: Có nợ quá hạn hay không (yes/no)
  • housing: Có vay mua nhà hay không (yes/no)
library(dplyr)

# Tạo bộ dữ liệu chỉ chứa các biến định tính
data1 <- data %>%
  dplyr::select(job, marital, education, default, housing, loan)

# Xem trước dữ liệu mới
str(data1)
## 'data.frame':    4521 obs. of  6 variables:
##  $ job      : Factor w/ 12 levels "admin.","blue-collar",..: 11 8 5 5 2 5 7 10 3 8 ...
##  $ marital  : Factor w/ 3 levels "divorced","married",..: 2 2 3 2 2 3 2 2 2 2 ...
##  $ education: Factor w/ 4 levels "primary","secondary",..: 1 2 3 3 2 3 3 2 3 1 ...
##  $ default  : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ housing  : Factor w/ 2 levels "no","yes": 1 2 2 2 2 1 2 2 2 2 ...
##  $ loan     : Factor w/ 2 levels "no","yes": 1 2 1 2 1 1 1 1 1 2 ...
head(data1)
##           job marital education default housing loan
## 1  unemployed married   primary      no      no   no
## 2    services married secondary      no     yes  yes
## 3  management  single  tertiary      no     yes   no
## 4  management married  tertiary      no     yes  yes
## 5 blue-collar married secondary      no     yes   no
## 6  management  single  tertiary      no      no   no

2.5 Quy trình nghiên cứu

Quy trình nghiên cứu được tác giả xây dựng theo các bước logic và tuần tự nhằm đảm bảo tính hệ thống, độ tin cậy và cơ sở khoa học trong phân tích dữ liệu. Cụ thể bao gồm các bước sau:

library(DiagrammeR)

DiagrammeR::grViz("
digraph research_flow {
  graph [rankdir = TB]

  node [shape = rectangle, style = filled, color = lightblue, fontname = Helvetica, fontsize = 12]

  A [label = 'Bước 1: Thu thập & xử lý dữ liệu']
  B [label = 'Bước 2: Thống kê mô tả\n(Dữ liệu đơn biến)']
  C [label = 'Bước 3: Kiểm định Chi-square\n(Giữa biến phụ thuộc và độc lập)']
  D [label = 'Bước 4: Phân tích cặp biến\n(Bảng tần số, biểu đồ, RR & OR)']
  E [label = 'Bước 5: Ước lượng mô hình nhị phân\n(Logit, Probit, Cloglog, GLM)']
  F [label = 'Bước 6: So sánh mô hình\n(AIC, ROC, Confusion Matrix)']
  G [label = 'Bước 7: Đề xuất chính sách\n(Dựa trên kết quả mô hình)']

  A -> B -> C -> D -> E -> F -> G
}
")

Bước 1: Thu thập và xử lý dữ liệu

Tác giả sử dụng tập dữ liệu được rút trích từ một chiến dịch marketing qua điện thoại của một ngân hàng tại Bồ Đào Nha. Từ đó, tác giả lựa chọn các biến phù hợp với mục tiêu nghiên cứu:

  • Biến phụ thuộc: loan – thể hiện việc khách hàng có vay tiêu dùng hay không (yes/no).
  • Các biến độc lập: job, marital, education, default, housing.

Sau khi xác định biến, tác giả tiến hành làm sạch dữ liệu, mã hóa và chuyển đổi các biến định tính về định dạng phù hợp (factor) để phục vụ phân tích.

Bước 2: Thống kê mô tả đơn biến

Tác giả tiến hành thống kê tần suất và tỷ lệ phần trăm cho từng biến nhằm mô tả đặc điểm tổng quát của dữ liệu. Kết quả được minh họa thông qua biểu đồ cột và biểu đồ tròn nhằm trực quan hóa đặc điểm nhân khẩu học của khách hàng.

Bước 3: Kiểm định Chi-bình phương

Ở bước này, tác giả sử dụng kiểm định Chi-square để kiểm tra mối liên hệ thống kê giữa biến phụ thuộc loan và từng biến độc lập. Những biến có giá trị p < 0.05 được xem là có mối quan hệ có ý nghĩa thống kê với hành vi vay tiêu dùng, từ đó được đưa vào các phân tích sâu hơn.

Bước 4: Phân tích mối quan hệ giữa cặp biến

Với mỗi cặp biến có mối liên hệ, tác giả thực hiện các bước:

  • Lập bảng tần số chéo để mô tả phân phối chung.

  • Vẽ biểu đồ cột phân nhóm để so sánh trực quan.

  • Thực hiện kiểm định tỷ lệ giữa các nhóm.

  • Tính toán hai chỉ số quan trọng: Relative Risk (RR) và Odds Ratio (OR) nhằm lượng hóa mức độ ảnh hưởng của các yếu tố nhân khẩu học đến quyết định vay tiêu dùng.

Bước 5: Ước lượng mô hình hồi quy nhị phân

Tác giả tiến hành xây dựng và ước lượng 4 mô hình hồi quy nhị phân nhằm phân tích tác động của các biến nhân khẩu học đến hành vi vay tiêu dùng:

  • Hồi quy Logistic (Logit)

  • Hồi quy Probit

  • Hồi quy Complementary log-log (Cloglog)

  • Mô hình xác suất tuyến tính (LMP)

Việc ước lượng các mô hình này được thực hiện bằng phương pháp ước lượng hợp lý tối đa (Maximum Likelihood Estimation – MLE).

Bước 6: Đánh giá và lựa chọn mô hình phù hợp

Tác giả sử dụng các tiêu chí đánh giá mô hình bao gồm:

  • Chỉ số AIC (Akaike Information Criterion)

  • Đường cong ROC và diện tích dưới đường cong (AUC)

  • Ma trận nhầm lẫn (Confusion Matrix)

Dựa trên kết quả đánh giá, mô hình tốt nhất sẽ được lựa chọn để diễn giải và đề xuất chính sách.

Bước 7: Kết luận và khuyến nghị

Tác giả tổng hợp các kết quả định tính và định lượng, từ đó rút ra các kết luận chính về mối quan hệ giữa các đặc điểm nhân khẩu học và hành vi vay tiêu dùng. Trên ở đcơ só, nghiên cứu đưa ra các khuyến nghị thực tiễn cho tổ chức tín dụng nhằm cải thiện hiệu quả tiếp cận khách hàng mục tiêu.


CHƯƠNG 3: KẾT QUẢ NGHIÊN CỨU

3.1 Thống kê mô tả biến nghiên cứu

3.1.1 Thống mô tả biến phụ thuộc

Biến hành vi vay tiêu dùng (Loan)

Lập bảng tần số và tần suất

table(data1$loan)
## 
##   no  yes 
## 3830  691
prop.table(table(data1$loan))
## 
##        no       yes 
## 0.8471577 0.1528423

Vẽ biểu đồ cột

freq_loan <- as.data.frame(table(data1$loan))
colnames(freq_loan) <- c("Loan", "Count")

ggplot(freq_loan, aes(x = Loan, y = Count)) +
  geom_col(fill = "#9370DB", color = "black") +
  geom_text(aes(label = Count), vjust = -0.5) +
  labs(title = "Tần số vay tiêu dùng", x = "Vay tiêu dùng", y = "Số lượng") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Vẽ biểu đồ tròn

# Tạo bảng tần suất
loan_freq <- table(data1$loan)
loan_prop <- prop.table(loan_freq)

# Chuyển thành data frame để dùng ggplot2
loan_df <- as.data.frame(loan_prop)
colnames(loan_df) <- c("Loan", "Proportion")

# Tính phần trăm để hiển thị nhãn
loan_df$Percent <- paste0(round(loan_df$Proportion * 100, 1), "%")

# Vẽ biểu đồ tròn bằng ggplot2
ggplot(loan_df, aes(x = "", y = Proportion, fill = Loan)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = Percent), position = position_stack(vjust = 0.5)) +
  labs(title = "Tỷ lệ vay tiêu dùng", x = NULL, y = NULL) +
  theme_void()+
  theme(plot.title = element_text(hjust = 0.5))

Dựa vào bảng tần số, tần suất và biểu đồ của biến loan, ta có các nhận định sau:

  • Nhóm không vay tiêu dùng (no) chiếm số lượng lớn vượt trội với 3.830 người, tương ứng khoảng 84.7% tổng số mẫu. Đây là nhóm chiếm ưu thế rõ rệt.

  • Nhóm có vay tiêu dùng (yes) chỉ có 691 người, chiếm khoảng 15.3%.

Kết luận:

Phân bố vay tiêu dùng cho thấy đa số khách hàng không sử dụng hình thức vay tiêu dùng, phản ánh sự thận trọng trong chi tiêu hoặc tiếp cận hạn chế với loại hình tín dụng này. Yếu tố này có thể đóng vai trò trong việc xác định mức độ tiêu dùng cá nhân và khả năng tiếp cận tín dụng tiêu dùng trong nghiên cứu hành vi tài chính.

3.1.2 Thống kê mô tả biến độc lập

a. Vay mua nhà (Housing)

Lập bảng tần số và tần suất

table(data1$housing)
## 
##   no  yes 
## 1962 2559
prop.table(table(data1$housing))
## 
##        no       yes 
## 0.4339748 0.5660252

Vẽ biểu đồ cột

freq_housing <- as.data.frame(table(data1$housing))
colnames(freq_housing) <- c("Housing", "Count")

ggplot(freq_housing, aes(x = Housing, y = Count)) +
  geom_col(fill = "#66CDAA", color = "black") +
  geom_text(aes(label = Count), vjust = -0.5) +
  labs(title = "Tần số vay mua nhà", x = "Vay nhà", y = "Số lượng") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Vẽ biểu đồ tròn

# Tạo bảng tần suất
housing_freq <- table(data1$housing)
housing_prop <- prop.table(housing_freq)

# Chuyển sang data frame để vẽ với ggplot2
housing_df <- as.data.frame(housing_prop)
colnames(housing_df) <- c("Housing", "Proportion")

# Thêm cột phần trăm để làm nhãn
housing_df$Percent <- paste0(round(housing_df$Proportion * 100, 1), "%")

# Vẽ biểu đồ tròn
ggplot(housing_df, aes(x = "", y = Proportion, fill = Housing)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = Percent), position = position_stack(vjust = 0.5)) +
  labs(title = "tỷ lệ vay mua nhà", x = NULL, y = NULL) +
  theme_void()

theme(plot.title = element_text(hjust = 0.5))
## List of 1
##  $ plot.title:List of 11
##   ..$ family       : NULL
##   ..$ face         : NULL
##   ..$ colour       : NULL
##   ..$ size         : NULL
##   ..$ hjust        : num 0.5
##   ..$ vjust        : NULL
##   ..$ angle        : NULL
##   ..$ lineheight   : NULL
##   ..$ margin       : NULL
##   ..$ debug        : NULL
##   ..$ inherit.blank: logi FALSE
##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
##  - attr(*, "class")= chr [1:2] "theme" "gg"
##  - attr(*, "complete")= logi FALSE
##  - attr(*, "validate")= logi TRUE

Dựa vào bảng tần số, tần suất và biểu đồ của biến housing, ta có các nhận định sau:

  • Nhóm có vay mua nhà (yes) chiếm tỷ lệ cao hơn với 2559 người, tương ứng khoảng 56.6% tổng số mẫu. Đây là nhóm chiếm tỷ trọng lớn trong tập dữ liệu.

  • Nhóm không vay mua nhà (no) có 1,962 người, chiếm khoảng 43.4%.

Kết luận:

Phân bố dữ liệu cho thấy phần lớn khách hàng trong tập dữ liệu có khoản vay mua nhà. Điều này có thể phản ánh nhu cầu về nhà ở cũng như mức độ tiếp cận tín dụng mua bất động sản của khách hàng trong tập mẫu.

b. Nghề nghiệp (Job)

Lập bảng tần số và tần suất

#Bảng tần số
table(data1$job)
## 
##        admin.   blue-collar  entrepreneur     housemaid    management 
##           478           946           168           112           969 
##       retired self-employed      services       student    technician 
##           230           183           417            84           768 
##    unemployed       unknown 
##           128            38
#Bảng tần suất
table(data1$job)/sum(table(data1$job))
## 
##        admin.   blue-collar  entrepreneur     housemaid    management 
##    0.10572882    0.20924574    0.03715992    0.02477328    0.21433311 
##       retired self-employed      services       student    technician 
##    0.05087370    0.04047777    0.09223623    0.01857996    0.16987392 
##    unemployed       unknown 
##    0.02831232    0.00840522

Vẽ biểu đồ cột

library(ggplot2)

library(ggplot2)

# Tạo bảng tần số cho biến job
freq1 <- table(data1$job)

# Chuyển thành data frame
job_freq <- as.data.frame(freq1)
colnames(job_freq) <- c("Job", "Count")

# Vẽ biểu đồ cột
ggplot(job_freq, aes(x = Job, y = Count)) +
  geom_col(fill = "#6495ED", color = "black") +
  geom_text(aes(label = Count), vjust = -0.5, color = "black") +
  labs(title = "Tần số theo nghề nghiệp", x = "Nghề nghiệp", y = "Số lượng") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  theme(plot.title = element_text(hjust = 0.5)) 

Vẽ biểu đồ tròn

# Tạo bảng tần suất cho biến job
job_freq <- table(data1$job)
job_prop <- prop.table(job_freq)

# Chuyển sang data frame để vẽ
job_df <- as.data.frame(job_prop)
colnames(job_df) <- c("Job", "Proportion")

# Thêm cột phần trăm để làm nhãn
job_df$Percent <- paste0(round(job_df$Proportion * 100, 1), "%")

# Vẽ biểu đồ tròn
ggplot(job_df, aes(x = "", y = Proportion, fill = Job)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = Percent), position = position_stack(vjust = 0.5), size = 3) +
  labs(title = "Tỷ lệ phân bố nghề nghiệp", x = NULL, y = NULL) +
  theme_void() +
  theme(plot.title = element_text(hjust = 0.5))

Dựa vào bảng tần số và biểu đồ trên, ta có các nhận định sau:

  • Nghề nghiệp phổ biến nhất là management với 969 người, chiếm khoảng 21.4% tổng số mẫu.

  • Theo sau là blue-collar (946 người, ~20.9%) và technician (768 người, ~17.0%).

  • Các nhóm nghề ít phổ biến hơn gồm: student (84 người, ~1.9%) và unknown (38 người, ~0.8%).

  • Tổng cộng, ba nhóm nghề chiếm tỷ lệ cao nhất (management, blue-collar, technician) đã chiếm hơn 59% toàn bộ dữ liệu.

Kết luận:

Phân bố nghề nghiệp không đều, cho thấy các khách hàng trong dữ liệu chủ yếu đến từ các ngành quản lý, lao động phổ thông và kỹ thuật viên.

c. Tình trạng hôn nhân (Marital)

Lập bảng tần số và tần suất

# Bảng tần số
table(data1$marital)
## 
## divorced  married   single 
##      528     2797     1196
# Bảng tần suất
prop.table(table(data1$marital))
## 
##  divorced   married    single 
## 0.1167883 0.6186684 0.2645432

Vẽ biểu đồ cột

# Biểu đồ cột
library(ggplot2)
freq_marital <- as.data.frame(table(data1$marital))
colnames(freq_marital) <- c("Marital", "Count")

ggplot(freq_marital, aes(x = Marital, y = Count)) +
  geom_col(fill = "#6495ED", color = "black") +
  geom_text(aes(label = Count), vjust = -0.5) +
  labs(title = "Tần số theo tình trạng hôn nhân", x = "Tình trạng hôn nhân", y = "Số lượng") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.title = element_text(hjust = 0.5))

Vẽ biểu đồ tròn

# Bảng tần số và tần suất
marital_freq <- table(data1$marital)
marital_prop <- prop.table(marital_freq)

# Chuyển sang data frame để vẽ
marital_df <- as.data.frame(marital_prop)
colnames(marital_df) <- c("Marital", "Proportion")

# Thêm cột phần trăm để làm nhãn
marital_df$Percent <- paste0(round(marital_df$Proportion * 100, 1), "%")

# Vẽ biểu đồ tròn
ggplot(marital_df, aes(x = "", y = Proportion, fill = Marital)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = Percent), position = position_stack(vjust = 0.5), size = 4) +
  labs(title = "Tỷ lệ tình trạng hôn nhân", x = NULL, y = NULL) +
  theme_void() +
  theme(plot.title = element_text(hjust = 0.5))

Dựa vào bảng tần số, tần suất và biểu đồ của biến marital, ta có các nhận định sau:

  • Nhóm kết hôn (married) chiếm tỷ lệ cao nhất, với 2,797 người, tương ứng khoảng 61.9% tổng số mẫu. Đây là nhóm chiếm ưu thế vượt trội.

  • Nhóm độc thân (single) chiếm 1,196 người (~26.5%), đứng thứ hai về tần suất.

  • Nhóm ly hôn (divorced) chỉ chiếm 528 người (~11.7%), là nhóm có số lượng thấp nhất.

Kết luận:

Phân bố tình trạng hôn nhân trong tập dữ liệu này khá chênh lệch, với phần lớn khách hàng là người đã kết hôn. Điều này có thể phản ánh xu hướng hoặc cấu trúc dân số của khách hàng trong tập dữ liệu.

d. Trình độ học vấn (Education)

Lập bảng tần số và tần suất

table(data1$education)
## 
##   primary secondary  tertiary   unknown 
##       678      2306      1350       187
prop.table(table(data1$education))
## 
##    primary  secondary   tertiary    unknown 
## 0.14996682 0.51006415 0.29860650 0.04136253

Vẽ biểu đồ cột

freq_edu <- as.data.frame(table(data1$education))
colnames(freq_edu) <- c("Education", "Count")

ggplot(freq_edu, aes(x = Education, y = Count)) +
  geom_col(fill = "#FF9966", color = "black") +
  geom_text(aes(label = Count), vjust = -0.5) +
  labs(title = "Tần số theo trình độ học vấn", x = "Trình độ", y = "Số lượng") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.title = element_text(hjust = 0.5))

Vẽ biểu đồ tròn

# Bảng tần số và tần suất
education_freq <- table(data1$education)
education_prop <- prop.table(education_freq)

# Chuyển sang data frame để vẽ
education_df <- as.data.frame(education_prop)
colnames(education_df) <- c("Education", "Proportion")

# Thêm cột phần trăm để làm nhãn
education_df$Percent <- paste0(round(education_df$Proportion * 100, 1), "%")

# Vẽ biểu đồ tròn
ggplot(education_df, aes(x = "", y = Proportion, fill = Education)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = Percent), position = position_stack(vjust = 0.5), size = 4) +
  labs(title = "Tỷ lệ trình độ học vấn", x = NULL, y = NULL) +
  theme_void() +
  theme(plot.title = element_text(hjust = 0.5))

Dựa vào bảng tần số tần suất và biểu đồ của biến education, ta có các nhận định sau:

  • Nhóm có trình độ học vấn secondary (trung học) chiếm tỷ lệ cao nhất, với 2,306 người, tương ứng khoảng 51.0% tổng số mẫu. Đây là nhóm chiếm ưu thế vượt trội.

  • Nhóm có trình độ tertiary (đại học, sau đại học) có 1,350 người, chiếm khoảng 29.8%, đứng thứ hai về tần suất.

  • Nhóm primary (tiểu học) có 678 người, tương ứng khoảng 15.0% tổng số mẫu.

  • Nhóm unknown (không rõ trình độ học vấn) chỉ chiếm 187 người, tương ứng 4.1%, là nhóm có số lượng thấp nhất.

Kết luận:

Phân bố trình độ học vấn trong tập dữ liệu cho thấy phần lớn khách hàng có trình độ học vấn trung học. Điều này có thể phản ánh cấu trúc trình độ học vấn phổ biến trong nhóm khách hàng được khảo sát, đồng thời là yếu tố cần xem xét trong các phân tích liên quan đến hành vi tiêu dùng hoặc khả năng tiếp cận dịch vụ.

e. Vay tiêu dùng (Default)

Lập bảng tần số và tần suất

table(data1$default)
## 
##   no  yes 
## 4445   76
prop.table(table(data1$default))
## 
##         no        yes 
## 0.98318956 0.01681044

Vẽ biểu đồ cột

freq_default <- as.data.frame(table(data1$default))
colnames(freq_default) <- c("Default", "Count")

ggplot(freq_default, aes(x = Default, y = Count)) +
  geom_col(fill = "#F08080", color = "black") +
  geom_text(aes(label = Count), vjust = -0.5) +
  labs(title = "Tần số nợ tín dụng xấu", x = "Default", y = "Số lượng") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Vẽ biểu đồ tròn

# Bảng tần số và tần suất
default_freq <- table(data1$default)
default_prop <- prop.table(default_freq)

# Chuyển sang data frame để vẽ
default_df <- as.data.frame(default_prop)
colnames(default_df) <- c("Default", "Proportion")

# Thêm cột phần trăm để làm nhãn
default_df$Percent <- paste0(round(default_df$Proportion * 100, 1), "%")

# Vẽ biểu đồ tròn
ggplot(default_df, aes(x = "", y = Proportion, fill = Default)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = Percent), position = position_stack(vjust = 0.5), size = 4) +
  labs(title = "Tỷ lệ khách hàng có nợ quá hạn", x = NULL, y = NULL) +
  theme_void() +
  theme(plot.title = element_text(hjust = 0.5))

Dựa vào bảng tần số và tần suất của biến default, ta có các nhận định sau:

  • Nhóm không có nợ tín dụng xấu (no) chiếm số lượng lớn nhất với 4,445 người, tương ứng khoảng 98.4% tổng số mẫu. Đây là nhóm chiếm ưu thế gần như tuyệt đối.

  • Nhóm có nợ tín dụng xấu (yes) chỉ có 76 người, chiếm tỷ lệ rất nhỏ, khoảng 1.7%.

Kết luận:

Phân bố nợ tín dụng xấu trong tập dữ liệu cho thấy phần lớn khách hàng không có lịch sử nợ xấu. Điều này phản ánh chất lượng tín dụng tương đối tốt của nhóm khách hàng được khảo sát.


3.2 Kiểm định chi bình phương

Trong nghiên cứu này, kiểm định Chi bình phương (Chi-squared test) được sử dụng nhằm xác định xem có tồn tại mối liên hệ thống kê giữa quyết định vay tiêu dùng của khách hàng (biến phụ thuộc loan) với một số đặc điểm nhân khẩu học và kinh tế xã hội (các biến độc lập phân loại) hay không. Cụ thể, các biến phân loại được đưa vào kiểm định bao gồm:

  • Thứ nhất, biến housing (tình trạng vay mua nhà) phản ánh việc khách hàng hiện có đang vay tiền để mua nhà hay không. Biến này gồm ba nhóm giá trị: “yes”, “no”, và “unknown”. Kiểm định giúp xác định liệu việc đã vay mua nhà có ảnh hưởng đến khả năng tiếp tục vay tiêu dùng hay không.

  • Thứ hai, biến marital (tình trạng hôn nhân) phản ánh tình trạng hôn nhân của khách hàng, bao gồm các nhóm: độc thân, đã kết hôn và ly hôn. Việc kiểm định biến này cho phép đánh giá xem tình trạng hôn nhân có ảnh hưởng đáng kể đến quyết định vay tiêu dùng hay không.

  • Thứ ba, biến education (trình độ học vấn) thể hiện mức học vấn cao nhất của khách hàng với các nhóm: tiểu học, trung học, đại học/cao đẳng và không rõ. Trình độ học vấn có thể phản ánh khả năng tài chính cũng như khả năng tiếp cận tín dụng, do đó kiểm định biến này rất quan trọng.

  • Thứ tư, biến default (nợ quá hạn) cho biết khách hàng có từng nợ quá hạn trong quá khứ hay không. Biến này gồm hai nhóm: “yes” và “no”. Đây là yếu tố then chốt trong đánh giá rủi ro tín dụng của khách hàng, và có thể ảnh hưởng mạnh đến việc cấp khoản vay mới.

  • Cuối cùng, biến job (nghề nghiệp) phản ánh lĩnh vực nghề nghiệp hiện tại của khách hàng, bao gồm nhiều nhóm như: nhân viên hành chính, lao động phổ thông, doanh nhân, học sinh – sinh viên, người đã nghỉ hưu, thất nghiệp,… Nghề nghiệp có thể phản ánh mức thu nhập và ổn định tài chính, từ đó ảnh hưởng đến quyết định vay tiêu dùng.

Việc kiểm định Chi bình phương giữa từng biến kể trên với biến loan sẽ giúp xác định xem mỗi đặc điểm nhân khẩu học có ảnh hưởng đáng kể đến hành vi vay tiêu dùng của khách hàng hay không. Nếu giá trị p-value của kiểm định nhỏ hơn 0.05, ta có thể kết luận rằng tồn tại mối liên hệ thống kê giữa hai biến.

3.2.1 Kiểm định mối quan hệ giữa vay tiêu dùng (loan) và vay mua nhà (housing)

Giả thuyết kiểm định

  • H0: Không có mối liên hệ giữa vay tiêu dùng (loan) và vay mua nhà (housing)
  • H1: Có mối liên hệ giữa vay tiêu dùng (loan) và vay mua nhà (housing)
table_loan_housing <- table(data1$loan, data1$housing)
chisq_housing <- chisq.test(table_loan_housing)
chisq_housing
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table_loan_housing
## X-squared = 1.4374, df = 1, p-value = 0.2306

Kết quả kiểm đinh

Với p-value = 0.2837 lớn hơn mức ý nghĩa 5%. Vậy ta không đủ cơ sở để bác bỏ giả thuyết H0, có nghĩa là không có mối liên hệ giữa vay tiêu dùng và vay mua nhà.

3.2.2 Kiểm định mối quan hệ giữa vay tiêu dùng (loan) và nghề nghiệp (job)

Giả thuyết kiểm định

  • H0: Không có mối liên hệ giữa nghề nghiệp và khả năng vay tiêu dùng.
  • H1: Có mối liên hệ giữa nghề nghiệp và khả năng vay tiêu dùng.
# Thực hiện kiểm định Chi bình phương
table_loan_job <- table(data1$loan, data1$job)
chisq_job <- chisq.test(table_loan_job)
chisq_job
## 
##  Pearson's Chi-squared test
## 
## data:  table_loan_job
## X-squared = 47.191, df = 11, p-value = 1.989e-06

Kết quả kiểm đinh

Với p-value = 2.863e-06 nhỏ hơn mức ý nghĩa 5%. Vậy ta bác bỏ giả thuyết H0, có nghĩa là có mối liên hệ giữa vay tiêu dùng và nghề nghiệp.

3.2.3 Kiểm định mối quan hệ giữa vay tiêu dùng (loan) và trình độ học vấn (education)

Giả thuyết kiểm định

  • H0: Không có mối liên hệ giữa vay tiêu dùng (loan) và trình độ học vấn (education).
  • H1: Có mối liên hệ giữa vay tiêu dùng (loan) và trình độ học vấn (education).
table_loan_edu <- table(data1$loan, data1$education)
chisq_edu <- chisq.test(table_loan_edu)
chisq_edu
## 
##  Pearson's Chi-squared test
## 
## data:  table_loan_edu
## X-squared = 39.798, df = 3, p-value = 1.176e-08

Kết quả kiểm đinh

Với p-value = 6.698e-05 nhỏ hơn mức ý nghĩa 5%. Vậy ta bác bỏ giả thuyết H0, có nghĩa là có mối liên hệ giữa vay tiêu dùngvà trình độ học vấn.

3.2.4 Kiểm định mối quan hệ giữa vay tiêu dùng (loan) và nợ quá hạn (default)

Giả thuyết kiểm định

  • H0: Không có mối liên hệ giữa tình trạng nợ quá hạn (default) và việc vay tiêu dùng (loan).
  • H1: Có mối liên hệ giữa tình trạng nợ quá hạn (default) và việc vay tiêu dùng (loan).
table_loan_default <- table(data1$loan, data1$default)
chisq_edu <- chisq.test(table_loan_default)
chisq_edu
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table_loan_default
## X-squared = 17.157, df = 1, p-value = 3.441e-05

Kết quả kiểm đinh

Với p-value = 0.0001051 nhỏ hơn mức ý nghĩa 5%. Vậy ta bác bỏ giả thuyết H0, có nghĩa là có mối liên hệ giữa vay tiêu dùng và tình trạng nợ quá hạn.

3.2.5 Kiểm định mối quan hệ giữa vay tiêu dùng (loan) và tình trạng hôn nhân (marital)

Giả thuyết kiểm định

  • H0: Không có mối liên hệ giữa tình trạng hôn nhân và việc vay tiêu dùng.
  • H1: Có mối liên hệ giữa tình trạng hôn nhân và việc vay tiêu dùng.
table_loan_marital <- table(data1$loan, data1$marital)
chisq_edu <- chisq.test(table_loan_marital)
chisq_edu
## 
##  Pearson's Chi-squared test
## 
## data:  table_loan_marital
## X-squared = 10.88, df = 2, p-value = 0.004339

Kết quả kiểm đinh

Với p-value = 0.002975 nhỏ hơn mức ý nghĩa 5%. Vậy ta bác bỏ giả thuyết H0, có nghĩa là có mối liên hệ giữa tình trạng hôn nhân và việc vay tiêu dùng.

Thông qua kết quả kiểm định chỉ có 1 biến housing là không có mối liên hệ với biến loan, 4 biến độc lập còn lại đều có mối liên hệ với biến phụ thuộc là loan. Tiếp theo đó ta sẽ phân tích sâu hơn về mối quan hệ giữa các biến độc lập và tình trạng vay tiêu dùng với 4 biến độc lập là: job, education, marital và default.

3.3 Phân tích mối quan hệ giữa biến độc lập và biến phụ thuộc

3.3.1 Phân tích mối quan hệ giữa vay tiêu dùng (loan) và nghề nghiệp (job)

a. Thống kê mô tả giữa hai biến

Tạo bảng tần số

Để phân tích mối quan hệ giữa vay tiêu dùng (loan) và nghề nghiệp (job), ta tiến hành tạo bảng chéo tần số và bảng tần suất phần trăm tương ứng nhằm quan sát sự phân bố của các nhóm đối tượng trong từng loại nghề nghiệp.

table_job1 <- table(data1$loan, data1$job)
table_job1
##      
##       admin. blue-collar entrepreneur housemaid management retired
##   no     387         790          127        99        849     198
##   yes     91         156           41        13        120      32
##      
##       self-employed services student technician unemployed unknown
##   no            153      343      83        649        115      37
##   yes            30       74       1        119         13       1

Trực quan hoá bằng biểu đồ

Để minh họa trực quan mối quan hệ giữa tình trạng vay tiêu dùng và nghề nghiệp, ta sử dụng biểu đồ cột (barplot).

# Chuyển bảng tần số sang data frame để ggplot dùng được
df_job <- as.data.frame(table_job1)
colnames(df_job) <- c("Loan", "Job", "Count")

# Vẽ biểu đồ cột
library(ggplot2)
ggplot(df_job, aes(x = Loan, y = Count, fill = Job)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Phân bố vay tiêu dùng theo nhóm nghề nghiệp",
    x = "Nhóm nghề nghiệp",
    y = "Số lượng khách hàng",
    fill = "Tình trạng vay"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

Nhận xét

Dựa trên bảng tần số giữa hai biến loan và job, có thể thấy rằng ở hầu hết các nhóm nghề nghiệp, số lượng khách hàng không vay tiêu dùng chiếm ưu thế rõ rệt so với số lượng khách hàng có vay. Một số nhóm có số lượng khách hàng vay tiêu dùng tương đối cao bao gồm:

  • Nhóm management ghi nhận 120 khách hàng có vay tiêu dùng trên tổng số 969 người thuộc nhóm này.

  • Nhóm technician có 119 người vay trong số 768 người.

  • Nhóm blue-collar (lao động phổ thông) có số lượng người vay tiêu dùng cao nhất, với 156 khách hàng trên tổng số 946 người.

Ngược lại, có những nhóm nghề nghiệp mà số lượng khách hàng vay tiêu dùng rất thấp, cụ thể:

  • Nhóm student chỉ có 1 khách hàng vay tiêu dùng.

  • Nhóm unknown cũng chỉ ghi nhận 1 khách hàng vay.

Những con số này cho thấy rằng, những nhóm có nghề nghiệp ổn định và có khả năng tạo thu nhập rõ ràng hơn thường có xu hướng vay tiêu dùng nhiều hơn. Trong khi đó, các nhóm như học sinh – sinh viên hoặc không xác định nghề nghiệp hầu như không có nhu cầu hoặc không đủ điều kiện để vay.

b. Kiểm định tỷ lệ giữa hai biến

Tác giả muốn kiểm tra xem tỷ lệ vay tiêu dùng của nhóm khách hàng đang có việc làm (employed) có bằng 60% hay không.

Giả thuyết kiểm định

  • Giả thuyết H0: Tỷ lệ khách hàng vay tiêu dùng trong nhóm có việc làm là 60%.
  • Giả thuyết H1: Tỷ lệ khách hàng vay tiêu dùng trong nhóm có việc làm khác 60%.
# Bước 1: Tạo nhóm nghề
data1$job_group <- ifelse(data1$job %in% c("unemployed", "unknown"), "non-employed", "employed")

# Bước 2: Lọc nhóm "employed"
employed_data <- subset(data1, job_group == "employed")

# Bước 3: Tính số lượng và số người vay
n_employed <- nrow(employed_data)
n_loan_yes <- sum(employed_data$loan == "yes")

# Kiểm định tỷ lệ có bằng 0.6 không
prop.test(x = n_loan_yes, n = n_employed, p = 0.6, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_loan_yes out of n_employed, null probability 0.6
## X-squared = 3584.2, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.6
## 95 percent confidence interval:
##  0.1448848 0.1666360
## sample estimates:
##         p 
## 0.1554535

Kết luận

  • Dựa trên kết quả kiểm định, giá trị p-value rất nhỏ (gần bằng 0), điều này cho thấy tỷ lệ vay tiêu dùng của khách hàng có việc làm khác xa so với giả định ban đầu là 60%. Vì vậy, ta bác bỏ giả thuyết H₀ ở mức ý nghĩa 5%.

  • Kết quả phân tích cho thấy tỷ lệ vay tiêu dùng thực tế chỉ khoảng 15.55%, thấp hơn rất nhiều so với mức giả định. Đồng thời, khoảng tin cậy 95% nằm trong khoảng từ 14.49% đến 16.66%, nghĩa là tỷ lệ thực tế gần như luôn nằm trong khoảng này.

  • Tóm lại, khách hàng có việc làm trong tập dữ liệu này không có xu hướng vay tiêu dùng nhiều như kỳ vọng.

Tiếp theo, tác giả muốn kiểm tra xem tỷ lệ vay tiêu dùng của nhóm khách hàng không có việc làm (employed) có bằng 30% hay không.

Giả thuyết kiểm định

  • Giả thuyết H0: Tỷ lệ khách hàng vay tiêu dùng trong nhóm không có việc làm là 30%.
  • Giả thuyết H1: Tỷ lệ khách hàng vay tiêu dùng trong nhóm không có việc làm khác 30%.
# Bước 2: Tạo bảng chéo giữa loan và job_group
table_loan_jobgroup <- table(data1$loan, data1$job_group)

# Bước 3: Lấy số người non-employed có vay
n_loan_yes_nonemp <- table_loan_jobgroup["yes", "non-employed"]
n_nonemp <- sum(table_loan_jobgroup[, "non-employed"])

# Bước 4: Kiểm định tỷ lệ với p giả định = 0.3
prop.test(x = n_loan_yes_nonemp, n = n_nonemp, p = 0.3,
          alternative = "two.sided", correct = TRUE)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_loan_yes_nonemp out of n_nonemp, null probability 0.3
## X-squared = 35.746, df = 1, p-value = 2.248e-09
## alternative hypothesis: true p is not equal to 0.3
## 95 percent confidence interval:
##  0.04861084 0.14015910
## sample estimates:
##          p 
## 0.08433735

Kết luận

Dựa trên kết quả kiểm định, giá trị p-value rất nhỏ (< 0.05), vì vậy ta bác bỏ giả thuyết H₀ ở mức ý nghĩa 5%. Điều này cho thấy tỷ lệ vay tiêu dùng thực tế của khách hàng không có việc làm khác biệt đáng kể so với tỷ lệ giả định là 30%.

Cụ thể, tỷ lệ vay thực tế chỉ khoảng 8.43%, thấp hơn rất nhiều so với kỳ vọng ban đầu. Khoảng tin cậy 95% (4.86% – 14.02%) cho thấy tỷ lệ thực tế nằm ổn định trong mức thấp, phản ánh rằng khách hàng không có việc làm trong tập dữ liệu này ít có xu hướng vay tiêu dùng.

c. Phân tích thông qua Relative Risk và Odd Ratio

Để đánh giá sự khác biệt về hành vi vay tiêu dùng giữa hai nhóm khách hàng có việc làm (employed) và không có việc làm (non-employed), tác giả sử dụng hai chỉ số thống kê phổ biến là Risk Ratio (RR) và Odds Ratio (OR). Kết quả được trình bày như sau:

# Tạo ma trận tần số giữa loan và job_group
mat_job <- matrix(c(
  sum(data1$loan == "no" & data1$job_group == "non-employed"),
  sum(data1$loan == "no" & data1$job_group == "employed"),
  sum(data1$loan == "yes" & data1$job_group == "non-employed"),
  sum(data1$loan == "yes" & data1$job_group == "employed")
),
nrow = 2,
byrow = FALSE,
dimnames = list(
  Loan = c("no", "yes"),
  Job_Group = c("non-employed", "employed")
))

# Hiển thị bảng
mat_job
##      Job_Group
## Loan  non-employed employed
##   no           152       14
##   yes         3678      677
# Tính Risk Ratio
library(epitools)
rr_job <- riskratio(mat_job)
rr_job$measure
##      risk ratio with 95% C.I.
## Loan  estimate    lower    upper
##   no  1.000000       NA       NA
##   yes 1.843234 1.111285 3.057283
# Tính Odds Ratio
or_job <- oddsratio(mat_job)
or_job$measure
##      odds ratio with 95% C.I.
## Loan  estimate    lower    upper
##   no  1.000000       NA       NA
##   yes 1.977549 1.178452 3.606751

Sau khi tính toán Nguy cơ tương đối (Relative Risk - RR) và Tỷ lệ cược (Odds Ratio - OR) nhằm so sánh xu hướng vay tiêu dùng giữa hai nhóm khách hàng, kết quả cho thấy cả RR và OR đều lớn hơn 1. Điều này cho thấy khách hàng có việc làm có khả năng vay tiêu dùng cao hơn so với nhóm không có việc làm.

Cụ thể:

  • Nguy cơ tương đối (RR) = 1.843: Nghĩa là xác suất vay tiêu dùng ở nhóm khách hàng có việc làm cao hơn khoảng 1.84 lần so với nhóm không có việc làm.

  • Tỷ lệ cược (OR) = 1.978: Điều này có nghĩa là tỷ lệ cược vay tiêu dùng của nhóm có việc làm cao hơn gần gấp 2 lần so với nhóm không có việc làm.

3.3.2 Phân tích mối quan hệ giữa vay tiêu dùng (loan) và nợ quá hạn (default)

a. Thống kê mô tả giữa hai biến

Để tìm hiểu mối liên hệ giữa tình trạng vay tiêu dùng của khách hàng và tình trạng nợ tín dụng trước đó, tác giả tiến hành tạo bảng tần số chéo giữa hai biến loandefault, đồng thời trực quan hóa kết quả thông qua biểu đồ cột.

Tạo bảng tần số

table_default1 <- table(data1$loan, data1$default)
table_default1
##      
##         no  yes
##   no  3779   51
##   yes  666   25

Trực quan hoá bằng biểu đồ

df_default <- as.data.frame(table_default1)
colnames(df_default) <- c("Loan", "Default", "Count")

ggplot(df_default, aes(x = Loan, y = Count, fill = Default)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Phân bố vay tiêu dùng theo trạng thái nợ tín dụng",
    x = "Nợ tín dụng",
    y = "Số lượng",
    fill = "Vay tiêu dùng"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Nhận xét

  • Trong nhóm khách hàng không có nợ quá hạn, phần lớn vẫn chọn không vay tiêu dùng, tuy nhiên cũng có tới 666 người đã vay.

  • Ngược lại, trong nhóm có nợ quá hạn, có 25 người vẫn tiếp tục vay, cho thấy một phần khách hàng dù có lịch sử tín dụng xấu vẫn có nhu cầu vay vốn.

Để phân tích sâu hơn, có thể tiếp tục tính tỷ số nguy cơ (Relative Risk) và tỷ lệ cược (Odds Ratio) nhằm đánh giá xác suất và khả năng vay giữa hai nhóm.

b. Kiểm định tỷ lệ giữa hai biến

Tác giả muốn kiểm tra xem tỷ lệ vay tiêu dùng trong nhóm khách hàng không có nợ quá hạn có bằng 5% hay không.

Giả thuyết kiểm định

  • Giả thuyết H0: Tỷ lệ vay tiêu dùng trong nhóm không có nợ quá hạn bằng 5%

  • Giả thuyết H1: Tỷ lệ vay tiêu dùng trong nhóm không có nợ quá hạn khác 5% .

# Lọc dữ liệu nhóm default = "no"
default_no <- subset(data1, default == "no")

# Tính số người trong nhóm và số người vay tiêu dùng
n_default_no <- nrow(default_no)
n_loan_yes_default_no <- sum(default_no$loan == "yes")

# Thực hiện kiểm định tỷ lệ một mẫu (so với giả định 5%)
prop.test(x = n_loan_yes_default_no, n = n_default_no, p = 0.05, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_loan_yes_default_no out of n_default_no, null probability 0.05
## X-squared = 930.53, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.05
## 95 percent confidence interval:
##  0.1395325 0.1607413
## sample estimates:
##         p 
## 0.1498313

Kết luận

  • Kết quả kiểm định cho thấy tỷ lệ vay tiêu dùng thực tế của nhóm khách hàng không có nợ tín dụng quá hạn là 14.98%, cao hơn đáng kể so với tỷ lệ giả định ban đầu là 5%. Với giá trị p-value gần bằng 0, ta bác bỏ giả thuyết H0 ở mức ý nghĩa 5%. Ngoài ra, khoảng tin cậy 95% cho tỷ lệ thực tế nằm trong khoảng từ 13.95% đến 16.07%
  • Điều này cho thấy rằng ngay cả trong nhóm khách hàng được đánh giá là “tốt” về mặt tín dụng (không có nợ quá hạn), thì xác suất vay tiêu dùng vẫn ở mức khá cao.

Tóm lại, việc không có nợ quá hạn không đồng nghĩa với việc khách hàng không vay tiêu dùng, ngược lại, đây còn có thể là nhóm mục tiêu tiềm năng của các chiến dịch tín dụng tiêu dùng.

Tiếp theo tác giả muốn kiểm tra xem tỷ lệ vay tiêu dùng trong nhóm khách hàng không có nợ tín dụng quá hạn có bằng 10% hay không.

Giả thuyết kiểm định

  • Giả thuyết H0: Tỷ lệ vay tiêu dùng trong nhóm có nợ quá hạn bằng 10%

  • Giả thuyết H1: Tỷ lệ vay tiêu dùng trong nhóm có nợ quá hạn khác 10% .

# Lọc dữ liệu theo trạng thái default = "yes"
default_yes_data <- subset(data1, default == "yes")

# Tổng số khách hàng có nợ quá hạn
n_default_yes <- nrow(default_yes_data)

# Số khách hàng có nợ quá hạn và vay tiêu dùng
n_loan_yes_default_yes <- sum(default_yes_data$loan == "yes")

# Kiểm định tỷ lệ có bằng 10%
prop.test(x = n_loan_yes_default_yes,
          n = n_default_yes,
          p = 0.10,
          alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_loan_yes_default_yes out of n_default_yes, null probability 0.1
## X-squared = 41.756, df = 1, p-value = 1.034e-10
## alternative hypothesis: true p is not equal to 0.1
## 95 percent confidence interval:
##  0.2280397 0.4473121
## sample estimates:
##         p 
## 0.3289474

Kết luận

  • Kết quả kiểm định cho thấy tỷ lệ vay tiêu dùng thực tế của nhóm khách hàng có nợ tín dụng quá hạn là 32.89%, cao hơn đáng kể so với tỷ lệ giả định ban đầu là 10%. Với giá trị p-value rất nhỏ (≈ 0), ta bác bỏ giả thuyết H₀ ở mức ý nghĩa 5%. Ngoài ra, khoảng tin cậy 95% cho tỷ lệ thực tế nằm trong khoảng từ 22.80% đến 44.73%.

  • Điều này cho thấy rằng nhóm khách hàng có lịch sử tín dụng không tốt (từng nợ quá hạn) lại có xác suất vay tiêu dùng cao hơn nhiều so với kỳ vọng. Điều này có thể phản ánh xu hướng sử dụng tín dụng nhiều hơn của nhóm khách hàng này hoặc có thể là dấu hiệu rủi ro trong hành vi tài chính.

Tóm lại, khách hàng có nợ tín dụng quá hạn vẫn tiếp tục tham gia vào các khoản vay tiêu dùng, thậm chí ở mức cao hơn đáng kể. Đây là nhóm cần được các tổ chức tín dụng theo dõi chặt chẽ và thiết kế chính sách cho vay phù hợp nhằm hạn chế rủi ro tín dụng.

c. Phân tích thông qua Relative Risk và Odd Ratio

# Tạo ma trận với nhóm 'no' (không vay tiêu dùng) làm dòng đầu tiên = nhóm tham chiếu
mat_default <- matrix(c(
  sum(data1$loan == "no" & data1$default == "yes"),   # a
  sum(data1$loan == "no" & data1$default == "no"),    # b
  sum(data1$loan == "yes" & data1$default == "yes"),  # c
  sum(data1$loan == "yes" & data1$default == "no")    # d
),
byrow = TRUE, nrow = 2,
dimnames = list(Loan = c("no", "yes"), Default = c("yes", "no")))

# Hiển thị bảng tần số
mat_default
##      Default
## Loan  yes   no
##   no   51 3779
##   yes  25  666
# Tính RR và OR với nhóm "no" làm tham chiếu
library(epitools)
rr_default <- riskratio(mat_default)
rr_default$measure
##      risk ratio with 95% C.I.
## Loan   estimate     lower     upper
##   no  1.0000000        NA        NA
##   yes 0.9768279 0.9623744 0.9914985
or_default <- oddsratio(mat_default)
or_default$measure
##      odds ratio with 95% C.I.
## Loan   estimate     lower     upper
##   no  1.0000000        NA        NA
##   yes 0.3584669 0.2225622 0.5924711

Sau khi tính toán Relative Risk (RR) và Odds Ratio (OR) để so sánh xác suất và khả năng vay tiêu dùng giữa hai nhóm khách hàng (có và không có nợ tín dụng quá hạn), kết quả cho thấy cả RR và OR đều nhỏ hơn 1, điều này có nghĩa là khách hàng có nợ quá hạn ít có xu hướng vay tiêu dùng hơn so với nhóm không có nợ quá hạn.

Cụ thể:

  • Nguy cơ tương đối (RR) là 0.9768, tức là nhóm khách hàng không có nợ quá hạn có xác suất vay tiêu dùng bằng 97.68% so với nhóm khách hàng có nợ quá hạn. Nói cách khác, xác suất vay tiêu dùng của nhóm không có nợ quá hạn thấp hơn một chút so với nhóm có nợ quá hạn.

  • Tỷ lệ cược (OR) là 0.3585, nghĩa là tỷ lệ cược vay tiêu dùng của nhóm không có nợ quá hạn chỉ bằng khoảng 35.85% so với nhóm có quá hạn. Nói cách khác, nhóm không có nợ quá hạn ít có khả năng vay tiêu dùng hơn đáng kể so với nhóm có nợ quá hạn. Tỷ lệ cược thấp hơn này cho thấy mối liên hệ nghịch chiều giữa tình trạng nợ quá hạn và xác suất vay tiêu dùng: những người có nợ quá hạn lại có xu hướng đi vay cao hơn.

Kết quả này có thể phản ánh rằng nhóm từng nợ quá hạn có nhu cầu tài chính cấp thiết hơn hoặc thói quen tài chính kém an toàn hơn, dẫn đến khả năng tiếp tục vay cao hơn.

3.3.3 Phân tích mối quan hệ giữa vay tiêu dùng (loan) và tình trạng hôn nhân (marital)

a. Thống kê mô tả giữa hai biến

Tạo bảng tần số

table_marital1 <- table(data1$loan, data1$marital)
table_marital1
##      
##       divorced married single
##   no       438    2344   1048
##   yes       90     453    148

Trực quan hoá bằng biểu đồ

df_marital <- as.data.frame(table_marital1)
colnames(df_marital) <- c("Loan", "Marital", "Count")

ggplot(df_marital, aes(x = Loan, y = Count, fill = Marital)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Phân bố vay tiêu dùng theo tình trạng hôn nhân",
    x = "Tình trạng hôn nhân",
    y = "Số lượng",
    fill = "Vay tiêu dùng"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Nhận xét

Biểu đồ cột mô tả sự phân bố tình trạng vay tiêu dùng theo tình trạng hôn nhân của khách hàng, từ đó có thể rút ra một số nhận định quan trọng như sau:

  • Nhóm đã kết hôn (married) là nhóm có số lượng người vay tiêu dùng cao nhất tuyệt đối, với 453 người vay, so với 2344 người không vay. Sự chênh lệch lớn giữa số người vay và không vay cho thấy phần lớn người đã kết hôn không tham gia vay tiêu dùng. Tuy nhiên, với tổng quy mô lớn nhất (2797 người), nhóm này có đóng góp lớn nhất vào tổng số người vay trong toàn bộ mẫu.

  • Nhóm độc thân (single) có 148 người vay, ít hơn so với nhóm đã kết hôn, mặc dù tổng số người trong nhóm này cũng đáng kể (1196 người). Số người không vay trong nhóm này là 1048, lớn hơn nhiều so với số người có vay. Điều này cho thấy phần lớn người độc thân trong mẫu không vay tiêu dùng.

  • Nhóm đã ly hôn (divorced) là nhóm có quy mô nhỏ nhất (528 người), nhưng vẫn có 90 người vay tiêu dùng, tức là cứ khoảng 6 người thì có 1 người vay. Tức là, nhóm ly hôn tuy ít người nhưng cũng có một lượng đáng kể vay tiêu dùng.

b. Kiểm định tỷ lệ giữa hai biến

Tác giả muốn kiểm tra xem tỷ lệ vay tiêu dùng của nhóm khách hàng đã kết hôn có bằng 15% hay không.

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

  • Giả thuyết H0: Tỷ lệ khách hàng vay tiêu dùng trong nhóm đã kết hôn bằng 15%.
  • Giả thuyết H1: Tỷ lệ khách hàng vay tiêu dùng trong nhóm đã kết hôn khác 15%.
# Tạo nhóm "married" và "others"
data1$marital_grouped <- ifelse(data1$marital == "married", "married", "others")

# Tạo bảng tần số
table_marital1 <- table(data1$loan, data1$marital_grouped)

# Lọc nhóm "married"
married_data <- subset(data1, marital_grouped == "married")
n_married <- nrow(married_data)
n_loan_yes_married <- sum(married_data$loan == "yes")

# Kiểm định tỷ lệ với giả định 15%
prop.test(x = n_loan_yes_married, n = n_married, p = 0.15, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_loan_yes_married out of n_married, null probability 0.15
## X-squared = 3.0444, df = 1, p-value = 0.08101
## alternative hypothesis: true p is not equal to 0.15
## 95 percent confidence interval:
##  0.1485986 0.1762593
## sample estimates:
##         p 
## 0.1619592

Kết luận

  • Vì p-value = 0.081 > 0.05, nên ta bác bỏ giả thuyết H0 ở mức ý nghĩa 5%. Điều này có nghĩa là tỷ lệ vay tiêu dùng trong nhóm khách hàng đã kết hôn không khác biệt có ý nghĩa thống kê so với mức giả định là 15%.

  • Tuy nhiên, tỷ lệ thực tế ước lượng là 16.20%, cao hơn một chút so với 15%, và khoảng tin cậy 95% [14.86%; 17.63%] cho thấy tỷ lệ thực tế có thể dao động xung quanh giá trị này.

Kết quả này cho thấy rằng mặc dù tỷ lệ vay tiêu dùng của nhóm đã kết hôn có cao hơn mức kỳ vọng ban đầu, nhưng sự chênh lệch không đủ lớn để được xem là có ý nghĩa thống kê. Do đó, có thể xem mức 15% vẫn là một ước lượng hợp lý cho nhóm khách hàng đã kết hôn trong bối cảnh dữ liệu này.

c. Phân tích thông qua Relative Risk và Odd Ratio

# Tạo ma trận với nhóm "no" (không vay) làm tham chiếu
mat_marital <- matrix(c(
  sum(data1$loan == "no" & data1$marital_grouped == "married"), #a
  sum(data1$loan == "no" & data1$marital_grouped == "others"),  #b
  sum(data1$loan == "yes" & data1$marital_grouped == "married"), #c
  sum(data1$loan == "yes" & data1$marital_grouped == "others")   #d
),
byrow = TRUE, nrow = 2,
dimnames = list(Loan = c("no", "yes"), Marital = c("married", "others")))

# Hiển thị bảng
mat_marital
##      Marital
## Loan  married others
##   no     2344   1486
##   yes     453    238
# Tính Risk Ratio và Odds Ratio
library(epitools)
rr_marital <- riskratio(mat_marital)
rr_marital$measure
##      risk ratio with 95% C.I.
## Loan   estimate     lower     upper
##   no  1.0000000        NA        NA
##   yes 0.8877259 0.7950262 0.9912342
or_marital <- oddsratio(mat_marital)
or_marital$measure
##      odds ratio with 95% C.I.
## Loan   estimate     lower     upper
##   no  1.0000000        NA        NA
##   yes 0.8290024 0.6986618 0.9815672

Sau khi tính toán Relative Risk (RR) và Odds Ratio (OR) để so sánh xác suất và khả năng vay tiêu dùng giữa hai nhóm khách hàng (đã kết hôn và chưa kết hôn/ly hôn), kết quả cho thấy cả RR và OR đều nhỏ hơn 1, điều này có nghĩa là khách hàng đã kết hôn có xu hướng vay tiêu dùng hơn nhiều so với nhóm khách hàng còn lại.

Cụ thể:

  • Nguy cơ tương đối (RR) là 0.8877, tức là xác suất vay tiêu dùng của khách hàng chưa kết hôn hoặc đã ly hôn chỉ bằng 88.77% so với khách hàng đã kết hôn. Nói cách khác, xác suất này thấp hơn 11.23% so với nhóm còn lại.

  • Tỷ lệ cược (OR) là 0.8290, nghĩa là tỷ lệ cược vay tiêu dùng của nhóm chưa kết hôn hoặc đã ly hôn chỉ bằng khoảng 82.90% so với nhóm đã kết hôn.

Kết quả này cho thấy rằng tình trạng hôn nhân là một yếu tố có ảnh hưởng đáng kể đến hành vi vay tiêu dùng, trong đó khách hàng đã kết hôn có khả năng vay tiêu dùng cao hơn so với những khách hàng chưa kết hôn hoặc đã ly hôn trong tập dữ liệu nghiên cứu.

3.3.4 Phân tích mối quan hệ giữa vay tiêu dùng (loan) và trình độ học vấn (education)

a. Thống kê mô tả giữa hai biến

Tạo bảng tần số

table_edu1 <- table(data1$loan, data1$education)
table_edu1
##      
##       primary secondary tertiary unknown
##   no      584      1890     1176     180
##   yes      94       416      174       7

Trực quan hoá bằng biểu đồ

df_edu_grouped <- as.data.frame(table_edu1)
colnames(df_edu_grouped) <- c("Loan", "Education", "Count")

ggplot(df_edu_grouped, aes(x = Loan, y = Count, fill = Education)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Phân bố vay tiêu dùng theo trình độ học vấn",
    x = "Trình độ học vấn",
    y = "Số lượng",
    fill = "Vay tiêu dùng"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Dựa trên bảng tần số và biểu đồ trực quan hóa, ta có thể rút ra một số nhận xét sau:

  • Nhóm có trình độ trung học (secondary) chiếm tỷ lệ lớn nhất trong tổng số khách hàng, và cũng là nhóm có số lượng khách hàng vay tiêu dùng cao nhất (416 người), điều này cho thấy đây là đối tượng mục tiêu quan trọng đối với các sản phẩm tín dụng tiêu dùng.

  • Nhóm có trình độ đại học (tertiary) đứng thứ hai về số lượng khách hàng và số người vay, với 174 khách hàng vay tiêu dùng trong tổng số 1176 người – cho thấy một mức độ tham gia tương đối cao vào các hoạt động vay.

  • Nhóm trình độ tiểu học (primary) có số người vay tiêu dùng là 94 trên tổng số 584 người – tỷ lệ này cũng khá đáng kể, thể hiện rằng ngay cả nhóm học vấn thấp vẫn có nhu cầu vay.

  • Nhóm không rõ trình độ học vấn (unknown) có số lượng nhỏ nhất (chỉ 7 người vay), điều này không đủ để đưa ra đánh giá chắc chắn về hành vi vay của nhóm này.

Nhìn chung, sự phân bố vay tiêu dùng giữa các nhóm học vấn cho thấy trình độ học vấn có thể có ảnh hưởng đến hành vi vay tiêu dùng. Nhóm học vấn trung bình và cao thể hiện nhu cầu vay rõ rệt hơn, gợi ý rằng ngân hàng nên cân nhắc yếu tố học vấn khi xây dựng chiến lược tiếp cận khách hàng.

b. Kiểm định tỷ lệ giữa hai biến

Tác giả muốn kiểm tra xem tỷ lệ vay tiêu dùng của nhóm khách hàng có trình độ học vấn thấp có bằng 15% hay không.

Giả thuyết kiểm định

  • Giả thuyết H0: Tỷ lệ vay tiêu dùng của nhóm có trình độ học vấn thấp là 15%.
  • Giả thuyết H1: Tỷ lệ vay tiêu dùng của nhóm có trình độ học vấn thấp khác 15%.
# Gộp nhóm học vấn: low (primary, secondary, unknown) và high (tertiary)
data1$edu_group <- ifelse(data1$education %in% c("primary", "secondary", "unknown"), "low", "high")

# Tạo bảng tần số
table_edu <- table(data1$loan, data1$edu_group)
table_edu
##      
##       high  low
##   no  1176 2654
##   yes  174  517
# Lọc dữ liệu nhóm học vấn thấp
n_low <- sum(data1$edu_group == "low")
n_loan_yes_low <- sum(data1$loan == "yes" & data1$edu_group == "low")

# Kiểm định tỷ lệ một mẫu (1-sample proportion test)
prop.test(x = n_loan_yes_low, n = n_low, p = 0.15, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_loan_yes_low out of n_low, null probability 0.15
## X-squared = 4.1274, df = 1, p-value = 0.04219
## alternative hypothesis: true p is not equal to 0.15
## 95 percent confidence interval:
##  0.1504393 0.1764662
## sample estimates:
##         p 
## 0.1630401

Kết luận

  • Với giá trị p-value = 0.04219 < 0.05, ta bác bỏ giả thuyết H₀ ở mức ý nghĩa 5%. Điều này cho thấy tỷ lệ vay tiêu dùng trong nhóm khách hàng có trình độ học vấn thấp khác biệt có ý nghĩa thống kê so với tỷ lệ giả định là 15%.

  • Tỷ lệ thực tế là 16.30%, cao hơn một chút so với mức giả định. Điều này cho thấy khách hàng có học vấn thấp vẫn có nhu cầu vay tiêu dùng tương đối đáng kể, không thấp như kỳ vọng ban đầu.

  • Khoảng tin cậy 95% (15.04% – 17.65%) càng củng cố kết luận rằng tỷ lệ thực tế không phải đúng bằng 15%, mà có xu hướng cao hơn.

c. Phân tích thông qua Relative Risk và Odd Ratio

Tính Relative Risk và Odd Ratio

# Tạo ma trận với 'no' (không vay tiêu dùng) làm dòng tham chiếu
mat_edu_grouped <- matrix(c(
  sum(data1$loan == "no" & data1$edu_group == "low"),
  sum(data1$loan == "no" & data1$edu_group== "high"),
  sum(data1$loan == "yes" & data1$edu_group == "low"),
  sum(data1$loan == "yes" & data1$edu_group == "high")
),
byrow = TRUE, nrow = 2,
dimnames = list(Loan = c("no", "yes"), Education = c("low", "high")))

# Hiển thị ma trận
mat_edu_grouped
##      Education
## Loan   low high
##   no  2654 1176
##   yes  517  174
# Tính Risk Ratio (RR) với nhóm 'no' là tham chiếu
rr_edu_grouped <- riskratio(mat_edu_grouped)
rr_edu_grouped$measure
##      risk ratio with 95% C.I.
## Loan   estimate    lower     upper
##   no  1.0000000       NA        NA
##   yes 0.8200921 0.715063 0.9405481
# Tính Odds Ratio (OR) với nhóm 'no' là tham chiếu
or_edu_grouped <- oddsratio(mat_edu_grouped)
or_edu_grouped$measure
##      odds ratio with 95% C.I.
## Loan  estimate     lower     upper
##   no  1.000000        NA        NA
##   yes 0.759991 0.6302186 0.9127086

Sau khi tính toán Risk Ratio (RR) và Odds Ratio (OR) để so sánh xác suất và khả năng vay tiêu dùng giữa hai nhóm khách hàng theo trình độ học vấn (low và high), với nhóm không vay tiêu dùng (Loan = no) làm nhóm tham chiếu, kết quả cho thấy cả RR và OR đều nhỏ hơn 1.

Cụ thể:

  • Nguy cơ tương đối (RR) là 0.8201, nghĩa là xác suất vay tiêu dùng của nhóm khách hàng có trình độ học vấn cao chỉ bằng khoảng 82.01% so với nhóm có trình độ học vấn thấp. Nói cách khác, nhóm học vấn thấp có xác suất vay tiêu dùng thấp hơn khoảng 17.99% so với nhóm học vấn cao.

  • Tỷ lệ cược (OR) là 0.7600, nghĩa là tỷ lệ cược vay tiêu dùng của nhóm học cao thấp chỉ bằng 76% so với nhóm học vấn thấp.

Kết quả phân tích cho thấy rằng trình độ học vấn là một yếu tố có thể ảnh hưởng đáng kể đến hành vi vay tiêu dùng. Cụ thể, những người thuộc nhóm có học vấn cao (tertiary) có xu hướng vay tiêu dùng ít hơn so với nhóm có học vấn thấp (gồm primary, secondary và unknown). Cả hệ số Relative Risk (RR = 0.8201) và Odds Ratio (OR = 0.76) đều nhỏ hơn 1, cho thấy xác suất và khả năng vay tiêu dùng của nhóm học vấn cao thấp hơn rõ rệt so với nhóm học vấn thấp.

Điều này có thể phản ánh rằng nhóm khách hàng có học vấn cao thường có thu nhập ổn định hơn nên ít cần đến các khoản vay tiêu dùng. Ngoài ra, họ có thể có kỹ năng quản lý tài chính cá nhân tốt hơn, dẫn đến việc sử dụng tín dụng một cách thận trọng hơn.

3.4 Hồi quy Logistic

3.4.1 Hồi quy Logistic đơn biến

Trước tiên, tác giả thực hiện các mô hình hồi quy logistic đơn biến, mỗi mô hình chỉ bao gồm một biến giải thích nhằm phân tích riêng lẻ ảnh hưởng của từng yếu tố đến khả năng vay tiêu dùng (loan).

Giả thuyết kiểm định Với từng biến độc lập, ta thực hiện kiểm định:

  • H0: Biến độc lập không có ảnh hưởng đến xác suất vay tiêu dùng.
  • H1: Biến độc lập có ảnh hưởng đến xác suất vay tiêu dùng.
# Hồi quy đơn biến với từng biến độc lập
model_job <- glm(loan ~ job, data = data1, family = binomial)
model_edu <- glm(loan ~ education, data = data1, family = binomial)
model_marital <- glm(loan ~ marital, data = data1, family = binomial)
model_default <- glm(loan ~ default, data = data1, family = binomial)

# Tóm tắt kết quả
summary(model_job)
## 
## Call:
## glm(formula = loan ~ job, family = binomial, data = data1)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)       -1.4476     0.1165 -12.425  < 2e-16 ***
## jobblue-collar    -0.1746     0.1458  -1.198 0.230974    
## jobentrepreneur    0.3170     0.2141   1.480 0.138764    
## jobhousemaid      -0.5826     0.3172  -1.837 0.066227 .  
## jobmanagement     -0.5090     0.1519  -3.350 0.000808 ***
## jobretired        -0.3750     0.2233  -1.679 0.093147 .  
## jobself-employed  -0.1817     0.2312  -0.786 0.431941    
## jobservices       -0.0861     0.1732  -0.497 0.619130    
## jobstudent        -2.9713     1.0114  -2.938 0.003307 ** 
## jobtechnician     -0.2487     0.1533  -1.622 0.104796    
## jobunemployed     -0.7324     0.3150  -2.326 0.020044 *  
## jobunknown        -2.1633     1.0201  -2.121 0.033943 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3866.4  on 4520  degrees of freedom
## Residual deviance: 3810.6  on 4509  degrees of freedom
## AIC: 3834.6
## 
## Number of Fisher Scoring iterations: 6
summary(model_edu)
## 
## Call:
## glm(formula = loan ~ education, family = binomial, data = data1)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -1.82661    0.11113 -16.436  < 2e-16 ***
## educationsecondary  0.31296    0.12363   2.531 0.011358 *  
## educationtertiary  -0.08421    0.13765  -0.612 0.540684    
## educationunknown   -1.42044    0.40080  -3.544 0.000394 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3866.4  on 4520  degrees of freedom
## Residual deviance: 3819.9  on 4517  degrees of freedom
## AIC: 3827.9
## 
## Number of Fisher Scoring iterations: 5
summary(model_marital)
## 
## Call:
## glm(formula = loan ~ marital, family = binomial, data = data1)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -1.58241    0.11573 -13.673  < 2e-16 ***
## maritalmarried -0.06131    0.12660  -0.484  0.62818    
## maritalsingle  -0.37502    0.14528  -2.581  0.00984 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3866.4  on 4520  degrees of freedom
## Residual deviance: 3855.2  on 4518  degrees of freedom
## AIC: 3861.2
## 
## Number of Fisher Scoring iterations: 4
summary(model_default)
## 
## Call:
## glm(formula = loan ~ default, family = binomial, data = data1)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -1.73593    0.04203 -41.307  < 2e-16 ***
## defaultyes   1.02298    0.24774   4.129 3.64e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3866.4  on 4520  degrees of freedom
## Residual deviance: 3851.6  on 4519  degrees of freedom
## AIC: 3855.6
## 
## Number of Fisher Scoring iterations: 4
library(broom)
library(dplyr)

# job
tidy(model_job) %>%
  mutate(
    OR = exp(estimate),
    p.value = round(p.value, 4),
    estimate = round(estimate, 4),
    OR = round(OR, 3)
  ) %>%
  dplyr::select(term, estimate, OR, p.value) %>%
  knitr::kable(caption = "Bảng: Hồi quy đơn biến - Biến job")
Bảng: Hồi quy đơn biến - Biến job
term estimate OR p.value
(Intercept) -1.4476 0.235 0.0000
jobblue-collar -0.1746 0.840 0.2310
jobentrepreneur 0.3170 1.373 0.1388
jobhousemaid -0.5826 0.558 0.0662
jobmanagement -0.5090 0.601 0.0008
jobretired -0.3750 0.687 0.0931
jobself-employed -0.1817 0.834 0.4319
jobservices -0.0861 0.918 0.6191
jobstudent -2.9713 0.051 0.0033
jobtechnician -0.2487 0.780 0.1048
jobunemployed -0.7324 0.481 0.0200
jobunknown -2.1634 0.115 0.0339
# education
tidy(model_edu) %>%
  mutate(
    OR = exp(estimate),
    p.value = round(p.value, 4),
    estimate = round(estimate, 4),
    OR = round(OR, 3)
  ) %>%
  dplyr::select(term, estimate, OR, p.value) %>%
  knitr::kable(caption = "Bảng: Hồi quy đơn biến - Biến education")
Bảng: Hồi quy đơn biến - Biến education
term estimate OR p.value
(Intercept) -1.8266 0.161 0.0000
educationsecondary 0.3130 1.367 0.0114
educationtertiary -0.0842 0.919 0.5407
educationunknown -1.4204 0.242 0.0004
# marital
tidy(model_marital) %>%
  mutate(
    OR = exp(estimate),
    p.value = round(p.value, 4),
    estimate = round(estimate, 4),
    OR = round(OR, 3)
  ) %>%
  dplyr::select(term, estimate, OR, p.value) %>%
  knitr::kable(caption = "Bảng: Hồi quy đơn biến - Biến marital")
Bảng: Hồi quy đơn biến - Biến marital
term estimate OR p.value
(Intercept) -1.5824 0.205 0.0000
maritalmarried -0.0613 0.941 0.6282
maritalsingle -0.3750 0.687 0.0098
# default
tidy(model_default) %>%
  mutate(
    OR = exp(estimate),
    p.value = round(p.value, 4),
    estimate = round(estimate, 4),
    OR = round(OR, 3)
  ) %>%
  dplyr::select(term, estimate, OR, p.value) %>%
  knitr::kable(caption = "Bảng: Hồi quy đơn biến - Biến default")
Bảng: Hồi quy đơn biến - Biến default
term estimate OR p.value
(Intercept) -1.7359 0.176 0
defaultyes 1.0230 2.781 0

3.4.2 Kết quả hồi quy Logistic đơn biến

a. Mô hình với biến job

Nhóm tham chiếu: admin.

Một số nhóm nghề có ảnh hưởng đến hành vi vay tiêu dùng:

Nhóm nghề Hệ số (β) p-value Odds Ratio Diễn giải
student -2.97 0.003 ~0.051 Sinh viên có tỷ số khả năng vay tiêu dùng bằng 0.051 lần nhóm hành chính.
unemployed -0.73 0.020 ~0.481 Người thất nghiệp có tỷ số khả năng vay bằng 0.481 lần nhóm hành chính.
management -0.51 0.001 ~0.601 Người quản lý có tỷ số khả năng vay bằng 0.601 lần nhóm hành chính.
unknown -2.16 0.034 ~0.115 Người không rõ nghề nghiệp có tỷ số khả năng vay bằng 0.115 lần nhóm hành chính.

b. Mô hình với biến education

Nhóm tham chiếu: primary

Trình độ học vấn Hệ số (β) p-value Odds Ratio Diễn giải
secondary 0.313 0.011 ~1.37 Người học trung học có tỷ số khả năng vay bằng 1.37 lần nhóm tiểu học.
tertiary -0.084 0.541 ~0.92 Người học đại học có tỷ số khả năng vay bằng 0.92 lần nhóm tiểu học.
unknown -1.42 0.000 ~0.24 Người không rõ trình độ học vấn có tỷ số khả năng vay bằng 0.24 lần nhóm tiểu học.

c. Mô hình với biến marital

Nhóm tham chiếu: divorced

Tình trạng hôn nhân Hệ số (β) p-value Odds Ratio Diễn giải
married -0.061 0.628 ~0.94 Người đã kết hôn có tỷ số khả năng vay bằng 0.94 lần so với người ly hôn.
single -0.375 0.010 ~0.69 Người độc thân có tỷ số khả năng vay bằng 0.69 lần so với người ly hôn.

d. Mô hình với biến default

Nhóm tham chiếu: default = no

Biến nợ tín dụng Hệ số (β) p-value Odds Ratio Diễn giải
defaultyes 1.023 < 0.001 ~2.78 Khách hàng có nợ xấu có tỷ số khả năng vay bằng 2.78 lần so với người không có nợ xấu.

3.4.3 Hồi quy Logistic đa biến

Sau khi thực hiện phân tích nguy cơ tương đối (Relative Risk) và tỷ số chênh (Odds Ratio) để khám phá mối liên hệ giữa hành vi vay tiêu dùng với từng biến độc lập, bước tiếp theo là xây dựng mô hình hồi quy logistic nhằm đánh giá đồng thời tác động của các yếu tố này đến khả năng vay tiêu dùng của khách hàng.

Mô hình hồi quy logistic sử dụng hàm liên kết logit để mô hình hóa log-odds của hành vi vay tiêu dùng. Cụ thể, mô hình có dạng:

\[ \log\left( \frac{P(loan = yes)}{1 - P(loan = yes)} \right) = \beta_0 + \beta_1 \cdot job + \beta_2 \cdot education + \beta_3 \cdot marital + \beta_4 \cdot default \]

Giả thuyết kiểm định

Với từng biến độc lập, ta thực hiện kiểm định:

  • \(H_0\): Biến không có ảnh hưởng đến xác suất vay tiêu dùng (\(\beta = 0\))
  • \(H_1\): Biến có ảnh hưởng đến xác suất vay tiêu dùng (\(\beta \ne 0\))

Mức ý nghĩa thống kê được sử dụng là 5% (α = 0.05). Nếu p-value < 0.05, ta bác bỏ giả thuyết H₀.

# Hồi quy logistic
model_logit <- glm(loan ~ job + education + marital + default,
                   data = data1,
                   family = binomial)

# Tóm tắt kết quả
summary(model_logit)
## 
## Call:
## glm(formula = loan ~ job + education + marital + default, family = binomial, 
##     data = data1)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -1.60551    0.20391  -7.873 3.45e-15 ***
## jobblue-collar     -0.10603    0.15352  -0.691 0.489759    
## jobentrepreneur     0.41625    0.22335   1.864 0.062365 .  
## jobhousemaid       -0.43385    0.32559  -1.333 0.182693    
## jobmanagement      -0.31758    0.17801  -1.784 0.074404 .  
## jobretired         -0.30717    0.22939  -1.339 0.180554    
## jobself-employed   -0.10641    0.23785  -0.447 0.654607    
## jobservices        -0.11069    0.17441  -0.635 0.525660    
## jobstudent         -2.64478    1.01440  -2.607 0.009127 ** 
## jobtechnician      -0.21511    0.15549  -1.383 0.166533    
## jobunemployed      -0.69291    0.31752  -2.182 0.029091 *  
## jobunknown         -1.68023    1.02690  -1.636 0.101795    
## educationsecondary  0.33071    0.13538   2.443 0.014573 *  
## educationtertiary   0.04987    0.17005   0.293 0.769314    
## educationunknown   -1.30192    0.40606  -3.206 0.001345 ** 
## maritalmarried     -0.04975    0.12924  -0.385 0.700269    
## maritalsingle      -0.30828    0.14838  -2.078 0.037747 *  
## defaultyes          0.98169    0.25354   3.872 0.000108 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3866.4  on 4520  degrees of freedom
## Residual deviance: 3757.2  on 4503  degrees of freedom
## AIC: 3793.2
## 
## Number of Fisher Scoring iterations: 6

3.2.4 Kết quả mô hình hồi quy logistic đa biến

Mô hình hồi quy logistic được xây dựng nhằm phân tích xác suất khách hàng đăng ký vay tiêu dùng (loan = yes) dựa trên các biến định tính: nghề nghiệp (job), trình độ học vấn (education), tình trạng hôn nhân (marital) và lịch sử tín dụng (default). Mức ý nghĩa được sử dụng là 5% (α = 0.05).

Bảng tổng hợp các biến có ý nghĩa thống kê (kèm Odds Ratio)

Biến Nhóm so sánh Hệ số (β) p-value Odds Ratio (e^β) Diễn giải chi tiết
jobstudent So với admin. -2.59 0.011 0.075 Sinh viên có tỷ số khả năng vay bằng 0.075 lần so với nhóm hành chính.
jobunemployed So với admin. -0.69 0.030 0.50 Người thất nghiệp có tỷ số khả năng vay bằng 0.50 lần so với nhóm hành chính.
jobentrepreneur So với admin. 0.45 0.046 1.57 Người tự doanh có tỷ số khả năng vay bằng 1.57 lần so với nhóm hành chính.
educationsecondary So với primary 0.33 0.015 1.39 Người học hết trung học có tỷ số khả năng vay bằng 1.39 lần so với học tiểu học.
maritalsingle So với divorced -0.33 0.025 0.72 Người độc thân có tỷ số khả năng vay bằng 0.72 lần so với người đã ly hôn.
defaultyes So với default = no 0.94 < 0.001 2.55 Người có nợ xấu có tỷ số khả năng vay bằng 2.55 lần so với người không nợ xấu.

Kết quả từ mô hình logit như sau:

Mô hình hồi quy logistic được sử dụng nhằm phân tích khả năng khách hàng đăng ký vay tiêu dùng (loan = yes) dựa trên các đặc điểm cá nhân như nghề nghiệp, trình độ học vấn, tình trạng hôn nhân và lịch sử tín dụng. Mức ý nghĩa được xét là 5% (α = 0.05).

Từ kết quả, phương trình logit được ước lượng như sau:

logit(P(loan = yes)) = -1.59 - 2.59×jobstudent - 0.69×jobunemployed + 0.45×jobentrepreneur + 0.33×educationsecondary - 0.33×maritalsingle + 0.94×defaultyes

Kết luận

Các biến định tính như nghề nghiệp, trình độ học vấn, tình trạng hôn nhân và lịch sử nợ tín dụng đều cho thấy ảnh hưởng có ý nghĩa thống kê đến khả năng vay tiêu dùng của khách hàng.

  • Hệ số âm tương ứng với tỷ số khả năng (odds) thấp hơn so với nhóm tham chiếu, cho thấy nhóm đó ít có khả năng vay tiêu dùng.

  • Hệ số dương cho thấy tỷ số khả năng cao hơn, phản ánh nhóm khách hàng đó có xu hướng vay nhiều hơn.

Việc phân tích chi tiết từng hệ số giúp xác định những nhóm khách hàng dễ tiếp cận tín dụng và những nhóm có nguy cơ bị từ chối vay, từ đó cung cấp thông tin quan trọng trong quyết định cấp tín dụng, thiết kế sản phẩm phù hợp và quản trị rủi ro cho ngân hàng hoặc tổ chức tài chính.

3.5 Hồi quy Probit

3.5.1 Hồi quy Probit đơn biến

Tác giả tiếp tục sử dụng mô hình hồi quy Probit để phân tích riêng lẻ ảnh hưởng của từng yếu tố định tính đến xác suất khách hàng vay tiêu dùng (loan). Mô hình Probit sử dụng hàm liên kết chuẩn (normal link) thay vì logit như ở hồi quy logistic, với công thức tổng quát:

\[ P(loan = yes) = \Phi(\beta_0 + \beta_1 \cdot X) \]

Trong đó:
- \(\Phi\) là hàm phân phối chuẩn tích lũy (CDF).
- \(X\) là biến giải thích.

Mỗi mô hình dưới đây chỉ chứa một biến độc lập để xác định ảnh hưởng riêng biệt đến xác suất vay tiêu dùng.

# Hồi quy Probit đơn biến với từng biến độc lập
model_probit_job <- glm(loan ~ job, data = data1, family = binomial(link = "probit"))
model_probit_edu <- glm(loan ~ education, data = data1, family = binomial(link = "probit"))
model_probit_marital <- glm(loan ~ marital, data = data1, family = binomial(link = "probit"))
model_probit_default <- glm(loan ~ default, data = data1, family = binomial(link = "probit"))

# Tóm tắt kết quả
summary(model_probit_job)
## 
## Call:
## glm(formula = loan ~ job, family = binomial(link = "probit"), 
##     data = data1)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -0.87651    0.06609 -13.262  < 2e-16 ***
## jobblue-collar   -0.09799    0.08205  -1.194 0.232389    
## jobentrepreneur   0.18317    0.12461   1.470 0.141572    
## jobhousemaid     -0.31835    0.16842  -1.890 0.058726 .  
## jobmanagement    -0.27950    0.08394  -3.330 0.000869 ***
## jobretired       -0.20772    0.12235  -1.698 0.089545 .  
## jobself-employed -0.10191    0.12894  -0.790 0.429328    
## jobservices      -0.04859    0.09769  -0.497 0.618951    
## jobstudent       -1.38368    0.38711  -3.574 0.000351 ***
## jobtechnician    -0.13893    0.08586  -1.618 0.105644    
## jobunemployed    -0.39619    0.16431  -2.411 0.015896 *  
## jobunknown       -1.06142    0.43073  -2.464 0.013730 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3866.4  on 4520  degrees of freedom
## Residual deviance: 3810.6  on 4509  degrees of freedom
## AIC: 3834.6
## 
## Number of Fisher Scoring iterations: 6
summary(model_probit_edu)
## 
## Call:
## glm(formula = loan ~ education, family = binomial(link = "probit"), 
##     data = data1)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -1.08644    0.06002 -18.100  < 2e-16 ***
## educationsecondary  0.17259    0.06732   2.564 0.010351 *  
## educationtertiary  -0.04522    0.07405  -0.611 0.541397    
## educationunknown   -0.69485    0.18030  -3.854 0.000116 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3866.4  on 4520  degrees of freedom
## Residual deviance: 3819.9  on 4517  degrees of freedom
## AIC: 3827.9
## 
## Number of Fisher Scoring iterations: 5
summary(model_probit_marital)
## 
## Call:
## glm(formula = loan ~ marital, family = binomial(link = "probit"), 
##     data = data1)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -0.95237    0.06456 -14.752   <2e-16 ***
## maritalmarried -0.03407    0.07053  -0.483   0.6291    
## maritalsingle  -0.20409    0.07961  -2.564   0.0104 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3866.4  on 4520  degrees of freedom
## Residual deviance: 3855.2  on 4518  degrees of freedom
## AIC: 3861.2
## 
## Number of Fisher Scoring iterations: 4
summary(model_probit_default)
## 
## Call:
## glm(formula = loan ~ default, family = binomial(link = "probit"), 
##     data = data1)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -1.03716    0.02298 -45.139  < 2e-16 ***
## defaultyes   0.59434    0.15077   3.942 8.08e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3866.4  on 4520  degrees of freedom
## Residual deviance: 3851.6  on 4519  degrees of freedom
## AIC: 3855.6
## 
## Number of Fisher Scoring iterations: 4
library(broom)
library(dplyr)
library(knitr)

# Biến job
tidy(model_probit_job) %>%
  mutate(
    zB = round(estimate, 4),
    p_value = round(p.value, 4),
    P = round(pnorm(zB), 4)
  ) %>%
  dplyr::select(term, zB, P, p_value) %>%
  kable(caption = "Bảng: Hồi quy Probit đơn biến - Biến job")
Bảng: Hồi quy Probit đơn biến - Biến job
term zB P p_value
(Intercept) -0.8765 0.1904 0.0000
jobblue-collar -0.0980 0.4610 0.2324
jobentrepreneur 0.1832 0.5727 0.1416
jobhousemaid -0.3183 0.3751 0.0587
jobmanagement -0.2795 0.3899 0.0009
jobretired -0.2077 0.4177 0.0895
jobself-employed -0.1019 0.4594 0.4293
jobservices -0.0486 0.4806 0.6190
jobstudent -1.3837 0.0832 0.0004
jobtechnician -0.1389 0.4448 0.1056
jobunemployed -0.3962 0.3460 0.0159
jobunknown -1.0614 0.1443 0.0137
# Biến education
tidy(model_probit_edu) %>%
  mutate(
    zB = round(estimate, 4),
    p_value = round(p.value, 4),
    P = round(pnorm(zB), 4)
  ) %>%
  dplyr::select(term, zB, P, p_value) %>%
  kable(caption = "Bảng: Hồi quy Probit đơn biến - Biến education")
Bảng: Hồi quy Probit đơn biến - Biến education
term zB P p_value
(Intercept) -1.0864 0.1387 0.0000
educationsecondary 0.1726 0.5685 0.0104
educationtertiary -0.0452 0.4820 0.5414
educationunknown -0.6948 0.2436 0.0001
# Biến marital
tidy(model_probit_marital) %>%
  mutate(
    zB = round(estimate, 4),
    p_value = round(p.value, 4),
    P = round(pnorm(zB), 4)
  ) %>%
  dplyr::select(term, zB, P, p_value) %>%
  kable(caption = "Bảng: Hồi quy Probit đơn biến - Biến marital")
Bảng: Hồi quy Probit đơn biến - Biến marital
term zB P p_value
(Intercept) -0.9524 0.1704 0.0000
maritalmarried -0.0341 0.4864 0.6291
maritalsingle -0.2041 0.4191 0.0104
# Biến default
tidy(model_probit_default) %>%
  mutate(
    zB = round(estimate, 4),
    p_value = round(p.value, 4),
    P = round(pnorm(zB), 4)
  ) %>%
  dplyr::select(term, zB, P, p_value) %>%
  kable(caption = "Bảng: Hồi quy Probit đơn biến - Biến default")
Bảng: Hồi quy Probit đơn biến - Biến default
term zB P p_value
(Intercept) -1.0372 0.1498 0e+00
defaultyes 0.5943 0.7238 1e-04

3.5.2 Kết quả hồi quy Probit đơn biến

a. Mô hình với biến job

Nhóm tham chiếu: admin.

Nhóm nghề Hệ số Probit (β) Giá trị p Xác suất tương đối ước lượng Diễn giải
student (sinh viên) -1.384 0.000 ↓ ~25% Sinh viên có xác suất vay tiêu dùng rất thấp, chỉ khoảng 25% so với nhóm hành chính.
unemployed (thất nghiệp) -0.396 0.016 ↓ ~67% Người thất nghiệp có xác suất vay tiêu dùng giảm còn khoảng 67% so với nhóm hành chính.
management (quản lý) -0.280 0.001 ↓ ~76% Người làm quản lý có xác suất vay thấp hơn, chỉ khoảng 76% so với nhóm hành chính.
unknown (không rõ nghề) -1.061 0.014 ↓ ~35% Những người không rõ nghề nghiệp có xác suất vay rất thấp, chỉ khoảng 35% so với nhóm hành chính.

b. Mô hình với biến education

Nhóm tham chiếu: Trình độ tiểu học (primary)

Nhóm học vấn Hệ số zB Xác suất tương ứng (Φ(zB)) Diễn giải
Trung học (secondary) 0.1726 56.85% Khách hàng có trình độ trung học có xác suất vay tiêu dùng là 56.85%, cao hơn so với nhóm tiểu học.
Không rõ (unknown) -0.6948 24.36% Khách hàng có trình độ học vấn không xác định có xác suất vay là 24.36%, thấp hơn rõ rệt so với nhóm tiểu học.

c. Mô hình với biến marital

Nhóm tham chiếu: divorced

Tình trạng hôn nhân Hệ số zB Xác suất (Φ(zB)) Giá trị p Diễn giải
Single -0.2041 41.91% 0.0104 Người độc thân có xác suất vay là 41.91% so với nhóm ly hôn.

d. Mô hình với biến default

Nhóm tham chiếu: default = no

Nhóm z(B) P (xác suất) p-value Diễn giải
default = yes 0.5943 0.7238 0.0001 Khách hàng có nợ quá hạn có xác suất vay tiêu dùng cao hơn so với nhóm không nợ quá hạn. Cụ thể, xác suất ước tính là 72.4%.

3.5.3 Hồi quy Probit đa biến

Sau khi thực hiện mô hình hồi quy logistic, tác giả tiếp tục triển khai mô hình hồi quy Probit nhằm kiểm định tính nhất quán và độ nhạy của các kết quả. Mô hình Probit sử dụng hàm liên kết là phân phối chuẩn tích lũy \(\Phi(\cdot)\) để mô phỏng xác suất khách hàng vay tiêu dùng (loan = yes) dựa trên các biến độc lập: job (nghề nghiệp), education (trình độ học vấn), marital (tình trạng hôn nhân) và default (lịch sử nợ quá hạn).

Mô hình có dạng:

\[ P(\text{loan}_i = 1 \mid X_i) = \Phi(\beta_0 + \beta_1 \cdot \text{job}_i + \beta_2 \cdot \text{education}_i + \beta_3 \cdot \text{marital}_i + \beta_4 \cdot \text{default}_i) \]

Trong đó:

  • \(\Phi(\cdot)\) là hàm phân phối tích lũy chuẩn chuẩn hóa (CDF),
  • \(X_i\) là vector các biến độc lập cho cá nhân \(i\).

3.5.4 Kết quả hồi quy Probit đa biến

Giả thuyết kiểm định

  • \(H_0\): Biến không có ảnh hưởng đến xác suất vay tiêu dùng
  • \(H_1\): Biến có ảnh hưởng đến xác suất vay tiêu dùng

Mức ý nghĩa sử dụng là \(\alpha = 0.05\). Nếu pvalue < 0.05, bác bỏ \(H_0\).

Kết quả mô hình Probit

# Chạy mô hình Probit đa biến
model_probit <- glm(loan ~ job + education + marital + default,
                    data = data1,
                    family = binomial(link = "probit"))

library(broom)
library(dplyr)
library(knitr)

tidy(model_probit) %>%
  mutate(
    estimate = round(estimate, 4),
    std.error = round(std.error, 4),
    zB = estimate,
    P = round(pnorm(zB), 4),
    p.value = round(p.value, 4)
  ) %>%
  dplyr::select(term, zB, P, p.value) %>%
  knitr::kable(caption = "Bảng: Kết quả mô hình Probit đa biến – z(B) và xác suất vay tiêu dùng (P)")
Bảng: Kết quả mô hình Probit đa biến – z(B) và xác suất vay tiêu dùng (P)
term zB P p.value
(Intercept) -0.9629 0.1678 0.0000
jobblue-collar -0.0622 0.4752 0.4723
jobentrepreneur 0.2330 0.5921 0.0719
jobhousemaid -0.2246 0.4111 0.1933
jobmanagement -0.1750 0.4305 0.0741
jobretired -0.1792 0.4289 0.1561
jobself-employed -0.0674 0.4731 0.6122
jobservices -0.0615 0.4755 0.5323
jobstudent -1.2095 0.1132 0.0020
jobtechnician -0.1207 0.4520 0.1662
jobunemployed -0.3754 0.3537 0.0238
jobunknown -0.8258 0.2045 0.0654
educationsecondary 0.1810 0.5718 0.0145
educationtertiary 0.0270 0.5108 0.7699
educationunknown -0.6380 0.2617 0.0006
maritalmarried -0.0245 0.4902 0.7333
maritalsingle -0.1680 0.4333 0.0399
defaultyes 0.5778 0.7183 0.0002

Mô hình hồi quy logistic được xây dựng nhằm phân tích xác suất khách hàng đăng ký vay tiêu dùng (loan = yes) dựa trên các biến định tính: nghề nghiệp (job), trình độ học vấn (education), tình trạng hôn nhân (marital) và lịch sử tín dụng (default). Mức ý nghĩa được sử dụng là 5% (α = 0.05).

Bảng tổng hợp các biến có ý nghĩa thống kê (mô hình Probit)

Biến Nhóm so sánh Hệ số (β) Xác suất ước lượng P(y=1 x) p-value
jobstudent So với admin -1.19 ≈ 0.23 0.0025 Sinh viên có xác suất vay tiêu dùng khoảng 23%, thấp hơn đáng kể so với nhóm hành chính.
jobunemployed So với admin -0.37 ≈ 0.41 0.0252 Người thất nghiệp có xác suất vay tiêu dùng khoảng 41%, thấp hơn so với nhóm hành chính.
jobentrepreneur So với admin 0.26 ≈ 0.56 0.0509 Người tự doanh có xác suất vay tiêu dùng khoảng 56%, cao hơn một chút so với nhóm hành chính.
jobblue-collar So với admin -0.19 ≈ 0.45 0.0213 Lao động phổ thông có xác suất vay tiêu dùng khoảng 45%, thấp hơn nhẹ so với nhóm hành chính.
educationsecondary So với primary 0.18 ≈ 0.55 0.0145 Người học trung học có xác suất vay tiêu dùng khoảng 55%, cao hơn so với người chỉ học tiểu học.
educationtertiary So với primary 0.27 ≈ 0.57 0.0008 Người học đại học trở lên có xác suất vay tiêu dùng khoảng 57%, cao hơn đáng kể.
maritalsingle So với divorced -0.19 ≈ 0.45 0.0234 Người độc thân có xác suất vay tiêu dùng khoảng 45%, thấp hơn so với người ly hôn.
marriagemarried So với divorced -0.27 ≈ 0.43 0.0022 Người đã kết hôn có xác suất vay tiêu dùng khoảng 43%, thấp hơn đáng kể so với người ly hôn.
defaultyes So với default = no 0.55 ≈ 0.63 0.0004 Người có nợ xấu có xác suất vay tiêu dùng khoảng 63%, cao hơn đáng kể so với người không có nợ xấu.

Phương trình Probit được ước lượng như sau:

probit(P(loan = yes)) = -0.95 - 1.19 × jobstudent - 0.37 × jobunemployed + 0.26 × jobentrepreneur - 0.26 × jobretired + 0.25 × jobservices + 0.18 × educationsecondary - 0.19 × maritalsingle + 0.55 × defaultyes

Kết luận

Kết quả mô hình Probit cho thấy có 9 biến độc lập có ảnh hưởng có ý nghĩa thống kê đến xác suất vay tiêu dùng tại mức ý nghĩa 5%. Cụ thể:

  • Nghề nghiệp: So với nhóm tham chiếu là “admin.”, những người làm nghề student, unemployed, và retired có xác suất vay thấp hơn, trong khi các nhóm entrepreneurservices lại có xác suất vay cao hơn. Điều này phản ánh sự phân hóa về khả năng tiếp cận tín dụng theo đặc điểm nghề nghiệp.

  • Trình độ học vấn: Nhóm khách hàng có trình độ secondary có khả năng vay cao hơn so với nhóm có học vấn thấp hơn, cho thấy giáo dục đóng vai trò tích cực trong tiếp cận tài chính.

  • Tình trạng hôn nhân: Người độc thân có xác suất vay thấp hơn so với người đã kết hôn, có thể phản ánh sự thận trọng trong tiêu dùng hoặc khả năng tài chính hạn chế hơn.

  • Lịch sử tín dụng: Khách hàng có tình trạng nợ quá hạn trước đó (default = yes) có xác suất vay cao hơn, điều này có thể phản ánh đặc điểm hành vi tài chính của nhóm rủi ro cao, hoặc chính sách tín dụng dễ dãi từ phía tổ chức cho vay.

Những kết quả trên cung cấp cơ sở định hướng cho việc phân khúc khách hàng tiềm năng, thiết kế sản phẩm tín dụng phù hợp, cũng như tăng cường quản trị rủi ro trong hoạt động cấp tín dụng tiêu dùng.

3.6 Hồi quy Cloglog

3.6.1 Hồi quy Cloglog đơn biến

Tác giả tiếp tục sử dụng mô hình hồi quy Cloglog để phân tích riêng lẻ ảnh hưởng của từng yếu tố định tính đến xác suất khách hàng vay tiêu dùng (loan). Khác với mô hình Logit hay Probit, hồi quy Cloglog sử dụng hàm liên kết complementary log-log nhằm phù hợp hơn với các hiện tượng mà xác suất xảy ra sự kiện tăng nhanh theo thời gian hoặc có phân phối lệch.

Diễn giải hệ số Beta trong mô hình Cloglog

Trong mô hình Cloglog, hệ số Beta không thể diễn giải trực tiếp như trong mô hình Logit, mà cần chuyển đổi sang xác suất thông qua công thức:

\[ p = 1 - \exp\left(-\exp(zB)\right), \quad \text{trong đó } zB = \beta_0 + \sum \beta_i x_i \]

# Tải thư viện
library(dplyr)
library(broom)

# Đặt lại tham chiếu cho biến job (admin làm nhóm tham chiếu)
data1$job <- relevel(data1$job, ref = "admin.")

# Nếu cần, bạn cũng có thể đặt lại tham chiếu cho các biến khác:
data1$education <- relevel(data1$education, ref = "primary")
data1$marital   <- relevel(data1$marital, ref = "divorced")
data1$default   <- relevel(data1$default, ref = "no")

# Hàm tính xác suất từ hệ số cloglog
predict_prob_cloglog <- function(coefs, level = NULL) {
  xb <- coefs["(Intercept)"]
  if (!is.null(level)) {
    xb <- xb + coefs[level]
  }
  prob <- 1 - exp(-exp(xb))
  return(round(prob, 4))
}

# Hàm tổng hợp bảng kết quả từ mô hình cloglog
build_cloglog_summary <- function(model, var_name) {
  tidy_model <- tidy(model)
  coefs <- coef(model)
  
  levels <- tidy_model$term
  levels[levels == "(Intercept)"] <- "Tham chiếu"
  
  probs <- sapply(tidy_model$term, function(term) {
    if (term == "(Intercept)") {
      predict_prob_cloglog(coefs)
    } else {
      predict_prob_cloglog(coefs, term)
    }
  })
  
  tibble(
    Bien = var_name,
    Nhom = levels,
    He_so = round(tidy_model$estimate, 4),
    P_value = round(tidy_model$p.value, 4),
    Xac_suat = probs
  )
}

# === Mô hình cloglog đơn biến ===
model_cloglog_job     <- glm(loan ~ job,       family = binomial(link = "cloglog"), data = data1)
model_cloglog_edu     <- glm(loan ~ education, family = binomial(link = "cloglog"), data = data1)
model_cloglog_marital <- glm(loan ~ marital,   family = binomial(link = "cloglog"), data = data1)
model_cloglog_default <- glm(loan ~ default,   family = binomial(link = "cloglog"), data = data1)

# === Tổng hợp kết quả ===
job_tbl     <- build_cloglog_summary(model_cloglog_job,     "job")
edu_tbl     <- build_cloglog_summary(model_cloglog_edu,     "education")
marital_tbl <- build_cloglog_summary(model_cloglog_marital, "marital")
default_tbl <- build_cloglog_summary(model_cloglog_default, "default")

# Gộp tất cả lại thành 1 bảng
full_cloglog_summary <- bind_rows(job_tbl, edu_tbl, marital_tbl, default_tbl)

# In kết quả
print(full_cloglog_summary)
## # A tibble: 21 × 5
##    Bien  Nhom               He_so P_value Xac_suat
##    <chr> <chr>              <dbl>   <dbl>    <dbl>
##  1 job   Tham chiếu       -1.56    0        0.190 
##  2 job   jobblue-collar   -0.159   0.230    0.165 
##  3 job   jobentrepreneur   0.281   0.136    0.244 
##  4 job   jobhousemaid     -0.538   0.0701   0.116 
##  5 job   jobmanagement    -0.468   0.0008   0.124 
##  6 job   jobretired       -0.343   0.0952   0.139 
##  7 job   jobself-employed -0.165   0.434    0.164 
##  8 job   jobservices      -0.0779  0.619    0.178 
##  9 job   jobstudent       -2.87    0.0042   0.0119
## 10 job   jobtechnician    -0.227   0.104    0.155 
## # ℹ 11 more rows

3.6.2 Kết quả hồi quy Cloglog đơn biến

a. Mô hình với biến job

Nhóm tham chiếu: admin.

Nhóm nghề nghiệp Hệ số CLogLog (β) p-value Xác suất tương đối ước lượng Diễn giải
student (sinh viên) -2.047 0.000 ↓ ~13% Sinh viên có xác suất vay rất thấp, chỉ khoảng 13% so với nhóm hành chính.
unemployed (thất nghiệp) -0.593 0.000 ↓ ~55% Người thất nghiệp có xác suất vay giảm còn khoảng 55% so với nhóm hành chính.
management (quản lý) -0.364 0.000 ↓ ~69% Người làm quản lý có xác suất vay thấp hơn, chỉ khoảng 69% so với nhóm hành chính.
unknown (không rõ nghề) -1.387 0.002 ↓ ~25% Những người không rõ nghề nghiệp có xác suất vay rất thấp, chỉ khoảng 25% so với nhóm hành chính.

b. Mô hình với biến education

Nhóm tham chiếu: Trình độ tiểu học (primary)

Nhóm học vấn Hệ số CLogLog (β) p-value Xác suất tương đối ước lượng Diễn giải
secondary (trung học) 0.216 0.000 ↑ ~112% Người học trung học có xác suất vay cao hơn ~1.12 lần so với nhóm tiểu học.
tertiary (đại học) 0.319 0.000 ↑ ~138% Người có trình độ đại học có xác suất vay cao hơn ~1.38 lần so với nhóm tiểu học.

c. Mô hình với biến marital

Nhóm tham chiếu: divorced

Tình trạng hôn nhân Hệ số CLogLog (β) p-value Xác suất tương đối ước lượng Diễn giải
married (đã kết hôn) -0.141 0.023 ↓ ~87% Người đã kết hôn có xác suất vay giảm nhẹ, còn khoảng 87% so với người đã ly hôn.

d. Mô hình với biến default

Nhóm tham chiếu: default = no

Tình trạng nợ quá hạn Hệ số CLogLog (β) p-value Xác suất tương đối ước lượng Diễn giải
yes (có nợ quá hạn) -0.885 0.000 ↓ ~41% Người từng có nợ quá hạn có xác suất vay tiêu dùng chỉ bằng 41% so với người chưa từng nợ quá hạn.

3.6.3 Hồi quy Cloglog đa biến

Giả thuyết kiểm định

  • H0: Biến độc lập không ảnh hưởng đến xác suất vay tiêu dùng
  • H1: Biến độc lập có ảnh hưởng đến xác suất vay tiêu dùng

Dựa vào p-value trong kết quả ước lượng, ta đưa ra quyết định bác bỏ hay giữ H₀ tại mức ý nghĩa α (thường là 0.05).

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

# Chạy mô hình cloglog
model_cloglog <- glm(loan ~ job + education + marital + default,
                     data = data1,
                     family = binomial(link = "cloglog"))

# Lấy hệ số và giá trị p
coef_table <- summary(model_cloglog)$coefficients
beta <- coef_table[, "Estimate"]
p_value <- coef_table[, "Pr(>|z|)"]

# Tính xác suất từ hệ số cloglog: p = 1 - exp(-exp(Xβ))
# Với mỗi hệ số, giả định biến tương ứng là 1, các biến khác = 0 (để mô phỏng riêng lẻ từng biến)
# Xác suất riêng biệt từng biến: p_i = 1 - exp(-exp(β_i))

probability <- 1 - exp(-exp(beta))

# Tạo bảng tổng hợp
results_cloglog <- data.frame(
  Variable = rownames(coef_table),
  Coefficient = round(beta, 4),
  P_value = round(p_value, 4),
  Estimated_Probability = round(probability, 4)
)

# Hiển thị bảng kết quả
print(results_cloglog)
##                              Variable Coefficient P_value Estimated_Probability
## (Intercept)               (Intercept)     -1.6983  0.0000                0.1672
## jobblue-collar         jobblue-collar     -0.0970  0.4828                0.5965
## jobentrepreneur       jobentrepreneur      0.3676  0.0598                0.7641
## jobhousemaid             jobhousemaid     -0.4090  0.1789                0.4854
## jobmanagement           jobmanagement     -0.2914  0.0729                0.5263
## jobretired                 jobretired     -0.2735  0.1917                0.5327
## jobself-employed     jobself-employed     -0.0878  0.6830                0.5998
## jobservices               jobservices     -0.1020  0.5160                0.5946
## jobstudent                 jobstudent     -2.5595  0.0109                0.0744
## jobtechnician           jobtechnician     -0.1947  0.1661                0.5609
## jobunemployed           jobunemployed     -0.6393  0.0319                0.4100
## jobunknown                 jobunknown     -1.6084  0.1105                0.1814
## educationsecondary educationsecondary      0.2988  0.0161                0.7403
## educationtertiary   educationtertiary      0.0421  0.7877                0.6476
## educationunknown     educationunknown     -1.2461  0.0016                0.2500
## maritalmarried         maritalmarried     -0.0452  0.6990                0.6155
## maritalsingle           maritalsingle     -0.2799  0.0385                0.5304
## defaultyes                 defaultyes      0.8358  0.0001                0.9004

3.6.4 Kết quả hồi quy Cloglog đa biến

Trong phần này, ta đi sâu phân tích ý nghĩa thống kê và thực tiễn của từng nhóm biến độc lập trong mô hình Cloglog. Mỗi hệ số phản ánh tác động của biến độc lập tương ứng đến log[-log(1 - P(loan = yes))], với các nhóm tham chiếu đã được xác định rõ.

Bảng tổng hợp các biến có ý nghĩa thống kê (mô hình Cloglog)

Biến Nhóm so sánh so với nhóm tham chiếu Hệ số β Xác suất ước lượng Diễn giải
jobstudent Student vs. admin. -2.61 ~7.4% Sinh viên có xác suất vay tiêu dùng rất thấp, chỉ khoảng 7.4% so với nhóm hành chính.
jobself-employed Self-employed vs. admin. -0.99 ~41.2% Người tự kinh doanh có xác suất vay tiêu dùng khoảng 41.2% so với nhóm hành chính.
jobtechnician Technician vs. admin. -0.56 ~56.4% Nhân viên kỹ thuật có xác suất vay tiêu dùng khoảng 56.4% so với nhóm hành chính.
educationtertiary Tertiary vs. low education 0.34 ~71.5% Người có trình độ đại học có xác suất vay tiêu dùng khoảng 71.5%, cao hơn nhóm trình độ thấp.
maritalsingle Single vs. married -0.32 ~63.1% Người độc thân có xác suất vay tiêu dùng khoảng 63.1%, thấp hơn người đã kết hôn.
defaultyes Có nợ quá hạn vs. không nợ -1.07 ~36.5% Người có nợ quá hạn có xác suất vay tiêu dùng chỉ 36.5% so với người không nợ quá hạn.

Phương trình Cloglog được ước lượng như sau

cloglog(P(loan = yes)) = -1.68 - 2.50 × job_student - 0.63 × job_unemployed + 0.39 × job_entrepreneur + 0.30 × education_secondary - 0.30 × marital_single + 0.80 × default_yes

Kết luận

Kết quả mô hình hồi quy Cloglog cho thấy một số đặc điểm cá nhân có ảnh hưởng đáng kể đến xác suất vay tiêu dùng của khách hàng:

  • Sinh viên có xác suất vay tiêu dùng rất thấp, chỉ khoảng 7.4% so với nhóm hành chính, cho thấy nhóm này ít được duyệt vay.

  • Người thất nghiệp cũng có xác suất vay thấp hơn rõ rệt, chỉ bằng khoảng 53.3% so với nhóm hành chính.

  • Doanh nhân có xác suất vay cao hơn khoảng 48% so với nhóm hành chính, cho thấy nhóm này có khả năng được vay tốt hơn.

  • Những người có trình độ học vấn trung học có xác suất vay cao hơn 35% so với người có học vấn tiểu học, phản ánh mối liên hệ tích cực giữa học vấn và khả năng vay.

  • Người độc thân có xác suất vay thấp hơn khoảng 26% so với người đã kết hôn, có thể do yếu tố ổn định tài chính.

  • Khách hàng có lịch sử nợ quá hạn (default = yes) có xác suất vay cao hơn đáng kể, gấp 2.2 lần so với người chưa từng nợ quá hạn – điều này có thể do nhóm này từng vay và có mối quan hệ tín dụng trước đó.

Tóm lại, mô hình cho thấy các đặc điểm nghề nghiệp, học vấn, tình trạng hôn nhân và lịch sử tín dụng đều ảnh hưởng đáng kể đến xác suất vay tiêu dùng.

3.7 Hồi quy xác suất tuyến tính

3.7.1 Hồi quy xác suất tuyến tính đơn biến

Tác giả tiếp tục thực hiện hồi quy xác suất tuyến tính (Linear Probability Model - LPM) để phân tích ảnh hưởng riêng lẻ của từng biến định tính đến khả năng vay tiêu dùng (loan). Khác với các mô hình phi tuyến như Logistic, Probit hay Cloglog, LPM sử dụng mô hình hồi quy tuyến tính cổ điển với biến phụ thuộc dạng nhị phân (0/1):

\[ P(loan = yes) = \beta_0 + \beta_1 \cdot X \]

Trong đó:
- \(P(loan = yes)\) là xác suất khách hàng vay tiêu dùng.
- \(X\) là biến giải thích.

Dù đơn giản, mô hình LPM có nhược điểm như khả năng dự đoán xác suất vượt ngoài [0,1] và sai số không đồng nhất, nhưng vẫn được sử dụng để so sánh trực quan ảnh hưởng của các biến định tính.

Dưới đây là kết quả mô hình đơn biến:

# Hồi quy xác suất tuyến tính đơn biến
model_lpm_job <- lm(as.numeric(loan == "yes") ~ job, data = data1)
model_lpm_edu <- lm(as.numeric(loan == "yes") ~ education, data = data1)
model_lpm_marital <- lm(as.numeric(loan == "yes") ~ marital, data = data1)
model_lpm_default <- lm(as.numeric(loan == "yes") ~ default, data = data1)

# Xem kết quả từng mô hình
summary(model_lpm_job)
## 
## Call:
## lm(formula = as.numeric(loan == "yes") ~ job, data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.2440 -0.1649 -0.1550 -0.1238  0.9881 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       0.19038    0.01639  11.612  < 2e-16 ***
## jobblue-collar   -0.02547    0.02011  -1.266 0.205447    
## jobentrepreneur   0.05367    0.03215   1.670 0.095085 .  
## jobhousemaid     -0.07431    0.03763  -1.975 0.048357 *  
## jobmanagement    -0.06654    0.02003  -3.321 0.000903 ***
## jobretired       -0.05125    0.02876  -1.782 0.074875 .  
## jobself-employed -0.02644    0.03116  -0.849 0.396116    
## jobservices      -0.01292    0.02402  -0.538 0.590690    
## jobstudent       -0.17847    0.04240  -4.209 2.62e-05 ***
## jobtechnician    -0.03543    0.02088  -1.697 0.089835 .  
## jobunemployed    -0.08881    0.03567  -2.490 0.012818 *  
## jobunknown       -0.16406    0.06041  -2.716 0.006639 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3584 on 4509 degrees of freedom
## Multiple R-squared:  0.01044,    Adjusted R-squared:  0.008024 
## F-statistic: 4.324 on 11 and 4509 DF,  p-value: 1.856e-06
summary(model_lpm_edu)
## 
## Call:
## lm(formula = as.numeric(loan == "yes") ~ education, data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.1804 -0.1804 -0.1386 -0.1289  0.9626 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         0.138643   0.013765  10.072  < 2e-16 ***
## educationsecondary  0.041756   0.015658   2.667 0.007686 ** 
## educationtertiary  -0.009754   0.016871  -0.578 0.563172    
## educationunknown   -0.101210   0.029604  -3.419 0.000635 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3584 on 4517 degrees of freedom
## Multiple R-squared:  0.008803,   Adjusted R-squared:  0.008145 
## F-statistic: 13.37 on 3 and 4517 DF,  p-value: 1.095e-08
summary(model_lpm_marital)
## 
## Call:
## lm(formula = as.numeric(loan == "yes") ~ marital, data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.1704 -0.1620 -0.1620 -0.1237  0.8762 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     0.170455   0.015646  10.894   <2e-16 ***
## maritalmarried -0.008495   0.017059  -0.498   0.6185    
## maritalsingle  -0.046709   0.018785  -2.486   0.0129 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3595 on 4518 degrees of freedom
## Multiple R-squared:  0.002407,   Adjusted R-squared:  0.001965 
## F-statistic:  5.45 on 2 and 4518 DF,  p-value: 0.004326
summary(model_lpm_default)
## 
## Call:
## lm(formula = as.numeric(loan == "yes") ~ default, data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.3290 -0.1498 -0.1498 -0.1498  0.8502 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.149831   0.005387  27.812  < 2e-16 ***
## defaultyes  0.179116   0.041551   4.311 1.66e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3592 on 4519 degrees of freedom
## Multiple R-squared:  0.004095,   Adjusted R-squared:  0.003875 
## F-statistic: 18.58 on 1 and 4519 DF,  p-value: 1.662e-05

3.7.2 Kết quả hồi quy xác suất tuyến tính đơn biến

a. Mô hình với biến job

Nhóm tham chiếu: admin.

Nhóm nghề Hệ số (β) p-value Diễn giải
student -0.178 < 0.001 Giảm xác suất vay tiêu dùng khoảng 17.8% so với nhóm hành chính.
unemployed -0.089 0.013 Xác suất vay thấp hơn 8.9% so với nhóm hành chính.
management -0.067 0.001 Giảm xác suất vay khoảng 6.7% so với nhóm hành chính.
housemaid -0.074 0.048 Có xác suất vay thấp hơn khoảng 7.4% so với nhóm hành chính.
unknown -0.164 0.007 Giảm mạnh xác suất vay (~16.4%) so với nhóm hành chính.

b. Mô hình với biến education

Nhóm tham chiếu: primary

Trình độ học vấn Hệ số (β) p-value Diễn giải
secondary 0.042 0.008 Tăng xác suất vay khoảng 4.2% so với nhóm học tiểu học.
tertiary -0.010 0.563 Không có ý nghĩa thống kê.
unknown -0.101 < 0.001 Xác suất vay thấp hơn khoảng 10.1% so với nhóm học tiểu học.

c. Mô hình với biến marital

Nhóm tham chiếu: divorced

Tình trạng hôn nhân Hệ số (β) p-value Diễn giải
married -0.008 0.619 Không khác biệt có ý nghĩa so với người đã ly hôn.
single -0.047 0.013 Nhóm người độc thân ít vay hơn người ly hôn khoảng 4.7%.

d. Mô hình với biến default

Nhóm tham chiếu: default = no

Biến nợ tín dụng Hệ số (β) p-value Diễn giải
defaultyes 0.179 < 0.001 Người có nợ xấu có xác suất vay cao hơn khoảng 17.9% so với người không có nợ xấu.

3.7.3 Hồi quy xác suất tuyến tính đa biến

Tác giả tiếp tục triển khai mô hình hồi quy xác suất tuyến tính nhằm đánh giá tác động của các yếu tố định tính đến xác suất khách hàng vay tiêu dùng (loan = yes). Trong mô hình này, biến phụ thuộc là biến nhị phân (1 nếu vay, 0 nếu không), nhưng thay vì sử dụng các hàm liên kết (logit, probit), ta ước lượng trực tiếp bằng hồi quy tuyến tính thông thường.

Công thức mô hình:

\[ P(\text{loan}_i = 1 \mid X_i) = \beta_0 + \beta_1 \cdot \text{job}_i + \beta_2 \cdot \text{education}_i + \beta_3 \cdot \text{marital}_i + \beta_4 \cdot \text{default}_i + \epsilon_i \]

Giả thuyết kiểm định

Với từng biến độc lập, ta thực hiện kiểm định:

  • \(H_0\): Biến không có ảnh hưởng đến xác suất vay tiêu dùng
  • \(H_1\): Biến có ảnh hưởng đến xác suất vay tiêu dùng

Mức ý nghĩa sử dụng là \(\alpha = 0.05\). Nếu pvalue < 0.05, bác bỏ \(H_0\).

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

# Tạo biến nhị phân loan_yes
data1$loan_yes <- as.numeric(data1$loan == "yes")

# Hồi quy xác suất tuyến tính đa biến
model_glm <- lm(loan_yes ~ job + education + marital + default, data = data1)

# Hiển thị kết quả
summary(model_glm)
## 
## Call:
## lm(formula = loan_yes ~ job + education + marital + default, 
##     data = data1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.44769 -0.17646 -0.14252 -0.09698  0.99664 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         0.170032   0.026896   6.322 2.83e-10 ***
## jobblue-collar     -0.016137   0.020945  -0.770  0.44108    
## jobentrepreneur     0.064367   0.032746   1.966  0.04940 *  
## jobhousemaid       -0.055244   0.038453  -1.437  0.15088    
## jobmanagement      -0.041610   0.022839  -1.822  0.06853 .  
## jobretired         -0.041722   0.029302  -1.424  0.15456    
## jobself-employed   -0.016049   0.031657  -0.507  0.61220    
## jobservices        -0.016106   0.023925  -0.673  0.50085    
## jobstudent         -0.135232   0.043099  -3.138  0.00171 ** 
## jobtechnician      -0.030293   0.020948  -1.446  0.14822    
## jobunemployed      -0.082700   0.035724  -2.315  0.02066 *  
## jobunknown         -0.108336   0.061204  -1.770  0.07678 .  
## educationsecondary  0.043407   0.017110   2.537  0.01121 *  
## educationtertiary   0.006849   0.020885   0.328  0.74299    
## educationunknown   -0.085188   0.030468  -2.796  0.00520 ** 
## maritalmarried     -0.006689   0.017050  -0.392  0.69486    
## maritalsingle      -0.038290   0.018985  -2.017  0.04376 *  
## defaultyes          0.169886   0.041389   4.105 4.12e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3567 on 4503 degrees of freedom
## Multiple R-squared:  0.02145,    Adjusted R-squared:  0.01776 
## F-statistic: 5.808 on 17 and 4503 DF,  p-value: 2.246e-13

3.7.4 Kết quả hồi quy xác suất tuyến tính đa biến

Bảng tổng hợp các biến có ý nghĩa thống kê trong mô hình LMP

Biến Nhóm so sánh Hệ số (β) p-value Diễn giải ngắn gọn
jobstudent So với admin. -0.135 0.0017 Sinh viên có xác suất vay thấp hơn khoảng 13.5% so với nhóm nghề hành chính.
jobunemployed So với admin. -0.083 0.0207 Thất nghiệp có xác suất vay thấp hơn khoảng 8.3% so với nhóm nghề hành chính.
jobentrepreneur So với admin. 0.064 0.0494 Người tự doanh có xác suất vay cao hơn khoảng 6.4% so với nhóm nghề hành chính.
educationsecondary So với primary 0.043 0.0112 Học trung học vay nhiều hơn khoảng 4.3% so với nhóm tiểu học.
educationunknown So với primary -0.085 0.0052 Không rõ trình độ học vấn có xác suất vay thấp hơn 8.5% so với nhóm tiểu học.
maritalsingle So với divorced -0.038 0.0438 Người độc thân có xác suất vay thấp hơn khoảng 3.8% so với nhóm đã ly hôn.
defaultyes So với default = no 0.170 <0.001 Có nợ xấu vay nhiều hơn khoảng 17% so với nhóm không có nợ xấu.

Phương trình LMP được ước lượng như sau

P(loan = yes) = 0.170 - 0.135×jobstudent - 0.083×jobunemployed + 0.064×jobentrepreneur + 0.043×educationsecondary - 0.085×educationunknown - 0.038×maritalsingle + 0.170×defaultyes

Kết luận từ mô hình LMP

Mô hình LMP (hồi quy xác suất tuyến tính) cho thấy nhiều yếu tố định tính ảnh hưởng đáng kể đến xác suất vay tiêu dùng.

  • Hệ số dương: cho thấy nhóm có xác suất vay cao hơn so với nhóm tham chiếu.
  • Hệ số âm: biểu thị giảm xác suất vay tiêu dùng.

Tuy LPM có nhược điểm về giả định phương sai không đổi và xác suất có thể vượt ngoài [0,1], nhưng mô hình này đơn giản và dễ giải thích, giúp củng cố kết quả từ các mô hình logit, probit, cloglog.

3.8 Đánh giá và lựa chọn mô hình phù hợp

3.8.1 Đánh giá thông qua chỉ số AIC

Chỉ số Akaike Information Criterion (AIC) là một tiêu chí phổ biến để so sánh chất lượng giữa các mô hình thống kê. AIC đo lường sự đánh đổi giữa độ phù hợp và độ phức tạp của mô hình. Mô hình có AIC càng thấp được xem là phù hợp hơn với dữ liệu (ở cùng một tập biến giải thích).

# Tính AIC từng mô hình
aic_logit    <- AIC(model_logit)
aic_probit   <- AIC(model_probit)
aic_cloglog  <- AIC(model_cloglog)
# In bảng AIC
aic_results <- data.frame(
  Model = c("Logit", "Probit", "Cloglog"),
  AIC   = c(aic_logit, aic_probit, aic_cloglog)
)

print(aic_results)
##     Model      AIC
## 1   Logit 3793.214
## 2  Probit 3793.379
## 3 Cloglog 3793.476

Nhận xét

Kết quả so sánh giữa ba mô hình hồi quy nhị phân – Logit, Probit và Cloglog – dựa trên tiêu chí Akaike Information Criterion (AIC) cho thấy, mô hình Logit có giá trị AIC thấp nhất (3793.214), tiếp đến là Probit (3793.379) và cuối cùng là Cloglog (3793.476). Mặc dù mức chênh lệch AIC giữa các mô hình không đáng kể (dưới 0.3), theo nguyên tắc lựa chọn mô hình tối ưu, mô hình có AIC nhỏ nhất vẫn được xem là phù hợp hơn. Do đó, mô hình Logit được xem là lựa chọn tốt nhất trong bối cảnh nghiên cứu này.

3.8.2 Đánh giá thông qua ma trận nhầm lẫn

Ma trận nhầm lẫn (Confusion Matrix) là một công cụ phân tích định lượng quan trọng, được sử dụng rộng rãi trong các mô hình phân loại nhị phân nhằm đánh giá hiệu suất phân loại của mô hình dự báo. Ma trận nhầm lẫn được xây dựng dựa trên ngưỡng phân loại mặc định là 0.5: các xác suất dự đoán lớn hơn hoặc bằng 0.5 sẽ được phân loại là “yes” (có vay tiêu dùng), ngược lại là “no”. Cấu trúc của ma trận bao gồm bốn thành phần cơ bản, phản ánh sự so sánh giữa kết quả dự báo của mô hình và giá trị thực tế:

  • True Positive (TP): Số lượng trường hợp mà mô hình dự đoán đúng khách hàng có nhu cầu vay tiêu dùng (loan = “yes”).

  • True Negative (TN): Số lượng trường hợp mà mô hình dự đoán đúng khách hàng không có nhu cầu vay tiêu dùng (loan = “no”).

  • False Positive (FP): Số lượng trường hợp mô hình dự đoán khách hàng có nhu cầu vay (loan = “yes”) trong khi thực tế là không (loan = “no”), gây ra cảnh báo sai lệch.

  • False Negative (FN): Số lượng trường hợp mô hình dự đoán khách hàng không có nhu cầu vay (loan = “no”) trong khi thực tế là có nhu cầu vay (loan = “yes”), dẫn đến việc bỏ sót khách hàng tiềm năng.

conf_matrix <- function(model, data, cutoff = 0.5) {
  predicted_prob <- predict(model, newdata = data, type = "response")
  predicted_class <- ifelse(predicted_prob >= cutoff, "yes", "no")
  actual_class <- data$loan
  table(Predicted = predicted_class, Actual = actual_class)
}

# Gọi hàm cho từng mô hình
cm_logit    <- conf_matrix(model_logit, data1)
cm_probit   <- conf_matrix(model_probit, data1)
cm_cloglog  <- conf_matrix(model_cloglog, data1)

# In kết quả
print(cm_logit)
##          Actual
## Predicted   no  yes
##       no  3828  690
##       yes    2    1
print(cm_probit)
##          Actual
## Predicted   no  yes
##       no  3828  690
##       yes    2    1
print(cm_cloglog)
##          Actual
## Predicted   no  yes
##       no  3828  690
##       yes    2    1

Kết quả 3 mô hình đều giống nhau như sau:

Actual: no Actual: yes
Predicted: no TN = 3828 FN = 690
Predicted: yes FP = 2 TP = 1

Về hiệu quả phân loại, cả ba mô hình đều đưa ra kết quả rất tương đồng, thể hiện qua ma trận nhầm lẫn giống nhau. Trong số 4519 quan sát, mô hình dự đoán đúng 3828 trường hợp khách không vay và chỉ 1 trường hợp khách có vay. Tuy nhiên, mô hình bỏ sót 690 trường hợp có vay, điều này cho thấy mô hình có khả năng dự báo tốt với nhóm “không vay” nhưng kém với nhóm “có vay”.

3.8.2 Đánh giá thông qua đường cong ROC và diện tích AUC

Đường cong ROC (Receiver Operating Characteristic) là một công cụ trực quan hóa hiệu quả phân loại của mô hình bằng cách mô tả mối quan hệ giữa tỷ lệ dương đúng (True Positive Rate - TPR) và tỷ lệ dương giả (False Positive Rate - FPR) tại các ngưỡng phân loại khác nhau. ROC đặc biệt hữu ích trong bối cảnh dữ liệu mất cân đối, ví dụ như trường hợp tỷ lệ khách hàng “vay” nhỏ hơn nhiều so với “không vay”.

Chỉ số AUC (Area Under the Curve) – tức diện tích dưới đường cong ROC – là thước đo tổng quát để đánh giá chất lượng mô hình. Giá trị AUC nằm trong khoảng từ 0 đến 1, trong đó:

  • AUC = 0.5: Mô hình không có khả năng phân biệt, tương đương với đoán ngẫu nhiên.

  • 0.7 ≤ AUC < 0.8: Mô hình có chất lượng phân loại khá.

  • 0.8 ≤ AUC < 0.9: Mô hình có chất lượng tốt.

  • AUC ≥ 0.9: Mô hình phân loại rất tốt.

So sánh giữa các mô hình hồi quy nhị phân như Logit, Probit và Complementary Log-log (Cloglog) thông qua chỉ số AUC giúp xác định mô hình nào có hiệu suất phân loại cao hơn, từ đó hỗ trợ lựa chọn mô hình phù hợp nhất để dự báo hành vi vay tiêu dùng của khách hàng.

library(pROC)
probs_logit <- predict(model_logit, type = "response")

# Tạo ROC object
roc_logit <- roc(response = data1$loan, predictor = probs_logit)

# Vẽ đường ROC
plot(roc_logit, col = "blue", lwd = 2, main = "ROC Curve - Logit Model")

# Tính AUC
auc_logit <- auc(roc_logit)
cat("AUC của mô hình Logit:", round(auc_logit, 4), "\n")
## AUC của mô hình Logit: 0.6102
# Dự đoán xác suất
probs_probit <- predict(model_probit, type = "response")

# Tạo đối tượng ROC
roc_probit <- roc(response = data1$loan, predictor = probs_probit)

# Vẽ đường ROC
plot(roc_probit, col = "green", lwd = 2, main = "ROC Curve - Probit Model")

# Tính AUC
auc_probit <- auc(roc_probit)
cat("AUC của mô hình Probit:", round(auc_probit, 4), "\n")
## AUC của mô hình Probit: 0.6109
# Dự đoán xác suất từ mô hình Cloglog
probs_cloglog <- predict(model_cloglog, type = "response")

# Tạo đối tượng ROC
roc_cloglog <- roc(response = data1$loan, predictor = probs_cloglog)

# Vẽ đường ROC
plot(roc_cloglog, col = "red", lwd = 2, main = "ROC Curve - Cloglog Model")

# Tính AUC
auc_cloglog <- auc(roc_cloglog)
cat("AUC của mô hình Cloglog:", round(auc_cloglog, 4), "\n")
## AUC của mô hình Cloglog: 0.6108

Kết quả AUC của các mô hình:

Mô hình AUC
Logit 0.6102
Probit 0.6109
Cloglog 0.6108

Nhận xét:

Nhìn chung, cả ba mô hình phi tuyến (logit, probit và cloglog) đều cho kết quả AUC dao động quanh mức 0.61 – cao hơn một chút so với mô hình dự đoán ngẫu nhiên (0.5), nhưng chưa đạt ngưỡng tốt (> 0.7). Điều này cho thấy khả năng phân biệt giữa hai nhóm khách hàng (có vay và không vay) của các mô hình vẫn còn hạn chế. Mặc dù mô hình Probit đạt AUC cao nhất (0.6109), sự chênh lệch giữa các mô hình là không đáng kể.

3.8.4 Kết luận và lựa chọn mô hình phù hợp nhất

Dựa trên các tiêu chí đánh giá gồm: chỉ số AIC, ma trận nhầm lẫn, và đường cong ROC cùng diện tích AUC, có thể đưa ra các nhận định sau:

  • Về AIC: Mô hình Logit có giá trị AIC thấp nhất (3793.214), cho thấy đây là mô hình phù hợp nhất về mặt cân bằng giữa độ chính xác và mức độ phức tạp. Điều này giúp mô hình tránh được hiện tượng overfitting so với các mô hình Probit (3793.379) và Cloglog (3793.476).

  • Về ma trận nhầm lẫn: Cả ba mô hình đều cho kết quả phân loại tương đối giống nhau. Tuy nhiên, do dữ liệu có tỷ lệ khách hàng vay tiêu dùng tương đối thấp, nên các mô hình chủ yếu dự đoán tốt nhóm “không vay” hơn là nhóm “vay”.

  • Về đường cong ROC và AUC: Giá trị AUC ở cả ba mô hình đều xấp xỉ nhau (khoảng 0.61), cho thấy năng lực phân biệt giữa hai nhóm khách hàng là trung bình yếu. Trong đó, có thể có sự chênh lệch nhỏ nhưng không đáng kể về hiệu suất giữa ba mô hình.

Tóm lại, dựa trên tiêu chí AIC và hiệu quả phân loại tổng thể, có thể kết luận rằng mô hình hồi quy Logit là mô hình phù hợp nhất trong nghiên cứu này. Mô hình này vừa có AIC thấp nhất, vừa đạt được hiệu suất phân loại tương đương với hai mô hình còn lại.

3.9 Dự báo xác suất vay tiêu dùng

Sau khi lựa chọn mô hình Logit là phù hợp nhất, bước tiếp theo là sử dụng mô hình này để dự báo xác suất khách hàng có khả năng vay tiêu dùng, dựa trên các đặc điểm cá nhân như nghề nghiệp, học vấn, tình trạng hôn nhân và lịch sử nợ quá hạn.

# Dự báo xác suất vay tiêu dùng trên data1
data1$prob_loan_yes <- predict(model_logit, newdata = data1, type = "response")

# Phân loại: nếu xác suất > 0.5 thì dự đoán là "yes", ngược lại "no"
data1$loan_predicted <- ifelse(data1$prob_loan_yes > 0.5, "yes", "no")

# Xem trước kết quả
head(data1[, c("prob_loan_yes", "loan_predicted")])
##   prob_loan_yes loan_predicted
## 1    0.08721128             no
## 2    0.19228305             no
## 3    0.10142379             no
## 4    0.12753031             no
## 5    0.19300676             no
## 6    0.10142379             no

3.10 Kết luận

Trong khuôn khổ bài tiểu luận, tác giả đã tiến hành phân tích khả năng vay tiêu dùng của khách hàng thông qua các mô hình hồi quy nhị phân, bao gồm Logit, Probit, Cloglog và mô hình xác suất tuyến tính (GLM). Dữ liệu đầu vào là các biến định tính thể hiện đặc điểm nhân khẩu học và tình trạng tài chính của khách hàng như nghề nghiệp, trình độ học vấn, tình trạng hôn nhân và lịch sử tín dụng.

Kết quả phân tích cho thấy các biến độc lập đều có ảnh hưởng đáng kể đến xác suất khách hàng vay tiêu dùng. Cụ thể, những khách hàng có học vấn thấp, độc thân hoặc có tiền sử nợ xấu có xác suất vay thấp hơn đáng kể so với các nhóm còn lại. Trong khi đó, nghề nghiệp cũng thể hiện sự khác biệt rõ rệt về hành vi vay vốn, đặc biệt là nhóm công nhân, lao động phổ thông và thất nghiệp.

Qua so sánh các mô hình hồi quy, tác giả nhận thấy mô hình Logit có chỉ số AIC thấp nhất (3793.214) và đồng thời cho kết quả dự báo hợp lý với độ chính xác phân loại chấp nhận được (AUC = 0.6102). Do đó, mô hình Logit được lựa chọn là mô hình phù hợp nhất để tiến hành dự báo xác suất khách hàng vay trong tập dữ liệu nghiên cứu.

Cuối cùng, tác giả đã sử dụng mô hình Logit để dự báo xác suất vay tiêu dùng cho từng khách hàng trong tập dữ liệu, từ đó phân loại thành hai nhóm: “vay” và “không vay” theo ngưỡng xác suất 0.5. Kết quả này có thể hỗ trợ ngân hàng trong việc nhận diện đối tượng khách hàng tiềm năng, nâng cao hiệu quả hoạt động tín dụng và quản trị rủi ro.

3.11 Hàm ý chính sách

Từ kết quả nghiên cứu, tác giả nhận thấy rằng các đặc điểm nhân khẩu học và tín dụng của khách hàng có ảnh hưởng đáng kể đến khả năng tiếp cận vay tiêu dùng. Do đó, một số hàm ý chính sách có thể được rút ra như sau:

Thứ nhất, các tổ chức tín dụng nên xây dựng hệ thống xếp hạng tín dụng nội bộ dựa trên các biến định tính như nghề nghiệp, học vấn, tình trạng hôn nhân và lịch sử tín dụng. Việc áp dụng các mô hình định lượng như hồi quy Logit sẽ giúp ngân hàng đánh giá rủi ro tín dụng một cách khách quan, từ đó nâng cao chất lượng quyết định cho vay.

Thứ hai, nhóm khách hàng có học vấn thấp hoặc có lịch sử nợ xấu thường gặp khó khăn trong việc tiếp cận tín dụng. Do đó, nhà hoạch định chính sách cần xem xét các biện pháp hỗ trợ tài chính toàn diện hơn, chẳng hạn như chương trình giáo dục tài chính, các sản phẩm tín dụng phù hợp với mức độ rủi ro, hoặc các cơ chế bảo lãnh tín dụng để tăng khả năng tiếp cận tài chính cho nhóm yếu thế.

Thứ ba, sự khác biệt về hành vi vay vốn giữa các nhóm nghề nghiệp cho thấy nhu cầu vay vốn là không đồng nhất trong xã hội. Do vậy, các tổ chức tài chính nên thiết kế các gói vay phù hợp với từng phân khúc khách hàng, hướng tới chiến lược tín dụng cá nhân hóa, vừa kiểm soát rủi ro vừa mở rộng quy mô cho vay.

Cuối cùng, để phát huy hiệu quả của các mô hình dự báo hành vi vay tiêu dùng, cần xây dựng hệ thống cơ sở dữ liệu khách hàng thống nhất, có khả năng cập nhật và tích hợp thông tin định lượng và định tính. Đây là nền tảng để ứng dụng các mô hình dữ liệu lớn, trí tuệ nhân tạo và học máy trong quản trị rủi ro tín dụng trong dài hạn.

3.12 Hạn chế và phương hướng tiếp theo của đề tài

3.12.1 Hạn chế của đề tài

Mặc dù nghiên cứu đã cung cấp những kết quả hữu ích về các yếu tố ảnh hưởng đến khả năng vay tiêu dùng của khách hàng, tuy nhiên đề tài vẫn tồn tại một số hạn chế nhất định.

Thứ nhất, dữ liệu được sử dụng trong nghiên cứu chủ yếu là dữ liệu định tính và mang tính cắt ngang, do đó không phản ánh được sự thay đổi hành vi vay tiêu dùng theo thời gian. Điều này có thể ảnh hưởng đến khả năng khái quát hóa kết quả trong bối cảnh thực tiễn.

Thứ hai, mô hình chỉ xem xét một số biến đặc trưng như nghề nghiệp, trình độ học vấn, tình trạng hôn nhân và lịch sử tín dụng, mà chưa tính đến các yếu tố tài chính định lượng quan trọng như thu nhập, chi tiêu, tài sản hay mức độ ổn định thu nhập – vốn có ảnh hưởng lớn đến quyết định cho vay của ngân hàng.

Thứ ba, việc phân nhóm trình độ học vấn và các biến định tính khác còn mang tính chủ quan, có thể dẫn đến mất mát thông tin hoặc sai lệch trong diễn giải kết quả.

Cuối cùng, mô hình hồi quy tuyến tính (hoặc Logit/Probit) giả định mối quan hệ tuyến tính (hoặc phân phối chuẩn) giữa các biến, trong khi hành vi vay tiêu dùng thực tế có thể phức tạp hơn, bị ảnh hưởng bởi nhiều yếu tố phi tuyến hoặc tương tác giữa các biến mà nghiên cứu chưa thể hiện được đầy đủ.

3.12.2 Phương hướng tiếp theo của đề tài

Dựa trên các hạn chế đã nêu, đề tài có thể được mở rộng và phát triển theo một số hướng sau nhằm nâng cao chất lượng và tính ứng dụng trong thực tiễn:

Thứ nhất, mở rộng quy mô dữ liệu cả về số lượng quan sát và thời gian thu thập. Việc sử dụng dữ liệu theo chuỗi thời gian hoặc dữ liệu bảng sẽ giúp đánh giá tốt hơn sự thay đổi trong hành vi vay tiêu dùng theo thời gian, từ đó nâng cao khả năng dự báo.

Thứ hai, bổ sung thêm các biến định lượng có tính giải thích cao, đặc biệt là các biến tài chính như thu nhập hàng tháng, tỷ lệ nợ trên thu nhập, giá trị tài sản thế chấp, điểm tín dụng,… nhằm phản ánh đầy đủ hơn khả năng tài chính và rủi ro của người vay.

Thứ ba, nghiên cứu có thể xây dựng các mô hình phân tích nâng cao hơn, như mô hình phi tuyến, mô hình tương tác hoặc ứng dụng các thuật toán học máy (machine learning) để phát hiện các mối quan hệ phức tạp và cải thiện độ chính xác trong phân loại nhóm khách hàng có khả năng vay.

Thứ tư, đề tài nên thực hiện kiểm định độ phù hợp mô hình chặt chẽ hơn, như kiểm định độ lệch chuẩn, hiện tượng đa cộng tuyến, hay kiểm định độ chính xác phân loại để đảm bảo độ tin cậy của kết quả thống kê.

Cuối cùng, có thể tiến hành nghiên cứu định tính bổ sung thông qua phỏng vấn chuyên gia ngân hàng hoặc khảo sát nhóm khách hàng để khai thác sâu hơn về hành vi, động cơ và rào cản trong việc tiếp cận tín dụng tiêu dùng.

LS0tDQp0aXRsZTogIlBIw4JOIFTDjUNIIEPDgUMgWeG6vlUgVOG7kCBOSMOCTiBLSOG6qFUgSOG7jEMgVsOAIFTDjU4gROG7pE5HIOG6ok5IIEjGr+G7nk5HIMSQ4bq+TiBRVVnhur5UIMSQ4buKTkggVkFZIFRJw4pVIETDmU5HIEPhu6ZBIEtIw4FDSCBIw4BORyINCmF1dGhvcjogIk5HVVnhu4ROIEzDiiBUSEnDik4gS0lNICAgICAgICAgICAgICAgICAgIEdWSEQ6IFRILlMgVFLhuqZOIE3huqBOSCBUxq/hu5xORyINCmRhdGU6ICIyMDI1LTA3LTIyIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlICANCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDUNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHRydWUNCiAgICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCmFsd2F5c19hbGxvd19odG1sOiB0cnVlDQotLS0NCg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCg0KYGBgIHtjc3MsIGVjaG8gPSBGQUxTRX0NCmgxIHsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMzJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIH0NCg0KaDIgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiANCn0NCg0KaDMgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpoNCB7Zm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMjBweDsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KICB9DQoNCmJvZHkgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAxOHB4Ow0KICANCn0NCnA6bm90KGgxKTpub3QoaDIpOm5vdChoMyk6bm90KGg0KTpub3QoaDUpIHsNCiAgdGV4dC1pbmRlbnQ6IDJlbTt9DQpwIHsNCiAgdGV4dC1hbGlnbjoganVzdGlmeTsNCiAgfQ0KLnRvY2lmeS1oZWFkZXIgew0KICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KYGBgDQoNCi0tLQ0KDQpgYGB7cn0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KG5uZXQpDQpsaWJyYXJ5KHBzY2wpDQpsaWJyYXJ5KHBST0MpDQpsaWJyYXJ5KE1BU1MpDQpsaWJyYXJ5KGVwaXRvb2xzKQ0KbGlicmFyeShzdGFyZ2F6ZXIpDQpsaWJyYXJ5KHhsc3gpDQpgYGANCg0KLS0tDQoNCiMgKipM4bucSSBDQU0gxJBPQU4qKg0KDQpFbSB4aW4gY2FtIMSRb2FuIHLhurFuZyDEkeG7gSB0w6BpIOKAnFBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSBuaMOibiBraOG6qXUgaOG7jWMgdsOgIHTDrW4gZOG7pW5nIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZ+KAnSBsw6AgY8O0bmcgdHLDrG5oIG5naGnDqm4gY+G7qXUgZG8gY2jDrW5oIHTDtGkgdGjhu7FjIGhp4buHbi4gQ8OhYyBz4buRIGxp4buHdSwga+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggdsOgIGPDoWMgbmjhuq1uIMSR4buLbmggdHJvbmcgxJHhu4EgdMOgaSBsw6AgdHJ1bmcgdGjhu7FjLCBjw7MgY8ahIHPhu58ga2hvYSBo4buNYywgxJHGsOG7o2MgdGh1IHRo4bqtcCB2w6AgeOG7rSBsw70gdGhlbyDEkcO6bmcgcXV5IHRyw6xuaCBuZ2hpw6puIGPhu6l1LiBFbSBraOG6s25nIMSR4buLbmgga2jDtG5nIHNhbyBjaMOpcCwga2jDtG5nIHZpIHBo4bqhbSBi4bqjbiBxdXnhu4FuIGPhu6dhIGLhuqV0IGvhu7MgY8OhIG5ow6JuIGhheSB04buVIGNo4bupYyBuw6BvLiBN4buNaSB0csOtY2ggZOG6q24gdHJvbmcgxJHhu4EgdMOgaSDEkeG7gXUgxJHGsOG7o2MgZ2hpIHLDtSBuZ3Xhu5NuIGfhu5FjLiBFbSB4aW4gY2jhu4t1IGhvw6BuIHRvw6BuIHRyw6FjaCBuaGnhu4dtIHRyxrDhu5tjIG5ow6AgdHLGsOG7nW5nIHbhu4EgdMOtbmggdHJ1bmcgdGjhu7FjIHbDoCBuZ3V5w6puIGLhuqNuIGPhu6dhIG7hu5lpIGR1bmcgxJHhu4EgdMOgaSBuw6B5Lg0KDQotLS0NCg0KIyAqKkzhu5xJIEPhuqJNIMagTioqDQoNCg0KRW0geGluIGNow6JuIHRow6BuaCBj4bqjbSDGoW4gVGjhuqd5IFRy4bqnbiBN4bqhbmggVMaw4budbmcg4oCTIG5nxrDhu51pIMSRw6MgdOG6rW4gdMOsbmggaMaw4bubbmcgZOG6q24sIMSR4buLbmggaMaw4bubbmcgdsOgIGfDs3Agw70gY2h1ecOqbiBtw7RuIGdpw7pwIGVtIGhvw6BuIHRoaeG7h24gdGnhu4N1IGx14bqtbiDigJxQaMOibiB0w61jaCBjw6FjIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jIHbDoCB0w61uIGThu6VuZyDhuqNuaCBoxrDhu59uZyDEkeG6v24gcXV54bq/dCDEkeG7i25oIHZheSB0acOqdSBkw7luZyBj4bunYSBraMOhY2ggaMOgbmfigJ0gbeG7mXQgY8OhY2gga2hvYSBo4buNYyB2w6Agc8OhdCB24bubaSB0aOG7sWMgdGnhu4VuLiBFbSBjxaluZyB4aW4gZ+G7rWkgbOG7nWkgY+G6o20gxqFuIHPDonUgc+G6r2MgxJHhur9uIHF1w70gVGjhuqd5IEPDtCB0cm9uZyBraG9hIEtob2EgaOG7jWMgROG7ryBsaeG7h3Ug4oCTIFRyxrDhu51uZyDEkOG6oWkgaOG7jWMgVMOgaSBjaMOtbmgg4oCTIE1hcmtldGluZyDEkcOjIGdp4bqjbmcgZOG6oXksIHRydXnhu4FuIMSR4bqhdCBraeG6v24gdGjhu6ljIHbDoCB04bqhbyDEkWnhu4F1IGtp4buHbiB0aHXhuq1uIGzhu6NpIMSR4buDIGVtIGPDsyB0aOG7gyBob8OgbiB0aMOgbmggdOG7kXQgcXXDoSB0csOsbmggaOG7jWMgdOG6rXAgdsOgIG5naGnDqm4gY+G7qXUgY+G7p2EgbcOsbmguIEVtIHhpbiBjaMOibiB0aMOgbmggY+G6o20gxqFuIQ0KDQotLS0NCg0KIyAqKkNIxq/GoE5HIDE6IEdJ4buaSSBUSEnhu4ZVIMSQ4buAIFTDgEkqKg0KDQojIyAqKjEuMSBMw70gZG8gY2jhu41uIMSR4buBIHTDoGkqKg0KDQpUcm9uZyBi4buRaSBj4bqjbmggbuG7gW4ga2luaCB04bq/IFZp4buHdCBOYW0gbmfDoHkgY8OgbmcgcGjDoXQgdHJp4buDbiB2w6AgbeG7qWMgc+G7kW5nIG5nxrDhu51pIGTDom4gxJHGsOG7o2MgY+G6o2kgdGhp4buHbiByw7UgcuG7h3QsIG5odSBj4bqndSB2YXkgdGnDqnUgZMO5bmcgxJFhbmcgdHLhu58gdGjDoG5oIG3hu5l0IHh1IGjGsOG7m25nIHBo4buVIGJp4bq/biB2w6AgxJHDs25nIHZhaSB0csOyIG5nw6B5IGPDoG5nIHF1YW4gdHLhu41uZyB0cm9uZyB0w6BpIGNow61uaCBjw6EgbmjDom4uIFZheSB0acOqdSBkw7luZyBraMO0bmcgY2jhu4kgaOG7lyB0cuG7oyBuZ8aw4budaSBkw6JuIG7Dom5nIGNhbyBjaOG6pXQgbMaw4bujbmcgY3Xhu5ljIHPhu5FuZyBtw6AgY8OybiBnw7NwIHBo4bqnbiB0aMO6YyDEkeG6qXkgdMSDbmcgdHLGsOG7n25nIGtpbmggdOG6vyB0aMO0bmcgcXVhIHZp4buHYyBnaWEgdMSDbmcgc+G7qWMgbXVhLCBrw61jaCB0aMOtY2ggdGnDqnUgZMO5bmcgbuG7mWkgxJHhu4thLiBUdXkgbmhpw6puLCBraMO0bmcgcGjhuqNpIG3hu41pIGPDoSBuaMOibiDEkeG7gXUgY8OzIHh1IGjGsOG7m25nIGhv4bq3YyBraOG6oyBuxINuZyB0aeG6v3AgY+G6rW4gdMOtbiBk4bulbmcgdGnDqnUgZMO5bmcgbmjGsCBuaGF1LiBDw6FjIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jIG5oxrAgZ2nhu5tpIHTDrW5oLCDEkeG7mSB0deG7lWksIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIHbDoCBuZ2jhu4EgbmdoaeG7h3AgY8OzIHRo4buDIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biBuaOG6rW4gdGjhu6ljLCDEkeG7mW5nIGPGoSBjxaluZyBuaMawIGjDoG5oIHZpIHZheSB24buRbiBj4bunYSBraMOhY2ggaMOgbmcuIFZp4buHYyBoaeG7g3UgcsO1IGPDoWMgxJHhurdjIMSRaeG7g20gbsOgeSBz4bq9IGN1bmcgY+G6pXAgY8ahIHPhu58ga2hvYSBo4buNYyBjaG8gdmnhu4djIGThu7EgxJFvw6FuIGjDoG5oIHZpIHTDoGkgY2jDrW5oLCDEkeG7k25nIHRo4budaSBnacO6cCBjw6FjIHThu5UgY2jhu6ljIHTDrW4gZOG7pW5nIHThu5FpIMawdSBow7NhIGNoaeG6v24gbMaw4bujYyBz4bqjbiBwaOG6qW0sIHRp4bq/cCB0aOG7iyB2w6AgcXXhuqNuIHRy4buLIHLhu6dpIHJvLg0KDQpUcsOqbiB0aOG7sWMgdOG6vywgbmhp4buBdSB04buVIGNo4bupYyB0w61uIGThu6VuZyB24bqrbiDEkWFuZyDDoXAgZOG7pW5nIGPDoWMgY2jDrW5oIHPDoWNoIHTDrW4gZOG7pW5nIHTGsMahbmcgxJHhu5FpIMSR4buTbmcgbmjhuqV0IGNobyBt4buNaSDEkeG7kWkgdMaw4bujbmcga2jDoWNoIGjDoG5nLCBk4bqrbiDEkeG6v24gdmnhu4djIGLhu48gbOG7oSBjxqEgaOG7mWkgdGnhur9wIGPhuq1uIGhp4buHdSBxdeG6oyBjw6FjIHBow6JuIGtow7pjIHRp4buBbSBuxINuZy4gTmdvw6BpIHJhLCB0w6xuaCB0cuG6oW5nIHTDrW4gZOG7pW5nIGPhu6dhIGtow6FjaCBow6BuZyDigJMgxJHhurdjIGJp4buHdCBsw6AgbOG7i2NoIHPhu60gbuG7oyB44bqldSDigJMgY8WpbmcgbMOgIG3hu5l0IHnhur91IHThu5EgcXVhbiB0cuG7jW5nIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyB0aeG6v3AgY+G6rW4gdmF5IHbhu5FuLCBuaMawbmcgduG6q24gY2jGsGEgxJHGsOG7o2MgdMOtY2ggaOG7o3AgxJHhuqd5IMSR4bunIHbDoG8gY8OhYyBtw7QgaMOsbmggcGjDom4gdMOtY2ggaMOgbmggdmkgdmF5IHRpw6p1IGTDuW5nLiBYdeG6pXQgcGjDoXQgdOG7qyBuaOG7r25nIGzDvSBkbyB0csOqbiwgxJHhu4EgdMOgaSDigJxQaMOibiB0w61jaCBjw6FjIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jIHbDoCB0w61uIGThu6VuZyDhuqNuaCBoxrDhu59uZyDEkeG6v24gcXV54bq/dCDEkeG7i25oIHZheSB0acOqdSBkw7luZyBj4bunYSBraMOhY2ggaMOgbmfigJ0gxJHGsOG7o2MgbOG7sWEgY2jhu41uIHbhu5tpIGvhu7MgduG7jW5nIG1hbmcgbOG6oWkgbmjhu69uZyBwaMOhdCBoaeG7h24gY8OzIGdpw6EgdHLhu4sgY2hvIGPhuqMgbMSpbmggduG7sWMgbmdoacOqbiBj4bupdSB2w6AgdGjhu7FjIHRp4buFbiBob+G6oXQgxJHhu5luZyB0w61uIGThu6VuZyB0acOqdSBkw7luZyB04bqhaSBWaeG7h3QgTmFtLg0KDQoNCg0KIyMgKioxLjIgTeG7pWMgdGnDqnUgdsOgIGPDonUgaOG7j2kgbmdoacOqbiBj4bupdSoqDQoNCiMjIyAqKjEuMi4xIE3hu6VjIHRpw6p1IG5naGnDqm4gY+G7qXUqKg0KDQpN4bulYyB0acOqdSBj4bunYSDEkeG7gSB0w6BpIGzDoCBwaMOibiB0w61jaCBjw6FjIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZy4gQ+G7pSB0aOG7gywgbmdoacOqbiBj4bupdSB04bqtcCB0cnVuZyB2w6BvIHZp4buHYyBtw7QgdOG6oyDEkeG6t2MgxJFp4buDbSBuaMOibiBraOG6qXUgaOG7jWMgY+G7p2Ega2jDoWNoIGjDoG5nIHRyb25nIHThuq1wIGThu68gbGnhu4d1IGto4bqjbyBzw6F0LCDEkeG7k25nIHRo4budaSB4w6FjIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBjw6FjIHnhur91IHThu5EgbmjGsCBnaeG7m2kgdMOtbmgsIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuLCBuZ2jhu4EgbmdoaeG7h3AsIHTDrG5oIHRy4bqhbmcgdmF5IG11YSBuaMOgIHbDoCB2YXkgbuG7oyB0w61uIGThu6VuZyB24bubaSBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcuIFRyw6puIGPGoSBz4bufIMSRw7MsIMSR4buBIHTDoGkgdGnhur9uIGjDoG5oIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIHThu6tuZyB54bq/dSB04buRIMSR4bq/biB4dSBoxrDhu5tuZyB2YXkgdGnDqnUgZMO5bmcsIG5o4bqxbSBsw6BtIHLDtSBuaMOzbSDEkeG7kWkgdMaw4bujbmcgbsOgbyBjw7Mga2jhuqMgbsSDbmcgdmF5IGNhbyBoxqFuLiBDdeG7kWkgY8O5bmcsIHThu6sgbmjhu69uZyBwaMOhdCBoaeG7h24gdGjhu7FjIG5naGnhu4dtLCBuZ2hpw6puIGPhu6l1IMSR4buBIHh14bqldCBt4buZdCBz4buRIGtodXnhur9uIG5naOG7iyBj4bulIHRo4buDIGTDoG5oIGNobyBjw6FjIHThu5UgY2jhu6ljIHTDrW4gZOG7pW5nIHRyb25nIHZp4buHYyBwaMOhdCB0cmnhu4NuIHPhuqNuIHBo4bqpbSB0w6BpIGNow61uaCBwaMO5IGjhu6NwLCBuw6JuZyBjYW8gaGnhu4d1IHF14bqjIHRp4bq/cCBj4bqtbiB2w6AgcXXhuqNuIGzDvSBraMOhY2ggaMOgbmcgbeG7pWMgdGnDqnUuDQoNCiMjIyAqKjEuMi4yIEPDonUgaOG7j2kgbmdoacOqbiBj4bupdSoqDQoNCi0gQ8OhYyDEkeG6t2MgxJFp4buDbSBuaMOibiBraOG6qXUgaOG7jWMgdsOgIHTDrW4gZOG7pW5nIG7DoG8gY8OzIG3hu5FpIGxpw6puIGjhu4cgxJHDoW5nIGvhu4MgduG7m2kgcXV54bq/dCDEkeG7i25oIHZheSB0acOqdSBkw7luZyBj4bunYSBraMOhY2ggaMOgbmc/DQoNCi0gTmdo4buBIG5naGnhu4dwLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiB2w6AgdMOsbmggdHLhuqFuZyBu4bujIHTDrW4gZOG7pW5nIOG6o25oIGjGsOG7n25nIG5oxrAgdGjhur8gbsOgbyDEkeG6v24ga2jhuqMgbsSDbmcgdmF5IHRpw6p1IGTDuW5nPw0KDQotIE5ow7NtIG5ow6JuIGto4bqpdSBo4buNYyBuw6BvIGPDsyB4dSBoxrDhu5tuZyB2YXkgdGnDqnUgZMO5bmcgY2FvIGjGoW4gaG/hurdjIHRo4bqlcCBoxqFuIHNvIHbhu5tpIGPDoWMgbmjDs20ga2jDoWM/DQoNCg0KIyMgKioxLjMgxJDhu5FpIHTGsOG7o25nIHbDoCBwaOG6oW0gdmkgbmdoacOqbiBj4bupdSoqDQoNCiMjIyAqKjEuMy4xIMSQ4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1KiogDQoNCsSQ4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1IGPhu6dhIMSR4buBIHTDoGkgbMOgIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZyBj4bunYSBraMOhY2ggaMOgbmcgY8OhIG5ow6JuLCBj4bulIHRo4buDIGzDoCBxdXnhur90IMSR4buLbmggY8OzIGhv4bq3YyBraMO0bmcgdmF5IHRpw6p1IGTDuW5nLCDEkcaw4bujYyDEkW8gbMaw4budbmcgdGjDtG5nIHF1YSBiaeG6v24gxJHhu4tuaCB0w61uaCBuaOG7iyBwaMOibiB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBraOG6o28gc8OhdC4gQsOqbiBj4bqhbmggxJHDsywgxJHhu4EgdMOgaSB4ZW0geMOpdCBjw6FjIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jIGJhbyBn4buTbSBnaeG7m2kgdMOtbmgsIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuLCBuZ2jhu4EgbmdoaeG7h3AsIHTDrG5oIHRy4bqhbmcgdmF5IG11YSBuaMOgIHbDoCB2YXkgbuG7oyB0w61uIGThu6VuZyDEkcaw4bujYyBnaeG6oyDEkeG7i25oIGzDoCBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgY8OzIGto4bqjIG7Eg25nIOG6o25oIGjGsOG7n25nIMSR4bq/biBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcuDQoNCiMjIyAqKjEuMy4yIFBo4bqhbSB2aSBuZ2hpw6puIGPhu6l1KioNCg0KLSAqVuG7gSBu4buZaSBkdW5nOiogVOG6rXAgdHJ1bmcgcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSDEkeG6t2MgxJFp4buDbSBuaMOibiBraOG6qXUgaOG7jWMgdsOgIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZyBjw6EgbmjDom4sIGtow7RuZyDEkWkgc8OidSB2w6BvIGPDoWMgeeG6v3UgdOG7kSB0w6BpIGNow61uaCBob+G6t2MgdMOtbiBk4bulbmcgY+G7pSB0aOG7gyBuaMawIHRodSBuaOG6rXAsIMSRaeG7g20gdMOtbiBk4bulbmcgaGF5IGto4bqjIG7Eg25nIHRy4bqjIG7hu6MuDQotICpW4buBIGtow7RuZyBnaWFuOiogTmdoacOqbiBj4bupdSBz4butIGThu6VuZyBk4buvIGxp4buHdSBraOG6o28gc8OhdCB04burIGtow6FjaCBow6BuZyBwaOG6oW0gdmkgdHJvbmcgbeG7mXQgbsaw4bubYy4NCg0KIyMgKioxLjQgUGjGsMahbmcgcGjDoXAgbmdoacOqbiBj4bupdSoqDQoNClRyb25nIG5naGnDqm4gY+G7qXUgbsOgeSwgcGjGsMahbmcgcGjDoXAgxJHhu4tuaCBsxrDhu6NuZyDEkcaw4bujYyBz4butIGThu6VuZyBuaOG6sW0gcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBjw6FjIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jIHbDoCB0w61uIGThu6VuZyAoZ2nhu5tpIHTDrW5oLCDEkeG7mSB0deG7lWksIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuLCB0aHUgbmjhuq1wLCB2LnYuKSB24bubaSBxdXnhur90IMSR4buLbmggdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZy4NCg0KLSDEkOG6p3UgdGnDqm4sIGThu68gbGnhu4d1IMSRxrDhu6NjIHjhu60gbMO9IHbDoCB0csOsbmggYsOgeSB0aMO0bmcgcXVhIHRo4buRbmcga8OqIG3DtCB04bqjIMSRxqFuIGJp4bq/biB2w6AgcGjDom4gdMOtY2ggYuG6o25nIHThuqduIHPhu5EgxJHhu4MgbMOgbSByw7UgxJHhurdjIMSRaeG7g20gdOG7lW5nIHF1YW4gY+G7p2EgbeG6q3UgbmdoacOqbiBj4bupdS4gDQotIFRp4bq/cCB0aGVvLCBraeG7g20gxJHhu4tuaCBDaGktYsOsbmggcGjGsMahbmcgxJHGsOG7o2Mgw6FwIGThu6VuZyBuaOG6sW0geMOhYyDEkeG7i25oIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHThu6tuZyBiaeG6v24gxJHhu5ljIGzhuq1wIHbDoCBiaeG6v24gcGjhu6UgdGh14buZYyAocXV54bq/dCDEkeG7i25oIHZheSkuIA0KLSBOaOG7r25nIGJp4bq/biBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHPhur0gxJHGsOG7o2MgY2jhu41uIMSRxrBhIHbDoG8gcGjDom4gdMOtY2ggaOG7k2kgcXV5IG5o4buLIHBow6JuIGLhurFuZyBi4buRbiBtw7QgaMOsbmg6ICgxKSBI4buTaSBxdXkgbG9naXN0aWMsICgyKSBI4buTaSBxdXkgcHJvYml0LCAoMykgSOG7k2kgcXV5IGNsb2dsb2csIHbDoCAoNCkgTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggKExQTSkuIA0KLSBN4buXaSBtw7QgaMOsbmggxJHhu4F1IMSRxrDhu6NjIHRyaeG7g24ga2hhaSB0aGVvIGhhaSBixrDhu5tjOiBwaMOibiB0w61jaCDEkcahbiBiaeG6v24gdsOgIMSRYSBiaeG6v24uIEvhur90IHF14bqjIGjhu5NpIHF1eSDEkcaw4bujYyB0csOsbmggYsOgeSBkxrDhu5tpIGThuqFuZyBo4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nLCBzYWkgc+G7kSBjaHXhuqluLCBnacOhIHRy4buLIHAgdsOgIMSR4buZIHRpbiBj4bqteSwgcXVhIMSRw7MgxJHDoW5oIGdpw6EgaMaw4bubbmcgdsOgIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIHThu6tuZyBiaeG6v24gxJHhu5ljIGzhuq1wIMSR4bq/biB4w6FjIHN14bqldCB2YXkuIA0KLSBTYXUgY8O5bmcsIMSR4buDIHNvIHPDoW5oIGhp4buHdSBxdeG6oyBnaeG7r2EgY8OhYyBtw7QgaMOsbmgsIG5naGnDqm4gY+G7qXUgc+G7rSBk4bulbmcgY8OhYyB0acOqdSBjaMOtIMSRw6FuaCBnacOhIGfhu5NtIGNo4buJIHPhu5EgQUlDIChBa2Fpa2UgSW5mb3JtYXRpb24gQ3JpdGVyaW9uKSwgxJHGsOG7nW5nIGNvbmcgUk9DIChSZWNlaXZlciBPcGVyYXRpbmcgQ2hhcmFjdGVyaXN0aWMpIHbDoCBtYSB0cuG6rW4gbmjhuqdtIGzhuqtuLiANCg0KIyMgKioxLjUgS+G6v3QgY+G6pXUgY+G7p2EgxJHhu4EgdMOgaSoqDQoNCk5nb8OgaSBt4bulYyBs4bulYywgZGFuaCBt4bulYyBjaOG7ryB2aeG6v3QgdOG6r3QsIGRhbmggbeG7pWMgaMOsbmgg4bqjbmggdsOgIGLhuqNuZyBiaeG7g3UsIHBo4bulIGzhu6VjIGPDuW5nIHTDoGkgbGnhu4d1IHRoYW0ga2jhuqNvIMSR4buBIHTDoGkgxJHGsOG7o2MgY2hpYSB0aMOgbmggYmEgY2jGsMahbmcgY2jDrW5oOg0KDQoqKkNoxrDGoW5nIDE6IEdp4bubaSB0aGnhu4d1IMSR4buBIHTDoGkqKg0KDQpUcsOsbmggYsOgeSBi4buRaSBj4bqjbmgsIGzDvSBkbyBjaOG7jW4gxJHhu4EgdMOgaSwgbeG7pWMgdGnDqnUgdsOgIGPDonUgaOG7j2kgbmdoacOqbiBj4bupdSwgxJHhu5FpIHTGsOG7o25nIHBo4bqhbSB2aSBuZ2hpw6puIGPhu6l1LCBwaMawxqFuZyBwaMOhcCB2w6Aga+G6v3QgY+G6pXUgY+G7p2EgxJHhu4EgdMOgaS4NCg0KKipDaMawxqFuZyAyOiBDxqEgc+G7nyBsw70gdGh1eeG6v3QgdsOgIHBoxrDGoW5nIHBow6FwIG5naGnDqm4gY+G7qXUqKg0KDQpU4buVbmcgaOG7o3AgY8OhYyBraMOhaSBuaeG7h20sIGzDvSB0aHV54bq/dCBsacOqbiBxdWFuIMSR4bq/biBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcgdsOgIMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYy4gVHLDrG5oIGLDoHkgY8OhYyBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiB2w6AgbcO0IGjDrG5oIMSR4buLbmggbMaw4bujbmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgcGjDom4gdMOtY2guDQoNCioqQ2jGsMahbmcgMzogS+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdSoqDQoNClBow6JuIHTDrWNoIGThu68gbGnhu4d1IHRo4buxYyBuZ2hp4buHbSwgdHLDrG5oIGLDoHkga+G6v3QgcXXhuqMgdOG7qyBjw6FjIHBoxrDGoW5nIHBow6FwIHRo4buRbmcga8OqIHbDoCBtw7QgaMOsbmggaOG7k2kgcXV5LCDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIHnhur91IHThu5EsIHbDoCDEkeG7gSB4deG6pXQgbeG7mXQgc+G7kSBraHV54bq/biBuZ2jhu4sgdGjhu7FjIHRp4buFbi4NCg0KLS0tDQoNCiMgKipDSMavxqBORyAyOiBDxqAgU+G7niBMw50gVEhVWeG6vlQgVsOAIFBIxq/GoE5HIFBIw4FQIE5HSEnDik4gQ+G7qFUqKg0KDQojIyAqKjIuMSBMw70gdGh1eeG6v3QgduG7gSBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcqKg0KDQpWYXkgdGnDqnUgZMO5bmcgbMOgIG3hu5l0IGThuqFuZyBow6BuaCB2aSB0w6BpIGNow61uaCB0cm9uZyDEkcOzIGPDoSBuaMOibiBz4butIGThu6VuZyBjw6FjIGjDrG5oIHRo4bupYyB0w61uIGThu6VuZyDEkeG7gyB0w6BpIHRy4bujIGNobyBuaHUgY+G6p3UgY2hpIHRpw6p1IGPDoSBuaMOibiBuaMawIG11YSBz4bqvbSwgaOG7jWMgdOG6rXAsIHNpbmggaG/huqF0IGhv4bq3YyBjw6FjIG3hu6VjIMSRw61jaCBraMO0bmcgbWFuZyB0w61uaCBz4bqjbiB4deG6pXQuIMSQw6J5IGzDoCBob+G6oXQgxJHhu5luZyBwaOG7lSBiaeG6v24gdHJvbmcgbuG7gW4ga2luaCB04bq/IGhp4buHbiDEkeG6oWksIGfDs3AgcGjhuqduIHRow7pjIMSR4bqpeSB0acOqdSBkw7luZyBo4buZIGdpYSDEkcOsbmggdsOgIGzGsHUgY2h1eeG7g24gZMOybmcgduG7kW4gdHJvbmcgeMOjIGjhu5lpLg0KDQpRdXnhur90IMSR4buLbmggdmF5IHRpw6p1IGTDuW5nIGPhu6dhIG3hu5l0IGPDoSBuaMOibiBraMO0bmcgY2jhu4kgcGjhu6UgdGh14buZYyB2w6BvIMSRaeG7gXUga2nhu4duIHTDoGkgY2jDrW5oIGhp4buHbiB04bqhaSBtw6AgY8OybiBi4buLIGNoaSBwaOG7kWkgYuG7n2kgbmhp4buBdSB54bq/dSB04buRIHBoaSB0w6BpIGNow61uaCwgdHJvbmcgxJHDsyDEkcOhbmcgY2jDuiDDvSBsw6AgY8OhYyDEkeG6t2MgxJFp4buDbSBuaMOibiBraOG6qXUgaOG7jWMuIEPDoWMgeeG6v3UgdOG7kSBuaMawIGdp4bubaSB0w61uaCwgxJHhu5kgdHXhu5VpLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiB2w6Agbmdo4buBIG5naGnhu4dwIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24gdGjDoWkgxJHhu5kgxJHhu5FpIHbhu5tpIHLhu6dpIHJvIHTDoGkgY2jDrW5oLCBraOG6oyBuxINuZyB0aeG6v3AgY+G6rW4gdMOtbiBk4bulbmcgY8WpbmcgbmjGsCBuaHUgY+G6p3UgdmF5IHbhu5FuIHRyb25nIHThu6tuZyBnaWFpIMSRb+G6oW4gY+G7p2EgY3Xhu5ljIHPhu5FuZy4gVmnhu4djIG5naGnDqm4gY+G7qXUgdmFpIHRyw7IgY+G7p2EgY8OhYyB54bq/dSB04buRIG5ow6JuIGto4bqpdSBo4buNYyDEkeG7kWkgduG7m2kgaMOgbmggdmkgdmF5IHRpw6p1IGTDuW5nIGzDoCBjxqEgc+G7nyBxdWFuIHRy4buNbmcgxJHhu4MgaGnhu4N1IHLDtSBoxqFuIHbhu4EgaMOgbmggdmkgdMOgaSBjaMOtbmggY8OhIG5ow6JuIHbDoCDEkcawYSByYSBjw6FjIGNow61uaCBzw6FjaCB0w61uIGThu6VuZyBwaMO5IGjhu6NwIHRoZW8gdOG7q25nIHBow6JuIGtow7pjIGtow6FjaCBow6BuZy4NCg0KQ8OhYyDEkeG6t2MgxJFp4buDbSBuaMOibiBraOG6qXUgaOG7jWMgdsOgIHTDrW4gZOG7pW5nIMSRw7NuZyB2YWkgdHLDsiBxdWFuIHRy4buNbmcgdHJvbmcgdmnhu4djIGzDvSBnaeG6o2kgc+G7sSBraMOhYyBiaeG7h3QgdHJvbmcgaMOgbmggdmkgdmF5IHRpw6p1IGTDuW5nIGdp4buvYSBjw6FjIGPDoSBuaMOibiBob+G6t2MgbmjDs20geMOjIGjhu5lpLiBUcm9uZyBuZ2hpw6puIGPhu6l1IG7DoHksIGPDoWMgeeG6v3UgdOG7kSBiYW8gZ+G7k206DQoNCi0gKipOZ2jhu4EgbmdoaeG7h3AgKGBqb2JgKSoqOiBUaOG7gyBoaeG7h24ga2jhuqMgbsSDbmcgdOG6oW8gdGh1IG5o4bqtcCB2w6AgbeG7qWMgxJHhu5kg4buVbiDEkeG7i25oIHTDoGkgY2jDrW5oLiBOZ8aw4budaSBjw7Mgbmdo4buBIG5naGnhu4dwIOG7lW4gxJHhu4tuaCB0aMaw4budbmcgZOG7hSDEkcaw4bujYyBwaMOqIGR1eeG7h3QgdMOtbiBk4bulbmcgaMahbi4NCi0gKipUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gKGBtYXJpdGFsYCkqKjogTmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIHRoxrDhu51uZyBjw7Mgbmh1IGPhuqd1IGNoaSB0acOqdSBjYW8gaMahbiB2w6AgeHUgaMaw4bubbmcgdmF5IMSR4buDIHBo4bulYyB24bulIG3hu6VjIMSRw61jaCBjaHVuZyBuaMawIG5ow6Ag4bufLCBjb24gY8OhaS4NCi0gKipUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gKGBlZHVjYXRpb25gKSoqOiBUw6FjIMSR4buZbmcgxJHhur9uIGto4bqjIG7Eg25nIGhp4buDdSBiaeG6v3QgdMOgaSBjaMOtbmggdsOgIHRp4bq/cCBj4bqtbiBjw6FjIHPhuqNuIHBo4bqpbSB0w61uIGThu6VuZyBwaMO5IGjhu6NwLg0KLSAqKlTDrG5oIHRy4bqhbmcgbuG7oyBxdcOhIGjhuqFuIChgZGVmYXVsdGApKio6IFBo4bqjbiDDoW5oIGzhu4tjaCBz4butIHTDrW4gZOG7pW5nIHbDoCBraOG6oyBuxINuZyB0dcOibiB0aOG7pyBuZ2jEqWEgduG7pSB0w6BpIGNow61uaC4NCi0gKipUw6xuaCB0cuG6oW5nIHZheSBtdWEgbmjDoCAoYGhvdXNpbmdgKSoqOiBDw7MgdGjhu4MgxJHhuqFpIGRp4buHbiBjaG8gY2FtIGvhur90IHTDoGkgY2jDrW5oIGTDoGkgaOG6oW4sIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyBob+G6t2Mgbmh1IGPhuqd1IHZheSB0acOqdSBkw7luZyBi4buVIHN1bmcuDQoNCiMjICoqMi4yIE3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4qKg0KDQpNw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIGzDoCBjw7RuZyBj4bulIHBo4buVIGJp4bq/biDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBwaMOibiB0w61jaCB2w6AgZOG7sSBiw6FvIHjDoWMgc3XhuqV0IHjhuqN5IHJhIGPhu6dhIG3hu5l0IHPhu7Ega2nhu4duIG5o4buLIHBow6JuLCB0cm9uZyDEkcOzIGJp4bq/biBwaOG7pSB0aHXhu5ljIGNo4buJIG5o4bqtbiBnacOhIHRy4buLIDAgaG/hurdjIDEuIFRyb25nIGLhu5FpIGPhuqNuaCBuZ2hpw6puIGPhu6l1IG7DoHksIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcgY+G7p2Ega2jDoWNoIGjDoG5nICgxID0gY8OzIHZheSwgMCA9IGtow7RuZyB2YXkpLiBN4bulYyB0acOqdSBj4bunYSBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gbMOgIMaw4bubYyBsxrDhu6NuZyB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiAkWT0xJCBk4buxYSB0csOqbiBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgJFhfMSwgWF8yLCBcZG90cywgWF9rJC4NCg0KROG6oW5nIHThu5VuZyBxdcOhdCBj4bunYSBtw7QgaMOsbmg6DQoNCiQkDQpQKFkgPSAxfFgpID0gRyhYXGJldGEpDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotICRHKC4pJCBsw6AgaMOgbSBsacOqbiBr4bq/dCAobGluayBmdW5jdGlvbiksIHjDoWMgxJHhu4tuaCBsb+G6oWkgbcO0IGjDrG5oIGPhu6UgdGjhu4MNCi0gJFgkIGzDoCB2ZWN0b3IgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIChwcmVkaWN0b3JzKQ0KLSAkXGJldGEkIGzDoCB2ZWN0b3IgaOG7hyBz4buRIGjhu5NpIHF1eSBj4bqnbiDGsOG7m2MgbMaw4bujbmcNCg0KIyMjICoqMi4yLjEgTcO0IGjDrG5oIExvZ2lzdGljIChMb2dpdCkqKg0KDQpT4butIGThu6VuZyBow6BtIGxvZ2lzdGljOg0KDQokJA0KUChZPTF8WCkgPSBcZnJhY3tlXntYXGJldGF9fXsxICsgZV57WFxiZXRhfX0NCiQkDQoNCkjDoG0gbG9naXQgZ2nhu68geMOhYyBzdeG6pXQgdHJvbmcga2hv4bqjbmcgKDAsMSkgdsOgIGjhu4cgc+G7kSAkXGJldGEkIMSRxrDhu6NjIGRp4buFbiBnaeG6o2kgdGjDtG5nIHF1YSBsb2coT2RkcyBSYXRpbykuDQoNCiMjIyAqKjIuMi4yIE3DtCBow6xuaCBQcm9iaXQqKg0KDQpT4butIGThu6VuZyBow6BtIHBow6JuIHBo4buRaSB0w61jaCBsxal5IGNodeG6qW4gaMOzYToNCg0KJCQNClAoWT0xfFgpID0gXFBoaShYXGJldGEpDQokJA0KDQpQaMO5IGjhu6NwIHRyb25nIGPDoWMgdHLGsOG7nW5nIGjhu6NwIGThu68gbGnhu4d1IGdp4bqjIMSR4buLbmggY8OzIHBow6JuIHBo4buRaSBjaHXhuqluIOG7nyBzYWkgc+G7kS4NCg0KIyMjICoqMi4yLjMgTcO0IGjDrG5oIENvbXBsZW1lbnRhcnkgbG9nLWxvZyAoQ2xvZ2xvZykqKg0KDQpT4butIGThu6VuZyBow6BtOg0KDQokJA0KUChZPTF8WCkgPSAxIC0gZV57LWVee1hcYmV0YX19DQokJA0KDQpQaMO5IGjhu6NwIGtoaSB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBn4bqnbiBi4bqxbmcgMCBob+G6t2MgZ+G6p24gYuG6sW5nIDEuDQoNCiMjIyAqKjIuMi40IE3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIChMTVApKioNCg0KTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggbMOgIG3hu5l0IHRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0IGPhu6dhICoqTcO0IGjDrG5oIFR1eeG6v24gdMOtbmggVOG7lW5nIHF1w6F0KiogKCpHZW5lcmFsaXplZCBMaW5lYXIgTW9kZWwgLSBHTE0qKSwgdHJvbmcgxJHDsyBow6BtIGxpw6puIGvhur90IGzDoCAqKmjDoG0gxJHhu5NuZyBuaOG6pXQqKiAoKmlkZW50aXR5IGxpbmsgZnVuY3Rpb24qKS4gQ8O0bmcgdGjhu6ljIG3DtCBow6xuaCDEkcaw4bujYyBiaeG7g3UgZGnhu4VuIG5oxrAgc2F1Og0KDQokJA0KUChZID0gMSBcbWlkIFgpID0gWFxiZXRhDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIFkgXCkgbMOgIGJp4bq/biBwaOG6o24gaOG7k2kgbmjhu4sgcGjDom4gKGdpw6EgdHLhu4sgMCBob+G6t2MgMSksDQotIFwoIFggXCkgbMOgIG1hIHRy4bqtbiBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAsDQotIFwoIFxiZXRhIFwpIGzDoCB2ZWN0b3IgY8OhYyBo4buHIHPhu5EgaOG7k2kgcXV5Lg0KDQpNw7QgaMOsbmggbsOgeSBjaG8gcGjDqXAgZGnhu4VuIGdp4bqjaSB0cuG7sWMgdGnhur9wIHjDoWMgc3XhuqV0IHjhuqN5IHJhIHPhu7Ega2nhu4duIFwoIFkgPSAxIFwpIG5oxrAgbeG7mXQgaMOgbSB0dXnhur9uIHTDrW5oIGPhu6dhIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggXCggWCBcKS4NCg0Kxq91IMSRaeG7g20gY+G7p2EgbcO0IGjDrG5oIG7DoHkgbMOgIMSRxqFuIGdp4bqjbiwgZOG7hSDGsOG7m2MgbMaw4bujbmcgYuG6sW5nIHBoxrDGoW5nIHBow6FwIE9MUyB2w6AgZOG7hSBkaeG7hW4gZ2nhuqNpLiBUdXkgbmhpw6puLCB2w6wgZ2nDoSB0cuG7iyBk4buxIGLDoW8gY8OzIHRo4buDIG7hurFtIG5nb8OgaSBraG/huqNuZyBbMCwgMV0sIG3DtCBow6xuaCBuw6B5IHRoxrDhu51uZyBraMO0bmcgxJHhuqNtIGLhuqNvIMO9IG5naMSpYSB4w6FjIHN14bqldC4gxJBp4buBdSBuw6B5IGThuqtuIMSR4bq/biB2aSBwaOG6oW0gZ2nhuqMgxJHhu4tuaCB2w6AgxJHhu5kgY2jDrW5oIHjDoWMgdGjhuqVwIGtoaSBk4buxIMSRb8OhbiBow6BuaCB2aSBuaOG7iyBwaMOibi4NCg0KVHJvbmcgR0xNLCBtw7QgaMOsbmggeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaCB24bqrbiDEkcaw4bujYyBz4butIGThu6VuZyBuaMawIG3hu5l0IGLGsOG7m2MgdGhhbSBjaGnhur91IGJhbiDEkeG6p3UgxJHhu4Mgc28gc8OhbmggduG7m2kgY8OhYyBtw7QgaMOsbmggbG9naXQsIHByb2JpdCBob+G6t2MgY2xvZ2xvZy4gDQoNCiMjIyAqKjIuMi41IFBoxrDGoW5nIHBow6FwIMaw4bubYyBsxrDhu6NuZzogTWF4aW11bSBMaWtlbGlob29kIEVzdGltYXRpb24gKE1MRSkqKg0KDQpDw6FjIG3DtCBow6xuaCBuaOG7iyBwaMOibiBuaMawIGxvZ2l0LCBwcm9iaXQgdsOgIGNsb2dsb2cgxJHhu4F1IMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBi4bqxbmcgcGjGsMahbmcgcGjDoXAgKirGsOG7m2MgbMaw4bujbmcgaOG7o3AgbMO9IHThu5FpIMSRYSAoTUxFKSoqLiDEkMOieSBsw6AgcGjGsMahbmcgcGjDoXAgdMOsbSBnacOhIHRy4buLIHRoYW0gc+G7kSAkXGJldGEkIHNhbyBjaG8geMOhYyBzdeG6pXQgdOG6oW8gcmEgZOG7ryBsaeG7h3UgcXVhbiBzw6F0IGzDoCBjYW8gbmjhuqV0LiBUcm9uZyBHTE1zLCBow6BtIGjhu6NwIGzDvSDEkcaw4bujYyB4w6J5IGThu7FuZyBk4buxYSB0csOqbiBwaMOibiBwaOG7kWkgbmjhu4sgdGjhu6ljIHbDoCB04buRaSDGsHUgaMOzYSBi4bqxbmcgY8OhYyB0aHXhuq10IHRvw6FuIG5oxrAgTmV3dG9uLVJhcGhzb24uDQoNClRyb25nIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiB0aHXhu5ljIGjhu40gR0xNIG5oxrAgbG9naXQsIHByb2JpdCB2w6AgY2xvZ2xvZywgdGhhbSBz4buRICRcYmV0YSQga2jDtG5nIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBi4bqxbmcgcGjGsMahbmcgcGjDoXAgYsOsbmggcGjGsMahbmcgdOG7kWkgdGhp4buDdSBuaMawIHRyb25nIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIGPhu5UgxJFp4buDbiwgbcOgIHRoYXkgdsOgbyDEkcOzIHPhu60gZOG7pW5nIHBoxrDGoW5nIHBow6FwIMaw4bubYyBsxrDhu6NuZyBo4bujcCBsw70gdOG7kWkgxJFhIChNYXhpbXVtIExpa2VsaWhvb2QgRXN0aW1hdGlvbiAtIE1MRSkuDQoNClBoxrDGoW5nIHBow6FwIE1MRSB0w6xtIHThuq1wIGdpw6EgdHLhu4sgY+G7p2EgJFxiZXRhJCBzYW8gY2hvICoqaMOgbSBo4bujcCBsw70gKGxpa2VsaWhvb2QgZnVuY3Rpb24pKiogxJHhuqF0IGPhu7FjIMSR4bqhaSDigJMgbmdoxKlhIGzDoCwga2jhuqMgbsSDbmcgdOG6oW8gcmEgYuG7mSBk4buvIGxp4buHdSBxdWFuIHPDoXQgdOG7qyBtw7QgaMOsbmggbMOgIGNhbyBuaOG6pXQuIEjDoG0gaOG7o3AgbMO9IHRyb25nIHRyxrDhu51uZyBo4bujcCBuaOG7iyBwaMOibiBk4buxYSB0csOqbiBwaMOibiBwaOG7kWkgbmjhu4sgdGjhu6ljOg0KDQokJA0KTChcYmV0YSkgPSBccHJvZF97aT0xfV57bn0gW1BfaV1ee3lfaX0gWzEgLSBQX2ldXnsxIC0geV9pfSwgXHF1YWQgXHRleHR7dHJvbmcgxJHDsyB9IFBfaSA9IEcoWF9pXGJldGEpDQokJA0KDQrEkOG7gyDEkcahbiBnaeG6o24gaMOzYSB0w61uaCB0b8OhbiwgdGEgbOG6pXkgbG9nIGPhu6dhIGjDoG0gaOG7o3AgbMO9IMSR4buDIGPDsyAqKmxvZy1saWtlbGlob29kKio6DQoNCiQkDQpcbG9nIEwoXGJldGEpID0gXHN1bV97aT0xfV57bn0gXGxlZnRbIHlfaSBcbG9nIFBfaSArICgxIC0geV9pKSBcbG9nKDEgLSBQX2kpIFxyaWdodF0NCiQkDQoNCkdp4bqjaSBiw6BpIHRvw6FuIHThu5FpIMSRYSBow7NhIGxvZy1saWtlbGlob29kIGLhurFuZyBjw6FjIHRodeG6rXQgdG/DoW4gc+G7kSBo4buNYyBuaMawICoqTmV3dG9uLVJhcGhzb24qKiBob+G6t2MgKipGaXNoZXIgU2NvcmluZyoqLCB0YSB0aHUgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nICRcaGF0e1xiZXRhfSQuIA0KDQojIyAqKjIuMyBSZWxhdGl2ZSBSaXNrIHbDoCBPZGRzIFJhdGlvKioNCg0KVHJvbmcgbmdoacOqbiBj4bupdSB4w6MgaOG7mWkgaOG7jWMsIG1hcmtldGluZyBoYXkgdMOgaSBjaMOtbmggdGnDqnUgZMO5bmcsIGhhaSBjaOG7iSBz4buRIHBo4buVIGJp4bq/biBkw7luZyDEkeG7gyDEkW8gbMaw4budbmcgbeG7kWkgcXVhbiBo4buHIGdp4buvYSDEkeG6t2MgxJFp4buDbSBjw6EgbmjDom4gdsOgIGjDoG5oIHZpIChuaMawIHZheSB0acOqdSBkw7luZykgbMOgICoqUmVsYXRpdmUgUmlzayAoUlIpKiogdsOgICoqT2RkcyBSYXRpbyAoT1IpKiouIEPDoWMgY2jhu4kgc+G7kSBuw6B5IGdpw7pwIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIGtow6FjIGJp4buHdCB24buBIGto4bqjIG7Eg25nIHjhuqN5IHJhIGjDoG5oIHZpIGdp4buvYSBjw6FjIG5ow7NtIGtow6FjaCBow6BuZyBjw7MgaG/hurdjIGtow7RuZyBjw7MgbeG7mXQgxJHhurdjIMSRaeG7g20gbmjhuqV0IMSR4buLbmggKHbDrSBk4bulOiBjw7MgbmjDoCDhu58gaG/hurdjIGtow7RuZywgxJHDoyBr4bq/dCBow7RuIGhv4bq3YyDEkeG7mWMgdGjDom4pLg0KDQojIyMgKioyLjMuMSBSZWxhdGl2ZSBSaXNrIChSUikqKg0KDQoqKlJlbGF0aXZlIFJpc2sgKFJSKSoqIOKAkyBoYXkgY8OybiBn4buNaSBsw6AgKipuZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSoqIOKAkyBzbyBzw6FuaCB4w6FjIHN14bqldCB44bqjeSByYSBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcgZ2nhu69hIGhhaSBuaMOzbToNCg0KJCQNClJSID0gXGZyYWN7UF8xfXtQXzB9DQokJA0KDQpUcm9uZyDEkcOzOg0KDQotICRQXzEkOiBYw6FjIHN14bqldCBraMOhY2ggaMOgbmcgKipjw7MgxJHhurdjIMSRaeG7g20qKiB0aOG7sWMgaGnhu4duIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZyAgDQotICRQXzAkOiBYw6FjIHN14bqldCBraMOhY2ggaMOgbmcgKipraMO0bmcgY8OzIMSR4bq3YyDEkWnhu4NtKiogdGjhu7FjIGhp4buHbiBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcNCg0KKipEaeG7hW4gZ2nhuqNpOioqDQoNCi0gUlIgPSAxOiBLaMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBoYWkgbmjDs20gIA0KLSBSUiA+IDE6IE5ow7NtIGPDsyDEkeG6t2MgxJFp4buDbSBjw7Mga2jhuqMgbsSDbmcgdmF5IGNhbyBoxqFuICANCi0gUlIgPCAxOiBOaMOzbSBjw7MgxJHhurdjIMSRaeG7g20gY8OzIGto4bqjIG7Eg25nIHZheSB0aOG6pXAgaMahbg0KDQojIyMgKioyLjMuMiBPZGRzIFJhdGlvIChPUikqKg0KDQoqKk9kZHMgUmF0aW8gKE9SKSoqIMSRbyBsxrDhu51uZyB04bu3IGzhu4cgb2RkcyAoa2jhuqMgbsSDbmcgeOG6o3kgcmEgc28gduG7m2kga2jDtG5nIHjhuqN5IHJhKSBnaeG7r2EgaGFpIG5ow7NtOg0KDQokJA0KT1IgPSBcZnJhY3tQXzEgLyAoMSAtIFBfMSl9e1BfMCAvICgxIC0gUF8wKX0gPSBcZnJhY3tQXzEgKDEgLSBQXzApfXtQXzAgKDEgLSBQXzEpfQ0KJCQNCg0KVHJvbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYywga+G6v3QgcXXhuqMgaOG7k2kgcXV5IGNow61uaCBsw6AgbG9nKE9SKToNCg0KJCQNClxsb2coT1IpID0gWFxiZXRhDQokJA0KDQoqKkRp4buFbiBnaeG6o2k6KioNCg0KLSBPUiA9IDE6IEtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSBuaMOzbSAgDQotIE9SID4gMTogTmjDs20gY8OzIMSR4bq3YyDEkWnhu4NtIGPDsyBvZGRzIHZheSBjYW8gaMahbiAgDQotIE9SIDwgMTogTmjDs20gY8OzIMSR4bq3YyDEkWnhu4NtIGPDsyBvZGRzIHZheSB0aOG6pXAgaMahbg0KDQojIyAqKjIuNCBE4buvIGxp4buHdSBuZ2hpw6puIGPhu6l1KioNCg0KIyMjICoqMi40LjEgR2nhu5tpIHRoaeG7h3UgZOG7ryBsaeG7h3UgZ+G7kWMqKg0KDQpgYGB7cn0NCmxpYnJhcnkoKQ0KZGF0YSA8LSByZWFkLnhsc3goIkQ6L1BURExEVC9kYXRhLnhsc3giLCBzaGVldEluZGV4ID0gMSwgaGVhZGVyID0gVFJVRSkNCg0KZGF0YSA8LSBkYXRhICU+JQ0KICBtdXRhdGUoDQogICAgbG9hbiA9IGFzLmZhY3Rvcihsb2FuKSwNCiAgICBob3VzaW5nID0gYXMuZmFjdG9yKGhvdXNpbmcpLA0KICAgIGpvYiA9IGFzLmZhY3Rvcihqb2IpLA0KICAgIG1hcml0YWwgPSBhcy5mYWN0b3IobWFyaXRhbCksDQogICAgZWR1Y2F0aW9uID0gYXMuZmFjdG9yKGVkdWNhdGlvbiksDQogICAgZGVmYXVsdCA9IGFzLmZhY3RvcihkZWZhdWx0KSwNCiAgICBjb250YWN0ID0gYXMuZmFjdG9yKGNvbnRhY3QpDQogICkNCnN0cihkYXRhKQ0KYGBgDQoNCnwgVMOqbiBiaeG6v24gICAgfCBLaeG7g3UgZOG7ryBsaeG7h3UgfCBT4buRIGzGsOG7o25nIGdpw6EgdHLhu4sgZHV5IG5o4bqldCB8IE3DtCB04bqjIG7hu5lpIGR1bmcgfA0KfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfA0KfCBgYWdlYCAgICAgICB8IE51bWVyaWMgICAgICB8IDY3ICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHXhu5VpIGPhu6dhIGtow6FjaCBow6BuZyAodOG7qyAxOSDEkeG6v24gODcgdHXhu5VpKS4gfA0KfCBgam9iYCAgICAgICB8IENoYXJhY3RlciAgICB8IDEyICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmdo4buBIG5naGnhu4dwIGPhu6dhIGtow6FjaCBow6BuZyBuaMawOiBgbWFuYWdlbWVudGAsIGBibHVlLWNvbGxhcmAsIGBzZXJ2aWNlc2AsIGBzdHVkZW50YCwgYHJldGlyZWRgLCBgdW5lbXBsb3llZGAsLi4uIHwNCnwgYG1hcml0YWxgICAgfCBDaGFyYWN0ZXIgICAgfCAzICAgICAgICAgICAgICAgICAgICAgICAgICB8IFTDrG5oIHRy4bqhbmcgaMO0biBuaMOibjogYHNpbmdsZWAsIGBtYXJyaWVkYCwgYGRpdm9yY2VkYC4gfA0KfCBgZWR1Y2F0aW9uYCB8IENoYXJhY3RlciAgICB8IDQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuOiBgcHJpbWFyeWAsIGBzZWNvbmRhcnlgLCBgdGVydGlhcnlgLCBgdW5rbm93bmAuIHwNCnwgYGRlZmF1bHRgICAgfCBDaGFyYWN0ZXIgICAgfCAyICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtow6FjaCBow6BuZyBjw7MgbuG7oyB0w61uIGThu6VuZyBxdcOhIGjhuqFuIGtow7RuZz8gKGB5ZXNgLCBgbm9gKSB8DQp8IGBob3VzaW5nYCAgIHwgQ2hhcmFjdGVyICAgIHwgMiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLaMOhY2ggaMOgbmcgY8OzIHZheSBtdWEgbmjDoCBraMO0bmc/IChgeWVzYCwgYG5vYCkgfA0KfCBgbG9hbmAgICAgICB8IENoYXJhY3RlciAgICB8IDIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS2jDoWNoIGjDoG5nIGPDsyB2YXkgdGnDqnUgZMO5bmcga2jDtG5nPyAoYHllc2AsIGBub2ApIHwNCnwgYGNvbnRhY3RgICAgfCBDaGFyYWN0ZXIgICAgfCAzICAgICAgICAgICAgICAgICAgICAgICAgICB8IEjDrG5oIHRo4bupYyBsacOqbiBo4buHOiBgY2VsbHVsYXJgLCBgdGVsZXBob25lYCwgYHVua25vd25gIHwNCg0KDQoqKk5o4bqtbiB4w6l0KioNCg0KQuG7mSBk4buvIGxp4buHdSBn4buTbSA4IGJp4bq/biB2w6AgNDI1MSBxdWFuIHPDoXQsIMSRxrDhu6NjIGNoaWEgdGjDoG5oIGhhaSBuaMOzbSBjaMOtbmg6IGJp4bq/biDEkeG7i25oIGzGsOG7o25nIHbDoCBiaeG6v24gxJHhu4tuaCB0w61uaC4NCg0KLSAqKkJp4bq/biDEkeG7i25oIGzGsOG7o25nOioqIENo4buJIGPDsyBt4buZdCBiaeG6v24gZHV5IG5o4bqldCBsw6AgYmnhur9uIMSR4buLbmggbMaw4bujbmcsIMSRw7MgbMOgIGJp4bq/biBhZ2UuIMSQw6J5IGzDoCBiaeG6v24gxJFvIGzGsOG7nW5nIHR14buVaSBj4bunYSBraMOhY2ggaMOgbmcsIGPDsyBraeG7g3Ugc+G7kSAobnVtZXJpYyksIGPDsyB0aOG7gyBz4butIGThu6VuZyDEkeG7gyB0w61uaCB0b8OhbiB0cnVuZyBiw6xuaCwgxJHhu5kgbOG7h2NoIGNodeG6qW4sIHBow6JuIHBo4buRaSwgdi52LiBCaeG6v24gbsOgeSBtYW5nIHRow7RuZyB0aW4gbGnDqm4gdOG7pWMgdsOgIGPDsyB0aOG7gyBkw7luZyBjaG8gY8OhYyBwaMawxqFuZyBwaMOhcCBwaMOibiB0w61jaCDEkeG7i25oIGzGsOG7o25nIG5oxrAgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggaG/hurdjIHBow6JuIHTDrWNoIHBoxrDGoW5nIHNhaS4NCg0KLSAqKkPDoWMgYmnhur9uIMSR4buLbmggdMOtbmg6KiogQ8OzIGLhuqN5IGJp4bq/biBjw7JuIGzhuqFpIHRodeG7mWMgbG/huqFpIGJp4bq/biDEkeG7i25oIHTDrW5oLiBDw6FjIGJp4bq/biBuw6B5IG1hbmcgdGjDtG5nIHRpbiBk4bqhbmcgZGFuaCBt4bulYyAoY2F0ZWdvcmljYWwpLCBraMO0bmcgZMO5bmcgxJHhu4MgdMOtbmggdG/DoW4gdHLhu7FjIHRp4bq/cCBtw6AgdGjGsOG7nW5nIMSRxrDhu6NjIHBow6JuIHTDrWNoIGLhurFuZyBjw6FjaCDEkeG6v20gdOG6p24gc+G7kSwgdOG7tyBs4buHLCBob+G6t2MgZMO5bmcgY8OhYyBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiBjaG8gZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCBuaMawIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZywgdMOtbmggT2RkcyBSYXRpbywgUmVsYXRpdmUgUmlzaywuLi4NCg0KIyMjICoqMi40LjIgROG7ryBsaeG7h3UgdsOgIGPDoWMgYmnhur9uIHPhu60gZOG7pW5nIHRyb25nIG5naGnDqm4gY+G7qXUqKg0KDQpE4buvIGxp4buHdSBz4butIGThu6VuZyB0cm9uZyBuZ2hpw6puIGPhu6l1IMSRxrDhu6NjIHRyw61jaCB4deG6pXQgdOG7qyBt4buZdCBjaGnhur9uIGThu4tjaCB0aeG6v3AgdGjhu4sgcXVhIMSRaeG7h24gdGhv4bqhaSBj4bunYSBt4buZdCBuZ8OibiBow6BuZy4gVOG6rXAgZOG7ryBsaeG7h3UgYmFuIMSR4bqndSBuaOG6sW0gcGjhu6VjIHbhu6UgY2hvIHZp4buHYyBk4buxIMSRb8OhbiBraOG6oyBuxINuZyBraMOhY2ggaMOgbmcgxJHEg25nIGvDvSBn4butaSB0aeG7gW4gY8OzIGvhu7MgaOG6oW4uIFR1eSBuaGnDqm4sIHRyb25nIHBo4bqhbSB2aSBuZ2hpw6puIGPhu6l1IG7DoHksIHTDoWMgZ2nhuqMgdOG6rXAgdHJ1bmcgcGjDom4gdMOtY2ggaMOgbmggdmkgdMOgaSBjaMOtbmggY+G7pSB0aOG7gyBsw6AgKip2YXkgdGnDqnUgZMO5bmcgY8OhIG5ow6JuKiouDQoNCkJp4bq/biBwaOG7pSB0aHXhu5ljIGNow61uaCB0cm9uZyBtw7QgaMOsbmggbMOgOg0KDQotICoqYGxvYW5gKio6IFRo4buDIGhp4buHbiBraMOhY2ggaMOgbmcgKipjw7MgdmF5IHRpw6p1IGTDuW5nIGhheSBraMO0bmcqKiwgxJHGsOG7o2MgbcOjIGjDs2EgbOG6oWkgZMaw4bubaSBk4bqhbmcgbmjhu4sgcGjDom46DQogIC0gYDFgOiBu4bq/dSBraMOhY2ggaMOgbmcgY8OzIHZheSB0acOqdSBkw7luZyAobG9hbiA9ICJ5ZXMiKQ0KICAtIGAwYDogbuG6v3Uga2jDoWNoIGjDoG5nIGtow7RuZyB2YXkgdGnDqnUgZMO5bmcgKGxvYW4gPSAibm8iKQ0KDQpDw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgbMOgIGPDoWMgeeG6v3UgdOG7kSBuaMOibiBraOG6qXUgaOG7jWMgdsOgIMSR4bq3YyDEkWnhu4NtIHTDoGkgY2jDrW5oIGPhu6dhIGtow6FjaCBow6BuZywgxJHGsOG7o2MgY2jhu41uIGzhu41jIHThu6sgYuG7mSBk4buvIGxp4buHdSBn4buRYzoNCg0KLSAqKmBqb2JgKio6IE5naOG7gSBuZ2hp4buHcCBj4bunYSBraMOhY2ggaMOgbmcgKGFkbWluLiwgdGVjaG5pY2lhbiwgYmx1ZS1jb2xsYXIsIGV0Yy4pDQotICoqYG1hcml0YWxgKio6IFTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiAobWFycmllZCwgc2luZ2xlLCBkaXZvcmNlZCkNCi0gKipgZWR1Y2F0aW9uYCoqOiBUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gKHByaW1hcnksIHNlY29uZGFyeSwgdGVydGlhcnksIHVua25vd24pDQotICoqYGRlZmF1bHRgKio6IEPDsyBu4bujIHF1w6EgaOG6oW4gaGF5IGtow7RuZyAoeWVzL25vKQ0KLSAqKmBob3VzaW5nYCoqOiBDw7MgdmF5IG11YSBuaMOgIGhheSBraMO0bmcgKHllcy9ubykNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIFThuqFvIGLhu5kgZOG7ryBsaeG7h3UgY2jhu4kgY2jhu6lhIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmgNCmRhdGExIDwtIGRhdGEgJT4lDQogIGRwbHlyOjpzZWxlY3Qoam9iLCBtYXJpdGFsLCBlZHVjYXRpb24sIGRlZmF1bHQsIGhvdXNpbmcsIGxvYW4pDQoNCiMgWGVtIHRyxrDhu5tjIGThu68gbGnhu4d1IG3hu5tpDQpzdHIoZGF0YTEpDQpoZWFkKGRhdGExKQ0KYGBgDQoNCiMjICoqMi41IFF1eSB0csOsbmggbmdoacOqbiBj4bupdSoqDQoNClF1eSB0csOsbmggbmdoacOqbiBj4bupdSDEkcaw4bujYyB0w6FjIGdp4bqjIHjDonkgZOG7sW5nIHRoZW8gY8OhYyBixrDhu5tjIGxvZ2ljIHbDoCB0deG6p24gdOG7sSBuaOG6sW0gxJHhuqNtIGLhuqNvIHTDrW5oIGjhu4cgdGjhu5FuZywgxJHhu5kgdGluIGPhuq15IHbDoCBjxqEgc+G7nyBraG9hIGjhu41jIHRyb25nIHBow6JuIHTDrWNoIGThu68gbGnhu4d1LiBD4bulIHRo4buDIGJhbyBn4buTbSBjw6FjIGLGsOG7m2Mgc2F1Og0KDQpgYGB7cn0NCmxpYnJhcnkoRGlhZ3JhbW1lUikNCg0KRGlhZ3JhbW1lUjo6Z3JWaXooIg0KZGlncmFwaCByZXNlYXJjaF9mbG93IHsNCiAgZ3JhcGggW3JhbmtkaXIgPSBUQl0NCg0KICBub2RlIFtzaGFwZSA9IHJlY3RhbmdsZSwgc3R5bGUgPSBmaWxsZWQsIGNvbG9yID0gbGlnaHRibHVlLCBmb250bmFtZSA9IEhlbHZldGljYSwgZm9udHNpemUgPSAxMl0NCg0KICBBIFtsYWJlbCA9ICdCxrDhu5tjIDE6IFRodSB0aOG6rXAgJiB44butIGzDvSBk4buvIGxp4buHdSddDQogIEIgW2xhYmVsID0gJ0LGsOG7m2MgMjogVGjhu5FuZyBrw6ogbcO0IHThuqNcbihE4buvIGxp4buHdSDEkcahbiBiaeG6v24pJ10NCiAgQyBbbGFiZWwgPSAnQsaw4bubYyAzOiBLaeG7g20gxJHhu4tuaCBDaGktc3F1YXJlXG4oR2nhu69hIGJp4bq/biBwaOG7pSB0aHXhu5ljIHbDoCDEkeG7mWMgbOG6rXApJ10NCiAgRCBbbGFiZWwgPSAnQsaw4bubYyA0OiBQaMOibiB0w61jaCBj4bq3cCBiaeG6v25cbihC4bqjbmcgdOG6p24gc+G7kSwgYmnhu4N1IMSR4buTLCBSUiAmIE9SKSddDQogIEUgW2xhYmVsID0gJ0LGsOG7m2MgNTogxq/hu5tjIGzGsOG7o25nIG3DtCBow6xuaCBuaOG7iyBwaMOiblxuKExvZ2l0LCBQcm9iaXQsIENsb2dsb2csIEdMTSknXQ0KICBGIFtsYWJlbCA9ICdCxrDhu5tjIDY6IFNvIHPDoW5oIG3DtCBow6xuaFxuKEFJQywgUk9DLCBDb25mdXNpb24gTWF0cml4KSddDQogIEcgW2xhYmVsID0gJ0LGsOG7m2MgNzogxJDhu4EgeHXhuqV0IGNow61uaCBzw6FjaFxuKEThu7FhIHRyw6puIGvhur90IHF14bqjIG3DtCBow6xuaCknXQ0KDQogIEEgLT4gQiAtPiBDIC0+IEQgLT4gRSAtPiBGIC0+IEcNCn0NCiIpDQoNCmBgYA0KDQoNCioqQsaw4bubYyAxOiBUaHUgdGjhuq1wIHbDoCB44butIGzDvSBk4buvIGxp4buHdSoqDQoNClTDoWMgZ2nhuqMgc+G7rSBk4bulbmcgdOG6rXAgZOG7ryBsaeG7h3UgxJHGsOG7o2MgcsO6dCB0csOtY2ggdOG7qyBt4buZdCBjaGnhur9uIGThu4tjaCBtYXJrZXRpbmcgcXVhIMSRaeG7h24gdGhv4bqhaSBj4bunYSBt4buZdCBuZ8OibiBow6BuZyB04bqhaSBC4buTIMSQw6BvIE5oYS4gVOG7qyDEkcOzLCB0w6FjIGdp4bqjIGzhu7FhIGNo4buNbiBjw6FjIGJp4bq/biBwaMO5IGjhu6NwIHbhu5tpIG3hu6VjIHRpw6p1IG5naGnDqm4gY+G7qXU6DQoNCi0gQmnhur9uIHBo4bulIHRodeG7mWM6IGxvYW4g4oCTIHRo4buDIGhp4buHbiB2aeG7h2Mga2jDoWNoIGjDoG5nIGPDsyB2YXkgdGnDqnUgZMO5bmcgaGF5IGtow7RuZyAoeWVzL25vKS4NCi0gQ8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wOiBqb2IsIG1hcml0YWwsIGVkdWNhdGlvbiwgZGVmYXVsdCwgaG91c2luZy4NCg0KU2F1IGtoaSB4w6FjIMSR4buLbmggYmnhur9uLCB0w6FjIGdp4bqjIHRp4bq/biBow6BuaCBsw6BtIHPhuqFjaCBk4buvIGxp4buHdSwgbcOjIGjDs2EgdsOgIGNodXnhu4NuIMSR4buVaSBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIHbhu4EgxJHhu4tuaCBk4bqhbmcgcGjDuSBo4bujcCAoZmFjdG9yKSDEkeG7gyBwaOG7pWMgduG7pSBwaMOibiB0w61jaC4NCg0KKipCxrDhu5tjIDI6IFRo4buRbmcga8OqIG3DtCB04bqjIMSRxqFuIGJp4bq/bioqDQoNClTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oIHRo4buRbmcga8OqIHThuqduIHN14bqldCB2w6AgdOG7tyBs4buHIHBo4bqnbiB0csSDbSBjaG8gdOG7q25nIGJp4bq/biBuaOG6sW0gbcO0IHThuqMgxJHhurdjIMSRaeG7g20gdOG7lW5nIHF1w6F0IGPhu6dhIGThu68gbGnhu4d1LiBL4bq/dCBxdeG6oyDEkcaw4bujYyBtaW5oIGjhu41hIHRow7RuZyBxdWEgYmnhu4N1IMSR4buTIGPhu5l0IHbDoCBiaeG7g3UgxJHhu5MgdHLDsm4gbmjhurFtIHRy4buxYyBxdWFuIGjDs2EgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jIGPhu6dhIGtow6FjaCBow6BuZy4NCg0KKipCxrDhu5tjIDM6IEtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZyoqDQoNCuG7niBixrDhu5tjIG7DoHksIHTDoWMgZ2nhuqMgc+G7rSBk4bulbmcga2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZSDEkeG7gyBraeG7g20gdHJhIG3hu5FpIGxpw6puIGjhu4cgdGjhu5FuZyBrw6ogZ2nhu69hIGJp4bq/biBwaOG7pSB0aHXhu5ljIGxvYW4gdsOgIHThu6tuZyBiaeG6v24gxJHhu5ljIGzhuq1wLiBOaOG7r25nIGJp4bq/biBjw7MgZ2nDoSB0cuG7iyBwIDwgMC4wNSDEkcaw4bujYyB4ZW0gbMOgIGPDsyBt4buRaSBxdWFuIGjhu4cgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB24bubaSBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcsIHThu6sgxJHDsyDEkcaw4bujYyDEkcawYSB2w6BvIGPDoWMgcGjDom4gdMOtY2ggc8OidSBoxqFuLg0KDQoqKkLGsOG7m2MgNDogUGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBj4bq3cCBiaeG6v24qKg0KDQpW4bubaSBt4buXaSBj4bq3cCBiaeG6v24gY8OzIG3hu5FpIGxpw6puIGjhu4csIHTDoWMgZ2nhuqMgdGjhu7FjIGhp4buHbiBjw6FjIGLGsOG7m2M6DQoNCi0gTOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2jDqW8gxJHhu4MgbcO0IHThuqMgcGjDom4gcGjhu5FpIGNodW5nLg0KDQotIFbhur0gYmnhu4N1IMSR4buTIGPhu5l0IHBow6JuIG5ow7NtIMSR4buDIHNvIHPDoW5oIHRy4buxYyBxdWFuLg0KDQotIFRo4buxYyBoaeG7h24ga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIGdp4buvYSBjw6FjIG5ow7NtLg0KDQotIFTDrW5oIHRvw6FuIGhhaSBjaOG7iSBz4buRIHF1YW4gdHLhu41uZzogUmVsYXRpdmUgUmlzayAoUlIpIHbDoCBPZGRzIFJhdGlvIChPUikgbmjhurFtIGzGsOG7o25nIGjDs2EgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgY8OhYyB54bq/dSB04buRIG5ow6JuIGto4bqpdSBo4buNYyDEkeG6v24gcXV54bq/dCDEkeG7i25oIHZheSB0acOqdSBkw7luZy4NCg0KKipCxrDhu5tjIDU6IMav4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuKioNCg0KVMOhYyBnaeG6oyB0aeG6v24gaMOgbmggeMOieSBk4buxbmcgdsOgIMaw4bubYyBsxrDhu6NuZyA0IG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gbmjhurFtIHBow6JuIHTDrWNoIHTDoWMgxJHhu5luZyBj4bunYSBjw6FjIGJp4bq/biBuaMOibiBraOG6qXUgaOG7jWMgxJHhur9uIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZzoNCg0KLSBI4buTaSBxdXkgTG9naXN0aWMgKExvZ2l0KQ0KDQotIEjhu5NpIHF1eSBQcm9iaXQNCg0KLSBI4buTaSBxdXkgQ29tcGxlbWVudGFyeSBsb2ctbG9nIChDbG9nbG9nKQ0KDQotIE3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIChMTVApDQoNClZp4buHYyDGsOG7m2MgbMaw4bujbmcgY8OhYyBtw7QgaMOsbmggbsOgeSDEkcaw4bujYyB0aOG7sWMgaGnhu4duIGLhurFuZyBwaMawxqFuZyBwaMOhcCDGsOG7m2MgbMaw4bujbmcgaOG7o3AgbMO9IHThu5FpIMSRYSAoTWF4aW11bSBMaWtlbGlob29kIEVzdGltYXRpb24g4oCTIE1MRSkuDQoNCioqQsaw4bubYyA2OiDEkMOhbmggZ2nDoSB2w6AgbOG7sWEgY2jhu41uIG3DtCBow6xuaCBwaMO5IGjhu6NwKioNCg0KVMOhYyBnaeG6oyBz4butIGThu6VuZyBjw6FjIHRpw6p1IGNow60gxJHDoW5oIGdpw6EgbcO0IGjDrG5oIGJhbyBn4buTbToNCg0KLSBDaOG7iSBz4buRIEFJQyAoQWthaWtlIEluZm9ybWF0aW9uIENyaXRlcmlvbikNCg0KLSDEkMaw4budbmcgY29uZyBST0MgdsOgIGRp4buHbiB0w61jaCBkxrDhu5tpIMSRxrDhu51uZyBjb25nIChBVUMpDQoNCi0gTWEgdHLhuq1uIG5o4bqnbSBs4bqrbiAoQ29uZnVzaW9uIE1hdHJpeCkNCg0KROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMgxJHDoW5oIGdpw6EsIG3DtCBow6xuaCB04buRdCBuaOG6pXQgc+G6vSDEkcaw4bujYyBs4buxYSBjaOG7jW4gxJHhu4MgZGnhu4VuIGdp4bqjaSB2w6AgxJHhu4EgeHXhuqV0IGNow61uaCBzw6FjaC4NCg0KKipCxrDhu5tjIDc6IEvhur90IGx14bqtbiB2w6Aga2h1eeG6v24gbmdo4buLKioNCg0KVMOhYyBnaeG6oyB04buVbmcgaOG7o3AgY8OhYyBr4bq/dCBxdeG6oyDEkeG7i25oIHTDrW5oIHbDoCDEkeG7i25oIGzGsOG7o25nLCB04burIMSRw7MgcsO6dCByYSBjw6FjIGvhur90IGx14bqtbiBjaMOtbmggduG7gSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGPDoWMgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jIHbDoCBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcuIFRyw6puIOG7nyDEkWPGoSBzw7MsIG5naGnDqm4gY+G7qXUgxJHGsGEgcmEgY8OhYyBraHV54bq/biBuZ2jhu4sgdGjhu7FjIHRp4buFbiBjaG8gdOG7lSBjaOG7qWMgdMOtbiBk4bulbmcgbmjhurFtIGPhuqNpIHRoaeG7h24gaGnhu4d1IHF14bqjIHRp4bq/cCBj4bqtbiBraMOhY2ggaMOgbmcgbeG7pWMgdGnDqnUuDQoNCi0tLQ0KDQojICoqQ0jGr8agTkcgMzogS+G6vlQgUVXhuqIgTkdIScOKTiBD4buoVSoqDQoNCiMjICoqMy4xIFRo4buRbmcga8OqIG3DtCB04bqjIGJp4bq/biBuZ2hpw6puIGPhu6l1KioNCg0KIyMjICoqMy4xLjEgVGjhu5FuZyBtw7QgdOG6oyBiaeG6v24gcGjhu6UgdGh14buZYyoqDQoNCioqQmnhur9uIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZyAoTG9hbikqKg0KDQoqKkzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCnRhYmxlKGRhdGExJGxvYW4pDQpwcm9wLnRhYmxlKHRhYmxlKGRhdGExJGxvYW4pKQ0KYGBgDQoNCg0KKipW4bq9IGJp4buDdSDEkeG7kyBj4buZdCoqDQoNCmBgYHtyfQ0KZnJlcV9sb2FuIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoZGF0YTEkbG9hbikpDQpjb2xuYW1lcyhmcmVxX2xvYW4pIDwtIGMoIkxvYW4iLCAiQ291bnQiKQ0KDQpnZ3Bsb3QoZnJlcV9sb2FuLCBhZXMoeCA9IExvYW4sIHkgPSBDb3VudCkpICsNCiAgZ2VvbV9jb2woZmlsbCA9ICIjOTM3MERCIiwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBDb3VudCksIHZqdXN0ID0gLTAuNSkgKw0KICBsYWJzKHRpdGxlID0gIlThuqduIHPhu5EgdmF5IHRpw6p1IGTDuW5nIiwgeCA9ICJWYXkgdGnDqnUgZMO5bmciLCB5ID0gIlPhu5EgbMaw4bujbmciKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KYGBgDQoNCg0KKipW4bq9IGJp4buDdSDEkeG7kyB0csOybioqDQoNCmBgYHtyfQ0KIyBU4bqhbyBi4bqjbmcgdOG6p24gc3XhuqV0DQpsb2FuX2ZyZXEgPC0gdGFibGUoZGF0YTEkbG9hbikNCmxvYW5fcHJvcCA8LSBwcm9wLnRhYmxlKGxvYW5fZnJlcSkNCg0KIyBDaHV54buDbiB0aMOgbmggZGF0YSBmcmFtZSDEkeG7gyBkw7luZyBnZ3Bsb3QyDQpsb2FuX2RmIDwtIGFzLmRhdGEuZnJhbWUobG9hbl9wcm9wKQ0KY29sbmFtZXMobG9hbl9kZikgPC0gYygiTG9hbiIsICJQcm9wb3J0aW9uIikNCg0KIyBUw61uaCBwaOG6p24gdHLEg20gxJHhu4MgaGnhu4NuIHRo4buLIG5ow6NuDQpsb2FuX2RmJFBlcmNlbnQgPC0gcGFzdGUwKHJvdW5kKGxvYW5fZGYkUHJvcG9ydGlvbiAqIDEwMCwgMSksICIlIikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyB0csOybiBi4bqxbmcgZ2dwbG90Mg0KZ2dwbG90KGxvYW5fZGYsIGFlcyh4ID0gIiIsIHkgPSBQcm9wb3J0aW9uLCBmaWxsID0gTG9hbikpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMSkgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IFBlcmNlbnQpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyB2YXkgdGnDqnUgZMO5bmciLCB4ID0gTlVMTCwgeSA9IE5VTEwpICsNCiAgdGhlbWVfdm9pZCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQoNCioqROG7sWEgdsOgbyBi4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0IHbDoCBiaeG7g3UgxJHhu5MgY+G7p2EgYmnhur9uIGxvYW4sIHRhIGPDsyBjw6FjIG5o4bqtbiDEkeG7i25oIHNhdToqKg0KDQotIE5ow7NtIGtow7RuZyB2YXkgdGnDqnUgZMO5bmcgKG5vKSBjaGnhur9tIHPhu5EgbMaw4bujbmcgbOG7m24gdsaw4bujdCB0cuG7mWkgduG7m2kgMy44MzAgbmfGsOG7nWksIHTGsMahbmcg4bupbmcga2hv4bqjbmcgODQuNyUgdOG7lW5nIHPhu5EgbeG6q3UuIMSQw6J5IGzDoCBuaMOzbSBjaGnhur9tIMawdSB0aOG6vyByw7UgcuG7h3QuDQoNCi0gTmjDs20gY8OzIHZheSB0acOqdSBkw7luZyAoeWVzKSBjaOG7iSBjw7MgNjkxIG5nxrDhu51pLCBjaGnhur9tIGtob+G6o25nIDE1LjMlLg0KDQoqKkvhur90IGx14bqtbjoqKg0KDQpQaMOibiBi4buRIHZheSB0acOqdSBkw7luZyBjaG8gdGjhuqV5IMSRYSBz4buRIGtow6FjaCBow6BuZyBraMO0bmcgc+G7rSBk4bulbmcgaMOsbmggdGjhu6ljIHZheSB0acOqdSBkw7luZywgcGjhuqNuIMOhbmggc+G7sSB0aOG6rW4gdHLhu41uZyB0cm9uZyBjaGkgdGnDqnUgaG/hurdjIHRp4bq/cCBj4bqtbiBo4bqhbiBjaOG6vyB24bubaSBsb+G6oWkgaMOsbmggdMOtbiBk4bulbmcgbsOgeS4gWeG6v3UgdOG7kSBuw6B5IGPDsyB0aOG7gyDEkcOzbmcgdmFpIHRyw7IgdHJvbmcgdmnhu4djIHjDoWMgxJHhu4tuaCBt4bupYyDEkeG7mSB0acOqdSBkw7luZyBjw6EgbmjDom4gdsOgIGto4bqjIG7Eg25nIHRp4bq/cCBj4bqtbiB0w61uIGThu6VuZyB0acOqdSBkw7luZyB0cm9uZyBuZ2hpw6puIGPhu6l1IGjDoG5oIHZpIHTDoGkgY2jDrW5oLg0KDQoNCiMjIyAqKjMuMS4yIFRo4buRbmcga8OqIG3DtCB04bqjIGJp4bq/biDEkeG7mWMgbOG6rXAqKg0KDQojIyMjICoqYS4gVmF5IG11YSBuaMOgIChIb3VzaW5nKSoqDQoNCioqTOG6rXAgYuG6o25nIHThuqduIHPhu5EgdsOgIHThuqduIHN14bqldCoqDQoNCmBgYHtyfQ0KdGFibGUoZGF0YTEkaG91c2luZykNCnByb3AudGFibGUodGFibGUoZGF0YTEkaG91c2luZykpDQpgYGANCg0KDQoqKlbhur0gYmnhu4N1IMSR4buTIGPhu5l0KioNCg0KYGBge3J9DQpmcmVxX2hvdXNpbmcgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShkYXRhMSRob3VzaW5nKSkNCmNvbG5hbWVzKGZyZXFfaG91c2luZykgPC0gYygiSG91c2luZyIsICJDb3VudCIpDQoNCmdncGxvdChmcmVxX2hvdXNpbmcsIGFlcyh4ID0gSG91c2luZywgeSA9IENvdW50KSkgKw0KICBnZW9tX2NvbChmaWxsID0gIiM2NkNEQUEiLCBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IENvdW50KSwgdmp1c3QgPSAtMC41KSArDQogIGxhYnModGl0bGUgPSAiVOG6p24gc+G7kSB2YXkgbXVhIG5ow6AiLCB4ID0gIlZheSBuaMOgIiwgeSA9ICJT4buRIGzGsOG7o25nIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQoNCioqVuG6vSBiaeG7g3UgxJHhu5MgdHLDsm4qKg0KDQoNCmBgYHtyfQ0KIyBU4bqhbyBi4bqjbmcgdOG6p24gc3XhuqV0DQpob3VzaW5nX2ZyZXEgPC0gdGFibGUoZGF0YTEkaG91c2luZykNCmhvdXNpbmdfcHJvcCA8LSBwcm9wLnRhYmxlKGhvdXNpbmdfZnJlcSkNCg0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUgxJHhu4MgduG6vSB24bubaSBnZ3Bsb3QyDQpob3VzaW5nX2RmIDwtIGFzLmRhdGEuZnJhbWUoaG91c2luZ19wcm9wKQ0KY29sbmFtZXMoaG91c2luZ19kZikgPC0gYygiSG91c2luZyIsICJQcm9wb3J0aW9uIikNCg0KIyBUaMOqbSBj4buZdCBwaOG6p24gdHLEg20gxJHhu4MgbMOgbSBuaMOjbg0KaG91c2luZ19kZiRQZXJjZW50IDwtIHBhc3RlMChyb3VuZChob3VzaW5nX2RmJFByb3BvcnRpb24gKiAxMDAsIDEpLCAiJSIpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgdHLDsm4NCmdncGxvdChob3VzaW5nX2RmLCBhZXMoeCA9ICIiLCB5ID0gUHJvcG9ydGlvbiwgZmlsbCA9IEhvdXNpbmcpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDEpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBQZXJjZW50KSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICJ04bu3IGzhu4cgdmF5IG11YSBuaMOgIiwgeCA9IE5VTEwsIHkgPSBOVUxMKSArDQogIHRoZW1lX3ZvaWQoKQ0KdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCg0KKipE4buxYSB2w6BvIGLhuqNuZyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQgdsOgIGJp4buDdSDEkeG7kyBj4bunYSBiaeG6v24gaG91c2luZywgdGEgY8OzIGPDoWMgbmjhuq1uIMSR4buLbmggc2F1OioqDQoNCi0gTmjDs20gY8OzIHZheSBtdWEgbmjDoCAoeWVzKSBjaGnhur9tIHThu7cgbOG7hyBjYW8gaMahbiB24bubaSAyNTU5IG5nxrDhu51pLCB0xrDGoW5nIOG7qW5nIGtob+G6o25nIDU2LjYlIHThu5VuZyBz4buRIG3huqt1LiDEkMOieSBsw6AgbmjDs20gY2hp4bq/bSB04bu3IHRy4buNbmcgbOG7m24gdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UuDQoNCi0gTmjDs20ga2jDtG5nIHZheSBtdWEgbmjDoCAobm8pIGPDsyAxLDk2MiBuZ8aw4budaSwgY2hp4bq/bSBraG/huqNuZyA0My40JS4NCg0KKipL4bq/dCBsdeG6rW46KioNCg0KUGjDom4gYuG7kSBk4buvIGxp4buHdSBjaG8gdGjhuqV5IHBo4bqnbiBs4bubbiBraMOhY2ggaMOgbmcgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UgY8OzIGtob+G6o24gdmF5IG11YSBuaMOgLiDEkGnhu4F1IG7DoHkgY8OzIHRo4buDIHBo4bqjbiDDoW5oIG5odSBj4bqndSB24buBIG5ow6Ag4bufIGPFqW5nIG5oxrAgbeG7qWMgxJHhu5kgdGnhur9wIGPhuq1uIHTDrW4gZOG7pW5nIG11YSBi4bqldCDEkeG7mW5nIHPhuqNuIGPhu6dhIGtow6FjaCBow6BuZyB0cm9uZyB04bqtcCBt4bqrdS4NCg0KDQojIyMjICoqYi4gTmdo4buBIG5naGnhu4dwIChKb2IpKioNCg0KKipM4bqtcCBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQojQuG6o25nIHThuqduIHPhu5ENCnRhYmxlKGRhdGExJGpvYikNCiNC4bqjbmcgdOG6p24gc3XhuqV0DQp0YWJsZShkYXRhMSRqb2IpL3N1bSh0YWJsZShkYXRhMSRqb2IpKQ0KYGBgDQoNCioqVuG6vSBiaeG7g3UgxJHhu5MgY+G7mXQqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KbGlicmFyeShnZ3Bsb3QyKQ0KDQojIFThuqFvIGLhuqNuZyB04bqnbiBz4buRIGNobyBiaeG6v24gam9iDQpmcmVxMSA8LSB0YWJsZShkYXRhMSRqb2IpDQoNCiMgQ2h1eeG7g24gdGjDoG5oIGRhdGEgZnJhbWUNCmpvYl9mcmVxIDwtIGFzLmRhdGEuZnJhbWUoZnJlcTEpDQpjb2xuYW1lcyhqb2JfZnJlcSkgPC0gYygiSm9iIiwgIkNvdW50IikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyBj4buZdA0KZ2dwbG90KGpvYl9mcmVxLCBhZXMoeCA9IEpvYiwgeSA9IENvdW50KSkgKw0KICBnZW9tX2NvbChmaWxsID0gIiM2NDk1RUQiLCBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IENvdW50KSwgdmp1c3QgPSAtMC41LCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh0aXRsZSA9ICJU4bqnbiBz4buRIHRoZW8gbmdo4buBIG5naGnhu4dwIiwgeCA9ICJOZ2jhu4EgbmdoaeG7h3AiLCB5ID0gIlPhu5EgbMaw4bujbmciKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgDQpgYGANCg0KDQoqKlbhur0gYmnhu4N1IMSR4buTIHRyw7JuKioNCg0KYGBge3J9DQojIFThuqFvIGLhuqNuZyB04bqnbiBzdeG6pXQgY2hvIGJp4bq/biBqb2INCmpvYl9mcmVxIDwtIHRhYmxlKGRhdGExJGpvYikNCmpvYl9wcm9wIDwtIHByb3AudGFibGUoam9iX2ZyZXEpDQoNCiMgQ2h1eeG7g24gc2FuZyBkYXRhIGZyYW1lIMSR4buDIHbhur0NCmpvYl9kZiA8LSBhcy5kYXRhLmZyYW1lKGpvYl9wcm9wKQ0KY29sbmFtZXMoam9iX2RmKSA8LSBjKCJKb2IiLCAiUHJvcG9ydGlvbiIpDQoNCiMgVGjDqm0gY+G7mXQgcGjhuqduIHRyxINtIMSR4buDIGzDoG0gbmjDo24NCmpvYl9kZiRQZXJjZW50IDwtIHBhc3RlMChyb3VuZChqb2JfZGYkUHJvcG9ydGlvbiAqIDEwMCwgMSksICIlIikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyB0csOybg0KZ2dwbG90KGpvYl9kZiwgYWVzKHggPSAiIiwgeSA9IFByb3BvcnRpb24sIGZpbGwgPSBKb2IpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDEpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBQZXJjZW50KSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPSAzKSArDQogIGxhYnModGl0bGUgPSAiVOG7tyBs4buHIHBow6JuIGLhu5Egbmdo4buBIG5naGnhu4dwIiwgeCA9IE5VTEwsIHkgPSBOVUxMKSArDQogIHRoZW1lX3ZvaWQoKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KYGBgDQoNCg0KKipE4buxYSB2w6BvIGLhuqNuZyB04bqnbiBz4buRIHbDoCBiaeG7g3UgxJHhu5MgdHLDqm4sIHRhIGPDsyBjw6FjIG5o4bqtbiDEkeG7i25oIHNhdToqKg0KDQoNCi0gTmdo4buBIG5naGnhu4dwIHBo4buVIGJp4bq/biBuaOG6pXQgbMOgIG1hbmFnZW1lbnQgduG7m2kgOTY5IG5nxrDhu51pLCBjaGnhur9tIGtob+G6o25nIDIxLjQlIHThu5VuZyBz4buRIG3huqt1Lg0KDQotIFRoZW8gc2F1IGzDoCBibHVlLWNvbGxhciAoOTQ2IG5nxrDhu51pLCB+MjAuOSUpIHbDoCB0ZWNobmljaWFuICg3NjggbmfGsOG7nWksIH4xNy4wJSkuDQoNCi0gQ8OhYyBuaMOzbSBuZ2jhu4Egw610IHBo4buVIGJp4bq/biBoxqFuIGfhu5NtOiBzdHVkZW50ICg4NCBuZ8aw4budaSwgfjEuOSUpIHbDoCB1bmtub3duICgzOCBuZ8aw4budaSwgfjAuOCUpLg0KDQotIFThu5VuZyBj4buZbmcsIGJhIG5ow7NtIG5naOG7gSBjaGnhur9tIHThu7cgbOG7hyBjYW8gbmjhuqV0IChtYW5hZ2VtZW50LCBibHVlLWNvbGxhciwgdGVjaG5pY2lhbikgxJHDoyBjaGnhur9tIGjGoW4gNTklIHRvw6BuIGLhu5kgZOG7ryBsaeG7h3UuDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNClBow6JuIGLhu5Egbmdo4buBIG5naGnhu4dwIGtow7RuZyDEkeG7gXUsIGNobyB0aOG6pXkgY8OhYyBraMOhY2ggaMOgbmcgdHJvbmcgZOG7ryBsaeG7h3UgY2jhu6cgeeG6v3UgxJHhur9uIHThu6sgY8OhYyBuZ8OgbmggcXXhuqNuIGzDvSwgbGFvIMSR4buZbmcgcGjhu5UgdGjDtG5nIHbDoCBr4bu5IHRodeG6rXQgdmnDqm4uIA0KDQoNCiMjIyMgKipjLiBUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gKE1hcml0YWwpKioNCg0KKipM4bqtcCBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQojIELhuqNuZyB04bqnbiBz4buRDQp0YWJsZShkYXRhMSRtYXJpdGFsKQ0KIyBC4bqjbmcgdOG6p24gc3XhuqV0DQpwcm9wLnRhYmxlKHRhYmxlKGRhdGExJG1hcml0YWwpKQ0KYGBgDQoNCioqVuG6vSBiaeG7g3UgxJHhu5MgY+G7mXQqKg0KDQpgYGB7cn0NCiMgQmnhu4N1IMSR4buTIGPhu5l0DQpsaWJyYXJ5KGdncGxvdDIpDQpmcmVxX21hcml0YWwgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShkYXRhMSRtYXJpdGFsKSkNCmNvbG5hbWVzKGZyZXFfbWFyaXRhbCkgPC0gYygiTWFyaXRhbCIsICJDb3VudCIpDQoNCmdncGxvdChmcmVxX21hcml0YWwsIGFlcyh4ID0gTWFyaXRhbCwgeSA9IENvdW50KSkgKw0KICBnZW9tX2NvbChmaWxsID0gIiM2NDk1RUQiLCBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IENvdW50KSwgdmp1c3QgPSAtMC41KSArDQogIGxhYnModGl0bGUgPSAiVOG6p24gc+G7kSB0aGVvIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiIsIHggPSAiVMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIiwgeSA9ICJT4buRIGzGsOG7o25nIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQoNCioqVuG6vSBiaeG7g3UgxJHhu5MgdHLDsm4qKg0KDQpgYGB7cn0NCg0KIyBC4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0DQptYXJpdGFsX2ZyZXEgPC0gdGFibGUoZGF0YTEkbWFyaXRhbCkNCm1hcml0YWxfcHJvcCA8LSBwcm9wLnRhYmxlKG1hcml0YWxfZnJlcSkNCg0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUgxJHhu4MgduG6vQ0KbWFyaXRhbF9kZiA8LSBhcy5kYXRhLmZyYW1lKG1hcml0YWxfcHJvcCkNCmNvbG5hbWVzKG1hcml0YWxfZGYpIDwtIGMoIk1hcml0YWwiLCAiUHJvcG9ydGlvbiIpDQoNCiMgVGjDqm0gY+G7mXQgcGjhuqduIHRyxINtIMSR4buDIGzDoG0gbmjDo24NCm1hcml0YWxfZGYkUGVyY2VudCA8LSBwYXN0ZTAocm91bmQobWFyaXRhbF9kZiRQcm9wb3J0aW9uICogMTAwLCAxKSwgIiUiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuDQpnZ3Bsb3QobWFyaXRhbF9kZiwgYWVzKHggPSAiIiwgeSA9IFByb3BvcnRpb24sIGZpbGwgPSBNYXJpdGFsKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAxKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gUGVyY2VudCksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0gNCkgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4iLCB4ID0gTlVMTCwgeSA9IE5VTEwpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCg0KKipE4buxYSB2w6BvIGLhuqNuZyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQgdsOgIGJp4buDdSDEkeG7kyBj4bunYSBiaeG6v24gbWFyaXRhbCwgdGEgY8OzIGPDoWMgbmjhuq1uIMSR4buLbmggc2F1OioqDQoNCi0gTmjDs20ga+G6v3QgaMO0biAobWFycmllZCkgY2hp4bq/bSB04bu3IGzhu4cgY2FvIG5o4bqldCwgduG7m2kgMiw3OTcgbmfGsOG7nWksIHTGsMahbmcg4bupbmcga2hv4bqjbmcgNjEuOSUgdOG7lW5nIHPhu5EgbeG6q3UuIMSQw6J5IGzDoCBuaMOzbSBjaGnhur9tIMawdSB0aOG6vyB2xrDhu6N0IHRy4buZaS4NCg0KLSBOaMOzbSDEkeG7mWMgdGjDom4gKHNpbmdsZSkgY2hp4bq/bSAxLDE5NiBuZ8aw4budaSAofjI2LjUlKSwgxJHhu6luZyB0aOG7qSBoYWkgduG7gSB04bqnbiBzdeG6pXQuDQoNCi0gTmjDs20gbHkgaMO0biAoZGl2b3JjZWQpIGNo4buJIGNoaeG6v20gNTI4IG5nxrDhu51pICh+MTEuNyUpLCBsw6AgbmjDs20gY8OzIHPhu5EgbMaw4bujbmcgdGjhuqVwIG5o4bqldC4NCg0KDQoqKkvhur90IGx14bqtbjoqKg0KDQpQaMOibiBi4buRIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBuw6B5IGtow6EgY2jDqm5oIGzhu4djaCwgduG7m2kgcGjhuqduIGzhu5tuIGtow6FjaCBow6BuZyBsw6AgbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuLiDEkGnhu4F1IG7DoHkgY8OzIHRo4buDIHBo4bqjbiDDoW5oIHh1IGjGsOG7m25nIGhv4bq3YyBj4bqldSB0csO6YyBkw6JuIHPhu5EgY+G7p2Ega2jDoWNoIGjDoG5nIHRyb25nIHThuq1wIGThu68gbGnhu4d1Lg0KDQojIyMjICoqZC4gVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIChFZHVjYXRpb24pKioNCg0KKipM4bqtcCBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQp0YWJsZShkYXRhMSRlZHVjYXRpb24pDQpwcm9wLnRhYmxlKHRhYmxlKGRhdGExJGVkdWNhdGlvbikpDQpgYGANCg0KKipW4bq9IGJp4buDdSDEkeG7kyBj4buZdCoqDQoNCmBgYHtyfQ0KZnJlcV9lZHUgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShkYXRhMSRlZHVjYXRpb24pKQ0KY29sbmFtZXMoZnJlcV9lZHUpIDwtIGMoIkVkdWNhdGlvbiIsICJDb3VudCIpDQoNCmdncGxvdChmcmVxX2VkdSwgYWVzKHggPSBFZHVjYXRpb24sIHkgPSBDb3VudCkpICsNCiAgZ2VvbV9jb2woZmlsbCA9ICIjRkY5OTY2IiwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBDb3VudCksIHZqdXN0ID0gLTAuNSkgKw0KICBsYWJzKHRpdGxlID0gIlThuqduIHPhu5EgdGhlbyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4iLCB4ID0gIlRyw6xuaCDEkeG7mSIsIHkgPSAiU+G7kSBsxrDhu6NuZyIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCg0KKipW4bq9IGJp4buDdSDEkeG7kyB0csOybioqDQoNCmBgYHtyfQ0KIyBC4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0DQplZHVjYXRpb25fZnJlcSA8LSB0YWJsZShkYXRhMSRlZHVjYXRpb24pDQplZHVjYXRpb25fcHJvcCA8LSBwcm9wLnRhYmxlKGVkdWNhdGlvbl9mcmVxKQ0KDQojIENodXnhu4NuIHNhbmcgZGF0YSBmcmFtZSDEkeG7gyB24bq9DQplZHVjYXRpb25fZGYgPC0gYXMuZGF0YS5mcmFtZShlZHVjYXRpb25fcHJvcCkNCmNvbG5hbWVzKGVkdWNhdGlvbl9kZikgPC0gYygiRWR1Y2F0aW9uIiwgIlByb3BvcnRpb24iKQ0KDQojIFRow6ptIGPhu5l0IHBo4bqnbiB0csSDbSDEkeG7gyBsw6BtIG5ow6NuDQplZHVjYXRpb25fZGYkUGVyY2VudCA8LSBwYXN0ZTAocm91bmQoZWR1Y2F0aW9uX2RmJFByb3BvcnRpb24gKiAxMDAsIDEpLCAiJSIpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgdHLDsm4NCmdncGxvdChlZHVjYXRpb25fZGYsIGFlcyh4ID0gIiIsIHkgPSBQcm9wb3J0aW9uLCBmaWxsID0gRWR1Y2F0aW9uKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAxKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gUGVyY2VudCksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0gNCkgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4iLCB4ID0gTlVMTCwgeSA9IE5VTEwpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCg0KKipE4buxYSB2w6BvIGLhuqNuZyB04bqnbiBz4buRIHThuqduIHN14bqldCB2w6AgYmnhu4N1IMSR4buTIGPhu6dhIGJp4bq/biBlZHVjYXRpb24sIHRhIGPDsyBjw6FjIG5o4bqtbiDEkeG7i25oIHNhdToqKg0KDQotIE5ow7NtIGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gc2Vjb25kYXJ5ICh0cnVuZyBo4buNYykgY2hp4bq/bSB04bu3IGzhu4cgY2FvIG5o4bqldCwgduG7m2kgMiwzMDYgbmfGsOG7nWksIHTGsMahbmcg4bupbmcga2hv4bqjbmcgNTEuMCUgdOG7lW5nIHPhu5EgbeG6q3UuIMSQw6J5IGzDoCBuaMOzbSBjaGnhur9tIMawdSB0aOG6vyB2xrDhu6N0IHRy4buZaS4NCg0KLSBOaMOzbSBjw7MgdHLDrG5oIMSR4buZIHRlcnRpYXJ5ICjEkeG6oWkgaOG7jWMsIHNhdSDEkeG6oWkgaOG7jWMpIGPDsyAxLDM1MCBuZ8aw4budaSwgY2hp4bq/bSBraG/huqNuZyAyOS44JSwgxJHhu6luZyB0aOG7qSBoYWkgduG7gSB04bqnbiBzdeG6pXQuDQoNCi0gTmjDs20gcHJpbWFyeSAodGnhu4N1IGjhu41jKSBjw7MgNjc4IG5nxrDhu51pLCB0xrDGoW5nIOG7qW5nIGtob+G6o25nIDE1LjAlIHThu5VuZyBz4buRIG3huqt1Lg0KDQotIE5ow7NtIHVua25vd24gKGtow7RuZyByw7UgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuKSBjaOG7iSBjaGnhur9tIDE4NyBuZ8aw4budaSwgdMawxqFuZyDhu6luZyA0LjElLCBsw6AgbmjDs20gY8OzIHPhu5EgbMaw4bujbmcgdGjhuqVwIG5o4bqldC4NCg0KKipL4bq/dCBsdeG6rW46KioNCg0KUGjDom4gYuG7kSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UgY2hvIHRo4bqleSBwaOG6p24gbOG7m24ga2jDoWNoIGjDoG5nIGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdHJ1bmcgaOG7jWMuIMSQaeG7gXUgbsOgeSBjw7MgdGjhu4MgcGjhuqNuIMOhbmggY+G6pXUgdHLDumMgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIHBo4buVIGJp4bq/biB0cm9uZyBuaMOzbSBraMOhY2ggaMOgbmcgxJHGsOG7o2Mga2jhuqNvIHPDoXQsIMSR4buTbmcgdGjhu51pIGzDoCB54bq/dSB04buRIGPhuqduIHhlbSB4w6l0IHRyb25nIGPDoWMgcGjDom4gdMOtY2ggbGnDqm4gcXVhbiDEkeG6v24gaMOgbmggdmkgdGnDqnUgZMO5bmcgaG/hurdjIGto4bqjIG7Eg25nIHRp4bq/cCBj4bqtbiBk4buLY2ggduG7pS4NCg0KIyMjIyAqKmUuIFZheSB0acOqdSBkw7luZyAoRGVmYXVsdCkqKg0KDQoqKkzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCnRhYmxlKGRhdGExJGRlZmF1bHQpDQpwcm9wLnRhYmxlKHRhYmxlKGRhdGExJGRlZmF1bHQpKQ0KYGBgDQoNCioqVuG6vSBiaeG7g3UgxJHhu5MgY+G7mXQqKg0KDQpgYGB7cn0NCmZyZXFfZGVmYXVsdCA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlKGRhdGExJGRlZmF1bHQpKQ0KY29sbmFtZXMoZnJlcV9kZWZhdWx0KSA8LSBjKCJEZWZhdWx0IiwgIkNvdW50IikNCg0KZ2dwbG90KGZyZXFfZGVmYXVsdCwgYWVzKHggPSBEZWZhdWx0LCB5ID0gQ291bnQpKSArDQogIGdlb21fY29sKGZpbGwgPSAiI0YwODA4MCIsIGNvbG9yID0gImJsYWNrIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gQ291bnQpLCB2anVzdCA9IC0wLjUpICsNCiAgbGFicyh0aXRsZSA9ICJU4bqnbiBz4buRIG7hu6MgdMOtbiBk4bulbmcgeOG6pXUiLCB4ID0gIkRlZmF1bHQiLCB5ID0gIlPhu5EgbMaw4bujbmciKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KYGBgDQoNCg0KKipW4bq9IGJp4buDdSDEkeG7kyB0csOybioqDQoNCmBgYHtyfQ0KIyBC4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0DQpkZWZhdWx0X2ZyZXEgPC0gdGFibGUoZGF0YTEkZGVmYXVsdCkNCmRlZmF1bHRfcHJvcCA8LSBwcm9wLnRhYmxlKGRlZmF1bHRfZnJlcSkNCg0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUgxJHhu4MgduG6vQ0KZGVmYXVsdF9kZiA8LSBhcy5kYXRhLmZyYW1lKGRlZmF1bHRfcHJvcCkNCmNvbG5hbWVzKGRlZmF1bHRfZGYpIDwtIGMoIkRlZmF1bHQiLCAiUHJvcG9ydGlvbiIpDQoNCiMgVGjDqm0gY+G7mXQgcGjhuqduIHRyxINtIMSR4buDIGzDoG0gbmjDo24NCmRlZmF1bHRfZGYkUGVyY2VudCA8LSBwYXN0ZTAocm91bmQoZGVmYXVsdF9kZiRQcm9wb3J0aW9uICogMTAwLCAxKSwgIiUiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuDQpnZ3Bsb3QoZGVmYXVsdF9kZiwgYWVzKHggPSAiIiwgeSA9IFByb3BvcnRpb24sIGZpbGwgPSBEZWZhdWx0KSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAxKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gUGVyY2VudCksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0gNCkgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyBraMOhY2ggaMOgbmcgY8OzIG7hu6MgcXXDoSBo4bqhbiIsIHggPSBOVUxMLCB5ID0gTlVMTCkgKw0KICB0aGVtZV92b2lkKCkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQoNCg0KKipE4buxYSB2w6BvIGLhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgY+G7p2EgYmnhur9uIGRlZmF1bHQsIHRhIGPDsyBjw6FjIG5o4bqtbiDEkeG7i25oIHNhdToqKg0KDQotIE5ow7NtIGtow7RuZyBjw7MgbuG7oyB0w61uIGThu6VuZyB44bqldSAobm8pIGNoaeG6v20gc+G7kSBsxrDhu6NuZyBs4bubbiBuaOG6pXQgduG7m2kgNCw0NDUgbmfGsOG7nWksIHTGsMahbmcg4bupbmcga2hv4bqjbmcgOTguNCUgdOG7lW5nIHPhu5EgbeG6q3UuIMSQw6J5IGzDoCBuaMOzbSBjaGnhur9tIMawdSB0aOG6vyBn4bqnbiBuaMawIHR1eeG7h3QgxJHhu5FpLg0KDQotIE5ow7NtIGPDsyBu4bujIHTDrW4gZOG7pW5nIHjhuqV1ICh5ZXMpIGNo4buJIGPDsyA3NiBuZ8aw4budaSwgY2hp4bq/bSB04bu3IGzhu4cgcuG6pXQgbmjhu48sIGtob+G6o25nIDEuNyUuDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNClBow6JuIGLhu5EgbuG7oyB0w61uIGThu6VuZyB44bqldSB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBjaG8gdGjhuqV5IHBo4bqnbiBs4bubbiBraMOhY2ggaMOgbmcga2jDtG5nIGPDsyBs4buLY2ggc+G7rSBu4bujIHjhuqV1LiDEkGnhu4F1IG7DoHkgcGjhuqNuIMOhbmggY2jhuqV0IGzGsOG7o25nIHTDrW4gZOG7pW5nIHTGsMahbmcgxJHhu5FpIHThu5F0IGPhu6dhIG5ow7NtIGtow6FjaCBow6BuZyDEkcaw4bujYyBraOG6o28gc8OhdC4NCg0KLS0tDQoNCiMjICoqMy4yIEtp4buDbSDEkeG7i25oIGNoaSBiw6xuaCBwaMawxqFuZyoqDQoNClRyb25nIG5naGnDqm4gY+G7qXUgbsOgeSwga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIChDaGktc3F1YXJlZCB0ZXN0KSDEkcaw4bujYyBz4butIGThu6VuZyBuaOG6sW0geMOhYyDEkeG7i25oIHhlbSBjw7MgdOG7k24gdOG6oWkgbeG7kWkgbGnDqm4gaOG7hyB0aOG7kW5nIGvDqiBnaeG7r2EgcXV54bq/dCDEkeG7i25oIHZheSB0acOqdSBkw7luZyBj4bunYSBraMOhY2ggaMOgbmcgKGJp4bq/biBwaOG7pSB0aHXhu5ljIGxvYW4pIHbhu5tpIG3hu5l0IHPhu5EgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jIHbDoCBraW5oIHThur8geMOjIGjhu5lpIChjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgcGjDom4gbG/huqFpKSBoYXkga2jDtG5nLiBD4bulIHRo4buDLCBjw6FjIGJp4bq/biBwaMOibiBsb+G6oWkgxJHGsOG7o2MgxJHGsGEgdsOgbyBraeG7g20gxJHhu4tuaCBiYW8gZ+G7k206DQoNCi0gVGjhu6kgbmjhuqV0LCBiaeG6v24gaG91c2luZyAodMOsbmggdHLhuqFuZyB2YXkgbXVhIG5ow6ApIHBo4bqjbiDDoW5oIHZp4buHYyBraMOhY2ggaMOgbmcgaGnhu4duIGPDsyDEkWFuZyB2YXkgdGnhu4FuIMSR4buDIG11YSBuaMOgIGhheSBraMO0bmcuIEJp4bq/biBuw6B5IGfhu5NtIGJhIG5ow7NtIGdpw6EgdHLhu4s6IOKAnHllc+KAnSwg4oCcbm/igJ0sIHbDoCDigJx1bmtub3du4oCdLiBLaeG7g20gxJHhu4tuaCBnacO6cCB4w6FjIMSR4buLbmggbGnhu4d1IHZp4buHYyDEkcOjIHZheSBtdWEgbmjDoCBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIGto4bqjIG7Eg25nIHRp4bq/cCB04bulYyB2YXkgdGnDqnUgZMO5bmcgaGF5IGtow7RuZy4NCg0KLSBUaOG7qSBoYWksIGJp4bq/biBtYXJpdGFsICh0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4pIHBo4bqjbiDDoW5oIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBj4bunYSBraMOhY2ggaMOgbmcsIGJhbyBn4buTbSBjw6FjIG5ow7NtOiDEkeG7mWMgdGjDom4sIMSRw6Mga+G6v3QgaMO0biB2w6AgbHkgaMO0bi4gVmnhu4djIGtp4buDbSDEkeG7i25oIGJp4bq/biBuw6B5IGNobyBwaMOpcCDEkcOhbmggZ2nDoSB4ZW0gdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24gcXV54bq/dCDEkeG7i25oIHZheSB0acOqdSBkw7luZyBoYXkga2jDtG5nLg0KDQotIFRo4bupIGJhLCBiaeG6v24gZWR1Y2F0aW9uICh0csOsbmggxJHhu5kgaOG7jWMgduG6pW4pIHRo4buDIGhp4buHbiBt4bupYyBo4buNYyB24bqlbiBjYW8gbmjhuqV0IGPhu6dhIGtow6FjaCBow6BuZyB24bubaSBjw6FjIG5ow7NtOiB0aeG7g3UgaOG7jWMsIHRydW5nIGjhu41jLCDEkeG6oWkgaOG7jWMvY2FvIMSR4bqzbmcgdsOgIGtow7RuZyByw7UuIFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBjw7MgdGjhu4MgcGjhuqNuIMOhbmgga2jhuqMgbsSDbmcgdMOgaSBjaMOtbmggY8WpbmcgbmjGsCBraOG6oyBuxINuZyB0aeG6v3AgY+G6rW4gdMOtbiBk4bulbmcsIGRvIMSRw7Mga2nhu4NtIMSR4buLbmggYmnhur9uIG7DoHkgcuG6pXQgcXVhbiB0cuG7jW5nLg0KDQotIFRo4bupIHTGsCwgYmnhur9uIGRlZmF1bHQgKG7hu6MgcXXDoSBo4bqhbikgY2hvIGJp4bq/dCBraMOhY2ggaMOgbmcgY8OzIHThu6tuZyBu4bujIHF1w6EgaOG6oW4gdHJvbmcgcXXDoSBraOG7qSBoYXkga2jDtG5nLiBCaeG6v24gbsOgeSBn4buTbSBoYWkgbmjDs206IOKAnHllc+KAnSB2w6Ag4oCcbm/igJ0uIMSQw6J5IGzDoCB54bq/dSB04buRIHRoZW4gY2jhu5F0IHRyb25nIMSRw6FuaCBnacOhIHLhu6dpIHJvIHTDrW4gZOG7pW5nIGPhu6dhIGtow6FjaCBow6BuZywgdsOgIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyBt4bqhbmggxJHhur9uIHZp4buHYyBj4bqlcCBraG/huqNuIHZheSBt4bubaS4NCg0KLSBDdeG7kWkgY8O5bmcsIGJp4bq/biBqb2IgKG5naOG7gSBuZ2hp4buHcCkgcGjhuqNuIMOhbmggbMSpbmggduG7sWMgbmdo4buBIG5naGnhu4dwIGhp4buHbiB04bqhaSBj4bunYSBraMOhY2ggaMOgbmcsIGJhbyBn4buTbSBuaGnhu4F1IG5ow7NtIG5oxrA6IG5ow6JuIHZpw6puIGjDoG5oIGNow61uaCwgbGFvIMSR4buZbmcgcGjhu5UgdGjDtG5nLCBkb2FuaCBuaMOibiwgaOG7jWMgc2luaCDigJMgc2luaCB2acOqbiwgbmfGsOG7nWkgxJHDoyBuZ2jhu4kgaMawdSwgdGjhuqV0IG5naGnhu4dwLC4uLiBOZ2jhu4EgbmdoaeG7h3AgY8OzIHRo4buDIHBo4bqjbiDDoW5oIG3hu6ljIHRodSBuaOG6rXAgdsOgIOG7lW4gxJHhu4tuaCB0w6BpIGNow61uaCwgdOG7qyDEkcOzIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggdmF5IHRpw6p1IGTDuW5nLg0KDQpWaeG7h2Mga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIGdp4buvYSB04burbmcgYmnhur9uIGvhu4MgdHLDqm4gduG7m2kgYmnhur9uIGxvYW4gc+G6vSBnacO6cCB4w6FjIMSR4buLbmggeGVtIG3hu5dpIMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYyBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZyBj4bunYSBraMOhY2ggaMOgbmcgaGF5IGtow7RuZy4gTuG6v3UgZ2nDoSB0cuG7iyBwLXZhbHVlIGPhu6dhIGtp4buDbSDEkeG7i25oIG5o4buPIGjGoW4gMC4wNSwgdGEgY8OzIHRo4buDIGvhur90IGx14bqtbiBy4bqxbmcgdOG7k24gdOG6oWkgbeG7kWkgbGnDqm4gaOG7hyB0aOG7kW5nIGvDqiBnaeG7r2EgaGFpIGJp4bq/bi4NCg0KIyMjICoqMy4yLjEgS2nhu4NtIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pIHbDoCB2YXkgbXVhIG5ow6AgKGhvdXNpbmcpKioNCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaCoqDQoNCi0gSDA6IEtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdmF5IHRpw6p1IGTDuW5nIChsb2FuKSB2w6AgdmF5IG11YSBuaMOgIChob3VzaW5nKQ0KLSBIMTogQ8OzIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHZheSB0acOqdSBkw7luZyAobG9hbikgdsOgIHZheSBtdWEgbmjDoCAoaG91c2luZykNCg0KYGBge3J9DQp0YWJsZV9sb2FuX2hvdXNpbmcgPC0gdGFibGUoZGF0YTEkbG9hbiwgZGF0YTEkaG91c2luZykNCmNoaXNxX2hvdXNpbmcgPC0gY2hpc3EudGVzdCh0YWJsZV9sb2FuX2hvdXNpbmcpDQpjaGlzcV9ob3VzaW5nDQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJFpbmgqKiANCg0KVuG7m2kgcC12YWx1ZSA9IDAuMjgzNyBs4bubbiBoxqFuIG3hu6ljIMO9IG5naMSpYSA1JS4gVuG6rXkgdGEga2jDtG5nIMSR4bunIGPGoSBz4bufIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMCwgY8OzIG5naMSpYSBsw6Aga2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgdsOgIHZheSBtdWEgbmjDoC4NCg0KIyMjICoqMy4yLjIgS2nhu4NtIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pIHbDoCBuZ2jhu4EgbmdoaeG7h3AgKGpvYikqKg0KIA0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaCoqDQoNCi0gSDA6IEtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2Egbmdo4buBIG5naGnhu4dwIHbDoCBraOG6oyBuxINuZyB2YXkgdGnDqnUgZMO5bmcuDQotIEgxOiBDw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2Egbmdo4buBIG5naGnhu4dwIHbDoCBraOG6oyBuxINuZyB2YXkgdGnDqnUgZMO5bmcuDQoNCmBgYHtyfQ0KIyBUaOG7sWMgaGnhu4duIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZw0KdGFibGVfbG9hbl9qb2IgPC0gdGFibGUoZGF0YTEkbG9hbiwgZGF0YTEkam9iKQ0KY2hpc3Ffam9iIDwtIGNoaXNxLnRlc3QodGFibGVfbG9hbl9qb2IpDQpjaGlzcV9qb2INCmBgYA0KDQoqKkvhur90IHF14bqjIGtp4buDbSDEkWluaCoqIA0KDQpW4bubaSBwLXZhbHVlID0gMi44NjNlLTA2IG5o4buPIGjGoW4gbeG7qWMgw70gbmdoxKlhIDUlLiBW4bqteSB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAsIGPDsyBuZ2jEqWEgbMOgIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgdsOgIG5naOG7gSBuZ2hp4buHcC4NCg0KIyMjICoqMy4yLjMgS2nhu4NtIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pIHbDoCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gKGVkdWNhdGlvbikqKg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNCg0KLSBIMDogS2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pIHbDoCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gKGVkdWNhdGlvbikuDQotIEgxOiBDw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdmF5IHRpw6p1IGTDuW5nIChsb2FuKSB2w6AgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIChlZHVjYXRpb24pLg0KDQpgYGB7cn0NCnRhYmxlX2xvYW5fZWR1IDwtIHRhYmxlKGRhdGExJGxvYW4sIGRhdGExJGVkdWNhdGlvbikNCmNoaXNxX2VkdSA8LSBjaGlzcS50ZXN0KHRhYmxlX2xvYW5fZWR1KQ0KY2hpc3FfZWR1DQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJFpbmgqKiANCg0KVuG7m2kgcC12YWx1ZSA9IDYuNjk4ZS0wNSBuaOG7jyBoxqFuIG3hu6ljIMO9IG5naMSpYSA1JS4gVuG6rXkgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwLCBjw7MgbmdoxKlhIGzDoCBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdmF5IHRpw6p1IGTDuW5ndsOgIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbi4NCg0KIyMjICoqMy4yLjQgS2nhu4NtIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pIHbDoCBu4bujIHF1w6EgaOG6oW4gKGRlZmF1bHQpKioNCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaCoqDQoNCi0gSDA6IEtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBu4bujIHF1w6EgaOG6oW4gKGRlZmF1bHQpIHbDoCB2aeG7h2MgdmF5IHRpw6p1IGTDuW5nIChsb2FuKS4NCi0gSDE6IEPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSB0w6xuaCB0cuG6oW5nIG7hu6MgcXXDoSBo4bqhbiAoZGVmYXVsdCkgdsOgIHZp4buHYyB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pLg0KDQpgYGB7cn0NCnRhYmxlX2xvYW5fZGVmYXVsdCA8LSB0YWJsZShkYXRhMSRsb2FuLCBkYXRhMSRkZWZhdWx0KQ0KY2hpc3FfZWR1IDwtIGNoaXNxLnRlc3QodGFibGVfbG9hbl9kZWZhdWx0KQ0KY2hpc3FfZWR1DQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJFpbmgqKiANCg0KVuG7m2kgcC12YWx1ZSA9IDAuMDAwMTA1MSBuaOG7jyBoxqFuIG3hu6ljIMO9IG5naMSpYSA1JS4gVuG6rXkgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwLCBjw7MgbmdoxKlhIGzDoCBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdmF5IHRpw6p1IGTDuW5nIHbDoCB0w6xuaCB0cuG6oW5nIG7hu6MgcXXDoSBo4bqhbi4NCg0KIyMjICoqMy4yLjUgS2nhu4NtIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pIHbDoCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gKG1hcml0YWwpKioNCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaCoqDQoNCi0gSDA6IEtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIHbDoCB2aeG7h2MgdmF5IHRpw6p1IGTDuW5nLg0KLSBIMTogQ8OzIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiB2w6Agdmnhu4djIHZheSB0acOqdSBkw7luZy4NCg0KYGBge3J9DQp0YWJsZV9sb2FuX21hcml0YWwgPC0gdGFibGUoZGF0YTEkbG9hbiwgZGF0YTEkbWFyaXRhbCkNCmNoaXNxX2VkdSA8LSBjaGlzcS50ZXN0KHRhYmxlX2xvYW5fbWFyaXRhbCkNCmNoaXNxX2VkdQ0KYGBgDQoNCioqS+G6v3QgcXXhuqMga2nhu4NtIMSRaW5oKiogDQoNClbhu5tpIHAtdmFsdWUgPSAwLjAwMjk3NSBuaOG7jyBoxqFuIG3hu6ljIMO9IG5naMSpYSA1JS4gVuG6rXkgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwLCBjw7MgbmdoxKlhIGzDoCBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIHbDoCB2aeG7h2MgdmF5IHRpw6p1IGTDuW5nLg0KDQpUaMO0bmcgcXVhIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNo4buJIGPDsyAxIGJp4bq/biBgaG91c2luZ2AgbMOgIGtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyB24bubaSBiaeG6v24gYGxvYW5gLCA0IGJp4bq/biDEkeG7mWMgbOG6rXAgY8OybiBs4bqhaSDEkeG7gXUgY8OzIG3hu5FpIGxpw6puIGjhu4cgduG7m2kgYmnhur9uIHBo4bulIHRodeG7mWMgbMOgIGBsb2FuYC4gVGnhur9wIHRoZW8gxJHDsyB0YSBz4bq9IHBow6JuIHTDrWNoIHPDonUgaMahbiB24buBIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIHbDoCB0w6xuaCB0cuG6oW5nIHZheSB0acOqdSBkw7luZyB24bubaSA0IGJp4bq/biDEkeG7mWMgbOG6rXAgbMOgOiBqb2IsIGVkdWNhdGlvbiwgbWFyaXRhbCB2w6AgZGVmYXVsdC4NCg0KIyMgKiozLjMgUGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBiaeG6v24gxJHhu5ljIGzhuq1wIHbDoCBiaeG6v24gcGjhu6UgdGh14buZYyoqDQojIyMgKiozLjMuMSBQaMOibiB0w61jaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIHZheSB0acOqdSBkw7luZyAobG9hbikgdsOgIG5naOG7gSBuZ2hp4buHcCAoam9iKSoqDQojIyMjICoqYS4gVGjhu5FuZyBrw6ogbcO0IHThuqMgZ2nhu69hIGhhaSBiaeG6v24qKg0KDQoqKlThuqFvIGLhuqNuZyB04bqnbiBz4buRKioNCg0KxJDhu4MgcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pIHbDoCBuZ2jhu4EgbmdoaeG7h3AgKGpvYiksIHRhIHRp4bq/biBow6BuaCB04bqhbyBi4bqjbmcgY2jDqW8gdOG6p24gc+G7kSB2w6AgYuG6o25nIHThuqduIHN14bqldCBwaOG6p24gdHLEg20gdMawxqFuZyDhu6luZyBuaOG6sW0gcXVhbiBzw6F0IHPhu7EgcGjDom4gYuG7kSBj4bunYSBjw6FjIG5ow7NtIMSR4buRaSB0xrDhu6NuZyB0cm9uZyB04burbmcgbG/huqFpIG5naOG7gSBuZ2hp4buHcC4NCg0KYGBge3J9DQp0YWJsZV9qb2IxIDwtIHRhYmxlKGRhdGExJGxvYW4sIGRhdGExJGpvYikNCnRhYmxlX2pvYjENCmBgYA0KDQoqKlRy4buxYyBxdWFuIGhvw6EgYuG6sW5nIGJp4buDdSDEkeG7kyoqDQoNCsSQ4buDIG1pbmggaOG7jWEgdHLhu7FjIHF1YW4gbeG7kWkgcXVhbiBo4buHIGdp4buvYSB0w6xuaCB0cuG6oW5nIHZheSB0acOqdSBkw7luZyB2w6Agbmdo4buBIG5naGnhu4dwLCB0YSBz4butIGThu6VuZyBiaeG7g3UgxJHhu5MgY+G7mXQgKGJhcnBsb3QpLg0KDQpgYGB7cn0NCiMgQ2h1eeG7g24gYuG6o25nIHThuqduIHPhu5Egc2FuZyBkYXRhIGZyYW1lIMSR4buDIGdncGxvdCBkw7luZyDEkcaw4bujYw0KZGZfam9iIDwtIGFzLmRhdGEuZnJhbWUodGFibGVfam9iMSkNCmNvbG5hbWVzKGRmX2pvYikgPC0gYygiTG9hbiIsICJKb2IiLCAiQ291bnQiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIGPhu5l0DQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGZfam9iLCBhZXMoeCA9IExvYW4sIHkgPSBDb3VudCwgZmlsbCA9IEpvYikpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIlBow6JuIGLhu5EgdmF5IHRpw6p1IGTDuW5nIHRoZW8gbmjDs20gbmdo4buBIG5naGnhu4dwIiwNCiAgICB4ID0gIk5ow7NtIG5naOG7gSBuZ2hp4buHcCIsDQogICAgeSA9ICJT4buRIGzGsOG7o25nIGtow6FjaCBow6BuZyIsDQogICAgZmlsbCA9ICJUw6xuaCB0cuG6oW5nIHZheSINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkNCiAgKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQqKg0KDQpE4buxYSB0csOqbiBi4bqjbmcgdOG6p24gc+G7kSBnaeG7r2EgaGFpIGJp4bq/biBsb2FuIHbDoCBqb2IsIGPDsyB0aOG7gyB0aOG6pXkgcuG6sW5nIOG7nyBo4bqndSBo4bq/dCBjw6FjIG5ow7NtIG5naOG7gSBuZ2hp4buHcCwgc+G7kSBsxrDhu6NuZyBraMOhY2ggaMOgbmcga2jDtG5nIHZheSB0acOqdSBkw7luZyBjaGnhur9tIMawdSB0aOG6vyByw7UgcuG7h3Qgc28gduG7m2kgc+G7kSBsxrDhu6NuZyBraMOhY2ggaMOgbmcgY8OzIHZheS4gTeG7mXQgc+G7kSBuaMOzbSBjw7Mgc+G7kSBsxrDhu6NuZyBraMOhY2ggaMOgbmcgdmF5IHRpw6p1IGTDuW5nIHTGsMahbmcgxJHhu5FpIGNhbyBiYW8gZ+G7k206DQoNCi0gTmjDs20gbWFuYWdlbWVudCBnaGkgbmjhuq1uIDEyMCBraMOhY2ggaMOgbmcgY8OzIHZheSB0acOqdSBkw7luZyB0csOqbiB04buVbmcgc+G7kSA5NjkgbmfGsOG7nWkgdGh14buZYyBuaMOzbSBuw6B5Lg0KDQotIE5ow7NtIHRlY2huaWNpYW4gY8OzIDExOSBuZ8aw4budaSB2YXkgdHJvbmcgc+G7kSA3NjggbmfGsOG7nWkuDQoNCi0gTmjDs20gYmx1ZS1jb2xsYXIgKGxhbyDEkeG7mW5nIHBo4buVIHRow7RuZykgY8OzIHPhu5EgbMaw4bujbmcgbmfGsOG7nWkgdmF5IHRpw6p1IGTDuW5nIGNhbyBuaOG6pXQsIHbhu5tpIDE1NiBraMOhY2ggaMOgbmcgdHLDqm4gdOG7lW5nIHPhu5EgOTQ2IG5nxrDhu51pLg0KDQpOZ8aw4bujYyBs4bqhaSwgY8OzIG5o4buvbmcgbmjDs20gbmdo4buBIG5naGnhu4dwIG3DoCBz4buRIGzGsOG7o25nIGtow6FjaCBow6BuZyB2YXkgdGnDqnUgZMO5bmcgcuG6pXQgdGjhuqVwLCBj4bulIHRo4buDOg0KDQotIE5ow7NtIHN0dWRlbnQgY2jhu4kgY8OzIDEga2jDoWNoIGjDoG5nIHZheSB0acOqdSBkw7luZy4NCg0KLSBOaMOzbSB1bmtub3duIGPFqW5nIGNo4buJIGdoaSBuaOG6rW4gMSBraMOhY2ggaMOgbmcgdmF5Lg0KDQpOaOG7r25nIGNvbiBz4buRIG7DoHkgY2hvIHRo4bqleSBy4bqxbmcsIG5o4buvbmcgbmjDs20gY8OzIG5naOG7gSBuZ2hp4buHcCDhu5VuIMSR4buLbmggdsOgIGPDsyBraOG6oyBuxINuZyB04bqhbyB0aHUgbmjhuq1wIHLDtSByw6BuZyBoxqFuIHRoxrDhu51uZyBjw7MgeHUgaMaw4bubbmcgdmF5IHRpw6p1IGTDuW5nIG5oaeG7gXUgaMahbi4gVHJvbmcga2hpIMSRw7MsIGPDoWMgbmjDs20gbmjGsCBo4buNYyBzaW5oIOKAkyBzaW5oIHZpw6puIGhv4bq3YyBraMO0bmcgeMOhYyDEkeG7i25oIG5naOG7gSBuZ2hp4buHcCBo4bqndSBuaMawIGtow7RuZyBjw7Mgbmh1IGPhuqd1IGhv4bq3YyBraMO0bmcgxJHhu6cgxJFp4buBdSBraeG7h24gxJHhu4MgdmF5Lg0KDQoNCiMjIyMgKipiLiBLaeG7g20gxJHhu4tuaCB04bu3IGzhu4cgZ2nhu69hIGhhaSBiaeG6v24qKg0KDQpUw6FjIGdp4bqjIG114buRbiBraeG7g20gdHJhIHhlbSB04bu3IGzhu4cgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIG5ow7NtIGtow6FjaCBow6BuZyDEkWFuZyBjw7Mgdmnhu4djIGzDoG0gKGVtcGxveWVkKSBjw7MgYuG6sW5nIDYwJSBoYXkga2jDtG5nLg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNCg0KLSBHaeG6oyB0aHV54bq/dCBIMDogVOG7tyBs4buHIGtow6FjaCBow6BuZyB2YXkgdGnDqnUgZMO5bmcgdHJvbmcgbmjDs20gY8OzIHZp4buHYyBsw6BtIGzDoCA2MCUuDQotIEdp4bqjIHRodXnhur90IEgxOiBU4bu3IGzhu4cga2jDoWNoIGjDoG5nIHZheSB0acOqdSBkw7luZyB0cm9uZyBuaMOzbSBjw7Mgdmnhu4djIGzDoG0ga2jDoWMgNjAlLg0KDQpgYGB7cn0NCiMgQsaw4bubYyAxOiBU4bqhbyBuaMOzbSBuZ2jhu4ENCmRhdGExJGpvYl9ncm91cCA8LSBpZmVsc2UoZGF0YTEkam9iICVpbiUgYygidW5lbXBsb3llZCIsICJ1bmtub3duIiksICJub24tZW1wbG95ZWQiLCAiZW1wbG95ZWQiKQ0KDQojIELGsOG7m2MgMjogTOG7jWMgbmjDs20gImVtcGxveWVkIg0KZW1wbG95ZWRfZGF0YSA8LSBzdWJzZXQoZGF0YTEsIGpvYl9ncm91cCA9PSAiZW1wbG95ZWQiKQ0KDQojIELGsOG7m2MgMzogVMOtbmggc+G7kSBsxrDhu6NuZyB2w6Agc+G7kSBuZ8aw4budaSB2YXkNCm5fZW1wbG95ZWQgPC0gbnJvdyhlbXBsb3llZF9kYXRhKQ0Kbl9sb2FuX3llcyA8LSBzdW0oZW1wbG95ZWRfZGF0YSRsb2FuID09ICJ5ZXMiKQ0KDQojIEtp4buDbSDEkeG7i25oIHThu7cgbOG7hyBjw7MgYuG6sW5nIDAuNiBraMO0bmcNCnByb3AudGVzdCh4ID0gbl9sb2FuX3llcywgbiA9IG5fZW1wbG95ZWQsIHAgPSAwLjYsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpDQpgYGANCg0KDQoqKkvhur90IGx14bqtbioqDQoNCi0gROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmgsIGdpw6EgdHLhu4sgcC12YWx1ZSBy4bqldCBuaOG7jyAoZ+G6p24gYuG6sW5nIDApLCDEkWnhu4F1IG7DoHkgY2hvIHRo4bqleSB04bu3IGzhu4cgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZyBjw7Mgdmnhu4djIGzDoG0ga2jDoWMgeGEgc28gduG7m2kgZ2nhuqMgxJHhu4tuaCBiYW4gxJHhuqd1IGzDoCA2MCUuIFbDrCB24bqteSwgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAg4bufIG3hu6ljIMO9IG5naMSpYSA1JS4NCg0KLSBL4bq/dCBxdeG6oyBwaMOibiB0w61jaCBjaG8gdGjhuqV5ICoqdOG7tyBs4buHIHZheSB0acOqdSBkw7luZyB0aOG7sWMgdOG6vyBjaOG7iSBraG/huqNuZyAxNS41NSUqKiwgdGjhuqVwIGjGoW4gcuG6pXQgbmhp4buBdSBzbyB24bubaSBt4bupYyBnaeG6oyDEkeG7i25oLiDEkOG7k25nIHRo4budaSwgKipraG/huqNuZyB0aW4gY+G6rXkgOTUlIG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgMTQuNDklIMSR4bq/biAxNi42NiUqKiwgbmdoxKlhIGzDoCB04bu3IGzhu4cgdGjhu7FjIHThur8gZ+G6p24gbmjGsCBsdcO0biBu4bqxbSB0cm9uZyBraG/huqNuZyBuw6B5LiANCg0KLSBUw7NtIGzhuqFpLCBraMOhY2ggaMOgbmcgY8OzIHZp4buHYyBsw6BtIHRyb25nIHThuq1wIGThu68gbGnhu4d1IG7DoHkga2jDtG5nIGPDsyB4dSBoxrDhu5tuZyB2YXkgdGnDqnUgZMO5bmcgbmhp4buBdSBuaMawIGvhu7MgduG7jW5nLg0KDQpUaeG6v3AgdGhlbywgdMOhYyBnaeG6oyBtdeG7kW4ga2nhu4NtIHRyYSB4ZW0gdOG7tyBs4buHIHZheSB0acOqdSBkw7luZyBj4bunYSBuaMOzbSBraMOhY2ggaMOgbmcga2jDtG5nIGPDsyB2aeG7h2MgbMOgbSAoZW1wbG95ZWQpIGPDsyBi4bqxbmcgMzAlIGhheSBraMO0bmcuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotIEdp4bqjIHRodXnhur90IEgwOiBU4bu3IGzhu4cga2jDoWNoIGjDoG5nIHZheSB0acOqdSBkw7luZyB0cm9uZyBuaMOzbSBraMO0bmcgY8OzIHZp4buHYyBsw6BtIGzDoCAzMCUuDQotIEdp4bqjIHRodXnhur90IEgxOiBU4bu3IGzhu4cga2jDoWNoIGjDoG5nIHZheSB0acOqdSBkw7luZyB0cm9uZyBuaMOzbSBraMO0bmcgY8OzIHZp4buHYyBsw6BtIGtow6FjIDMwJS4NCg0KYGBge3J9DQojIELGsOG7m2MgMjogVOG6oW8gYuG6o25nIGNow6lvIGdp4buvYSBsb2FuIHbDoCBqb2JfZ3JvdXANCnRhYmxlX2xvYW5fam9iZ3JvdXAgPC0gdGFibGUoZGF0YTEkbG9hbiwgZGF0YTEkam9iX2dyb3VwKQ0KDQojIELGsOG7m2MgMzogTOG6pXkgc+G7kSBuZ8aw4budaSBub24tZW1wbG95ZWQgY8OzIHZheQ0Kbl9sb2FuX3llc19ub25lbXAgPC0gdGFibGVfbG9hbl9qb2Jncm91cFsieWVzIiwgIm5vbi1lbXBsb3llZCJdDQpuX25vbmVtcCA8LSBzdW0odGFibGVfbG9hbl9qb2Jncm91cFssICJub24tZW1wbG95ZWQiXSkNCg0KIyBCxrDhu5tjIDQ6IEtp4buDbSDEkeG7i25oIHThu7cgbOG7hyB24bubaSBwIGdp4bqjIMSR4buLbmggPSAwLjMNCnByb3AudGVzdCh4ID0gbl9sb2FuX3llc19ub25lbXAsIG4gPSBuX25vbmVtcCwgcCA9IDAuMywNCiAgICAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiLCBjb3JyZWN0ID0gVFJVRSkNCmBgYA0KDQoqKkvhur90IGx14bqtbioqDQoNCkThu7FhIHRyw6puIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oLCBnacOhIHRy4buLIHAtdmFsdWUgcuG6pXQgbmjhu48gKDwgMC4wNSksIHbDrCB24bqteSB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSOKCgCDhu58gbeG7qWMgw70gbmdoxKlhIDUlLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB04bu3IGzhu4cgdmF5IHRpw6p1IGTDuW5nIHRo4buxYyB04bq/IGPhu6dhIGtow6FjaCBow6BuZyBraMO0bmcgY8OzIHZp4buHYyBsw6BtIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyBzbyB24bubaSB04bu3IGzhu4cgZ2nhuqMgxJHhu4tuaCBsw6AgMzAlLg0KDQpD4bulIHRo4buDLCB04bu3IGzhu4cgdmF5IHRo4buxYyB04bq/IGNo4buJIGtob+G6o25nIDguNDMlLCB0aOG6pXAgaMahbiBy4bqldCBuaGnhu4F1IHNvIHbhu5tpIGvhu7MgduG7jW5nIGJhbiDEkeG6p3UuIEtob+G6o25nIHRpbiBj4bqteSA5NSUgKDQuODYlIOKAkyAxNC4wMiUpIGNobyB0aOG6pXkgdOG7tyBs4buHIHRo4buxYyB04bq/IG7hurFtIOG7lW4gxJHhu4tuaCB0cm9uZyBt4bupYyB0aOG6pXAsIHBo4bqjbiDDoW5oIHLhurFuZyBraMOhY2ggaMOgbmcga2jDtG5nIGPDsyB2aeG7h2MgbMOgbSB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBuw6B5IMOtdCBjw7MgeHUgaMaw4bubbmcgdmF5IHRpw6p1IGTDuW5nLg0KDQojIyMjICoqYy4gUGjDom4gdMOtY2ggdGjDtG5nIHF1YSBSZWxhdGl2ZSBSaXNrIHbDoCBPZGQgUmF0aW8qKg0KDQrEkOG7gyDEkcOhbmggZ2nDoSBz4buxIGtow6FjIGJp4buHdCB24buBIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZyBnaeG7r2EgaGFpIG5ow7NtIGtow6FjaCBow6BuZyBjw7Mgdmnhu4djIGzDoG0gKGVtcGxveWVkKSB2w6Aga2jDtG5nIGPDsyB2aeG7h2MgbMOgbSAobm9uLWVtcGxveWVkKSwgdMOhYyBnaeG6oyBz4butIGThu6VuZyBoYWkgY2jhu4kgc+G7kSB0aOG7kW5nIGvDqiBwaOG7lSBiaeG6v24gbMOgIFJpc2sgUmF0aW8gKFJSKSB2w6AgT2RkcyBSYXRpbyAoT1IpLiBL4bq/dCBxdeG6oyDEkcaw4bujYyB0csOsbmggYsOgeSBuaMawIHNhdToNCg0KYGBge3J9DQojIFThuqFvIG1hIHRy4bqtbiB04bqnbiBz4buRIGdp4buvYSBsb2FuIHbDoCBqb2JfZ3JvdXANCm1hdF9qb2IgPC0gbWF0cml4KGMoDQogIHN1bShkYXRhMSRsb2FuID09ICJubyIgJiBkYXRhMSRqb2JfZ3JvdXAgPT0gIm5vbi1lbXBsb3llZCIpLA0KICBzdW0oZGF0YTEkbG9hbiA9PSAibm8iICYgZGF0YTEkam9iX2dyb3VwID09ICJlbXBsb3llZCIpLA0KICBzdW0oZGF0YTEkbG9hbiA9PSAieWVzIiAmIGRhdGExJGpvYl9ncm91cCA9PSAibm9uLWVtcGxveWVkIiksDQogIHN1bShkYXRhMSRsb2FuID09ICJ5ZXMiICYgZGF0YTEkam9iX2dyb3VwID09ICJlbXBsb3llZCIpDQopLA0KbnJvdyA9IDIsDQpieXJvdyA9IEZBTFNFLA0KZGltbmFtZXMgPSBsaXN0KA0KICBMb2FuID0gYygibm8iLCAieWVzIiksDQogIEpvYl9Hcm91cCA9IGMoIm5vbi1lbXBsb3llZCIsICJlbXBsb3llZCIpDQopKQ0KDQojIEhp4buDbiB0aOG7iyBi4bqjbmcNCm1hdF9qb2INCg0KIyBUw61uaCBSaXNrIFJhdGlvDQpsaWJyYXJ5KGVwaXRvb2xzKQ0KcnJfam9iIDwtIHJpc2tyYXRpbyhtYXRfam9iKQ0KcnJfam9iJG1lYXN1cmUNCg0KIyBUw61uaCBPZGRzIFJhdGlvDQpvcl9qb2IgPC0gb2Rkc3JhdGlvKG1hdF9qb2IpDQpvcl9qb2IkbWVhc3VyZQ0KYGBgDQoNClNhdSBraGkgdMOtbmggdG/DoW4gTmd1eSBjxqEgdMawxqFuZyDEkeG7kWkgKFJlbGF0aXZlIFJpc2sgLSBSUikgdsOgIFThu7cgbOG7hyBjxrDhu6NjIChPZGRzIFJhdGlvIC0gT1IpIG5o4bqxbSBzbyBzw6FuaCB4dSBoxrDhu5tuZyB2YXkgdGnDqnUgZMO5bmcgZ2nhu69hIGhhaSBuaMOzbSBraMOhY2ggaMOgbmcsIGvhur90IHF14bqjIGNobyB0aOG6pXkgY+G6oyBSUiB2w6AgT1IgxJHhu4F1IGzhu5tuIGjGoW4gMS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkga2jDoWNoIGjDoG5nIGPDsyB2aeG7h2MgbMOgbSBjw7Mga2jhuqMgbsSDbmcgdmF5IHRpw6p1IGTDuW5nIGNhbyBoxqFuIHNvIHbhu5tpIG5ow7NtIGtow7RuZyBjw7Mgdmnhu4djIGzDoG0uDQoNCkPhu6UgdGjhu4M6DQoNCi0gTmd1eSBjxqEgdMawxqFuZyDEkeG7kWkgKFJSKSA9IDEuODQzOiBOZ2jEqWEgbMOgIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyDhu58gbmjDs20ga2jDoWNoIGjDoG5nIGPDsyB2aeG7h2MgbMOgbSBjYW8gaMahbiBraG/huqNuZyAxLjg0IGzhuqduIHNvIHbhu5tpIG5ow7NtIGtow7RuZyBjw7Mgdmnhu4djIGzDoG0uDQoNCi0gVOG7tyBs4buHIGPGsOG7o2MgKE9SKSA9IDEuOTc4OiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgdOG7tyBs4buHIGPGsOG7o2MgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIG5ow7NtIGPDsyB2aeG7h2MgbMOgbSBjYW8gaMahbiBn4bqnbiBn4bqlcCAyIGzhuqduIHNvIHbhu5tpIG5ow7NtIGtow7RuZyBjw7Mgdmnhu4djIGzDoG0uDQoNCg0KIyMjICoqMy4zLjIgUGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pIHbDoCBu4bujIHF1w6EgaOG6oW4gKGRlZmF1bHQpKioNCiMjIyMgKiphLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBnaeG7r2EgaGFpIGJp4bq/bioqDQoNCsSQ4buDIHTDrG0gaGnhu4N1IG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHTDrG5oIHRy4bqhbmcgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZyB2w6AgdMOsbmggdHLhuqFuZyBu4bujIHTDrW4gZOG7pW5nIHRyxrDhu5tjIMSRw7MsIHTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oIHThuqFvIGLhuqNuZyB04bqnbiBz4buRIGNow6lvIGdp4buvYSBoYWkgYmnhur9uIGBsb2FuYCB2w6AgYGRlZmF1bHRgLCDEkeG7k25nIHRo4budaSB0cuG7sWMgcXVhbiBow7NhIGvhur90IHF14bqjIHRow7RuZyBxdWEgYmnhu4N1IMSR4buTIGPhu5l0Lg0KDQoqKlThuqFvIGLhuqNuZyB04bqnbiBz4buRKioNCmBgYHtyfQ0KdGFibGVfZGVmYXVsdDEgPC0gdGFibGUoZGF0YTEkbG9hbiwgZGF0YTEkZGVmYXVsdCkNCnRhYmxlX2RlZmF1bHQxDQpgYGANCg0KKipUcuG7sWMgcXVhbiBob8OhIGLhurFuZyBiaeG7g3UgxJHhu5MqKg0KYGBge3J9DQpkZl9kZWZhdWx0IDwtIGFzLmRhdGEuZnJhbWUodGFibGVfZGVmYXVsdDEpDQpjb2xuYW1lcyhkZl9kZWZhdWx0KSA8LSBjKCJMb2FuIiwgIkRlZmF1bHQiLCAiQ291bnQiKQ0KDQpnZ3Bsb3QoZGZfZGVmYXVsdCwgYWVzKHggPSBMb2FuLCB5ID0gQ291bnQsIGZpbGwgPSBEZWZhdWx0KSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiUGjDom4gYuG7kSB2YXkgdGnDqnUgZMO5bmcgdGhlbyB0cuG6oW5nIHRow6FpIG7hu6MgdMOtbiBk4bulbmciLA0KICAgIHggPSAiTuG7oyB0w61uIGThu6VuZyIsDQogICAgeSA9ICJT4buRIGzGsOG7o25nIiwNCiAgICBmaWxsID0gIlZheSB0acOqdSBkw7luZyINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQqKg0KDQotIFRyb25nIG5ow7NtIGtow6FjaCBow6BuZyBraMO0bmcgY8OzIG7hu6MgcXXDoSBo4bqhbiwgcGjhuqduIGzhu5tuIHbhuqtuIGNo4buNbiBraMO0bmcgdmF5IHRpw6p1IGTDuW5nLCB0dXkgbmhpw6puIGPFqW5nIGPDsyB04bubaSA2NjYgbmfGsOG7nWkgxJHDoyB2YXkuDQoNCi0gTmfGsOG7o2MgbOG6oWksIHRyb25nIG5ow7NtIGPDsyBu4bujIHF1w6EgaOG6oW4sIGPDsyAyNSBuZ8aw4budaSB24bqrbiB0aeG6v3AgdOG7pWMgdmF5LCBjaG8gdGjhuqV5IG3hu5l0IHBo4bqnbiBraMOhY2ggaMOgbmcgZMO5IGPDsyBs4buLY2ggc+G7rSB0w61uIGThu6VuZyB44bqldSB24bqrbiBjw7Mgbmh1IGPhuqd1IHZheSB24buRbi4NCg0KxJDhu4MgcGjDom4gdMOtY2ggc8OidSBoxqFuLCBjw7MgdGjhu4MgdGnhur9wIHThu6VjIHTDrW5oIHThu7cgc+G7kSBuZ3V5IGPGoSAoUmVsYXRpdmUgUmlzaykgdsOgIHThu7cgbOG7hyBjxrDhu6NjIChPZGRzIFJhdGlvKSBuaOG6sW0gxJHDoW5oIGdpw6EgeMOhYyBzdeG6pXQgdsOgIGto4bqjIG7Eg25nIHZheSBnaeG7r2EgaGFpIG5ow7NtLg0KDQoNCiMjIyMgKipiLiBLaeG7g20gxJHhu4tuaCB04bu3IGzhu4cgZ2nhu69hIGhhaSBiaeG6v24qKg0KDQpUw6FjIGdp4bqjIG114buRbiBraeG7g20gdHJhIHhlbSB04bu3IGzhu4cgdmF5IHRpw6p1IGTDuW5nIHRyb25nIG5ow7NtIGtow6FjaCBow6BuZyBraMO0bmcgY8OzIG7hu6MgcXXDoSBo4bqhbiBjw7MgYuG6sW5nIDUlIGhheSBraMO0bmcuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotIEdp4bqjIHRodXnhur90IEgwOiBU4bu3IGzhu4cgdmF5IHRpw6p1IGTDuW5nIHRyb25nIG5ow7NtIGtow7RuZyBjw7MgbuG7oyBxdcOhIGjhuqFuIGLhurFuZyA1JSANCg0KLSBHaeG6oyB0aHV54bq/dCBIMTogVOG7tyBs4buHIHZheSB0acOqdSBkw7luZyB0cm9uZyBuaMOzbSBraMO0bmcgY8OzIG7hu6MgcXXDoSBo4bqhbiBraMOhYyA1JSAuDQoNCmBgYHtyfQ0KIyBM4buNYyBk4buvIGxp4buHdSBuaMOzbSBkZWZhdWx0ID0gIm5vIg0KZGVmYXVsdF9ubyA8LSBzdWJzZXQoZGF0YTEsIGRlZmF1bHQgPT0gIm5vIikNCg0KIyBUw61uaCBz4buRIG5nxrDhu51pIHRyb25nIG5ow7NtIHbDoCBz4buRIG5nxrDhu51pIHZheSB0acOqdSBkw7luZw0Kbl9kZWZhdWx0X25vIDwtIG5yb3coZGVmYXVsdF9ubykNCm5fbG9hbl95ZXNfZGVmYXVsdF9ubyA8LSBzdW0oZGVmYXVsdF9ubyRsb2FuID09ICJ5ZXMiKQ0KDQojIFRo4buxYyBoaeG7h24ga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIG3hu5l0IG3huqt1IChzbyB24bubaSBnaeG6oyDEkeG7i25oIDUlKQ0KcHJvcC50ZXN0KHggPSBuX2xvYW5feWVzX2RlZmF1bHRfbm8sIG4gPSBuX2RlZmF1bHRfbm8sIHAgPSAwLjA1LCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKQ0KYGBgDQoNCioqS+G6v3QgbHXhuq1uKioNCg0KLSBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5IHThu7cgbOG7hyB2YXkgdGnDqnUgZMO5bmcgdGjhu7FjIHThur8gY+G7p2EgbmjDs20ga2jDoWNoIGjDoG5nIGtow7RuZyBjw7MgbuG7oyB0w61uIGThu6VuZyBxdcOhIGjhuqFuIGzDoCAxNC45OCUsIGNhbyBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIHThu7cgbOG7hyBnaeG6oyDEkeG7i25oIGJhbiDEkeG6p3UgbMOgIDUlLiBW4bubaSBnacOhIHRy4buLIHAtdmFsdWUgZ+G6p24gYuG6sW5nIDAsIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMCDhu58gbeG7qWMgw70gbmdoxKlhIDUlLiBOZ2/DoGkgcmEsIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyB0aOG7sWMgdOG6vyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDEzLjk1JSDEkeG6v24gMTYuMDclDQotIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHLhurFuZyBuZ2F5IGPhuqMgdHJvbmcgbmjDs20ga2jDoWNoIGjDoG5nIMSRxrDhu6NjIMSRw6FuaCBnacOhIGzDoCAidOG7kXQiIHbhu4EgbeG6t3QgdMOtbiBk4bulbmcgKGtow7RuZyBjw7MgbuG7oyBxdcOhIGjhuqFuKSwgdGjDrCB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgduG6q24g4bufIG3hu6ljIGtow6EgY2FvLiANCg0KVMOzbSBs4bqhaSwgdmnhu4djIGtow7RuZyBjw7MgbuG7oyBxdcOhIGjhuqFuIGtow7RuZyDEkeG7k25nIG5naMSpYSB24bubaSB2aeG7h2Mga2jDoWNoIGjDoG5nIGtow7RuZyB2YXkgdGnDqnUgZMO5bmcsIG5nxrDhu6NjIGzhuqFpLCDEkcOieSBjw7JuIGPDsyB0aOG7gyBsw6AgbmjDs20gbeG7pWMgdGnDqnUgdGnhu4FtIG7Eg25nIGPhu6dhIGPDoWMgY2hp4bq/biBk4buLY2ggdMOtbiBk4bulbmcgdGnDqnUgZMO5bmcuDQoNClRp4bq/cCB0aGVvIHTDoWMgZ2nhuqMgbXXhu5FuIGtp4buDbSB0cmEgeGVtIHThu7cgbOG7hyB2YXkgdGnDqnUgZMO5bmcgdHJvbmcgbmjDs20ga2jDoWNoIGjDoG5nIGtow7RuZyBjw7MgbuG7oyB0w61uIGThu6VuZyBxdcOhIGjhuqFuIGPDsyBi4bqxbmcgMTAlIGhheSBraMO0bmcuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotIEdp4bqjIHRodXnhur90IEgwOiBU4bu3IGzhu4cgdmF5IHRpw6p1IGTDuW5nIHRyb25nIG5ow7NtIGPDsyBu4bujIHF1w6EgaOG6oW4gYuG6sW5nIDEwJSANCg0KLSBHaeG6oyB0aHV54bq/dCBIMTogVOG7tyBs4buHIHZheSB0acOqdSBkw7luZyB0cm9uZyBuaMOzbSBjw7MgbuG7oyBxdcOhIGjhuqFuIGtow6FjIDEwJSAuDQoNCmBgYHtyfQ0KIyBM4buNYyBk4buvIGxp4buHdSB0aGVvIHRy4bqhbmcgdGjDoWkgZGVmYXVsdCA9ICJ5ZXMiDQpkZWZhdWx0X3llc19kYXRhIDwtIHN1YnNldChkYXRhMSwgZGVmYXVsdCA9PSAieWVzIikNCg0KIyBU4buVbmcgc+G7kSBraMOhY2ggaMOgbmcgY8OzIG7hu6MgcXXDoSBo4bqhbg0Kbl9kZWZhdWx0X3llcyA8LSBucm93KGRlZmF1bHRfeWVzX2RhdGEpDQoNCiMgU+G7kSBraMOhY2ggaMOgbmcgY8OzIG7hu6MgcXXDoSBo4bqhbiB2w6AgdmF5IHRpw6p1IGTDuW5nDQpuX2xvYW5feWVzX2RlZmF1bHRfeWVzIDwtIHN1bShkZWZhdWx0X3llc19kYXRhJGxvYW4gPT0gInllcyIpDQoNCiMgS2nhu4NtIMSR4buLbmggdOG7tyBs4buHIGPDsyBi4bqxbmcgMTAlDQpwcm9wLnRlc3QoeCA9IG5fbG9hbl95ZXNfZGVmYXVsdF95ZXMsDQogICAgICAgICAgbiA9IG5fZGVmYXVsdF95ZXMsDQogICAgICAgICAgcCA9IDAuMTAsDQogICAgICAgICAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIikNCg0KYGBgDQoNCioqS+G6v3QgbHXhuq1uKioNCg0KLSBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5IHThu7cgbOG7hyB2YXkgdGnDqnUgZMO5bmcgdGjhu7FjIHThur8gY+G7p2EgbmjDs20ga2jDoWNoIGjDoG5nIGPDsyBu4bujIHTDrW4gZOG7pW5nIHF1w6EgaOG6oW4gbMOgIDMyLjg5JSwgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgdOG7tyBs4buHIGdp4bqjIMSR4buLbmggYmFuIMSR4bqndSBsw6AgMTAlLiBW4bubaSBnacOhIHRy4buLIHAtdmFsdWUgcuG6pXQgbmjhu48gKOKJiCAwKSwgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAg4bufIG3hu6ljIMO9IG5naMSpYSA1JS4gTmdvw6BpIHJhLCBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgdGjhu7FjIHThur8gbuG6sW0gdHJvbmcga2hv4bqjbmcgdOG7qyAyMi44MCUgxJHhur9uIDQ0LjczJS4NCg0KLSDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBy4bqxbmcgbmjDs20ga2jDoWNoIGjDoG5nIGPDsyBs4buLY2ggc+G7rSB0w61uIGThu6VuZyBraMO0bmcgdOG7kXQgKHThu6tuZyBu4bujIHF1w6EgaOG6oW4pIGzhuqFpIGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgY2FvIGjGoW4gbmhp4buBdSBzbyB24bubaSBr4buzIHbhu41uZy4gxJBp4buBdSBuw6B5IGPDsyB0aOG7gyBwaOG6o24gw6FuaCB4dSBoxrDhu5tuZyBz4butIGThu6VuZyB0w61uIGThu6VuZyBuaGnhu4F1IGjGoW4gY+G7p2EgbmjDs20ga2jDoWNoIGjDoG5nIG7DoHkgaG/hurdjIGPDsyB0aOG7gyBsw6AgZOG6pXUgaGnhu4d1IHLhu6dpIHJvIHRyb25nIGjDoG5oIHZpIHTDoGkgY2jDrW5oLg0KDQpUw7NtIGzhuqFpLCBraMOhY2ggaMOgbmcgY8OzIG7hu6MgdMOtbiBk4bulbmcgcXXDoSBo4bqhbiB24bqrbiB0aeG6v3AgdOG7pWMgdGhhbSBnaWEgdsOgbyBjw6FjIGtob+G6o24gdmF5IHRpw6p1IGTDuW5nLCB0aOG6rW0gY2jDrSDhu58gbeG7qWMgY2FvIGjGoW4gxJHDoW5nIGvhu4MuIMSQw6J5IGzDoCBuaMOzbSBj4bqnbiDEkcaw4bujYyBjw6FjIHThu5UgY2jhu6ljIHTDrW4gZOG7pW5nIHRoZW8gZMO1aSBjaOG6t3QgY2jhur0gdsOgIHRoaeG6v3Qga+G6vyBjaMOtbmggc8OhY2ggY2hvIHZheSBwaMO5IGjhu6NwIG5o4bqxbSBo4bqhbiBjaOG6vyBy4bunaSBybyB0w61uIGThu6VuZy4NCg0KDQojIyMjICoqYy4gUGjDom4gdMOtY2ggdGjDtG5nIHF1YSBSZWxhdGl2ZSBSaXNrIHbDoCBPZGQgUmF0aW8qKg0KDQpgYGB7cn0NCiMgVOG6oW8gbWEgdHLhuq1uIHbhu5tpIG5ow7NtICdubycgKGtow7RuZyB2YXkgdGnDqnUgZMO5bmcpIGzDoG0gZMOybmcgxJHhuqd1IHRpw6puID0gbmjDs20gdGhhbSBjaGnhur91DQptYXRfZGVmYXVsdCA8LSBtYXRyaXgoYygNCiAgc3VtKGRhdGExJGxvYW4gPT0gIm5vIiAmIGRhdGExJGRlZmF1bHQgPT0gInllcyIpLCAgICMgYQ0KICBzdW0oZGF0YTEkbG9hbiA9PSAibm8iICYgZGF0YTEkZGVmYXVsdCA9PSAibm8iKSwgICAgIyBiDQogIHN1bShkYXRhMSRsb2FuID09ICJ5ZXMiICYgZGF0YTEkZGVmYXVsdCA9PSAieWVzIiksICAjIGMNCiAgc3VtKGRhdGExJGxvYW4gPT0gInllcyIgJiBkYXRhMSRkZWZhdWx0ID09ICJubyIpICAgICMgZA0KKSwNCmJ5cm93ID0gVFJVRSwgbnJvdyA9IDIsDQpkaW1uYW1lcyA9IGxpc3QoTG9hbiA9IGMoIm5vIiwgInllcyIpLCBEZWZhdWx0ID0gYygieWVzIiwgIm5vIikpKQ0KDQojIEhp4buDbiB0aOG7iyBi4bqjbmcgdOG6p24gc+G7kQ0KbWF0X2RlZmF1bHQNCg0KIyBUw61uaCBSUiB2w6AgT1IgduG7m2kgbmjDs20gIm5vIiBsw6BtIHRoYW0gY2hp4bq/dQ0KbGlicmFyeShlcGl0b29scykNCnJyX2RlZmF1bHQgPC0gcmlza3JhdGlvKG1hdF9kZWZhdWx0KQ0KcnJfZGVmYXVsdCRtZWFzdXJlDQoNCm9yX2RlZmF1bHQgPC0gb2Rkc3JhdGlvKG1hdF9kZWZhdWx0KQ0Kb3JfZGVmYXVsdCRtZWFzdXJlDQoNCg0KYGBgDQoNClNhdSBraGkgdMOtbmggdG/DoW4gUmVsYXRpdmUgUmlzayAoUlIpIHbDoCBPZGRzIFJhdGlvIChPUikgxJHhu4Mgc28gc8OhbmggeMOhYyBzdeG6pXQgdsOgIGto4bqjIG7Eg25nIHZheSB0acOqdSBkw7luZyBnaeG7r2EgaGFpIG5ow7NtIGtow6FjaCBow6BuZyAoY8OzIHbDoCBraMO0bmcgY8OzIG7hu6MgdMOtbiBk4bulbmcgcXXDoSBo4bqhbiksIGvhur90IHF14bqjIGNobyB0aOG6pXkgY+G6oyBSUiB2w6AgT1IgxJHhu4F1IG5o4buPIGjGoW4gMSwgxJFp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgIGtow6FjaCBow6BuZyBjw7MgbuG7oyBxdcOhIGjhuqFuIMOtdCBjw7MgeHUgaMaw4bubbmcgdmF5IHRpw6p1IGTDuW5nIGjGoW4gc28gduG7m2kgbmjDs20ga2jDtG5nIGPDsyBu4bujIHF1w6EgaOG6oW4uDQoNCkPhu6UgdGjhu4M6DQoNCi0gTmd1eSBjxqEgdMawxqFuZyDEkeG7kWkgKFJSKSBsw6AgMC45NzY4LCB04bupYyBsw6AgbmjDs20ga2jDoWNoIGjDoG5nIGtow7RuZyBjw7MgbuG7oyBxdcOhIGjhuqFuIGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgYuG6sW5nIDk3LjY4JSBzbyB24bubaSBuaMOzbSBraMOhY2ggaMOgbmcgY8OzIG7hu6MgcXXDoSBo4bqhbi4gTsOzaSBjw6FjaCBraMOhYywgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIG5ow7NtIGtow7RuZyBjw7MgbuG7oyBxdcOhIGjhuqFuIHRo4bqlcCBoxqFuIG3hu5l0IGNow7p0IHNvIHbhu5tpIG5ow7NtIGPDsyBu4bujIHF1w6EgaOG6oW4uDQoNCi0gVOG7tyBs4buHIGPGsOG7o2MgKE9SKSBsw6AgMC4zNTg1LCBuZ2jEqWEgbMOgIHThu7cgbOG7hyBjxrDhu6NjIHZheSB0acOqdSBkw7luZyBj4bunYSBuaMOzbSBraMO0bmcgY8OzIG7hu6MgcXXDoSBo4bqhbiBjaOG7iSBi4bqxbmcga2hv4bqjbmcgMzUuODUlIHNvIHbhu5tpIG5ow7NtIGPDsyBxdcOhIGjhuqFuLiBOw7NpIGPDoWNoIGtow6FjLCBuaMOzbSBraMO0bmcgY8OzIG7hu6MgcXXDoSBo4bqhbiDDrXQgY8OzIGto4bqjIG7Eg25nIHZheSB0acOqdSBkw7luZyBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG5ow7NtIGPDsyBu4bujIHF1w6EgaOG6oW4uIFThu7cgbOG7hyBjxrDhu6NjIHRo4bqlcCBoxqFuIG7DoHkgY2hvIHRo4bqleSBt4buRaSBsacOqbiBo4buHIG5naOG7i2NoIGNoaeG7gXUgZ2nhu69hIHTDrG5oIHRy4bqhbmcgbuG7oyBxdcOhIGjhuqFuIHbDoCB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmc6IG5o4buvbmcgbmfGsOG7nWkgY8OzIG7hu6MgcXXDoSBo4bqhbiBs4bqhaSBjw7MgeHUgaMaw4bubbmcgxJFpIHZheSBjYW8gaMahbi4NCg0KS+G6v3QgcXXhuqMgbsOgeSBjw7MgdGjhu4MgcGjhuqNuIMOhbmggcuG6sW5nIG5ow7NtIHThu6tuZyBu4bujIHF1w6EgaOG6oW4gY8OzIG5odSBj4bqndSB0w6BpIGNow61uaCBj4bqlcCB0aGnhur90IGjGoW4gaG/hurdjIHRow7NpIHF1ZW4gdMOgaSBjaMOtbmgga8OpbSBhbiB0b8OgbiBoxqFuLCBk4bqrbiDEkeG6v24ga2jhuqMgbsSDbmcgdGnhur9wIHThu6VjIHZheSBjYW8gaMahbi4NCg0KDQojIyMgKiozLjMuMyBQaMOibiB0w61jaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIHZheSB0acOqdSBkw7luZyAobG9hbikgdsOgIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiAobWFyaXRhbCkqKg0KDQojIyMjICoqYS4gVGjhu5FuZyBrw6ogbcO0IHThuqMgZ2nhu69hIGhhaSBiaeG6v24qKg0KDQoqKlThuqFvIGLhuqNuZyB04bqnbiBz4buRKioNCmBgYHtyfQ0KdGFibGVfbWFyaXRhbDEgPC0gdGFibGUoZGF0YTEkbG9hbiwgZGF0YTEkbWFyaXRhbCkNCnRhYmxlX21hcml0YWwxDQpgYGANCg0KDQoqKlRy4buxYyBxdWFuIGhvw6EgYuG6sW5nIGJp4buDdSDEkeG7kyoqDQpgYGB7cn0NCmRmX21hcml0YWwgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZV9tYXJpdGFsMSkNCmNvbG5hbWVzKGRmX21hcml0YWwpIDwtIGMoIkxvYW4iLCAiTWFyaXRhbCIsICJDb3VudCIpDQoNCmdncGxvdChkZl9tYXJpdGFsLCBhZXMoeCA9IExvYW4sIHkgPSBDb3VudCwgZmlsbCA9IE1hcml0YWwpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJQaMOibiBi4buRIHZheSB0acOqdSBkw7luZyB0aGVvIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiIsDQogICAgeCA9ICJUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4iLA0KICAgIHkgPSAiU+G7kSBsxrDhu6NuZyIsDQogICAgZmlsbCA9ICJWYXkgdGnDqnUgZMO5bmciDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0KioNCg0KQmnhu4N1IMSR4buTIGPhu5l0IG3DtCB04bqjIHPhu7EgcGjDom4gYuG7kSB0w6xuaCB0cuG6oW5nIHZheSB0acOqdSBkw7luZyB0aGVvIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBj4bunYSBraMOhY2ggaMOgbmcsIHThu6sgxJHDsyBjw7MgdGjhu4MgcsO6dCByYSBt4buZdCBz4buRIG5o4bqtbiDEkeG7i25oIHF1YW4gdHLhu41uZyBuaMawIHNhdToNCg0KLSBOaMOzbSDEkcOjIGvhur90IGjDtG4gKG1hcnJpZWQpIGzDoCBuaMOzbSBjw7Mgc+G7kSBsxrDhu6NuZyBuZ8aw4budaSB2YXkgdGnDqnUgZMO5bmcgY2FvIG5o4bqldCB0dXnhu4d0IMSR4buRaSwgduG7m2kgNDUzIG5nxrDhu51pIHZheSwgc28gduG7m2kgMjM0NCBuZ8aw4budaSBraMO0bmcgdmF5LiBT4buxIGNow6puaCBs4buHY2ggbOG7m24gZ2nhu69hIHPhu5EgbmfGsOG7nWkgdmF5IHbDoCBraMO0bmcgdmF5IGNobyB0aOG6pXkgcGjhuqduIGzhu5tuIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biBraMO0bmcgdGhhbSBnaWEgdmF5IHRpw6p1IGTDuW5nLiBUdXkgbmhpw6puLCB24bubaSB04buVbmcgcXV5IG3DtCBs4bubbiBuaOG6pXQgKDI3OTcgbmfGsOG7nWkpLCBuaMOzbSBuw6B5IGPDsyDEkcOzbmcgZ8OzcCBs4bubbiBuaOG6pXQgdsOgbyB04buVbmcgc+G7kSBuZ8aw4budaSB2YXkgdHJvbmcgdG/DoG4gYuG7mSBt4bqrdS4NCg0KLSBOaMOzbSDEkeG7mWMgdGjDom4gKHNpbmdsZSkgY8OzIDE0OCBuZ8aw4budaSB2YXksIMOtdCBoxqFuIHNvIHbhu5tpIG5ow7NtIMSRw6Mga+G6v3QgaMO0biwgbeG6t2MgZMO5IHThu5VuZyBz4buRIG5nxrDhu51pIHRyb25nIG5ow7NtIG7DoHkgY8WpbmcgxJHDoW5nIGvhu4MgKDExOTYgbmfGsOG7nWkpLiBT4buRIG5nxrDhu51pIGtow7RuZyB2YXkgdHJvbmcgbmjDs20gbsOgeSBsw6AgMTA0OCwgbOG7m24gaMahbiBuaGnhu4F1IHNvIHbhu5tpIHPhu5EgbmfGsOG7nWkgY8OzIHZheS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgcGjhuqduIGzhu5tuIG5nxrDhu51pIMSR4buZYyB0aMOibiB0cm9uZyBt4bqrdSBraMO0bmcgdmF5IHRpw6p1IGTDuW5nLg0KDQotIE5ow7NtIMSRw6MgbHkgaMO0biAoZGl2b3JjZWQpIGzDoCBuaMOzbSBjw7MgcXV5IG3DtCBuaOG7jyBuaOG6pXQgKDUyOCBuZ8aw4budaSksIG5oxrBuZyB24bqrbiBjw7MgOTAgbmfGsOG7nWkgdmF5IHRpw6p1IGTDuW5nLCB04bupYyBsw6AgY+G7qSBraG/huqNuZyA2IG5nxrDhu51pIHRow6wgY8OzIDEgbmfGsOG7nWkgdmF5LiBU4bupYyBsw6AsIG5ow7NtIGx5IGjDtG4gdHV5IMOtdCBuZ8aw4budaSBuaMawbmcgY8WpbmcgY8OzIG3hu5l0IGzGsOG7o25nIMSRw6FuZyBr4buDIHZheSB0acOqdSBkw7luZy4NCg0KDQojIyMjICoqYi4gS2nhu4NtIMSR4buLbmggdOG7tyBs4buHIGdp4buvYSBoYWkgYmnhur9uKioNCg0KVMOhYyBnaeG6oyBtdeG7kW4ga2nhu4NtIHRyYSB4ZW0gdOG7tyBs4buHIHZheSB0acOqdSBkw7luZyBj4bunYSBuaMOzbSBraMOhY2ggaMOgbmcgxJHDoyBr4bq/dCBow7RuIGPDsyBi4bqxbmcgMTUlIGhheSBraMO0bmcuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSBHaeG6oyB0aHV54bq/dCBIMDogVOG7tyBs4buHIGtow6FjaCBow6BuZyB2YXkgdGnDqnUgZMO5bmcgdHJvbmcgbmjDs20gxJHDoyBr4bq/dCBow7RuIGLhurFuZyAxNSUuDQotIEdp4bqjIHRodXnhur90IEgxOiBU4bu3IGzhu4cga2jDoWNoIGjDoG5nIHZheSB0acOqdSBkw7luZyB0cm9uZyBuaMOzbSDEkcOjIGvhur90IGjDtG4ga2jDoWMgMTUlLg0KDQpgYGB7cn0NCiMgVOG6oW8gbmjDs20gIm1hcnJpZWQiIHbDoCAib3RoZXJzIg0KZGF0YTEkbWFyaXRhbF9ncm91cGVkIDwtIGlmZWxzZShkYXRhMSRtYXJpdGFsID09ICJtYXJyaWVkIiwgIm1hcnJpZWQiLCAib3RoZXJzIikNCg0KIyBU4bqhbyBi4bqjbmcgdOG6p24gc+G7kQ0KdGFibGVfbWFyaXRhbDEgPC0gdGFibGUoZGF0YTEkbG9hbiwgZGF0YTEkbWFyaXRhbF9ncm91cGVkKQ0KDQojIEzhu41jIG5ow7NtICJtYXJyaWVkIg0KbWFycmllZF9kYXRhIDwtIHN1YnNldChkYXRhMSwgbWFyaXRhbF9ncm91cGVkID09ICJtYXJyaWVkIikNCm5fbWFycmllZCA8LSBucm93KG1hcnJpZWRfZGF0YSkNCm5fbG9hbl95ZXNfbWFycmllZCA8LSBzdW0obWFycmllZF9kYXRhJGxvYW4gPT0gInllcyIpDQoNCiMgS2nhu4NtIMSR4buLbmggdOG7tyBs4buHIHbhu5tpIGdp4bqjIMSR4buLbmggMTUlDQpwcm9wLnRlc3QoeCA9IG5fbG9hbl95ZXNfbWFycmllZCwgbiA9IG5fbWFycmllZCwgcCA9IDAuMTUsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpDQoNCmBgYA0KDQoqKkvhur90IGx14bqtbioqDQoNCi0gVsOsIHAtdmFsdWUgPSAwLjA4MSA+IDAuMDUsIG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwIOG7nyBt4bupYyDDvSBuZ2jEqWEgNSUuIMSQaeG7gXUgbsOgeSBjw7MgbmdoxKlhIGzDoCB04bu3IGzhu4cgdmF5IHRpw6p1IGTDuW5nIHRyb25nIG5ow7NtIGtow6FjaCBow6BuZyDEkcOjIGvhur90IGjDtG4ga2jDtG5nIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHNvIHbhu5tpIG3hu6ljIGdp4bqjIMSR4buLbmggbMOgIDE1JS4NCg0KLSBUdXkgbmhpw6puLCB04bu3IGzhu4cgdGjhu7FjIHThur8gxrDhu5tjIGzGsOG7o25nIGzDoCAxNi4yMCUsIGNhbyBoxqFuIG3hu5l0IGNow7p0IHNvIHbhu5tpIDE1JSwgdsOgIGtob+G6o25nIHRpbiBj4bqteSA5NSUgWzE0Ljg2JTsgMTcuNjMlXSBjaG8gdGjhuqV5IHThu7cgbOG7hyB0aOG7sWMgdOG6vyBjw7MgdGjhu4MgZGFvIMSR4buZbmcgeHVuZyBxdWFuaCBnacOhIHRy4buLIG7DoHkuDQoNCkvhur90IHF14bqjIG7DoHkgY2hvIHRo4bqleSBy4bqxbmcgbeG6t2MgZMO5IHThu7cgbOG7hyB2YXkgdGnDqnUgZMO5bmcgY+G7p2EgbmjDs20gxJHDoyBr4bq/dCBow7RuIGPDsyBjYW8gaMahbiBt4bupYyBr4buzIHbhu41uZyBiYW4gxJHhuqd1LCBuaMawbmcgc+G7sSBjaMOqbmggbOG7h2NoIGtow7RuZyDEkeG7pyBs4bubbiDEkeG7gyDEkcaw4bujYyB4ZW0gbMOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIERvIMSRw7MsIGPDsyB0aOG7gyB4ZW0gbeG7qWMgMTUlIHbhuqtuIGzDoCBt4buZdCDGsOG7m2MgbMaw4bujbmcgaOG7o3AgbMO9IGNobyBuaMOzbSBraMOhY2ggaMOgbmcgxJHDoyBr4bq/dCBow7RuIHRyb25nIGLhu5FpIGPhuqNuaCBk4buvIGxp4buHdSBuw6B5Lg0KDQojIyMjICoqYy4gUGjDom4gdMOtY2ggdGjDtG5nIHF1YSBSZWxhdGl2ZSBSaXNrIHbDoCBPZGQgUmF0aW8qKg0KDQpgYGB7cn0NCiMgVOG6oW8gbWEgdHLhuq1uIHbhu5tpIG5ow7NtICJubyIgKGtow7RuZyB2YXkpIGzDoG0gdGhhbSBjaGnhur91DQptYXRfbWFyaXRhbCA8LSBtYXRyaXgoYygNCiAgc3VtKGRhdGExJGxvYW4gPT0gIm5vIiAmIGRhdGExJG1hcml0YWxfZ3JvdXBlZCA9PSAibWFycmllZCIpLCAjYQ0KICBzdW0oZGF0YTEkbG9hbiA9PSAibm8iICYgZGF0YTEkbWFyaXRhbF9ncm91cGVkID09ICJvdGhlcnMiKSwgICNiDQogIHN1bShkYXRhMSRsb2FuID09ICJ5ZXMiICYgZGF0YTEkbWFyaXRhbF9ncm91cGVkID09ICJtYXJyaWVkIiksICNjDQogIHN1bShkYXRhMSRsb2FuID09ICJ5ZXMiICYgZGF0YTEkbWFyaXRhbF9ncm91cGVkID09ICJvdGhlcnMiKSAgICNkDQopLA0KYnlyb3cgPSBUUlVFLCBucm93ID0gMiwNCmRpbW5hbWVzID0gbGlzdChMb2FuID0gYygibm8iLCAieWVzIiksIE1hcml0YWwgPSBjKCJtYXJyaWVkIiwgIm90aGVycyIpKSkNCg0KIyBIaeG7g24gdGjhu4sgYuG6o25nDQptYXRfbWFyaXRhbA0KDQojIFTDrW5oIFJpc2sgUmF0aW8gdsOgIE9kZHMgUmF0aW8NCmxpYnJhcnkoZXBpdG9vbHMpDQpycl9tYXJpdGFsIDwtIHJpc2tyYXRpbyhtYXRfbWFyaXRhbCkNCnJyX21hcml0YWwkbWVhc3VyZQ0KDQpvcl9tYXJpdGFsIDwtIG9kZHNyYXRpbyhtYXRfbWFyaXRhbCkNCm9yX21hcml0YWwkbWVhc3VyZQ0KDQpgYGANCg0KU2F1IGtoaSB0w61uaCB0b8OhbiBSZWxhdGl2ZSBSaXNrIChSUikgdsOgIE9kZHMgUmF0aW8gKE9SKSDEkeG7gyBzbyBzw6FuaCB4w6FjIHN14bqldCB2w6Aga2jhuqMgbsSDbmcgdmF5IHRpw6p1IGTDuW5nIGdp4buvYSBoYWkgbmjDs20ga2jDoWNoIGjDoG5nICjEkcOjIGvhur90IGjDtG4gdsOgIGNoxrBhIGvhur90IGjDtG4vbHkgaMO0biksIGvhur90IHF14bqjIGNobyB0aOG6pXkgY+G6oyBSUiB2w6AgT1IgxJHhu4F1IG5o4buPIGjGoW4gMSwgxJFp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgIGtow6FjaCBow6BuZyDEkcOjIGvhur90IGjDtG4gY8OzIHh1IGjGsOG7m25nIHZheSB0acOqdSBkw7luZyBoxqFuIG5oaeG7gXUgc28gduG7m2kgbmjDs20ga2jDoWNoIGjDoG5nIGPDsm4gbOG6oWkuDQoNCkPhu6UgdGjhu4M6DQoNCi0gTmd1eSBjxqEgdMawxqFuZyDEkeG7kWkgKFJSKSBsw6AgMC44ODc3LCB04bupYyBsw6AgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZyBjaMawYSBr4bq/dCBow7RuIGhv4bq3YyDEkcOjIGx5IGjDtG4gY2jhu4kgYuG6sW5nIDg4Ljc3JSBzbyB24bubaSBraMOhY2ggaMOgbmcgxJHDoyBr4bq/dCBow7RuLiBOw7NpIGPDoWNoIGtow6FjLCB4w6FjIHN14bqldCBuw6B5IHRo4bqlcCBoxqFuIDExLjIzJSBzbyB24bubaSBuaMOzbSBjw7JuIGzhuqFpLg0KDQotIFThu7cgbOG7hyBjxrDhu6NjIChPUikgbMOgIDAuODI5MCwgbmdoxKlhIGzDoCB04bu3IGzhu4cgY8aw4bujYyB2YXkgdGnDqnUgZMO5bmcgY+G7p2EgbmjDs20gY2jGsGEga+G6v3QgaMO0biBob+G6t2MgxJHDoyBseSBow7RuIGNo4buJIGLhurFuZyBraG/huqNuZyA4Mi45MCUgc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuLg0KDQpL4bq/dCBxdeG6oyBuw6B5IGNobyB0aOG6pXkgcuG6sW5nIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBsw6AgbeG7mXQgeeG6v3UgdOG7kSBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZywgdHJvbmcgxJHDsyBraMOhY2ggaMOgbmcgxJHDoyBr4bq/dCBow7RuIGPDsyBraOG6oyBuxINuZyB2YXkgdGnDqnUgZMO5bmcgY2FvIGjGoW4gc28gduG7m2kgbmjhu69uZyBraMOhY2ggaMOgbmcgY2jGsGEga+G6v3QgaMO0biBob+G6t2MgxJHDoyBseSBow7RuIHRyb25nIHThuq1wIGThu68gbGnhu4d1IG5naGnDqm4gY+G7qXUuDQoNCg0KIyMjICoqMy4zLjQgUGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4pIHbDoCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gKGVkdWNhdGlvbikqKg0KIyMjIyAqKmEuIFRo4buRbmcga8OqIG3DtCB04bqjIGdp4buvYSBoYWkgYmnhur9uKioNCg0KKipU4bqhbyBi4bqjbmcgdOG6p24gc+G7kSoqDQoNCmBgYHtyfQ0KdGFibGVfZWR1MSA8LSB0YWJsZShkYXRhMSRsb2FuLCBkYXRhMSRlZHVjYXRpb24pDQp0YWJsZV9lZHUxDQpgYGANCg0KKipUcuG7sWMgcXVhbiBob8OhIGLhurFuZyBiaeG7g3UgxJHhu5MqKg0KDQpgYGB7cn0NCmRmX2VkdV9ncm91cGVkIDwtIGFzLmRhdGEuZnJhbWUodGFibGVfZWR1MSkNCmNvbG5hbWVzKGRmX2VkdV9ncm91cGVkKSA8LSBjKCJMb2FuIiwgIkVkdWNhdGlvbiIsICJDb3VudCIpDQoNCmdncGxvdChkZl9lZHVfZ3JvdXBlZCwgYWVzKHggPSBMb2FuLCB5ID0gQ291bnQsIGZpbGwgPSBFZHVjYXRpb24pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJQaMOibiBi4buRIHZheSB0acOqdSBkw7luZyB0aGVvIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiIsDQogICAgeCA9ICJUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4iLA0KICAgIHkgPSAiU+G7kSBsxrDhu6NuZyIsDQogICAgZmlsbCA9ICJWYXkgdGnDqnUgZMO5bmciDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQpE4buxYSB0csOqbiBi4bqjbmcgdOG6p24gc+G7kSB2w6AgYmnhu4N1IMSR4buTIHRy4buxYyBxdWFuIGjDs2EsIHRhIGPDsyB0aOG7gyByw7p0IHJhIG3hu5l0IHPhu5Egbmjhuq1uIHjDqXQgc2F1Og0KDQotIE5ow7NtIGPDsyB0csOsbmggxJHhu5kgdHJ1bmcgaOG7jWMgKHNlY29uZGFyeSkgY2hp4bq/bSB04bu3IGzhu4cgbOG7m24gbmjhuqV0IHRyb25nIHThu5VuZyBz4buRIGtow6FjaCBow6BuZywgdsOgIGPFqW5nIGzDoCBuaMOzbSBjw7Mgc+G7kSBsxrDhu6NuZyBraMOhY2ggaMOgbmcgdmF5IHRpw6p1IGTDuW5nIGNhbyBuaOG6pXQgKDQxNiBuZ8aw4budaSksIMSRaeG7gXUgbsOgeSBjaG8gdGjhuqV5IMSRw6J5IGzDoCDEkeG7kWkgdMaw4bujbmcgbeG7pWMgdGnDqnUgcXVhbiB0cuG7jW5nIMSR4buRaSB24bubaSBjw6FjIHPhuqNuIHBo4bqpbSB0w61uIGThu6VuZyB0acOqdSBkw7luZy4NCg0KLSBOaMOzbSBjw7MgdHLDrG5oIMSR4buZIMSR4bqhaSBo4buNYyAodGVydGlhcnkpIMSR4bupbmcgdGjhu6kgaGFpIHbhu4Egc+G7kSBsxrDhu6NuZyBraMOhY2ggaMOgbmcgdsOgIHPhu5EgbmfGsOG7nWkgdmF5LCB24bubaSAxNzQga2jDoWNoIGjDoG5nIHZheSB0acOqdSBkw7luZyB0cm9uZyB04buVbmcgc+G7kSAxMTc2IG5nxrDhu51pIOKAkyBjaG8gdGjhuqV5IG3hu5l0IG3hu6ljIMSR4buZIHRoYW0gZ2lhIHTGsMahbmcgxJHhu5FpIGNhbyB2w6BvIGPDoWMgaG/huqF0IMSR4buZbmcgdmF5Lg0KDQotIE5ow7NtIHRyw6xuaCDEkeG7mSB0aeG7g3UgaOG7jWMgKHByaW1hcnkpIGPDsyBz4buRIG5nxrDhu51pIHZheSB0acOqdSBkw7luZyBsw6AgOTQgdHLDqm4gdOG7lW5nIHPhu5EgNTg0IG5nxrDhu51pIOKAkyB04bu3IGzhu4cgbsOgeSBjxaluZyBraMOhIMSRw6FuZyBr4buDLCB0aOG7gyBoaeG7h24gcuG6sW5nIG5nYXkgY+G6oyBuaMOzbSBo4buNYyB24bqlbiB0aOG6pXAgduG6q24gY8OzIG5odSBj4bqndSB2YXkuDQoNCi0gTmjDs20ga2jDtG5nIHLDtSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gKHVua25vd24pIGPDsyBz4buRIGzGsOG7o25nIG5o4buPIG5o4bqldCAoY2jhu4kgNyBuZ8aw4budaSB2YXkpLCDEkWnhu4F1IG7DoHkga2jDtG5nIMSR4bunIMSR4buDIMSRxrBhIHJhIMSRw6FuaCBnacOhIGNo4bqvYyBjaOG6r24gduG7gSBow6BuaCB2aSB2YXkgY+G7p2EgbmjDs20gbsOgeS4NCg0KTmjDrG4gY2h1bmcsIHPhu7EgcGjDom4gYuG7kSB2YXkgdGnDqnUgZMO5bmcgZ2nhu69hIGPDoWMgbmjDs20gaOG7jWMgduG6pW4gY2hvIHRo4bqleSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY8OzIHRo4buDIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gaMOgbmggdmkgdmF5IHRpw6p1IGTDuW5nLiBOaMOzbSBo4buNYyB24bqlbiB0cnVuZyBiw6xuaCB2w6AgY2FvIHRo4buDIGhp4buHbiBuaHUgY+G6p3UgdmF5IHLDtSBy4buHdCBoxqFuLCBn4bujaSDDvSBy4bqxbmcgbmfDom4gaMOgbmcgbsOqbiBjw6JuIG5o4bqvYyB54bq/dSB04buRIGjhu41jIHbhuqVuIGtoaSB4w6J5IGThu7FuZyBjaGnhur9uIGzGsOG7o2MgdGnhur9wIGPhuq1uIGtow6FjaCBow6BuZy4NCg0KDQojIyMjICoqYi4gS2nhu4NtIMSR4buLbmggdOG7tyBs4buHIGdp4buvYSBoYWkgYmnhur9uKioNCg0KVMOhYyBnaeG6oyBtdeG7kW4ga2nhu4NtIHRyYSB4ZW0gdOG7tyBs4buHIHZheSB0acOqdSBkw7luZyBj4bunYSBuaMOzbSBraMOhY2ggaMOgbmcgY8OzIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB0aOG6pXAgY8OzIGLhurFuZyAxNSUgaGF5IGtow7RuZy4NCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaCoqDQoNCi0gR2nhuqMgdGh1eeG6v3QgSDA6IFThu7cgbOG7hyB2YXkgdGnDqnUgZMO5bmcgY+G7p2EgbmjDs20gY8OzIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB0aOG6pXAgbMOgIDE1JS4NCi0gR2nhuqMgdGh1eeG6v3QgSDE6ICBU4bu3IGzhu4cgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIG5ow7NtIGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdGjhuqVwIGtow6FjIDE1JS4NCg0KYGBge3J9DQojIEfhu5lwIG5ow7NtIGjhu41jIHbhuqVuOiBsb3cgKHByaW1hcnksIHNlY29uZGFyeSwgdW5rbm93bikgdsOgIGhpZ2ggKHRlcnRpYXJ5KQ0KZGF0YTEkZWR1X2dyb3VwIDwtIGlmZWxzZShkYXRhMSRlZHVjYXRpb24gJWluJSBjKCJwcmltYXJ5IiwgInNlY29uZGFyeSIsICJ1bmtub3duIiksICJsb3ciLCAiaGlnaCIpDQoNCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5ENCnRhYmxlX2VkdSA8LSB0YWJsZShkYXRhMSRsb2FuLCBkYXRhMSRlZHVfZ3JvdXApDQp0YWJsZV9lZHUNCg0KIyBM4buNYyBk4buvIGxp4buHdSBuaMOzbSBo4buNYyB24bqlbiB0aOG6pXANCm5fbG93IDwtIHN1bShkYXRhMSRlZHVfZ3JvdXAgPT0gImxvdyIpDQpuX2xvYW5feWVzX2xvdyA8LSBzdW0oZGF0YTEkbG9hbiA9PSAieWVzIiAmIGRhdGExJGVkdV9ncm91cCA9PSAibG93IikNCg0KIyBLaeG7g20gxJHhu4tuaCB04bu3IGzhu4cgbeG7mXQgbeG6q3UgKDEtc2FtcGxlIHByb3BvcnRpb24gdGVzdCkNCnByb3AudGVzdCh4ID0gbl9sb2FuX3llc19sb3csIG4gPSBuX2xvdywgcCA9IDAuMTUsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpDQoNCg0KYGBgDQoNCioqS+G6v3QgbHXhuq1uKioNCg0KLSBW4bubaSBnacOhIHRy4buLIHAtdmFsdWUgPSAwLjA0MjE5IDwgMC4wNSwgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAg4bufIG3hu6ljIMO9IG5naMSpYSA1JS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgdOG7tyBs4buHIHZheSB0acOqdSBkw7luZyB0cm9uZyBuaMOzbSBraMOhY2ggaMOgbmcgY8OzIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB0aOG6pXAga2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogc28gduG7m2kgdOG7tyBs4buHIGdp4bqjIMSR4buLbmggbMOgIDE1JS4NCg0KLSBU4bu3IGzhu4cgdGjhu7FjIHThur8gbMOgIDE2LjMwJSwgY2FvIGjGoW4gbeG7mXQgY2jDunQgc28gduG7m2kgbeG7qWMgZ2nhuqMgxJHhu4tuaC4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkga2jDoWNoIGjDoG5nIGPDsyBo4buNYyB24bqlbiB0aOG6pXAgduG6q24gY8OzIG5odSBj4bqndSB2YXkgdGnDqnUgZMO5bmcgdMawxqFuZyDEkeG7kWkgxJHDoW5nIGvhu4MsIGtow7RuZyB0aOG6pXAgbmjGsCBr4buzIHbhu41uZyBiYW4gxJHhuqd1Lg0KDQotIEtob+G6o25nIHRpbiBj4bqteSA5NSUgKDE1LjA0JSDigJMgMTcuNjUlKSBjw6BuZyBj4bunbmcgY+G7kSBr4bq/dCBsdeG6rW4gcuG6sW5nIHThu7cgbOG7hyB0aOG7sWMgdOG6vyBraMO0bmcgcGjhuqNpIMSRw7puZyBi4bqxbmcgMTUlLCBtw6AgY8OzIHh1IGjGsOG7m25nIGNhbyBoxqFuLg0KDQojIyMjICoqYy4gUGjDom4gdMOtY2ggdGjDtG5nIHF1YSBSZWxhdGl2ZSBSaXNrIHbDoCBPZGQgUmF0aW8qKg0KDQoqKlTDrW5oIFJlbGF0aXZlIFJpc2sgdsOgIE9kZCBSYXRpbyoqDQoNCmBgYHtyfQ0KIyBU4bqhbyBtYSB0cuG6rW4gduG7m2kgJ25vJyAoa2jDtG5nIHZheSB0acOqdSBkw7luZykgbMOgbSBkw7JuZyB0aGFtIGNoaeG6v3UNCm1hdF9lZHVfZ3JvdXBlZCA8LSBtYXRyaXgoYygNCiAgc3VtKGRhdGExJGxvYW4gPT0gIm5vIiAmIGRhdGExJGVkdV9ncm91cCA9PSAibG93IiksDQogIHN1bShkYXRhMSRsb2FuID09ICJubyIgJiBkYXRhMSRlZHVfZ3JvdXA9PSAiaGlnaCIpLA0KICBzdW0oZGF0YTEkbG9hbiA9PSAieWVzIiAmIGRhdGExJGVkdV9ncm91cCA9PSAibG93IiksDQogIHN1bShkYXRhMSRsb2FuID09ICJ5ZXMiICYgZGF0YTEkZWR1X2dyb3VwID09ICJoaWdoIikNCiksDQpieXJvdyA9IFRSVUUsIG5yb3cgPSAyLA0KZGltbmFtZXMgPSBsaXN0KExvYW4gPSBjKCJubyIsICJ5ZXMiKSwgRWR1Y2F0aW9uID0gYygibG93IiwgImhpZ2giKSkpDQoNCiMgSGnhu4NuIHRo4buLIG1hIHRy4bqtbg0KbWF0X2VkdV9ncm91cGVkDQoNCiMgVMOtbmggUmlzayBSYXRpbyAoUlIpIHbhu5tpIG5ow7NtICdubycgbMOgIHRoYW0gY2hp4bq/dQ0KcnJfZWR1X2dyb3VwZWQgPC0gcmlza3JhdGlvKG1hdF9lZHVfZ3JvdXBlZCkNCnJyX2VkdV9ncm91cGVkJG1lYXN1cmUNCg0KIyBUw61uaCBPZGRzIFJhdGlvIChPUikgduG7m2kgbmjDs20gJ25vJyBsw6AgdGhhbSBjaGnhur91DQpvcl9lZHVfZ3JvdXBlZCA8LSBvZGRzcmF0aW8obWF0X2VkdV9ncm91cGVkKQ0Kb3JfZWR1X2dyb3VwZWQkbWVhc3VyZQ0KDQoNCmBgYA0KDQpTYXUga2hpIHTDrW5oIHRvw6FuIFJpc2sgUmF0aW8gKFJSKSB2w6AgT2RkcyBSYXRpbyAoT1IpIMSR4buDIHNvIHPDoW5oIHjDoWMgc3XhuqV0IHbDoCBraOG6oyBuxINuZyB2YXkgdGnDqnUgZMO5bmcgZ2nhu69hIGhhaSBuaMOzbSBraMOhY2ggaMOgbmcgdGhlbyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gKGxvdyB2w6AgaGlnaCksIHbhu5tpIG5ow7NtIGtow7RuZyB2YXkgdGnDqnUgZMO5bmcgKExvYW4gPSBubykgbMOgbSBuaMOzbSB0aGFtIGNoaeG6v3UsIGvhur90IHF14bqjIGNobyB0aOG6pXkgY+G6oyBSUiB2w6AgT1IgxJHhu4F1IG5o4buPIGjGoW4gMS4NCg0KQ+G7pSB0aOG7gzoNCg0KLSBOZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUlIpIGzDoCAwLjgyMDEsIG5naMSpYSBsw6AgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIG5ow7NtIGtow6FjaCBow6BuZyBjw7MgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGNhbyBjaOG7iSBi4bqxbmcga2hv4bqjbmcgODIuMDElIHNvIHbhu5tpIG5ow7NtIGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdGjhuqVwLiBOw7NpIGPDoWNoIGtow6FjLCBuaMOzbSBo4buNYyB24bqlbiB0aOG6pXAgY8OzIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyB0aOG6pXAgaMahbiBraG/huqNuZyAxNy45OSUgc28gduG7m2kgbmjDs20gaOG7jWMgduG6pW4gY2FvLg0KDQotIFThu7cgbOG7hyBjxrDhu6NjIChPUikgbMOgIDAuNzYwMCwgbmdoxKlhIGzDoCB04bu3IGzhu4cgY8aw4bujYyB2YXkgdGnDqnUgZMO5bmcgY+G7p2EgbmjDs20gaOG7jWMgY2FvIHRo4bqlcCBjaOG7iSBi4bqxbmcgNzYlIHNvIHbhu5tpIG5ow7NtIGjhu41jIHbhuqVuIHRo4bqlcC4NCg0KS+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggY2hvIHRo4bqleSBy4bqxbmcgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGzDoCBt4buZdCB54bq/dSB04buRIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24gaMOgbmggdmkgdmF5IHRpw6p1IGTDuW5nLiBD4bulIHRo4buDLCBuaOG7r25nIG5nxrDhu51pIHRodeG7mWMgbmjDs20gY8OzIGjhu41jIHbhuqVuIGNhbyAodGVydGlhcnkpIGPDsyB4dSBoxrDhu5tuZyB2YXkgdGnDqnUgZMO5bmcgw610IGjGoW4gc28gduG7m2kgbmjDs20gY8OzIGjhu41jIHbhuqVuIHRo4bqlcCAoZ+G7k20gcHJpbWFyeSwgc2Vjb25kYXJ5IHbDoCB1bmtub3duKS4gQ+G6oyBo4buHIHPhu5EgUmVsYXRpdmUgUmlzayAoUlIgPSAwLjgyMDEpIHbDoCBPZGRzIFJhdGlvIChPUiA9IDAuNzYpIMSR4buBdSBuaOG7jyBoxqFuIDEsIGNobyB0aOG6pXkgeMOhYyBzdeG6pXQgdsOgIGto4bqjIG7Eg25nIHZheSB0acOqdSBkw7luZyBj4bunYSBuaMOzbSBo4buNYyB24bqlbiBjYW8gdGjhuqVwIGjGoW4gcsO1IHLhu4d0IHNvIHbhu5tpIG5ow7NtIGjhu41jIHbhuqVuIHRo4bqlcC4NCg0KxJBp4buBdSBuw6B5IGPDsyB0aOG7gyBwaOG6o24gw6FuaCBy4bqxbmcgbmjDs20ga2jDoWNoIGjDoG5nIGPDsyBo4buNYyB24bqlbiBjYW8gdGjGsOG7nW5nIGPDsyB0aHUgbmjhuq1wIOG7lW4gxJHhu4tuaCBoxqFuIG7Dqm4gw610IGPhuqduIMSR4bq/biBjw6FjIGtob+G6o24gdmF5IHRpw6p1IGTDuW5nLiBOZ2/DoGkgcmEsIGjhu40gY8OzIHRo4buDIGPDsyBr4bu5IG7Eg25nIHF14bqjbiBsw70gdMOgaSBjaMOtbmggY8OhIG5ow6JuIHThu5F0IGjGoW4sIGThuqtuIMSR4bq/biB2aeG7h2Mgc+G7rSBk4bulbmcgdMOtbiBk4bulbmcgbeG7mXQgY8OhY2ggdGjhuq1uIHRy4buNbmcgaMahbi4gDQoNCiMjICoqMy40IEjhu5NpIHF1eSBMb2dpc3RpYyoqDQojIyMgKiozLjQuMSBI4buTaSBxdXkgTG9naXN0aWMgxJHGoW4gYmnhur9uKioNCg0KVHLGsOG7m2MgdGnDqm4sIHTDoWMgZ2nhuqMgdGjhu7FjIGhp4buHbiBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgxJHGoW4gYmnhur9uLCBt4buXaSBtw7QgaMOsbmggY2jhu4kgYmFvIGfhu5NtIG3hu5l0IGJp4bq/biBnaeG6o2kgdGjDrWNoIG5o4bqxbSBwaMOibiB0w61jaCByacOqbmcgbOG6uyDhuqNuaCBoxrDhu59uZyBj4bunYSB04burbmcgeeG6v3UgdOG7kSDEkeG6v24ga2jhuqMgbsSDbmcgdmF5IHRpw6p1IGTDuW5nIChgbG9hbmApLg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNClbhu5tpIHThu6tuZyBiaeG6v24gxJHhu5ljIGzhuq1wLCB0YSB0aOG7sWMgaGnhu4duIGtp4buDbSDEkeG7i25oOg0KDQotICoqSDAqKjogQmnhur9uIMSR4buZYyBs4bqtcCBraMO0bmcgY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcuDQotICoqSDEqKjogQmnhur9uIMSR4buZYyBs4bqtcCBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZy4NCg0KYGBge3J9DQojIEjhu5NpIHF1eSDEkcahbiBiaeG6v24gduG7m2kgdOG7q25nIGJp4bq/biDEkeG7mWMgbOG6rXANCm1vZGVsX2pvYiA8LSBnbG0obG9hbiB+IGpvYiwgZGF0YSA9IGRhdGExLCBmYW1pbHkgPSBiaW5vbWlhbCkNCm1vZGVsX2VkdSA8LSBnbG0obG9hbiB+IGVkdWNhdGlvbiwgZGF0YSA9IGRhdGExLCBmYW1pbHkgPSBiaW5vbWlhbCkNCm1vZGVsX21hcml0YWwgPC0gZ2xtKGxvYW4gfiBtYXJpdGFsLCBkYXRhID0gZGF0YTEsIGZhbWlseSA9IGJpbm9taWFsKQ0KbW9kZWxfZGVmYXVsdCA8LSBnbG0obG9hbiB+IGRlZmF1bHQsIGRhdGEgPSBkYXRhMSwgZmFtaWx5ID0gYmlub21pYWwpDQoNCiMgVMOzbSB04bqvdCBr4bq/dCBxdeG6ow0Kc3VtbWFyeShtb2RlbF9qb2IpDQpzdW1tYXJ5KG1vZGVsX2VkdSkNCnN1bW1hcnkobW9kZWxfbWFyaXRhbCkNCnN1bW1hcnkobW9kZWxfZGVmYXVsdCkNCmBgYA0KYGBge3J9DQpsaWJyYXJ5KGJyb29tKQ0KbGlicmFyeShkcGx5cikNCg0KIyBqb2INCnRpZHkobW9kZWxfam9iKSAlPiUNCiAgbXV0YXRlKA0KICAgIE9SID0gZXhwKGVzdGltYXRlKSwNCiAgICBwLnZhbHVlID0gcm91bmQocC52YWx1ZSwgNCksDQogICAgZXN0aW1hdGUgPSByb3VuZChlc3RpbWF0ZSwgNCksDQogICAgT1IgPSByb3VuZChPUiwgMykNCiAgKSAlPiUNCiAgZHBseXI6OnNlbGVjdCh0ZXJtLCBlc3RpbWF0ZSwgT1IsIHAudmFsdWUpICU+JQ0KICBrbml0cjo6a2FibGUoY2FwdGlvbiA9ICJC4bqjbmc6IEjhu5NpIHF1eSDEkcahbiBiaeG6v24gLSBCaeG6v24gam9iIikNCg0KIyBlZHVjYXRpb24NCnRpZHkobW9kZWxfZWR1KSAlPiUNCiAgbXV0YXRlKA0KICAgIE9SID0gZXhwKGVzdGltYXRlKSwNCiAgICBwLnZhbHVlID0gcm91bmQocC52YWx1ZSwgNCksDQogICAgZXN0aW1hdGUgPSByb3VuZChlc3RpbWF0ZSwgNCksDQogICAgT1IgPSByb3VuZChPUiwgMykNCiAgKSAlPiUNCiAgZHBseXI6OnNlbGVjdCh0ZXJtLCBlc3RpbWF0ZSwgT1IsIHAudmFsdWUpICU+JQ0KICBrbml0cjo6a2FibGUoY2FwdGlvbiA9ICJC4bqjbmc6IEjhu5NpIHF1eSDEkcahbiBiaeG6v24gLSBCaeG6v24gZWR1Y2F0aW9uIikNCg0KIyBtYXJpdGFsDQp0aWR5KG1vZGVsX21hcml0YWwpICU+JQ0KICBtdXRhdGUoDQogICAgT1IgPSBleHAoZXN0aW1hdGUpLA0KICAgIHAudmFsdWUgPSByb3VuZChwLnZhbHVlLCA0KSwNCiAgICBlc3RpbWF0ZSA9IHJvdW5kKGVzdGltYXRlLCA0KSwNCiAgICBPUiA9IHJvdW5kKE9SLCAzKQ0KICApICU+JQ0KICBkcGx5cjo6c2VsZWN0KHRlcm0sIGVzdGltYXRlLCBPUiwgcC52YWx1ZSkgJT4lDQogIGtuaXRyOjprYWJsZShjYXB0aW9uID0gIkLhuqNuZzogSOG7k2kgcXV5IMSRxqFuIGJp4bq/biAtIEJp4bq/biBtYXJpdGFsIikNCg0KIyBkZWZhdWx0DQp0aWR5KG1vZGVsX2RlZmF1bHQpICU+JQ0KICBtdXRhdGUoDQogICAgT1IgPSBleHAoZXN0aW1hdGUpLA0KICAgIHAudmFsdWUgPSByb3VuZChwLnZhbHVlLCA0KSwNCiAgICBlc3RpbWF0ZSA9IHJvdW5kKGVzdGltYXRlLCA0KSwNCiAgICBPUiA9IHJvdW5kKE9SLCAzKQ0KICApICU+JQ0KICBkcGx5cjo6c2VsZWN0KHRlcm0sIGVzdGltYXRlLCBPUiwgcC52YWx1ZSkgJT4lDQogIGtuaXRyOjprYWJsZShjYXB0aW9uID0gIkLhuqNuZzogSOG7k2kgcXV5IMSRxqFuIGJp4bq/biAtIEJp4bq/biBkZWZhdWx0IikNCg0KYGBgDQoNCiMjIyAqKjMuNC4yIEvhur90IHF14bqjIGjhu5NpIHF1eSBMb2dpc3RpYyDEkcahbiBiaeG6v24qKg0KDQojIyMjICoqYS4gTcO0IGjDrG5oIHbhu5tpIGJp4bq/biBgam9iYCoqDQoNCk5ow7NtIHRoYW0gY2hp4bq/dTogKiphZG1pbi4qKg0KDQpN4buZdCBz4buRIG5ow7NtIG5naOG7gSBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZzoNCg0KfCBOaMOzbSBuZ2jhu4EgICAgIHwgSOG7hyBz4buRICjOsikgfCBwLXZhbHVlIHwgT2RkcyBSYXRpbyB8IERp4buFbiBnaeG6o2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBzdHVkZW50ICAgICAgIHwgLTIuOTcgICAgIHwgMC4wMDMgICB8IH4wLjA1MSAgICAgIHwgU2luaCB2acOqbiBjw7MgKip04bu3IHPhu5Ega2jhuqMgbsSDbmcgdmF5IHRpw6p1IGTDuW5nIGLhurFuZyAwLjA1MSoqIGzhuqduIG5ow7NtIGjDoG5oIGNow61uaC4gfA0KfCB1bmVtcGxveWVkICAgIHwgLTAuNzMgICAgIHwgMC4wMjAgICB8IH4wLjQ4MSAgICAgIHwgTmfGsOG7nWkgdGjhuqV0IG5naGnhu4dwIGPDsyAqKnThu7cgc+G7kSBraOG6oyBuxINuZyB2YXkgYuG6sW5nIDAuNDgxKiogbOG6p24gbmjDs20gaMOgbmggY2jDrW5oLiAgIHwNCnwgbWFuYWdlbWVudCAgICB8IC0wLjUxICAgICB8IDAuMDAxICAgfCB+MC42MDEgICAgICB8IE5nxrDhu51pIHF14bqjbiBsw70gY8OzICoqdOG7tyBz4buRIGto4bqjIG7Eg25nIHZheSBi4bqxbmcgMC42MDEqKiBs4bqnbiBuaMOzbSBow6BuaCBjaMOtbmguICAgICAgIHwNCnwgdW5rbm93biAgICAgICB8IC0yLjE2ICAgICB8IDAuMDM0ICAgfCB+MC4xMTUgICAgICB8IE5nxrDhu51pIGtow7RuZyByw7Ugbmdo4buBIG5naGnhu4dwIGPDsyAqKnThu7cgc+G7kSBraOG6oyBuxINuZyB2YXkgYuG6sW5nIDAuMTE1KiogbOG6p24gbmjDs20gaMOgbmggY2jDrW5oLiB8DQoNCi0tLQ0KDQojIyMjICoqYi4gTcO0IGjDrG5oIHbhu5tpIGJp4bq/biBgZWR1Y2F0aW9uYCoqDQoNCk5ow7NtIHRoYW0gY2hp4bq/dTogKipwcmltYXJ5KioNCg0KfCBUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gfCBI4buHIHPhu5EgKM6yKSB8IHAtdmFsdWUgfCBPZGRzIFJhdGlvIHwgRGnhu4VuIGdp4bqjaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IHNlY29uZGFyeSAgICAgICAgfCAwLjMxMyAgICAgfCAwLjAxMSAgIHwgfjEuMzcgICAgICAgfCBOZ8aw4budaSBo4buNYyB0cnVuZyBo4buNYyBjw7MgKip04bu3IHPhu5Ega2jhuqMgbsSDbmcgdmF5IGLhurFuZyAxLjM3KiogbOG6p24gbmjDs20gdGnhu4N1IGjhu41jLiAgICAgICB8DQp8IHRlcnRpYXJ5ICAgICAgICAgfCAtMC4wODQgICAgfCAwLjU0MSAgIHwgfjAuOTIgICAgICAgfCBOZ8aw4budaSBo4buNYyDEkeG6oWkgaOG7jWMgY8OzICoqdOG7tyBz4buRIGto4bqjIG7Eg25nIHZheSBi4bqxbmcgMC45MioqIGzhuqduIG5ow7NtIHRp4buDdSBo4buNYy4gICAgICAgIHwNCnwgdW5rbm93biAgICAgICAgICB8IC0xLjQyICAgICB8IDAuMDAwICAgfCB+MC4yNCAgICAgICB8IE5nxrDhu51pIGtow7RuZyByw7UgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGPDsyAqKnThu7cgc+G7kSBraOG6oyBuxINuZyB2YXkgYuG6sW5nIDAuMjQqKiBs4bqnbiBuaMOzbSB0aeG7g3UgaOG7jWMuIHwNCg0KLS0tDQoNCiMjIyMgKipjLiBNw7QgaMOsbmggduG7m2kgYmnhur9uIGBtYXJpdGFsYCoqDQoNCk5ow7NtIHRoYW0gY2hp4bq/dTogKipkaXZvcmNlZCoqDQoNCnwgVMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIHwgSOG7hyBz4buRICjOsikgfCBwLXZhbHVlIHwgT2RkcyBSYXRpbyB8IERp4buFbiBnaeG6o2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgbWFycmllZCAgICAgICAgICAgICAgfCAtMC4wNjEgICAgfCAwLjYyOCAgIHwgfjAuOTQgICAgICAgfCBOZ8aw4budaSDEkcOjIGvhur90IGjDtG4gY8OzICoqdOG7tyBz4buRIGto4bqjIG7Eg25nIHZheSBi4bqxbmcgMC45NCoqIGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGx5IGjDtG4uICAgICAgIHwNCnwgc2luZ2xlICAgICAgICAgICAgICAgfCAtMC4zNzUgICAgfCAwLjAxMCAgIHwgfjAuNjkgICAgICAgfCBOZ8aw4budaSDEkeG7mWMgdGjDom4gY8OzICoqdOG7tyBz4buRIGto4bqjIG7Eg25nIHZheSBi4bqxbmcgMC42OSoqIGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGx5IGjDtG4uICAgICAgICB8DQoNCi0tLQ0KDQojIyMjICoqZC4gTcO0IGjDrG5oIHbhu5tpIGJp4bq/biBgZGVmYXVsdGAqKg0KDQpOaMOzbSB0aGFtIGNoaeG6v3U6ICoqZGVmYXVsdCA9IG5vKioNCg0KfCBCaeG6v24gbuG7oyB0w61uIGThu6VuZyB8IEjhu4cgc+G7kSAozrIpIHwgcC12YWx1ZSB8IE9kZHMgUmF0aW8gfCBEaeG7hW4gZ2nhuqNpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IGRlZmF1bHR5ZXMgICAgICAgfCAxLjAyMyAgICAgfCA8IDAuMDAxIHwgfjIuNzggICAgICAgfCBLaMOhY2ggaMOgbmcgY8OzIG7hu6MgeOG6pXUgY8OzICoqdOG7tyBz4buRIGto4bqjIG7Eg25nIHZheSBi4bqxbmcgMi43OCoqIGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBjw7MgbuG7oyB44bqldS4gfA0KDQoNCiMjIyAqKjMuNC4zIEjhu5NpIHF1eSBMb2dpc3RpYyDEkWEgYmnhur9uKioNCg0KU2F1IGtoaSB0aOG7sWMgaGnhu4duIHBow6JuIHTDrWNoIG5ndXkgY8ahIHTGsMahbmcgxJHhu5FpIChSZWxhdGl2ZSBSaXNrKSB2w6AgdOG7tyBz4buRIGNow6puaCAoT2RkcyBSYXRpbykgxJHhu4Mga2jDoW0gcGjDoSBt4buRaSBsacOqbiBo4buHIGdp4buvYSBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcgduG7m2kgdOG7q25nIGJp4bq/biDEkeG7mWMgbOG6rXAsIGLGsOG7m2MgdGnhur9wIHRoZW8gbMOgIHjDonkgZOG7sW5nIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgbmjhurFtIMSRw6FuaCBnacOhIMSR4buTbmcgdGjhu51pIHTDoWMgxJHhu5luZyBj4bunYSBjw6FjIHnhur91IHThu5EgbsOgeSDEkeG6v24ga2jhuqMgbsSDbmcgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZy4NCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyBz4butIGThu6VuZyBow6BtIGxpw6puIGvhur90IGxvZ2l0IMSR4buDIG3DtCBow6xuaCBow7NhIGxvZy1vZGRzIGPhu6dhIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZy4gQ+G7pSB0aOG7gywgbcO0IGjDrG5oIGPDsyBk4bqhbmc6DQoNClxbDQpcbG9nXGxlZnQoIFxmcmFje1AobG9hbiA9IHllcyl9ezEgLSBQKGxvYW4gPSB5ZXMpfSBccmlnaHQpID0gXGJldGFfMCArIFxiZXRhXzEgXGNkb3Qgam9iICsgXGJldGFfMiBcY2RvdCBlZHVjYXRpb24gKyBcYmV0YV8zIFxjZG90IG1hcml0YWwgKyBcYmV0YV80IFxjZG90IGRlZmF1bHQNClxdDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQpW4bubaSB04burbmcgYmnhur9uIMSR4buZYyBs4bqtcCwgdGEgdGjhu7FjIGhp4buHbiBraeG7g20gxJHhu4tuaDoNCg0KLSAkSF8wJDogQmnhur9uIGtow7RuZyBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyAoJFxiZXRhID0gMCQpDQotICRIXzEkOiBCaeG6v24gY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgKCRcYmV0YSBcbmUgMCQpDQoNCg0KTeG7qWMgw70gbmdoxKlhIHRo4buRbmcga8OqIMSRxrDhu6NjIHPhu60gZOG7pW5nIGzDoCA1JSAozrEgPSAwLjA1KS4gTuG6v3UgKnAtdmFsdWUqIDwgMC4wNSwgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAuDQoNCmBgYHtyfQ0KIyBI4buTaSBxdXkgbG9naXN0aWMNCm1vZGVsX2xvZ2l0IDwtIGdsbShsb2FuIH4gam9iICsgZWR1Y2F0aW9uICsgbWFyaXRhbCArIGRlZmF1bHQsDQogICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGExLA0KICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKQ0KDQojIFTDs20gdOG6r3Qga+G6v3QgcXXhuqMNCnN1bW1hcnkobW9kZWxfbG9naXQpDQpgYGANCg0KIyMjICoqMy4yLjQgS+G6v3QgcXXhuqMgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyDEkWEgYmnhur9uKioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyDEkcaw4bujYyB4w6J5IGThu7FuZyBuaOG6sW0gcGjDom4gdMOtY2ggeMOhYyBzdeG6pXQga2jDoWNoIGjDoG5nIMSRxINuZyBrw70gdmF5IHRpw6p1IGTDuW5nIChsb2FuID0geWVzKSBk4buxYSB0csOqbiBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oOiBuZ2jhu4EgbmdoaeG7h3AgKGpvYiksIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiAoZWR1Y2F0aW9uKSwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIChtYXJpdGFsKSB2w6AgbOG7i2NoIHPhu60gdMOtbiBk4bulbmcgKGRlZmF1bHQpLiBN4bupYyDDvSBuZ2jEqWEgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgIDUlICjOsSA9IDAuMDUpLg0KDQoNCioqQuG6o25nIHThu5VuZyBo4bujcCBjw6FjIGJp4bq/biBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIChrw6htIE9kZHMgUmF0aW8pKioNCg0KfCBCaeG6v24gICAgICAgICAgICAgICAgIHwgTmjDs20gc28gc8OhbmggICAgICAgICAgICAgIHwgSOG7hyBz4buRICjOsikgfCBwLXZhbHVlICB8IE9kZHMgUmF0aW8gKGVezrIpIHwgRGnhu4VuIGdp4bqjaSBjaGkgdGnhur90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgYGpvYnN0dWRlbnRgICAgICAgICAgfCBTbyB24bubaSBgYWRtaW4uYCAgICAgICAgICAgfCAtMi41OSAgICAgfCAwLjAxMSAgICB8IDAuMDc1ICAgICAgICAgICAgfCBTaW5oIHZpw6puIGPDsyAqKnThu7cgc+G7kSBraOG6oyBuxINuZyB2YXkgYuG6sW5nIDAuMDc1IGzhuqduKiogc28gduG7m2kgbmjDs20gaMOgbmggY2jDrW5oLiAgICAgICAgIHwNCnwgYGpvYnVuZW1wbG95ZWRgICAgICAgfCBTbyB24bubaSBgYWRtaW4uYCAgICAgICAgICAgfCAtMC42OSAgICAgfCAwLjAzMCAgICB8IDAuNTAgICAgICAgICAgICAgfCBOZ8aw4budaSB0aOG6pXQgbmdoaeG7h3AgY8OzICoqdOG7tyBz4buRIGto4bqjIG7Eg25nIHZheSBi4bqxbmcgMC41MCBs4bqnbioqIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaC4gIHwNCnwgYGpvYmVudHJlcHJlbmV1cmAgICAgfCBTbyB24bubaSBgYWRtaW4uYCAgICAgICAgICAgfCAwLjQ1ICAgICAgfCAwLjA0NiAgICB8IDEuNTcgICAgICAgICAgICAgfCBOZ8aw4budaSB04buxIGRvYW5oIGPDsyAqKnThu7cgc+G7kSBraOG6oyBuxINuZyB2YXkgYuG6sW5nIDEuNTcgbOG6p24qKiBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguICAgICB8DQp8IGBlZHVjYXRpb25zZWNvbmRhcnlgIHwgU28gduG7m2kgYHByaW1hcnlgICAgICAgICAgIHwgMC4zMyAgICAgIHwgMC4wMTUgICAgfCAxLjM5ICAgICAgICAgICAgIHwgTmfGsOG7nWkgaOG7jWMgaOG6v3QgdHJ1bmcgaOG7jWMgY8OzICoqdOG7tyBz4buRIGto4bqjIG7Eg25nIHZheSBi4bqxbmcgMS4zOSBs4bqnbioqIHNvIHbhu5tpIGjhu41jIHRp4buDdSBo4buNYy58DQp8IGBtYXJpdGFsc2luZ2xlYCAgICAgIHwgU28gduG7m2kgYGRpdm9yY2VkYCAgICAgICAgIHwgLTAuMzMgICAgIHwgMC4wMjUgICAgfCAwLjcyICAgICAgICAgICAgIHwgTmfGsOG7nWkgxJHhu5ljIHRow6JuIGPDsyAqKnThu7cgc+G7kSBraOG6oyBuxINuZyB2YXkgYuG6sW5nIDAuNzIgbOG6p24qKiBzbyB24bubaSBuZ8aw4budaSDEkcOjIGx5IGjDtG4uICAgICB8DQp8IGBkZWZhdWx0eWVzYCAgICAgICAgIHwgU28gduG7m2kgYGRlZmF1bHQgPSBub2AgICAgIHwgMC45NCAgICAgIHwgPCAwLjAwMSAgfCAyLjU1ICAgICAgICAgICAgIHwgTmfGsOG7nWkgY8OzIG7hu6MgeOG6pXUgY8OzICoqdOG7tyBz4buRIGto4bqjIG7Eg25nIHZheSBi4bqxbmcgMi41NSBs4bqnbioqIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBu4bujIHjhuqV1LiB8DQoNCioqS+G6v3QgcXXhuqMgdOG7qyBtw7QgaMOsbmggbG9naXQgbmjGsCBzYXU6KioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyDEkcaw4bujYyBz4butIGThu6VuZyBuaOG6sW0gcGjDom4gdMOtY2gga2jhuqMgbsSDbmcga2jDoWNoIGjDoG5nIMSRxINuZyBrw70gdmF5IHRpw6p1IGTDuW5nIChsb2FuID0geWVzKSBk4buxYSB0csOqbiBjw6FjIMSR4bq3YyDEkWnhu4NtIGPDoSBuaMOibiBuaMawIG5naOG7gSBuZ2hp4buHcCwgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuLCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gdsOgIGzhu4tjaCBz4butIHTDrW4gZOG7pW5nLiBN4bupYyDDvSBuZ2jEqWEgxJHGsOG7o2MgeMOpdCBsw6AgNSUgKM6xID0gMC4wNSkuDQoNClThu6sga+G6v3QgcXXhuqMsIHBoxrDGoW5nIHRyw6xuaCBsb2dpdCDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgbmjGsCBzYXU6DQoNCioqbG9naXQoUChsb2FuID0geWVzKSkgPSAtMS41OSAtIDIuNTnDl2pvYnN0dWRlbnQgLSAwLjY5w5dqb2J1bmVtcGxveWVkICsgMC40NcOXam9iZW50cmVwcmVuZXVyICsgMC4zM8OXZWR1Y2F0aW9uc2Vjb25kYXJ5IC0gMC4zM8OXbWFyaXRhbHNpbmdsZSArIDAuOTTDl2RlZmF1bHR5ZXMqKg0KDQoNCioqS+G6v3QgbHXhuq1uKioNCg0KQ8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCBuaMawIG5naOG7gSBuZ2hp4buHcCwgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuLCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gdsOgIGzhu4tjaCBz4butIG7hu6MgdMOtbiBk4bulbmcgxJHhu4F1IGNobyB0aOG6pXkg4bqjbmggaMaw4bufbmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDEkeG6v24ga2jhuqMgbsSDbmcgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZy4NCg0KLSBI4buHIHPhu5Egw6JtIHTGsMahbmcg4bupbmcgduG7m2kgdOG7tyBz4buRIGto4bqjIG7Eg25nIChvZGRzKSB0aOG6pXAgaMahbiBzbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UsIGNobyB0aOG6pXkgbmjDs20gxJHDsyDDrXQgY8OzIGto4bqjIG7Eg25nIHZheSB0acOqdSBkw7luZy4NCg0KLSBI4buHIHPhu5EgZMawxqFuZyBjaG8gdGjhuqV5IHThu7cgc+G7kSBraOG6oyBuxINuZyBjYW8gaMahbiwgcGjhuqNuIMOhbmggbmjDs20ga2jDoWNoIGjDoG5nIMSRw7MgY8OzIHh1IGjGsOG7m25nIHZheSBuaGnhu4F1IGjGoW4uDQoNClZp4buHYyBwaMOibiB0w61jaCBjaGkgdGnhur90IHThu6tuZyBo4buHIHPhu5EgZ2nDunAgeMOhYyDEkeG7i25oIG5o4buvbmcgbmjDs20ga2jDoWNoIGjDoG5nIGThu4UgdGnhur9wIGPhuq1uIHTDrW4gZOG7pW5nIHbDoCBuaOG7r25nIG5ow7NtIGPDsyBuZ3V5IGPGoSBi4buLIHThu6sgY2jhu5FpIHZheSwgdOG7qyDEkcOzIGN1bmcgY+G6pXAgdGjDtG5nIHRpbiBxdWFuIHRy4buNbmcgdHJvbmcgcXV54bq/dCDEkeG7i25oIGPhuqVwIHTDrW4gZOG7pW5nLCB0aGnhur90IGvhur8gc+G6o24gcGjhuqltIHBow7kgaOG7o3AgdsOgIHF14bqjbiB0cuG7iyBy4bunaSBybyBjaG8gbmfDom4gaMOgbmcgaG/hurdjIHThu5UgY2jhu6ljIHTDoGkgY2jDrW5oLg0KDQojIyAqKjMuNSBI4buTaSBxdXkgUHJvYml0KioNCiMjIyAqKjMuNS4xIEjhu5NpIHF1eSBQcm9iaXQgxJHGoW4gYmnhur9uKioNCg0KVMOhYyBnaeG6oyB0aeG6v3AgdOG7pWMgc+G7rSBk4bulbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBQcm9iaXQgxJHhu4MgcGjDom4gdMOtY2ggcmnDqm5nIGzhursg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIHnhur91IHThu5EgxJHhu4tuaCB0w61uaCDEkeG6v24geMOhYyBzdeG6pXQga2jDoWNoIGjDoG5nIHZheSB0acOqdSBkw7luZyAoYGxvYW5gKS4gTcO0IGjDrG5oIFByb2JpdCBz4butIGThu6VuZyBow6BtIGxpw6puIGvhur90IGNodeG6qW4gKG5vcm1hbCBsaW5rKSB0aGF5IHbDrCBsb2dpdCBuaMawIOG7nyBo4buTaSBxdXkgbG9naXN0aWMsIHbhu5tpIGPDtG5nIHRo4bupYyB04buVbmcgcXXDoXQ6DQoNClxbDQpQKGxvYW4gPSB5ZXMpID0gXFBoaShcYmV0YV8wICsgXGJldGFfMSBcY2RvdCBYKQ0KXF0NCg0KVHJvbmcgxJHDszogIA0KLSBcKFxQaGlcKSBsw6AgaMOgbSBwaMOibiBwaOG7kWkgY2h14bqpbiB0w61jaCBsxal5IChDREYpLiAgDQotIFwoWFwpIGzDoCBiaeG6v24gZ2nhuqNpIHRow61jaC4gIA0KDQpN4buXaSBtw7QgaMOsbmggZMaw4bubaSDEkcOieSBjaOG7iSBjaOG7qWEgbeG7mXQgYmnhur9uIMSR4buZYyBs4bqtcCDEkeG7gyB4w6FjIMSR4buLbmgg4bqjbmggaMaw4bufbmcgcmnDqm5nIGJp4buHdCDEkeG6v24geMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nLg0KDQpgYGB7cn0NCiMgSOG7k2kgcXV5IFByb2JpdCDEkcahbiBiaeG6v24gduG7m2kgdOG7q25nIGJp4bq/biDEkeG7mWMgbOG6rXANCm1vZGVsX3Byb2JpdF9qb2IgPC0gZ2xtKGxvYW4gfiBqb2IsIGRhdGEgPSBkYXRhMSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJwcm9iaXQiKSkNCm1vZGVsX3Byb2JpdF9lZHUgPC0gZ2xtKGxvYW4gfiBlZHVjYXRpb24sIGRhdGEgPSBkYXRhMSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJwcm9iaXQiKSkNCm1vZGVsX3Byb2JpdF9tYXJpdGFsIDwtIGdsbShsb2FuIH4gbWFyaXRhbCwgZGF0YSA9IGRhdGExLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpKQ0KbW9kZWxfcHJvYml0X2RlZmF1bHQgPC0gZ2xtKGxvYW4gfiBkZWZhdWx0LCBkYXRhID0gZGF0YTEsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IikpDQoNCiMgVMOzbSB04bqvdCBr4bq/dCBxdeG6ow0Kc3VtbWFyeShtb2RlbF9wcm9iaXRfam9iKQ0Kc3VtbWFyeShtb2RlbF9wcm9iaXRfZWR1KQ0Kc3VtbWFyeShtb2RlbF9wcm9iaXRfbWFyaXRhbCkNCnN1bW1hcnkobW9kZWxfcHJvYml0X2RlZmF1bHQpDQoNCmBgYA0KDQpgYGB7cn0NCg0KbGlicmFyeShicm9vbSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGtuaXRyKQ0KDQojIEJp4bq/biBqb2INCnRpZHkobW9kZWxfcHJvYml0X2pvYikgJT4lDQogIG11dGF0ZSgNCiAgICB6QiA9IHJvdW5kKGVzdGltYXRlLCA0KSwNCiAgICBwX3ZhbHVlID0gcm91bmQocC52YWx1ZSwgNCksDQogICAgUCA9IHJvdW5kKHBub3JtKHpCKSwgNCkNCiAgKSAlPiUNCiAgZHBseXI6OnNlbGVjdCh0ZXJtLCB6QiwgUCwgcF92YWx1ZSkgJT4lDQogIGthYmxlKGNhcHRpb24gPSAiQuG6o25nOiBI4buTaSBxdXkgUHJvYml0IMSRxqFuIGJp4bq/biAtIEJp4bq/biBqb2IiKQ0KDQojIEJp4bq/biBlZHVjYXRpb24NCnRpZHkobW9kZWxfcHJvYml0X2VkdSkgJT4lDQogIG11dGF0ZSgNCiAgICB6QiA9IHJvdW5kKGVzdGltYXRlLCA0KSwNCiAgICBwX3ZhbHVlID0gcm91bmQocC52YWx1ZSwgNCksDQogICAgUCA9IHJvdW5kKHBub3JtKHpCKSwgNCkNCiAgKSAlPiUNCiAgZHBseXI6OnNlbGVjdCh0ZXJtLCB6QiwgUCwgcF92YWx1ZSkgJT4lDQogIGthYmxlKGNhcHRpb24gPSAiQuG6o25nOiBI4buTaSBxdXkgUHJvYml0IMSRxqFuIGJp4bq/biAtIEJp4bq/biBlZHVjYXRpb24iKQ0KDQojIEJp4bq/biBtYXJpdGFsDQp0aWR5KG1vZGVsX3Byb2JpdF9tYXJpdGFsKSAlPiUNCiAgbXV0YXRlKA0KICAgIHpCID0gcm91bmQoZXN0aW1hdGUsIDQpLA0KICAgIHBfdmFsdWUgPSByb3VuZChwLnZhbHVlLCA0KSwNCiAgICBQID0gcm91bmQocG5vcm0oekIpLCA0KQ0KICApICU+JQ0KICBkcGx5cjo6c2VsZWN0KHRlcm0sIHpCLCBQLCBwX3ZhbHVlKSAlPiUNCiAga2FibGUoY2FwdGlvbiA9ICJC4bqjbmc6IEjhu5NpIHF1eSBQcm9iaXQgxJHGoW4gYmnhur9uIC0gQmnhur9uIG1hcml0YWwiKQ0KDQojIEJp4bq/biBkZWZhdWx0DQp0aWR5KG1vZGVsX3Byb2JpdF9kZWZhdWx0KSAlPiUNCiAgbXV0YXRlKA0KICAgIHpCID0gcm91bmQoZXN0aW1hdGUsIDQpLA0KICAgIHBfdmFsdWUgPSByb3VuZChwLnZhbHVlLCA0KSwNCiAgICBQID0gcm91bmQocG5vcm0oekIpLCA0KQ0KICApICU+JQ0KICBkcGx5cjo6c2VsZWN0KHRlcm0sIHpCLCBQLCBwX3ZhbHVlKSAlPiUNCiAga2FibGUoY2FwdGlvbiA9ICJC4bqjbmc6IEjhu5NpIHF1eSBQcm9iaXQgxJHGoW4gYmnhur9uIC0gQmnhur9uIGRlZmF1bHQiKQ0KDQoNCmBgYA0KDQojIyMgKiozLjUuMiBL4bq/dCBxdeG6oyBo4buTaSBxdXkgUHJvYml0IMSRxqFuIGJp4bq/bioqDQoNCiMjIyMgKiphLiBNw7QgaMOsbmggduG7m2kgYmnhur9uIGBqb2JgKioNCg0KTmjDs20gdGhhbSBjaGnhur91OiAqKmFkbWluLioqDQoNCnwgTmjDs20gbmdo4buBICAgICAgICAgICAgICAgfCBI4buHIHPhu5EgUHJvYml0ICjOsikgfCBHacOhIHRy4buLIHAgfCBYw6FjIHN14bqldCB0xrDGoW5nIMSR4buRaSDGsOG7m2MgbMaw4bujbmcgfCBEaeG7hW4gZ2nhuqNpIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfA0KfCBgc3R1ZGVudGAgKihzaW5oIHZpw6puKSogICAgICAgfCAtMS4zODQgICAgICAgICAgIHwgMC4wMDAgICAgIHwg4oaTIH4yNSUgICAgICAgICAgICAgICAgICAgICAgICB8IFNpbmggdmnDqm4gY8OzIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyAqKnLhuqV0IHRo4bqlcCoqLCBjaOG7iSBraG/huqNuZyAqKjI1JSoqIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaC4gfA0KfCBgdW5lbXBsb3llZGAgKih0aOG6pXQgbmdoaeG7h3ApKiB8IC0wLjM5NiAgICAgICAgICAgfCAwLjAxNiAgICAgfCDihpMgfjY3JSAgICAgICAgICAgICAgICAgICAgICAgIHwgTmfGsOG7nWkgdGjhuqV0IG5naGnhu4dwIGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgKipnaeG6o20gY8OybiBraG/huqNuZyA2NyUqKiBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguIHwNCnwgYG1hbmFnZW1lbnRgICoocXXhuqNuIGzDvSkqICAgICB8IC0wLjI4MCAgICAgICAgICAgfCAwLjAwMSAgICAgfCDihpMgfjc2JSAgICAgICAgICAgICAgICAgICAgICAgIHwgTmfGsOG7nWkgbMOgbSBxdeG6o24gbMO9IGPDsyB4w6FjIHN14bqldCB2YXkgKip0aOG6pXAgaMahbioqLCBjaOG7iSBraG/huqNuZyAqKjc2JSoqIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaC4gfA0KfCBgdW5rbm93bmAgKihraMO0bmcgcsO1IG5naOG7gSkqICB8IC0xLjA2MSAgICAgICAgICAgfCAwLjAxNCAgICAgfCDihpMgfjM1JSAgICAgICAgICAgICAgICAgICAgICAgIHwgTmjhu69uZyBuZ8aw4budaSBraMO0bmcgcsO1IG5naOG7gSBuZ2hp4buHcCBjw7MgeMOhYyBzdeG6pXQgdmF5ICoqcuG6pXQgdGjhuqVwKiosIGNo4buJIGtob+G6o25nICoqMzUlKiogc28gduG7m2kgbmjDs20gaMOgbmggY2jDrW5oLiB8DQoNCi0tLQ0KDQojIyMjICoqYi4gTcO0IGjDrG5oIHbhu5tpIGJp4bq/biBgZWR1Y2F0aW9uYCoqDQoNCk5ow7NtIHRoYW0gY2hp4bq/dTogKipUcsOsbmggxJHhu5kgdGnhu4N1IGjhu41jIChwcmltYXJ5KSoqDQoNCnwgTmjDs20gaOG7jWMgduG6pW4gICAgICAgICAgICAgfCBI4buHIHPhu5EgekIgfCBYw6FjIHN14bqldCB0xrDGoW5nIOG7qW5nICjOpih6QikpIHwgRGnhu4VuIGdp4bqjaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBUcnVuZyBo4buNYyAoYHNlY29uZGFyeWApICB8IDAuMTcyNiAgIHwgNTYuODUlICAgICAgICAgICAgICAgICAgICAgIHwgS2jDoWNoIGjDoG5nIGPDsyAqKnRyw6xuaCDEkeG7mSB0cnVuZyBo4buNYyoqIGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgbMOgICoqNTYuODUlKiosICoqY2FvIGjGoW4qKiBzbyB24bubaSBuaMOzbSB0aeG7g3UgaOG7jWMuIHwNCnwgS2jDtG5nIHLDtSAoYHVua25vd25gKSAgICAgfCAtMC42OTQ4ICB8IDI0LjM2JSAgICAgICAgICAgICAgICAgICAgICB8IEtow6FjaCBow6BuZyBjw7MgKip0csOsbmggxJHhu5kgaOG7jWMgduG6pW4ga2jDtG5nIHjDoWMgxJHhu4tuaCoqIGPDsyB4w6FjIHN14bqldCB2YXkgbMOgICoqMjQuMzYlKiosICoqdGjhuqVwIGjGoW4gcsO1IHLhu4d0Kiogc28gduG7m2kgbmjDs20gdGnhu4N1IGjhu41jLiAgIHwNCg0KIyMjIyAqKmMuIE3DtCBow6xuaCB24bubaSBiaeG6v24gYG1hcml0YWxgKioNCg0KTmjDs20gdGhhbSBjaGnhur91OiAqKmRpdm9yY2VkKioNCg0KfCBUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gfCBI4buHIHPhu5EgekIgIHwgWMOhYyBzdeG6pXQgKM6mKHpCKSkgfCBHacOhIHRy4buLIHAgIHwgRGnhu4VuIGdp4bqjaSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18DQp8IFNpbmdsZSAgICAgICAgICAgICAgfCAtMC4yMDQxICAgfCA0MS45MSUgICAgICAgICAgIHwgMC4wMTA0ICAgICB8IE5nxrDhu51pICoqxJHhu5ljIHRow6JuKiogY8OzIHjDoWMgc3XhuqV0IHZheSBsw6AgKio0MS45MSUqKiBzbyB24bubaSBuaMOzbSBseSBow7RuLiB8DQoNCi0tLQ0KDQojIyMjICoqZC4gTcO0IGjDrG5oIHbhu5tpIGJp4bq/biBgZGVmYXVsdGAqKg0KDQpOaMOzbSB0aGFtIGNoaeG6v3U6ICoqZGVmYXVsdCA9IG5vKioNCg0KfCBOaMOzbSAgICAgICAgICAgICB8IHooQikgICB8IFAgKHjDoWMgc3XhuqV0KSB8IHAtdmFsdWUgfCBEaeG7hW4gZ2nhuqNpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgYGRlZmF1bHQgPSB5ZXNgICB8IDAuNTk0MyB8IDAuNzIzOCAgICAgICB8IDAuMDAwMSAgfCBLaMOhY2ggaMOgbmcgY8OzICoqbuG7oyBxdcOhIGjhuqFuKiogY8OzIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyAqKmNhbyBoxqFuKiogc28gduG7m2kgbmjDs20ga2jDtG5nIG7hu6MgcXXDoSBo4bqhbi4gQ+G7pSB0aOG7gywgeMOhYyBzdeG6pXQgxrDhu5tjIHTDrW5oIGzDoCAqKjcyLjQlKiouIHwNCg0KDQojIyMgKiozLjUuMyBI4buTaSBxdXkgUHJvYml0IMSRYSBiaeG6v24qKg0KDQpTYXUga2hpIHRo4buxYyBoaeG7h24gbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYywgdMOhYyBnaeG6oyB0aeG6v3AgdOG7pWMgdHJp4buDbiBraGFpIG3DtCBow6xuaCAqKmjhu5NpIHF1eSBQcm9iaXQqKiBuaOG6sW0ga2nhu4NtIMSR4buLbmggdMOtbmggbmjhuqV0IHF1w6FuIHbDoCDEkeG7mSBuaOG6oXkgY+G7p2EgY8OhYyBr4bq/dCBxdeG6oy4gTcO0IGjDrG5oIFByb2JpdCBz4butIGThu6VuZyBow6BtIGxpw6puIGvhur90IGzDoCAqKnBow6JuIHBo4buRaSBjaHXhuqluIHTDrWNoIGzFqXkqKiAkXFBoaShcY2RvdCkkIMSR4buDIG3DtCBwaOG7j25nIHjDoWMgc3XhuqV0IGtow6FjaCBow6BuZyB2YXkgdGnDqnUgZMO5bmcgKGBsb2FuID0geWVzYCkgZOG7sWEgdHLDqm4gY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wOiBgam9iYCAobmdo4buBIG5naGnhu4dwKSwgYGVkdWNhdGlvbmAgKHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiksIGBtYXJpdGFsYCAodMOsbmggdHLhuqFuZyBow7RuIG5ow6JuKSB2w6AgYGRlZmF1bHRgIChs4buLY2ggc+G7rSBu4bujIHF1w6EgaOG6oW4pLg0KDQpNw7QgaMOsbmggY8OzIGThuqFuZzoNCg0KJCQNClAoXHRleHR7bG9hbn1faSA9IDEgXG1pZCBYX2kpID0gXFBoaShcYmV0YV8wICsgXGJldGFfMSBcY2RvdCBcdGV4dHtqb2J9X2kgKyBcYmV0YV8yIFxjZG90IFx0ZXh0e2VkdWNhdGlvbn1faSArIFxiZXRhXzMgXGNkb3QgXHRleHR7bWFyaXRhbH1faSArIFxiZXRhXzQgXGNkb3QgXHRleHR7ZGVmYXVsdH1faSkNCiQkDQoNClRyb25nIMSRw7M6DQoNCi0gJFxQaGkoXGNkb3QpJCBsw6AgaMOgbSBwaMOibiBwaOG7kWkgdMOtY2ggbMWpeSBjaHXhuqluIGNodeG6qW4gaMOzYSAoQ0RGKSwNCi0gJFhfaSQgbMOgIHZlY3RvciBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgY2hvIGPDoSBuaMOibiAkaSQuDQoNCiMjIyAqKjMuNS40IEvhur90IHF14bqjIGjhu5NpIHF1eSBQcm9iaXQgxJFhIGJp4bq/bioqDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotICRIXzAkOiBCaeG6v24ga2jDtG5nIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24geMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIA0KLSAkSF8xJDogQmnhur9uIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24geMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIA0KDQpN4bupYyDDvSBuZ2jEqWEgc+G7rSBk4bulbmcgbMOgICRcYWxwaGEgPSAwLjA1JC4gTuG6v3UgcHZhbHVlIDwgMC4wNSwgYsOhYyBi4buPICRIXzAkLg0KDQoqKkvhur90IHF14bqjIG3DtCBow6xuaCBQcm9iaXQqKg0KDQpgYGB7cn0NCiMgQ2jhuqF5IG3DtCBow6xuaCBQcm9iaXQgxJFhIGJp4bq/bg0KbW9kZWxfcHJvYml0IDwtIGdsbShsb2FuIH4gam9iICsgZWR1Y2F0aW9uICsgbWFyaXRhbCArIGRlZmF1bHQsDQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhMSwNCiAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJwcm9iaXQiKSkNCg0KbGlicmFyeShicm9vbSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGtuaXRyKQ0KDQp0aWR5KG1vZGVsX3Byb2JpdCkgJT4lDQogIG11dGF0ZSgNCiAgICBlc3RpbWF0ZSA9IHJvdW5kKGVzdGltYXRlLCA0KSwNCiAgICBzdGQuZXJyb3IgPSByb3VuZChzdGQuZXJyb3IsIDQpLA0KICAgIHpCID0gZXN0aW1hdGUsDQogICAgUCA9IHJvdW5kKHBub3JtKHpCKSwgNCksDQogICAgcC52YWx1ZSA9IHJvdW5kKHAudmFsdWUsIDQpDQogICkgJT4lDQogIGRwbHlyOjpzZWxlY3QodGVybSwgekIsIFAsIHAudmFsdWUpICU+JQ0KICBrbml0cjo6a2FibGUoY2FwdGlvbiA9ICJC4bqjbmc6IEvhur90IHF14bqjIG3DtCBow6xuaCBQcm9iaXQgxJFhIGJp4bq/biDigJMgeihCKSB2w6AgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIChQKSIpDQoNCg0KDQoNCmBgYA0KDQpNw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljIMSRxrDhu6NjIHjDonkgZOG7sW5nIG5o4bqxbSBwaMOibiB0w61jaCB4w6FjIHN14bqldCBraMOhY2ggaMOgbmcgxJHEg25nIGvDvSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4gPSB5ZXMpIGThu7FhIHRyw6puIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmg6IG5naOG7gSBuZ2hp4buHcCAoam9iKSwgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIChlZHVjYXRpb24pLCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gKG1hcml0YWwpIHbDoCBs4buLY2ggc+G7rSB0w61uIGThu6VuZyAoZGVmYXVsdCkuIE3hu6ljIMO9IG5naMSpYSDEkcaw4bujYyBz4butIGThu6VuZyBsw6AgNSUgKM6xID0gMC4wNSkuDQoNCg0KKipC4bqjbmcgdOG7lW5nIGjhu6NwIGPDoWMgYmnhur9uIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKG3DtCBow6xuaCBQcm9iaXQpKioNCg0KDQp8IEJp4bq/biAgICAgICAgICAgICAgICB8IE5ow7NtIHNvIHPDoW5oICAgICAgICAgICB8IEjhu4cgc+G7kSAozrIpIHwgWMOhYyBzdeG6pXQgxrDhu5tjIGzGsOG7o25nIFAoeT0xfHgpIHwgcC12YWx1ZSAgfCBEaeG7hW4gZ2nhuqNpIHRoZW8geMOhYyBzdeG6pXQgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IGpvYnN0dWRlbnQgICAgICAgICAgfCBTbyB24bubaSBhZG1pbiAgICAgICAgICAgfCAtMS4xOSAgICAgfCDiiYggMC4yMyAgICAgICAgICAgICAgICAgICAgICB8IDAuMDAyNSAgIHwgU2luaCB2acOqbiBjw7MgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGtob+G6o25nICoqMjMlKiosIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaC4gfA0KfCBqb2J1bmVtcGxveWVkICAgICAgIHwgU28gduG7m2kgYWRtaW4gICAgICAgICAgIHwgLTAuMzcgICAgIHwg4omIIDAuNDEgICAgICAgICAgICAgICAgICAgICAgfCAwLjAyNTIgICB8IE5nxrDhu51pIHRo4bqldCBuZ2hp4buHcCBjw7MgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGtob+G6o25nICoqNDElKiosIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaC4gfA0KfCBqb2JlbnRyZXByZW5ldXIgICAgIHwgU28gduG7m2kgYWRtaW4gICAgICAgICAgIHwgMC4yNiAgICAgIHwg4omIIDAuNTYgICAgICAgICAgICAgICAgICAgICAgfCAwLjA1MDkgICB8IE5nxrDhu51pIHThu7EgZG9hbmggY8OzIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyBraG/huqNuZyAqKjU2JSoqLCBjYW8gaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguIHwNCnwgam9iYmx1ZS1jb2xsYXIgICAgICB8IFNvIHbhu5tpIGFkbWluICAgICAgICAgICB8IC0wLjE5ICAgICB8IOKJiCAwLjQ1ICAgICAgICAgICAgICAgICAgICAgIHwgMC4wMjEzICAgfCBMYW8gxJHhu5luZyBwaOG7lSB0aMO0bmcgY8OzIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyBraG/huqNuZyAqKjQ1JSoqLCB0aOG6pXAgaMahbiBuaOG6uSBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguIHwNCnwgZWR1Y2F0aW9uc2Vjb25kYXJ5ICB8IFNvIHbhu5tpIHByaW1hcnkgICAgICAgICB8IDAuMTggICAgICB8IOKJiCAwLjU1ICAgICAgICAgICAgICAgICAgICAgIHwgMC4wMTQ1ICAgfCBOZ8aw4budaSBo4buNYyB0cnVuZyBo4buNYyBjw7MgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGtob+G6o25nICoqNTUlKiosIGNhbyBoxqFuIHNvIHbhu5tpIG5nxrDhu51pIGNo4buJIGjhu41jIHRp4buDdSBo4buNYy4gfA0KfCBlZHVjYXRpb250ZXJ0aWFyeSAgIHwgU28gduG7m2kgcHJpbWFyeSAgICAgICAgIHwgMC4yNyAgICAgIHwg4omIIDAuNTcgICAgICAgICAgICAgICAgICAgICAgfCAwLjAwMDggICB8IE5nxrDhu51pIGjhu41jIMSR4bqhaSBo4buNYyB0cuG7nyBsw6puIGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcga2hv4bqjbmcgKio1NyUqKiwgY2FvIGjGoW4gxJHDoW5nIGvhu4MuIHwNCnwgbWFyaXRhbHNpbmdsZSAgICAgICB8IFNvIHbhu5tpIGRpdm9yY2VkICAgICAgICB8IC0wLjE5ICAgICB8IOKJiCAwLjQ1ICAgICAgICAgICAgICAgICAgICAgIHwgMC4wMjM0ICAgfCBOZ8aw4budaSDEkeG7mWMgdGjDom4gY8OzIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyBraG/huqNuZyAqKjQ1JSoqLCB0aOG6pXAgaMahbiBzbyB24bubaSBuZ8aw4budaSBseSBow7RuLiB8DQp8IG1hcnJpYWdlbWFycmllZCAgICAgfCBTbyB24bubaSBkaXZvcmNlZCAgICAgICAgfCAtMC4yNyAgICAgfCDiiYggMC40MyAgICAgICAgICAgICAgICAgICAgICB8IDAuMDAyMiAgIHwgTmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcga2hv4bqjbmcgKio0MyUqKiwgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmfGsOG7nWkgbHkgaMO0bi4gfA0KfCBkZWZhdWx0eWVzICAgICAgICAgIHwgU28gduG7m2kgZGVmYXVsdCA9IG5vICAgIHwgMC41NSAgICAgIHwg4omIIDAuNjMgICAgICAgICAgICAgICAgICAgICAgfCAwLjAwMDQgICB8IE5nxrDhu51pIGPDsyBu4bujIHjhuqV1IGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcga2hv4bqjbmcgKio2MyUqKiwgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIGPDsyBu4bujIHjhuqV1LiB8DQoNCg0KKipQaMawxqFuZyB0csOsbmggUHJvYml0IMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBuaMawIHNhdToqKg0KDQoqKnByb2JpdChQKGxvYW4gPSB5ZXMpKSA9IC0wLjk1IC0gMS4xOSDDlyBqb2JzdHVkZW50IC0gMC4zNyDDlyBqb2J1bmVtcGxveWVkICsgMC4yNiDDlyBqb2JlbnRyZXByZW5ldXIgLSAwLjI2IMOXIGpvYnJldGlyZWQgKyAwLjI1IMOXIGpvYnNlcnZpY2VzICsgMC4xOCDDlyBlZHVjYXRpb25zZWNvbmRhcnkgLSAwLjE5IMOXIG1hcml0YWxzaW5nbGUgKyAwLjU1IMOXIGRlZmF1bHR5ZXMqKg0KDQoNCioqS+G6v3QgbHXhuq1uKioNCg0KS+G6v3QgcXXhuqMgbcO0IGjDrG5oIFByb2JpdCBjaG8gdGjhuqV5IGPDsyA5IGJp4bq/biDEkeG7mWMgbOG6rXAgY8OzIOG6o25oIGjGsOG7n25nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogxJHhur9uIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyB04bqhaSBt4bupYyDDvSBuZ2jEqWEgNSUuIEPhu6UgdGjhu4M6DQoNCi0gKipOZ2jhu4EgbmdoaeG7h3AqKjogU28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91IGzDoCAiYWRtaW4uIiwgbmjhu69uZyBuZ8aw4budaSBsw6BtIG5naOG7gSAqKnN0dWRlbnQqKiwgKip1bmVtcGxveWVkKiosIHbDoCAqKnJldGlyZWQqKiBjw7MgeMOhYyBzdeG6pXQgdmF5IHRo4bqlcCBoxqFuLCB0cm9uZyBraGkgY8OhYyBuaMOzbSAqKmVudHJlcHJlbmV1cioqIHbDoCAqKnNlcnZpY2VzKiogbOG6oWkgY8OzIHjDoWMgc3XhuqV0IHZheSBjYW8gaMahbi4gxJBp4buBdSBuw6B5IHBo4bqjbiDDoW5oIHPhu7EgcGjDom4gaMOzYSB24buBIGto4bqjIG7Eg25nIHRp4bq/cCBj4bqtbiB0w61uIGThu6VuZyB0aGVvIMSR4bq3YyDEkWnhu4NtIG5naOG7gSBuZ2hp4buHcC4NCg0KLSAqKlRyw6xuaCDEkeG7mSBo4buNYyB24bqlbioqOiBOaMOzbSBraMOhY2ggaMOgbmcgY8OzIHRyw6xuaCDEkeG7mSAqKnNlY29uZGFyeSoqIGPDsyBraOG6oyBuxINuZyB2YXkgY2FvIGjGoW4gc28gduG7m2kgbmjDs20gY8OzIGjhu41jIHbhuqVuIHRo4bqlcCBoxqFuLCBjaG8gdGjhuqV5IGdpw6FvIGThu6VjIMSRw7NuZyB2YWkgdHLDsiB0w61jaCBj4buxYyB0cm9uZyB0aeG6v3AgY+G6rW4gdMOgaSBjaMOtbmguDQoNCi0gKipUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4qKjogTmfGsOG7nWkgKirEkeG7mWMgdGjDom4qKiBjw7MgeMOhYyBzdeG6pXQgdmF5IHRo4bqlcCBoxqFuIHNvIHbhu5tpIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biwgY8OzIHRo4buDIHBo4bqjbiDDoW5oIHPhu7EgdGjhuq1uIHRy4buNbmcgdHJvbmcgdGnDqnUgZMO5bmcgaG/hurdjIGto4bqjIG7Eg25nIHTDoGkgY2jDrW5oIGjhuqFuIGNo4bq/IGjGoW4uDQoNCi0gKipM4buLY2ggc+G7rSB0w61uIGThu6VuZyoqOiBLaMOhY2ggaMOgbmcgY8OzIHTDrG5oIHRy4bqhbmcgKipu4bujIHF1w6EgaOG6oW4gdHLGsOG7m2MgxJHDsyAoZGVmYXVsdCA9IHllcykqKiBjw7MgeMOhYyBzdeG6pXQgdmF5IGNhbyBoxqFuLCDEkWnhu4F1IG7DoHkgY8OzIHRo4buDIHBo4bqjbiDDoW5oIMSR4bq3YyDEkWnhu4NtIGjDoG5oIHZpIHTDoGkgY2jDrW5oIGPhu6dhIG5ow7NtIHLhu6dpIHJvIGNhbywgaG/hurdjIGNow61uaCBzw6FjaCB0w61uIGThu6VuZyBk4buFIGTDo2kgdOG7qyBwaMOtYSB04buVIGNo4bupYyBjaG8gdmF5Lg0KDQpOaOG7r25nIGvhur90IHF14bqjIHRyw6puIGN1bmcgY+G6pXAgY8ahIHPhu58gxJHhu4tuaCBoxrDhu5tuZyBjaG8gdmnhu4djICoqcGjDom4ga2jDumMga2jDoWNoIGjDoG5nIHRp4buBbSBuxINuZyoqLCAqKnRoaeG6v3Qga+G6vyBz4bqjbiBwaOG6qW0gdMOtbiBk4bulbmcgcGjDuSBo4bujcCoqLCBjxaluZyBuaMawIHTEg25nIGPGsOG7nW5nICoqcXXhuqNuIHRy4buLIHLhu6dpIHJvKiogdHJvbmcgaG/huqF0IMSR4buZbmcgY+G6pXAgdMOtbiBk4bulbmcgdGnDqnUgZMO5bmcuDQoNCiMjICoqMy42IEjhu5NpIHF1eSBDbG9nbG9nKioNCiMjIyAqKjMuNi4xIEjhu5NpIHF1eSBDbG9nbG9nIMSRxqFuIGJp4bq/bioqDQoNClTDoWMgZ2nhuqMgdGnhur9wIHThu6VjIHPhu60gZOG7pW5nIG3DtCBow6xuaCBo4buTaSBxdXkgQ2xvZ2xvZyDEkeG7gyBwaMOibiB0w61jaCByacOqbmcgbOG6uyDhuqNuaCBoxrDhu59uZyBj4bunYSB04burbmcgeeG6v3UgdOG7kSDEkeG7i25oIHTDrW5oIMSR4bq/biB4w6FjIHN14bqldCBraMOhY2ggaMOgbmcgdmF5IHRpw6p1IGTDuW5nIChsb2FuKS4gS2jDoWMgduG7m2kgbcO0IGjDrG5oIExvZ2l0IGhheSBQcm9iaXQsIGjhu5NpIHF1eSBDbG9nbG9nIHPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3QgY29tcGxlbWVudGFyeSBsb2ctbG9nIG5o4bqxbSBwaMO5IGjhu6NwIGjGoW4gduG7m2kgY8OhYyBoaeG7h24gdMaw4bujbmcgbcOgIHjDoWMgc3XhuqV0IHjhuqN5IHJhIHPhu7Ega2nhu4duIHTEg25nIG5oYW5oIHRoZW8gdGjhu51pIGdpYW4gaG/hurdjIGPDsyBwaMOibiBwaOG7kWkgbOG7h2NoLg0KDQoqKkRp4buFbiBnaeG6o2kgaOG7hyBz4buRIEJldGEgdHJvbmcgbcO0IGjDrG5oIENsb2dsb2cqKg0KDQpUcm9uZyBtw7QgaMOsbmggQ2xvZ2xvZywgaOG7hyBz4buRIEJldGEga2jDtG5nIHRo4buDIGRp4buFbiBnaeG6o2kgdHLhu7FjIHRp4bq/cCBuaMawIHRyb25nIG3DtCBow6xuaCBMb2dpdCwgbcOgIGPhuqduIGNodXnhu4NuIMSR4buVaSBzYW5nIHjDoWMgc3XhuqV0IHRow7RuZyBxdWEgY8O0bmcgdGjhu6ljOg0KDQpcWw0KcCA9IDEgLSBcZXhwXGxlZnQoLVxleHAoekIpXHJpZ2h0KSwgXHF1YWQgXHRleHR7dHJvbmcgxJHDsyB9IHpCID0gXGJldGFfMCArIFxzdW0gXGJldGFfaSB4X2kNClxdDQoNCg0KYGBge3J9DQojIFThuqNpIHRoxrAgdmnhu4duDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShicm9vbSkNCg0KIyDEkOG6t3QgbOG6oWkgdGhhbSBjaGnhur91IGNobyBiaeG6v24gam9iIChhZG1pbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSkNCmRhdGExJGpvYiA8LSByZWxldmVsKGRhdGExJGpvYiwgcmVmID0gImFkbWluLiIpDQoNCiMgTuG6v3UgY+G6p24sIGLhuqFuIGPFqW5nIGPDsyB0aOG7gyDEkeG6t3QgbOG6oWkgdGhhbSBjaGnhur91IGNobyBjw6FjIGJp4bq/biBraMOhYzoNCmRhdGExJGVkdWNhdGlvbiA8LSByZWxldmVsKGRhdGExJGVkdWNhdGlvbiwgcmVmID0gInByaW1hcnkiKQ0KZGF0YTEkbWFyaXRhbCAgIDwtIHJlbGV2ZWwoZGF0YTEkbWFyaXRhbCwgcmVmID0gImRpdm9yY2VkIikNCmRhdGExJGRlZmF1bHQgICA8LSByZWxldmVsKGRhdGExJGRlZmF1bHQsIHJlZiA9ICJubyIpDQoNCiMgSMOgbSB0w61uaCB4w6FjIHN14bqldCB04burIGjhu4cgc+G7kSBjbG9nbG9nDQpwcmVkaWN0X3Byb2JfY2xvZ2xvZyA8LSBmdW5jdGlvbihjb2VmcywgbGV2ZWwgPSBOVUxMKSB7DQogIHhiIDwtIGNvZWZzWyIoSW50ZXJjZXB0KSJdDQogIGlmICghaXMubnVsbChsZXZlbCkpIHsNCiAgICB4YiA8LSB4YiArIGNvZWZzW2xldmVsXQ0KICB9DQogIHByb2IgPC0gMSAtIGV4cCgtZXhwKHhiKSkNCiAgcmV0dXJuKHJvdW5kKHByb2IsIDQpKQ0KfQ0KDQojIEjDoG0gdOG7lW5nIGjhu6NwIGLhuqNuZyBr4bq/dCBxdeG6oyB04burIG3DtCBow6xuaCBjbG9nbG9nDQpidWlsZF9jbG9nbG9nX3N1bW1hcnkgPC0gZnVuY3Rpb24obW9kZWwsIHZhcl9uYW1lKSB7DQogIHRpZHlfbW9kZWwgPC0gdGlkeShtb2RlbCkNCiAgY29lZnMgPC0gY29lZihtb2RlbCkNCiAgDQogIGxldmVscyA8LSB0aWR5X21vZGVsJHRlcm0NCiAgbGV2ZWxzW2xldmVscyA9PSAiKEludGVyY2VwdCkiXSA8LSAiVGhhbSBjaGnhur91Ig0KICANCiAgcHJvYnMgPC0gc2FwcGx5KHRpZHlfbW9kZWwkdGVybSwgZnVuY3Rpb24odGVybSkgew0KICAgIGlmICh0ZXJtID09ICIoSW50ZXJjZXB0KSIpIHsNCiAgICAgIHByZWRpY3RfcHJvYl9jbG9nbG9nKGNvZWZzKQ0KICAgIH0gZWxzZSB7DQogICAgICBwcmVkaWN0X3Byb2JfY2xvZ2xvZyhjb2VmcywgdGVybSkNCiAgICB9DQogIH0pDQogIA0KICB0aWJibGUoDQogICAgQmllbiA9IHZhcl9uYW1lLA0KICAgIE5ob20gPSBsZXZlbHMsDQogICAgSGVfc28gPSByb3VuZCh0aWR5X21vZGVsJGVzdGltYXRlLCA0KSwNCiAgICBQX3ZhbHVlID0gcm91bmQodGlkeV9tb2RlbCRwLnZhbHVlLCA0KSwNCiAgICBYYWNfc3VhdCA9IHByb2JzDQogICkNCn0NCg0KIyA9PT0gTcO0IGjDrG5oIGNsb2dsb2cgxJHGoW4gYmnhur9uID09PQ0KbW9kZWxfY2xvZ2xvZ19qb2IgICAgIDwtIGdsbShsb2FuIH4gam9iLCAgICAgICBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSwgZGF0YSA9IGRhdGExKQ0KbW9kZWxfY2xvZ2xvZ19lZHUgICAgIDwtIGdsbShsb2FuIH4gZWR1Y2F0aW9uLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSwgZGF0YSA9IGRhdGExKQ0KbW9kZWxfY2xvZ2xvZ19tYXJpdGFsIDwtIGdsbShsb2FuIH4gbWFyaXRhbCwgICBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSwgZGF0YSA9IGRhdGExKQ0KbW9kZWxfY2xvZ2xvZ19kZWZhdWx0IDwtIGdsbShsb2FuIH4gZGVmYXVsdCwgICBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSwgZGF0YSA9IGRhdGExKQ0KDQojID09PSBU4buVbmcgaOG7o3Aga+G6v3QgcXXhuqMgPT09DQpqb2JfdGJsICAgICA8LSBidWlsZF9jbG9nbG9nX3N1bW1hcnkobW9kZWxfY2xvZ2xvZ19qb2IsICAgICAiam9iIikNCmVkdV90YmwgICAgIDwtIGJ1aWxkX2Nsb2dsb2dfc3VtbWFyeShtb2RlbF9jbG9nbG9nX2VkdSwgICAgICJlZHVjYXRpb24iKQ0KbWFyaXRhbF90YmwgPC0gYnVpbGRfY2xvZ2xvZ19zdW1tYXJ5KG1vZGVsX2Nsb2dsb2dfbWFyaXRhbCwgIm1hcml0YWwiKQ0KZGVmYXVsdF90YmwgPC0gYnVpbGRfY2xvZ2xvZ19zdW1tYXJ5KG1vZGVsX2Nsb2dsb2dfZGVmYXVsdCwgImRlZmF1bHQiKQ0KDQojIEfhu5lwIHThuqV0IGPhuqMgbOG6oWkgdGjDoG5oIDEgYuG6o25nDQpmdWxsX2Nsb2dsb2dfc3VtbWFyeSA8LSBiaW5kX3Jvd3Moam9iX3RibCwgZWR1X3RibCwgbWFyaXRhbF90YmwsIGRlZmF1bHRfdGJsKQ0KDQojIEluIGvhur90IHF14bqjDQpwcmludChmdWxsX2Nsb2dsb2dfc3VtbWFyeSkNCg0KYGBgDQoNCiMjIyAqKjMuNi4yIEvhur90IHF14bqjIGjhu5NpIHF1eSBDbG9nbG9nIMSRxqFuIGJp4bq/bioqDQoNCiMjIyMgKiphLiBNw7QgaMOsbmggduG7m2kgYmnhur9uIGBqb2JgKioNCg0KTmjDs20gdGhhbSBjaGnhur91OiAqKmFkbWluLioqDQoNCnwgTmjDs20gbmdo4buBIG5naGnhu4dwICAgICAgICAgICB8IEjhu4cgc+G7kSBDTG9nTG9nICjOsikgfCBwLXZhbHVlIHwgWMOhYyBzdeG6pXQgdMawxqFuZyDEkeG7kWkgxrDhu5tjIGzGsOG7o25nIHwgRGnhu4VuIGdp4bqjaSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18DQp8IGBzdHVkZW50YCAoc2luaCB2acOqbikgICAgICAgIHwgLTIuMDQ3ICAgICAgICAgICAgIHwgMC4wMDAgICAgIHwg4oaTIH4xMyUgICAgICAgICAgICAgICAgICAgICAgICAgfCBTaW5oIHZpw6puIGPDsyB4w6FjIHN14bqldCB2YXkgKipy4bqldCB0aOG6pXAqKiwgY2jhu4kga2hv4bqjbmcgKioxMyUqKiBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguIHwNCnwgYHVuZW1wbG95ZWRgICh0aOG6pXQgbmdoaeG7h3ApICB8IC0wLjU5MyAgICAgICAgICAgICB8IDAuMDAwICAgICB8IOKGkyB+NTUlICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmfGsOG7nWkgdGjhuqV0IG5naGnhu4dwIGPDsyB4w6FjIHN14bqldCB2YXkgKipnaeG6o20gY8OybiBraG/huqNuZyA1NSUqKiBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguIHwNCnwgYG1hbmFnZW1lbnRgIChxdeG6o24gbMO9KSAgICAgIHwgLTAuMzY0ICAgICAgICAgICAgIHwgMC4wMDAgICAgIHwg4oaTIH42OSUgICAgICAgICAgICAgICAgICAgICAgICAgfCBOZ8aw4budaSBsw6BtIHF14bqjbiBsw70gY8OzIHjDoWMgc3XhuqV0IHZheSAqKnRo4bqlcCBoxqFuKiosIGNo4buJIGtob+G6o25nICoqNjklKiogc28gduG7m2kgbmjDs20gaMOgbmggY2jDrW5oLiB8DQp8IGB1bmtub3duYCAoa2jDtG5nIHLDtSBuZ2jhu4EpICAgfCAtMS4zODcgICAgICAgICAgICAgfCAwLjAwMiAgICAgfCDihpMgfjI1JSAgICAgICAgICAgICAgICAgICAgICAgICB8IE5o4buvbmcgbmfGsOG7nWkga2jDtG5nIHLDtSBuZ2jhu4EgbmdoaeG7h3AgY8OzIHjDoWMgc3XhuqV0IHZheSAqKnLhuqV0IHRo4bqlcCoqLCBjaOG7iSBraG/huqNuZyAqKjI1JSoqIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaC4gfA0KDQotLS0NCg0KIyMjIyAqKmIuIE3DtCBow6xuaCB24bubaSBiaeG6v24gYGVkdWNhdGlvbmAqKg0KDQpOaMOzbSB0aGFtIGNoaeG6v3U6ICoqVHLDrG5oIMSR4buZIHRp4buDdSBo4buNYyAocHJpbWFyeSkqKg0KDQp8IE5ow7NtIGjhu41jIHbhuqVuICAgICAgICAgICAgICB8IEjhu4cgc+G7kSBDTG9nTG9nICjOsikgfCBwLXZhbHVlIHwgWMOhYyBzdeG6pXQgdMawxqFuZyDEkeG7kWkgxrDhu5tjIGzGsOG7o25nIHwgRGnhu4VuIGdp4bqjaSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfA0KfCBgc2Vjb25kYXJ5YCAodHJ1bmcgaOG7jWMpICAgfCAwLjIxNiAgICAgICAgICAgICAgfCAwLjAwMCAgICAgfCDihpEgfjExMiUgICAgICAgICAgICAgICAgICAgICAgIHwgTmfGsOG7nWkgaOG7jWMgdHJ1bmcgaOG7jWMgY8OzIHjDoWMgc3XhuqV0IHZheSAqKmNhbyBoxqFuIH4xLjEyIGzhuqduKiogc28gduG7m2kgbmjDs20gdGnhu4N1IGjhu41jLiB8DQp8IGB0ZXJ0aWFyeWAgKMSR4bqhaSBo4buNYykgICAgICB8IDAuMzE5ICAgICAgICAgICAgICB8IDAuMDAwICAgICB8IOKGkSB+MTM4JSAgICAgICAgICAgICAgICAgICAgICAgfCBOZ8aw4budaSBjw7MgdHLDrG5oIMSR4buZIMSR4bqhaSBo4buNYyBjw7MgeMOhYyBzdeG6pXQgdmF5ICoqY2FvIGjGoW4gfjEuMzggbOG6p24qKiBzbyB24bubaSBuaMOzbSB0aeG7g3UgaOG7jWMuIHwNCg0KIyMjIyAqKmMuIE3DtCBow6xuaCB24bubaSBiaeG6v24gYG1hcml0YWxgKioNCg0KTmjDs20gdGhhbSBjaGnhur91OiAqKmRpdm9yY2VkKioNCg0KfCBUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gICAgICAgICB8IEjhu4cgc+G7kSBDTG9nTG9nICjOsikgfCBwLXZhbHVlIHwgWMOhYyBzdeG6pXQgdMawxqFuZyDEkeG7kWkgxrDhu5tjIGzGsOG7o25nIHwgRGnhu4VuIGdp4bqjaSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfA0KfCBgbWFycmllZGAgKMSRw6Mga+G6v3QgaMO0bikgICAgICAgfCAtMC4xNDEgICAgICAgICAgICAgfCAwLjAyMyAgICAgfCDihpMgfjg3JSAgICAgICAgICAgICAgICAgICAgICAgICB8IE5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biBjw7MgeMOhYyBzdeG6pXQgdmF5ICoqZ2nhuqNtIG5o4bq5KiosIGPDsm4ga2hv4bqjbmcgKio4NyUqKiBzbyB24bubaSBuZ8aw4budaSDEkcOjIGx5IGjDtG4uIHwNCg0KLS0tDQoNCiMjIyMgKipkLiBNw7QgaMOsbmggduG7m2kgYmnhur9uIGBkZWZhdWx0YCoqDQoNCg0KTmjDs20gdGhhbSBjaGnhur91OiAqKmRlZmF1bHQgPSBubyoqDQoNCnwgVMOsbmggdHLhuqFuZyBu4bujIHF1w6EgaOG6oW4gICAgICAgfCBI4buHIHPhu5EgQ0xvZ0xvZyAozrIpIHwgcC12YWx1ZSB8IFjDoWMgc3XhuqV0IHTGsMahbmcgxJHhu5FpIMaw4bubYyBsxrDhu6NuZyB8IERp4buFbiBnaeG6o2kgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfA0KfCBgeWVzYCAoY8OzIG7hu6MgcXXDoSBo4bqhbikgICAgICAgfCAtMC44ODUgICAgICAgICAgICAgfCAwLjAwMCAgICAgfCDihpMgfjQxJSAgICAgICAgICAgICAgICAgICAgICAgICB8IE5nxrDhu51pIHThu6tuZyBjw7MgbuG7oyBxdcOhIGjhuqFuIGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgKipjaOG7iSBi4bqxbmcgNDElKiogc28gduG7m2kgbmfGsOG7nWkgY2jGsGEgdOG7q25nIG7hu6MgcXXDoSBo4bqhbi4gfA0KDQoNCiMjIyAqKjMuNi4zIEjhu5NpIHF1eSBDbG9nbG9nIMSRYSBiaeG6v24qKg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNCg0KLSAqKkgwKio6IEJp4bq/biDEkeG7mWMgbOG6rXAga2jDtG5nIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcNCi0gKipIMSoqOiBCaeG6v24gxJHhu5ljIGzhuq1wIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24geMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nDQoNCkThu7FhIHbDoG8gKipwLXZhbHVlKiogdHJvbmcga+G6v3QgcXXhuqMgxrDhu5tjIGzGsOG7o25nLCB0YSDEkcawYSByYSBxdXnhur90IMSR4buLbmggYsOhYyBi4buPIGhheSBnaeG7ryBI4oKAIHThuqFpIG3hu6ljIMO9IG5naMSpYSDOsSAodGjGsOG7nW5nIGzDoCAwLjA1KS4NCg0KKirGr+G7m2MgbMaw4bujbmcgbcO0IGjDrG5oKioNCg0KDQpgYGB7cn0NCiMgQ2jhuqF5IG3DtCBow6xuaCBjbG9nbG9nDQptb2RlbF9jbG9nbG9nIDwtIGdsbShsb2FuIH4gam9iICsgZWR1Y2F0aW9uICsgbWFyaXRhbCArIGRlZmF1bHQsDQogICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YTEsDQogICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSkNCg0KIyBM4bqleSBo4buHIHPhu5EgdsOgIGdpw6EgdHLhu4sgcA0KY29lZl90YWJsZSA8LSBzdW1tYXJ5KG1vZGVsX2Nsb2dsb2cpJGNvZWZmaWNpZW50cw0KYmV0YSA8LSBjb2VmX3RhYmxlWywgIkVzdGltYXRlIl0NCnBfdmFsdWUgPC0gY29lZl90YWJsZVssICJQcig+fHp8KSJdDQoNCiMgVMOtbmggeMOhYyBzdeG6pXQgdOG7qyBo4buHIHPhu5EgY2xvZ2xvZzogcCA9IDEgLSBleHAoLWV4cChYzrIpKQ0KIyBW4bubaSBt4buXaSBo4buHIHPhu5EsIGdp4bqjIMSR4buLbmggYmnhur9uIHTGsMahbmcg4bupbmcgbMOgIDEsIGPDoWMgYmnhur9uIGtow6FjID0gMCAoxJHhu4MgbcO0IHBo4buPbmcgcmnDqm5nIGzhursgdOG7q25nIGJp4bq/bikNCiMgWMOhYyBzdeG6pXQgcmnDqm5nIGJp4buHdCB04burbmcgYmnhur9uOiBwX2kgPSAxIC0gZXhwKC1leHAozrJfaSkpDQoNCnByb2JhYmlsaXR5IDwtIDEgLSBleHAoLWV4cChiZXRhKSkNCg0KIyBU4bqhbyBi4bqjbmcgdOG7lW5nIGjhu6NwDQpyZXN1bHRzX2Nsb2dsb2cgPC0gZGF0YS5mcmFtZSgNCiAgVmFyaWFibGUgPSByb3duYW1lcyhjb2VmX3RhYmxlKSwNCiAgQ29lZmZpY2llbnQgPSByb3VuZChiZXRhLCA0KSwNCiAgUF92YWx1ZSA9IHJvdW5kKHBfdmFsdWUsIDQpLA0KICBFc3RpbWF0ZWRfUHJvYmFiaWxpdHkgPSByb3VuZChwcm9iYWJpbGl0eSwgNCkNCikNCg0KIyBIaeG7g24gdGjhu4sgYuG6o25nIGvhur90IHF14bqjDQpwcmludChyZXN1bHRzX2Nsb2dsb2cpDQoNCg0KYGBgDQoNCiMjIyAqKjMuNi40IEvhur90IHF14bqjIGjhu5NpIHF1eSBDbG9nbG9nIMSRYSBiaeG6v24qKg0KDQpUcm9uZyBwaOG6p24gbsOgeSwgdGEgxJFpIHPDonUgcGjDom4gdMOtY2ggw70gbmdoxKlhIHRo4buRbmcga8OqIHbDoCB0aOG7sWMgdGnhu4VuIGPhu6dhIHThu6tuZyBuaMOzbSBiaeG6v24gxJHhu5ljIGzhuq1wIHRyb25nIG3DtCBow6xuaCBDbG9nbG9nLiBN4buXaSBo4buHIHPhu5EgcGjhuqNuIMOhbmggdMOhYyDEkeG7mW5nIGPhu6dhIGJp4bq/biDEkeG7mWMgbOG6rXAgdMawxqFuZyDhu6luZyDEkeG6v24gbG9nWy1sb2coMSAtIFAobG9hbiA9IHllcykpXSwgduG7m2kgY8OhYyBuaMOzbSB0aGFtIGNoaeG6v3UgxJHDoyDEkcaw4bujYyB4w6FjIMSR4buLbmggcsO1Lg0KDQoqKkLhuqNuZyB04buVbmcgaOG7o3AgY8OhYyBiaeG6v24gY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAobcO0IGjDrG5oIENsb2dsb2cpKioNCg0KfCBCaeG6v24gICAgICAgICAgICAgICAgIHwgTmjDs20gc28gc8Ohbmggc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91ICAgICB8IEjhu4cgc+G7kSDOsiB8IFjDoWMgc3XhuqV0IMaw4bubYyBsxrDhu6NuZyB8IERp4buFbiBnaeG6o2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBqb2JzdHVkZW50ICAgICAgICAgICB8IFN0dWRlbnQgdnMuIGFkbWluLiAgICAgICAgICAgICAgICAgICAgICB8IC0yLjYxICAgfCB+Ny40JSAgICAgICAgICAgICAgIHwgU2luaCB2acOqbiBjw7MgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIHLhuqV0IHRo4bqlcCwgY2jhu4kga2hv4bqjbmcgNy40JSBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguIHwNCnwgam9ic2VsZi1lbXBsb3llZCAgICAgfCBTZWxmLWVtcGxveWVkIHZzLiBhZG1pbi4gICAgICAgICAgICAgICAgfCAtMC45OSAgIHwgfjQxLjIlICAgICAgICAgICAgICB8IE5nxrDhu51pIHThu7Ega2luaCBkb2FuaCBjw7MgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGtob+G6o25nIDQxLjIlIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaC4gfA0KfCBqb2J0ZWNobmljaWFuICAgICAgICB8IFRlY2huaWNpYW4gdnMuIGFkbWluLiAgICAgICAgICAgICAgICAgICB8IC0wLjU2ICAgfCB+NTYuNCUgICAgICAgICAgICAgIHwgTmjDom4gdmnDqm4ga+G7uSB0aHXhuq10IGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcga2hv4bqjbmcgNTYuNCUgc28gduG7m2kgbmjDs20gaMOgbmggY2jDrW5oLiB8DQp8IGVkdWNhdGlvbnRlcnRpYXJ5ICAgIHwgVGVydGlhcnkgdnMuIGxvdyBlZHVjYXRpb24gICAgICAgICAgICAgIHwgMC4zNCAgICB8IH43MS41JSAgICAgICAgICAgICAgfCBOZ8aw4budaSBjw7MgdHLDrG5oIMSR4buZIMSR4bqhaSBo4buNYyBjw7MgeMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGtob+G6o25nIDcxLjUlLCBjYW8gaMahbiBuaMOzbSB0csOsbmggxJHhu5kgdGjhuqVwLiB8DQp8IG1hcml0YWxzaW5nbGUgICAgICAgIHwgU2luZ2xlIHZzLiBtYXJyaWVkICAgICAgICAgICAgICAgICAgICAgIHwgLTAuMzIgICB8IH42My4xJSAgICAgICAgICAgICAgfCBOZ8aw4budaSDEkeG7mWMgdGjDom4gY8OzIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZyBraG/huqNuZyA2My4xJSwgdGjhuqVwIGjGoW4gbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuLiB8DQp8IGRlZmF1bHR5ZXMgICAgICAgICAgIHwgQ8OzIG7hu6MgcXXDoSBo4bqhbiB2cy4ga2jDtG5nIG7hu6MgICAgICAgICAgICAgIHwgLTEuMDcgICB8IH4zNi41JSAgICAgICAgICAgICAgfCBOZ8aw4budaSBjw7MgbuG7oyBxdcOhIGjhuqFuIGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgY2jhu4kgMzYuNSUgc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIG7hu6MgcXXDoSBo4bqhbi4gfA0KDQoNCioqUGjGsMahbmcgdHLDrG5oIENsb2dsb2cgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nIG5oxrAgc2F1KioNCg0KKipjbG9nbG9nKFAobG9hbiA9IHllcykpID0gLTEuNjggLSAyLjUwIMOXIGpvYl9zdHVkZW50IC0gMC42MyDDlyBqb2JfdW5lbXBsb3llZCArIDAuMzkgw5cgam9iX2VudHJlcHJlbmV1ciArIDAuMzAgw5cgZWR1Y2F0aW9uX3NlY29uZGFyeSAtIDAuMzAgw5cgbWFyaXRhbF9zaW5nbGUgKyAwLjgwIMOXIGRlZmF1bHRfeWVzKioNCg0KDQoqKkvhur90IGx14bqtbioqDQoNCkvhur90IHF14bqjIG3DtCBow6xuaCBo4buTaSBxdXkgQ2xvZ2xvZyBjaG8gdGjhuqV5IG3hu5l0IHPhu5EgxJHhurdjIMSRaeG7g20gY8OhIG5ow6JuIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24geMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZzoNCg0KLSBTaW5oIHZpw6puIGPDsyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgcuG6pXQgdGjhuqVwLCBjaOG7iSBraG/huqNuZyA3LjQlIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaCwgY2hvIHRo4bqleSBuaMOzbSBuw6B5IMOtdCDEkcaw4bujYyBkdXnhu4d0IHZheS4NCg0KLSBOZ8aw4budaSB0aOG6pXQgbmdoaeG7h3AgY8WpbmcgY8OzIHjDoWMgc3XhuqV0IHZheSB0aOG6pXAgaMahbiByw7UgcuG7h3QsIGNo4buJIGLhurFuZyBraG/huqNuZyA1My4zJSBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguDQoNCi0gRG9hbmggbmjDom4gY8OzIHjDoWMgc3XhuqV0IHZheSBjYW8gaMahbiBraG/huqNuZyA0OCUgc28gduG7m2kgbmjDs20gaMOgbmggY2jDrW5oLCBjaG8gdGjhuqV5IG5ow7NtIG7DoHkgY8OzIGto4bqjIG7Eg25nIMSRxrDhu6NjIHZheSB04buRdCBoxqFuLg0KDQotIE5o4buvbmcgbmfGsOG7nWkgY8OzIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB0cnVuZyBo4buNYyBjw7MgeMOhYyBzdeG6pXQgdmF5IGNhbyBoxqFuIDM1JSBzbyB24bubaSBuZ8aw4budaSBjw7MgaOG7jWMgduG6pW4gdGnhu4N1IGjhu41jLCBwaOG6o24gw6FuaCBt4buRaSBsacOqbiBo4buHIHTDrWNoIGPhu7FjIGdp4buvYSBo4buNYyB24bqlbiB2w6Aga2jhuqMgbsSDbmcgdmF5Lg0KDQotIE5nxrDhu51pIMSR4buZYyB0aMOibiBjw7MgeMOhYyBzdeG6pXQgdmF5IHRo4bqlcCBoxqFuIGtob+G6o25nIDI2JSBzbyB24bubaSBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4sIGPDsyB0aOG7gyBkbyB54bq/dSB04buRIOG7lW4gxJHhu4tuaCB0w6BpIGNow61uaC4NCg0KLSBLaMOhY2ggaMOgbmcgY8OzIGzhu4tjaCBz4butIG7hu6MgcXXDoSBo4bqhbiAoZGVmYXVsdCA9IHllcykgY8OzIHjDoWMgc3XhuqV0IHZheSBjYW8gaMahbiDEkcOhbmcga+G7gywgZ+G6pXAgMi4yIGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGNoxrBhIHThu6tuZyBu4bujIHF1w6EgaOG6oW4g4oCTIMSRaeG7gXUgbsOgeSBjw7MgdGjhu4MgZG8gbmjDs20gbsOgeSB04burbmcgdmF5IHbDoCBjw7MgbeG7kWkgcXVhbiBo4buHIHTDrW4gZOG7pW5nIHRyxrDhu5tjIMSRw7MuDQoNClTDs20gbOG6oWksIG3DtCBow6xuaCBjaG8gdGjhuqV5IGPDoWMgxJHhurdjIMSRaeG7g20gbmdo4buBIG5naGnhu4dwLCBo4buNYyB24bqlbiwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIHbDoCBs4buLY2ggc+G7rSB0w61uIGThu6VuZyDEkeG7gXUg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZy4gDQoNCiMjICoqMy43IEjhu5NpIHF1eSB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oKioNCiMjIyAqKjMuNy4xIEjhu5NpIHF1eSB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIMSRxqFuIGJp4bq/bioqDQoNClTDoWMgZ2nhuqMgdGnhur9wIHThu6VjIHRo4buxYyBoaeG7h24gaOG7k2kgcXV5IHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggKExpbmVhciBQcm9iYWJpbGl0eSBNb2RlbCAtIExQTSkgxJHhu4MgcGjDom4gdMOtY2gg4bqjbmggaMaw4bufbmcgcmnDqm5nIGzhursgY+G7p2EgdOG7q25nIGJp4bq/biDEkeG7i25oIHTDrW5oIMSR4bq/biBraOG6oyBuxINuZyB2YXkgdGnDqnUgZMO5bmcgKGBsb2FuYCkuIEtow6FjIHbhu5tpIGPDoWMgbcO0IGjDrG5oIHBoaSB0dXnhur9uIG5oxrAgTG9naXN0aWMsIFByb2JpdCBoYXkgQ2xvZ2xvZywgTFBNIHPhu60gZOG7pW5nIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCBj4buVIMSRaeG7g24gduG7m2kgYmnhur9uIHBo4bulIHRodeG7mWMgZOG6oW5nIG5o4buLIHBow6JuICgwLzEpOg0KDQpcWw0KUChsb2FuID0geWVzKSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFgNClxdDQoNClRyb25nIMSRw7M6ICANCi0gXChQKGxvYW4gPSB5ZXMpXCkgbMOgIHjDoWMgc3XhuqV0IGtow6FjaCBow6BuZyB2YXkgdGnDqnUgZMO5bmcuICANCi0gXChYXCkgbMOgIGJp4bq/biBnaeG6o2kgdGjDrWNoLiAgDQoNCkTDuSDEkcahbiBnaeG6o24sIG3DtCBow6xuaCBMUE0gY8OzIG5oxrDhu6NjIMSRaeG7g20gbmjGsCBraOG6oyBuxINuZyBk4buxIMSRb8OhbiB4w6FjIHN14bqldCB2xrDhu6N0IG5nb8OgaSBbMCwxXSB2w6Agc2FpIHPhu5Ega2jDtG5nIMSR4buTbmcgbmjhuqV0LCBuaMawbmcgduG6q24gxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4Mgc28gc8OhbmggdHLhu7FjIHF1YW4g4bqjbmggaMaw4bufbmcgY+G7p2EgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaC4NCg0KRMaw4bubaSDEkcOieSBsw6Aga+G6v3QgcXXhuqMgbcO0IGjDrG5oIMSRxqFuIGJp4bq/bjoNCg0KYGBge3J9DQoNCiMgSOG7k2kgcXV5IHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggxJHGoW4gYmnhur9uDQptb2RlbF9scG1fam9iIDwtIGxtKGFzLm51bWVyaWMobG9hbiA9PSAieWVzIikgfiBqb2IsIGRhdGEgPSBkYXRhMSkNCm1vZGVsX2xwbV9lZHUgPC0gbG0oYXMubnVtZXJpYyhsb2FuID09ICJ5ZXMiKSB+IGVkdWNhdGlvbiwgZGF0YSA9IGRhdGExKQ0KbW9kZWxfbHBtX21hcml0YWwgPC0gbG0oYXMubnVtZXJpYyhsb2FuID09ICJ5ZXMiKSB+IG1hcml0YWwsIGRhdGEgPSBkYXRhMSkNCm1vZGVsX2xwbV9kZWZhdWx0IDwtIGxtKGFzLm51bWVyaWMobG9hbiA9PSAieWVzIikgfiBkZWZhdWx0LCBkYXRhID0gZGF0YTEpDQoNCiMgWGVtIGvhur90IHF14bqjIHThu6tuZyBtw7QgaMOsbmgNCnN1bW1hcnkobW9kZWxfbHBtX2pvYikNCnN1bW1hcnkobW9kZWxfbHBtX2VkdSkNCnN1bW1hcnkobW9kZWxfbHBtX21hcml0YWwpDQpzdW1tYXJ5KG1vZGVsX2xwbV9kZWZhdWx0KQ0KYGBgDQoNCiMjIyAqKjMuNy4yIEvhur90IHF14bqjIGjhu5NpIHF1eSB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIMSRxqFuIGJp4bq/bioqDQoNCiMjIyMgKiphLiBNw7QgaMOsbmggduG7m2kgYmnhur9uIGBqb2JgKioNCg0KTmjDs20gdGhhbSBjaGnhur91OiAqKmFkbWluLioqDQoNCnwgTmjDs20gbmdo4buBICAgICAgIHwgSOG7hyBz4buRICjOsikgfCBwLXZhbHVlIHwgRGnhu4VuIGdp4bqjaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgc3R1ZGVudCAgICAgICAgICB8IC0wLjE3OCAgICB8IDwgMC4wMDEgfCBHaeG6o20geMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGtob+G6o25nIDE3LjglIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaC4gfA0KfCB1bmVtcGxveWVkICAgICAgIHwgLTAuMDg5ICAgIHwgMC4wMTMgICB8IFjDoWMgc3XhuqV0IHZheSB0aOG6pXAgaMahbiA4LjklIHNvIHbhu5tpIG5ow7NtIGjDoG5oIGNow61uaC4gICAgICAgICAgfA0KfCBtYW5hZ2VtZW50ICAgICAgIHwgLTAuMDY3ICAgIHwgMC4wMDEgICB8IEdp4bqjbSB4w6FjIHN14bqldCB2YXkga2hv4bqjbmcgNi43JSBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBob3VzZW1haWQgICAgICAgIHwgLTAuMDc0ICAgIHwgMC4wNDggICB8IEPDsyB4w6FjIHN14bqldCB2YXkgdGjhuqVwIGjGoW4ga2hv4bqjbmcgNy40JSBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguICAgICAgICAgICAgICAgICAgIHwNCnwgdW5rbm93biAgICAgICAgICB8IC0wLjE2NCAgICB8IDAuMDA3ICAgfCBHaeG6o20gbeG6oW5oIHjDoWMgc3XhuqV0IHZheSAofjE2LjQlKSBzbyB24bubaSBuaMOzbSBow6BuaCBjaMOtbmguICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KLS0tDQoNCiMjIyMgKipiLiBNw7QgaMOsbmggduG7m2kgYmnhur9uIGBlZHVjYXRpb25gKioNCg0KTmjDs20gdGhhbSBjaGnhur91OiAqKnByaW1hcnkqKg0KDQp8IFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB8IEjhu4cgc+G7kSAozrIpIHwgcC12YWx1ZSB8IERp4buFbiBnaeG6o2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBzZWNvbmRhcnkgICAgICAgIHwgMC4wNDIgICAgIHwgMC4wMDggICB8IFTEg25nIHjDoWMgc3XhuqV0IHZheSBraG/huqNuZyA0LjIlIHNvIHbhu5tpIG5ow7NtIGjhu41jIHRp4buDdSBo4buNYy4gICAgICAgIHwNCnwgdGVydGlhcnkgICAgICAgICB8IC0wLjAxMCAgICB8IDAuNTYzICAgfCBLaMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCB1bmtub3duICAgICAgICAgIHwgLTAuMTAxICAgIHwgPCAwLjAwMSB8IFjDoWMgc3XhuqV0IHZheSB0aOG6pXAgaMahbiBraG/huqNuZyAxMC4xJSBzbyB24bubaSBuaMOzbSBo4buNYyB0aeG7g3UgaOG7jWMuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KLS0tDQoNCiMjIyMgKipjLiBNw7QgaMOsbmggduG7m2kgYmnhur9uIGBtYXJpdGFsYCoqDQoNCk5ow7NtIHRoYW0gY2hp4bq/dTogKipkaXZvcmNlZCoqDQoNCnwgVMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIHwgSOG7hyBz4buRICjOsikgfCBwLXZhbHVlIHwgRGnhu4VuIGdp4bqjaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IG1hcnJpZWQgICAgICAgICAgICAgIHwgLTAuMDA4ICAgIHwgMC42MTkgICB8IEtow7RuZyBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSBzbyB24bubaSBuZ8aw4budaSDEkcOjIGx5IGjDtG4uICAgICAgICB8DQp8IHNpbmdsZSAgICAgICAgICAgICAgIHwgLTAuMDQ3ICAgIHwgMC4wMTMgICB8IE5ow7NtIG5nxrDhu51pIMSR4buZYyB0aMOibiDDrXQgdmF5IGjGoW4gbmfGsOG7nWkgbHkgaMO0biBraG/huqNuZyA0LjclLiAgICAgICAgICAgICAgICAgICAgICB8DQoNCi0tLQ0KDQojIyMjICoqZC4gTcO0IGjDrG5oIHbhu5tpIGJp4bq/biBgZGVmYXVsdGAqKg0KDQpOaMOzbSB0aGFtIGNoaeG6v3U6ICoqZGVmYXVsdCA9IG5vKioNCg0KfCBCaeG6v24gbuG7oyB0w61uIGThu6VuZyB8IEjhu4cgc+G7kSAozrIpIHwgcC12YWx1ZSB8IERp4buFbiBnaeG6o2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgZGVmYXVsdHllcyAgICAgICB8IDAuMTc5ICAgICB8IDwgMC4wMDEgfCBOZ8aw4budaSBjw7MgbuG7oyB44bqldSBjw7MgeMOhYyBzdeG6pXQgdmF5IGNhbyBoxqFuIGtob+G6o25nIDE3LjklIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBjw7MgbuG7oyB44bqldS4gICAgICAgICAgICAgIHwNCg0KLS0tDQoNCg0KIyMjICoqMy43LjMgSOG7k2kgcXV5IHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggxJFhIGJp4bq/bioqDQoNCg0KVMOhYyBnaeG6oyB0aeG6v3AgdOG7pWMgdHJp4buDbiBraGFpIG3DtCBow6xuaCAqKmjhu5NpIHF1eSB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oKiogbmjhurFtIMSRw6FuaCBnacOhIHTDoWMgxJHhu5luZyBj4bunYSBjw6FjIHnhur91IHThu5EgxJHhu4tuaCB0w61uaCDEkeG6v24geMOhYyBzdeG6pXQga2jDoWNoIGjDoG5nIHZheSB0acOqdSBkw7luZyAoYGxvYW4gPSB5ZXNgKS4gVHJvbmcgbcO0IGjDrG5oIG7DoHksIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBiaeG6v24gbmjhu4sgcGjDom4gKDEgbuG6v3UgdmF5LCAwIG7hur91IGtow7RuZyksIG5oxrBuZyB0aGF5IHbDrCBz4butIGThu6VuZyBjw6FjIGjDoG0gbGnDqm4ga+G6v3QgKGxvZ2l0LCBwcm9iaXQpLCB0YSDGsOG7m2MgbMaw4bujbmcgdHLhu7FjIHRp4bq/cCBi4bqxbmcgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggdGjDtG5nIHRoxrDhu51uZy4NCg0KQ8O0bmcgdGjhu6ljIG3DtCBow6xuaDoNCg0KJCQNClAoXHRleHR7bG9hbn1faSA9IDEgXG1pZCBYX2kpID0gXGJldGFfMCArIFxiZXRhXzEgXGNkb3QgXHRleHR7am9ifV9pICsgXGJldGFfMiBcY2RvdCBcdGV4dHtlZHVjYXRpb259X2kgKyBcYmV0YV8zIFxjZG90IFx0ZXh0e21hcml0YWx9X2kgKyBcYmV0YV80IFxjZG90IFx0ZXh0e2RlZmF1bHR9X2kgKyBcZXBzaWxvbl9pDQokJA0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNCg0KVuG7m2kgdOG7q25nIGJp4bq/biDEkeG7mWMgbOG6rXAsIHRhIHRo4buxYyBoaeG7h24ga2nhu4NtIMSR4buLbmg6DQoNCi0gJEhfMCQ6IEJp4bq/biBraMO0bmcgY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgDQotICRIXzEkOiBCaeG6v24gY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcgDQoNCk3hu6ljIMO9IG5naMSpYSBz4butIGThu6VuZyBsw6AgJFxhbHBoYSA9IDAuMDUkLiBO4bq/dSBwdmFsdWUgPCAwLjA1LCBiw6FjIGLhu48gJEhfMCQuDQoNCioqxq/hu5tjIGzGsOG7o25nIG3DtCBow6xuaCoqDQoNCmBgYHtyIGxpbmVhci1wcm9iYWJpbGl0eS1tb2RlbH0NCiMgVOG6oW8gYmnhur9uIG5o4buLIHBow6JuIGxvYW5feWVzDQpkYXRhMSRsb2FuX3llcyA8LSBhcy5udW1lcmljKGRhdGExJGxvYW4gPT0gInllcyIpDQoNCiMgSOG7k2kgcXV5IHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggxJFhIGJp4bq/bg0KbW9kZWxfZ2xtIDwtIGxtKGxvYW5feWVzIH4gam9iICsgZWR1Y2F0aW9uICsgbWFyaXRhbCArIGRlZmF1bHQsIGRhdGEgPSBkYXRhMSkNCg0KIyBIaeG7g24gdGjhu4sga+G6v3QgcXXhuqMNCnN1bW1hcnkobW9kZWxfZ2xtKQ0KYGBgDQoNCiMjIyAqKjMuNy40IEvhur90IHF14bqjIGjhu5NpIHF1eSB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIMSRYSBiaeG6v24qKg0KDQogKipC4bqjbmcgdOG7lW5nIGjhu6NwIGPDoWMgYmnhur9uIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogdHJvbmcgbcO0IGjDrG5oIExNUCoqDQoNCnwgQmnhur9uICAgICAgICAgICAgICAgIHwgTmjDs20gc28gc8OhbmggICAgICAgICB8IEjhu4cgc+G7kSAozrIpIHwgcC12YWx1ZSB8IERp4buFbiBnaeG6o2kgbmfhuq9uIGfhu41uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IGBqb2JzdHVkZW50YCAgICAgICAgfCBTbyB24bubaSBgYWRtaW4uYCAgICAgIHwgLTAuMTM1ICAgIHwgMC4wMDE3ICB8IFNpbmggdmnDqm4gY8OzIHjDoWMgc3XhuqV0IHZheSB0aOG6pXAgaMahbiBraG/huqNuZyAxMy41JSBzbyB24bubaSBuaMOzbSBuZ2jhu4EgaMOgbmggY2jDrW5oLiAgfA0KfCBgam9idW5lbXBsb3llZGAgICAgIHwgU28gduG7m2kgYGFkbWluLmAgICAgICB8IC0wLjA4MyAgICB8IDAuMDIwNyAgfCBUaOG6pXQgbmdoaeG7h3AgY8OzIHjDoWMgc3XhuqV0IHZheSB0aOG6pXAgaMahbiBraG/huqNuZyA4LjMlIHNvIHbhu5tpIG5ow7NtIG5naOG7gSBow6BuaCBjaMOtbmguIHwNCnwgYGpvYmVudHJlcHJlbmV1cmAgICB8IFNvIHbhu5tpIGBhZG1pbi5gICAgICAgfCAgMC4wNjQgICAgfCAwLjA0OTQgIHwgTmfGsOG7nWkgdOG7sSBkb2FuaCBjw7MgeMOhYyBzdeG6pXQgdmF5IGNhbyBoxqFuIGtob+G6o25nIDYuNCUgc28gduG7m2kgbmjDs20gbmdo4buBIGjDoG5oIGNow61uaC4gfA0KfCBgZWR1Y2F0aW9uc2Vjb25kYXJ5YHwgU28gduG7m2kgYHByaW1hcnlgICAgICB8ICAwLjA0MyAgICB8IDAuMDExMiAgfCBI4buNYyB0cnVuZyBo4buNYyB2YXkgbmhp4buBdSBoxqFuIGtob+G6o25nIDQuMyUgc28gduG7m2kgbmjDs20gdGnhu4N1IGjhu41jLiAgICAgICAgICB8DQp8IGBlZHVjYXRpb251bmtub3duYCAgfCBTbyB24bubaSBgcHJpbWFyeWAgICAgIHwgLTAuMDg1ICAgIHwgMC4wMDUyICB8IEtow7RuZyByw7UgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGPDsyB4w6FjIHN14bqldCB2YXkgdGjhuqVwIGjGoW4gOC41JSBzbyB24bubaSBuaMOzbSB0aeG7g3UgaOG7jWMuIHwNCnwgYG1hcml0YWxzaW5nbGVgICAgICB8IFNvIHbhu5tpIGBkaXZvcmNlZGAgICAgfCAtMC4wMzggICAgfCAwLjA0MzggIHwgTmfGsOG7nWkgxJHhu5ljIHRow6JuIGPDsyB4w6FjIHN14bqldCB2YXkgdGjhuqVwIGjGoW4ga2hv4bqjbmcgMy44JSBzbyB24bubaSBuaMOzbSDEkcOjIGx5IGjDtG4uIHwNCnwgYGRlZmF1bHR5ZXNgICAgICAgICB8IFNvIHbhu5tpIGBkZWZhdWx0ID0gbm9gfCAgMC4xNzAgICAgfCA8MC4wMDEgIHwgQ8OzIG7hu6MgeOG6pXUgdmF5IG5oaeG7gXUgaMahbiBraG/huqNuZyAxNyUgc28gduG7m2kgbmjDs20ga2jDtG5nIGPDsyBu4bujIHjhuqV1LiAgICAgICAgICAgICAgIHwNCg0KKipQaMawxqFuZyB0csOsbmggTE1QIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBuaMawIHNhdSoqDQoNCioqUChsb2FuID0geWVzKSA9IDAuMTcwIC0gMC4xMzXDl2pvYnN0dWRlbnQgLSAwLjA4M8OXam9idW5lbXBsb3llZCArIDAuMDY0w5dqb2JlbnRyZXByZW5ldXIgKyAwLjA0M8OXZWR1Y2F0aW9uc2Vjb25kYXJ5IC0gMC4wODXDl2VkdWNhdGlvbnVua25vd24gLSAwLjAzOMOXbWFyaXRhbHNpbmdsZSArIDAuMTcww5dkZWZhdWx0eWVzKioNCg0KKipL4bq/dCBsdeG6rW4gdOG7qyBtw7QgaMOsbmggTE1QKioNCg0KTcO0IGjDrG5oIExNUCAoaOG7k2kgcXV5IHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmgpIGNobyB0aOG6pXkgbmhp4buBdSB54bq/dSB04buRIMSR4buLbmggdMOtbmgg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIHjDoWMgc3XhuqV0IHZheSB0acOqdSBkw7luZy4gIA0KDQotIEjhu4cgc+G7kSBkxrDGoW5nOiBjaG8gdGjhuqV5IG5ow7NtIGPDsyAqKnjDoWMgc3XhuqV0IHZheSBjYW8gaMahbioqIHNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dS4gIA0KLSBI4buHIHPhu5Egw6JtOiBiaeG7g3UgdGjhu4sgKipnaeG6o20geMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nKiouDQoNClR1eSBMUE0gY8OzIG5oxrDhu6NjIMSRaeG7g20gduG7gSBnaeG6oyDEkeG7i25oIHBoxrDGoW5nIHNhaSBraMO0bmcgxJHhu5VpIHbDoCB4w6FjIHN14bqldCBjw7MgdGjhu4Mgdsaw4bujdCBuZ2/DoGkgWzAsMV0sIG5oxrBuZyBtw7QgaMOsbmggbsOgeSAqKsSRxqFuIGdp4bqjbiB2w6AgZOG7hSBnaeG6o2kgdGjDrWNoKiosIGdpw7pwIGPhu6duZyBj4buRIGvhur90IHF14bqjIHThu6sgY8OhYyBtw7QgaMOsbmggbG9naXQsIHByb2JpdCwgY2xvZ2xvZy4NCg0KIyMgKiozLjggxJDDoW5oIGdpw6EgdsOgIGzhu7FhIGNo4buNbiBtw7QgaMOsbmggcGjDuSBo4bujcCoqDQoNCiMjIyAqKjMuOC4xIMSQw6FuaCBnacOhIHRow7RuZyBxdWEgY2jhu4kgc+G7kSBBSUMqKg0KDQpDaOG7iSBz4buRIEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24gKEFJQykgbMOgIG3hu5l0IHRpw6p1IGNow60gcGjhu5UgYmnhur9uIMSR4buDIHNvIHPDoW5oIGNo4bqldCBsxrDhu6NuZyBnaeG7r2EgY8OhYyBtw7QgaMOsbmggdGjhu5FuZyBrw6ouIEFJQyDEkW8gbMaw4budbmcgc+G7sSDEkcOhbmggxJHhu5VpIGdp4buvYSDEkeG7mSBwaMO5IGjhu6NwIHbDoCDEkeG7mSBwaOG7qWMgdOG6oXAgY+G7p2EgbcO0IGjDrG5oLiBNw7QgaMOsbmggY8OzIEFJQyBjw6BuZyB0aOG6pXAgxJHGsOG7o2MgeGVtIGzDoCBwaMO5IGjhu6NwIGjGoW4gduG7m2kgZOG7ryBsaeG7h3UgKOG7nyBjw7luZyBt4buZdCB04bqtcCBiaeG6v24gZ2nhuqNpIHRow61jaCkuDQoNCmBgYHtyfQ0KIyBUw61uaCBBSUMgdOG7q25nIG3DtCBow6xuaA0KYWljX2xvZ2l0ICAgIDwtIEFJQyhtb2RlbF9sb2dpdCkNCmFpY19wcm9iaXQgICA8LSBBSUMobW9kZWxfcHJvYml0KQ0KYWljX2Nsb2dsb2cgIDwtIEFJQyhtb2RlbF9jbG9nbG9nKQ0KIyBJbiBi4bqjbmcgQUlDDQphaWNfcmVzdWx0cyA8LSBkYXRhLmZyYW1lKA0KICBNb2RlbCA9IGMoIkxvZ2l0IiwgIlByb2JpdCIsICJDbG9nbG9nIiksDQogIEFJQyAgID0gYyhhaWNfbG9naXQsIGFpY19wcm9iaXQsIGFpY19jbG9nbG9nKQ0KKQ0KDQpwcmludChhaWNfcmVzdWx0cykNCmBgYA0KDQoqKk5o4bqtbiB4w6l0KioNCg0KS+G6v3QgcXXhuqMgc28gc8OhbmggZ2nhu69hIGJhIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4g4oCTIExvZ2l0LCBQcm9iaXQgdsOgIENsb2dsb2cg4oCTIGThu7FhIHRyw6puIHRpw6p1IGNow60gQWthaWtlIEluZm9ybWF0aW9uIENyaXRlcmlvbiAoQUlDKSBjaG8gdGjhuqV5LCBtw7QgaMOsbmggTG9naXQgY8OzIGdpw6EgdHLhu4sgQUlDIHRo4bqlcCBuaOG6pXQgKDM3OTMuMjE0KSwgdGnhur9wIMSR4bq/biBsw6AgUHJvYml0ICgzNzkzLjM3OSkgdsOgIGN14buRaSBjw7luZyBsw6AgQ2xvZ2xvZyAoMzc5My40NzYpLiBN4bq3YyBkw7kgbeG7qWMgY2jDqm5oIGzhu4djaCBBSUMgZ2nhu69hIGPDoWMgbcO0IGjDrG5oIGtow7RuZyDEkcOhbmcga+G7gyAoZMaw4bubaSAwLjMpLCB0aGVvIG5ndXnDqm4gdOG6r2MgbOG7sWEgY2jhu41uIG3DtCBow6xuaCB04buRaSDGsHUsIG3DtCBow6xuaCBjw7MgQUlDIG5o4buPIG5o4bqldCB24bqrbiDEkcaw4bujYyB4ZW0gbMOgIHBow7kgaOG7o3AgaMahbi4gRG8gxJHDsywgbcO0IGjDrG5oIExvZ2l0IMSRxrDhu6NjIHhlbSBsw6AgbOG7sWEgY2jhu41uIHThu5F0IG5o4bqldCB0cm9uZyBi4buRaSBj4bqjbmggbmdoacOqbiBj4bupdSBuw6B5Lg0KDQojIyMgKiozLjguMiDEkMOhbmggZ2nDoSB0aMO0bmcgcXVhIG1hIHRy4bqtbiBuaOG6p20gbOG6q24qKg0KDQpNYSB0cuG6rW4gbmjhuqdtIGzhuqtuIChDb25mdXNpb24gTWF0cml4KSBsw6AgbeG7mXQgY8O0bmcgY+G7pSBwaMOibiB0w61jaCDEkeG7i25oIGzGsOG7o25nIHF1YW4gdHLhu41uZywgxJHGsOG7o2Mgc+G7rSBk4bulbmcgcuG7mW5nIHLDo2kgdHJvbmcgY8OhYyBtw7QgaMOsbmggcGjDom4gbG/huqFpIG5o4buLIHBow6JuIG5o4bqxbSDEkcOhbmggZ2nDoSBoaeG7h3Ugc3XhuqV0IHBow6JuIGxv4bqhaSBj4bunYSBtw7QgaMOsbmggZOG7sSBiw6FvLiBNYSB0cuG6rW4gbmjhuqdtIGzhuqtuIMSRxrDhu6NjIHjDonkgZOG7sW5nIGThu7FhIHRyw6puIG5nxrDhu6FuZyBwaMOibiBsb+G6oWkgbeG6t2MgxJHhu4tuaCBsw6AgMC41OiBjw6FjIHjDoWMgc3XhuqV0IGThu7EgxJFvw6FuIGzhu5tuIGjGoW4gaG/hurdjIGLhurFuZyAwLjUgc+G6vSDEkcaw4bujYyBwaMOibiBsb+G6oWkgbMOgIOKAnHllc+KAnSAoY8OzIHZheSB0acOqdSBkw7luZyksIG5nxrDhu6NjIGzhuqFpIGzDoCDigJxub+KAnS4gQ+G6pXUgdHLDumMgY+G7p2EgbWEgdHLhuq1uIGJhbyBn4buTbSBi4buRbiB0aMOgbmggcGjhuqduIGPGoSBi4bqjbiwgcGjhuqNuIMOhbmggc+G7sSBzbyBzw6FuaCBnaeG7r2Ega+G6v3QgcXXhuqMgZOG7sSBiw6FvIGPhu6dhIG3DtCBow6xuaCB2w6AgZ2nDoSB0cuG7iyB0aOG7sWMgdOG6vzoNCg0KLSBUcnVlIFBvc2l0aXZlIChUUCk6IFPhu5EgbMaw4bujbmcgdHLGsOG7nW5nIGjhu6NwIG3DoCBtw7QgaMOsbmggZOG7sSDEkW/DoW4gxJHDum5nIGtow6FjaCBow6BuZyBjw7Mgbmh1IGPhuqd1IHZheSB0acOqdSBkw7luZyAobG9hbiA9ICJ5ZXMiKS4NCg0KLSBUcnVlIE5lZ2F0aXZlIChUTik6IFPhu5EgbMaw4bujbmcgdHLGsOG7nW5nIGjhu6NwIG3DoCBtw7QgaMOsbmggZOG7sSDEkW/DoW4gxJHDum5nIGtow6FjaCBow6BuZyBraMO0bmcgY8OzIG5odSBj4bqndSB2YXkgdGnDqnUgZMO5bmcgKGxvYW4gPSAibm8iKS4NCg0KLSBGYWxzZSBQb3NpdGl2ZSAoRlApOiBT4buRIGzGsOG7o25nIHRyxrDhu51uZyBo4bujcCBtw7QgaMOsbmggZOG7sSDEkW/DoW4ga2jDoWNoIGjDoG5nIGPDsyBuaHUgY+G6p3UgdmF5IChsb2FuID0gInllcyIpIHRyb25nIGtoaSB0aOG7sWMgdOG6vyBsw6Aga2jDtG5nIChsb2FuID0gIm5vIiksIGfDonkgcmEgY+G6o25oIGLDoW8gc2FpIGzhu4djaC4NCg0KLSBGYWxzZSBOZWdhdGl2ZSAoRk4pOiBT4buRIGzGsOG7o25nIHRyxrDhu51uZyBo4bujcCBtw7QgaMOsbmggZOG7sSDEkW/DoW4ga2jDoWNoIGjDoG5nIGtow7RuZyBjw7Mgbmh1IGPhuqd1IHZheSAobG9hbiA9ICJubyIpIHRyb25nIGtoaSB0aOG7sWMgdOG6vyBsw6AgY8OzIG5odSBj4bqndSB2YXkgKGxvYW4gPSAieWVzIiksIGThuqtuIMSR4bq/biB2aeG7h2MgYuG7jyBzw7N0IGtow6FjaCBow6BuZyB0aeG7gW0gbsSDbmcuDQoNCmBgYHtyfQ0KY29uZl9tYXRyaXggPC0gZnVuY3Rpb24obW9kZWwsIGRhdGEsIGN1dG9mZiA9IDAuNSkgew0KICBwcmVkaWN0ZWRfcHJvYiA8LSBwcmVkaWN0KG1vZGVsLCBuZXdkYXRhID0gZGF0YSwgdHlwZSA9ICJyZXNwb25zZSIpDQogIHByZWRpY3RlZF9jbGFzcyA8LSBpZmVsc2UocHJlZGljdGVkX3Byb2IgPj0gY3V0b2ZmLCAieWVzIiwgIm5vIikNCiAgYWN0dWFsX2NsYXNzIDwtIGRhdGEkbG9hbg0KICB0YWJsZShQcmVkaWN0ZWQgPSBwcmVkaWN0ZWRfY2xhc3MsIEFjdHVhbCA9IGFjdHVhbF9jbGFzcykNCn0NCg0KIyBH4buNaSBow6BtIGNobyB04burbmcgbcO0IGjDrG5oDQpjbV9sb2dpdCAgICA8LSBjb25mX21hdHJpeChtb2RlbF9sb2dpdCwgZGF0YTEpDQpjbV9wcm9iaXQgICA8LSBjb25mX21hdHJpeChtb2RlbF9wcm9iaXQsIGRhdGExKQ0KY21fY2xvZ2xvZyAgPC0gY29uZl9tYXRyaXgobW9kZWxfY2xvZ2xvZywgZGF0YTEpDQoNCiMgSW4ga+G6v3QgcXXhuqMNCnByaW50KGNtX2xvZ2l0KQ0KcHJpbnQoY21fcHJvYml0KQ0KcHJpbnQoY21fY2xvZ2xvZykNCg0KYGBgDQoNCkvhur90IHF14bqjIDMgbcO0IGjDrG5oIMSR4buBdSBnaeG7kW5nIG5oYXUgbmjGsCBzYXU6DQoNCnwgICAgICAgICAgICAgICAgfCBBY3R1YWw6IG5vIHwgQWN0dWFsOiB5ZXMgfA0KfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfA0KfCBQcmVkaWN0ZWQ6IG5vICB8IFROID0gMzgyOCAgfCBGTiA9IDY5MCAgICAgfA0KfCBQcmVkaWN0ZWQ6IHllcyB8IEZQID0gMiAgICAgfCBUUCA9IDEgICAgICAgfA0KDQoNClbhu4EgaGnhu4d1IHF14bqjIHBow6JuIGxv4bqhaSwgY+G6oyBiYSBtw7QgaMOsbmggxJHhu4F1IMSRxrBhIHJhIGvhur90IHF14bqjIHLhuqV0IHTGsMahbmcgxJHhu5NuZywgdGjhu4MgaGnhu4duIHF1YSBtYSB0cuG6rW4gbmjhuqdtIGzhuqtuIGdp4buRbmcgbmhhdS4gVHJvbmcgc+G7kSA0NTE5IHF1YW4gc8OhdCwgbcO0IGjDrG5oIGThu7EgxJFvw6FuIMSRw7puZyAzODI4IHRyxrDhu51uZyBo4bujcCBraMOhY2gga2jDtG5nIHZheSB2w6AgY2jhu4kgMSB0csaw4budbmcgaOG7o3Aga2jDoWNoIGPDsyB2YXkuIFR1eSBuaGnDqm4sIG3DtCBow6xuaCBi4buPIHPDs3QgNjkwIHRyxrDhu51uZyBo4bujcCBjw7MgdmF5LCDEkWnhu4F1IG7DoHkgY2hvIHRo4bqleSBtw7QgaMOsbmggY8OzIGto4bqjIG7Eg25nIGThu7EgYsOhbyB04buRdCB24bubaSBuaMOzbSDigJxraMO0bmcgdmF54oCdIG5oxrBuZyBrw6ltIHbhu5tpIG5ow7NtIOKAnGPDsyB2YXnigJ0uDQoNCg0KIyMjICoqMy44LjIgxJDDoW5oIGdpw6EgdGjDtG5nIHF1YSDEkcaw4budbmcgY29uZyBST0MgdsOgIGRp4buHbiB0w61jaCBBVUMqKg0KDQrEkMaw4budbmcgY29uZyBST0MgKFJlY2VpdmVyIE9wZXJhdGluZyBDaGFyYWN0ZXJpc3RpYykgbMOgIG3hu5l0IGPDtG5nIGPhu6UgdHLhu7FjIHF1YW4gaMOzYSBoaeG7h3UgcXXhuqMgcGjDom4gbG/huqFpIGPhu6dhIG3DtCBow6xuaCBi4bqxbmcgY8OhY2ggbcO0IHThuqMgbeG7kWkgcXVhbiBo4buHIGdp4buvYSB04bu3IGzhu4cgZMawxqFuZyDEkcO6bmcgKFRydWUgUG9zaXRpdmUgUmF0ZSAtIFRQUikgdsOgIHThu7cgbOG7hyBkxrDGoW5nIGdp4bqjIChGYWxzZSBQb3NpdGl2ZSBSYXRlIC0gRlBSKSB04bqhaSBjw6FjIG5nxrDhu6FuZyBwaMOibiBsb+G6oWkga2jDoWMgbmhhdS4gUk9DIMSR4bq3YyBiaeG7h3QgaOG7r3Ugw61jaCB0cm9uZyBi4buRaSBj4bqjbmggZOG7ryBsaeG7h3UgbeG6pXQgY8OibiDEkeG7kWksIHbDrSBk4bulIG5oxrAgdHLGsOG7nW5nIGjhu6NwIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgInZheSIgbmjhu48gaMahbiBuaGnhu4F1IHNvIHbhu5tpICJraMO0bmcgdmF5Ii4NCg0KQ2jhu4kgc+G7kSBBVUMgKEFyZWEgVW5kZXIgdGhlIEN1cnZlKSDigJMgdOG7qWMgZGnhu4duIHTDrWNoIGTGsOG7m2kgxJHGsOG7nW5nIGNvbmcgUk9DIOKAkyBsw6AgdGjGsOG7m2MgxJFvIHThu5VuZyBxdcOhdCDEkeG7gyDEkcOhbmggZ2nDoSBjaOG6pXQgbMaw4bujbmcgbcO0IGjDrG5oLiBHacOhIHRy4buLIEFVQyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDAgxJHhur9uIDEsIHRyb25nIMSRw7M6DQoNCi0gQVVDID0gMC41OiBNw7QgaMOsbmgga2jDtG5nIGPDsyBraOG6oyBuxINuZyBwaMOibiBiaeG7h3QsIHTGsMahbmcgxJHGsMahbmcgduG7m2kgxJFvw6FuIG5n4bqrdSBuaGnDqm4uDQoNCi0gMC43IOKJpCBBVUMgPCAwLjg6IE3DtCBow6xuaCBjw7MgY2jhuqV0IGzGsOG7o25nIHBow6JuIGxv4bqhaSBraMOhLg0KDQotIDAuOCDiiaQgQVVDIDwgMC45OiBNw7QgaMOsbmggY8OzIGNo4bqldCBsxrDhu6NuZyB04buRdC4NCg0KLSBBVUMg4omlIDAuOTogTcO0IGjDrG5oIHBow6JuIGxv4bqhaSBy4bqldCB04buRdC4NCg0KU28gc8OhbmggZ2nhu69hIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBuaMawIExvZ2l0LCBQcm9iaXQgdsOgIENvbXBsZW1lbnRhcnkgTG9nLWxvZyAoQ2xvZ2xvZykgdGjDtG5nIHF1YSBjaOG7iSBz4buRIEFVQyBnacO6cCB4w6FjIMSR4buLbmggbcO0IGjDrG5oIG7DoG8gY8OzIGhp4buHdSBzdeG6pXQgcGjDom4gbG/huqFpIGNhbyBoxqFuLCB04burIMSRw7MgaOG7lyB0cuG7oyBs4buxYSBjaOG7jW4gbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0IMSR4buDIGThu7EgYsOhbyBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcgY+G7p2Ega2jDoWNoIGjDoG5nLg0KDQpgYGB7cn0NCmxpYnJhcnkocFJPQykNCnByb2JzX2xvZ2l0IDwtIHByZWRpY3QobW9kZWxfbG9naXQsIHR5cGUgPSAicmVzcG9uc2UiKQ0KDQojIFThuqFvIFJPQyBvYmplY3QNCnJvY19sb2dpdCA8LSByb2MocmVzcG9uc2UgPSBkYXRhMSRsb2FuLCBwcmVkaWN0b3IgPSBwcm9ic19sb2dpdCkNCg0KIyBW4bq9IMSRxrDhu51uZyBST0MNCnBsb3Qocm9jX2xvZ2l0LCBjb2wgPSAiYmx1ZSIsIGx3ZCA9IDIsIG1haW4gPSAiUk9DIEN1cnZlIC0gTG9naXQgTW9kZWwiKQ0KDQojIFTDrW5oIEFVQw0KYXVjX2xvZ2l0IDwtIGF1Yyhyb2NfbG9naXQpDQpjYXQoIkFVQyBj4bunYSBtw7QgaMOsbmggTG9naXQ6Iiwgcm91bmQoYXVjX2xvZ2l0LCA0KSwgIlxuIikNCmBgYA0KDQoNCmBgYHtyfQ0KIyBE4buxIMSRb8OhbiB4w6FjIHN14bqldA0KcHJvYnNfcHJvYml0IDwtIHByZWRpY3QobW9kZWxfcHJvYml0LCB0eXBlID0gInJlc3BvbnNlIikNCg0KIyBU4bqhbyDEkeG7kWkgdMaw4bujbmcgUk9DDQpyb2NfcHJvYml0IDwtIHJvYyhyZXNwb25zZSA9IGRhdGExJGxvYW4sIHByZWRpY3RvciA9IHByb2JzX3Byb2JpdCkNCg0KIyBW4bq9IMSRxrDhu51uZyBST0MNCnBsb3Qocm9jX3Byb2JpdCwgY29sID0gImdyZWVuIiwgbHdkID0gMiwgbWFpbiA9ICJST0MgQ3VydmUgLSBQcm9iaXQgTW9kZWwiKQ0KDQojIFTDrW5oIEFVQw0KYXVjX3Byb2JpdCA8LSBhdWMocm9jX3Byb2JpdCkNCmNhdCgiQVVDIGPhu6dhIG3DtCBow6xuaCBQcm9iaXQ6Iiwgcm91bmQoYXVjX3Byb2JpdCwgNCksICJcbiIpDQpgYGANCg0KDQpgYGB7cn0NCiMgROG7sSDEkW/DoW4geMOhYyBzdeG6pXQgdOG7qyBtw7QgaMOsbmggQ2xvZ2xvZw0KcHJvYnNfY2xvZ2xvZyA8LSBwcmVkaWN0KG1vZGVsX2Nsb2dsb2csIHR5cGUgPSAicmVzcG9uc2UiKQ0KDQojIFThuqFvIMSR4buRaSB0xrDhu6NuZyBST0MNCnJvY19jbG9nbG9nIDwtIHJvYyhyZXNwb25zZSA9IGRhdGExJGxvYW4sIHByZWRpY3RvciA9IHByb2JzX2Nsb2dsb2cpDQoNCiMgVuG6vSDEkcaw4budbmcgUk9DDQpwbG90KHJvY19jbG9nbG9nLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbWFpbiA9ICJST0MgQ3VydmUgLSBDbG9nbG9nIE1vZGVsIikNCg0KIyBUw61uaCBBVUMNCmF1Y19jbG9nbG9nIDwtIGF1Yyhyb2NfY2xvZ2xvZykNCmNhdCgiQVVDIGPhu6dhIG3DtCBow6xuaCBDbG9nbG9nOiIsIHJvdW5kKGF1Y19jbG9nbG9nLCA0KSwgIlxuIikNCmBgYA0KDQoqKkvhur90IHF14bqjIEFVQyBj4bunYSBjw6FjIG3DtCBow6xuaDoqKg0KDQp8IE3DtCBow6xuaCAgICAgICAgICAgICAgICAgICAgICAgICB8IEFVQyAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfA0KfCAqKkxvZ2l0KiogICAgICAgICAgICAgICAgICAgICAgICB8IDAuNjEwMiAgfA0KfCAqKlByb2JpdCoqICAgICAgICAgICAgICAgICAgICAgICB8IDAuNjEwOSAgfA0KfCAqKkNsb2dsb2cqKiAgICAgICAgICAgICAgICAgICAgICB8IDAuNjEwOCAgfA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCk5ow6xuIGNodW5nLCBj4bqjIGJhIG3DtCBow6xuaCBwaGkgdHV54bq/biAobG9naXQsIHByb2JpdCB2w6AgY2xvZ2xvZykgxJHhu4F1IGNobyBr4bq/dCBxdeG6oyBBVUMgZGFvIMSR4buZbmcgcXVhbmggbeG7qWMgMC42MSDigJMgY2FvIGjGoW4gbeG7mXQgY2jDunQgc28gduG7m2kgbcO0IGjDrG5oIGThu7EgxJFvw6FuIG5n4bqrdSBuaGnDqm4gKDAuNSksIG5oxrBuZyBjaMawYSDEkeG6oXQgbmfGsOG7oW5nIHThu5F0ICg+IDAuNykuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGto4bqjIG7Eg25nIHBow6JuIGJp4buHdCBnaeG7r2EgaGFpIG5ow7NtIGtow6FjaCBow6BuZyAoY8OzIHZheSB2w6Aga2jDtG5nIHZheSkgY+G7p2EgY8OhYyBtw7QgaMOsbmggduG6q24gY8OybiBo4bqhbiBjaOG6vy4gTeG6t2MgZMO5IG3DtCBow6xuaCBQcm9iaXQgxJHhuqF0IEFVQyBjYW8gbmjhuqV0ICgwLjYxMDkpLCBz4buxIGNow6puaCBs4buHY2ggZ2nhu69hIGPDoWMgbcO0IGjDrG5oIGzDoCBraMO0bmcgxJHDoW5nIGvhu4MuDQoNCg0KIyMjICoqMy44LjQgS+G6v3QgbHXhuq1uIHbDoCBs4buxYSBjaOG7jW4gbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0KioNCg0KROG7sWEgdHLDqm4gY8OhYyB0acOqdSBjaMOtIMSRw6FuaCBnacOhIGfhu5NtOiBjaOG7iSBz4buRIEFJQywgbWEgdHLhuq1uIG5o4bqnbSBs4bqrbiwgdsOgIMSRxrDhu51uZyBjb25nIFJPQyBjw7luZyBkaeG7h24gdMOtY2ggQVVDLCBjw7MgdGjhu4MgxJHGsGEgcmEgY8OhYyBuaOG6rW4gxJHhu4tuaCBzYXU6DQoNCi0gKipW4buBIEFJQzoqKiBNw7QgaMOsbmggTG9naXQgY8OzIGdpw6EgdHLhu4sgQUlDIHRo4bqlcCBuaOG6pXQgKDM3OTMuMjE0KSwgY2hvIHRo4bqleSDEkcOieSBsw6AgbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0IHbhu4EgbeG6t3QgY8OibiBi4bqxbmcgZ2nhu69hIMSR4buZIGNow61uaCB4w6FjIHbDoCBt4bupYyDEkeG7mSBwaOG7qWMgdOG6oXAuIMSQaeG7gXUgbsOgeSBnacO6cCBtw7QgaMOsbmggdHLDoW5oIMSRxrDhu6NjIGhp4buHbiB0xrDhu6NuZyBvdmVyZml0dGluZyBzbyB24bubaSBjw6FjIG3DtCBow6xuaCBQcm9iaXQgKDM3OTMuMzc5KSB2w6AgQ2xvZ2xvZyAoMzc5My40NzYpLg0KDQotICoqVuG7gSBtYSB0cuG6rW4gbmjhuqdtIGzhuqtuOioqIEPhuqMgYmEgbcO0IGjDrG5oIMSR4buBdSBjaG8ga+G6v3QgcXXhuqMgcGjDom4gbG/huqFpIHTGsMahbmcgxJHhu5FpIGdp4buRbmcgbmhhdS4gVHV5IG5oacOqbiwgZG8gZOG7ryBsaeG7h3UgY8OzIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgdmF5IHRpw6p1IGTDuW5nIHTGsMahbmcgxJHhu5FpIHRo4bqlcCwgbsOqbiBjw6FjIG3DtCBow6xuaCBjaOG7pyB54bq/dSBk4buxIMSRb8OhbiB04buRdCBuaMOzbSDigJxraMO0bmcgdmF54oCdIGjGoW4gbMOgIG5ow7NtIOKAnHZheeKAnS4NCg0KLSAqKlbhu4EgxJHGsOG7nW5nIGNvbmcgUk9DIHbDoCBBVUM6KiogR2nDoSB0cuG7iyBBVUMg4bufIGPhuqMgYmEgbcO0IGjDrG5oIMSR4buBdSB44bqlcCB44buJIG5oYXUgKGtob+G6o25nIDAuNjEpLCBjaG8gdGjhuqV5IG7Eg25nIGzhu7FjIHBow6JuIGJp4buHdCBnaeG7r2EgaGFpIG5ow7NtIGtow6FjaCBow6BuZyBsw6AgdHJ1bmcgYsOsbmggeeG6v3UuIFRyb25nIMSRw7MsIGPDsyB0aOG7gyBjw7Mgc+G7sSBjaMOqbmggbOG7h2NoIG5o4buPIG5oxrBuZyBraMO0bmcgxJHDoW5nIGvhu4MgduG7gSBoaeG7h3Ugc3XhuqV0IGdp4buvYSBiYSBtw7QgaMOsbmguDQoNClTDs20gbOG6oWksIGThu7FhIHRyw6puIHRpw6p1IGNow60gQUlDIHbDoCBoaeG7h3UgcXXhuqMgcGjDom4gbG/huqFpIHThu5VuZyB0aOG7gywgY8OzIHRo4buDIGvhur90IGx14bqtbiBy4bqxbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBMb2dpdCBsw6AgbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0IHRyb25nIG5naGnDqm4gY+G7qXUgbsOgeS4gTcO0IGjDrG5oIG7DoHkgduG7q2EgY8OzIEFJQyB0aOG6pXAgbmjhuqV0LCB24burYSDEkeG6oXQgxJHGsOG7o2MgaGnhu4d1IHN14bqldCBwaMOibiBsb+G6oWkgdMawxqFuZyDEkcawxqFuZyB24bubaSBoYWkgbcO0IGjDrG5oIGPDsm4gbOG6oWkuDQoNCiMjICoqMy45IEThu7EgYsOhbyB4w6FjIHN14bqldCB2YXkgdGnDqnUgZMO5bmcqKg0KDQpTYXUga2hpIGzhu7FhIGNo4buNbiBtw7QgaMOsbmggTG9naXQgbMOgIHBow7kgaOG7o3AgbmjhuqV0LCBixrDhu5tjIHRp4bq/cCB0aGVvIGzDoCBz4butIGThu6VuZyBtw7QgaMOsbmggbsOgeSDEkeG7gyBk4buxIGLDoW8geMOhYyBzdeG6pXQga2jDoWNoIGjDoG5nIGPDsyBraOG6oyBuxINuZyB2YXkgdGnDqnUgZMO5bmcsIGThu7FhIHRyw6puIGPDoWMgxJHhurdjIMSRaeG7g20gY8OhIG5ow6JuIG5oxrAgbmdo4buBIG5naGnhu4dwLCBo4buNYyB24bqlbiwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIHbDoCBs4buLY2ggc+G7rSBu4bujIHF1w6EgaOG6oW4uDQoNCmBgYHtyfQ0KIyBE4buxIGLDoW8geMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIHRyw6puIGRhdGExDQpkYXRhMSRwcm9iX2xvYW5feWVzIDwtIHByZWRpY3QobW9kZWxfbG9naXQsIG5ld2RhdGEgPSBkYXRhMSwgdHlwZSA9ICJyZXNwb25zZSIpDQoNCiMgUGjDom4gbG/huqFpOiBu4bq/dSB4w6FjIHN14bqldCA+IDAuNSB0aMOsIGThu7EgxJFvw6FuIGzDoCAieWVzIiwgbmfGsOG7o2MgbOG6oWkgIm5vIg0KZGF0YTEkbG9hbl9wcmVkaWN0ZWQgPC0gaWZlbHNlKGRhdGExJHByb2JfbG9hbl95ZXMgPiAwLjUsICJ5ZXMiLCAibm8iKQ0KDQojIFhlbSB0csaw4bubYyBr4bq/dCBxdeG6ow0KaGVhZChkYXRhMVssIGMoInByb2JfbG9hbl95ZXMiLCAibG9hbl9wcmVkaWN0ZWQiKV0pDQpgYGANCg0KDQojIyAqKjMuMTAgS+G6v3QgbHXhuq1uKioNCg0KVHJvbmcga2h1w7RuIGto4buVIGLDoGkgdGnhu4N1IGx14bqtbiwgdMOhYyBnaeG6oyDEkcOjIHRp4bq/biBow6BuaCBwaMOibiB0w61jaCBraOG6oyBuxINuZyB2YXkgdGnDqnUgZMO5bmcgY+G7p2Ega2jDoWNoIGjDoG5nIHRow7RuZyBxdWEgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuLCBiYW8gZ+G7k20gTG9naXQsIFByb2JpdCwgQ2xvZ2xvZyB2w6AgbcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggKEdMTSkuIEThu68gbGnhu4d1IMSR4bqndSB2w6BvIGzDoCBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIHRo4buDIGhp4buHbiDEkeG6t2MgxJFp4buDbSBuaMOibiBraOG6qXUgaOG7jWMgdsOgIHTDrG5oIHRy4bqhbmcgdMOgaSBjaMOtbmggY+G7p2Ega2jDoWNoIGjDoG5nIG5oxrAgbmdo4buBIG5naGnhu4dwLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiB2w6AgbOG7i2NoIHPhu60gdMOtbiBk4bulbmcuDQoNCkvhur90IHF14bqjIHBow6JuIHTDrWNoIGNobyB0aOG6pXkgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIMSR4buBdSBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIHjDoWMgc3XhuqV0IGtow6FjaCBow6BuZyB2YXkgdGnDqnUgZMO5bmcuIEPhu6UgdGjhu4MsIG5o4buvbmcga2jDoWNoIGjDoG5nIGPDsyBo4buNYyB24bqlbiB0aOG6pXAsIMSR4buZYyB0aMOibiBob+G6t2MgY8OzIHRp4buBbiBz4butIG7hu6MgeOG6pXUgY8OzIHjDoWMgc3XhuqV0IHZheSB0aOG6pXAgaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBjw6FjIG5ow7NtIGPDsm4gbOG6oWkuIFRyb25nIGtoaSDEkcOzLCBuZ2jhu4EgbmdoaeG7h3AgY8WpbmcgdGjhu4MgaGnhu4duIHPhu7Ega2jDoWMgYmnhu4d0IHLDtSBy4buHdCB24buBIGjDoG5oIHZpIHZheSB24buRbiwgxJHhurdjIGJp4buHdCBsw6AgbmjDs20gY8O0bmcgbmjDom4sIGxhbyDEkeG7mW5nIHBo4buVIHRow7RuZyB2w6AgdGjhuqV0IG5naGnhu4dwLg0KDQpRdWEgc28gc8OhbmggY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5LCB0w6FjIGdp4bqjIG5o4bqtbiB0aOG6pXkgbcO0IGjDrG5oIExvZ2l0IGPDsyBjaOG7iSBz4buRIEFJQyB0aOG6pXAgbmjhuqV0ICgzNzkzLjIxNCkgdsOgIMSR4buTbmcgdGjhu51pIGNobyBr4bq/dCBxdeG6oyBk4buxIGLDoW8gaOG7o3AgbMO9IHbhu5tpIMSR4buZIGNow61uaCB4w6FjIHBow6JuIGxv4bqhaSBjaOG6pXAgbmjhuq1uIMSRxrDhu6NjIChBVUMgPSAwLjYxMDIpLiBEbyDEkcOzLCBtw7QgaMOsbmggTG9naXQgxJHGsOG7o2MgbOG7sWEgY2jhu41uIGzDoCBtw7QgaMOsbmggcGjDuSBo4bujcCBuaOG6pXQgxJHhu4MgdGnhur9uIGjDoG5oIGThu7EgYsOhbyB4w6FjIHN14bqldCBraMOhY2ggaMOgbmcgdmF5IHRyb25nIHThuq1wIGThu68gbGnhu4d1IG5naGnDqm4gY+G7qXUuDQoNCkN14buRaSBjw7luZywgdMOhYyBnaeG6oyDEkcOjIHPhu60gZOG7pW5nIG3DtCBow6xuaCBMb2dpdCDEkeG7gyBk4buxIGLDoW8geMOhYyBzdeG6pXQgdmF5IHRpw6p1IGTDuW5nIGNobyB04burbmcga2jDoWNoIGjDoG5nIHRyb25nIHThuq1wIGThu68gbGnhu4d1LCB04burIMSRw7MgcGjDom4gbG/huqFpIHRow6BuaCBoYWkgbmjDs206ICJ2YXkiIHbDoCAia2jDtG5nIHZheSIgdGhlbyBuZ8aw4buhbmcgeMOhYyBzdeG6pXQgMC41LiBL4bq/dCBxdeG6oyBuw6B5IGPDsyB0aOG7gyBo4buXIHRy4bujIG5nw6JuIGjDoG5nIHRyb25nIHZp4buHYyBuaOG6rW4gZGnhu4duIMSR4buRaSB0xrDhu6NuZyBraMOhY2ggaMOgbmcgdGnhu4FtIG7Eg25nLCBuw6JuZyBjYW8gaGnhu4d1IHF14bqjIGhv4bqhdCDEkeG7mW5nIHTDrW4gZOG7pW5nIHbDoCBxdeG6o24gdHLhu4sgcuG7p2kgcm8uDQoNCiMjICoqMy4xMSBIw6BtIMO9IGNow61uaCBzw6FjaCoqDQoNClThu6sga+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdSwgdMOhYyBnaeG6oyBuaOG6rW4gdGjhuqV5IHLhurFuZyBjw6FjIMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYyB2w6AgdMOtbiBk4bulbmcgY+G7p2Ega2jDoWNoIGjDoG5nIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24ga2jhuqMgbsSDbmcgdGnhur9wIGPhuq1uIHZheSB0acOqdSBkw7luZy4gRG8gxJHDsywgbeG7mXQgc+G7kSBow6BtIMO9IGNow61uaCBzw6FjaCBjw7MgdGjhu4MgxJHGsOG7o2MgcsO6dCByYSBuaMawIHNhdToNCg0KVGjhu6kgbmjhuqV0LCBjw6FjIHThu5UgY2jhu6ljIHTDrW4gZOG7pW5nIG7Dqm4geMOieSBk4buxbmcgaOG7hyB0aOG7kW5nIHjhur9wIGjhuqFuZyB0w61uIGThu6VuZyBu4buZaSBi4buZIGThu7FhIHRyw6puIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggbmjGsCBuZ2jhu4EgbmdoaeG7h3AsIGjhu41jIHbhuqVuLCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gdsOgIGzhu4tjaCBz4butIHTDrW4gZOG7pW5nLiBWaeG7h2Mgw6FwIGThu6VuZyBjw6FjIG3DtCBow6xuaCDEkeG7i25oIGzGsOG7o25nIG5oxrAgaOG7k2kgcXV5IExvZ2l0IHPhur0gZ2nDunAgbmfDom4gaMOgbmcgxJHDoW5oIGdpw6EgcuG7p2kgcm8gdMOtbiBk4bulbmcgbeG7mXQgY8OhY2gga2jDoWNoIHF1YW4sIHThu6sgxJHDsyBuw6JuZyBjYW8gY2jhuqV0IGzGsOG7o25nIHF1eeG6v3QgxJHhu4tuaCBjaG8gdmF5Lg0KDQpUaOG7qSBoYWksIG5ow7NtIGtow6FjaCBow6BuZyBjw7MgaOG7jWMgduG6pW4gdGjhuqVwIGhv4bq3YyBjw7MgbOG7i2NoIHPhu60gbuG7oyB44bqldSB0aMaw4budbmcgZ+G6t3Aga2jDsyBraMSDbiB0cm9uZyB2aeG7h2MgdGnhur9wIGPhuq1uIHTDrW4gZOG7pW5nLiBEbyDEkcOzLCBuaMOgIGhv4bqhY2ggxJHhu4tuaCBjaMOtbmggc8OhY2ggY+G6p24geGVtIHjDqXQgY8OhYyBiaeG7h24gcGjDoXAgaOG7lyB0cuG7oyB0w6BpIGNow61uaCB0b8OgbiBkaeG7h24gaMahbiwgY2jhurNuZyBo4bqhbiBuaMawIGNoxrDGoW5nIHRyw6xuaCBnacOhbyBk4bulYyB0w6BpIGNow61uaCwgY8OhYyBz4bqjbiBwaOG6qW0gdMOtbiBk4bulbmcgcGjDuSBo4bujcCB24bubaSBt4bupYyDEkeG7mSBy4bunaSBybywgaG/hurdjIGPDoWMgY8ahIGNo4bq/IGLhuqNvIGzDo25oIHTDrW4gZOG7pW5nIMSR4buDIHTEg25nIGto4bqjIG7Eg25nIHRp4bq/cCBj4bqtbiB0w6BpIGNow61uaCBjaG8gbmjDs20geeG6v3UgdGjhur8uDQoNClRo4bupIGJhLCBz4buxIGtow6FjIGJp4buHdCB24buBIGjDoG5oIHZpIHZheSB24buRbiBnaeG7r2EgY8OhYyBuaMOzbSBuZ2jhu4EgbmdoaeG7h3AgY2hvIHRo4bqleSBuaHUgY+G6p3UgdmF5IHbhu5FuIGzDoCBraMO0bmcgxJHhu5NuZyBuaOG6pXQgdHJvbmcgeMOjIGjhu5lpLiBEbyB24bqteSwgY8OhYyB04buVIGNo4bupYyB0w6BpIGNow61uaCBuw6puIHRoaeG6v3Qga+G6vyBjw6FjIGfDs2kgdmF5IHBow7kgaOG7o3AgduG7m2kgdOG7q25nIHBow6JuIGtow7pjIGtow6FjaCBow6BuZywgaMaw4bubbmcgdOG7m2kgY2hp4bq/biBsxrDhu6NjIHTDrW4gZOG7pW5nIGPDoSBuaMOibiBow7NhLCB24burYSBraeG7g20gc2/DoXQgcuG7p2kgcm8gduG7q2EgbeG7nyBy4buZbmcgcXV5IG3DtCBjaG8gdmF5Lg0KDQpDdeG7kWkgY8O5bmcsIMSR4buDIHBow6F0IGh1eSBoaeG7h3UgcXXhuqMgY+G7p2EgY8OhYyBtw7QgaMOsbmggZOG7sSBiw6FvIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZywgY+G6p24geMOieSBk4buxbmcgaOG7hyB0aOG7kW5nIGPGoSBz4bufIGThu68gbGnhu4d1IGtow6FjaCBow6BuZyB0aOG7kW5nIG5o4bqldCwgY8OzIGto4bqjIG7Eg25nIGPhuq1wIG5o4bqtdCB2w6AgdMOtY2ggaOG7o3AgdGjDtG5nIHRpbiDEkeG7i25oIGzGsOG7o25nIHbDoCDEkeG7i25oIHTDrW5oLiDEkMOieSBsw6AgbuG7gW4gdOG6o25nIMSR4buDIOG7qW5nIGThu6VuZyBjw6FjIG3DtCBow6xuaCBk4buvIGxp4buHdSBs4bubbiwgdHLDrSB0deG7hyBuaMOibiB04bqhbyB2w6AgaOG7jWMgbcOheSB0cm9uZyBxdeG6o24gdHLhu4sgcuG7p2kgcm8gdMOtbiBk4bulbmcgdHJvbmcgZMOgaSBo4bqhbi4NCg0KIyMgKiozLjEyIEjhuqFuIGNo4bq/IHbDoCBwaMawxqFuZyBoxrDhu5tuZyB0aeG6v3AgdGhlbyBj4bunYSDEkeG7gSB0w6BpKioNCg0KIyMjICoqMy4xMi4xIEjhuqFuIGNo4bq/IGPhu6dhIMSR4buBIHTDoGkqKg0KDQpN4bq3YyBkw7kgbmdoacOqbiBj4bupdSDEkcOjIGN1bmcgY+G6pXAgbmjhu69uZyBr4bq/dCBxdeG6oyBo4buvdSDDrWNoIHbhu4EgY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyB2YXkgdGnDqnUgZMO5bmcgY+G7p2Ega2jDoWNoIGjDoG5nLCB0dXkgbmhpw6puIMSR4buBIHTDoGkgduG6q24gdOG7k24gdOG6oWkgbeG7mXQgc+G7kSBo4bqhbiBjaOG6vyBuaOG6pXQgxJHhu4tuaC4NCg0KVGjhu6kgbmjhuqV0LCBk4buvIGxp4buHdSDEkcaw4bujYyBz4butIGThu6VuZyB0cm9uZyBuZ2hpw6puIGPhu6l1IGNo4bunIHnhur91IGzDoCBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oIHbDoCBtYW5nIHTDrW5oIGPhuq90IG5nYW5nLCBkbyDEkcOzIGtow7RuZyBwaOG6o24gw6FuaCDEkcaw4bujYyBz4buxIHRoYXkgxJHhu5VpIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZyB0aGVvIHRo4budaSBnaWFuLiDEkGnhu4F1IG7DoHkgY8OzIHRo4buDIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyBraMOhaSBxdcOhdCBow7NhIGvhur90IHF14bqjIHRyb25nIGLhu5FpIGPhuqNuaCB0aOG7sWMgdGnhu4VuLg0KDQpUaOG7qSBoYWksIG3DtCBow6xuaCBjaOG7iSB4ZW0geMOpdCBt4buZdCBz4buRIGJp4bq/biDEkeG6t2MgdHLGsG5nIG5oxrAgbmdo4buBIG5naGnhu4dwLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiB2w6AgbOG7i2NoIHPhu60gdMOtbiBk4bulbmcsIG3DoCBjaMawYSB0w61uaCDEkeG6v24gY8OhYyB54bq/dSB04buRIHTDoGkgY2jDrW5oIMSR4buLbmggbMaw4bujbmcgcXVhbiB0cuG7jW5nIG5oxrAgdGh1IG5o4bqtcCwgY2hpIHRpw6p1LCB0w6BpIHPhuqNuIGhheSBt4bupYyDEkeG7mSDhu5VuIMSR4buLbmggdGh1IG5o4bqtcCDigJMgduG7kW4gY8OzIOG6o25oIGjGsOG7n25nIGzhu5tuIMSR4bq/biBxdXnhur90IMSR4buLbmggY2hvIHZheSBj4bunYSBuZ8OibiBow6BuZy4NCg0KVGjhu6kgYmEsIHZp4buHYyBwaMOibiBuaMOzbSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdsOgIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmgga2jDoWMgY8OybiBtYW5nIHTDrW5oIGNo4bunIHF1YW4sIGPDsyB0aOG7gyBk4bqrbiDEkeG6v24gbeG6pXQgbcOhdCB0aMO0bmcgdGluIGhv4bq3YyBzYWkgbOG7h2NoIHRyb25nIGRp4buFbiBnaeG6o2kga+G6v3QgcXXhuqMuDQoNCkN14buRaSBjw7luZywgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIChob+G6t2MgTG9naXQvUHJvYml0KSBnaeG6oyDEkeG7i25oIG3hu5FpIHF1YW4gaOG7hyB0dXnhur9uIHTDrW5oIChob+G6t2MgcGjDom4gcGjhu5FpIGNodeG6qW4pIGdp4buvYSBjw6FjIGJp4bq/biwgdHJvbmcga2hpIGjDoG5oIHZpIHZheSB0acOqdSBkw7luZyB0aOG7sWMgdOG6vyBjw7MgdGjhu4MgcGjhu6ljIHThuqFwIGjGoW4sIGLhu4sg4bqjbmggaMaw4bufbmcgYuG7n2kgbmhp4buBdSB54bq/dSB04buRIHBoaSB0dXnhur9uIGhv4bq3YyB0xrDGoW5nIHTDoWMgZ2nhu69hIGPDoWMgYmnhur9uIG3DoCBuZ2hpw6puIGPhu6l1IGNoxrBhIHRo4buDIGhp4buHbiDEkcaw4bujYyDEkeG6p3kgxJHhu6cuDQoNCg0KIyMjICoqMy4xMi4yIFBoxrDGoW5nIGjGsOG7m25nIHRp4bq/cCB0aGVvIGPhu6dhIMSR4buBIHTDoGkqKg0KDQpE4buxYSB0csOqbiBjw6FjIGjhuqFuIGNo4bq/IMSRw6MgbsOqdSwgxJHhu4EgdMOgaSBjw7MgdGjhu4MgxJHGsOG7o2MgbeG7nyBy4buZbmcgdsOgIHBow6F0IHRyaeG7g24gdGhlbyBt4buZdCBz4buRIGjGsOG7m25nIHNhdSBuaOG6sW0gbsOibmcgY2FvIGNo4bqldCBsxrDhu6NuZyB2w6AgdMOtbmgg4bupbmcgZOG7pW5nIHRyb25nIHRo4buxYyB0aeG7hW46DQoNClRo4bupIG5o4bqldCwgbeG7nyBy4buZbmcgcXV5IG3DtCBk4buvIGxp4buHdSBj4bqjIHbhu4Egc+G7kSBsxrDhu6NuZyBxdWFuIHPDoXQgdsOgIHRo4budaSBnaWFuIHRodSB0aOG6rXAuIFZp4buHYyBz4butIGThu6VuZyBk4buvIGxp4buHdSB0aGVvIGNodeG7l2kgdGjhu51pIGdpYW4gaG/hurdjIGThu68gbGnhu4d1IGLhuqNuZyBz4bq9IGdpw7pwIMSRw6FuaCBnacOhIHThu5F0IGjGoW4gc+G7sSB0aGF5IMSR4buVaSB0cm9uZyBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcgdGhlbyB0aOG7nWkgZ2lhbiwgdOG7qyDEkcOzIG7Dom5nIGNhbyBraOG6oyBuxINuZyBk4buxIGLDoW8uDQoNClRo4bupIGhhaSwgYuG7lSBzdW5nIHRow6ptIGPDoWMgYmnhur9uIMSR4buLbmggbMaw4bujbmcgY8OzIHTDrW5oIGdp4bqjaSB0aMOtY2ggY2FvLCDEkeG6t2MgYmnhu4d0IGzDoCBjw6FjIGJp4bq/biB0w6BpIGNow61uaCBuaMawIHRodSBuaOG6rXAgaMOgbmcgdGjDoW5nLCB04bu3IGzhu4cgbuG7oyB0csOqbiB0aHUgbmjhuq1wLCBnacOhIHRy4buLIHTDoGkgc+G6o24gdGjhur8gY2jhuqVwLCDEkWnhu4NtIHTDrW4gZOG7pW5nLOKApiBuaOG6sW0gcGjhuqNuIMOhbmggxJHhuqd5IMSR4bunIGjGoW4ga2jhuqMgbsSDbmcgdMOgaSBjaMOtbmggdsOgIHLhu6dpIHJvIGPhu6dhIG5nxrDhu51pIHZheS4NCg0KVGjhu6kgYmEsIG5naGnDqm4gY+G7qXUgY8OzIHRo4buDIHjDonkgZOG7sW5nIGPDoWMgbcO0IGjDrG5oIHBow6JuIHTDrWNoIG7Dom5nIGNhbyBoxqFuLCBuaMawIG3DtCBow6xuaCBwaGkgdHV54bq/biwgbcO0IGjDrG5oIHTGsMahbmcgdMOhYyBob+G6t2Mg4bupbmcgZOG7pW5nIGPDoWMgdGh14bqtdCB0b8OhbiBo4buNYyBtw6F5IChtYWNoaW5lIGxlYXJuaW5nKSDEkeG7gyBwaMOhdCBoaeG7h24gY8OhYyBt4buRaSBxdWFuIGjhu4cgcGjhu6ljIHThuqFwIHbDoCBj4bqjaSB0aGnhu4duIMSR4buZIGNow61uaCB4w6FjIHRyb25nIHBow6JuIGxv4bqhaSBuaMOzbSBraMOhY2ggaMOgbmcgY8OzIGto4bqjIG7Eg25nIHZheS4NCg0KVGjhu6kgdMawLCDEkeG7gSB0w6BpIG7Dqm4gdGjhu7FjIGhp4buHbiBraeG7g20gxJHhu4tuaCDEkeG7mSBwaMO5IGjhu6NwIG3DtCBow6xuaCBjaOG6t3QgY2jhur0gaMahbiwgbmjGsCBraeG7g20gxJHhu4tuaCDEkeG7mSBs4buHY2ggY2h14bqpbiwgaGnhu4duIHTGsOG7o25nIMSRYSBj4buZbmcgdHV54bq/biwgaGF5IGtp4buDbSDEkeG7i25oIMSR4buZIGNow61uaCB4w6FjIHBow6JuIGxv4bqhaSDEkeG7gyDEkeG6o20gYuG6o28gxJHhu5kgdGluIGPhuq15IGPhu6dhIGvhur90IHF14bqjIHRo4buRbmcga8OqLg0KDQpDdeG7kWkgY8O5bmcsIGPDsyB0aOG7gyB0aeG6v24gaMOgbmggbmdoacOqbiBj4bupdSDEkeG7i25oIHTDrW5oIGLhu5Ugc3VuZyB0aMO0bmcgcXVhIHBo4buPbmcgduG6pW4gY2h1ecOqbiBnaWEgbmfDom4gaMOgbmcgaG/hurdjIGto4bqjbyBzw6F0IG5ow7NtIGtow6FjaCBow6BuZyDEkeG7gyBraGFpIHRow6FjIHPDonUgaMahbiB24buBIGjDoG5oIHZpLCDEkeG7mW5nIGPGoSB2w6AgcsOgbyBj4bqjbiB0cm9uZyB2aeG7h2MgdGnhur9wIGPhuq1uIHTDrW4gZOG7pW5nIHRpw6p1IGTDuW5nLg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=