Phần tóm tắt sách 2019_Generalized Linear Models With Examples



Chương 1: Mô hình thống kê

Mô hình thống kê là công cụ kết hợp giữa lý thuyết xác suất và dữ liệu quan sát. Chương này cung cấp nền tảng cơ bản về cấu trúc, chức năng và giới hạn của mô hình thống kê. Đây là cơ sở cho các mô hình tuyến tính tổng quát (GLMs) được phát triển trong các chương tiếp theo.

1.1 Khái niệm mô hình thống kê

Mô hình thống kê là một công cụ toán học được sử dụng để mô tả, phân tích và dự đoán các hiện tượng có yếu tố ngẫu nhiên. Trong các lĩnh vực như khoa học, xã hội và kỹ thuật, mô hình thống kê đóng vai trò là cầu nối giữa dữ liệu thực nghiệm và lý thuyết phân tích.

Theo Dunn & Smyth (2019), mô hình thống kê bao gồm hai thành phần chính:

  • Thành phần hệ thống (Systematic Component): Mô tả mối quan hệ có cấu trúc giữa các biến giải thích (covariates hoặc predictors) và trung bình của biến phản hồi.

  • Thành phần ngẫu nhiên (Random Component): Mô tả sự dao động ngẫu nhiên xung quanh giá trị trung bình, thường được giả định theo một phân phối xác suất cụ thể như phân phối chuẩn, Poisson hoặc nhị thức.

Mục tiêu của mô hình thống kê là:

  • Hiểu rõ cấu trúc dữ liệu.

  • Dự đoán kết quả trong tương lai.

  • Tổng quát hóa từ mẫu dữ liệu ra toàn bộ quần thể.

1.2. Mô hình hóa mối quan hệ giữa các biến

Dữ liệu thống kê thường bao gồm:

  • Một biến phản hồi y (biến phụ thuộc).
  • Một hoặc nhiều biến giải thích \(x_1, x_2, \ldots, x_p\) (biến độc lập).

Ví dụ: Mô hình hóa (FEV) theo tuổi và chiều cao:

\[ \mu_i = \mathbb{E}[y_i] = \beta_0 + \beta_1 \text{Age}_i + \beta_2 \text{Ht}_i \]

Trong đó:

  • \(\mu_i\): kỳ vọng của biến phản hồi tại quan sát thứ i
  • \(\beta_j\): hệ số hồi quy ứng với biến \(x_j\)

1.3. Biến định tính và định lượng

  • Biến định lượng (Quantitative): Tuổi, chiều cao, cân nặng…

  • Biến định tính (Qualitative/Categorical): Giới tính, tình trạng hút thuốc…

Biến định tính cần được mã hóa thành biến giả (dummy variables) để sử dụng trong mô hình.

1.4. Các dạng mô hình thống kê

Mô hình tuyế tính đơn

\[ \mu_i = \beta_0 + \beta_1 \text{x}_i \] Mô hình tuyến tính đa biến

\[ \mu_i = \beta_0 + \beta_1 x_{1i} + \beta_2 x_{2i} + \cdots + \beta_p x_{pi} \] Mô hình tuyến tính tổng quát (GLMs): Mở rộng mô hình tuyến tính khi biến phản hồi không theo phân phối chuẩn, bao gồm:

  • Nhị thức: dữ liệu nhị phân

  • Poisson: dữ liệu đếm

  • Gamma: dữ liệu dương liên tục

1.5. Vai trò của mô hình thống kê

Mô hình thống kê có vai trò:

  • Giải thích mối quan hệ giữa các biến.

  • Dự đoán biến phản hồi trong tương lai.

  • Kiểm định giả thuyết thống kê.

  • Tổng quát hóa kết quả từ mẫu lên toàn bộ quần thể

1.6. Đặc điểm của mô hình thống kê

Chính xác (Accuracy): Dự đoán gần đúng giá trị thực.

Đơn giản (Parsimony): Tránh sử dụng quá nhiều biến, giảm nguy cơ overfitting.

Diễn giải được (Interpretability): Hệ số có ý nghĩa thực tế và dễ hiểu.

1.7. Phân biệt mô hình vật lý và mô hình thống kê

Mô hình vật lý Mô hình thống kê
Dựa trên các định luật tự nhiên Dựa trên dữ liệu quan sát
Chính xác trong điều kiện lý tưởng Có sai số ngẫu nhiên
Có thể kiểm nghiệm lặp lại Dựa trên xác suất và kiểm định thống kê

1.8. Dữ liệu thí nghiệm và quan sát

Thí nghiệm (Experiment): Nhà nghiên cứu can thiệp và kiểm soát biến → có thể rút ra kết luận nhân quả.

Quan sát (Observational study): Thu thập dữ liệu tự nhiên, không kiểm soát → chỉ đánh giá tương quan.

1.9. Hạn chế và cảnh báo khi sử dụng mô hình

Không nên ngoại suy (extrapolate) ngoài phạm vi dữ liệu.

Kết luận chỉ đúng trong điều kiện dữ liệu khảo sát.

Cần kiểm tra kỹ các giả định trước khi tin tưởng kết quả mô hình.


Chương 2: Mô hình hồi quy tuyến tính

Chương 2 cung cấp cái nhìn toàn diện về mô hình hồi quy tuyến tính từ khái niệm, công thức, cách ước lượng, kiểm định đến ứng dụng thực tiễn với R. Đây là nền tảng quan trọng để hiểu các mô hình phức tạp hơn trong các chương tiếp theo.

2.1. Giới thiệu chung

Hồi quy tuyến tính là mô hình hồi quy phổ biến nhất trong thống kê và là một trường hợp đặc biệt của mô hình hồi quy tuyến tính tổng quát (GLM). Chương này đặt nền tảng về ký hiệu, giả định và phương pháp tính, từ mô hình đơn giản đến mô hình phức tạp hơn, bao gồm cả cách thực hiện trong phần mềm R.

2.2. Định nghĩa mô hình hồi quy tuyến tính

Mô hình có hai thành phần:

  • Hệ thống (Systematic):

\[ \mu_i = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} \]

với \(E[y_i] = \mu_i\) là kỳ vọng của biến phản hồi.

  • Ngẫu nhiên (Random):

\[ \text{Var}(y_i) = \frac{\sigma^2}{w_i}, \quad \text{với } w_i \text{ là trọng số đã biết.} \]

Các biến \(\beta_j\) là hệ số hồi quy chưa biết, cần được ước lượng.

Các dạng đặc biệt:
  • Hồi quy tuyến tính đơn giản: \(p = 1\)

  • Hồi quy tuyến tính thường: \(w_i = 1\) với mọi \(i\)

  • Hồi quy tuyến tính có trọng số: \(w_i \ne 1\)

  • Hồi quy tuyến tính nhiều biến: \(p > 1\)

  • Hồi quy tuyến tính chuẩn: giả định thêm \(y_i \sim \mathcal{N}(\mu_i, \sigma^2 / w_i)\)

2.3. Hồi quy tuyến tính đơn giản

Phương trình mô hình:

\[ \mu_i = \beta_0 + \beta_1 x_i, \qquad \text{Var}(y_i) = \frac{\sigma^2}{w_i} \]

Ước lượng hệ số bằng phương pháp bình phương tối thiểu (Least Squares)

Tối thiểu hóa:

\[ S = \sum w_i (y_i - \mu_i)^2 \]

Giải hệ phương trình đạo hàm riêng của \(S\) để tìm các \(\hat{\beta}_j\).

Ước lượng phương sai:

\[ \hat{\sigma}^2 = \frac{RSS}{n - p'} \]

RSS: tổng bình phương phần dư

Sai số chuẩn của \(\hat{\beta}_j\):

\[ se(\hat{\beta}_j) = \sqrt{\frac{\hat{\sigma}^2}{I_j^*}} \]

2.4. Hồi quy tuyến tính nhiều biến

Khi có nhiều biến giải thích, ta mở rộng ước lượng sang: \[ \mu_i = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} \]

Hệ số beta vẫn được ước lượng bằng tối thiểu hóa hàm mất mát S như trên, nhưng dùng đại số tuyến tính và ma trận.

2.5. Biểu diễn bằng ma trận

Mô hình hồi quy tuyến tính dưới dạng:

\[ y = X \beta + \varepsilon, \qquad \varepsilon \sim \mathcal{N}(0, \sigma^2 W^{-1}) \]

Trong đó:

  • \(X\): ma trận thiết kế (design matrix),
  • \(\beta\): vector hệ số,
  • \(W\): ma trận trọng số.

Hệ số ước lượng:

\[ \hat{\beta} = (X^T W X)^{-1} X^T W y \]

2.6 Ước lượng mô hình hồi quy tuyến tính bằng R

Thay vì phải tính toán thủ công để tìm các hệ số của mô hình hồi quy như trong các phần 2.3 và 2.5, ta có thể dùng R để làm việc này một cách nhanh chóng và tiện lợi bằng hàm lm(). Đây là hàm cơ bản để xây dựng mô hình hồi quy tuyến tính trong R.

Khi sử dụng hàm lm(), bạn chỉ cần chỉ ra đâu là biến phụ thuộc (biến cần dự đoán) và đâu là các biến độc lập (các yếu tố ảnh hưởng đến biến phụ thuộc).

Trong công thức của hàm lm(), biến phụ thuộc (chẳng hạn như Weight, tức cân nặng) được đặt bên trái dấu ~. Các biến độc lập được đặt bên phải dấu ~ và nối nhau bằng dấu + nếu có nhiều biến.

Tham số data = gestation cho R biết rằng tất cả các biến đang được dùng đều nằm trong bảng dữ liệu có tên là gestation. Nếu có trọng số (chẳng hạn số ca sinh ứng với từng quan sát), bạn chỉ định bằng đối số weights. Nếu mọi quan sát đều có trọng số như nhau, thì có thể bỏ qua phần này.

2.8. Suy luận thống kê

Giả định:

\[ y_i \sim \mathcal{N}(\mu_i, \sigma^2 / w_i) \]

  • Kiểm định giả thuyết:

Giả thuyết không:

\[ H_0 : \beta_j = \beta_j^0 \]

Thống kê kiểm định t:

\[ t = \frac{\hat{\beta}_j - \beta_j^0}{se(\hat{\beta}_j)} \]

-Khoảng tin cậy 95% cho \(\beta_j\):

\[ \hat{\beta}_j \pm t^*_{n - p'} \cdot se(\hat{\beta}_j) \]

Trong đó: - \(t^*_{n - p'}\): phân vị t phân phối Student với \(n - p'\) bậc tự do, - \(se(\hat{\beta}_j)\): sai số chuẩn của \(\hat{\beta}_j\).

2.9 Phân tích phương sai (ANOVA)

Giá trị tổng phương sai \(TSS\) được tính theo công thức:

\[ TSS = \sum_{i=1}^{n} (y_i - \bar{y})^2 \]

Tổng phương sai được phân tích thành hai phần:

\[ TSS = SSR + RSS \]

Trong đó:

  • \(SSR\) là tổng bình phương phần giải thích (Explained Sum of Squares), được tính bằng:

\[ SSR = \sum_{i=1}^{n} (\hat{y}_i - \bar{y})^2 \]

  • \(RSS\) là tổng bình phương phần dư (Residual Sum of Squares), được tính bằng:

\[ RSS = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \]

Hệ số xác định \(R^2\) được định nghĩa là:

\[ R^2 = \frac{SSR}{TSS} = 1 - \frac{RSS}{TSS} \]

2.10 So sánh mô hình lồng (Nested Models)

Hai mô hình được gọi là lồng nhau (nested models) khi mô hình đơn giản hơn (reduced model) là một trường hợp đặc biệt của mô hình phức tạp hơn (full model), tức là nó được tạo ra bằng cách loại bỏ một hay nhiều biến khỏi mô hình đầy đủ.

Kiểm định F:

\[ F = \frac{(RSS_{\text{reduced}} - RSS_{\text{full}}) / (p_{\text{full}} - p_{\text{reduced}})}{s^2_{\text{full}}} \]

2.11 Lựa Chọn Giữa Các Mô Hình Không Lồng Ghép: AIC và BIC

Các kiểm định giả thuyết được trình bày trong Mục 2.10 chỉ áp dụng khi các mô hình so sánh là mô hình lồng nhau (nested). Tuy nhiên, đôi khi các nhà nghiên cứu muốn so sánh các mô hình không lồng nhau, vì vậy các phương pháp kiểm định đó không còn phù hợp. Phần này giới thiệu các đại lượng để so sánh các mô hình không nhất thiết phải lồng nhau.

Trước tiên, hãy nhớ rằng có hai tiêu chí để chọn mô hình thống kê là:

  • Độ chính xác (accuracy)

  • Tính đơn giản hợp lý (parsimony).

Tổng bình phương phần dư (RSS) chỉ đo lường độ chính xác: việc thêm một biến giải thích mới vào mô hình không bao giờ làm tăng RSS.

Khi thêm nhiều biến giải thích vào mô hình, giá trị RSS thường sẽ giảm, nhưng đồng thời mô hình cũng trở nên phức tạp hơn.

Tiêu chí thông tin Akaike (Akaike’s Information Criterion - AIC) giúp cân bằng hai tiêu chí:

Độ chính xác (đo bằng RSS)

Và mức độ phức tạp của mô hình (đo bằng số lượng tham số ước lượng).

Đối với mô hình hồi quy tuyến tính chuẩn, khi phương sai σ² chưa biết, công thức tính AIC là:

\[ AIC = n.log. \frac{RSS}{n} + 2p \] Trong đó - n là số quan sát, p là tham số mô hình

  • Giá trị AIC càng nhỏ thì mô hình càng tốt

  • 2p dùng để đánh giá các mô hình có nhiều tham số (phức tạp hơn), với hệ số k= 2.

Lưu ý: Giá trị AIC không có ý nghĩa riêng lẻ, nó chỉ dùng để so sánh giữa các mô hình với nhau.

Ngoài AIC còn có các tiêu chí tương tự khác, với các hình thức phạt khác nhau. Một ví dụ là Tiêu chí Thông tin Bayes (Bayesian Information Criterion - BIC), hay còn gọi là Tiêu chí Schwarz:

BIC ưu tiên chọn các mô hình đơn giản hơn (ít tham số hơn) so với AIC, vì mức phạt trong BIC là ***p.logn, và thường lớn hơn 2p (trừ trường hợp quan sát n rất nhỏ)

\[ SIC = n.log. \frac{RSS}{n} + p.logn \]

AIC (Akaike Information Criterion) ưu tiên khả năng dự đoán. Nó sẵn sàng chấp nhận các biến giải thích mới dù bằng chứng thống kê chưa rõ ràng, miễn là các biến đó có tiềm năng cải thiện độ chính xác của dự đoán.

BIC (Bayesian Information Criterion) lại yêu cầu bằng chứng thuyết phục hơn để thêm biến vào mô hình. Do đó, nó thường chọn mô hình đơn giản hơn, dễ diễn giải và tránh dư thừa.


CHƯƠNG 3: CHẨN ĐOÁN MÔ HÌNH HỒI QUY TUYẾN TÍNH

Mục tiêu tập trung vào việc chẩn đoán mô hình hồi quy tuyến tính nhằm đảm bảo mô hình phản ánh đúng bản chất dữ liệu và có độ tin cậy cao. Nội dung giúp người đọc kiểm định các giả định quan trọng như quan hệ tuyến tính, phương sai không đổi, tính độc lập và phân phối chuẩn của sai số. Thông qua việc phân tích phần dư và các chỉ số như leverage, Cook’s distance, DFBETAS, có thể phát hiện điểm ngoại lai và điểm ảnh hưởng lớn. Đồng thời, nội dung cũng làm rõ tác hại của đa cộng tuyến và hướng dẫn cách xử lý bằng chỉ số VIF. Cuối cùng, phần này đề xuất các chiến lược điều chỉnh như biến đổi dữ liệu hoặc áp dụng mô hình thay thế để cải thiện độ phù hợp và khả năng diễn giải của mô hình.

3.1 Giới thiệu và tổng quan

Sau khi xây dựng một mô hình hồi quy tuyến tính, việc ước lượng các hệ số và kiểm định ý nghĩa thống kê mới chỉ là bước khởi đầu. Để đảm bảo mô hình thực sự phản ánh đúng bản chất dữ liệu và có khả năng ứng dụng hiệu quả trong thực tế, một bước tiếp theo không thể thiếu chính là chẩn đoán mô hình.

Mục tiêu của chuẩn đoán mô hình

Chẩn đoán mô hình không chỉ là công cụ hỗ trợ kỹ thuật, mà còn là quá trình đánh giá tính hợp lệ, độ tin cậy và khả năng khái quát hóa của mô hình. Cụ thể, nó giúp:

Kiểm tra tính đúng đắn của các giả định nền tảng trong hồi quy tuyến tính:

  • Mối quan hệ tuyến tính giữa biến phụ thuộc và biến giải thích

  • Phương sai đồng nhất (homoscedasticity)

  • Phân phối chuẩn của sai số ngẫu nhiên

  • Độc lập giữa các phần dư (không có tự tương quan)

Phát hiện các quan sát đặc biệt, bao gồm:

  • Điểm ngoại lai (outliers) – có thể làm sai lệch ước lượng

  • Điểm ảnh hưởng lớn (influential observations) – có thể thống trị mô hình nếu không được xử lý đúng cách

  • Đánh giá tính ổn định và đáng tin cậy của các hệ số hồi quy

Đề xuất hướng điều chỉnh mô hình nhằm nâng cao hiệu suất và tính diễn giải, như:

  • Biến đổi dữ liệu (logarit hóa, chuẩn hóa, bình phương, căn bậc hai,…)

  • Thêm hoặc loại bỏ biến giải thích

  • Cân nhắc sử dụng mô hình phi tuyến hoặc mô hình hồi quy tổng quát (GLM) nếu phù hợp hơn với dữ liệu

Nếu bỏ qua bước này, người phân tích dễ rơi vào bẫy của việc “phù hợp quá mức” (overfitting), hiểu sai mối quan hệ giữa các biến, hoặc dự đoán sai lệch trong thực tế. Do đó, chẩn đoán mô hình không phải là tùy chọn – mà là một phần bắt buộc trong phân tích hồi quy nghiêm túc.

Trong chương này, chúng ta sẽ học cách:

  • Phân tích và kiểm tra các giả định cơ bản của mô hình hồi quy

  • Sử dụng phần dư để đánh giá độ phù hợp và phát hiện vi phạm giả định

  • Nhận diện và xử lý các điểm ảnh hưởng lớn

  • Phân tích hiện tượng đa cộng tuyến và các giải pháp khắc phục

3.2 Giả định trong mô hình hồi quy tuyến tính

Một mô hình hồi quy tuyến tính tiêu chuẩn phải thỏa mãn 4 giả định cơ bản sau:

3.2.1 Giả định 1: Quan hệ tuyến tính

Mô hình giả định rằng trung bình của biến phản hồi \(y\) là hàm tuyến tính của các biến giải thích \(x_1, x_2, \ldots, x_p\).

Nếu mối quan hệ thực sự giữa các biến là phi tuyến mà mô hình vẫn áp đặt tuyến tính, các ước lượng có thể bị thiên lệch và dẫn đến dự đoán sai lệch.

\(\Rightarrow\) Cách kiểm tra: Vẽ biểu đồ phần dư so với giá trị dự đoán. Nếu thấy hình dạng cong (dạng parabol, hình chữ S…), có thể mô hình đang sai dạng hàm.

3.2.2 Giả định 2: Phương sai không đổi

Phương sai của sai số \(\varepsilon_i\) không thay đổi theo giá trị của biến giải thích:\(x\):

\[ \text{Var}(y_i) = \sigma^2 \]

Nếu phương sai thay đổi theo mức độ của \(x\), iện tượng này gọi là phương sai thay đổi (heteroscedasticity) – khiến ước lượng kém hiệu quả và các kiểm định thống kê không còn đáng tin cậy.

\(\Rightarrow\) Cách kiểm tra: vẽ đồ thị phần dư. Nếu phần dư có dạng hình nón (rộng dần hoặc hẹp lại) thì có thể bị heteroscedasticity.

3.2.3 Giả định 3: Độc lập

Các quan sát \((x_i, y_i)\) phải độc lập nhau.

Nếu dữ liệu có tính chuỗi thời gian, dữ liệu lồng ghép (nested data) hoặc phân nhóm (clustered), thì mô hình tuyến tính cơ bản không còn phù hợp.

\(\Rightarrow\) Cách kiểm tra: Với dữ liệu theo thời gian, kiểm tra phần dư có xuất hiện tính tự tương quan (autocorrelation) hay không (dùng biểu đồ hoặc kiểm định Durbin-Watson).

3.2.4 Giả định 4: Phân phối chuẩn của sai số

Mặc dù không bắt buộc để ước lượng OLS, giả định này rất quan trọng để kiểm định giả thuyết và tính khoảng tin cậy:

\[ \varepsilon_i \sim \mathcal{N}(0, \sigma^2) \]

\(\Rightarrow\) Cách kiểm tra: dùng biểu đồ Q-Q plot (quantile-quantile) để so sánh phần dư với phân phối chuẩn.

3.3 Các loại phần dư (Residuals)

Phần dư là công cụ trung tâm để kiểm định giả định và đánh giá độ phù hợp của mô hình.

3.3.1 Phần dư thô (Raw residual):

\[ e_i = y_i - \hat{y}_i \] Đơn giản là hiệu giữa giá trị thực tế và giá trị dự đoán.

3.3.2 Phần dư chuẩn hóa (Standardized residual):

\[ r_i = \frac{e_i}{\hat{\sigma} \sqrt{1 - h_{ii}}} \]

Giúp so sánh phần dư giữa các điểm có leverage khác nhau.

\(h_{ii}\): leverage – mức ảnh hưởng của điểm \(i\) lên dự đoán \(\hat{y}_i\).

3.3.3 Studentized residual:

\[ t_i = \frac{e_i}{\hat{\sigma}_{(i)} \sqrt{1 - h_{ii}}} \]

Dùng phương sai được ước lượng khi loại bỏ chính điểm đó, giúp phát hiện ngoại lai một cách đáng tin cậy hơn (phân phối gần với t).

3.4 Biểu đồ phần dư (Residual Plots)

Một số biểu đồ quan trọng:

  • Residual vs Fitted Plot: phát hiện sai dạng mô hình và phương sai thay đổi

  • Normal Q-Q Plot: kiểm tra phân phối chuẩn của phần dư.

  • Scale-Location Plot: kiểm tra homoscedasticity với phần dư chuẩn hóa.

  • Residuals vs Leverage Plot: phát hiện điểm có ảnh hưởng lớn.

3.5 Ngoại lai (Outliers)

Định nghĩa: Là những quan sát mà phần dư (đặc biệt là studentized residual) lớn bất thường — nghĩa là giá trị thực tế quá khác so với giá trị dự đoán, dù biến giải thích có thể không đặc biệt

Dùng studentized residual để kiểm tra.

Quy tắc ngưỡng:

  • \(|t_i| > 2\): nghi ngờ.

  • \(|t_i| > 3\): có thể là ngoại lai đáng kể.

\(\Rightarrow\) Ngoại lai không nhất thiết có ảnh hưởng lớn, nhưng cần kiểm tra kỹ.

3.6 Điểm ảnh hưởng (Influential Points)

Là những điểm mà nếu bị loại bỏ, các hệ số hồi quy sẽ thay đổi đáng kể. Các chỉ số phổ biến để đo ảnh hưởng như:

3.6.1 Hệ số đòn bẩy (Leverage):

\[ h_{ii} = x_i^T (X^T X)^{-1} x_i \]

  • Đo khoảng cách quan sát của \(x_i\) đến tâm của các điểm \(x\).

  • Nếu \(h_{ii} > \frac{2p}{n}\): điểm có leverage cao.

3.6.2 Khoảng cách Cook (Cook’s Distance):

\[ D_i = \frac{p \hat{\sigma}^2 e_i^2}{(1 - h_{ii})^2 h_{ii}} \]

Tổng hợp giữa phần dư và leverage để đo ảnh hưởng tổng thể.

  • Nếu \(D_i > 0.5\): có thể có ảnh hưởng.

  • Nếu \(D_i > 1\): ảnh hưởng đáng kể, nên xem xét kỹ.

3.6.3 DFBETAS:

  • Mức thay đổi của hệ số \(\beta_j\) khi loại bỏ quan sát \(i\).

  • Dùng để kiểm tra ảnh hưởng của từng điểm lên từng hệ số cụ thể.

\[ \text{DFBETAS}_{ij} = \frac{\hat{\beta}_j - \hat{\beta}_{j(i)}}{\text{SE}(\hat{\beta}_{j(i)})} \]

DFBETAS giúp xác định điểm nào có ảnh hưởng đáng kể lên từng hệ số riêng biệt, chứ không chỉ mô hình tổng thể.

Ngưỡng tham khảo:

Nếu |\(DFBETAS_{ij}| > \frac{2}{n}\) quan sát i có thể ảnh hưởng mạnh đến hệ số

3.7 Đa cộng tuyến

Đa cộng tuyến xảy ra khi các biến giải thích trong mô hình có tương quan cao với nhau. Điều này dẫn đến hệ số hồi quy ước lượng không ổn định, sai số chuẩn lớn và kết luận thống kê dễ bị sai lệch.

Hệ quả:

  • Các hệ số có thể thay đổi mạnh khi có thêm hoặc bớt một vài quan sát.

  • Mô hình vẫn có R^2 cao, nhưng các hệ số không có ý nghĩa thống kê (P-value lớn).

  • Khó diễn giải được vai trò riêng của từng biến.

Variance Inflation Factor (VIF):

\[ \mathrm{VIF}_j = \frac{1}{1 - R_j^2} \]

  • \(R_j^2\) : hệ số xác định khi hồi quy \(x_j\) lên tất cả các biến còn lại.

  • Nếu \(\mathrm{VIF}_j > 5\) hoặc \(> 10\): có vấn đề cần xử lý.

3.8 Sửa chữa mô hình sai

Khi mô hình hồi quy tuyến tính vi phạm các giả định cơ bản, ta cần có những biện pháp hiệu quả để điều chỉnh hoặc thay đổi mô hình. Một số hướng xử lý phổ biến:

  • Dùng biến đổi (log, sqrt, Box-Cox…).

  • Dùng mô hình phi tuyến hoặc mô hình GLM.

  • Loại bỏ hoặc thay thế điểm ảnh hưởng quá lớn.

  • Thêm biến bị thiếu hoặc loại bớt biến gây nhiễu.


CHƯƠNG 4: ƯỚC LƯỢNG HỢP LÝ TỐI ĐA (MAXIMUM LIKELIHOOD ESTIMATION – MLE)

4.1 Giới thiệu

Phương pháp bình phương tối thiểu (Ordinary Least Squares - OLS) là công cụ kinh điển trong hồi quy tuyến tính, nhưng hiệu quả của nó chỉ được đảm bảo khi dữ liệu tuân thủ đầy đủ các giả định nền tảng — bao gồm phân phối chuẩn của sai số, phương sai đồng nhất, và biến phản hồi dạng liên tục. Tuy nhiên, trong thực tế, dữ liệu hiếm khi hoàn hảo như vậy. Các dạng dữ liệu phổ biến như nhị phân (0/1), số đếm (count), hoặc các giá trị dương liên tục thường vi phạm những giả định đó, khiến OLS không còn phù hợp hoặc cho kết quả sai lệch.

Trong bối cảnh này, phương pháp ước lượng hợp lý tối đa (Maximum Likelihood Estimation - MLE) nổi bật như một công cụ thống kê mạnh mẽ và linh hoạt hơn. Không bị giới hạn bởi các giả định cứng nhắc, MLE cho phép ta xây dựng và ước lượng các mô hình phù hợp với bản chất của nhiều loại dữ liệu đa dạng.

Quan trọng hơn, MLE chính là nền tảng lý thuyết vững chắc cho khung mô hình hiện đại: mô hình tuyến tính tổng quát (Generalized Linear Models - GLM). GLM không chỉ mở rộng khả năng mô hình hóa beyond OLS mà còn đóng vai trò trung tâm xuyên suốt phần còn lại của cuốn sách — trở thành cầu nối giữa lý thuyết thống kê cổ điển và thực tiễn phân tích dữ liệu ngày nay.

4.2 Hàm hợp lý (Likelihood Function)

Hàm hợp lý là một hàm xác suất của toàn bộ dữ liệu đã quan sát, biểu diễn như một hàm của tham số \(\theta\).

Giả sử ta có một mẫu gồm \(n\) quan sát độc lập \(y_1, y_2, \ldots, y_n\), với mỗi \(y_i\) có phân phối xác suất \(f(y_i; \theta)\), thì:

Hàm hợp lý:

\[ L(\theta) = \prod_{i=1}^{n} f(y_i; \theta) \]

  • \(L(\theta)\): hàm hợp lý

  • \(\theta\): vector các tham số cần ước lượng

  • \(f(y_i; \theta)\): mật độ xác suất (hoặc khối xác suất) của \(y_i\)

Log-hợp lý (log-likelihood):

\[ \ell(\theta) = \log L(\theta) = \sum_{i=1}^{n} \log f(y_i; \theta) \]

  • Dễ đạo hàm hơn vì tích thành tổng.

  • Giá trị cực đại của \(\ell(\theta)\) trùng với \(L(\theta)\).

4.3 Ước lượng hợp lý tối đa (Maximum Likelihood Estimation – MLE)

MLE là giá trị \(\hat{\theta}\) của tham số \(\theta\) sao cho log-likelihood đạt cực đại.

\[ \hat{\theta} = \arg\max_{\theta} \, \ell(\theta) \]

Để tìm \(\hat{\theta}\), ta giải:

\[ \frac{d\ell(\theta)}{d\theta} = 0 \]

\(\Rightarrow\) Đây gọi là phương trình điểm (score equation).

4.4 Ma trận thông tin Fisher và phương sai

4.4.1. Hàm điểm (Score Function):

\[ U(\theta) = \frac{d\ell(\theta)}{d\theta} \]

  • \(U(\theta)\): độ dốc của log-likelihood theo \(\theta\)

4.4.2 Ma trận thông tin Fisher:

\[ I(\theta) = -\mathbb{E} \left[ \frac{d^2 \ell(\theta)}{d\theta^2} \right] \]

  • \(I(\theta)\): kỳ vọng âm của đạo hàm bậc hai log-likelihood → đo độ cong.

  • Là xấp xỉ ngược lại của phương sai:

\[ \mathrm{Var}(\hat{\theta}) \approx \frac{1}{I(\theta)} \]

4.5 Các tính chất của MLE

MLE có nhiều tính chất tốt về mặt lý thuyết, đặc biệt khi kích thước mẫu n lớn:

Tính chất Giải thích
Nhất quán \(\hat{\theta} \to \theta\) khi \(n \to \infty\)
Không chệch tiệm cận Độ lệch giữa \(\hat{\theta}\)\(\theta\) tiến về 0
Hiệu quả MLE đạt giới hạn Cramér–Rao, là ước lượng “tốt nhất”
Tiệm cận chuẩn Khi \(n\) lớn, phân phối của \(\hat{\theta}\) gần chuẩn: \(\hat{\theta} \sim \mathcal{N}(\theta, I(\theta)^{-1})\)

4.6 Kiểm định giả thuyết với MLE

Muốn kiểm tra giả thuyết:

\[ H_0: \theta = \theta_0 \]

ta có ba cách phổ biến:

4.6.1. Wald Test:

\[ Z = \frac{\hat{\theta} - \theta_0}{SE(\hat{\theta})}, \quad Z \sim N(0,1) \]

  • Dùng để kiểm định nếu \(SE(\hat{\theta})\) đã có.

4.6.2. Likelihood Ratio Test (LRT):

\[ LR = 2 \left[ \ell(\hat{\theta}) - \ell(\theta_0) \right] \sim \chi^2_{df} \]

  • So sánh log-likelihood của mô hình đầy đủ và mô hình rút gọn.

  • \(df\): số tham số bị ràng buộc trong \(H_0\).

4.6.3. Score Test (Lagrange Multiplier Test):

\[ S = \frac{U(\theta_0)^2}{I(\theta_0)} \sim \chi^2_1 \]

Không cần ước lượng mô hình đầy đủ.

4.7 So sánh mô hình bằng AIC và BIC

Khi không thể dùng kiểm định LRT (do mô hình không lồng), ta dùng:

4.7.1. AIC – Akaike Information Criterion:

\[ \text{AIC} = -2\ell + 2k \]

  • \(k\): số tham số trong mô hình

  • \(\ell\): log-likelihood tại MLE

4.7.2. BIC – Bayesian Information Criterion:

\[ \text{BIC} = -2\ell + \log(n) \cdot k \]

  • \(n\): số quan sát

Chọn mô hình có AIC/BIC thấp hơn.

4.8 MLE trong mô hình không tuyến tính chuẩn

Hồi quy logistic (nhị phân):

\[ y_i \sim \text{Bernoulli}(\pi_i), \quad \log\left(\frac{\pi_i}{1 - \pi_i}\right) = x_i^T \beta \]

Hồi quy Poisson (đếm):

\[ y_i \sim \text{Poisson}(\mu_i), \quad \log(\mu_i) = x_i^T \beta \]

Hồi quy Gamma (dương liên tục):

\[ y_i \sim \text{Gamma}(\alpha, \mu_i), \quad \log(\mu_i) = x_i^T \beta \]

Cả ba đều dùng MLE để ước lượng \(\beta\), chứ không dùng OLS.



CHƯƠNG 5: CẤU TRÚC CỦA MÔ HÌNH TUYẾN TÍNH TỔNG QUÁT (GLM STRUCTURE)

Chương này hướng đến việc cung cấp một cái nhìn toàn diện và có hệ thống về mô hình tuyến tính tổng quát (GLM) – một khuôn khổ mạnh mẽ cho phép mở rộng hồi quy tuyến tính sang nhiều loại dữ liệu khác nhau. Người học sẽ được khám phá cấu trúc ba thành phần cốt lõi của GLM: phân phối xác suất thuộc họ hàm mũ, predictor tuyến tính và hàm liên kết – yếu tố kết nối kỳ vọng của biến phản hồi với tổ hợp tuyến tính của các biến giải thích. Chương cũng làm rõ vai trò của hàm liên kết chuẩn (canonical link) trong việc đơn giản hóa quá trình ước lượng và giải thích. Ngoài ra, người học sẽ nắm vững cách xây dựng mô hình phù hợp cho dữ liệu nhị phân, đếm, tỷ lệ và dữ liệu dương liên tục, cũng như hiểu được cơ chế mô hình hóa phương sai thay đổi thông qua hàm phương sai. Kiến thức trong chương là nền tảng quan trọng cho việc áp dụng GLM một cách chính xác và linh hoạt trong thực tiễn phân tích dữ liệu.

5.1 Giới thiệu

Mô hình tuyến tính tổng quát (Generalized Linear Model – GLM) là một lớp mô hình thống kê linh hoạt, cho phép mô hình hóa biến phản hồi có phân phối khác phân phối chuẩn (Normal). Đây là một bước tiến tự nhiên từ hồi quy tuyến tính cổ điển, dựa trên lý thuyết phân phối thuộc họ hàm mũ một tham số (One-Parameter Exponential Family).

GLM cung cấp một khung toán học thống nhất cho nhiều mô hình quen thuộc như hồi quy tuyến tính, hồi quy logistic, hồi quy Poisson và Gamma regression. Mỗi mô hình trong GLM chia sẻ một cấu trúc gồm ba thành phần cơ bản, đảm bảo tính thống nhất trong xây dựng, ước lượng và suy luận.

5.2 Cấu trúc của GLM

5.2.1 Thành phần ngẫu nhiên (Random component)

Giả định rằng biến phản hồi \(y_i\) (có điều kiện theo biến giải thích \(x_i\) được giả định phân phối theo một phân phối thuộc họ hàm mũ một tham số (One-Parameter Exponential Family):

\[ f(y_i; \theta_i, \phi) = \exp \left\{ \frac{y_i \theta_i - b(\theta_i)}{\phi} + c(y_i, \phi) \right\} \]

Trong đó:

  • \(\theta_i\): tham số tự nhiên (natural parameter)
  • \(\phi\): tham số phân tán (dispersion parameter), không phải lúc nào cũng có (ví dụ Poisson thì \(\phi = 1\))
  • \(b(\theta_i)\): hàm log partition
  • \(c(y_i, \phi)\): hàm chuẩn hóa để bảo toàn tích phân bằng 1

Họ hàm mũ bao gồm Normal, Poisson, Binomial, Gamma,…

5.2.2. Thành phần hệ thống (Systematic component)

Tương tự hồi quy tuyến tính, GLM sử dụng một hàm tuyến tính để biểu diễn ảnh hưởng của các biến giải thích:

\[ \eta_i = x_i^T \beta = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} \]

Trong đó:

  • \(\eta_i\): predictor tuyến tính
  • \(x_i\): vector hàng gồm các biến giải thích của quan sát \(i\)
  • \(\beta\): vector hệ số hồi quy

Đây là thành phần chứa ảnh hưởng của các biến độc lập lên mô hình.

5.3 Ví dụ mô hình hóa trong GLM

5.3.1 Hồi quy Logistic (nhị phân)

\[ y_i \sim \text{Bernoulli}(\pi_i) \]

\[ g(\pi_i) = \log \left(\frac{\pi_i}{1-\pi_i}\right) = \eta_i \]

\[ \pi_i = P(y_i = 1 \mid x_i) \]

  • Dùng cho dữ liệu như: sống/chết, mua/không mua, đúng/sai…

5.3.2 Hồi quy Poisson (đếm)

\[ y_i \sim \text{Poisson}(\mu_i) \]

\[ \log(\mu_i) = x_i^T \beta \]

  • \(\mu_i\): số sự kiện kỳ vọng xảy ra.

  • Dùng cho dữ liệu: số ca bệnh, số lần vi phạm, số giao dịch…

5.3.3 Hồi quy Gamma (dương liên tục)

\[ y_i \sim \text{Gamma}(\alpha, \mu_i) \]

Hàm liên kết:

\[ g(\mu_i) = \log(\mu_i) \quad \text{hoặc} \quad g(\mu_i) = \frac{1}{\mu_i} \]

  • Dùng cho dữ liệu chi phí, độ dài, thời gian

5.4 Hàm phương sai (Variance Function)

Trong GLM, phương sai của \(y_i\) không cần bằng nhau mà được mô hình hóa như hàm của \(\mu_i\):

\[ \text{Var}(y_i) = \phi \cdot V(\mu_i) \]

Trong đó:

  • \(\phi\): tham số phân tán (dispersion parameter)
  • \(V(\mu)\): hàm phương sai phụ thuộc vào trung bình \(\mu\)

Hàm \(V(\mu)\) tùy theo phân phối như sau:

Phân phối \(V(\mu)\)
Normal 1
Binomial \(\mu (1 - \mu)\)
Poisson \(\mu\)
Gamma \(\mu^2\)

Việc mô hình hóa phương sai như trên giúp xử lý được hiện tượng phương sai thay đổi (heteroscedasticity), vốn là một giả định bị vi phạm trong phương pháp OLS (Hồi quy tuyến tính thông thường).

5.5 Các khái niệm mở rộng

Canonical Link Function là hàm liên kết sao cho predictor tuyến tính chính là tham số tự nhiên \(\theta\) trong phân phối họ hàm mũ:

\[ \theta_i = \eta_i = x_i^T \beta \]

Việc sử dụng hàm liên kết chuẩn mang lại nhiều lợi ích lý thuyết và thực tiễn:

  • Đơn giản hóa dạng hàm hợp lý (log-likelihood).

  • Thuật toán tối ưu hội tụ nhanh hơn (ví dụ: IRLS).

  • Ma trận Fisher và các công thức ước lượng trở nên rõ ràng hơn.

Ví dụ về hàm liên kết chuẩn (canonical link):

Phân phối Hàm liên kết (Link function)
Binomial logit: \(\log\frac{\mu}{1-\mu}\)
Poisson log: \(\log(\mu)\)
Normal identity: \(\mu\)

Trong một số trường hợp, người dùng có thể lựa chọn các hàm liên kết khác (không chuẩn) để phù hợp với đặc điểm dữ liệu hoặc yêu cầu diễn giải. Tuy nhiên, dùng hàm liên kết chuẩn thường giúp quá trình tính toán hiệu quả và ổn định hơn.

Lưu ý: Dù GLM gọi là “tuyến tính”, nhưng mối quan hệ giữa \(y\)\(x\) có thể phi tuyến do sử dụng hàm liên kết (link function). Thông qua hàm liên kết, mô hình GLM cho phép thiết lập các quan hệ phi tuyến giữa biến phản hồi và biến giải thích, phù hợp với nhiều loại dữ liệu thực tế như nhị phân, đếm, tỷ lệ, hay dương liên tục.


CHƯƠNG 6: ƯỚC LƯỢNG TRONG MÔ HÌNH TUYẾN TÍNH TỔNG QUÁT (GLMs)

6.1 Giới thiệu

Sau khi thiết lập đầy đủ cấu trúc của một mô hình tuyến tính tổng quát (GLM) gồm ba thành phần chính: phân phối xác suất, hàm liên kết và thành phần tuyến tính, bước tiếp theo là ước lượng các hệ số hồi quy \(\beta\) trong mô hình.

Trong GLM, thay vì sử dụng phương pháp bình phương tối thiểu (OLS) như hồi quy tuyến tính cổ điển, ta sử dụng phương pháp hợp lý tối đa (Maximum Likelihood Estimation – MLE) để tìm giá trị các tham số tối ưu. Do tính chất phi tuyến của các phương trình log-likelihood trong GLM, việc tìm nghiệm thường không có công thức đóng, mà phải giải bằng thuật toán lặp có trọng số – IRLS (Iteratively Reweighted Least Squares).

6.2 Tổng quan về ước lượng hợp lý tối đa (MLE) trong GLM

Cho dữ liệu gồm:

  • Biến phản hồi: \(y_1, y_2, \ldots, y_n\) có thể là biến đếm, nhị phân hoặc liên tục dương…

  • Biến giải thích: \(x_{i1}, \ldots, x_{ip}\) với \(i=1, \ldots, n\).

Mô hình GLM được biểu diễn như sau:

\[ g(\mu_i) = \eta_i = \mathbf{x}_i^T \boldsymbol{\beta} \]

với

\[ \mu_i = E[y_i] = g^{-1}(\mathbf{x}_i^T \boldsymbol{\beta}) \]

Mục tiêu là tìm ước lượng \(\hat{\boldsymbol{\beta}}\) sao cho hàm log-likelihood đạt cực đại:

\[ \ell(\boldsymbol{\beta}) = \sum_{i=1}^n \log f(y_i; \theta_i) \]

trong đó:

  • \(f(y_i; \theta_i)\) là hàm mật độ xác suất (hoặc hàm khối xác suất) của biến \(y_i\),

  • \(\theta_i\) là tham số tự nhiên trong phân phối thuộc họ hàm mũ,

  • \(\theta_i\) có quan hệ với \(\mu_i\), từ đó liên hệ với \(\boldsymbol{\beta}\).

Phương pháp MLE thường không cho nghiệm tường minh, nên được giải thông qua thuật toán IRLS.

6.3 Phương pháp IRLS (Iteratively Reweighted Least Squares)

6.3.1. Thuật toán IRLS (Iteratively Reweighted Least Squares):

Trong GLM, thuật toán IRLS được sử dụng để giải bài toán tối đa hóa log-likelihood. Đây là một thuật toán lặp, tại mỗi vòng lặp ta thực hiện một bước hồi quy tuyến tính có trọng số, nhờ đó dần tiệm cận đến nghiệm tối ưu.

6.3.2 Ý tưởng cơ bản:

  • Tại mỗi vòng lặp, ta tuyến tính hóa mối quan hệ giữa biến phản hồi và predictor tuyến tính bằng cách sử dụng một biến phản hồi tạm thời gọi là biến giả (working response)

  • Biến giả (working response) \(\mathbf{z}\)ma trận trọng số \(\mathbf{W}\) được cập nhật dựa trên phân phối của y và dạng của hàm liên kết.

6.3.3 Hệ phương trình IRLS:

\[ \mathbf{X}^T \mathbf{W} \mathbf{X} \hat{\boldsymbol{\beta}} = \mathbf{X}^T \mathbf{W} \mathbf{z} \]

Trong đó:

  • \(\mathbf{X}\) là ma trận thiết kế n*p,

  • \(\mathbf{W}\) là ma trận trọng số kích thước \(n \times n\),

  • \(\mathbf{z}\) là vector biến giả \(n \times 1\), tính theo công thức:

\[ z_i = \eta_i + \frac{y_i - \mu_i}{\frac{d \mu_i}{d \eta_i}} \]

  • Trọng số \(W_i\) được tính theo:

\[ W_i = \left(\frac{d \mu_i}{d \eta_i}\right)^2 \Big/ \mathrm{Var}(y_i) \]

Thuật toán dừng khi các ước lượng \(\boldsymbol{\beta}\) hội tụ (thường dựa trên sai khác nhỏ giữa hai vòng lặp liên tiếp).

6.4 Hàm điểm, ma trận Fisher và phương sai của ước lượng

Hàm điểm (Score Function)

Hàm điểm là đạo hàm của log-likelihood theo vector hệ số \(\boldsymbol{\beta}\):

\[ U(\boldsymbol{\beta}) = \frac{\partial \ell(\boldsymbol{\beta})}{\partial \boldsymbol{\beta}} \]

Đây là hệ phương trình mà khi giải \(U(\boldsymbol{\beta}) = 0\), ta thu được ước lượng cực đại \(\hat{\boldsymbol{\beta}}\).

Ma trận thông tin Fisher

Được định nghĩa là kỳ vọng của âm đạo hàm bậc hai:

\[ \mathcal{I}(\boldsymbol{\beta}) = - \mathbb{E} \left[ \frac{\partial^2 \ell(\boldsymbol{\beta})}{\partial \boldsymbol{\beta} \, \partial \boldsymbol{\beta}^T} \right] \]

Đây là thước đo độ chính xác của ước lượng, phản ánh độ cong của log-likelihood quanh điểm cực đại. Ma trận này đóng vai trò như một thước đo độ “sắc nét” của log-likelihood tại điểm cực đại và được dùng để đánh giá độ chính xác của ước lượng.

Phương sai của \(\hat{\boldsymbol{\beta}}\)

Khi đã có ma trận thông tin Fisher, phương sai hiệp phương sai của vector hệ số ước lượng được tính là:

\[ \mathrm{Var}(\hat{\boldsymbol{\beta}}) = \mathcal{I}(\hat{\boldsymbol{\beta}})^{-1} \]

Nếu sử dụng thuật toán IRLS,thì ma trận xấp xỉ bởi:

\[ \mathrm{Var}(\hat{\boldsymbol{\beta}}) = (\mathbf{X}^T \mathbf{W} \mathbf{X})^{-1} \]

Trong đó:

  • \(\mathbf{X}\): ma trận thiết kế,

  • \(\mathbf{W}\): ma trận trọng số tại nghiệm hội tụ,

  • Công thức này xuất hiện tự nhiên từ bước giải hệ phương trình IRLS.

  • Công thức phương sai trên rất quan trọng để tính khoảng tin cậy và kiểm định giả thuyết trong GLM.

  • Với các mô hình lớn, ma trận \((\mathbf{X}^T \mathbf{W} \mathbf{X})^{-1}\) thường được tính thông qua giải hệ phương trình thay vì đảo trực tiếp để tránh sai số số học.

6.5 Sai số chuẩn và khoảng tin cậy

6.5.1 Sai số chuẩn (Standard Error)

Sau khi có được ước lượng \(\hat{\boldsymbol{\beta}}\) và ma trận phương sai hiệp phương sai \(\mathrm{Var}(\hat{\boldsymbol{\beta}})\), ta tính sai số chuẩn cho từng hệ số \(\hat{\beta}_j\) như sau:

\[ \mathrm{SE}(\hat{\beta}_j) = \sqrt{[\mathrm{Var}(\hat{\boldsymbol{\beta}})]_{jj}} \]

Trong đó, \([\cdot]_{jj}\) là phần tử hàng \(j\), cột \(j\) trong ma trận phương sai.

6.5.2 Khoảng tin cậy \(100(1 - \alpha)\%\)

Khoảng tin cậy cho hệ số \(\hat{\beta}_j\) được tính bằng công thức:

\[ \hat{\beta}_j \pm z_{\alpha/2} \cdot \mathrm{SE}(\hat{\beta}_j) \]

Trong đó:

  • \(z_{\alpha/2}\) là bách phân vị \(1 - \alpha/2\) của phân phối chuẩn chuẩn hóa (thường tra từ bảng Z),

  • Ví dụ: với \(\alpha = 0.05\), \(z_{0.025} \approx 1.96\) (tương ứng khoảng tin cậy 95%).

6.5.3 Kiểm định Wald

Kiểm định Wald giúp đánh giá giả thuyết:

\[ H_0: \beta_j = 0 \quad \text{vs} \quad H_1: \beta_j \neq 0 \]

Thống kê kiểm định:

\[ Z = \frac{\hat{\beta}_j}{\mathrm{SE}(\hat{\beta}_j)} \sim \mathcal{N}(0, 1) \]

Dựa vào giá trị \(Z\), ta có thể tính p-value và đưa ra kết luận thống kê.

  • Kiểm định Wald được dùng phổ biến do tính đơn giản và có thể thực hiện ngay sau khi có ước lượng và phương sai.

  • Nếu \(|Z| > z_{\alpha/2}\), bác bỏ \(H_0\), tức là hệ số \(\beta_j\) có ý nghĩa thống kê.

6.6 Ước lượng tham số phân tán

Trong một số mô hình GLM, đặc biệt khi sử dụng các phân phối thuộc họ hàm mũ nhưng không có dạng chuẩn hóa, việc ước lượng tham số phân tán \(phi\) là cần thiết để phản ánh đúng mức độ biến thiên của dữ liệu không được giải thích bởi mô hình.

\[ \hat{\phi} = \frac{1}{n - p} \sum_{i=1}^{n} \frac{(y_i - \hat{\mu}_i)^2}{V(\hat{\mu}_i)} \]

Trong đó:

  • \(n\): số quan sát

  • \(p\): số tham số trong mô hình (bao gồm hệ số chặn nếu có)

  • \(\hat{\mu}_i = \mathbb{E}[y_i] = g^{-1}(\eta_i)\): giá trị kỳ vọng được ước lượng

  • \(V(\hat{\mu}_i)\): hàm phương sai, phụ thuộc vào phân phối:

Phân phối Hàm phương sai \(V(\mu)\)
Gaussian \(1\)
Poisson \(\mu\)
Binomial (logit) \(\mu(1 - \mu)\)

CHƯƠNG 7: ĐÁNH GIÁ MỨC ĐỘ PHÙ HỢP VÀ LỰA CHỌN MÔ HÌNH TRONG GLM

Mục tiêu để đánh giá mức độ phù hợp của mô hình tuyến tính tổng quát (GLM) sau khi đã thực hiện ước lượng tham số. Người học sẽ hiểu và vận dụng được các công cụ như deviance, kiểm định \(\chi^2\), và phần dư để kiểm tra mức độ khớp giữa mô hình và dữ liệu thực tế. Chương này cũng hướng dẫn cách so sánh các mô hình, bao gồm mô hình lồng nhau (sử dụng kiểm định deviance) và mô hình không lồng nhau (sử dụng tiêu chí thông tin như AIC và BIC). Ngoài ra, người học sẽ biết cách sử dụng đồ thị chẩn đoán và phân tích phần dư để phát hiện điểm ngoại lai và điểm ảnh hưởng mạnh. Cuối cùng, chương trình bày cách phát hiện hiện tượng quá phân tán (overdispersion) – khi phương sai quan sát lớn hơn phương sai kỳ vọng – và giới thiệu các mô hình thay thế như quasi-Poisson hoặc Negative Binomial để xử lý hiện tượng này một cách hiệu quả.

7.1 Giới thiệu

Sau khi đã ước lượng được các tham số \(\beta\) trong mô hình tuyến tính tổng quát (GLM), bước tiếp theo là đánh giá mức độ phù hợp của mô hình với dữ liệu thực tế. Đồng thời, nếu tồn tại nhiều mô hình cạnh tranh, ta cần lựa chọn mô hình tối ưu dựa trên các tiêu chí thống kê.

Các công cụ đánh giá bao gồm:

  • Deviance (độ lệch)

  • Kiểm định \(\chi^2\)

  • Tiêu chí thông tin AIC và BIC

  • So sánh giữa các mô hình lồng và không lồng

  • Đồ thị phần dư và phân tích điểm ảnh hưởng

7.2 Deviance – đo lường mức độ phù hợp của mô hình

Deviance là đại lượng được sử dụng để đo lường mức độ khác biệt giữa mô hình hiện tại và mô hình bão hòa (saturated model) – tức mô hình có số lượng tham số tối đa, khớp hoàn toàn với dữ liệu quan sát.

\[ D(y; \hat{\mu}) = 2 \left[ \ell(y; y) - \ell(\hat{\mu}; y) \right] \]

Trong đó:

  • \(\ell(y; y)\): log-likelihood của mô hình bão hòa (saturated model)

  • \(\ell(\hat{\mu}; y)\): log-likelihood của mô hình đang xét

\(\Rightarrow\) Deviance càng nhỏ → mô hình càng gần với mô hình bão hòa → phù hợp hơn.

7.3 So sánh mô hình bằng kiểm định deviance

Khi so sánh hai mô hình lồng nhau (nested models), ta có thể sử dụng kiểm định dựa trên sự sai biệt deviance:

Công thức kiểm định:

\[ \Delta D = D_{\text{reduced}} - D_{\text{full}} \sim \chi^2_{df} \]

Trong đó:

  • \(df\): số tham số bị ràng buộc trong mô hình nhỏ hơn

Nếu \(\Delta D\) lớn và p-value nhỏ → mô hình đầy đủ tốt hơn.

7.4 AIC và BIC – lựa chọn giữa các mô hình không lồng

Trong trường hợp các mô hình không lồng nhau, ta không thể sử dụng kiểm định deviance, mà thay vào đó sử dụng các tiêu chí thông tin để so sánh mức độ phù hợp có tính đến độ phức tạp của mô hình.

AIC (Akaike Information Criterion):

\[ AIC = -2\ell + 2k \] Trong đó:

  • \(\ell\): log-likelihood

  • \(k\): số tham số trong mô hình

BIC (Bayesian Information Criterion):

\[ BIC = -2\ell + \log(n) \cdot k \]

  • \(n\): số quan sát

Mô hình có AIC/BIC thấp hơn được xem là tốt hơn.

BIC áp dụng mức phạt nặng hơn đối với các mô hình phức tạp so với AIC.

7.5 Đồ thị chẩn đoán và phần dư

7.5.1 Phần dư (residuals):

Phần dư thô (raw residual):

\[ e_i = y_i - \hat{\mu}_i \]

Phần dư Pearson:

\[ r_i = \frac{y_i - \hat{\mu}_i}{\sqrt{V(\hat{\mu}_i)}} \]

Phần dư deviance:

\[ d_i = \text{sign}(y_i - \hat{\mu}_i) \cdot \sqrt{2\left[\ell(y_i; y_i) - \ell(\hat{\mu}_i; y_i)\right]} \]

7.5.2 Đồ thị kiểm tra mô hình (Diagnostic plots):

Biểu đồ phần dư vs fitted values

Biểu đồ Normal Q-Q

Biểu đồ Scale-Location

Biểu đồ Cook’s distance vs leverage

Các biểu đồ này giúp phát hiện các điểm ngoại lai, điểm có ảnh hưởng lớn đến mô hình, và kiểm tra giả định phân phối phần dư.

7.6 Kiểm định Pearson Chi-square

Kiểm định Pearson là một phương pháp cổ điển để đánh giá mức độ phù hợp giữa dữ liệu thực tế và mô hình.

\[ X^2 = \sum_{i=1}^n \frac{(y_i - \hat{\mu}_i)^2}{V(\hat{\mu}_i)} \]

Nếu \(X^2\) lớn hơn mức kỳ vọng theo phân phối \(\chi^2_{df}\) mô hình có thể không phù hợp với dữ liệu.

7.7 Độ phân tán và vấn đề overdispersion

Một số mô hình GLM như Poisson và Binomial mặc định giả định tham số phân tán:

\[ \phi = 1 \]

Tuy nhiên, trên thực tế, phương sai quan sát đôi khi lớn hơn nhiều so với phương sai giả định của mô hình, gọi là hiện tượng quá phân tán (overdispersion).

Kiểm tra overdispersion:

Hệ số phân tán ước lượng được tính theo công thức:

\[ \hat{\phi} = \frac{\text{Deviance}}{n - p} \]

  • \(n\): số quan sát

  • \(p\): số tham số trong mô hình

Nếu:

\[ \hat{\phi} > 1.5 \]

Mô hình có thể bị overdispersed (quá phân tán)

Trong trường hợp này, cần điều chỉnh mô hình, ví dụ:

  • Sử dụng quasi-Poisson

  • Hoặc Negative Binomial


CHƯƠNG 8: HỒI QUY LOGISTIC (LOGISTIC REGRESSION)

Mô hình Tuyến tính Tổng quát (GLM) được thiết kế để xử lý dữ liệu nhị phân, trong đó biến phản hồi chỉ nhận giá trị 0 hoặc 1. Mục tiêu của chương là giúp người học nắm vững cách mô hình hóa xác suất xảy ra của một sự kiện nhị phân thông qua hàm liên kết logit, từ đó xây dựng và diễn giải mô hình hồi quy logistic một cách chính xác. Chương trình bày chi tiết cấu trúc của hàm log-likelihood dựa trên phân phối Bernoulli, và cách ước lượng tham số bằng phương pháp hợp lý tối đa. Ngoài ra, người học sẽ hiểu rõ ý nghĩa của các hệ số hồi quy thông qua odds ratio, cũng như biết cách kiểm định mức độ ý nghĩa của chúng thông qua kiểm định Wald và xây dựng khoảng tin cậy. Bên cạnh việc đánh giá mức độ phù hợp của mô hình thông qua deviance và pseudo, chương cũng mở rộng sang mô hình hồi quy logistic đa biến và mô hình nhị thức nhóm, giúp người học ứng dụng linh hoạt mô hình này trong thực tế.

8.1 Giới thiệu

Hồi quy logistic là một mô hình thuộc họ Mô hình Tuyến tính Tổng quát (GLM), được sử dụng phổ biến trong việc mô hình hóa các dữ liệu mà biến phản hồi là nhị phân, tức nhận giá trị 0 hoặc 1

\[ y \in \{0,1\} \]

Ví dụ: có bệnh/không có bệnh, mua hàng/không mua hàng, đạt/không đạt. Trong trường hợp này, kỳ vọng của biến phản hồi là một xác suất.

Đặc điểm:
\[ \mu_i = E[y_i] = P(y_i=1) \in (0,1) \]

Sử dụng hàm liên kết logit:
\[ g(\mu_i) = \log\left(\frac{\mu_i}{1-\mu_i}\right) = \eta_i = x_i^T \beta \]

8.2 Phân phối Bernoulli và hàm log-likelihood

Với biến phản hồi nhị phân:

\[ y_i \in \{0,1\} \]
phân phối theo:

\[ y_i \sim \text{Bernoulli}(\pi_i) \]

Trong đó:

\[ \pi_i = P(y_i=1) \]
và:
\[ \log\left(\frac{\pi_i}{1-\pi_i}\right) = x_i^T \beta \]

Log-likelihood tổng quát cho toàn bộ mẫu có dạng:
\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\pi_i) + (1 - y_i) \log(1-\pi_i) \right] \]

Do không có nghiệm giải tường minh cho hệ số → dùng IRLS để tìm \(\hat{\beta}\).

8.3 Diễn giải hệ số hồi quy trong logistic regression

Khi dùng logit link:
\[ \eta_i = \log\left(\frac{\pi_i}{1-\pi_i}\right) = x_i^T \beta \]

\(\beta_j\) đại diện cho log odds ratio nghĩa là:
\[ \text{Odds ratio} = \exp(\beta_j) \]

  • Nếu \(\beta_j > 0\): biến \(x_j\) làm tăng khả năng \(y=1\)

  • Nếu \(\beta_j < 0\): biến \(x_j\) làm giảm khả năng \(y=1\)

8.4 Khoảng tin cậy và kiểm định

Sau khi ước lượng \(\hat{\beta}\), ta kiểm định ý nghĩa của từng hệ số thông qua kiểm định Wald:

\[ Z_j = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} \sim N(0,1) \]

Khoảng tin cậy 95% được ước tính như sau:
\[ \hat{\beta}_j \pm z_{0.975} \cdot SE(\hat{\beta}_j) \]

Chuyển sang odds ratio bằng
\[ \exp(\hat{\beta}_j) \]

8.5 Đánh giá mô hình

Deviance là một đại lượng đo mức độ phù hợp của mô hình:

\[ D = -2 \left[ \ell(\hat{\beta}) - \ell_{\text{saturated}} \right] \]

Kiểm định deviance giữa mô hình đầy đủ và mô hình rút gọn.

Pseudo-\(R^2\):
\[ R^2 = 1 - \frac{D_{\text{model}}}{D_{\text{null}}} \]

8.6 Mô hình hóa với nhiều biến (multiple predictors)

Hồi quy logistic có thể dễ dàng mở rộng để bao gồm nhiều biến giải thích:

\[ \log\left(\frac{\pi_i}{1-\pi_i}\right) = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} \]

Đây là mô hình hồi quy logistic đa biến (multiple logistic regression), cho phép phân tích ảnh hưởng đồng thời của nhiều yếu tố lên xác suất xảy ra sự kiện.

8.7 Mô hình hóa tỷ lệ (Grouped binomial model)

Trong một số trường hợp, dữ liệu phản hồi không phải từng quan sát riêng lẻ mà được tổng hợp dưới dạng tỷ lệ:

\[ \frac{y_i}{n_i} \]
ta dùng:
\[ y_i \sim \text{Binomial}(n_i, \pi_i) \]

Log-likelihood:
\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\pi_i) + (n_i - y_i) \log(1-\pi_i) \right] \]


CHƯƠNG 9: HỒI QUY POISSON (POISSON REGRESSION)

Mục tiêu của chương này là giới thiệu mô hình hồi quy Poisson trong khuôn khổ GLM, vốn được thiết kế để phân tích dữ liệu đếm – tức các biến phản hồi rời rạc, không âm như số sự kiện xảy ra trong một đơn vị thời gian hoặc không gian. Chương trình bày cách xây dựng mô hình với hàm liên kết log để đảm bảo giá trị kỳ vọng luôn dương, giải thích ý nghĩa các hệ số hồi quy trên thang logarit, và chỉ rõ cách ước lượng các tham số bằng phương pháp hợp lý tối đa. Ngoài ra, chương còn tập trung vào các vấn đề quan trọng như điều chỉnh offset khi dữ liệu quan sát có độ dài khác nhau, xử lý hiện tượng phân tán quá mức (overdispersion) bằng quasi-Poisson hoặc Negative Binomial, và đánh giá mô hình thông qua các tiêu chí như deviance, AIC và kiểm định Pearson chi-square.

9.1 Giới thiệu và ứng dụng thực tế

Hồi quy Poisson là một mô hình thuộc họ Mô hình Tuyến tính Tổng quát (GLM), được thiết kế để mô hình hóa các biến phản hồi là số lượng sự kiện xảy ra trong một đơn vị quan sát, chẳng hạn như:

  • Số lần nhập viện

  • Số vụ tai nạn giao thông

  • Số lỗi phần mềm được ghi nhận

Mô hình này đặc biệt thích hợp khi:

  • Biến phản hồi \(y \in \{0, 1, 2, \ldots \}\)

  • Dữ liệu có rời rạc và không âm

  • Mục tiêu là ước lượng số sự kiện trung bình theo các đặc tính \(x\)

9.2 Phân phối Poisson và liên kết log

9.2.1 Hàm xác suất:

\[ P(y_i) = \frac{e^{-\mu_i} \mu_i^{y_i}}{y_i!}, \quad y_i = 0, 1, 2, \ldots \]

Trong đó:

\[ \mu_i = E[y_i] : \text{số sự kiện kỳ vọng của quan sát thứ } i \]

\[ \text{Var}(y_i) = \mu_i \quad : \text{đặc điểm then chốt} \]

9.2.2 Hàm liên kết (canonical):

\[ \eta_i = \log(\mu_i) = x_i^T \beta \implies \mu_i = e^{x_i^T \beta} \]

9.2.3 Hàm log đảm bảo:

\[ \mu_i > 0 \]

Mối quan hệ tuyến tính trên log-scale.

9.3 Hàm log-likelihood và phương trình điểm

9.3.1 Log-likelihood của mô hình:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log(\mu_i) - \mu_i - \log(y_i!) \right] \]

Thay \(\mu_i = e^{x_i^T \beta}\), ta được:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i x_i^T \beta - e^{x_i^T \beta} - \log(y_i!) \right] \]

9.3.2 Score function (đạo hàm log-likelihood):

\[ U(\beta) = \sum_{i=1}^n x_i (y_i - \mu_i) \]

Giải phương trình \(U(\beta) = 0\) → tìm \(\hat{\beta}\) bằng IRLS.

9.4 Diễn giải hệ số hồi quy

Trong hồi quy Poisson:

  • Mỗi \(\beta_j\) thể hiện ảnh hưởng tuyến tính trên thang log đến số sự kiện trung bình.

  • \(e^{\beta_j}\) là tỷ lệ thay đổi kỳ vọng \(\mu\) khi \(x_j\) tăng 1 đơn vị, các biến khác giữ nguyên.

9.5 Tỷ lệ xảy ra & offset

Offset: Khi các quan sát khác nhau về thời gian hoặc phạm vi theo dõi, cần điều chỉnh để mô hình phản ánh tỷ lệ sự kiện, thay vì số lượng tuyệt đối.

\[ \frac{\mu_i}{t_i} \implies \log(\mu_i) = \log(t_i) + x_i^T \beta \]

Trong đó \(\log(t_i)\)offset được đưa vào mô hình nhưng không có hệ số hồi quy đi kèm.

9.6 Pphân tán quá mức (Overdispersion)

Về lý thuyết, mô hình Poisson giả định:

\[ \mathrm{Var}(y_i) = \mu_i \]

Tuy nhiên, trong thực tế, thường thấy:

\[ \mathrm{Var}(y_i) > \mu_i \quad \Rightarrow \quad \text{overdispersion} \]

Nguyên nhân có thể bao gồm: bỏ sót biến quan trọng, quá nhiều giá trị bằng 0, hoặc sự biến động vượt ngoài dự kiến.

Hệ số phân tán:

\[ \hat{\phi} = \frac{\text{Deviance}}{n - p} \]

Nếu \(\hat{\phi} > 1.5\) thì cần lưu ý hiện tượng phân tán quá mức.

Giải pháp xử lý:

  • Dùng quasi-Poisson: điều chỉnh phương sai mà không thay đổi kỳ vọng.

  • Dùng Negative Binomial: thêm tham số α để mô hình hóa phương sai lớn hơn.

9.7 Đánh giá mô hình

Các phương pháp đánh giá bao gồm:

  • Deviance: đo lường mức độ phù hợp của mô hình.

  • AIC: tiêu chí lựa chọn mô hình tối ưu.

  • Kiểm định deviance: so sánh mô hình đầy đủ và mô hình rút gọn.

  • Biểu đồ phần dư:

    • Residuals vs Fitted

    • Deviance residuals

    • Cook’s distance

Kiểm định Pearson chi-square:

\[ X^2 = \sum_{i=1}^n \frac{(y_i - \mu_i)^2}{\mu_i} \quad \Rightarrow \quad X^2 \sim \chi^2_{n-p} \]

9.8 So sánh với các mô hình khác

Mô hình Khi nào dùng
Poisson Khi dữ liệu đếm và phương sai xấp xỉ bằng kỳ vọng (\(\mathrm{Var}(y) \approx E(y)\))
Quasi-Poisson Khi có phân tán quá mức nhẹ, vẫn giữ nguyên hàm liên kết log (link function)
Negative Binomial Khi phân tán quá mức nghiêm trọng hoặc dữ liệu chứa nhiều giá trị bằng 0

CHƯƠNG 10: HỒI QUY GAMMA (GAMMA REGRESSION)

Chương này tập trung vào mô hình hồi quy Gamma – một dạng GLM chuyên biệt dùng cho các biến phản hồi liên tục, dương và có phương sai tỷ lệ với bình phương giá trị kỳ vọng. Mục tiêu của chương là giúp người đọc hiểu được cách mô hình hóa dữ liệu kiểu này thông qua phân phối Gamma và hàm liên kết log, vốn phổ biến vì đảm bảo tính dương của kỳ vọng. Chương cũng hướng dẫn chi tiết cách thiết lập hàm log-likelihood và giải hệ phương trình điểm bằng thuật toán IRLS để ước lượng tham số. Ngoài ra, chương còn cung cấp cách diễn giải các hệ số hồi quy trên thang log, thực hiện kiểm định giả thuyết với Wald test, tính khoảng tin cậy, kiểm tra độ phù hợp mô hình với deviance và Pearson chi-square, đồng thời so sánh với các mô hình thay thế như hồi quy tuyến tính hoặc hồi quy log-normal.

10.1 Giới thiệu

Hồi quy Gamma là một mô hình thuộc họ Mô hình Tuyến tính Tổng quát (GLM), được sử dụng để mô hình hóa các biến phản hồi liên tục, dương với phương sai tăng theo giá trị trung bình. Mô hình này đặc biệt phù hợp trong các trường hợp mà độ biến thiên của dữ liệu tỉ lệ với bình phương trung bình.

Một số ví dụ ứng dụng điển hình:

  • Chi phí y tế

  • Thời gian sống (survival time)

  • Lượng tiêu thụ năng lượng

10.2 Phân phối Gamma

Giả định biến ngẫu nhiên \(y_i\), tuân theo phân phối Gamma với các tham số:

\[ y_i \sim Gamma(\alpha, \mu_i) \]

Trong đó:

\(\mu_i = E[y_i]\) là kỳ vọng của \(y_i\).

Phương sai:
\[ Var(y_i) = \frac{\mu_i^2}{\alpha} = \phi \mu_i^2 \]

Tức là phương sai tỷ lệ với bình phương kỳ vọng – một giả định phù hợp trong nhiều bài toán thực tế có tính biến thiên tương đối không đổi.

10.3 Hàm mật độ xác suất Gamma (dạng GLM)

Hàm mật độ xác suất của phân phối Gamma (dưới dạng hàm mũ):

\[ f(y; \mu, \phi) = \frac{1}{\Gamma(1/\phi)} \left(\frac{1}{\phi \mu}\right)^{1/\phi} y^{\frac{1}{\phi}-1} \exp\left(-\frac{y}{\phi \mu}\right) \]

Phân phối Gamma thuộc họ hàm mũ với các đặc trưng:

Tham số tự nhiên: \[ \theta = -\frac{1}{\mu} \]

hàm chuẩn hóa:

\[ b(\theta) = -\log(-\theta) \]

Hàm phương sai:

\[ V(\mu) = \mu^2 \]

\(\phi\) là tham số phân tán.

10.5 Ước lượng trong hồi quy Gamma

Ước lượng tham số \(\beta\) được ước lượng bằng phương pháp hợp lý tối đa (MLE), thông qua thuật toán IRLS (Iteratively Reweighted Least Squares).

Hàm log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^n \left[-\log(\mu_i) - \frac{y_i}{\mu_i} \right] + \text{hằng số} \]

với:

\[ \mu_i = e^{x_i^T \beta} \]

Ta thiết lập phương trình điểm:

\[ \frac{\partial \ell}{\partial \beta} = \sum_{i=1}^n x_i \left( y_i - \frac{\mu_i}{\mu_i^2} \cdot \frac{d\mu_i}{d\eta_i} \right) = 0 \]

Dùng IRLS để giải phương trình và tìm nghiệm \(\hat{\beta}\).

10.6 Diễn giải hệ số

Với link log:

\[ \log(\mu_i) = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} \implies \mu_i = e^{x_i^T \beta} \]

Mỗi hệ số \(\beta_j\) được hiểu là tác động trên log-scale, nghĩa là ảnh hưởng đến log của kỳ vọng trung bình.

  • Khi \(x_j\) tăng 1 đơn vị, trung bình \(\mu\) thay đổi theo tỷ lệ:

\[ e^{\beta_j} \]

tức là hệ số tỷ lệ thay đổi của \(\mu\).

10.7 Kiểm định và khoảng tin cậy

  • Wald test để kiểm định:

\[ Z_j = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} \sim \mathcal{N}(0,1) \]

  • Khoảng tin cậy cho \(\beta_j\):

\[ \hat{\beta}_j \pm z_{\alpha/2} \cdot SE(\hat{\beta}_j) \]

  • Chuyển sang khoảng tin cậy tỷ lệ thay đổi trung bình:

\[ \left(e^{\hat{\beta}_j - z_{\alpha/2} SE(\hat{\beta}_j)}, \quad e^{\hat{\beta}_j + z_{\alpha/2} SE(\hat{\beta}_j)} \right) \]

Khoảng tin cậy này giúp diễn giải ảnh hưởng của biến giải thích lên trung bình phản hồi dưới dạng tỷ lệ.

10.8 Kiểm tra độ phù hợp (Goodness-of-fit)

Hai tiêu chí phổ biến để đánh giá mô hình:

  • Deviance:

\[ D = 2 \sum_{i=1}^n \left[ \frac{y_i - \mu_i}{\mu_i} - \log\left(\frac{y_i}{\mu_i}\right) \right] \]

  • Pearson chi-square:

\[ X^2 = \sum_{i=1}^n \left( \frac{y_i - \mu_i}{\mu_i} \right)^2 \]

Các chỉ số này phản ánh mức độ phù hợp của mô hình với dữ liệu, đồng thời giúp phát hiện hiện tượng overdispersion nếu có.

10.9 So sánh với mô hình khác

Mô hình Khi dùng
Hồi quy tuyến tính Khi dữ liệu phân phối chuẩn và phương sai không đổi
Hồi quy Gamma Khi dữ liệu dương, phương sai tỷ lệ với bình phương trung bình
Hồi quy log-normal Khi \(\log(y)\) phân phối chuẩn (sau biến đổi log)

CHƯƠNG 11: DỮ LIỆU NHÓM HOẶC TỶ LỆ (GROUPED DATA OR PROPORTIONS)

Mục tiêu chính của chương này là trình bày mô hình hóa dữ liệu nhị thức tổng quát (binomial GLM) trong trường hợp phản hồi là số lượng thành công trên tổng số lần thử, thường xuất hiện dưới dạng dữ liệu nhóm hoặc tỷ lệ. Thay vì áp dụng hồi quy logistic cho từng cá nhân, chương này phát triển mô hình phù hợp với dữ liệu đã được tổng hợp – ví dụ như số người mắc bệnh trên tổng dân số từng khu vực. Chương trình bày chi tiết cách xây dựng mô hình với link logit, cách tính log-likelihood và áp dụng thuật toán IRLS có trọng số để ước lượng tham số. Bên cạnh đó, chương cũng so sánh hiệu quả giữa dữ liệu nhóm và dữ liệu nhị phân cá nhân, chỉ ra những lưu ý khi làm việc với dữ liệu tỷ lệ, đồng thời hướng dẫn các kiểm định mô hình, phát hiện hiện tượng overdispersion, và đề xuất sử dụng quasi-binomial khi cần thiết.

11.1 Giới thiệu

Hồi quy logistic thường được dùng để mô hình hóa dữ liệu nhị phân 0/1 (Bernoulli). Tuy nhiên, trong thực tế ta thường gặp các trường hợp mà dữ liệu có dạng nhóm hoặc được biểu diễn dưới dạng tỷ lệ thành công. Cần dùng GLM dạng nhị thức tổng quát (binomial GLM), áp dụng cho số lần thành công trên số lần thử.

11.2 Mô hình hóa số thành công trong nhóm

Giả sử với \(y_i \sim \text{Binomial}(n_i, \pi_i)\), ta mô hình hóa:

\[ \log \left(\frac{\pi_i}{1 - \pi_i}\right) = \eta_i = x_i^T \beta \implies \pi_i = \frac{e^{x_i^T \beta}}{1 + e^{x_i^T \beta}} \]

Trong đó:

  • \(y_i\): số lần thành công trong nhóm \(i\)

  • \(n_i\): tổng số lần thử nghiệm trong nhóm \(i\)

  • \(\pi_i\): xác suất thành công

  • \(\mu_i = E[y_i] = n_i \pi_i\)

  • \(\text{Var}(y_i) = n_i \pi_i (1 - \pi_i)\)

Thích hợp cho dữ liệu dạng “n thử nghiệm, k thành công”.

11.3 Log-likelihood và IRLS

Hàm log-likelihood:

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

Việc ước lượng \(\beta\) được thực hiện bằng phương pháp hợp lý tối đa (MLE) thông qua thuật toán IRLS (Iteratively Reweighted Least Squares), tương tự như logistic, nhưng có thêm hệ số \(n_i\).

Biến giả và trọng số:

\[ w_i = n_i \pi_i (1 - \pi_i) \]

\[ z_i = \eta_i + \frac{y_i - n_i \pi_i}{n_i \pi_i (1 - \pi_i)} \]

11.4 Ưu điểm so với mô hình nhị phân

Dạng dữ liệu Mô hình tương ứng Ghi chú
0/1 từng cá nhân Hồi quy logistic \(y_i \sim \text{Bernoulli}(\pi_i)\)
Nhóm nhiều cá nhân Binomial GLM với \(y_i / n_i\) \(y_i \sim \text{Binomial}(n_i, \pi_i)\)

Mô hình nhóm giúp tận dụng nhiều thông tin hơn, thường cho ước lượng chính xác hơn và hiệu quả hơn so với mô hình từng cá nhân.

11.5 Dữ liệu tỷ lệ (proportions)

Nếu \(y_i / n_i\) được ghi dưới dạng tỷ lệ (0 < tỷ lệ < 1), ta vẫn dùng mô hình:

\[ \log \left(\frac{y_i / n_i}{1 - y_i / n_i}\right) = x_i^T \beta \]

Phải cung cấp số lần thử \(n_i\) cho mỗi quan sát để phần mềm thống kê tính đúng phương sai.

11.6 Kiểm định mô hình

Các công cụ đánh giá mô hình:

  • Kiểm định Wald cho từng hệ số

  • Kiểm định Deviance giữa mô hình đầy đủ và mô hình rút gọn

  • Chọn mô hình: AIC, BIC

  • Chẩn đoán mô hình:

    • Phân tích phần dư Pearson

    • Phân tích phần dư deviance

Dùng để phát hiện outlier và quan sát không phù hợp.

11.7 Kiểm tra overdispersion

Giống hồi quy logistic, mô hình binomial giả định:

\[ \text{Var}(y_i) = n_i \pi_i (1 - \pi_i) \]

Tuy nhiên, nếu quan sát thực tế cho thấy phương sai lớn hơn kỳ vọng → hiện tượng overdispersion.

Cách kiểm tra:

\[ \hat{\phi} = \frac{\text{Deviance}}{n - p} \]

Nếu \(\hat{\phi} > 1.5\): cần chuyển sang mô hình quasi-binomial


CHƯƠNG 12: MÔ HÌNH TUYẾN TÍNH TỔNG QUÁT TWEEDEE (TWEEDIE GLMs)

Mô hình tuyến tính tổng quát Tweedie – một công cụ linh hoạt và mạnh mẽ trong phân tích thống kê, đặc biệt phù hợp với các loại dữ liệu có cấu trúc phức tạp như vừa có nhiều giá trị bằng 0, vừa có phần liên tục dương. Chương này làm rõ cách mô hình Tweedie mở rộng họ hàm mũ thông qua hàm phương sai tổng quát, cũng như vai trò then chốt của chỉ số sức mạnh trong việc liên kết mô hình này với các phân phối quen thuộc như Gaussian, Poisson và Gamma. Người đọc sẽ nắm được đặc điểm, điều kiện áp dụng và ứng dụng thực tiễn của mô hình Tweedie trong các lĩnh vực như bảo hiểm, tài chính, y tế – nơi dữ liệu thường phân tán mạnh và có sự kết hợp giữa các đặc điểm rời rạc và liên tục.

12.1 Giới thiệu

Mô hình Tweedie GLM là một mở rộng linh hoạt của họ hàm mũ trong GLM, cho phép mô hình hóa các phân phối có đặc tính trung gian giữa những phân phối phổ biến như:

  • Phân phối Gaussian (chuẩn)

  • Phân phối Poisson

  • Phân phối Gamma

  • Phân phối Inverse Gaussian

Mô hình này đặc biệt hữu ích khi làm việc với các loại dữ liệu có tính chất:

  • Dữ liệu liên tục dương kèm nhiều giá trị bằng 0, chẳng hạn như chi phí y tế hoặc tổn thất bảo hiểm – nơi một số cá nhân không phát sinh chi phí

  • Phân tán quá mức (overdispersion), tức phương sai lớn hơn kỳ vọng

  • Dữ liệu bao gồm phần rời rạc (0, 1, 2, …) kết hợp với phần liên tục dương

Nhờ tính linh hoạt đó, mô hình Tweedie được ứng dụng rộng rãi trong các lĩnh vực như bảo hiểm, tài chính, y tế, và đặc biệt phù hợp với các bài toán có dữ liệu chứa nhiều số 0 (zero-inflated).

12.2 Định nghĩa và tính chất

Mô hình Tweedie thuộc họ phân phối hàm mũ (exponential family), đặc trưng bởi hàm phương sai có dạng:

\[ \text{Var}(Y) = \phi \mu^p \]

Trong đó:

  • \(\mu = \mathbb{E}[Y]\): kỳ vọng của biến phản hồi

  • \(\phi > 0\): hệ số phân tán, điều chỉnh độ biến thiên của dữ liệu

  • \(p\): chỉ số sức mạnh (power index), xác định dạng phân phối cụ thể trong lớp Tweedie

12.3 Giá trị đặc biệt của chỉ số \(p\)

\(p\) Phân phối tương ứng
0 Gaussian (Normal)
1 Poisson
\((1, 2)\) Tweedie hỗn hợp (0 + dương liên tục)
2 Gamma
3 Inverse Gaussian

Với chỉ số \(1 < p < 2\), ta có dạng Tweedie hỗn hợp, rất đặc biệt vì:

  • Có khả năng tái hiện số lượng lớn giá trị bằng 0

  • Đồng thời mô hình hóa các giá trị phản hồi dương, liên tục

Mô hình này do đó rất phù hợp cho các dữ liệu thực tế như chi phí bảo hiểm, tổn thất tài chính hoặc các biến phản hồi dạng “0 hoặc giá trị tiền tệ dương”.



PHẦN 2. THỐNG KÊ MÔ TẢ “SUPERMARKET TRANSACTIONS”

1. Đọc dữ liệu

Bộ dữ liệu được cung cấp được định dạng là file csv. Vì vậy sau ta sẽ dùng hàm sau để đọc dữ liệu đề bài cho:

library(csv)
data <- read.csv("C:/Users/PC/Downloads/Supermarket Transactions.csv")
str (data)
## 'data.frame':    14059 obs. of  16 variables:
##  $ X                : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ PurchaseDate     : chr  "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
##  $ CustomerID       : int  7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
##  $ Gender           : chr  "F" "M" "F" "M" ...
##  $ MaritalStatus    : chr  "S" "M" "M" "M" ...
##  $ Homeowner        : chr  "Y" "Y" "N" "Y" ...
##  $ Children         : int  2 5 2 3 3 3 2 2 3 1 ...
##  $ AnnualIncome     : chr  "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
##  $ City             : chr  "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
##  $ StateorProvince  : chr  "CA" "CA" "WA" "OR" ...
##  $ Country          : chr  "USA" "USA" "USA" "USA" ...
##  $ ProductFamily    : chr  "Food" "Food" "Food" "Food" ...
##  $ ProductDepartment: chr  "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
##  $ ProductCategory  : chr  "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
##  $ UnitsSold        : int  5 5 3 4 4 3 4 6 1 2 ...
##  $ Revenue          : num  27.38 14.9 5.52 4.44 14 ...

2. Tổng quan số liệu

summary(data)
##        X         PurchaseDate         CustomerID       Gender         
##  Min.   :    1   Length:14059       Min.   :    3   Length:14059      
##  1st Qu.: 3516   Class :character   1st Qu.: 2549   Class :character  
##  Median : 7030   Mode  :character   Median : 5060   Mode  :character  
##  Mean   : 7030                      Mean   : 5117                     
##  3rd Qu.:10544                      3rd Qu.: 7633                     
##  Max.   :14059                      Max.   :10280                     
##  MaritalStatus       Homeowner            Children    AnnualIncome      
##  Length:14059       Length:14059       Min.   :0.00   Length:14059      
##  Class :character   Class :character   1st Qu.:1.00   Class :character  
##  Mode  :character   Mode  :character   Median :3.00   Mode  :character  
##                                        Mean   :2.53                     
##                                        3rd Qu.:4.00                     
##                                        Max.   :5.00                     
##      City           StateorProvince      Country          ProductFamily     
##  Length:14059       Length:14059       Length:14059       Length:14059      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  ProductDepartment  ProductCategory      UnitsSold        Revenue     
##  Length:14059       Length:14059       Min.   :1.000   Min.   : 0.53  
##  Class :character   Class :character   1st Qu.:3.000   1st Qu.: 6.84  
##  Mode  :character   Mode  :character   Median :4.000   Median :11.25  
##                                        Mean   :4.081   Mean   :13.00  
##                                        3rd Qu.:5.000   3rd Qu.:17.37  
##                                        Max.   :8.000   Max.   :56.70

2.1 Đọc tên các biến trong bộ số liệu

names (data)
##  [1] "X"                 "PurchaseDate"      "CustomerID"       
##  [4] "Gender"            "MaritalStatus"     "Homeowner"        
##  [7] "Children"          "AnnualIncome"      "City"             
## [10] "StateorProvince"   "Country"           "ProductFamily"    
## [13] "ProductDepartment" "ProductCategory"   "UnitsSold"        
## [16] "Revenue"

2.2 Đổi tên các biến

variable_description <- data.frame(
  Variable = c(
    "Unnamed: 0", "PurchaseDate", "CustomerID", "Gender", "MaritalStatus",
    "Homeowner", "Children", "AnnualIncome", "City", "StateorProvince",
    "Country", "ProductFamily", "ProductDepartment", "ProductCategory",
    "UnitsSold", "Revenue"
  ),
  Description = c(
    "Ma dong (co the bo qua)",
    "Ngay mua hang",
    "ID khach hang",
    "Gioi tinh (F: nu, M: nam)",
    "Tinh trang hon nhan (S: doc than, M: da ket hon)",
    "So huu nha (Y: co, N: khong)",
    "So con trong gia dinh",
    "Thu nhap hang nam (theo nhom)",
    "Thanh pho sinh song",
    "Bang / tinh",
    "Quoc gia",
    "Nhom san pham chinh (Food, Drink, ...)",
    "Phong ban san pham (Snacks, Produce, ...)",
    "Danh muc san pham cu the",
    "So luong san pham da ban",
    "Doanh thu tu giao dich (USD)"
  ),
  stringsAsFactors = FALSE
)

library(knitr)
kable(variable_description, col.names = c("Bien", "Mo ta"))
Bien Mo ta
Unnamed: 0 Ma dong (co the bo qua)
PurchaseDate Ngay mua hang
CustomerID ID khach hang
Gender Gioi tinh (F: nu, M: nam)
MaritalStatus Tinh trang hon nhan (S: doc than, M: da ket hon)
Homeowner So huu nha (Y: co, N: khong)
Children So con trong gia dinh
AnnualIncome Thu nhap hang nam (theo nhom)
City Thanh pho sinh song
StateorProvince Bang / tinh
Country Quoc gia
ProductFamily Nhom san pham chinh (Food, Drink, …)
ProductDepartment Phong ban san pham (Snacks, Produce, …)
ProductCategory Danh muc san pham cu the
UnitsSold So luong san pham da ban
Revenue Doanh thu tu giao dich (USD)

3. Thống kê mô tả các biến

Kiểm tra số dòng, số cột dữ liệu

dim(data)
## [1] 14059    16

Tần suất và bảng phân phối biến phân loại

table(data$Gender)
## 
##    F    M 
## 7170 6889
table(data$MaritalStatus)
## 
##    M    S 
## 6866 7193
table(data$Homeowner)
## 
##    N    Y 
## 5615 8444
table(data$City)
## 
##      Acapulco    Bellingham Beverly Hills     Bremerton       Camacho 
##           383           143           811           834           452 
##   Guadalajara       Hidalgo   Los Angeles        Merida   Mexico City 
##            75           845           926           654           194 
##       Orizaba      Portland         Salem    San Andres     San Diego 
##           464           876          1386           621           866 
## San Francisco       Seattle       Spokane        Tacoma     Vancouver 
##           130           922           875          1257           633 
##      Victoria   Walla Walla        Yakima 
##           176           160           376
table(data$ProductFamily)
## 
##          Drink           Food Non-Consumable 
##           1250          10153           2656

4. Biểu đồ trực quan hóa

Biểu đồ thể hiện giới tính

table(data$Gender)
## 
##    F    M 
## 7170 6889
library(ggplot2)
ggplot(data, aes(x = Gender)) +
  geom_bar(fill = "green") +
  labs(title = "Tần suất theo Giới tính") +
  theme_minimal()

Biểu đồ doanh thu

table(data$Revenue)
## 
##  0.53   0.6  0.62  0.65  0.67  0.73  0.76  0.85  0.86   0.9  0.94  0.97  1.02 
##     1     1     1     1     1     1     1     1     1     1     1     2     1 
##  1.06  1.08   1.1  1.12  1.14  1.17  1.18  1.19   1.2  1.22  1.24  1.26  1.28 
##     4     1     1     2     1     2     1     1     1     2     2     1     2 
##  1.29   1.3  1.32  1.33  1.34  1.37  1.38  1.39   1.4  1.42  1.43  1.45  1.46 
##     1     1     3     1     3     1     1     2     2     1     5     1     6 
##  1.47  1.48   1.5  1.51  1.52  1.53  1.54  1.55  1.56  1.57  1.58  1.59   1.6 
##     1     2     1     1     1     2     5     1     4     1     4     4     8 
##  1.62  1.63  1.64  1.65  1.66  1.68   1.7  1.71  1.72  1.74  1.75  1.76  1.77 
##     1     3     2     1     4     6     2     2     5     3     2     4     1 
##  1.78   1.8  1.82  1.83  1.84  1.85  1.86  1.87  1.88  1.89   1.9  1.91  1.92 
##     1     4     4     3     1     3     3     3     3     4     3     3     6 
##  1.94  1.95  1.96  1.97  1.98  1.99     2  2.01  2.02  2.03  2.04  2.05  2.07 
##     1     7     2     2     6     1     3     2     2     2     4     3     6 
##  2.08  2.09   2.1  2.11  2.12  2.14  2.15  2.16  2.18  2.19  2.21  2.22  2.23 
##     6     6     2     1     4     3     2     6     4     4     5     4     6 
##  2.24  2.25  2.27  2.28  2.29   2.3  2.31  2.32  2.33  2.34  2.36  2.37  2.38 
##     8     3     6     9     1     5     9     3     3     5     3     4     3 
##  2.39   2.4  2.41  2.42  2.43  2.44  2.45  2.46  2.47  2.48  2.49   2.5  2.51 
##     8     3     5     4     3     7     6     4     1     7     5     6     2 
##  2.52  2.53  2.54  2.55  2.56  2.57  2.58  2.59   2.6  2.61  2.62  2.63  2.64 
##    10     1     6    12     5     8     3     2     7     1     4     5     7 
##  2.65  2.66  2.67  2.68  2.69   2.7  2.71  2.73  2.74  2.75  2.76  2.77  2.78 
##     7     6     4     5     6     6     2     4    12     8     8     8     1 
##  2.79   2.8  2.81  2.82  2.83  2.84  2.85  2.86  2.88  2.89   2.9  2.91  2.92 
##     3     2    16     2     2     5     9     8    10     2     2     7     8 
##  2.93  2.94  2.95  2.96  2.97  2.98  2.99     3  3.02  3.03  3.04  3.06  3.07 
##     8     5     4     9     6     2     5     6    13     1     9     7    11 
##  3.08  3.09   3.1  3.11  3.12  3.13  3.14  3.15  3.16  3.17  3.18  3.19   3.2 
##     5     1     5     8     6     2     5     7     3     7     1    10     6 
##  3.21  3.22  3.23  3.24  3.25  3.26  3.27  3.28  3.29   3.3  3.31  3.32  3.33 
##     4     8     2    13     4     3     1     5     2     2     4    10     4 
##  3.34  3.35  3.36  3.37  3.38  3.39   3.4  3.41  3.42  3.43  3.44  3.45  3.46 
##     7    10    14     1     6     2     8     4    10     3     5     2     4 
##  3.47  3.48  3.49   3.5  3.51  3.52  3.53  3.54  3.55  3.56  3.57  3.58  3.59 
##     4    14     4    12     3    11     8    12     3    13     1     5    14 
##   3.6  3.61  3.62  3.63  3.64  3.65  3.66  3.67  3.68  3.69   3.7  3.71  3.72 
##    10     7     9     5     5    16     5     6     4     8     6     3    12 
##  3.73  3.74  3.75  3.76  3.77  3.78  3.79   3.8  3.81  3.82  3.83  3.84  3.85 
##     2    20     7     9     1    12     1     7     2    14     5    22     1 
##  3.86  3.87  3.88  3.89   3.9  3.91  3.92  3.93  3.94  3.95  3.96  3.97  3.98 
##     6    11     8     9    10     1    11     7     9     2    11     2    11 
##  3.99     4  4.01  4.02  4.03  4.05  4.06  4.07  4.08  4.09   4.1  4.11  4.12 
##     6     9     4     6    20    12     7     4    12    10    11     5     2 
##  4.13  4.14  4.15  4.16  4.18  4.19   4.2  4.21  4.22  4.23  4.24  4.25  4.26 
##    11    13     1    15    14     6     9     8    12     2     2     3    13 
##  4.27  4.28  4.29   4.3  4.31  4.32  4.33  4.34  4.35  4.36  4.37  4.38  4.39 
##    11    10    13     2     5     8     7     5    10     5    15     7     7 
##   4.4  4.41  4.42  4.43  4.44  4.45  4.46  4.47  4.48  4.49   4.5  4.51  4.52 
##     2     1    12     6     8     9     3    12     6     8     8     5     9 
##  4.53  4.54  4.56  4.58  4.59   4.6  4.61  4.62  4.63  4.64  4.65  4.66  4.67 
##     2    18    15     7    15     4     7    20     3     8     4     5     2 
##  4.68  4.69   4.7  4.71  4.72  4.73  4.74  4.75  4.76  4.77  4.78  4.79   4.8 
##    17     5    20     3    11     2     4    12    15     6     6     4     3 
##  4.81  4.82  4.83  4.84  4.85  4.86  4.87  4.88  4.89   4.9  4.91  4.92  4.93 
##     2    13     9    10     6    21     7     9     1     4     8     6     7 
##  4.94  4.95  4.96  4.97  4.98  4.99     5  5.01  5.02  5.04  5.05  5.06  5.07 
##     3     9     7     9    14     7     5     1    14    37     4     7     4 
##  5.08  5.09   5.1  5.11  5.12  5.13  5.15  5.16  5.17  5.18  5.19  5.21  5.22 
##    12     7    15    12    13    10     7    13     5    11     6     6    12 
##  5.23  5.24  5.25  5.26  5.27  5.28  5.29   5.3  5.31  5.32  5.33  5.34  5.35 
##     4    13     6     9     3    11    12     8     3    11     5     7     9 
##  5.36  5.37  5.38  5.39   5.4  5.41  5.42  5.43  5.44  5.45  5.46  5.47  5.48 
##     9     3     9     1    15     2     9     7     8     4     3    11     4 
##  5.49   5.5  5.51  5.52  5.53  5.54  5.55  5.56  5.57  5.58  5.59   5.6  5.61 
##     4     5     7    10     2    14     5     6     9     8     5     2     3 
##  5.62  5.63  5.64  5.65  5.66  5.67  5.68  5.69   5.7  5.71  5.72  5.73  5.74 
##    12    12     2     4     8     6     7     8    13    13     9    10     5 
##  5.75  5.76  5.77  5.78  5.79   5.8  5.81  5.82  5.83  5.84  5.85  5.86  5.87 
##     3    28     2     6     2    10     9     4     9     2     9     6     3 
##  5.88  5.89   5.9  5.91  5.92  5.93  5.94  5.95  5.96  5.97  5.98  5.99     6 
##    16     3    15     5    12    14     5     6    13     6    15     7     6 
##  6.01  6.02  6.03  6.04  6.05  6.07  6.08  6.09   6.1  6.11  6.12  6.13  6.14 
##    13     2     3     4    16     5    12     2     4     4    12     5    13 
##  6.15  6.16  6.17  6.18  6.19   6.2  6.21  6.22  6.23  6.24  6.25  6.26  6.27 
##     2    12     2     3    11     6     5     6     8    13     2    13    13 
##  6.28  6.29   6.3  6.31  6.32  6.33  6.34  6.35  6.36  6.37  6.38  6.39   6.4 
##     8     5    15     3     6     3    20     5     8     8    15     4    12 
##  6.41  6.42  6.43  6.44  6.45  6.46  6.47  6.48  6.49   6.5  6.51  6.52  6.53 
##     5     6    13    20     3     4     7     9     2     4     8     6    14 
##  6.54  6.55  6.56  6.57  6.58  6.59   6.6  6.61  6.62  6.63  6.64  6.65  6.66 
##     3     9    11     5     4    10    11     5     5     8     8     4    11 
##  6.67  6.68  6.69   6.7  6.71  6.72  6.73  6.74  6.75  6.76  6.77  6.78  6.79 
##     8     5     7     9     6    30    11     2     3     9     5     6     8 
##   6.8  6.81  6.82  6.83  6.84  6.85  6.86  6.87  6.88  6.89   6.9  6.91  6.92 
##    13     4     5     2    15     5    10     2     4     7    13    14     8 
##  6.93  6.94  6.95  6.96  6.97  6.98  6.99     7  7.01  7.02  7.03  7.04  7.05 
##     6     6    10    19    10     8     5    12     6    11     9    10     6 
##  7.06  7.07  7.08   7.1  7.11  7.12  7.13  7.14  7.15  7.16  7.17  7.18  7.19 
##    16    10    12    10     4     9    12    11     8     4     8    10     4 
##   7.2  7.21  7.22  7.23  7.24  7.25  7.26  7.27  7.28  7.29   7.3  7.31  7.32 
##    15     2    10     8     7    10    11     3    12     8    13     8     6 
##  7.33  7.34  7.35  7.36  7.37  7.38  7.39   7.4  7.41  7.42  7.43  7.44  7.45 
##     8    11     8     5     3    14    10     8     7     2     3    13    12 
##  7.46  7.47  7.48  7.49   7.5  7.51  7.52  7.53  7.54  7.55  7.56  7.57  7.58 
##     5     7    12     9     6     2     8     4     4     1    25     4     2 
##  7.59   7.6  7.61  7.62  7.63  7.64  7.65  7.66  7.67  7.68  7.69   7.7  7.71 
##    11    10     4    20     7     8     7     7    16    15     2     7     5 
##  7.72  7.73  7.74  7.75  7.76  7.77  7.78  7.79   7.8  7.81  7.82  7.83  7.84 
##    14    11    18     5     5     8    10     2    13    10     5    10     5 
##  7.85  7.86  7.87  7.88  7.89   7.9  7.91  7.92  7.94  7.95  7.96  7.97  7.98 
##    21     6    10     8     7     9     7    13     9    14    12     5    14 
##  7.99     8  8.01  8.02  8.03  8.04  8.05  8.06  8.07  8.09   8.1  8.11  8.12 
##     6    10    19     6     2     3     6    22     2    11    17     7     4 
##  8.13  8.14  8.15  8.16  8.17  8.18  8.19   8.2  8.21  8.22  8.23  8.24  8.25 
##     2     6    11     9     4     2    13     1     9     8     6     3     8 
##  8.26  8.27  8.28  8.29   8.3  8.31  8.32  8.33  8.34  8.35  8.36  8.37  8.38 
##     6     7    16     4    14     6    13     5     6    15     3    18     5 
##  8.39   8.4  8.42  8.43  8.44  8.45  8.46  8.47  8.48  8.49   8.5  8.51  8.52 
##     2    20    19     2     7     6     8     1     5     3    13    11     9 
##  8.53  8.54  8.55  8.56  8.57  8.58  8.59   8.6  8.61  8.62  8.63  8.64  8.65 
##     5    10     7    11    14    17     5     7     6     4     5    13     5 
##  8.66  8.67  8.68  8.69   8.7  8.71  8.72  8.73  8.74  8.75  8.76  8.77  8.78 
##     6     5     7     8    15     4     3     9    15     9    10     6    14 
##  8.79   8.8  8.81  8.82  8.83  8.84  8.85  8.86  8.87  8.88  8.89   8.9  8.91 
##     4    11     4    13     5    11     9     9     1    10    11     3     7 
##  8.92  8.93  8.94  8.95  8.96  8.97  8.98  8.99     9  9.01  9.02  9.03  9.04 
##     3    11     7     7    10     7     9     3     7     4    13     5     9 
##  9.05  9.06  9.07  9.08  9.09   9.1  9.11  9.12  9.13  9.14  9.15  9.16  9.17 
##     9     4    15    11     5     1    11     5     5     5     3     6     4 
##  9.18   9.2  9.21  9.22  9.23  9.24  9.25  9.26  9.28  9.29   9.3  9.31  9.32 
##    11    11     2     6    11    14    11     4    12    14    11     7    10 
##  9.33  9.34  9.35  9.36  9.37  9.38  9.39   9.4  9.41  9.42  9.43  9.44  9.45 
##     1     3     8    27     6     1     7     7    15     6     4     8     8 
##  9.46  9.47  9.48  9.49   9.5  9.51  9.52  9.53  9.54  9.55  9.56  9.57  9.58 
##    11     6    10     5    16     4    16     5     7     5     5     8    11 
##  9.59   9.6  9.61  9.62  9.63  9.64  9.65  9.66  9.67  9.68  9.69   9.7  9.71 
##     7    17     4     4    11     3     9     8     9     7     7     6     3 
##  9.72  9.73  9.74  9.75  9.76  9.77  9.78  9.79   9.8  9.81  9.82  9.83  9.84 
##    20     2     9     2     2    21     1     7    15     3     1    15     4 
##  9.85  9.86  9.87  9.88  9.89   9.9  9.91  9.92  9.93  9.94  9.95  9.96  9.97 
##     1    20     5     9     7     8     9     5     8    13     4    11     9 
##  9.98  9.99    10 10.01 10.02 10.03 10.04 10.05 10.06 10.07 10.08 10.09  10.1 
##    10     4     8    10     7     7    11     6     7     4    24     2     6 
## 10.12 10.13 10.14 10.15 10.16 10.17 10.18 10.19  10.2 10.21 10.22 10.23 10.24 
##     6    10     6     8     6     8    10     4     8    12    10     2     4 
## 10.25 10.26 10.27 10.28 10.29  10.3 10.31 10.32 10.33 10.34 10.35 10.36 10.37 
##     9    14     3     5     2    17     4    12     6     6     9     2    16 
## 10.38  10.4 10.41 10.42 10.43 10.44 10.46 10.47 10.48 10.49  10.5 10.51 10.52 
##    11     7     4    14     5    12     3     9     2    12    10    11     4 
## 10.53 10.54 10.55 10.56 10.57 10.58  10.6 10.61 10.62 10.63 10.64 10.65 10.66 
##    11     2     5    16     3    14     9     8    17     6     7     1    10 
## 10.67 10.68 10.69  10.7 10.71 10.72 10.73 10.74 10.75 10.76 10.77 10.78 10.79 
##     7     8    15     8     7     9    13     2    10    10     2     1     5 
##  10.8 10.81 10.82 10.83 10.84 10.85 10.86 10.87 10.88 10.89  10.9 10.91 10.92 
##    17     4     3     5     6     7    13     4    13    13     5     2    23 
## 10.94 10.95 10.96 10.97 10.98 10.99    11 11.01 11.02 11.03 11.04 11.05 11.06 
##    12     6     7     2     9     4    17     1    12     4    26     6     3 
## 11.07 11.08 11.09  11.1 11.12 11.13 11.14 11.15 11.16 11.17 11.18 11.19  11.2 
##     7     7    20     7     9     8     6     6    10    11     3     4     7 
## 11.21 11.22 11.23 11.24 11.25 11.26 11.27 11.28 11.29  11.3 11.31 11.32 11.33 
##     6    11     6     1     6    11     5     9     2     4     9    10     4 
## 11.34 11.35 11.36 11.37 11.38 11.39  11.4 11.41 11.42 11.43 11.44 11.45 11.46 
##    24     8     7     2     4    13    15     3    10     7     5     6     9 
## 11.47 11.48 11.49  11.5 11.51 11.52 11.53 11.54 11.55 11.56 11.57 11.58 11.59 
##     7    11     6    14     5    11     5     5    10     5    11     7    15 
##  11.6 11.61 11.62 11.63 11.64 11.65 11.66 11.68  11.7 11.71 11.72 11.73 11.74 
##     9     6     8    13     9     2    18    10    15     5    11     3     3 
## 11.75 11.76 11.77 11.78 11.79  11.8 11.81 11.82 11.83 11.84 11.85 11.86 11.87 
##     9     8     1    10     9    11     7     6     9    14     4     9     3 
## 11.88 11.89  11.9 11.91 11.92 11.93 11.94 11.95 11.96 11.97 11.98 11.99    12 
##    13     1     6     6     7    14     3     7     3    10     1     7     6 
## 12.01 12.02 12.03 12.04 12.05 12.06 12.07 12.08  12.1 12.11 12.12 12.13 12.14 
##    13     1     9     6     9     3     3    10    15     4     5     2     9 
## 12.15 12.16 12.17 12.18 12.19  12.2 12.21 12.22 12.23 12.24 12.25 12.26 12.27 
##     6     3     5    11     8     6     4    11     3    17     3    11     2 
## 12.28 12.29  12.3 12.31 12.32 12.33 12.34 12.35 12.37 12.38 12.39  12.4 12.41 
##     5     7     6    15     9     4     7    12     4    16     2     6     3 
## 12.42 12.43 12.44 12.45 12.46 12.47 12.48 12.49  12.5 12.51 12.52 12.53 12.54 
##    13    11     6     1     6     9     9     2     5    13     4    16     8 
## 12.55 12.56 12.57 12.58  12.6 12.61 12.62 12.63 12.64 12.65 12.66 12.67 12.68 
##     3    13     3    10    11     3     5     2    12     3     5     7     3 
## 12.69  12.7 12.71 12.72 12.74 12.75 12.76 12.77 12.78 12.79  12.8 12.82 12.83 
##     9     6     5    11     5     1     3     8     6     6     8    11     3 
## 12.84 12.85 12.86 12.87 12.88 12.89  12.9 12.92 12.93 12.94 12.95 12.96 12.97 
##     8     8     3     3     8     2    14     2     2     8     3    19     2 
## 12.98 12.99    13 13.01 13.02 13.03 13.04 13.05 13.06 13.07 13.08  13.1 13.11 
##     4     4     8    11    12     9     7    10    10     8     2    13    10 
## 13.12 13.13 13.14 13.15 13.16 13.17 13.18 13.19  13.2 13.21 13.22 13.23 13.25 
##     6     3     4     4    10     2     4     6    11     2     6     4     9 
## 13.26 13.27 13.28 13.29  13.3 13.31 13.32 13.33 13.34 13.35 13.36 13.37 13.38 
##     5     2    15     3     9     4    13     2    15     5     4     6     7 
## 13.39  13.4 13.41 13.42 13.43 13.44 13.45 13.46 13.47 13.48 13.49  13.5 13.52 
##     5     7     5     8     5    14     4    11     2     3     3     8     9 
## 13.53 13.54 13.55 13.56 13.57 13.58 13.59  13.6 13.61 13.62 13.63 13.64 13.65 
##     6     3     2    10    13     2     1     2     8     4    10     2     7 
## 13.66 13.67 13.68 13.69  13.7 13.71 13.72 13.73 13.74 13.75 13.76 13.77 13.78 
##     2     1    15     5     2     2     5    11     4     4     5     8    10 
## 13.79  13.8 13.81 13.82 13.83 13.84 13.85 13.86 13.87 13.88 13.89  13.9 13.91 
##     2    13     1     4     3     1     2    12     2     9     5     2     5 
## 13.92 13.93 13.94 13.95 13.96 13.97 13.98 13.99    14 14.01 14.02 14.03 14.04 
##     7     5     5     4     5     6     5     8     4     3     3     5    15 
## 14.05 14.06 14.08 14.09  14.1 14.11 14.12 14.13 14.14 14.15 14.16 14.17 14.18 
##     1     5     7     7     3     9    10     1     1    11    16     1     7 
## 14.19  14.2 14.21 14.22 14.24 14.25 14.26 14.27 14.28 14.29  14.3 14.31 14.32 
##     2    14     6     6     3     6    10     3    15     1     8     7     2 
## 14.33 14.34 14.35 14.36 14.38 14.39  14.4 14.41 14.42 14.43 14.44 14.45 14.46 
##     8     6     7    13     1     6    11     1     5     5     4     7     7 
## 14.47 14.48 14.49  14.5 14.51 14.52 14.53 14.54 14.55 14.56 14.58 14.59  14.6 
##     1    10     9    11     4     6    11     4     1     7     4     7     1 
## 14.61 14.62 14.63 14.64 14.65 14.66 14.67 14.69  14.7 14.71 14.72 14.73 14.74 
##     5    11    11     3     3     8    11     2    15     2     3     1     6 
## 14.75 14.76 14.77 14.78 14.79  14.8 14.81 14.82 14.84 14.85 14.86 14.87 14.88 
##     1    13     1    16     4     5     1     9     6    14     1     9     6 
##  14.9 14.92 14.93 14.94 14.95 14.96 14.97 14.98 14.99    15 15.01 15.02 15.03 
##     8     6     1     5     3    15     1     7     4     2     5     4     4 
## 15.04 15.05 15.06 15.07 15.08 15.09  15.1 15.11 15.12 15.13 15.14 15.15 15.16 
##     7    14     2     4     2     1     4     9    30     3     3     4     3 
## 15.17 15.18 15.19  15.2 15.21 15.22 15.23 15.24 15.25 15.26 15.28 15.29  15.3 
##     4    11     1     5     3     4    12     2     6     5     7    11    10 
## 15.31 15.32 15.33 15.34 15.35 15.36 15.37 15.38 15.39  15.4 15.41 15.42 15.44 
##     8     1     1     7     1     4     7     1    14    12     5     5    12 
## 15.46 15.47 15.48 15.49  15.5 15.51 15.52 15.53 15.54 15.55 15.56 15.57 15.58 
##    13     1    15     6     7     7     4     3    11     6     6     6     1 
##  15.6 15.61 15.62 15.63 15.64 15.65 15.66 15.67 15.68 15.69  15.7 15.71 15.72 
##     8     1     6     2     9     4    11     1     2     2     8    17     6 
## 15.73 15.74 15.75 15.76 15.77 15.78 15.79  15.8 15.81 15.82 15.83 15.84 15.85 
##     9     2     5     3     9     4     6     5     4     4     6    10     1 
## 15.86 15.87 15.88 15.89  15.9 15.91 15.92 15.93 15.94 15.95 15.96 15.97 15.98 
##     2     4     8     1    12     8     5     3     9     1    13     1    10 
##    16 16.01 16.02 16.04 16.05 16.06 16.07 16.08 16.09  16.1 16.11 16.12 16.13 
##     2    10     9     7     4     3     5     3     2     8     3     9    16 
## 16.14 16.15 16.16 16.17 16.18 16.19  16.2 16.22 16.24 16.25 16.26 16.27 16.28 
##     3     3     1     2     4     6    12     7     8     4     4     6     6 
## 16.29  16.3 16.32 16.33 16.34 16.37 16.38 16.39  16.4 16.41 16.42 16.43 16.44 
##     5     6    10     2     8     4     9     2     1     3    15     4     3 
## 16.45 16.46 16.47  16.5 16.51 16.52 16.53 16.54 16.56 16.57 16.58 16.59 16.61 
##     4     8     1     5     7     5     5     5     8     5     2    10     6 
## 16.62 16.63 16.64 16.65 16.66 16.67 16.68 16.69  16.7 16.72 16.73 16.74 16.75 
##     6    11     3     2     1     1     5     9    10     2     2     8     1 
## 16.76 16.77 16.78 16.79  16.8 16.81 16.82 16.83 16.85 16.86 16.87 16.88  16.9 
##     4     3     4     1    10     6     6     5     4     5     1     5     6 
## 16.91 16.92 16.93 16.94 16.95 16.96 16.97 16.98 16.99    17 17.01 17.02 17.03 
##     1    10     9     1     2     1     3     5     3     3     1     7     3 
## 17.04 17.08 17.09  17.1 17.11 17.12 17.14 17.15 17.16 17.17 17.18 17.19  17.2 
##    14     1     3     6     4     5     9     1     5     5     3     2     8 
## 17.21 17.22 17.23 17.24 17.25 17.26 17.28 17.29  17.3 17.31 17.32 17.33 17.34 
##     3     2     6     1     5     1    13     1     3     2     1     7     1 
## 17.35 17.36 17.37 17.38 17.39  17.4 17.41 17.42 17.43 17.45 17.46 17.47 17.48 
##     2     2     4     6     1     5     1     3     1     1     5    10     3 
## 17.49  17.5 17.51 17.52 17.53 17.54 17.55 17.57 17.58  17.6 17.61 17.62 17.63 
##     5     4     3     6     1     2     3     5     3     2     2     3     6 
## 17.64 17.65 17.66 17.67 17.68  17.7 17.71 17.72 17.73 17.74 17.75 17.76 17.77 
##     7     2     9     1     3    10     5     1     7     1     2    11     2 
## 17.78 17.79  17.8 17.81 17.82 17.85 17.86 17.87 17.88 17.89  17.9 17.91 17.92 
##     7     1     6     3     4     1     6     3     6     6     6     1     5 
## 17.93 17.94 17.95 17.96 17.98 17.99    18 18.01 18.02 18.03 18.04 18.05 18.06 
##     5     5     8     1     5     4    10     1     5     4     1     4     1 
## 18.07 18.08  18.1 18.11 18.13 18.14 18.15 18.16 18.17 18.18  18.2 18.21 18.22 
##     4     8     8     2     1    17     8     3     1     1     1     3     5 
## 18.23 18.24 18.25 18.27 18.28 18.29  18.3 18.31 18.32 18.33 18.34 18.35 18.36 
##     2     8     2     3     1    11     4     8     4     3     1     1     6 
## 18.37 18.38 18.39  18.4 18.41 18.43 18.45 18.46 18.47 18.48  18.5 18.51 18.53 
##     3     2     3     7     4     5     1     4     1    10     6     5     7 
## 18.54 18.55 18.56 18.58 18.59  18.6 18.61 18.62 18.63 18.64 18.65 18.66 18.67 
##     2     1     9     6     3     6     2     5     4     1     6     2     4 
## 18.68 18.69  18.7 18.71 18.72 18.74 18.77 18.78 18.79  18.8 18.81 18.82 18.83 
##     5     1     6     4     7     5    10     2     7     4     2     3     1 
## 18.84 18.85 18.86 18.87 18.88  18.9 18.91 18.92 18.93 18.94 18.95 18.96 18.97 
##     3     4     3     3     4     9     1     2     6     8     2    12     3 
## 18.98 18.99    19 19.01 19.02 19.03 19.04 19.05 19.06 19.07 19.08  19.1 19.11 
##     4     2     1     5     1     4     4     3     1     9     9     4     8 
## 19.12 19.13 19.14 19.15 19.17 19.18 19.19  19.2 19.21 19.22 19.23 19.24 19.26 
##     3     1     7     2     2     4     2     4     3     4     2     3    10 
## 19.27 19.28  19.3 19.31 19.32 19.33 19.34 19.35 19.37 19.38 19.39  19.4 19.41 
##     6     8     2     2    10     4     6     5     2     6     5     4     1 
## 19.42 19.43 19.44 19.45 19.46 19.47 19.48 19.49  19.5 19.51 19.52 19.53 19.54 
##     2     6     9     7     1     2     1    10     1     4     5     2     3 
## 19.55 19.56 19.57 19.58  19.6 19.62 19.65 19.66 19.67 19.68  19.7 19.71 19.72 
##     7     2     1     5     8     5     4    11     4     6     2     9     5 
## 19.73 19.74 19.75 19.76 19.78 19.79  19.8 19.81 19.82 19.84 19.85 19.86 19.87 
##     3     3     4     6     1     3     5     2     5     1     3     4     4 
## 19.88 19.89  19.9 19.91 19.92 19.93 19.94 19.95 19.97 19.98 19.99    20 20.01 
##     5     5     2     2     9     1     8     5     5     3     3     1     5 
## 20.02 20.04 20.05 20.06 20.07 20.08 20.09  20.1 20.12 20.13 20.15 20.16 20.18 
##     3     1     6     3     4     1     1     4     1     2     5    13     2 
##  20.2 20.22 20.23 20.24 20.25 20.26 20.27 20.28 20.29  20.3 20.33 20.34 20.35 
##     6     9     3     7     8     1     2     3     3     8     6     3     4 
## 20.36 20.38  20.4 20.41 20.42 20.43 20.45 20.47 20.48 20.49  20.5 20.51 20.52 
##     1     7     4     5     7     2     6     1     4     4     1     2    16 
## 20.53 20.54 20.55 20.57 20.58 20.59 20.61 20.62 20.63 20.64 20.65 20.66 20.67 
##     4     1     1     2     3     8     2     1     6     4     3     3     5 
## 20.68 20.69  20.7 20.71 20.72 20.73 20.74 20.75 20.76 20.78 20.79 20.81 20.82 
##     1     1    10     2     4     1     5    10     4     2     5     3     2 
## 20.83 20.84 20.85 20.86 20.88  20.9 20.92 20.93 20.94 20.95 20.97 20.98 20.99 
##     4     2     2     2     5     5     6     1     3     2     2    11     1 
##    21 21.01 21.02 21.05 21.06 21.08  21.1 21.11 21.12 21.13 21.14 21.15 21.16 
##     8     2     3     2     3     4     2     3     7     2     1     5     2 
## 21.17  21.2 21.21 21.22 21.23 21.24 21.25 21.26 21.28 21.29  21.3 21.31 21.32 
##     7     5     2     8     6     4     4     1     6     1     4     3     2 
## 21.33 21.34 21.36 21.37 21.38 21.39  21.4 21.41 21.42 21.43 21.44 21.45 21.46 
##     4     3     6     1    10     2     2     1     3     2     3     1     2 
## 21.47 21.48 21.49  21.5 21.51 21.52 21.53 21.54 21.56 21.58  21.6 21.61 21.62 
##     7     2     5     3     2     1     7     1     2     2     8     2     2 
## 21.63 21.66 21.67 21.68 21.69  21.7 21.71 21.72 21.73 21.74 21.75 21.76 21.77 
##     2     8     3     2     4     2     3     5     1     2     1     5     1 
## 21.78 21.79  21.8 21.81 21.84 21.87 21.88 21.89  21.9 21.91 21.92 21.94 21.95 
##     3     1     2     2    10     3     1     2     5     4     1     1     3 
## 21.96 21.98 21.99    22 22.01 22.03 22.04 22.05 22.06 22.07 22.08 22.09  22.1 
##     4     3     3     2     5     1     1     4     1     1     3     3     3 
## 22.11 22.12 22.13 22.14 22.15 22.17 22.18  22.2 22.21 22.23 22.24 22.26 22.27 
##     1     4     4     4     4     2     4     5     1     4     2     6     6 
## 22.28 22.29  22.3 22.32 22.33 22.34 22.35 22.36 22.37 22.38 22.39  22.4 22.41 
##     1     1     3     4     3     1     2     7     5     1     5     6     4 
## 22.42 22.43 22.44 22.45 22.46 22.48 22.49  22.5 22.51 22.52 22.53 22.54 22.56 
##     3     5     8     2     3     1     1     3     3     4     2     9     6 
## 22.57 22.58  22.6 22.61 22.62 22.63 22.64 22.66 22.67 22.68 22.69  22.7 22.71 
##     3     1     4     1     9     3     3     2     1    10     2     6     2 
## 22.72 22.74 22.75 22.76 22.77 22.78  22.8 22.82 22.84 22.85 22.86 22.88  22.9 
##     3     2     2     2     1     6     4     1     2     7     2     6     1 
## 22.91 22.92 22.93 22.95 22.97 22.98    23 23.01 23.02 23.04 23.05 23.06 23.08 
##     4     7     2     1     4     1     7     1     1     3     2     8     1 
## 23.09  23.1 23.11 23.12 23.13 23.14 23.16 23.17 23.18 23.19  23.2 23.22 23.23 
##     2     9     1     1     4     6     1     3     6     1     1     4     1 
## 23.24 23.25 23.26 23.27 23.28  23.3 23.31 23.32 23.33 23.34 23.35 23.36 23.38 
##     2     3     1     6     2     3     1     7     4     1     3     2     1 
## 23.39  23.4 23.42 23.44 23.46 23.49  23.5 23.52 23.53 23.54 23.55 23.56 23.57 
##     1     3     1     1     3     2     5     8     1     2     1     4     2 
## 23.58  23.6 23.61 23.62 23.63 23.64 23.65 23.66 23.67 23.68 23.69  23.7 23.71 
##     3     6     1     2     2     3     4     1     4     4     3     3     3 
## 23.72 23.73 23.74 23.76  23.8 23.81 23.82 23.83 23.84 23.85 23.86 23.88  23.9 
##     1     3     2    10     4     5     1     2     1     7     5     2     6 
## 23.92 23.93 23.94 23.97 23.98    24 24.01 24.02 24.05 24.06 24.08  24.1 24.11 
##     2     5     6     1     3     3     4     2     1     1     5     4     4 
## 24.12 24.13 24.14 24.15 24.16 24.19  24.2 24.23 24.26 24.28 24.29  24.3 24.32 
##     2     2     2     4     1     6     2     1     1     2     7     4     1 
## 24.34 24.36 24.38 24.42 24.44 24.45 24.48 24.53 24.55 24.56 24.58  24.6 24.61 
##     2     1     3     1     4     5     3     2     1     1     1     2     2 
## 24.62 24.63 24.64 24.66 24.68  24.7 24.71 24.73 24.75 24.76 24.77  24.8 24.82 
##     5     2     5     1     3     5     2     2     4     1     1     1     1 
## 24.83 24.84 24.85 24.86 24.88 24.89  24.9 24.91 24.93 24.95 24.96 24.97 24.98 
##     1     8     2     7     4     3     3     4     3     3     1     4     2 
##    25 25.01 25.02 25.03 25.04 25.05 25.06 25.07 25.08  25.1 25.12 25.13 25.14 
##     1     1     3     2     1     1     5     1     4     1     3     1     2 
## 25.15 25.16  25.2 25.21 25.23 25.25 25.27 25.28 25.29  25.3 25.31 25.32 25.34 
##     2     1     4     1     3     2     6     3     1     2     3     2     2 
## 25.35 25.36 25.38 25.39  25.4 25.41 25.43 25.47 25.48 25.49  25.5 25.51 25.52 
##     2     1     7     3     3     2     3     2     1     3     1     1     1 
## 25.53 25.54 25.56 25.58  25.6 25.61 25.63 25.64 25.65 25.66 25.67 25.68 25.69 
##     2     3     4     4     2     1     3     1     3     2     5     1     1 
##  25.7 25.74 25.75 25.76 25.77 25.78  25.8 25.81 25.82 25.83 25.84 25.87  25.9 
##     3     3     3     2     1     1     2     4     1     1     3     2     5 
## 25.91 25.92 25.94 25.95 25.96 25.98 25.99    26 26.03 26.04 26.05 26.06 26.07 
##     1     7     2     1     1     2     2     4     3     2     3     3     5 
## 26.08  26.1 26.11 26.12 26.14 26.15 26.16 26.18 26.19 26.21 26.22 26.25 26.27 
##     2     4     2     3     1     1     2     1     3     3     3     2     2 
## 26.28 26.29  26.3 26.31 26.32 26.33 26.36 26.37 26.38  26.4 26.41 26.42 26.43 
##     3     1     4     3     2     2     5     3     3     3     1     1     2 
## 26.44 26.45 26.46  26.5 26.52 26.54 26.55 26.57 26.59 26.63 26.64 26.65 26.66 
##     1     1     1     7     2     3     3     2     2     2     4     2     1 
## 26.68 26.69  26.7 26.71 26.73 26.75 26.77 26.78  26.8 26.82 26.83 26.84 26.87 
##     4     1     1     3     3     2     2     1     6     1     2     1     1 
## 26.88 26.89 26.91 26.93 26.94 26.96 26.97 26.98 26.99    27 27.03 27.05 27.06 
##     4     1     3     2     2     4     3     2     4     4     2     1     2 
## 27.08  27.1 27.12 27.14 27.16 27.17 27.19 27.22 27.23 27.24 27.27  27.3 27.32 
##     1     1     5     6     1     1     1     6     1     2     1     3     3 
## 27.36 27.38 27.42 27.43 27.44 27.45 27.46 27.47 27.52 27.55 27.56 27.58  27.6 
##     2     3     1     1     1     1     2     2     1     3     3     1     7 
## 27.64 27.65 27.66 27.69  27.7 27.72 27.74 27.75 27.77  27.8 27.86 27.89  27.9 
##     2     3     3     1     1     3     1     2     1     1     1     1     1 
## 27.93 27.94 27.95 27.96 27.97 27.98    28 28.03 28.04 28.05 28.08 28.12 28.15 
##     3     5     1     2     5     1     7     1     1     1     4     1     1 
## 28.16 28.19  28.2 28.21 28.22 28.24 28.26 28.27  28.3 28.32 28.34 28.35 28.37 
##     1     2     2     1     6     3     1     2     1     1     1     1     2 
## 28.42 28.43 28.44 28.45 28.47 28.48 28.51 28.53 28.54 28.55 28.56 28.57 28.58 
##     3     1     6     1     1     3     5     4     1     2     4     1     1 
## 28.61 28.62 28.64 28.65 28.66 28.67 28.69  28.7 28.71 28.73 28.78  28.8 28.81 
##     2     3     4     4     3     1     1     5     2     2     2     7     2 
## 28.86 28.88  28.9 28.92 28.95 28.96 28.97 28.98    29 29.01 29.03 29.04 29.06 
##     2     1     5     1     1     1     2     1     1     1     1     1     2 
## 29.07 29.12 29.13 29.16 29.17 29.22 29.23 29.24 29.25 29.26 29.27  29.3 29.32 
##     2     3     1     2     2     1     1     1     2     1     3     5     3 
## 29.33 29.34 29.35 29.38  29.4 29.41 29.43 29.44 29.46 29.48 29.49  29.5 29.52 
##     4     2     2     1     1     3     2     2     1     6     1     2     3 
## 29.54 29.55 29.57 29.58 29.59  29.6 29.63 29.64 29.68  29.7 29.72 29.74 29.75 
##     1     2     1     1     3     1     1     3     2     2     1     2     1 
## 29.79  29.8 29.82 29.84 29.85 29.86 29.88 29.89  29.9 29.93 29.95 30.02 30.03 
##     5     1     2     1     3     1     2     1     1     4     2     1     1 
## 30.06  30.1 30.11 30.14 30.16 30.19 30.21 30.24 30.26 30.27 30.29 30.32 30.35 
##     2     2     1     2     3     2     1     2     3     1     2     2     1 
## 30.36 30.38 30.41 30.42 30.43 30.45 30.46  30.5 30.51 30.53 30.54 30.56 30.58 
##     3     2     2     1     1     3     2     2     2     1     2     1     2 
## 30.62 30.63 30.67  30.7 30.72 30.74 30.78  30.8 30.81 30.82 30.86 30.87 30.89 
##     4     1     1     1     1     4     4     2     2     1     2     1     5 
## 30.91 30.96 30.97 30.98 30.99    31 31.02 31.04 31.05 31.06 31.08  31.1 31.13 
##     8     5     1     1     1     1     8     3     1     1     6     6     1 
## 31.14 31.19 31.21 31.23 31.25 31.27 31.28 31.33 31.35 31.36 31.41 31.42 31.43 
##     4     1     1     1     1     1     1     1     2     2     3     3     1 
## 31.47 31.49  31.5 31.51 31.55 31.56 31.58 31.59  31.6 31.64 31.65 31.67 31.68 
##     2     1     1     2     1     2     2     1     1     1     1     3     2 
##  31.7 31.76 31.77 31.78  31.8 31.81 31.83 31.84  31.9 31.95 31.97 31.98    32 
##     2     1     2     1     1     2     2     1     1     1     1     1     1 
## 32.02 32.03 32.08 32.09  32.1 32.11 32.14 32.16 32.17 32.18 32.22 32.32 32.34 
##     3     1     2     1     2     1     1     1     1     1     1     1     3 
##  32.4 32.47 32.48 32.51 32.52 32.54 32.55 32.59 32.63 32.64 32.68  32.7 32.76 
##     1     1     3     3     2     3     1     2     1     2     1     1     3 
## 32.82 32.84 32.85 32.88 32.89 32.97    33 33.02 33.04 33.06  33.1 33.12 33.15 
##     1     3     1     4     1     1     1     1     2     2     1     7     2 
## 33.18 33.21 33.23 33.26 33.38  33.4 33.48  33.5 33.52 33.53 33.57  33.6 33.66 
##     2     1     1     1     3     1     1     2     2     1     1     2     2 
## 33.67 33.72 33.75 33.76 33.79  33.8 33.84 33.86 33.88  33.9 33.91 33.93 33.96 
##     1     1     1     3     1     1     3     1     1     1     1     2     2 
## 33.97 34.01 34.02  34.1 34.11 34.13  34.2 34.22 34.23 34.29  34.3 34.32 34.34 
##     1     1     2     1     1     1     4     4     1     1     2     1     1 
## 34.35 34.37 34.41 34.42 34.47  34.5 34.54 34.56 34.57  34.6 34.63 34.65 34.66 
##     1     3     2     2     1     2     1     3     1     1     2     2     3 
## 34.67 34.68 34.78  34.8 34.83 34.85 34.92 34.94 35.01 35.06 35.07  35.1 35.16 
##     1     2     2     1     1     2     2     1     1     1     1     2     2 
## 35.19 35.24 35.25 35.26 35.28 35.33 35.37  35.4 35.52 35.55 35.67 35.72 35.73 
##     3     1     2     1     2     3     1     2     2     2     1     1     1 
## 35.78 35.88 35.91 35.95 35.97 35.98 36.06 36.07 36.16 36.19  36.2  36.3 36.34 
##     1     2     1     1     1     1     2     1     1     1     1     1     4 
## 36.48  36.5 36.58 36.61 36.62 36.66 36.67  36.7 36.72 36.75 36.77 36.89  36.9 
##     2     1     1     3     1     1     1     1     1     1     3     2     2 
## 36.92 36.98    37 37.05 37.07  37.1 37.12 37.23 37.24 37.26 37.28  37.3 37.32 
##     1     1     4     1     1     1     1     2     2     1     1     1     1 
## 37.37 37.44 37.54 37.58 37.63 37.65 37.73  37.8  37.9 37.92 37.93 38.04 38.07 
##     1     1     2     1     1     1     1     2     1     2     1     1     1 
##  38.1 38.11 38.16 38.17 38.18  38.2 38.27 38.28  38.4 38.42 38.48  38.5 38.52 
##     1     1     1     1     1     1     1     1     2     3     1     1     1 
##  38.6 38.63 38.64 38.66 38.74 38.77 38.88 39.09  39.1 39.12 39.15  39.2 39.24 
##     1     1     1     1     1     1     3     1     4     2     1     2     2 
## 39.31 39.42 39.48  39.5 39.52 39.62 39.63 39.72 39.73 39.75  39.8 39.83 39.84 
##     2     1     1     3     1     2     1     1     1     1     1     1     1 
## 40.01 40.04 40.14 40.25 40.32 40.37 40.48  40.5  40.6 40.65 40.66 40.72 40.75 
##     1     2     1     1     1     1     2     1     4     1     1     2     1 
## 40.77  40.8 40.82 40.83 40.87 41.04 41.08  41.1 41.28  41.3 41.33 41.36 41.39 
##     1     1     1     1     1     3     1     1     2     1     1     1     2 
## 41.41 41.47 41.53 41.55 41.58 41.64 41.69 41.88 41.89 42.12 42.22 42.24 42.44 
##     1     1     1     1     2     1     1     1     1     1     1     3     1 
## 42.56 42.57 42.77 42.78  42.9 42.96 43.12 43.23 43.32 43.62 43.68  43.8 43.85 
##     1     1     1     1     1     1     2     1     1     1     2     2     1 
## 43.95  44.1 44.16  44.2 44.24 44.55 44.78 44.89 45.24 45.25 45.36 45.37  45.6 
##     1     1     2     2     2     2     1     1     1     1     1     1     1 
## 45.72 45.94 45.96 46.08  46.8 47.04  47.1 47.25 47.28 47.32  47.4 47.58 48.25 
##     2     1     1     3     1     1     1     1     1     1     2     1     1 
##    49 49.25 49.28 49.75 50.17 50.54 52.35  52.8 53.19  54.3 54.46  56.7 
##     1     1     1     1     1     1     1     1     1     1     1     1
ggplot(data, aes(x = Revenue)) +
  geom_histogram(bins = 30, fill = "blue", color = "white") +
  labs(title = "Phân phối Doanh thu", x = "Revenue", y = "Frequency") +
  theme_minimal()

Vẽ biểu đồ cột cho Top 10 khu vực có doanh doanh thu thấp nhất

library(ggplot2)
bottom_cities <- aggregate(Revenue ~ City, data = data, sum)
bottom_cities <- bottom_cities[order(bottom_cities$Revenue), ][1:10, ]

ggplot(bottom_cities, aes(x = reorder(City, Revenue), y = Revenue)) +
  geom_bar(stat = "identity", fill = "red") +
  coord_flip() +
  labs(title = "Top 10 Khu Vực có Tổng Doanh Thu Thấp Nhất",
       x = "Khu vực (City)",
       y = "Tổng Doanh thu") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title = element_text(size = 12)
  )

So sánh doanh thu theo giới tính

ggplot(data, aes(x = Gender, y = Revenue)) +
  geom_boxplot(fill = "coral") +
  labs(title = "So sánh Doanh thu giữa Nam và Nữ") +
  theme_minimal()

5.Kết luận

Qua phân tích thống kê mô tả một số biến nỗi bật, ta nhận thấy:

  • Các biến định lượng thể hiện sự phân tán rõ rệt giữa các nhóm khách hàng và sản phẩm, cho thấy sự khác biệt đáng kể trong hành vi tiêu dùng.

  • Các biến định tính phản ánh sự đa dạng phong phú trong tập khách hàng cũng như danh mục sản phẩm.

  • Doanh thu chủ yếu tập trung tại một số bang, thành phố và nhóm sản phẩm cụ thể, mở ra tiềm năng để tối ưu hóa và định hướng chiến lược kinh doanh hiệu quả hơn.

Thống kê mô tả đóng vai trò là bước chuẩn bị quan trọng, làm nền tảng cho các phân tích nâng cao hơn.

LS0tDQp0aXRsZTogIk5oaeG7h20gVuG7pSBUdeG6p24gMSINCmF1dGhvcjogIk5n4buNYyBUcsOibSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIHRvYzogdHJ1ZQ0KICBwZGZfZG9jdW1lbnQ6DQogICAgbGF0ZXhfZW5naW5lOiB4ZWxhdGV4DQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KPHN0eWxlPg0KYm9keSB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgc2Fucy1zZXJpZjsNCiAgZm9udC1zaXplOiAxNnB4Ow0KICB0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KfQ0KaDIgew0KICBjb2xvcjogYmxhY2s7DQp9DQpoMyB7DQogIGNvbG9yOiBibGFjazsNCn0NCjwvc3R5bGU+DQojIDxzcGFuIHN0eWxlPSIgY29sb3I6IEJsYWNrOyI+KioqUGjhuqduIHTDs20gdOG6r3Qgc8OhY2ggMjAxOV9HZW5lcmFsaXplZCBMaW5lYXIgTW9kZWxzIFdpdGggRXhhbXBsZXMqKio8L3NwYW4+DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KDQojIyAqKkNoxrDGoW5nIDE6IE3DtCBow6xuaCB0aOG7kW5nIGvDqioqDQoqKipNw7QgaMOsbmggdGjhu5FuZyBrw6ogbMOgIGPDtG5nIGPhu6Uga+G6v3QgaOG7o3AgZ2nhu69hIGzDvSB0aHV54bq/dCB4w6FjIHN14bqldCB2w6AgZOG7ryBsaeG7h3UgcXVhbiBzw6F0LiBDaMawxqFuZyBuw6B5IGN1bmcgY+G6pXAgbuG7gW4gdOG6o25nIGPGoSBi4bqjbiB24buBIGPhuqV1IHRyw7pjLCBjaOG7qWMgbsSDbmcgdsOgIGdp4bubaSBo4bqhbiBj4bunYSBtw7QgaMOsbmggdGjhu5FuZyBrw6ouIMSQw6J5IGzDoCBjxqEgc+G7nyBjaG8gY8OhYyBtw7QgaMOsbmggdHV54bq/biB0w61uaCB04buVbmcgcXXDoXQgKEdMTXMpIMSRxrDhu6NjIHBow6F0IHRyaeG7g24gdHJvbmcgY8OhYyBjaMawxqFuZyB0aeG6v3AgdGhlby4qKioNCg0KIyMjICoqMS4xIEtow6FpIG5p4buHbSBtw7QgaMOsbmggdGjhu5FuZyBrw6oqKg0KICBNw7QgaMOsbmggdGjhu5FuZyBrw6ogbMOgIG3hu5l0IGPDtG5nIGPhu6UgdG/DoW4gaOG7jWMgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgbcO0IHThuqMsIHBow6JuIHTDrWNoIHbDoCBk4buxIMSRb8OhbiBjw6FjIGhp4buHbiB0xrDhu6NuZyBjw7MgeeG6v3UgdOG7kSBuZ+G6q3Ugbmhpw6puLiBUcm9uZyBjw6FjIGzEqW5oIHbhu7FjIG5oxrAga2hvYSBo4buNYywgeMOjIGjhu5lpIHbDoCBr4bu5IHRodeG6rXQsIG3DtCBow6xuaCB0aOG7kW5nIGvDqiDEkcOzbmcgdmFpIHRyw7IgbMOgIGPhuqd1IG7hu5FpIGdp4buvYSBk4buvIGxp4buHdSB0aOG7sWMgbmdoaeG7h20gdsOgIGzDvSB0aHV54bq/dCBwaMOibiB0w61jaC4NCg0KICBUaGVvIER1bm4gJiBTbXl0aCAoMjAxOSksIG3DtCBow6xuaCB0aOG7kW5nIGvDqiBiYW8gZ+G7k20gaGFpIHRow6BuaCBwaOG6p24gY2jDrW5oOg0KDQogIC0gVGjDoG5oIHBo4bqnbiBo4buHIHRo4buRbmcgKFN5c3RlbWF0aWMgQ29tcG9uZW50KTogTcO0IHThuqMgbeG7kWkgcXVhbiBo4buHIGPDsyBj4bqldSB0csO6YyBnaeG7r2EgY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCAoY292YXJpYXRlcyBob+G6t2MgcHJlZGljdG9ycykgdsOgIHRydW5nIGLDrG5oIGPhu6dhIGJp4bq/biBwaOG6o24gaOG7k2kuDQoNCiAgLSBUaMOgbmggcGjhuqduIG5n4bqrdSBuaGnDqm4gKFJhbmRvbSBDb21wb25lbnQpOiBNw7QgdOG6oyBz4buxIGRhbyDEkeG7mW5nIG5n4bqrdSBuaGnDqm4geHVuZyBxdWFuaCBnacOhIHRy4buLIHRydW5nIGLDrG5oLCB0aMaw4budbmcgxJHGsOG7o2MgZ2nhuqMgxJHhu4tuaCB0aGVvIG3hu5l0IHBow6JuIHBo4buRaSB4w6FjIHN14bqldCBj4bulIHRo4buDIG5oxrAgcGjDom4gcGjhu5FpIGNodeG6qW4sIFBvaXNzb24gaG/hurdjIG5o4buLIHRo4bupYy4NCg0KICBN4bulYyB0acOqdSBj4bunYSBtw7QgaMOsbmggdGjhu5FuZyBrw6ogbMOgOg0KDQogIC0gSGnhu4N1IHLDtSBj4bqldSB0csO6YyBk4buvIGxp4buHdS4NCg0KICAtIEThu7EgxJFvw6FuIGvhur90IHF14bqjIHRyb25nIHTGsMahbmcgbGFpLg0KDQogIC0gVOG7lW5nIHF1w6F0IGjDs2EgdOG7qyBt4bqrdSBk4buvIGxp4buHdSByYSB0b8OgbiBi4buZIHF14bqnbiB0aOG7gy4gDQoNCiMjIyAqKjEuMi4gTcO0IGjDrG5oIGjDs2EgbeG7kWkgcXVhbiBo4buHIGdp4buvYSBjw6FjIGJp4bq/bioqDQoNCkThu68gbGnhu4d1IHRo4buRbmcga8OqIHRoxrDhu51uZyBiYW8gZ+G7k206DQoNCi0gTeG7mXQgYmnhur9uIHBo4bqjbiBo4buTaSAqeSogKGJp4bq/biBwaOG7pSB0aHXhu5ljKS4NCi0gTeG7mXQgaG/hurdjIG5oaeG7gXUgYmnhur9uIGdp4bqjaSB0aMOtY2ggJHhfMSwgeF8yLCBcbGRvdHMsIHhfcCQgKGJp4bq/biDEkeG7mWMgbOG6rXApLg0KDQpWw60gZOG7pTogTcO0IGjDrG5oIGjDs2EgKEZFVikgdGhlbyB0deG7lWkgdsOgIGNoaeG7gXUgY2FvOg0KDQokJA0KXG11X2kgPSBcbWF0aGJie0V9W3lfaV0gPSBcYmV0YV8wICsgXGJldGFfMSBcdGV4dHtBZ2V9X2kgKyBcYmV0YV8yIFx0ZXh0e0h0fV9pDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotICRcbXVfaSQ6IGvhu7MgduG7jW5nIGPhu6dhIGJp4bq/biBwaOG6o24gaOG7k2kgdOG6oWkgcXVhbiBzw6F0IHRo4bupICppKiAgDQotICRcYmV0YV9qJDogaOG7hyBz4buRIGjhu5NpIHF1eSDhu6luZyB24bubaSBiaeG6v24gJHhfaiQNCg0KIyMjICoqMS4zLiBCaeG6v24gxJHhu4tuaCB0w61uaCB2w6AgxJHhu4tuaCBsxrDhu6NuZyoqDQoNCiAtIEJp4bq/biDEkeG7i25oIGzGsOG7o25nIChRdWFudGl0YXRpdmUpOiBUdeG7lWksIGNoaeG7gXUgY2FvLCBjw6JuIG7hurduZy4uLg0KDQogLSBCaeG6v24gxJHhu4tuaCB0w61uaCAoUXVhbGl0YXRpdmUvQ2F0ZWdvcmljYWwpOiBHaeG7m2kgdMOtbmgsIHTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjLi4uDQoNCiAgQmnhur9uIMSR4buLbmggdMOtbmggY+G6p24gxJHGsOG7o2MgbcOjIGjDs2EgdGjDoG5oIGJp4bq/biBnaeG6oyAoZHVtbXkgdmFyaWFibGVzKSDEkeG7gyBz4butIGThu6VuZyB0cm9uZyBtw7QgaMOsbmguIA0KDQojIyMgKioxLjQuIEPDoWMgZOG6oW5nIG3DtCBow6xuaCB0aOG7kW5nIGvDqioqDQpNw7QgaMOsbmggdHV54bq/IHTDrW5oIMSRxqFuDQoNCiQkDQpcbXVfaSAgPSBcYmV0YV8wICsgXGJldGFfMSBcdGV4dHt4fV9pIA0KJCQNCk3DtCBow6xuaCB0dXnhur9uIHTDrW5oIMSRYSBiaeG6v24NCg0KJCQNClxtdV9pID0gXGJldGFfMCArIFxiZXRhXzEgeF97MWl9ICsgXGJldGFfMiB4X3syaX0gKyBcY2RvdHMgKyBcYmV0YV9wIHhfe3BpfQ0KJCQNCk3DtCBow6xuaCB0dXnhur9uIHTDrW5oIHThu5VuZyBxdcOhdCAoR0xNcyk6IE3hu58gcuG7mW5nIG3DtCBow6xuaCB0dXnhur9uIHTDrW5oIGtoaSBiaeG6v24gcGjhuqNuIGjhu5NpIGtow7RuZyB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluLCBiYW8gZ+G7k206DQoNCiAgLSBOaOG7iyB0aOG7qWM6IGThu68gbGnhu4d1IG5o4buLIHBow6JuDQoNCiAgLSBQb2lzc29uOiBk4buvIGxp4buHdSDEkeG6v20NCg0KICAtIEdhbW1hOiBk4buvIGxp4buHdSBkxrDGoW5nIGxpw6puIHThu6VjDQogIA0KIyMjICoqMS41LiBWYWkgdHLDsiBj4bunYSBtw7QgaMOsbmggdGjhu5FuZyBrw6oqKg0KDQpNw7QgaMOsbmggdGjhu5FuZyBrw6ogY8OzIHZhaSB0csOyOg0KDQogIC0gR2nhuqNpIHRow61jaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGPDoWMgYmnhur9uLg0KDQogIC0gROG7sSDEkW/DoW4gYmnhur9uIHBo4bqjbiBo4buTaSB0cm9uZyB0xrDGoW5nIGxhaS4NCg0KICAtIEtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IHRo4buRbmcga8OqLg0KDQogIC0gVOG7lW5nIHF1w6F0IGjDs2Ega+G6v3QgcXXhuqMgdOG7qyBt4bqrdSBsw6puIHRvw6BuIGLhu5kgcXXhuqduIHRo4buDDQoNCiMjIyAqKjEuNi4gxJDhurdjIMSRaeG7g20gY+G7p2EgbcO0IGjDrG5oIHRo4buRbmcga8OqKioNCg0KQ2jDrW5oIHjDoWMgKEFjY3VyYWN5KTogROG7sSDEkW/DoW4gZ+G6p24gxJHDum5nIGdpw6EgdHLhu4sgdGjhu7FjLg0KDQrEkMahbiBnaeG6o24gKFBhcnNpbW9ueSk6IFRyw6FuaCBz4butIGThu6VuZyBxdcOhIG5oaeG7gXUgYmnhur9uLCBnaeG6o20gbmd1eSBjxqEgb3ZlcmZpdHRpbmcuDQoNCkRp4buFbiBnaeG6o2kgxJHGsOG7o2MgKEludGVycHJldGFiaWxpdHkpOiBI4buHIHPhu5EgY8OzIMO9IG5naMSpYSB0aOG7sWMgdOG6vyB2w6AgZOG7hSBoaeG7g3UuDQoNCiMjIyAqKjEuNy4gUGjDom4gYmnhu4d0IG3DtCBow6xuaCB24bqtdCBsw70gdsOgIG3DtCBow6xuaCB0aOG7kW5nIGvDqioqDQoNCnwgTcO0IGjDrG5oIHbhuq10IGzDvSAgICAgICAgICAgICAgICAgICAgIHwgTcO0IGjDrG5oIHRo4buRbmcga8OqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IEThu7FhIHRyw6puIGPDoWMgxJHhu4tuaCBsdeG6rXQgdOG7sSBuaGnDqm4gICB8IEThu7FhIHRyw6puIGThu68gbGnhu4d1IHF1YW4gc8OhdCAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBDaMOtbmggeMOhYyB0cm9uZyDEkWnhu4F1IGtp4buHbiBsw70gdMaw4bufbmd8IEPDsyBzYWkgc+G7kSBuZ+G6q3Ugbmhpw6puICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgQ8OzIHRo4buDIGtp4buDbSBuZ2hp4buHbSBs4bq3cCBs4bqhaSAgICAgICAgfCBE4buxYSB0csOqbiB4w6FjIHN14bqldCB2w6Aga2nhu4NtIMSR4buLbmggdGjhu5FuZyBrw6ogICAgICAgICB8DQojIyMgKioxLjguIEThu68gbGnhu4d1IHRow60gbmdoaeG7h20gdsOgIHF1YW4gc8OhdCoqDQoNClRow60gbmdoaeG7h20gKEV4cGVyaW1lbnQpOiBOaMOgIG5naGnDqm4gY+G7qXUgY2FuIHRoaeG7h3AgdsOgIGtp4buDbSBzb8OhdCBiaeG6v24g4oaSIGPDsyB0aOG7gyByw7p0IHJhIGvhur90IGx14bqtbiBuaMOibiBxdeG6oy4NCg0KUXVhbiBzw6F0IChPYnNlcnZhdGlvbmFsIHN0dWR5KTogVGh1IHRo4bqtcCBk4buvIGxp4buHdSB04buxIG5oacOqbiwga2jDtG5nIGtp4buDbSBzb8OhdCDihpIgY2jhu4kgxJHDoW5oIGdpw6EgdMawxqFuZyBxdWFuLg0KDQojIyMgKioxLjkuIEjhuqFuIGNo4bq/IHbDoCBj4bqjbmggYsOhbyBraGkgc+G7rSBk4bulbmcgbcO0IGjDrG5oKioNCg0KS2jDtG5nIG7Dqm4gbmdv4bqhaSBzdXkgKGV4dHJhcG9sYXRlKSBuZ2/DoGkgcGjhuqFtIHZpIGThu68gbGnhu4d1Lg0KDQpL4bq/dCBsdeG6rW4gY2jhu4kgxJHDum5nIHRyb25nIMSRaeG7gXUga2nhu4duIGThu68gbGnhu4d1IGto4bqjbyBzw6F0Lg0KDQpD4bqnbiBraeG7g20gdHJhIGvhu7kgY8OhYyBnaeG6oyDEkeG7i25oIHRyxrDhu5tjIGtoaSB0aW4gdMaw4bufbmcga+G6v3QgcXXhuqMgbcO0IGjDrG5oLg0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KDQojIyAqKkNoxrDGoW5nIDI6IE3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCoqDQoNCkNoxrDGoW5nIDIgY3VuZyBj4bqlcCBjw6FpIG5ow6xuIHRvw6BuIGRp4buHbiB24buBIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCB04burIGtow6FpIG5p4buHbSwgY8O0bmcgdGjhu6ljLCBjw6FjaCDGsOG7m2MgbMaw4bujbmcsIGtp4buDbSDEkeG7i25oIMSR4bq/biDhu6luZyBk4bulbmcgdGjhu7FjIHRp4buFbiB24bubaSBSLiDEkMOieSBsw6AgbuG7gW4gdOG6o25nIHF1YW4gdHLhu41uZyDEkeG7gyBoaeG7g3UgY8OhYyBtw7QgaMOsbmggcGjhu6ljIHThuqFwIGjGoW4gdHJvbmcgY8OhYyBjaMawxqFuZyB0aeG6v3AgdGhlby4NCg0KDQojIyMgKioyLjEuIEdp4bubaSB0aGnhu4d1IGNodW5nKioNCg0KKioqSOG7k2kgcXV5IHR1eeG6v24gdMOtbmggbMOgIG3DtCBow6xuaCBo4buTaSBxdXkgcGjhu5UgYmnhur9uIG5o4bqldCB0cm9uZyB0aOG7kW5nIGvDqiB2w6AgbMOgIG3hu5l0IHRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0IGPhu6dhIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCB04buVbmcgcXXDoXQgKEdMTSkuIENoxrDGoW5nIG7DoHkgxJHhurd0IG7hu4FuIHThuqNuZyB24buBIGvDvSBoaeG7h3UsIGdp4bqjIMSR4buLbmggdsOgIHBoxrDGoW5nIHBow6FwIHTDrW5oLCB04burIG3DtCBow6xuaCDEkcahbiBnaeG6o24gxJHhur9uIG3DtCBow6xuaCBwaOG7qWMgdOG6oXAgaMahbiwgYmFvIGfhu5NtIGPhuqMgY8OhY2ggdGjhu7FjIGhp4buHbiB0cm9uZyBwaOG6p24gbeG7gW0gUi4qKioNCg0KIyMjICoqMi4yLiDEkOG7i25oIG5naMSpYSBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmgqKg0KDQpNw7QgaMOsbmggY8OzIGhhaSB0aMOgbmggcGjhuqduOg0KDQotIEjhu4cgdGjhu5FuZyAoU3lzdGVtYXRpYyk6DQoNCiQkDQpcbXVfaSA9IFxiZXRhXzAgKyBcYmV0YV8xIHhfe2kxfSArIFxjZG90cyArIFxiZXRhX3AgeF97aXB9DQokJA0KDQp24bubaSBcKCBFW3lfaV0gPSBcbXVfaSBcKSBsw6Aga+G7syB24buNbmcgY+G7p2EgYmnhur9uIHBo4bqjbiBo4buTaS4NCg0KLSBOZ+G6q3Ugbmhpw6puIChSYW5kb20pOg0KDQokJA0KXHRleHR7VmFyfSh5X2kpID0gXGZyYWN7XHNpZ21hXjJ9e3dfaX0sIFxxdWFkIFx0ZXh0e3bhu5tpIH0gd19pIFx0ZXh0eyBsw6AgdHLhu41uZyBz4buRIMSRw6MgYmnhur90Ln0NCiQkDQoNCkPDoWMgYmnhur9uIFwoIFxiZXRhX2ogXCkgbMOgIGjhu4cgc+G7kSBo4buTaSBxdXkgY2jGsGEgYmnhur90LCBj4bqnbiDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcuDQoNCg0KIyMjIyMgQ8OhYyBk4bqhbmcgxJHhurdjIGJp4buHdDoNCg0KLSBI4buTaSBxdXkgdHV54bq/biB0w61uaCDEkcahbiBnaeG6o246IFwoIHAgPSAxIFwpDQoNCi0gSOG7k2kgcXV5IHR1eeG6v24gdMOtbmggdGjGsOG7nW5nOiBcKCB3X2kgPSAxIFwpIHbhu5tpIG3hu41pIFwoIGkgXCkNCg0KLSBI4buTaSBxdXkgdHV54bq/biB0w61uaCBjw7MgdHLhu41uZyBz4buROiBcKCB3X2kgXG5lIDEgXCkNCg0KLSBI4buTaSBxdXkgdHV54bq/biB0w61uaCBuaGnhu4F1IGJp4bq/bjogXCggcCA+IDEgXCkNCg0KLSBI4buTaSBxdXkgdHV54bq/biB0w61uaCBjaHXhuqluOiBnaeG6oyDEkeG7i25oIHRow6ptIFwoIHlfaSBcc2ltIFxtYXRoY2Fse059KFxtdV9pLCBcc2lnbWFeMiAvIHdfaSkgXCkNCg0KIyMjICoqMi4zLiBI4buTaSBxdXkgdHV54bq/biB0w61uaCDEkcahbiBnaeG6o24qKg0KDQpQaMawxqFuZyB0csOsbmggbcO0IGjDrG5oOg0KDQokJA0KXG11X2kgPSBcYmV0YV8wICsgXGJldGFfMSB4X2ksIFxxcXVhZCBcdGV4dHtWYXJ9KHlfaSkgPSBcZnJhY3tcc2lnbWFeMn17d19pfQ0KJCQNCg0KDQojIyMjIyDGr+G7m2MgbMaw4bujbmcgaOG7hyBz4buRIGLhurFuZyAqKipwaMawxqFuZyBwaMOhcCBiw6xuaCBwaMawxqFuZyB04buRaSB0aGnhu4N1KioqIChMZWFzdCBTcXVhcmVzKQ0KDQpU4buRaSB0aGnhu4N1IGjDs2E6DQoNCiQkDQpTID0gXHN1bSB3X2kgKHlfaSAtIFxtdV9pKV4yDQokJA0KDQpHaeG6o2kgaOG7hyBwaMawxqFuZyB0csOsbmggxJHhuqFvIGjDoG0gcmnDqm5nIGPhu6dhIFwoIFMgXCkgxJHhu4MgdMOsbSBjw6FjIFwoIFxoYXR7XGJldGF9X2ogXCkuDQoNCiMjIyMjIMav4bubYyBsxrDhu6NuZyBwaMawxqFuZyBzYWk6DQoNCiQkDQpcaGF0e1xzaWdtYX1eMiA9IFxmcmFje1JTU317biAtIHAnfQ0KJCQNCg0KUlNTOiB04buVbmcgYsOsbmggcGjGsMahbmcgcGjhuqduIGTGsA0KDQojIyMjIyBTYWkgc+G7kSBjaHXhuqluIGPhu6dhIFwoIFxoYXR7XGJldGF9X2ogXCk6DQoNCiQkDQpzZShcaGF0e1xiZXRhfV9qKSA9IFxzcXJ0e1xmcmFje1xoYXR7XHNpZ21hfV4yfXtJX2peKn19DQokJA0KDQojIyMgKioyLjQuIEjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIG5oaeG7gXUgYmnhur9uKioNCktoaSBjw7Mgbmhp4buBdSBiaeG6v24gZ2nhuqNpIHRow61jaCwgdGEgbeG7nyBy4buZbmcgxrDhu5tjIGzGsOG7o25nIHNhbmc6DQokJA0KXG11X2kgPSBcYmV0YV8wICsgXGJldGFfMSB4X3tpMX0gKyAgXGNkb3RzICsgXGJldGFfcCB4X3tpcH0NCiQkDQoNCkjhu4cgc+G7kSBiZXRhIHbhuqtuIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBi4bqxbmcgdOG7kWkgdGhp4buDdSBow7NhIGjDoG0gbeG6pXQgbcOhdCAqKipTKioqIG5oxrAgdHLDqm4sIG5oxrBuZyBkw7luZyDEkeG6oWkgc+G7kSB0dXnhur9uIHTDrW5oIHbDoCBtYSB0cuG6rW4uDQoNCiMjIyAqKjIuNS4gQmnhu4N1IGRp4buFbiBi4bqxbmcgbWEgdHLhuq1uKioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIGTGsOG7m2kgZOG6oW5nOg0KDQokJA0KeSA9IFggXGJldGEgKyBcdmFyZXBzaWxvbiwgXHFxdWFkIFx2YXJlcHNpbG9uIFxzaW0gXG1hdGhjYWx7Tn0oMCwgXHNpZ21hXjIgV157LTF9KQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KLSBcKCBYIFwpOiBtYSB0cuG6rW4gdGhp4bq/dCBr4bq/ICgqZGVzaWduIG1hdHJpeCopLA0KLSBcKCBcYmV0YSBcKTogdmVjdG9yIGjhu4cgc+G7kSwNCi0gXCggVyBcKTogbWEgdHLhuq1uIHRy4buNbmcgc+G7kS4NCg0KDQpI4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nOg0KDQokJA0KXGhhdHtcYmV0YX0gPSAoWF5UIFcgWCleey0xfSBYXlQgVyB5DQokJA0KDQoNCiMjIyAqKjIuNiDGr+G7m2MgbMaw4bujbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIGLhurFuZyBSKioNCg0KVGhheSB2w6wgcGjhuqNpIHTDrW5oIHRvw6FuIHRo4bunIGPDtG5nIMSR4buDIHTDrG0gY8OhYyBo4buHIHPhu5EgY+G7p2EgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaMawIHRyb25nIGPDoWMgcGjhuqduIDIuMyB2w6AgMi41LCB0YSBjw7MgdGjhu4MgZMO5bmcgUiDEkeG7gyBsw6BtIHZp4buHYyBuw6B5IG3hu5l0IGPDoWNoIG5oYW5oIGNow7NuZyB2w6AgdGnhu4duIGzhu6NpIGLhurFuZyBow6BtIGxtKCkuIMSQw6J5IGzDoCBow6BtIGPGoSBi4bqjbiDEkeG7gyB4w6J5IGThu7FuZyBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggdHJvbmcgUi4NCg0KS2hpIHPhu60gZOG7pW5nIGjDoG0gbG0oKSwgYuG6oW4gY2jhu4kgY+G6p24gY2jhu4kgcmEgxJHDonUgbMOgIGJp4bq/biBwaOG7pSB0aHXhu5ljIChiaeG6v24gY+G6p24gZOG7sSDEkW/DoW4pIHbDoCDEkcOidSBsw6AgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIChjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIGJp4bq/biBwaOG7pSB0aHXhu5ljKS4NCg0KVHJvbmcgY8O0bmcgdGjhu6ljIGPhu6dhIGjDoG0gbG0oKSwgYmnhur9uIHBo4bulIHRodeG7mWMgKGNo4bqzbmcgaOG6oW4gbmjGsCBXZWlnaHQsIHThu6ljIGPDom4gbuG6t25nKSDEkcaw4bujYyDEkeG6t3QgYsOqbiB0csOhaSBk4bqldSB+LiBDw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgxJHGsOG7o2MgxJHhurd0IGLDqm4gcGjhuqNpIGThuqV1IH4gdsOgIG7hu5FpIG5oYXUgYuG6sW5nIGThuqV1ICsgbuG6v3UgY8OzIG5oaeG7gXUgYmnhur9uLg0KDQpUaGFtIHPhu5EgZGF0YSA9IGdlc3RhdGlvbiBjaG8gUiBiaeG6v3QgcuG6sW5nIHThuqV0IGPhuqMgY8OhYyBiaeG6v24gxJFhbmcgxJHGsOG7o2MgZMO5bmcgxJHhu4F1IG7hurFtIHRyb25nIGLhuqNuZyBk4buvIGxp4buHdSBjw7MgdMOqbiBsw6AgZ2VzdGF0aW9uLiBO4bq/dSBjw7MgdHLhu41uZyBz4buRIChjaOG6s25nIGjhuqFuIHPhu5EgY2Egc2luaCDhu6luZyB24bubaSB04burbmcgcXVhbiBzw6F0KSwgYuG6oW4gY2jhu4kgxJHhu4tuaCBi4bqxbmcgxJHhu5FpIHPhu5Egd2VpZ2h0cy4gTuG6v3UgbeG7jWkgcXVhbiBzw6F0IMSR4buBdSBjw7MgdHLhu41uZyBz4buRIG5oxrAgbmhhdSwgdGjDrCBjw7MgdGjhu4MgYuG7jyBxdWEgcGjhuqduIG7DoHkuDQoNCg0KIyMjIyAqKjIuOC4gU3V5IGx14bqtbiB0aOG7kW5nIGvDqioqDQoNCkdp4bqjIMSR4buLbmg6DQoNCiQkDQp5X2kgXHNpbSBcbWF0aGNhbHtOfShcbXVfaSwgXHNpZ21hXjIgLyB3X2kpDQokJA0KDQoNCi0gKipLaeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dDoqKg0KDQpHaeG6oyB0aHV54bq/dCBraMO0bmc6DQoNCiQkDQpIXzAgOiBcYmV0YV9qID0gXGJldGFfal4wDQokJA0KDQpUaOG7kW5nIGvDqiBraeG7g20gxJHhu4tuaCB0Og0KDQokJA0KdCA9IFxmcmFje1xoYXR7XGJldGF9X2ogLSBcYmV0YV9qXjB9e3NlKFxoYXR7XGJldGF9X2opfQ0KJCQNCg0KDQotS2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gXCggXGJldGFfaiBcKToNCg0KJCQNClxoYXR7XGJldGF9X2ogXHBtIHReKl97biAtIHAnfSBcY2RvdCBzZShcaGF0e1xiZXRhfV9qKQ0KJCQNCg0KVHJvbmcgxJHDszoNCi0gXCggdF4qX3tuIC0gcCd9IFwpOiBwaMOibiB24buLIHQgcGjDom4gcGjhu5FpIFN0dWRlbnQgduG7m2kgXCggbiAtIHAnIFwpIGLhuq1jIHThu7EgZG8sDQotIFwoIHNlKFxoYXR7XGJldGF9X2opIFwpOiBzYWkgc+G7kSBjaHXhuqluIGPhu6dhIFwoIFxoYXR7XGJldGF9X2ogXCkuDQoNCg0KIyMjIyAqKjIuOSBQaMOibiB0w61jaCBwaMawxqFuZyBzYWkgKEFOT1ZBKSoqDQoNCioqR2nDoSB0cuG7iyB04buVbmcgcGjGsMahbmcgc2FpIFwoVFNTXCkgxJHGsOG7o2MgdMOtbmggdGhlbyBjw7RuZyB0aOG7qWM6KioNCg0KJCQNClRTUyA9IFxzdW1fe2k9MX1ee259ICh5X2kgLSBcYmFye3l9KV4yDQokJA0KDQoqKlThu5VuZyBwaMawxqFuZyBzYWkgxJHGsOG7o2MgcGjDom4gdMOtY2ggdGjDoG5oIGhhaSBwaOG6p246KioNCg0KJCQNClRTUyA9IFNTUiArIFJTUw0KJCQNCg0KVHJvbmcgxJHDszoNCg0KLSBcKFNTUlwpIGzDoCB04buVbmcgYsOsbmggcGjGsMahbmcgcGjhuqduIGdp4bqjaSB0aMOtY2ggKEV4cGxhaW5lZCBTdW0gb2YgU3F1YXJlcyksIMSRxrDhu6NjIHTDrW5oIGLhurFuZzoNCg0KJCQNClNTUiA9IFxzdW1fe2k9MX1ee259IChcaGF0e3l9X2kgLSBcYmFye3l9KV4yDQokJA0KDQotIFwoUlNTXCkgbMOgIHThu5VuZyBiw6xuaCBwaMawxqFuZyBwaOG6p24gZMawIChSZXNpZHVhbCBTdW0gb2YgU3F1YXJlcyksIMSRxrDhu6NjIHTDrW5oIGLhurFuZzoNCg0KJCQNClJTUyA9IFxzdW1fe2k9MX1ee259ICh5X2kgLSBcaGF0e3l9X2kpXjINCiQkDQoNCioqSOG7hyBz4buRIHjDoWMgxJHhu4tuaCBcKFJeMlwpIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIGzDoDoqKg0KDQokJA0KUl4yID0gXGZyYWN7U1NSfXtUU1N9ID0gMSAtIFxmcmFje1JTU317VFNTfQ0KJCQNCg0KDQojIyMgKioyLjEwIFNvIHPDoW5oIG3DtCBow6xuaCBs4buTbmcgKE5lc3RlZCBNb2RlbHMpKioNCg0KSGFpIG3DtCBow6xuaCDEkcaw4bujYyBn4buNaSBsw6AgbOG7k25nIG5oYXUgKG5lc3RlZCBtb2RlbHMpIGtoaSBtw7QgaMOsbmggxJHGoW4gZ2nhuqNuIGjGoW4gKHJlZHVjZWQgbW9kZWwpIGzDoCBt4buZdCB0csaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdCBj4bunYSBtw7QgaMOsbmggcGjhu6ljIHThuqFwIGjGoW4gKGZ1bGwgbW9kZWwpLCB04bupYyBsw6AgbsOzIMSRxrDhu6NjIHThuqFvIHJhIGLhurFuZyBjw6FjaCBsb+G6oWkgYuG7jyBt4buZdCBoYXkgbmhp4buBdSBiaeG6v24ga2jhu49pIG3DtCBow6xuaCDEkeG6p3kgxJHhu6cuDQoNCktp4buDbSDEkeG7i25oIEY6DQoNCiQkDQpGID0gXGZyYWN7KFJTU197XHRleHR7cmVkdWNlZH19IC0gUlNTX3tcdGV4dHtmdWxsfX0pIC8gKHBfe1x0ZXh0e2Z1bGx9fSAtIHBfe1x0ZXh0e3JlZHVjZWR9fSl9e3NeMl97XHRleHR7ZnVsbH19fQ0KJCQNCg0KDQojIyMgKioyLjExIEzhu7FhIENo4buNbiBHaeG7r2EgQ8OhYyBNw7QgSMOsbmggS2jDtG5nIEzhu5NuZyBHaMOpcDogQUlDIHbDoCBCSUMqKg0KDQpDw6FjIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IMSRxrDhu6NjIHRyw6xuaCBiw6B5IHRyb25nIE3hu6VjIDIuMTAgY2jhu4kgw6FwIGThu6VuZyBraGkgY8OhYyBtw7QgaMOsbmggc28gc8OhbmggbMOgIG3DtCBow6xuaCBs4buTbmcgbmhhdSAobmVzdGVkKS4gVHV5IG5oacOqbiwgxJHDtGkga2hpIGPDoWMgbmjDoCBuZ2hpw6puIGPhu6l1IG114buRbiBzbyBzw6FuaCBjw6FjIG3DtCBow6xuaCBraMO0bmcgbOG7k25nIG5oYXUsIHbDrCB24bqteSBjw6FjIHBoxrDGoW5nIHBow6FwIGtp4buDbSDEkeG7i25oIMSRw7Mga2jDtG5nIGPDsm4gcGjDuSBo4bujcC4gUGjhuqduIG7DoHkgZ2nhu5tpIHRoaeG7h3UgY8OhYyDEkeG6oWkgbMaw4bujbmcgxJHhu4Mgc28gc8OhbmggY8OhYyBtw7QgaMOsbmgga2jDtG5nIG5o4bqldCB0aGnhur90IHBo4bqjaSBs4buTbmcgbmhhdS4NCg0KVHLGsOG7m2MgdGnDqm4sIGjDo3kgbmjhu5sgcuG6sW5nIGPDsyBoYWkgdGnDqnUgY2jDrSDEkeG7gyBjaOG7jW4gbcO0IGjDrG5oIHRo4buRbmcga8OqIGzDoDoNCg0KICAtIMSQ4buZIGNow61uaCB4w6FjIChhY2N1cmFjeSkNCg0KICAtIFTDrW5oIMSRxqFuIGdp4bqjbiBo4bujcCBsw70gKHBhcnNpbW9ueSkuDQoNClThu5VuZyBiw6xuaCBwaMawxqFuZyBwaOG6p24gZMawIChSU1MpIGNo4buJIMSRbyBsxrDhu51uZyDEkeG7mSBjaMOtbmggeMOhYzogdmnhu4djIHRow6ptIG3hu5l0IGJp4bq/biBnaeG6o2kgdGjDrWNoIG3hu5tpIHbDoG8gbcO0IGjDrG5oIGtow7RuZyBiYW8gZ2nhu50gbMOgbSB0xINuZyBSU1MuDQoNCktoaSB0aMOqbSBuaGnhu4F1IGJp4bq/biBnaeG6o2kgdGjDrWNoIHbDoG8gbcO0IGjDrG5oLCBnacOhIHRy4buLIFJTUyB0aMaw4budbmcgc+G6vSBnaeG6o20sIG5oxrBuZyDEkeG7k25nIHRo4budaSBtw7QgaMOsbmggY8WpbmcgdHLhu58gbsOqbiBwaOG7qWMgdOG6oXAgaMahbi4NCg0KVGnDqnUgY2jDrSB0aMO0bmcgdGluIEFrYWlrZSAoQWthaWtl4oCZcyBJbmZvcm1hdGlvbiBDcml0ZXJpb24gLSBBSUMpIGdpw7pwIGPDom4gYuG6sW5nIGhhaSB0acOqdSBjaMOtOg0KDQrEkOG7mSBjaMOtbmggeMOhYyAoxJFvIGLhurFuZyBSU1MpDQoNClbDoCBt4bupYyDEkeG7mSBwaOG7qWMgdOG6oXAgY+G7p2EgbcO0IGjDrG5oICjEkW8gYuG6sW5nIHPhu5EgbMaw4bujbmcgdGhhbSBz4buRIMaw4bubYyBsxrDhu6NuZykuDQoNCsSQ4buRaSB24bubaSBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggY2h14bqpbiwga2hpIHBoxrDGoW5nIHNhaSDPg8KyIGNoxrBhIGJp4bq/dCwgY8O0bmcgdGjhu6ljIHTDrW5oIEFJQyBsw6A6DQoNCiQkDQpBSUMgPSBuLmxvZy4gXGZyYWN7UlNTfXtufSArIDJwDQokJA0KVHJvbmcgxJHDsw0KICAtIG4gbMOgIHPhu5EgcXVhbiBzw6F0LCBwIGzDoCB0aGFtIHPhu5EgbcO0IGjDrG5oDQogIA0KICAtIEdpw6EgdHLhu4sgQUlDIGPDoG5nIG5o4buPIHRow6wgbcO0IGjDrG5oIGPDoG5nIHThu5F0DQogIA0KICAtIDJwIGTDuW5nIMSR4buDIMSRw6FuaCBnacOhIGPDoWMgbcO0IGjDrG5oIGPDsyBuaGnhu4F1IHRoYW0gc+G7kSAocGjhu6ljIHThuqFwIGjGoW4pLCB24bubaSBo4buHIHPhu5Egaz0gMi4NCiAgDQoNCioqKkzGsHUgw706IEdpw6EgdHLhu4sgQUlDIGtow7RuZyBjw7Mgw70gbmdoxKlhIHJpw6puZyBs4bq7LCBuw7MgY2jhu4kgZMO5bmcgxJHhu4Mgc28gc8OhbmggZ2nhu69hIGPDoWMgbcO0IGjDrG5oIHbhu5tpIG5oYXUuKioqDQoNCk5nb8OgaSBBSUMgY8OybiBjw7MgY8OhYyB0acOqdSBjaMOtIHTGsMahbmcgdOG7sSBraMOhYywgduG7m2kgY8OhYyBow6xuaCB0aOG7qWMgcGjhuqF0IGtow6FjIG5oYXUuIE3hu5l0IHbDrSBk4bulIGzDoCBUacOqdSBjaMOtIFRow7RuZyB0aW4gQmF5ZXMgKEJheWVzaWFuIEluZm9ybWF0aW9uIENyaXRlcmlvbiAtIEJJQyksIGhheSBjw7JuIGfhu41pIGzDoCBUacOqdSBjaMOtIFNjaHdhcno6DQoNCkJJQyDGsHUgdGnDqm4gY2jhu41uIGPDoWMgbcO0IGjDrG5oIMSRxqFuIGdp4bqjbiBoxqFuICjDrXQgdGhhbSBz4buRIGjGoW4pIHNvIHbhu5tpIEFJQywgdsOsIG3hu6ljIHBo4bqhdCB0cm9uZyBCSUMgbMOgICoqKnAubG9nbiwgdsOgIHRoxrDhu51uZyBs4bubbiBoxqFuIDJwICh0cuG7qyB0csaw4budbmcgaOG7o3AgcXVhbiBzw6F0IG4gcuG6pXQgbmjhu48pDQoNCiQkDQpTSUMgPSBuLmxvZy4gXGZyYWN7UlNTfXtufSArIHAubG9nbg0KJCQNCg0KQUlDIChBa2Fpa2UgSW5mb3JtYXRpb24gQ3JpdGVyaW9uKSDGsHUgdGnDqm4ga2jhuqMgbsSDbmcgZOG7sSDEkW/DoW4uIE7DsyBz4bq1biBzw6BuZyBjaOG6pXAgbmjhuq1uIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggbeG7m2kgZMO5IGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIGNoxrBhIHLDtSByw6BuZywgbWnhu4VuIGzDoCBjw6FjIGJp4bq/biDEkcOzIGPDsyB0aeG7gW0gbsSDbmcgY+G6o2kgdGhp4buHbiDEkeG7mSBjaMOtbmggeMOhYyBj4bunYSBk4buxIMSRb8Ohbi4NCg0KQklDIChCYXllc2lhbiBJbmZvcm1hdGlvbiBDcml0ZXJpb24pIGzhuqFpIHnDqnUgY+G6p3UgYuG6sW5nIGNo4bupbmcgdGh1eeG6v3QgcGjhu6VjIGjGoW4gxJHhu4MgdGjDqm0gYmnhur9uIHbDoG8gbcO0IGjDrG5oLiBEbyDEkcOzLCBuw7MgdGjGsOG7nW5nIGNo4buNbiBtw7QgaMOsbmggxJHGoW4gZ2nhuqNuIGjGoW4sIGThu4UgZGnhu4VuIGdp4bqjaSB2w6AgdHLDoW5oIGTGsCB0aOG7q2EuDQoNCg0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQoNCiMjICoqQ0jGr8agTkcgMzogQ0jhuqhOIMSQT8OBTiBNw5QgSMOMTkggSOG7kkkgUVVZIFRVWeG6vk4gVMONTkgqKg0KDQoqKipN4bulYyB0acOqdSB04bqtcCB0cnVuZyB2w6BvIHZp4buHYyBjaOG6qW4gxJFvw6FuIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCBuaOG6sW0gxJHhuqNtIGLhuqNvIG3DtCBow6xuaCBwaOG6o24gw6FuaCDEkcO6bmcgYuG6o24gY2jhuqV0IGThu68gbGnhu4d1IHbDoCBjw7MgxJHhu5kgdGluIGPhuq15IGNhby4gTuG7mWkgZHVuZyBnacO6cCBuZ8aw4budaSDEkeG7jWMga2nhu4NtIMSR4buLbmggY8OhYyBnaeG6oyDEkeG7i25oIHF1YW4gdHLhu41uZyBuaMawIHF1YW4gaOG7hyB0dXnhur9uIHTDrW5oLCBwaMawxqFuZyBzYWkga2jDtG5nIMSR4buVaSwgdMOtbmggxJHhu5ljIGzhuq1wIHbDoCBwaMOibiBwaOG7kWkgY2h14bqpbiBj4bunYSBzYWkgc+G7kS4gVGjDtG5nIHF1YSB2aeG7h2MgcGjDom4gdMOtY2ggcGjhuqduIGTGsCB2w6AgY8OhYyBjaOG7iSBz4buRIG5oxrAgbGV2ZXJhZ2UsIENvb2vigJlzIGRpc3RhbmNlLCBERkJFVEFTLCBjw7MgdGjhu4MgcGjDoXQgaGnhu4duIMSRaeG7g20gbmdv4bqhaSBsYWkgdsOgIMSRaeG7g20g4bqjbmggaMaw4bufbmcgbOG7m24uIMSQ4buTbmcgdGjhu51pLCBu4buZaSBkdW5nIGPFqW5nIGzDoG0gcsO1IHTDoWMgaOG6oWkgY+G7p2EgxJFhIGPhu5luZyB0dXnhur9uIHbDoCBoxrDhu5tuZyBk4bqrbiBjw6FjaCB44butIGzDvSBi4bqxbmcgY2jhu4kgc+G7kSBWSUYuIEN14buRaSBjw7luZywgcGjhuqduIG7DoHkgxJHhu4EgeHXhuqV0IGPDoWMgY2hp4bq/biBsxrDhu6NjIMSRaeG7gXUgY2jhu4luaCBuaMawIGJp4bq/biDEkeG7lWkgZOG7ryBsaeG7h3UgaG/hurdjIMOhcCBk4bulbmcgbcO0IGjDrG5oIHRoYXkgdGjhur8gxJHhu4MgY+G6o2kgdGhp4buHbiDEkeG7mSBwaMO5IGjhu6NwIHbDoCBraOG6oyBuxINuZyBkaeG7hW4gZ2nhuqNpIGPhu6dhIG3DtCBow6xuaC4qKioNCg0KIyMjICoqMy4xIEdp4bubaSB0aGnhu4d1IHbDoCB04buVbmcgcXVhbioqDQoNClNhdSBraGkgeMOieSBk4buxbmcgbeG7mXQgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oLCB2aeG7h2MgxrDhu5tjIGzGsOG7o25nIGPDoWMgaOG7hyBz4buRIHbDoCBraeG7g20gxJHhu4tuaCDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbeG7m2kgY2jhu4kgbMOgIGLGsOG7m2Mga2jhu59pIMSR4bqndS4gxJDhu4MgxJHhuqNtIGLhuqNvIG3DtCBow6xuaCB0aOG7sWMgc+G7sSBwaOG6o24gw6FuaCDEkcO6bmcgYuG6o24gY2jhuqV0IGThu68gbGnhu4d1IHbDoCBjw7Mga2jhuqMgbsSDbmcg4bupbmcgZOG7pW5nIGhp4buHdSBxdeG6oyB0cm9uZyB0aOG7sWMgdOG6vywgbeG7mXQgYsaw4bubYyB0aeG6v3AgdGhlbyBraMO0bmcgdGjhu4MgdGhp4bq/dSBjaMOtbmggbMOgIGNo4bqpbiDEkW/DoW4gbcO0IGjDrG5oLg0KDQoqKk3hu6VjIHRpw6p1IGPhu6dhIGNodeG6qW4gxJFvw6FuIG3DtCBow6xuaCoqDQoNCkNo4bqpbiDEkW/DoW4gbcO0IGjDrG5oIGtow7RuZyBjaOG7iSBsw6AgY8O0bmcgY+G7pSBo4buXIHRy4bujIGvhu7kgdGh14bqtdCwgbcOgIGPDsm4gbMOgIHF1w6EgdHLDrG5oIMSRw6FuaCBnacOhIHTDrW5oIGjhu6NwIGzhu4csIMSR4buZIHRpbiBj4bqteSB2w6Aga2jhuqMgbsSDbmcga2jDoWkgcXXDoXQgaMOzYSBj4bunYSBtw7QgaMOsbmguIEPhu6UgdGjhu4MsIG7DsyBnacO6cDoNCg0KS2nhu4NtIHRyYSB0w61uaCDEkcO6bmcgxJHhuq9uIGPhu6dhIGPDoWMgZ2nhuqMgxJHhu4tuaCBu4buBbiB04bqjbmcgdHJvbmcgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmg6DQoNCiAgLSAgTeG7kWkgcXVhbiBo4buHIHR1eeG6v24gdMOtbmggZ2nhu69hIGJp4bq/biBwaOG7pSB0aHXhu5ljIHbDoCBiaeG6v24gZ2nhuqNpIHRow61jaA0KICANCiAgLSAgUGjGsMahbmcgc2FpIMSR4buTbmcgbmjhuqV0IChob21vc2NlZGFzdGljaXR5KQ0KICANCiAgLSAgUGjDom4gcGjhu5FpIGNodeG6qW4gY+G7p2Egc2FpIHPhu5Egbmfhuqt1IG5oacOqbg0KICANCiAgLSAgxJDhu5ljIGzhuq1wIGdp4buvYSBjw6FjIHBo4bqnbiBkxrAgKGtow7RuZyBjw7MgdOG7sSB0xrDGoW5nIHF1YW4pDQoNClBow6F0IGhp4buHbiBjw6FjIHF1YW4gc8OhdCDEkeG6t2MgYmnhu4d0LCBiYW8gZ+G7k206DQoNCiAgLSAgxJBp4buDbSBuZ2/huqFpIGxhaSAob3V0bGllcnMpIOKAkyBjw7MgdGjhu4MgbMOgbSBzYWkgbOG7h2NoIMaw4bubYyBsxrDhu6NuZw0KICANCiAgLSAgxJBp4buDbSDhuqNuaCBoxrDhu59uZyBs4bubbiAoaW5mbHVlbnRpYWwgb2JzZXJ2YXRpb25zKSDigJMgY8OzIHRo4buDIHRo4buRbmcgdHLhu4sgbcO0IGjDrG5oIG7hur91IGtow7RuZyDEkcaw4bujYyB44butIGzDvSDEkcO6bmcgY8OhY2gNCg0KICAtICDEkMOhbmggZ2nDoSB0w61uaCDhu5VuIMSR4buLbmggdsOgIMSRw6FuZyB0aW4gY+G6rXkgY+G7p2EgY8OhYyBo4buHIHPhu5EgaOG7k2kgcXV5DQoNCsSQ4buBIHh14bqldCBoxrDhu5tuZyDEkWnhu4F1IGNo4buJbmggbcO0IGjDrG5oIG5o4bqxbSBuw6JuZyBjYW8gaGnhu4d1IHN14bqldCB2w6AgdMOtbmggZGnhu4VuIGdp4bqjaSwgbmjGsDoNCg0KICAtICBCaeG6v24gxJHhu5VpIGThu68gbGnhu4d1IChsb2dhcml0IGjDs2EsIGNodeG6qW4gaMOzYSwgYsOsbmggcGjGsMahbmcsIGPEg24gYuG6rWMgaGFpLC4uLikNCiAgDQogIC0gIFRow6ptIGhv4bq3YyBsb+G6oWkgYuG7jyBiaeG6v24gZ2nhuqNpIHRow61jaA0KICANCiAgLSBDw6JuIG5o4bqvYyBz4butIGThu6VuZyBtw7QgaMOsbmggcGhpIHR1eeG6v24gaG/hurdjIG3DtCBow6xuaCBo4buTaSBxdXkgdOG7lW5nIHF1w6F0IChHTE0pIG7hur91IHBow7kgaOG7o3AgaMahbiB24bubaSBk4buvIGxp4buHdQ0KDQoNCk7hur91IGLhu48gcXVhIGLGsOG7m2MgbsOgeSwgbmfGsOG7nWkgcGjDom4gdMOtY2ggZOG7hSByxqFpIHbDoG8gYuG6q3kgY+G7p2Egdmnhu4djIOKAnHBow7kgaOG7o3AgcXXDoSBt4bupY+KAnSAob3ZlcmZpdHRpbmcpLCBoaeG7g3Ugc2FpIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24sIGhv4bq3YyBk4buxIMSRb8OhbiBzYWkgbOG7h2NoIHRyb25nIHRo4buxYyB04bq/LiBEbyDEkcOzLCBjaOG6qW4gxJFvw6FuIG3DtCBow6xuaCBraMO0bmcgcGjhuqNpIGzDoCB0w7l5IGNo4buNbiDigJMgbcOgIGzDoCBt4buZdCBwaOG6p24gYuG6r3QgYnXhu5ljIHRyb25nIHBow6JuIHTDrWNoIGjhu5NpIHF1eSBuZ2hpw6ptIHTDumMuDQoNClRyb25nIGNoxrDGoW5nIG7DoHksIGNow7puZyB0YSBz4bq9IGjhu41jIGPDoWNoOg0KDQotICBQaMOibiB0w61jaCB2w6Aga2nhu4NtIHRyYSBjw6FjIGdp4bqjIMSR4buLbmggY8ahIGLhuqNuIGPhu6dhIG3DtCBow6xuaCBo4buTaSBxdXkNCg0KLSAgU+G7rSBk4bulbmcgcGjhuqduIGTGsCDEkeG7gyDEkcOhbmggZ2nDoSDEkeG7mSBwaMO5IGjhu6NwIHbDoCBwaMOhdCBoaeG7h24gdmkgcGjhuqFtIGdp4bqjIMSR4buLbmgNCg0KLSAgTmjhuq1uIGRp4buHbiB2w6AgeOG7rSBsw70gY8OhYyDEkWnhu4NtIOG6o25oIGjGsOG7n25nIGzhu5tuDQoNCi0gIFBow6JuIHTDrWNoIGhp4buHbiB0xrDhu6NuZyDEkWEgY+G7mW5nIHR1eeG6v24gdsOgIGPDoWMgZ2nhuqNpIHBow6FwIGto4bqvYyBwaOG7pWMNCg0KDQojIyMgKiozLjIgR2nhuqMgxJHhu4tuaCB0cm9uZyBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmgqKg0KDQpN4buZdCBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggdGnDqnUgY2h14bqpbiBwaOG6o2kgdGjhu49hIG3Do24gNCBnaeG6oyDEkeG7i25oIGPGoSBi4bqjbiBzYXU6DQoNCiMjIyMgKiozLjIuMSBHaeG6oyDEkeG7i25oIDE6IFF1YW4gaOG7hyB0dXnhur9uIHTDrW5oKioNCg0KTcO0IGjDrG5oIGdp4bqjIMSR4buLbmggcuG6sW5nIHRydW5nIGLDrG5oIGPhu6dhIGJp4bq/biBwaOG6o24gaOG7k2kgXCh5XCkgbMOgIGjDoG0gdHV54bq/biB0w61uaCBj4bunYSBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIFwoeF8xLCB4XzIsIFxsZG90cywgeF9wXCkuDQoNCk7hur91IG3hu5FpIHF1YW4gaOG7hyB0aOG7sWMgc+G7sSBnaeG7r2EgY8OhYyBiaeG6v24gbMOgIHBoaSB0dXnhur9uIG3DoCBtw7QgaMOsbmggduG6q24gw6FwIMSR4bq3dCB0dXnhur9uIHTDrW5oLCBjw6FjIMaw4bubYyBsxrDhu6NuZyBjw7MgdGjhu4MgYuG7iyB0aGnDqm4gbOG7h2NoIHbDoCBk4bqrbiDEkeG6v24gZOG7sSDEkW/DoW4gc2FpIGzhu4djaC4NCg0KXChcUmlnaHRhcnJvd1wpICoqQ8OhY2gga2nhu4NtIHRyYToqKiBW4bq9IGJp4buDdSDEkeG7kyBwaOG6p24gZMawIHNvIHbhu5tpIGdpw6EgdHLhu4sgZOG7sSDEkW/DoW4uIE7hur91IHRo4bqleSBow6xuaCBk4bqhbmcgY29uZyAoZOG6oW5nIHBhcmFib2wsIGjDrG5oIGNo4buvIFMuLi4pLCBjw7MgdGjhu4MgbcO0IGjDrG5oIMSRYW5nIHNhaSBk4bqhbmcgaMOgbS4NCg0KIyMjIyAqKjMuMi4yIEdp4bqjIMSR4buLbmggMjogIFBoxrDGoW5nIHNhaSBraMO0bmcgxJHhu5VpKioNCg0KUGjGsMahbmcgc2FpIGPhu6dhIHNhaSBz4buRIFwoXHZhcmVwc2lsb25faVwpIGtow7RuZyB0aGF5IMSR4buVaSB0aGVvIGdpw6EgdHLhu4sgY+G7p2EgYmnhur9uIGdp4bqjaSB0aMOtY2g6XCh4XCk6DQoNCiQkDQpcdGV4dHtWYXJ9KHlfaSkgPSBcc2lnbWFeMg0KJCQNCg0KTuG6v3UgcGjGsMahbmcgc2FpIHRoYXkgxJHhu5VpIHRoZW8gbeG7qWMgxJHhu5kgY+G7p2EgXCh4XCksIGnhu4duIHTGsOG7o25nIG7DoHkgZ+G7jWkgbMOgIHBoxrDGoW5nIHNhaSB0aGF5IMSR4buVaSAoaGV0ZXJvc2NlZGFzdGljaXR5KSDigJMga2hp4bq/biDGsOG7m2MgbMaw4bujbmcga8OpbSBoaeG7h3UgcXXhuqMgdsOgIGPDoWMga2nhu4NtIMSR4buLbmggdGjhu5FuZyBrw6oga2jDtG5nIGPDsm4gxJHDoW5nIHRpbiBj4bqteS4NCg0KXChcUmlnaHRhcnJvd1wpICoqQ8OhY2gga2nhu4NtIHRyYToqKiB24bq9IMSR4buTIHRo4buLIHBo4bqnbiBkxrAuIE7hur91IHBo4bqnbiBkxrAgY8OzIGThuqFuZyBow6xuaCBuw7NuIChy4buZbmcgZOG6p24gaG/hurdjIGjhurlwIGzhuqFpKSB0aMOsIGPDsyB0aOG7gyBi4buLIGhldGVyb3NjZWRhc3RpY2l0eS4NCg0KIyMjIyAqKjMuMi4zIEdp4bqjIMSR4buLbmggMzogxJDhu5ljIGzhuq1wKioNCg0KQ8OhYyBxdWFuIHPDoXQgXCgoeF9pLCB5X2kpXCkgcGjhuqNpIMSR4buZYyBs4bqtcCBuaGF1Lg0KDQpO4bq/dSBk4buvIGxp4buHdSBjw7MgdMOtbmggY2h14buXaSB0aOG7nWkgZ2lhbiwgZOG7ryBsaeG7h3UgbOG7k25nIGdow6lwIChuZXN0ZWQgZGF0YSkgaG/hurdjIHBow6JuIG5ow7NtIChjbHVzdGVyZWQpLCB0aMOsIG3DtCBow6xuaCB0dXnhur9uIHTDrW5oIGPGoSBi4bqjbiBraMO0bmcgY8OybiBwaMO5IGjhu6NwLg0KDQpcKFxSaWdodGFycm93XCkgKipDw6FjaCBraeG7g20gdHJhOioqIFbhu5tpIGThu68gbGnhu4d1IHRoZW8gdGjhu51pIGdpYW4sIGtp4buDbSB0cmEgcGjhuqduIGTGsCBjw7MgeHXhuqV0IGhp4buHbiB0w61uaCB04buxIHTGsMahbmcgcXVhbiAoYXV0b2NvcnJlbGF0aW9uKSBoYXkga2jDtG5nIChkw7luZyBiaeG7g3UgxJHhu5MgaG/hurdjIGtp4buDbSDEkeG7i25oIER1cmJpbi1XYXRzb24pLg0KDQojIyMjICoqMy4yLjQgR2nhuqMgxJHhu4tuaCA0OiBQaMOibiBwaOG7kWkgY2h14bqpbiBj4bunYSBzYWkgc+G7kSoqDQoNCk3hurdjIGTDuSBraMO0bmcgYuG6r3QgYnXhu5ljIMSR4buDIMaw4bubYyBsxrDhu6NuZyBPTFMsIGdp4bqjIMSR4buLbmggbsOgeSBy4bqldCBxdWFuIHRy4buNbmcgxJHhu4Mga2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QgdsOgIHTDrW5oIGtob+G6o25nIHRpbiBj4bqteToNCg0KJCQNClx2YXJlcHNpbG9uX2kgXHNpbSBcbWF0aGNhbHtOfSgwLCBcc2lnbWFeMikNCiQkDQoNClwoXFJpZ2h0YXJyb3dcKSAqKkPDoWNoIGtp4buDbSB0cmE6KiogZMO5bmcgYmnhu4N1IMSR4buTIFEtUSBwbG90IChxdWFudGlsZS1xdWFudGlsZSkgxJHhu4Mgc28gc8OhbmggcGjhuqduIGTGsCB24bubaSBwaMOibiBwaOG7kWkgY2h14bqpbi4NCg0KDQojIyMgKiozLjMgQ8OhYyBsb+G6oWkgcGjhuqduIGTGsCAoUmVzaWR1YWxzKSoqDQoNClBo4bqnbiBkxrAgbMOgIGPDtG5nIGPhu6UgdHJ1bmcgdMOibSDEkeG7gyBraeG7g20gxJHhu4tuaCBnaeG6oyDEkeG7i25oIHbDoCDEkcOhbmggZ2nDoSDEkeG7mSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaC4NCg0KIyMjICoqMy4zLjEgUGjhuqduIGTGsCB0aMO0IChSYXcgcmVzaWR1YWwpOioqDQoNCiQkDQplX2kgPSB5X2kgLSBcaGF0e3l9X2kNCiQkDQrEkMahbiBnaeG6o24gbMOgIGhp4buHdSBnaeG7r2EgZ2nDoSB0cuG7iyB0aOG7sWMgdOG6vyB2w6AgZ2nDoSB0cuG7iyBk4buxIMSRb8Ohbi4NCg0KDQojIyMjICoqMy4zLjIgUGjhuqduIGTGsCBjaHXhuqluIGjDs2EgKFN0YW5kYXJkaXplZCByZXNpZHVhbCk6KioNCg0KJCQNCnJfaSA9IFxmcmFje2VfaX17XGhhdHtcc2lnbWF9IFxzcXJ0ezEgLSBoX3tpaX19fQ0KJCQNCg0KR2nDunAgc28gc8OhbmggcGjhuqduIGTGsCBnaeG7r2EgY8OhYyDEkWnhu4NtIGPDsyBsZXZlcmFnZSBraMOhYyBuaGF1Lg0KDQpcKCBoX3tpaX0gXCk6IGxldmVyYWdlIOKAkyBt4bupYyDhuqNuaCBoxrDhu59uZyBj4bunYSDEkWnhu4NtIFwoIGkgXCkgbMOqbiBk4buxIMSRb8OhbiBcKCBcaGF0e3l9X2kgXCkuDQoNCiMjIyMgKiozLjMuMyBTdHVkZW50aXplZCByZXNpZHVhbDoqKg0KDQokJA0KdF9pID0gXGZyYWN7ZV9pfXtcaGF0e1xzaWdtYX1feyhpKX0gXHNxcnR7MSAtIGhfe2lpfX19DQokJA0KDQpEw7luZyBwaMawxqFuZyBzYWkgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nIGtoaSBsb+G6oWkgYuG7jyBjaMOtbmggxJFp4buDbSDEkcOzLCBnacO6cCBwaMOhdCBoaeG7h24gbmdv4bqhaSBsYWkgbeG7mXQgY8OhY2ggxJHDoW5nIHRpbiBj4bqteSBoxqFuIChwaMOibiBwaOG7kWkgZ+G6p24gduG7m2kgdCkuDQoNCiMjIyAqKjMuNCBCaeG7g3UgxJHhu5MgcGjhuqduIGTGsCAoUmVzaWR1YWwgUGxvdHMpKioNCg0KTeG7mXQgc+G7kSBiaeG7g3UgxJHhu5MgcXVhbiB0cuG7jW5nOg0KDQotICoqUmVzaWR1YWwgdnMgRml0dGVkIFBsb3Q6KiogcGjDoXQgaGnhu4duIHNhaSBk4bqhbmcgbcO0IGjDrG5oIHbDoCBwaMawxqFuZyBzYWkgdGhheSDEkeG7lWkNCg0KLSAqKk5vcm1hbCBRLVEgUGxvdCoqOiBraeG7g20gdHJhIHBow6JuIHBo4buRaSBjaHXhuqluIGPhu6dhIHBo4bqnbiBkxrAuDQoNCi0gKipTY2FsZS1Mb2NhdGlvbiBQbG90OioqIGtp4buDbSB0cmEgaG9tb3NjZWRhc3RpY2l0eSB24bubaSBwaOG6p24gZMawIGNodeG6qW4gaMOzYS4NCg0KLSAqKlJlc2lkdWFscyB2cyBMZXZlcmFnZSBQbG90OioqIHBow6F0IGhp4buHbiDEkWnhu4NtIGPDsyDhuqNuaCBoxrDhu59uZyBs4bubbi4NCg0KDQojIyMgKiozLjUgTmdv4bqhaSBsYWkgKE91dGxpZXJzKSoqDQoNCsSQ4buLbmggbmdoxKlhOiBMw6Agbmjhu69uZyBxdWFuIHPDoXQgbcOgIHBo4bqnbiBkxrAgKMSR4bq3YyBiaeG7h3QgbMOgIHN0dWRlbnRpemVkIHJlc2lkdWFsKSBs4bubbiBi4bqldCB0aMaw4budbmcg4oCUIG5naMSpYSBsw6AgZ2nDoSB0cuG7iyB0aOG7sWMgdOG6vyBxdcOhIGtow6FjIHNvIHbhu5tpIGdpw6EgdHLhu4sgZOG7sSDEkW/DoW4sIGTDuSBiaeG6v24gZ2nhuqNpIHRow61jaCBjw7MgdGjhu4Mga2jDtG5nIMSR4bq3YyBiaeG7h3QNCg0KRMO5bmcgc3R1ZGVudGl6ZWQgcmVzaWR1YWwgxJHhu4Mga2nhu4NtIHRyYS4NCg0KUXV5IHThuq9jIG5nxrDhu6FuZzoNCg0KLSBcKHx0X2l8ID4gMlwpOiBuZ2hpIG5n4budLg0KDQotIFwofHRfaXwgPiAzXCk6IGPDsyB0aOG7gyBsw6Agbmdv4bqhaSBsYWkgxJHDoW5nIGvhu4MuDQoNClwoXFJpZ2h0YXJyb3dcKSAqKk5nb+G6oWkgbGFpIGtow7RuZyBuaOG6pXQgdGhp4bq/dCBjw7Mg4bqjbmggaMaw4bufbmcgbOG7m24qKiwgbmjGsG5nIGPhuqduIGtp4buDbSB0cmEga+G7uS4NCg0KIyMjICoqMy42IMSQaeG7g20g4bqjbmggaMaw4bufbmcgKEluZmx1ZW50aWFsIFBvaW50cykqKg0KDQpMw6Agbmjhu69uZyDEkWnhu4NtIG3DoCBu4bq/dSBi4buLIGxv4bqhaSBi4buPLCBjw6FjIGjhu4cgc+G7kSBo4buTaSBxdXkgc+G6vSB0aGF5IMSR4buVaSDEkcOhbmcga+G7gy4gQ8OhYyBjaOG7iSBz4buRIHBo4buVIGJp4bq/biDEkeG7gyDEkW8g4bqjbmggaMaw4bufbmcgbmjGsDoNCg0KDQojIyMjICoqMy42LjEgSOG7hyBz4buRIMSRw7JuIGLhuql5IChMZXZlcmFnZSk6KioNCg0KJCQNCmhfe2lpfSA9IHhfaV5UIChYXlQgWCleey0xfSB4X2kgDQokJA0KDQotIMSQbyBraG/huqNuZyBjw6FjaCBxdWFuIHPDoXQgY+G7p2EgXCggeF9pIFwpIMSR4bq/biB0w6JtIGPhu6dhIGPDoWMgxJFp4buDbSBcKCB4IFwpLg0KDQotIE7hur91IFwoIGhfe2lpfSA+IFxmcmFjezJwfXtufSBcKTogxJFp4buDbSBjw7MgbGV2ZXJhZ2UgY2FvLg0KDQojIyMjICoqMy42LjIgS2hv4bqjbmcgY8OhY2ggQ29vayAoQ29va+KAmXMgRGlzdGFuY2UpOioqDQoNCiQkDQpEX2kgPSBcZnJhY3twIFxoYXR7XHNpZ21hfV4yIGVfaV4yfXsoMSAtIGhfe2lpfSleMiBoX3tpaX19IA0KJCQgDQoNClThu5VuZyBo4bujcCBnaeG7r2EgcGjhuqduIGTGsCB2w6AgbGV2ZXJhZ2UgxJHhu4MgxJFvIOG6o25oIGjGsOG7n25nIHThu5VuZyB0aOG7gy4NCg0KLSBO4bq/dSBcKCBEX2kgPiAwLjUgXCk6IGPDsyB0aOG7gyBjw7Mg4bqjbmggaMaw4bufbmcuDQoNCi0gTuG6v3UgXCggRF9pID4gMSBcKTog4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MsIG7Dqm4geGVtIHjDqXQga+G7uS4NCg0KDQojIyMjICoqMy42LjMgREZCRVRBUzoqKg0KDQotIE3hu6ljIHRoYXkgxJHhu5VpIGPhu6dhIGjhu4cgc+G7kSBcKFxiZXRhX2pcKSBraGkgbG/huqFpIGLhu48gcXVhbiBzw6F0IFwoaVwpLg0KDQotIETDuW5nIMSR4buDIGtp4buDbSB0cmEg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIMSRaeG7g20gbMOqbiB04burbmcgaOG7hyBz4buRIGPhu6UgdGjhu4MuDQoNCiQkDQpcdGV4dHtERkJFVEFTfV97aWp9ID0gXGZyYWN7XGhhdHtcYmV0YX1faiAtIFxoYXR7XGJldGF9X3tqKGkpfX17XHRleHR7U0V9KFxoYXR7XGJldGF9X3tqKGkpfSl9DQokJA0KDQpERkJFVEFTIGdpw7pwIHjDoWMgxJHhu4tuaCDEkWnhu4NtIG7DoG8gY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIGzDqm4gdOG7q25nIGjhu4cgc+G7kSByacOqbmcgYmnhu4d0LCBjaOG7qSBraMO0bmcgY2jhu4kgbcO0IGjDrG5oIHThu5VuZyB0aOG7gy4NCg0KTmfGsOG7oW5nIHRoYW0ga2jhuqNvOg0KDQpO4bq/dSB8XCggREZCRVRBU197aWp9fCA+IFxmcmFjezJ9e259IFwpIHF1YW4gc8OhdCAqKippKioqIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyBt4bqhbmggxJHhur9uIGjhu4cgc+G7kSANCg0KDQojIyMjICoqMy43IMSQYSBj4buZbmcgdHV54bq/bioqDQoNCsSQYSBj4buZbmcgdHV54bq/biB44bqjeSByYSBraGkgY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCB0cm9uZyBtw7QgaMOsbmggY8OzIHTGsMahbmcgcXVhbiBjYW8gduG7m2kgbmhhdS4gxJBp4buBdSBuw6B5IGThuqtuIMSR4bq/biBo4buHIHPhu5EgaOG7k2kgcXV5IMaw4bubYyBsxrDhu6NuZyBraMO0bmcg4buVbiDEkeG7i25oLCBzYWkgc+G7kSBjaHXhuqluIGzhu5tuIHbDoCBr4bq/dCBsdeG6rW4gdGjhu5FuZyBrw6ogZOG7hSBi4buLIHNhaSBs4buHY2guDQoNCkjhu4cgcXXhuqM6DQoNCiAgLSBDw6FjIGjhu4cgc+G7kSBjw7MgdGjhu4MgdGhheSDEkeG7lWkgbeG6oW5oIGtoaSBjw7MgdGjDqm0gaG/hurdjIGLhu5t0IG3hu5l0IHbDoGkgcXVhbiBzw6F0Lg0KDQogIC0gTcO0IGjDrG5oIHbhuqtuIGPDsyBSXjIgY2FvLCBuaMawbmcgY8OhYyBo4buHIHPhu5Ega2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKFAtdmFsdWUgbOG7m24pLg0KDQogIC0gS2jDsyBkaeG7hW4gZ2nhuqNpIMSRxrDhu6NjIHZhaSB0csOyIHJpw6puZyBj4bunYSB04burbmcgYmnhur9uLg0KDQoqKlZhcmlhbmNlIEluZmxhdGlvbiBGYWN0b3IgKFZJRik6KioNCg0KJCQNClxtYXRocm17VklGfV9qID0gXGZyYWN7MX17MSAtIFJfal4yfQ0KJCQNCg0KLSBcKFJfal4yXCkgOiBo4buHIHPhu5EgeMOhYyDEkeG7i25oIGtoaSBo4buTaSBxdXkgXCh4X2pcKSBsw6puIHThuqV0IGPhuqMgY8OhYyBiaeG6v24gY8OybiBs4bqhaS4NCg0KLSBO4bq/dSBcKFxtYXRocm17VklGfV9qID4gNVwpIGhv4bq3YyBcKD4gMTBcKTogY8OzIHbhuqVuIMSR4buBIGPhuqduIHjhu60gbMO9Lg0KDQojIyMjICoqMy44IFPhu61hIGNo4buvYSBtw7QgaMOsbmggc2FpKioNCg0KS2hpIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCB2aSBwaOG6oW0gY8OhYyBnaeG6oyDEkeG7i25oIGPGoSBi4bqjbiwgdGEgY+G6p24gY8OzIG5o4buvbmcgYmnhu4duIHBow6FwIGhp4buHdSBxdeG6oyDEkeG7gyDEkWnhu4F1IGNo4buJbmggaG/hurdjIHRoYXkgxJHhu5VpIG3DtCBow6xuaC4gTeG7mXQgc+G7kSBoxrDhu5tuZyB44butIGzDvSBwaOG7lSBiaeG6v246DQoNCi0gRMO5bmcgYmnhur9uIMSR4buVaSAqKihsb2csIHNxcnQsIEJveC1Db3jigKYpKiouDQoNCi0gRMO5bmcgbcO0IGjDrG5oIHBoaSB0dXnhur9uIGhv4bq3YyBtw7QgaMOsbmggR0xNLg0KDQotIExv4bqhaSBi4buPIGhv4bq3YyB0aGF5IHRo4bq/IMSRaeG7g20g4bqjbmggaMaw4bufbmcgcXXDoSBs4bubbi4NCg0KLSBUaMOqbSBiaeG6v24gYuG7iyB0aGnhur91IGhv4bq3YyBsb+G6oWkgYuG7m3QgYmnhur9uIGfDonkgbmhp4buFdS4NCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCg0KIyMgKipDSMavxqBORyA0OiDGr+G7mkMgTMav4buiTkcgSOG7olAgTMOdIFThu5BJIMSQQSAoTUFYSU1VTSBMSUtFTElIT09EIEVTVElNQVRJT04g4oCTIE1MRSkqKg0KDQojIyMgKio0LjEgR2nhu5tpIHRoaeG7h3UqKg0KDQpQaMawxqFuZyBwaMOhcCBiw6xuaCBwaMawxqFuZyB04buRaSB0aGnhu4N1IChPcmRpbmFyeSBMZWFzdCBTcXVhcmVzIC0gT0xTKSBsw6AgY8O0bmcgY+G7pSBraW5oIMSRaeG7g24gdHJvbmcgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmgsIG5oxrBuZyBoaeG7h3UgcXXhuqMgY+G7p2EgbsOzIGNo4buJIMSRxrDhu6NjIMSR4bqjbSBi4bqjbyBraGkgZOG7ryBsaeG7h3UgdHXDom4gdGjhu6cgxJHhuqd5IMSR4bunIGPDoWMgZ2nhuqMgxJHhu4tuaCBu4buBbiB04bqjbmcg4oCUIGJhbyBn4buTbSBwaMOibiBwaOG7kWkgY2h14bqpbiBj4bunYSBzYWkgc+G7kSwgcGjGsMahbmcgc2FpIMSR4buTbmcgbmjhuqV0LCB2w6AgYmnhur9uIHBo4bqjbiBo4buTaSBk4bqhbmcgbGnDqm4gdOG7pWMuIFR1eSBuaGnDqm4sIHRyb25nIHRo4buxYyB04bq/LCBk4buvIGxp4buHdSBoaeG6v20ga2hpIGhvw6BuIGjhuqNvIG5oxrAgduG6rXkuIEPDoWMgZOG6oW5nIGThu68gbGnhu4d1IHBo4buVIGJp4bq/biBuaMawIG5o4buLIHBow6JuICgwLzEpLCBz4buRIMSR4bq/bSAoY291bnQpLCBob+G6t2MgY8OhYyBnacOhIHRy4buLIGTGsMahbmcgbGnDqm4gdOG7pWMgdGjGsOG7nW5nIHZpIHBo4bqhbSBuaOG7r25nIGdp4bqjIMSR4buLbmggxJHDsywga2hp4bq/biBPTFMga2jDtG5nIGPDsm4gcGjDuSBo4bujcCBob+G6t2MgY2hvIGvhur90IHF14bqjIHNhaSBs4buHY2guDQoNClRyb25nIGLhu5FpIGPhuqNuaCBuw6B5LCBwaMawxqFuZyBwaMOhcCDGsOG7m2MgbMaw4bujbmcgaOG7o3AgbMO9IHThu5FpIMSRYSAoTWF4aW11bSBMaWtlbGlob29kIEVzdGltYXRpb24gLSBNTEUpIG7hu5VpIGLhuq10IG5oxrAgbeG7mXQgY8O0bmcgY+G7pSB0aOG7kW5nIGvDqiBt4bqhbmggbeG6vSB2w6AgbGluaCBob+G6oXQgaMahbi4gS2jDtG5nIGLhu4sgZ2nhu5tpIGjhuqFuIGLhu59pIGPDoWMgZ2nhuqMgxJHhu4tuaCBj4bupbmcgbmjhuq9jLCBNTEUgY2hvIHBow6lwIHRhIHjDonkgZOG7sW5nIHbDoCDGsOG7m2MgbMaw4bujbmcgY8OhYyBtw7QgaMOsbmggcGjDuSBo4bujcCB24bubaSBi4bqjbiBjaOG6pXQgY+G7p2Egbmhp4buBdSBsb+G6oWkgZOG7ryBsaeG7h3UgxJFhIGThuqFuZy4NCg0KUXVhbiB0cuG7jW5nIGjGoW4sIE1MRSBjaMOtbmggbMOgIG7hu4FuIHThuqNuZyBsw70gdGh1eeG6v3QgduG7r25nIGNo4bqvYyBjaG8ga2h1bmcgbcO0IGjDrG5oIGhp4buHbiDEkeG6oWk6IG3DtCBow6xuaCB0dXnhur9uIHTDrW5oIHThu5VuZyBxdcOhdCAoR2VuZXJhbGl6ZWQgTGluZWFyIE1vZGVscyAtIEdMTSkuIEdMTSBraMO0bmcgY2jhu4kgbeG7nyBy4buZbmcga2jhuqMgbsSDbmcgbcO0IGjDrG5oIGjDs2EgYmV5b25kIE9MUyBtw6AgY8OybiDEkcOzbmcgdmFpIHRyw7IgdHJ1bmcgdMOibSB4dXnDqm4gc3Xhu5F0IHBo4bqnbiBjw7JuIGzhuqFpIGPhu6dhIGN14buRbiBzw6FjaCDigJQgdHLhu58gdGjDoG5oIGPhuqd1IG7hu5FpIGdp4buvYSBsw70gdGh1eeG6v3QgdGjhu5FuZyBrw6ogY+G7lSDEkWnhu4NuIHbDoCB0aOG7sWMgdGnhu4VuIHBow6JuIHTDrWNoIGThu68gbGnhu4d1IG5nw6B5IG5heS4NCg0KIyMjICoqNC4yIEjDoG0gaOG7o3AgbMO9IChMaWtlbGlob29kIEZ1bmN0aW9uKSoqDQoNCkjDoG0gaOG7o3AgbMO9IGzDoCBt4buZdCBow6BtIHjDoWMgc3XhuqV0IGPhu6dhIHRvw6BuIGLhu5kgZOG7ryBsaeG7h3UgxJHDoyBxdWFuIHPDoXQsIGJp4buDdSBkaeG7hW4gbmjGsCBt4buZdCBow6BtIGPhu6dhIHRoYW0gc+G7kSBcKFx0aGV0YVwpLg0KDQpHaeG6oyBz4butIHRhIGPDsyBt4buZdCBt4bqrdSBn4buTbSBcKG5cKSBxdWFuIHPDoXQgxJHhu5ljIGzhuq1wIFwoeV8xLCB5XzIsIFxsZG90cywgeV9uXCksIHbhu5tpIG3hu5dpIFwoeV9pXCkgY8OzIHBow6JuIHBo4buRaSB4w6FjIHN14bqldCBcKGYoeV9pOyBcdGhldGEpXCksIHRow6w6DQoNCioqSMOgbSBo4bujcCBsw706KioNCg0KJCQNCkwoXHRoZXRhKSA9IFxwcm9kX3tpPTF9XntufSBmKHlfaTsgXHRoZXRhKQ0KJCQNCg0KLSBcKEwoXHRoZXRhKVwpOiBow6BtIGjhu6NwIGzDvQ0KDQotIFwoXHRoZXRhXCk6IHZlY3RvciBjw6FjIHRoYW0gc+G7kSBj4bqnbiDGsOG7m2MgbMaw4bujbmcNCg0KLSBcKGYoeV9pOyBcdGhldGEpXCk6IG3huq10IMSR4buZIHjDoWMgc3XhuqV0IChob+G6t2Mga2jhu5FpIHjDoWMgc3XhuqV0KSBj4bunYSBcKHlfaVwpDQoNCioqTG9nLWjhu6NwIGzDvSAobG9nLWxpa2VsaWhvb2QpOioqDQoNCiQkDQpcZWxsKFx0aGV0YSkgPSBcbG9nIEwoXHRoZXRhKSA9IFxzdW1fe2k9MX1ee259IFxsb2cgZih5X2k7IFx0aGV0YSkNCiQkDQoNCi0gROG7hSDEkeG6oW8gaMOgbSBoxqFuIHbDrCB0w61jaCB0aMOgbmggdOG7lW5nLg0KDQotIEdpw6EgdHLhu4sgY+G7sWMgxJHhuqFpIGPhu6dhIFwoXGVsbChcdGhldGEpXCkgdHLDuW5nIHbhu5tpIFwoTChcdGhldGEpXCkuDQoNCiMjIyAqKjQuMyDGr+G7m2MgbMaw4bujbmcgaOG7o3AgbMO9IHThu5FpIMSRYSAoTWF4aW11bSBMaWtlbGlob29kIEVzdGltYXRpb24g4oCTIE1MRSkqKg0KDQpNTEUgbMOgIGdpw6EgdHLhu4sgXChcaGF0e1x0aGV0YX1cKSBj4bunYSB0aGFtIHPhu5EgXChcdGhldGFcKSBzYW8gY2hvIGxvZy1saWtlbGlob29kIMSR4bqhdCBj4buxYyDEkeG6oWkuDQoNCg0KJCQNClxoYXR7XHRoZXRhfSA9IFxhcmdcbWF4X3tcdGhldGF9IFwsIFxlbGwoXHRoZXRhKQ0KJCQNCg0KxJDhu4MgdMOsbSBcKFxoYXR7XHRoZXRhfVwpLCB0YSBnaeG6o2k6DQoNCiQkDQpcZnJhY3tkXGVsbChcdGhldGEpfXtkXHRoZXRhfSA9IDANCiQkDQoNClwoXFJpZ2h0YXJyb3dcKSDEkMOieSBn4buNaSBsw6AgKnBoxrDGoW5nIHRyw6xuaCDEkWnhu4NtKiAoc2NvcmUgZXF1YXRpb24pLg0KDQojIyMgKio0LjQgTWEgdHLhuq1uIHRow7RuZyB0aW4gRmlzaGVyIHbDoCBwaMawxqFuZyBzYWkqKg0KDQojIyMjICoqNC40LjEuIEjDoG0gxJFp4buDbSAoU2NvcmUgRnVuY3Rpb24pOioqDQoNCiQkDQpVKFx0aGV0YSkgPSBcZnJhY3tkXGVsbChcdGhldGEpfXtkXHRoZXRhfQ0KJCQNCg0KLSBcKFUoXHRoZXRhKVwpOiDEkeG7mSBk4buRYyBj4bunYSBsb2ctbGlrZWxpaG9vZCB0aGVvIFwoXHRoZXRhXCkNCg0KIyMjIyAqKjQuNC4yIE1hIHRy4bqtbiB0aMO0bmcgdGluIEZpc2hlcjoqKg0KDQokJA0KSShcdGhldGEpID0gLVxtYXRoYmJ7RX0gXGxlZnRbIFxmcmFje2ReMiBcZWxsKFx0aGV0YSl9e2RcdGhldGFeMn0gXHJpZ2h0XQ0KJCQNCg0KLSBcKEkoXHRoZXRhKVwpOiBr4buzIHbhu41uZyDDom0gY+G7p2EgxJHhuqFvIGjDoG0gYuG6rWMgaGFpIGxvZy1saWtlbGlob29kIOKGkiDEkW8gxJHhu5kgY29uZy4NCg0KLSBMw6AgeOG6pXAgeOG7iSBuZ8aw4bujYyBs4bqhaSBj4bunYSBwaMawxqFuZyBzYWk6DQoNCiQkDQpcbWF0aHJte1Zhcn0oXGhhdHtcdGhldGF9KSBcYXBwcm94IFxmcmFjezF9e0koXHRoZXRhKX0NCiQkDQoNCiMjIyAqKjQuNSBDw6FjIHTDrW5oIGNo4bqldCBj4bunYSBNTEUqKg0KDQpNTEUgY8OzIG5oaeG7gXUgdMOtbmggY2jhuqV0IHThu5F0IHbhu4EgbeG6t3QgbMO9IHRodXnhur90LCDEkeG6t2MgYmnhu4d0IGtoaSBrw61jaCB0aMaw4bubYyBt4bqrdSBuIGzhu5tuOg0KDQp8IFTDrW5oIGNo4bqldCAgICAgICAgICAgICAgICB8IEdp4bqjaSB0aMOtY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqTmjhuqV0IHF1w6FuKiogICAgICAgICAgICB8ICRcaGF0e1x0aGV0YX0gXHRvIFx0aGV0YSQga2hpICRuIFx0byBcaW5mdHkkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipLaMO0bmcgY2jhu4djaCB0aeG7h20gY+G6rW4qKiB8IMSQ4buZIGzhu4djaCBnaeG7r2EgJFxoYXR7XHRoZXRhfSQgdsOgICRcdGhldGEkIHRp4bq/biB24buBIDAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipIaeG7h3UgcXXhuqMqKiAgICAgICAgICAgICB8IE1MRSDEkeG6oXQgZ2nhu5tpIGjhuqFuIENyYW3DqXLigJNSYW8sIGzDoCDGsOG7m2MgbMaw4bujbmcgInThu5F0IG5o4bqldCIgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipUaeG7h20gY+G6rW4gY2h14bqpbioqICAgICAgIHwgS2hpICRuJCBs4bubbiwgcGjDom4gcGjhu5FpIGPhu6dhICRcaGF0e1x0aGV0YX0kIGfhuqduIGNodeG6qW46ICRcaGF0e1x0aGV0YX0gXHNpbSBcbWF0aGNhbHtOfShcdGhldGEsIEkoXHRoZXRhKV57LTF9KSQgfA0KDQoNCiMjIyAqKjQuNiBLaeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCB24bubaSBNTEUqKg0KDQpNdeG7kW4ga2nhu4NtIHRyYSBnaeG6oyB0aHV54bq/dDoNCg0KXFsNCkhfMDogXHRoZXRhID0gXHRoZXRhXzANClxdDQoNCnRhIGPDsyAqKmJhIGPDoWNoKiogcGjhu5UgYmnhur9uOg0KDQojIyMjICoqNC42LjEuIFdhbGQgVGVzdDoqKg0KDQpcWw0KWiA9IFxmcmFje1xoYXR7XHRoZXRhfSAtIFx0aGV0YV8wfXtTRShcaGF0e1x0aGV0YX0pfSwgXHF1YWQgWiBcc2ltIE4oMCwxKQ0KXF0NCg0KLSBEw7luZyDEkeG7gyBraeG7g20gxJHhu4tuaCBu4bq/dSBcKCBTRShcaGF0e1x0aGV0YX0pIFwpIMSRw6MgY8OzLg0KDQoNCiMjIyMgKio0LjYuMi4gTGlrZWxpaG9vZCBSYXRpbyBUZXN0IChMUlQpOioqDQoNClxbDQpMUiA9IDIgXGxlZnRbIFxlbGwoXGhhdHtcdGhldGF9KSAtIFxlbGwoXHRoZXRhXzApIFxyaWdodF0gXHNpbSBcY2hpXjJfe2RmfQ0KXF0NCg0KLSBTbyBzw6FuaCBsb2ctbGlrZWxpaG9vZCBj4bunYSBtw7QgaMOsbmggxJHhuqd5IMSR4bunIHbDoCBtw7QgaMOsbmggcsO6dCBn4buNbi4NCg0KLSBcKCBkZiBcKTogc+G7kSB0aGFtIHPhu5EgYuG7iyByw6BuZyBideG7mWMgdHJvbmcgXCggSF8wIFwpLg0KDQoNCiMjIyMgKio0LjYuMy4gU2NvcmUgVGVzdCAoTGFncmFuZ2UgTXVsdGlwbGllciBUZXN0KToqKg0KDQpcWw0KUyA9IFxmcmFje1UoXHRoZXRhXzApXjJ9e0koXHRoZXRhXzApfSBcc2ltIFxjaGleMl8xDQpcXQ0KDQpLaMO0bmcgY+G6p24gxrDhu5tjIGzGsOG7o25nIG3DtCBow6xuaCDEkeG6p3kgxJHhu6cuDQoNCiMjIyAqKjQuNyBTbyBzw6FuaCBtw7QgaMOsbmggYuG6sW5nIEFJQyB2w6AgQklDKioNCg0KS2hpIGtow7RuZyB0aOG7gyBkw7luZyBraeG7g20gxJHhu4tuaCBMUlQgKGRvIG3DtCBow6xuaCBraMO0bmcgbOG7k25nKSwgdGEgZMO5bmc6DQoNCiMjIyMgKio0LjcuMS4gQUlDIOKAkyBBa2Fpa2UgSW5mb3JtYXRpb24gQ3JpdGVyaW9uOioqDQoNClxbDQpcdGV4dHtBSUN9ID0gLTJcZWxsICsgMmsNClxdDQoNCi0gXChrXCk6IHPhu5EgdGhhbSBz4buRIHRyb25nIG3DtCBow6xuaA0KDQotIFwoXGVsbFwpOiBsb2ctbGlrZWxpaG9vZCB04bqhaSBNTEUNCg0KIyMjIyAqKjQuNy4yLiBCSUMg4oCTIEJheWVzaWFuIEluZm9ybWF0aW9uIENyaXRlcmlvbjoqKg0KDQpcWw0KXHRleHR7QklDfSA9IC0yXGVsbCArIFxsb2cobikgXGNkb3Qgaw0KXF0NCg0KLSBcKG5cKTogc+G7kSBxdWFuIHPDoXQNCg0KDQpDaOG7jW4gbcO0IGjDrG5oIGPDsyBBSUMvQklDIHRo4bqlcCBoxqFuLg0KDQojIyMgKio0LjggTUxFIHRyb25nIG3DtCBow6xuaCBraMO0bmcgdHV54bq/biB0w61uaCBjaHXhuqluKioNCg0KKipI4buTaSBxdXkgbG9naXN0aWMgKG5o4buLIHBow6JuKToqKg0KDQpcWw0KeV9pIFxzaW0gXHRleHR7QmVybm91bGxpfShccGlfaSksIFxxdWFkIFxsb2dcbGVmdChcZnJhY3tccGlfaX17MSAtIFxwaV9pfVxyaWdodCkgPSB4X2leVCBcYmV0YQ0KXF0NCg0KDQoqKkjhu5NpIHF1eSBQb2lzc29uICjEkeG6v20pOioqDQoNClxbDQp5X2kgXHNpbSBcdGV4dHtQb2lzc29ufShcbXVfaSksIFxxdWFkIFxsb2coXG11X2kpID0geF9pXlQgXGJldGENClxdDQoNCioqSOG7k2kgcXV5IEdhbW1hIChkxrDGoW5nIGxpw6puIHThu6VjKToqKg0KDQpcWw0KeV9pIFxzaW0gXHRleHR7R2FtbWF9KFxhbHBoYSwgXG11X2kpLCBccXVhZCBcbG9nKFxtdV9pKSA9IHhfaV5UIFxiZXRhDQpcXQ0KDQpD4bqjIGJhIMSR4buBdSBkw7luZyAqKk1MRSoqIMSR4buDIMaw4bubYyBsxrDhu6NuZyBcKFxiZXRhXCksIGNo4bupIGtow7RuZyBkw7luZyBPTFMuDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KDQoNCiMjICoqQ0jGr8agTkcgNTogQ+G6pFUgVFLDmkMgQ+G7pkEgTcOUIEjDjE5IIFRVWeG6vk4gVMONTkggVOG7lE5HIFFVw4FUIChHTE0gU1RSVUNUVVJFKSoqDQoNCioqKkNoxrDGoW5nIG7DoHkgaMaw4bubbmcgxJHhur9uIHZp4buHYyBjdW5nIGPhuqVwIG3hu5l0IGPDoWkgbmjDrG4gdG/DoG4gZGnhu4duIHbDoCBjw7MgaOG7hyB0aOG7kW5nIHbhu4EgbcO0IGjDrG5oIHR1eeG6v24gdMOtbmggdOG7lW5nIHF1w6F0IChHTE0pIOKAkyBt4buZdCBraHXDtG4ga2jhu5UgbeG6oW5oIG3hur0gY2hvIHBow6lwIG3hu58gcuG7mW5nIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIHNhbmcgbmhp4buBdSBsb+G6oWkgZOG7ryBsaeG7h3Uga2jDoWMgbmhhdS4gTmfGsOG7nWkgaOG7jWMgc+G6vSDEkcaw4bujYyBraMOhbSBwaMOhIGPhuqV1IHRyw7pjIGJhIHRow6BuaCBwaOG6p24gY+G7kXQgbMO1aSBj4bunYSBHTE06IHBow6JuIHBo4buRaSB4w6FjIHN14bqldCB0aHXhu5ljIGjhu40gaMOgbSBtxaksIHByZWRpY3RvciB0dXnhur9uIHTDrW5oIHbDoCBow6BtIGxpw6puIGvhur90IOKAkyB54bq/dSB04buRIGvhur90IG7hu5FpIGvhu7MgduG7jW5nIGPhu6dhIGJp4bq/biBwaOG6o24gaOG7k2kgduG7m2kgdOG7lSBo4bujcCB0dXnhur9uIHTDrW5oIGPhu6dhIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2guIENoxrDGoW5nIGPFqW5nIGzDoG0gcsO1IHZhaSB0csOyIGPhu6dhIGjDoG0gbGnDqm4ga+G6v3QgY2h14bqpbiAoY2Fub25pY2FsIGxpbmspIHRyb25nIHZp4buHYyDEkcahbiBnaeG6o24gaMOzYSBxdcOhIHRyw6xuaCDGsOG7m2MgbMaw4bujbmcgdsOgIGdp4bqjaSB0aMOtY2guIE5nb8OgaSByYSwgbmfGsOG7nWkgaOG7jWMgc+G6vSBu4bqvbSB24buvbmcgY8OhY2ggeMOieSBk4buxbmcgbcO0IGjDrG5oIHBow7kgaOG7o3AgY2hvIGThu68gbGnhu4d1IG5o4buLIHBow6JuLCDEkeG6v20sIHThu7cgbOG7hyB2w6AgZOG7ryBsaeG7h3UgZMawxqFuZyBsacOqbiB04bulYywgY8WpbmcgbmjGsCBoaeG7g3UgxJHGsOG7o2MgY8ahIGNo4bq/IG3DtCBow6xuaCBow7NhIHBoxrDGoW5nIHNhaSB0aGF5IMSR4buVaSB0aMO0bmcgcXVhIGjDoG0gcGjGsMahbmcgc2FpLiBLaeG6v24gdGjhu6ljIHRyb25nIGNoxrDGoW5nIGzDoCBu4buBbiB04bqjbmcgcXVhbiB0cuG7jW5nIGNobyB2aeG7h2Mgw6FwIGThu6VuZyBHTE0gbeG7mXQgY8OhY2ggY2jDrW5oIHjDoWMgdsOgIGxpbmggaG/huqF0IHRyb25nIHRo4buxYyB0aeG7hW4gcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UuKioqDQoNCiMjIyAqKjUuMSBHaeG7m2kgdGhp4buHdSoqDQoNCk3DtCBow6xuaCB0dXnhur9uIHTDrW5oIHThu5VuZyBxdcOhdCAoR2VuZXJhbGl6ZWQgTGluZWFyIE1vZGVsIOKAkyBHTE0pIGzDoCBt4buZdCBs4bubcCBtw7QgaMOsbmggdGjhu5FuZyBrw6ogbGluaCBob+G6oXQsIGNobyBwaMOpcCBtw7QgaMOsbmggaMOzYSBiaeG6v24gcGjhuqNuIGjhu5NpIGPDsyBwaMOibiBwaOG7kWkga2jDoWMgcGjDom4gcGjhu5FpIGNodeG6qW4gKE5vcm1hbCkuIMSQw6J5IGzDoCBt4buZdCBixrDhu5tjIHRp4bq/biB04buxIG5oacOqbiB04burIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIGPhu5UgxJFp4buDbiwgZOG7sWEgdHLDqm4gbMO9IHRodXnhur90IHBow6JuIHBo4buRaSB0aHXhu5ljIGjhu40gaMOgbSBtxakgbeG7mXQgdGhhbSBz4buRIChPbmUtUGFyYW1ldGVyIEV4cG9uZW50aWFsIEZhbWlseSkuDQoNCkdMTSBjdW5nIGPhuqVwIG3hu5l0IGtodW5nIHRvw6FuIGjhu41jIHRo4buRbmcgbmjhuqV0IGNobyBuaGnhu4F1IG3DtCBow6xuaCBxdWVuIHRodeG7mWMgbmjGsCBo4buTaSBxdXkgdHV54bq/biB0w61uaCwgaOG7k2kgcXV5IGxvZ2lzdGljLCBo4buTaSBxdXkgUG9pc3NvbiB2w6AgR2FtbWEgcmVncmVzc2lvbi4gTeG7l2kgbcO0IGjDrG5oIHRyb25nIEdMTSBjaGlhIHPhursgbeG7mXQgY+G6pXUgdHLDumMgZ+G7k20gYmEgdGjDoG5oIHBo4bqnbiBjxqEgYuG6o24sIMSR4bqjbSBi4bqjbyB0w61uaCB0aOG7kW5nIG5o4bqldCB0cm9uZyB4w6J5IGThu7FuZywgxrDhu5tjIGzGsOG7o25nIHbDoCBzdXkgbHXhuq1uLg0KDQojIyMgKio1LjIgQ+G6pXUgdHLDumMgY+G7p2EgR0xNKioNCg0KIyMjIyAqKjUuMi4xIFRow6BuaCBwaOG6p24gbmfhuqt1IG5oacOqbiAoUmFuZG9tIGNvbXBvbmVudCkqKg0KDQpHaeG6oyDEkeG7i25oIHLhurFuZyBiaeG6v24gcGjhuqNuIGjhu5NpIFwoIHlfaSBcKSAoY8OzIMSRaeG7gXUga2nhu4duIHRoZW8gYmnhur9uIGdp4bqjaSB0aMOtY2ggXCh4X2lcKSDEkcaw4bujYyBnaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSB0aGVvIG3hu5l0IHBow6JuIHBo4buRaSB0aHXhu5ljIGjhu40gaMOgbSBtxakgbeG7mXQgdGhhbSBz4buRIChPbmUtUGFyYW1ldGVyIEV4cG9uZW50aWFsIEZhbWlseSk6DQoNCiQkDQpmKHlfaTsgXHRoZXRhX2ksIFxwaGkpID0gXGV4cCBcbGVmdFx7IFxmcmFje3lfaSBcdGhldGFfaSAtIGIoXHRoZXRhX2kpfXtccGhpfSArIGMoeV9pLCBccGhpKSBccmlnaHRcfQ0KJCQNCg0KVHJvbmcgxJHDszogDQoNCi0gXChcdGhldGFfaVwpOiB0aGFtIHPhu5EgdOG7sSBuaGnDqm4gKG5hdHVyYWwgcGFyYW1ldGVyKQ0KLSBcKFxwaGlcKTogdGhhbSBz4buRIHBow6JuIHTDoW4gKGRpc3BlcnNpb24gcGFyYW1ldGVyKSwga2jDtG5nIHBo4bqjaSBsw7pjIG7DoG8gY8WpbmcgY8OzICh2w60gZOG7pSBQb2lzc29uIHRow6wgXChccGhpID0gMVwpKQ0KLSBcKGIoXHRoZXRhX2kpXCk6IGjDoG0gbG9nIHBhcnRpdGlvbg0KLSBcKGMoeV9pLCBccGhpKVwpOiBow6BtIGNodeG6qW4gaMOzYSDEkeG7gyBi4bqjbyB0b8OgbiB0w61jaCBwaMOibiBi4bqxbmcgMQ0KDQpI4buNIGjDoG0gbcWpIGJhbyBn4buTbSBOb3JtYWwsIFBvaXNzb24sIEJpbm9taWFsLCBHYW1tYSwuLi4NCg0KDQojIyMjICoqNS4yLjIuIFRow6BuaCBwaOG6p24gaOG7hyB0aOG7kW5nIChTeXN0ZW1hdGljIGNvbXBvbmVudCkqKg0KDQpUxrDGoW5nIHThu7EgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmgsIEdMTSBz4butIGThu6VuZyBt4buZdCBow6BtIHR1eeG6v24gdMOtbmggxJHhu4MgYmnhu4N1IGRp4buFbiDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoOg0KDQokJA0KXGV0YV9pID0geF9pXlQgXGJldGEgPSBcYmV0YV8wICsgXGJldGFfMSB4X3tpMX0gKyBcY2RvdHMgKyBcYmV0YV9wIHhfe2lwfQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KLSBcKFxldGFfaVwpOiBwcmVkaWN0b3IgdHV54bq/biB0w61uaA0KLSBcKHhfaVwpOiB2ZWN0b3IgaMOgbmcgZ+G7k20gY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCBj4bunYSBxdWFuIHPDoXQgXChpXCkNCi0gXChcYmV0YVwpOiB2ZWN0b3IgaOG7hyBz4buRIGjhu5NpIHF1eQ0KDQrEkMOieSBsw6AgdGjDoG5oIHBo4bqnbiBjaOG7qWEg4bqjbmggaMaw4bufbmcgY+G7p2EgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIGzDqm4gbcO0IGjDrG5oLg0KDQojIyMjICoqNS4yLjMuIEjDoG0gbGnDqm4ga+G6v3QgKExpbmsgZnVuY3Rpb24pKioNCg0KR0xNIGTDuW5nIG3hu5l0IGjDoG0gbGnDqm4ga+G6v3QgXCggZyhcY2RvdCkgXCkgxJHhu4Mga+G6v3QgbuG7kWkgdHJ1bmcgYsOsbmggXChcbXVfaSA9IEVbeV9pXVwpIHbhu5tpIHByZWRpY3RvciB0dXnhur9uIHTDrW5oIFwoXGV0YV9pXCk6DQoNCiQkDQpnKFxtdV9pKSA9IFxldGFfaSBccXVhZCBcdGV4dHtoYXl9IFxxdWFkIFxtdV9pID0gZ157LTF9KFxldGFfaSkNCiQkDQoNCsSQw6J5IGzDoCB54bq/dSB04buRIGdpw7pwIEdMTSBt4bufIHLhu5luZyDEkcaw4bujYyBzYW5nIGPDoWMgZOG7ryBsaeG7h3UgcGhpIGNodeG6qW4uIFZp4buHYyBs4buxYSBjaOG7jW4gaMOgbSBsacOqbiBr4bq/dCBwaMO5IGjhu6NwIGzDoCBy4bqldCBxdWFuIHRy4buNbmcgdsOgIHBo4bulIHRodeG7mWMgdsOgbyBi4bqjbiBjaOG6pXQgY+G7p2EgZOG7ryBsaeG7h3UuIENobyBwaMOpcCBtw7QgaMOsbmggaMOzYSBjw6FjIGJp4bq/biBwaOG6o24gaOG7k2kgY8OzIMSR4bq3YyB0w61uaCBwaGkgdHV54bq/biwga2jDtG5nIMOibSwgZ2nhu5tpIGjhuqFuIHRyb25nIGtob+G6o25nICgwLDEpLOKApg0KDQoqKkjDoG0gbGnDqm4ga+G6v3QgdGjGsOG7nW5nIGTDuW5nOioqDQoNCnwgUGjDom4gcGjhu5FpICB8IFwoXG11X2kgPSBFW3lfaV1cKSAgICB8IExpbmsgZnVuY3Rpb24gXChnKFxtdSlcKSAgICAgICAgICAgICAgICAgICB8IEdoaSBjaMO6ICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgTm9ybWFsICAgICB8IFwoXG11IFxpbiBcbWF0aGJie1J9XCkgIHwgXChnKFxtdSkgPSBcbXVcKSAoaWRlbnRpdHkpICAgICAgICAgICAgICAgIHwgSOG7k2kgcXV5IHR1eeG6v24gdMOtbmggY2h14bqpbiAgIHwNCnwgQmlub21pYWwgICB8IFwoXG11IFxpbiAoMCwxKVwpICAgICAgIHwgXChnKFxtdSkgPSBcbG9nIFxmcmFje1xtdX17MS1cbXV9XCkgICAgICAgIHwgTG9naXN0aWMgcmVncmVzc2lvbiAgICAgICAgfA0KfCBQb2lzc29uICAgIHwgXChcbXUgPiAwXCkgICAgICAgICAgICAgfCBcKGcoXG11KSA9IFxsb2coXG11KVwpICAgICAgICAgICAgICAgICAgICAgIHwgSOG7k2kgcXV5IMSR4bq/bSAgICAgICAgICAgICAgIHwNCnwgR2FtbWEgICAgICB8IFwoXG11ID4gMFwpICAgICAgICAgICAgIHwgXChnKFxtdSkgPSBcbG9nKFxtdSlcKSBob+G6t2MgXChnKFxtdSkgPSBcZnJhY3sxfXtcbXV9XCkgfCBNw7QgaMOsbmggZOG7ryBsaeG7h3UgZMawxqFuZyAgICB8DQoNCiMjIyAqKjUuMyBWw60gZOG7pSBtw7QgaMOsbmggaMOzYSB0cm9uZyBHTE0qKg0KDQojIyMjICoqNS4zLjEgSOG7k2kgcXV5IExvZ2lzdGljIChuaOG7iyBwaMOibikqKg0KDQpcWw0KeV9pIFxzaW0gXHRleHR7QmVybm91bGxpfShccGlfaSkNClxdDQoNClxbDQpnKFxwaV9pKSA9IFxsb2cgXGxlZnQoXGZyYWN7XHBpX2l9ezEtXHBpX2l9XHJpZ2h0KSA9IFxldGFfaQ0KXF0NCg0KXFsNClxwaV9pID0gUCh5X2kgPSAxIFxtaWQgeF9pKQ0KXF0NCg0KLSBEw7luZyBjaG8gZOG7ryBsaeG7h3UgbmjGsDogc+G7kW5nL2No4bq/dCwgbXVhL2tow7RuZyBtdWEsIMSRw7puZy9zYWnigKYNCg0KIyMjIyAqKjUuMy4yIEjhu5NpIHF1eSBQb2lzc29uICjEkeG6v20pKioNCg0KXFsNCnlfaSBcc2ltIFx0ZXh0e1BvaXNzb259KFxtdV9pKQ0KXF0NCg0KXFsNClxsb2coXG11X2kpID0geF9pXlQgXGJldGENClxdDQoNCi0gXChcbXVfaVwpOiBz4buRIHPhu7Ega2nhu4duIGvhu7MgduG7jW5nIHjhuqN5IHJhLg0KDQotIETDuW5nIGNobyBk4buvIGxp4buHdTogc+G7kSBjYSBi4buHbmgsIHPhu5EgbOG6p24gdmkgcGjhuqFtLCBz4buRIGdpYW8gZOG7i2No4oCmDQoNCg0KIyMjIyAqKjUuMy4zIEjhu5NpIHF1eSBHYW1tYSAoZMawxqFuZyBsacOqbiB04bulYykqKg0KDQpcWw0KeV9pIFxzaW0gXHRleHR7R2FtbWF9KFxhbHBoYSwgXG11X2kpDQpcXQ0KDQpIw6BtIGxpw6puIGvhur90Og0KDQpcWw0KZyhcbXVfaSkgPSBcbG9nKFxtdV9pKSBccXVhZCBcdGV4dHtob+G6t2N9IFxxdWFkIGcoXG11X2kpID0gXGZyYWN7MX17XG11X2l9DQpcXQ0KDQotIETDuW5nIGNobyBk4buvIGxp4buHdSBjaGkgcGjDrSwgxJHhu5kgZMOgaSwgdGjhu51pIGdpYW4NCg0KIyMjICoqNS40IEjDoG0gcGjGsMahbmcgc2FpIChWYXJpYW5jZSBGdW5jdGlvbikqKg0KDQpUcm9uZyBHTE0sIHBoxrDGoW5nIHNhaSBj4bunYSBcKCB5X2kgXCkga2jDtG5nIGPhuqduIGLhurFuZyBuaGF1IG3DoCDEkcaw4bujYyBtw7QgaMOsbmggaMOzYSBuaMawIGjDoG0gY+G7p2EgXCggXG11X2kgXCk6DQoNClxbDQpcdGV4dHtWYXJ9KHlfaSkgPSBccGhpIFxjZG90IFYoXG11X2kpDQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIFxwaGkgXCk6IHRoYW0gc+G7kSBwaMOibiB0w6FuIChkaXNwZXJzaW9uIHBhcmFtZXRlcikNCi0gXCggVihcbXUpIFwpOiBow6BtIHBoxrDGoW5nIHNhaSBwaOG7pSB0aHXhu5ljIHbDoG8gdHJ1bmcgYsOsbmggXCggXG11IFwpDQoNCkjDoG0gXCggVihcbXUpIFwpIHTDuXkgdGhlbyBwaMOibiBwaOG7kWkgbmjGsCBzYXU6DQoNCnwgUGjDom4gcGjhu5FpICB8IFwoIFYoXG11KSBcKSAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgTm9ybWFsICAgICB8IDEgICAgICAgICAgICAgICAgICAgICB8DQp8IEJpbm9taWFsICAgfCBcKCBcbXUgKDEgLSBcbXUpIFwpICAgIHwNCnwgUG9pc3NvbiAgICB8IFwoIFxtdSBcKSAgICAgICAgICAgICAgfA0KfCBHYW1tYSAgICAgIHwgXCggXG11XjIgXCkgICAgICAgICAgICB8DQoNClZp4buHYyBtw7QgaMOsbmggaMOzYSBwaMawxqFuZyBzYWkgbmjGsCB0csOqbiBnacO6cCB44butIGzDvSDEkcaw4bujYyBoaeG7h24gdMaw4bujbmcgcGjGsMahbmcgc2FpIHRoYXkgxJHhu5VpIChoZXRlcm9zY2VkYXN0aWNpdHkpLCB24buRbiBsw6AgbeG7mXQgZ2nhuqMgxJHhu4tuaCBi4buLIHZpIHBo4bqhbSB0cm9uZyBwaMawxqFuZyBwaMOhcCBPTFMgKEjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIHRow7RuZyB0aMaw4budbmcpLg0KDQojIyMgKio1LjUgQ8OhYyBraMOhaSBuaeG7h20gbeG7nyBy4buZbmcqKg0KDQoqKkNhbm9uaWNhbCBMaW5rIEZ1bmN0aW9uKiogbMOgIGjDoG0gbGnDqm4ga+G6v3Qgc2FvIGNobyBwcmVkaWN0b3IgdHV54bq/biB0w61uaCBjaMOtbmggbMOgIHRoYW0gc+G7kSB04buxIG5oacOqbiBcKFx0aGV0YVwpIHRyb25nIHBow6JuIHBo4buRaSBo4buNIGjDoG0gbcWpOg0KDQpcWw0KXHRoZXRhX2kgPSBcZXRhX2kgPSB4X2leVCBcYmV0YQ0KXF0NCg0KVmnhu4djIHPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3QgY2h14bqpbiBtYW5nIGzhuqFpIG5oaeG7gXUgbOG7o2kgw61jaCBsw70gdGh1eeG6v3QgdsOgIHRo4buxYyB0aeG7hW46DQoNCiAgLSDEkMahbiBnaeG6o24gaMOzYSBk4bqhbmcgaMOgbSBo4bujcCBsw70gKGxvZy1saWtlbGlob29kKS4NCg0KICAtIFRodeG6rXQgdG/DoW4gdOG7kWkgxrB1IGjhu5lpIHThu6UgbmhhbmggaMahbiAodsOtIGThu6U6IElSTFMpLg0KDQogIC0gTWEgdHLhuq1uIEZpc2hlciB2w6AgY8OhYyBjw7RuZyB0aOG7qWMgxrDhu5tjIGzGsOG7o25nIHRy4bufIG7Dqm4gcsO1IHLDoG5nIGjGoW4uDQoNClbDrSBk4bulIHbhu4EgaMOgbSBsacOqbiBr4bq/dCBjaHXhuqluIChjYW5vbmljYWwgbGluayk6DQoNCnwgUGjDom4gcGjhu5FpIHwgSMOgbSBsacOqbiBr4bq/dCAoTGluayBmdW5jdGlvbikgfA0KfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgQmlub21pYWwgIHwgbG9naXQ6IFwoXGxvZ1xmcmFje1xtdX17MS1cbXV9XCkgICAgICAgICAgfA0KfCBQb2lzc29uICAgfCBsb2c6IFwoXGxvZyhcbXUpXCkgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IE5vcm1hbCAgICB8IGlkZW50aXR5OiBcKFxtdVwpICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KVHJvbmcgbeG7mXQgc+G7kSB0csaw4budbmcgaOG7o3AsIG5nxrDhu51pIGTDuW5nIGPDsyB0aOG7gyBs4buxYSBjaOG7jW4gY8OhYyBow6BtIGxpw6puIGvhur90IGtow6FjIChraMO0bmcgY2h14bqpbikgxJHhu4MgcGjDuSBo4bujcCB24bubaSDEkeG6t2MgxJFp4buDbSBk4buvIGxp4buHdSBob+G6t2MgecOqdSBj4bqndSBkaeG7hW4gZ2nhuqNpLiBUdXkgbmhpw6puLCBkw7luZyBow6BtIGxpw6puIGvhur90IGNodeG6qW4gdGjGsOG7nW5nIGdpw7pwIHF1w6EgdHLDrG5oIHTDrW5oIHRvw6FuIGhp4buHdSBxdeG6oyB2w6Ag4buVbiDEkeG7i25oIGjGoW4uDQoNCioqTMawdSDDvToqKiBEw7kgR0xNIGfhu41pIGzDoCAidHV54bq/biB0w61uaCIsIG5oxrBuZyBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIFwoIHkgXCkgdsOgIFwoIHggXCkgY8OzIHRo4buDICoqcGhpIHR1eeG6v24qKiBkbyBz4butIGThu6VuZyBow6BtIGxpw6puIGvhur90IChsaW5rIGZ1bmN0aW9uKS4gVGjDtG5nIHF1YSBow6BtIGxpw6puIGvhur90LCBtw7QgaMOsbmggR0xNIGNobyBwaMOpcCB0aGnhur90IGzhuq1wIGPDoWMgcXVhbiBo4buHIHBoaSB0dXnhur9uIGdp4buvYSBiaeG6v24gcGjhuqNuIGjhu5NpIHbDoCBiaeG6v24gZ2nhuqNpIHRow61jaCwgcGjDuSBo4bujcCB24bubaSBuaGnhu4F1IGxv4bqhaSBk4buvIGxp4buHdSB0aOG7sWMgdOG6vyBuaMawIG5o4buLIHBow6JuLCDEkeG6v20sIHThu7cgbOG7hywgaGF5IGTGsMahbmcgbGnDqm4gdOG7pWMuDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KDQoNCiMjICoqQ0jGr8agTkcgNjogxq/hu5pDIEzGr+G7ok5HIFRST05HIE3DlCBIw4xOSCBUVVnhur5OIFTDjU5IIFThu5RORyBRVcOBVCAoR0xNcykqKg0KDQojIyMgKio2LjEgR2nhu5tpIHRoaeG7h3UqKg0KDQpTYXUga2hpIHRoaeG6v3QgbOG6rXAgxJHhuqd5IMSR4bunIGPhuqV1IHRyw7pjIGPhu6dhIG3hu5l0IG3DtCBow6xuaCB0dXnhur9uIHTDrW5oIHThu5VuZyBxdcOhdCAoR0xNKSBn4buTbSBiYSB0aMOgbmggcGjhuqduIGNow61uaDogcGjDom4gcGjhu5FpIHjDoWMgc3XhuqV0LCBow6BtIGxpw6puIGvhur90IHbDoCB0aMOgbmggcGjhuqduIHR1eeG6v24gdMOtbmgsIGLGsOG7m2MgdGnhur9wIHRoZW8gbMOgIMaw4bubYyBsxrDhu6NuZyBjw6FjIGjhu4cgc+G7kSBo4buTaSBxdXkgXChcYmV0YVwpIHRyb25nIG3DtCBow6xuaC4NCg0KVHJvbmcgR0xNLCB0aGF5IHbDrCBz4butIGThu6VuZyBwaMawxqFuZyBwaMOhcCBiw6xuaCBwaMawxqFuZyB04buRaSB0aGnhu4N1IChPTFMpIG5oxrAgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggY+G7lSDEkWnhu4NuLCB0YSBz4butIGThu6VuZyBwaMawxqFuZyBwaMOhcCBo4bujcCBsw70gdOG7kWkgxJFhIChNYXhpbXVtIExpa2VsaWhvb2QgRXN0aW1hdGlvbiDigJMgTUxFKSDEkeG7gyB0w6xtIGdpw6EgdHLhu4sgY8OhYyB0aGFtIHPhu5EgdOG7kWkgxrB1LiBEbyB0w61uaCBjaOG6pXQgcGhpIHR1eeG6v24gY+G7p2EgY8OhYyBwaMawxqFuZyB0csOsbmggbG9nLWxpa2VsaWhvb2QgdHJvbmcgR0xNLCB2aeG7h2MgdMOsbSBuZ2hp4buHbSB0aMaw4budbmcga2jDtG5nIGPDsyBjw7RuZyB0aOG7qWMgxJHDs25nLCBtw6AgcGjhuqNpIGdp4bqjaSBi4bqxbmcgdGh14bqtdCB0b8OhbiBs4bq3cCBjw7MgdHLhu41uZyBz4buRIOKAkyBJUkxTIChJdGVyYXRpdmVseSBSZXdlaWdodGVkIExlYXN0IFNxdWFyZXMpLg0KDQojIyMgKio2LjIgVOG7lW5nIHF1YW4gduG7gSDGsOG7m2MgbMaw4bujbmcgaOG7o3AgbMO9IHThu5FpIMSRYSAoTUxFKSB0cm9uZyBHTE0qKg0KDQpDaG8gZOG7ryBsaeG7h3UgZ+G7k206DQoNCi0gQmnhur9uIHBo4bqjbiBo4buTaTogXCggeV8xLCB5XzIsIFxsZG90cywgeV9uIFwpIGPDsyB0aOG7gyBsw6AgYmnhur9uIMSR4bq/bSwgbmjhu4sgcGjDom4gaG/hurdjIGxpw6puIHThu6VjIGTGsMahbmfigKYNCg0KLSBCaeG6v24gZ2nhuqNpIHRow61jaDogXCggeF97aTF9LCBcbGRvdHMsIHhfe2lwfSBcKSB24bubaSBcKGk9MSwgXGxkb3RzLCBuXCkuDQoNCk3DtCBow6xuaCBHTE0gxJHGsOG7o2MgYmnhu4N1IGRp4buFbiBuaMawIHNhdToNCg0KXFsNCmcoXG11X2kpID0gXGV0YV9pID0gXG1hdGhiZnt4fV9pXlQgXGJvbGRzeW1ib2x7XGJldGF9DQpcXQ0KDQp24bubaQ0KDQpcWw0KXG11X2kgPSBFW3lfaV0gPSBnXnstMX0oXG1hdGhiZnt4fV9pXlQgXGJvbGRzeW1ib2x7XGJldGF9KQ0KXF0NCg0KTeG7pWMgdGnDqnUgbMOgIHTDrG0gxrDhu5tjIGzGsOG7o25nIFwoXGhhdHtcYm9sZHN5bWJvbHtcYmV0YX19XCkgc2FvIGNobyBow6BtIGxvZy1saWtlbGlob29kIMSR4bqhdCBj4buxYyDEkeG6oWk6DQoNClxbDQpcZWxsKFxib2xkc3ltYm9se1xiZXRhfSkgPSBcc3VtX3tpPTF9Xm4gXGxvZyBmKHlfaTsgXHRoZXRhX2kpDQpcXQ0KDQp0cm9uZyDEkcOzOg0KDQotIFwoZih5X2k7IFx0aGV0YV9pKVwpIGzDoCBow6BtIG3huq10IMSR4buZIHjDoWMgc3XhuqV0IChob+G6t2MgaMOgbSBraOG7kWkgeMOhYyBzdeG6pXQpIGPhu6dhIGJp4bq/biBcKHlfaVwpLA0KDQotIFwoXHRoZXRhX2lcKSBsw6AgdGhhbSBz4buRIHThu7Egbmhpw6puIHRyb25nIHBow6JuIHBo4buRaSB0aHXhu5ljIGjhu40gaMOgbSBtxaksDQoNCi0gXChcdGhldGFfaVwpIGPDsyBxdWFuIGjhu4cgduG7m2kgXChcbXVfaVwpLCB04burIMSRw7MgbGnDqm4gaOG7hyB24bubaSBcKFxib2xkc3ltYm9se1xiZXRhfVwpLg0KDQpQaMawxqFuZyBwaMOhcCBNTEUgdGjGsOG7nW5nIGtow7RuZyBjaG8gbmdoaeG7h20gdMaw4budbmcgbWluaCwgbsOqbiDEkcaw4bujYyBnaeG6o2kgdGjDtG5nIHF1YSB0aHXhuq10IHRvw6FuIElSTFMuDQoNCg0KIyMjICoqNi4zIFBoxrDGoW5nIHBow6FwIElSTFMgKEl0ZXJhdGl2ZWx5IFJld2VpZ2h0ZWQgTGVhc3QgU3F1YXJlcykqKg0KDQojIyMjICoqNi4zLjEuIFRodeG6rXQgdG/DoW4gSVJMUyAoSXRlcmF0aXZlbHkgUmV3ZWlnaHRlZCBMZWFzdCBTcXVhcmVzKToqKg0KDQpUcm9uZyBHTE0sIHRodeG6rXQgdG/DoW4gSVJMUyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBnaeG6o2kgYsOgaSB0b8OhbiB04buRaSDEkWEgaMOzYSBsb2ctbGlrZWxpaG9vZC4gxJDDonkgbMOgIG3hu5l0IHRodeG6rXQgdG/DoW4gbOG6t3AsIHThuqFpIG3hu5dpIHbDsm5nIGzhurdwIHRhIHRo4buxYyBoaeG7h24gbeG7mXQgYsaw4bubYyBo4buTaSBxdXkgdHV54bq/biB0w61uaCBjw7MgdHLhu41uZyBz4buRLCBuaOG7nSDEkcOzIGThuqduIHRp4buHbSBj4bqtbiDEkeG6v24gbmdoaeG7h20gdOG7kWkgxrB1Lg0KDQojIyMjICoqNi4zLjIgw50gdMaw4bufbmcgY8ahIGLhuqNuOioqDQoNCi0gVOG6oWkgbeG7l2kgdsOybmcgbOG6t3AsIHRhIHR1eeG6v24gdMOtbmggaMOzYSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGJp4bq/biBwaOG6o24gaOG7k2kgdsOgIHByZWRpY3RvciB0dXnhur9uIHTDrW5oIGLhurFuZyBjw6FjaCBz4butIGThu6VuZyBt4buZdCBiaeG6v24gcGjhuqNuIGjhu5NpIHThuqFtIHRo4budaSBn4buNaSBsw6AgYmnhur9uIGdp4bqjICh3b3JraW5nIHJlc3BvbnNlKQ0KDQotICoqQmnhur9uIGdp4bqjICh3b3JraW5nIHJlc3BvbnNlKSoqIFwoIFxtYXRoYmZ7en0gXCkgdsOgICoqbWEgdHLhuq1uIHRy4buNbmcgc+G7kSoqIFwoIFxtYXRoYmZ7V30gXCkgxJHGsOG7o2MgY+G6rXAgbmjhuq10IGThu7FhIHRyw6puIHBow6JuIHBo4buRaSBj4bunYSAqKip5KioqIHbDoCBk4bqhbmcgY+G7p2EgaMOgbSBsacOqbiBr4bq/dC4NCg0KDQojIyMjICoqNi4zLjMgSOG7hyBwaMawxqFuZyB0csOsbmggSVJMUzoqKg0KDQpcWw0KXG1hdGhiZntYfV5UIFxtYXRoYmZ7V30gXG1hdGhiZntYfSBcaGF0e1xib2xkc3ltYm9se1xiZXRhfX0gPSBcbWF0aGJme1h9XlQgXG1hdGhiZntXfSBcbWF0aGJme3p9DQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQotIFwoXG1hdGhiZntYfVwpIGzDoCBtYSB0cuG6rW4gdGhp4bq/dCBr4bq/IG4qcCwNCg0KLSBcKFxtYXRoYmZ7V31cKSBsw6AgbWEgdHLhuq1uIHRy4buNbmcgc+G7kSBrw61jaCB0aMaw4bubYyBcKG4gXHRpbWVzIG5cKSwNCg0KLSBcKFxtYXRoYmZ7en1cKSBsw6AgdmVjdG9yIGJp4bq/biBnaeG6oyBcKG4gXHRpbWVzIDFcKSwgdMOtbmggdGhlbyBjw7RuZyB0aOG7qWM6DQoNClxbDQp6X2kgPSBcZXRhX2kgKyBcZnJhY3t5X2kgLSBcbXVfaX17XGZyYWN7ZCBcbXVfaX17ZCBcZXRhX2l9fQ0KXF0NCg0KLSBUcuG7jW5nIHPhu5EgXChXX2lcKSDEkcaw4bujYyB0w61uaCB0aGVvOg0KDQpcWw0KV19pID0gXGxlZnQoXGZyYWN7ZCBcbXVfaX17ZCBcZXRhX2l9XHJpZ2h0KV4yIFxCaWcvIFxtYXRocm17VmFyfSh5X2kpDQpcXQ0KDQpUaHXhuq10IHRvw6FuIGThu6tuZyBraGkgY8OhYyDGsOG7m2MgbMaw4bujbmcgXChcYm9sZHN5bWJvbHtcYmV0YX1cKSBo4buZaSB04bulICh0aMaw4budbmcgZOG7sWEgdHLDqm4gc2FpIGtow6FjIG5o4buPIGdp4buvYSBoYWkgdsOybmcgbOG6t3AgbGnDqm4gdGnhur9wKS4NCg0KDQojIyMgKio2LjQgSMOgbSDEkWnhu4NtLCBtYSB0cuG6rW4gRmlzaGVyIHbDoCBwaMawxqFuZyBzYWkgY+G7p2EgxrDhu5tjIGzGsOG7o25nKioNCg0KKipIw6BtIMSRaeG7g20gKFNjb3JlIEZ1bmN0aW9uKSoqDQoNCkjDoG0gxJFp4buDbSBsw6AgxJHhuqFvIGjDoG0gY+G7p2EgbG9nLWxpa2VsaWhvb2QgdGhlbyB2ZWN0b3IgaOG7hyBz4buRIFwoXGJvbGRzeW1ib2x7XGJldGF9XCk6DQoNClxbDQpVKFxib2xkc3ltYm9se1xiZXRhfSkgPSBcZnJhY3tccGFydGlhbCBcZWxsKFxib2xkc3ltYm9se1xiZXRhfSl9e1xwYXJ0aWFsIFxib2xkc3ltYm9se1xiZXRhfX0NClxdDQoNCsSQw6J5IGzDoCBo4buHIHBoxrDGoW5nIHRyw6xuaCBtw6Aga2hpIGdp4bqjaSBcKFUoXGJvbGRzeW1ib2x7XGJldGF9KSA9IDBcKSwgdGEgdGh1IMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBj4buxYyDEkeG6oWkgXChcaGF0e1xib2xkc3ltYm9se1xiZXRhfX1cKS4NCg0KDQoqKk1hIHRy4bqtbiB0aMO0bmcgdGluIEZpc2hlcioqDQoNCsSQxrDhu6NjIMSR4buLbmggbmdoxKlhIGzDoCBr4buzIHbhu41uZyBj4bunYSDDom0gxJHhuqFvIGjDoG0gYuG6rWMgaGFpOg0KDQpcWw0KXG1hdGhjYWx7SX0oXGJvbGRzeW1ib2x7XGJldGF9KSA9IC0gXG1hdGhiYntFfSBcbGVmdFsgXGZyYWN7XHBhcnRpYWxeMiBcZWxsKFxib2xkc3ltYm9se1xiZXRhfSl9e1xwYXJ0aWFsIFxib2xkc3ltYm9se1xiZXRhfSBcLCBccGFydGlhbCBcYm9sZHN5bWJvbHtcYmV0YX1eVH0gXHJpZ2h0XQ0KXF0NCg0KxJDDonkgbMOgIHRoxrDhu5tjIMSRbyDEkeG7mSBjaMOtbmggeMOhYyBj4bunYSDGsOG7m2MgbMaw4bujbmcsIHBo4bqjbiDDoW5oIMSR4buZIGNvbmcgY+G7p2EgbG9nLWxpa2VsaWhvb2QgcXVhbmggxJFp4buDbSBj4buxYyDEkeG6oWkuIE1hIHRy4bqtbiBuw6B5IMSRw7NuZyB2YWkgdHLDsiBuaMawIG3hu5l0IHRoxrDhu5tjIMSRbyDEkeG7mSAic+G6r2MgbsOpdCIgY+G7p2EgbG9nLWxpa2VsaWhvb2QgdOG6oWkgxJFp4buDbSBj4buxYyDEkeG6oWkgdsOgIMSRxrDhu6NjIGTDuW5nIMSR4buDIMSRw6FuaCBnacOhIMSR4buZIGNow61uaCB4w6FjIGPhu6dhIMaw4bubYyBsxrDhu6NuZy4NCg0KDQoqKlBoxrDGoW5nIHNhaSBj4bunYSBcKFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fVwpKioNCg0KS2hpIMSRw6MgY8OzIG1hIHRy4bqtbiB0aMO0bmcgdGluIEZpc2hlciwgcGjGsMahbmcgc2FpIGhp4buHcCBwaMawxqFuZyBzYWkgY+G7p2EgdmVjdG9yIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcgxJHGsOG7o2MgdMOtbmggbMOgOg0KDQpcWw0KXG1hdGhybXtWYXJ9KFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fSkgPSBcbWF0aGNhbHtJfShcaGF0e1xib2xkc3ltYm9se1xiZXRhfX0pXnstMX0NClxdDQoNCk7hur91IHPhu60gZOG7pW5nIHRodeG6rXQgdG/DoW4gKipJUkxTKiosdGjDrCBtYSB0cuG6rW4geOG6pXAgeOG7iSBi4bufaToNCg0KXFsNClxtYXRocm17VmFyfShcaGF0e1xib2xkc3ltYm9se1xiZXRhfX0pID0gKFxtYXRoYmZ7WH1eVCBcbWF0aGJme1d9IFxtYXRoYmZ7WH0pXnstMX0NClxdDQoNClRyb25nIMSRw7M6DQoNCi0gXChcbWF0aGJme1h9XCk6IG1hIHRy4bqtbiB0aGnhur90IGvhur8sDQoNCi0gXChcbWF0aGJme1d9XCk6IG1hIHRy4bqtbiB0cuG7jW5nIHPhu5EgdOG6oWkgbmdoaeG7h20gaOG7mWkgdOG7pSwNCg0KLSBDw7RuZyB0aOG7qWMgbsOgeSB4deG6pXQgaGnhu4duIHThu7Egbmhpw6puIHThu6sgYsaw4bubYyBnaeG6o2kgaOG7hyBwaMawxqFuZyB0csOsbmggSVJMUy4NCg0KLSBDw7RuZyB0aOG7qWMgcGjGsMahbmcgc2FpIHRyw6puIHLhuqV0IHF1YW4gdHLhu41uZyDEkeG7gyB0w61uaCBraG/huqNuZyB0aW4gY+G6rXkgdsOgIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IHRyb25nIEdMTS4NCg0KLSBW4bubaSBjw6FjIG3DtCBow6xuaCBs4bubbiwgbWEgdHLhuq1uIFwoKFxtYXRoYmZ7WH1eVCBcbWF0aGJme1d9IFxtYXRoYmZ7WH0pXnstMX1cKSB0aMaw4budbmcgxJHGsOG7o2MgdMOtbmggdGjDtG5nIHF1YSBnaeG6o2kgaOG7hyBwaMawxqFuZyB0csOsbmggdGhheSB2w6wgxJHhuqNvIHRy4buxYyB0aeG6v3AgxJHhu4MgdHLDoW5oIHNhaSBz4buRIHPhu5EgaOG7jWMuDQoNCg0KIyMjICoqNi41IFNhaSBz4buRIGNodeG6qW4gdsOgIGtob+G6o25nIHRpbiBj4bqteSoqDQoNCiMjIyMgKio2LjUuMSBTYWkgc+G7kSBjaHXhuqluIChTdGFuZGFyZCBFcnJvcikqKg0KDQpTYXUga2hpIGPDsyDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgXChcaGF0e1xib2xkc3ltYm9se1xiZXRhfX1cKSB2w6AgbWEgdHLhuq1uIHBoxrDGoW5nIHNhaSBoaeG7h3AgcGjGsMahbmcgc2FpIFwoXG1hdGhybXtWYXJ9KFxoYXR7XGJvbGRzeW1ib2x7XGJldGF9fSlcKSwgdGEgdMOtbmggKipzYWkgc+G7kSBjaHXhuqluKiogY2hvIHThu6tuZyBo4buHIHPhu5EgXChcaGF0e1xiZXRhfV9qXCkgbmjGsCBzYXU6DQoNClxbDQpcbWF0aHJte1NFfShcaGF0e1xiZXRhfV9qKSA9IFxzcXJ0e1tcbWF0aHJte1Zhcn0oXGhhdHtcYm9sZHN5bWJvbHtcYmV0YX19KV1fe2pqfX0NClxdDQoNClRyb25nIMSRw7MsIFwoW1xjZG90XV97amp9XCkgbMOgIHBo4bqnbiB04butIGjDoG5nIFwoalwpLCBj4buZdCBcKGpcKSB0cm9uZyBtYSB0cuG6rW4gcGjGsMahbmcgc2FpLg0KDQoNCiMjIyMgKio2LjUuMiBLaG/huqNuZyB0aW4gY+G6rXkgXCgxMDAoMSAtIFxhbHBoYSlcJVwpKioNCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBo4buHIHPhu5EgXChcaGF0e1xiZXRhfV9qXCkgxJHGsOG7o2MgdMOtbmggYuG6sW5nIGPDtG5nIHRo4bupYzoNCg0KXFsNClxoYXR7XGJldGF9X2ogXHBtIHpfe1xhbHBoYS8yfSBcY2RvdCBcbWF0aHJte1NFfShcaGF0e1xiZXRhfV9qKQ0KXF0NCg0KVHJvbmcgxJHDszoNCg0KICAtIFwoel97XGFscGhhLzJ9XCkgbMOgIGLDoWNoIHBow6JuIHbhu4sgXCgxIC0gXGFscGhhLzJcKSBj4bunYSBwaMOibiBwaOG7kWkgY2h14bqpbiBjaHXhuqluIGjDs2EgKHRoxrDhu51uZyB0cmEgdOG7qyBi4bqjbmcgWiksDQoNCiAgLSBWw60gZOG7pTogduG7m2kgXChcYWxwaGEgPSAwLjA1XCksIFwoel97MC4wMjV9IFxhcHByb3ggMS45NlwpICh0xrDGoW5nIOG7qW5nIGtob+G6o25nIHRpbiBj4bqteSA5NSUpLg0KDQoNCiMjIyMgKio2LjUuMyBLaeG7g20gxJHhu4tuaCBXYWxkKioNCg0KS2nhu4NtIMSR4buLbmggV2FsZCBnacO6cCDEkcOhbmggZ2nDoSBnaeG6oyB0aHV54bq/dDoNCg0KXFsNCkhfMDogXGJldGFfaiA9IDAgXHF1YWQgXHRleHR7dnN9IFxxdWFkIEhfMTogXGJldGFfaiBcbmVxIDANClxdDQoNClRo4buRbmcga8OqIGtp4buDbSDEkeG7i25oOg0KDQpcWw0KWiA9IFxmcmFje1xoYXR7XGJldGF9X2p9e1xtYXRocm17U0V9KFxoYXR7XGJldGF9X2opfSBcc2ltIFxtYXRoY2Fse059KDAsIDEpDQpcXQ0KDQpE4buxYSB2w6BvIGdpw6EgdHLhu4sgXChaXCksIHRhIGPDsyB0aOG7gyB0w61uaCBwLXZhbHVlIHbDoCDEkcawYSByYSBr4bq/dCBsdeG6rW4gdGjhu5FuZyBrw6ouDQoNCg0KLSBLaeG7g20gxJHhu4tuaCBXYWxkIMSRxrDhu6NjIGTDuW5nIHBo4buVIGJp4bq/biBkbyB0w61uaCDEkcahbiBnaeG6o24gdsOgIGPDsyB0aOG7gyB0aOG7sWMgaGnhu4duIG5nYXkgc2F1IGtoaSBjw7MgxrDhu5tjIGzGsOG7o25nIHbDoCBwaMawxqFuZyBzYWkuDQoNCi0gTuG6v3UgXCggfFp8ID4gel97XGFscGhhLzJ9IFwpLCBiw6FjIGLhu48gXChIXzBcKSwgdOG7qWMgbMOgIGjhu4cgc+G7kSBcKFxiZXRhX2pcKSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQojIyMgKio2LjYgxq/hu5tjIGzGsOG7o25nIHRoYW0gc+G7kSBwaMOibiB0w6FuKioNCg0KVHJvbmcgbeG7mXQgc+G7kSBtw7QgaMOsbmggR0xNLCDEkeG6t2MgYmnhu4d0IGtoaSBz4butIGThu6VuZyBjw6FjIHBow6JuIHBo4buRaSB0aHXhu5ljIGjhu40gaMOgbSBtxakgbmjGsG5nIGtow7RuZyBjw7MgZOG6oW5nIGNodeG6qW4gaMOzYSwgdmnhu4djIMaw4bubYyBsxrDhu6NuZyB0aGFtIHPhu5EgcGjDom4gdMOhbiBcKHBoaVwpIGzDoCBj4bqnbiB0aGnhur90IMSR4buDIHBo4bqjbiDDoW5oIMSRw7puZyBt4bupYyDEkeG7mSBiaeG6v24gdGhpw6puIGPhu6dhIGThu68gbGnhu4d1IGtow7RuZyDEkcaw4bujYyBnaeG6o2kgdGjDrWNoIGLhu59pIG3DtCBow6xuaC4NCg0KJCQNClxoYXR7XHBoaX0gPSBcZnJhY3sxfXtuIC0gcH0gXHN1bV97aT0xfV57bn0gXGZyYWN7KHlfaSAtIFxoYXR7XG11fV9pKV4yfXtWKFxoYXR7XG11fV9pKX0NCiQkDQoNClRyb25nIMSRw7M6DQoNCi0gXChuXCk6IHPhu5EgcXVhbiBzw6F0ICANCg0KLSBcKHBcKTogc+G7kSB0aGFtIHPhu5EgdHJvbmcgbcO0IGjDrG5oIChiYW8gZ+G7k20gaOG7hyBz4buRIGNo4bq3biBu4bq/dSBjw7MpICANCg0KLSBcKFxoYXR7XG11fV9pID0gXG1hdGhiYntFfVt5X2ldID0gZ157LTF9KFxldGFfaSlcKTogZ2nDoSB0cuG7iyBr4buzIHbhu41uZyDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgIA0KDQotIFwoVihcaGF0e1xtdX1faSlcKTogaMOgbSBwaMawxqFuZyBzYWksIHBo4bulIHRodeG7mWMgdsOgbyBwaMOibiBwaOG7kWk6DQoNCnwgUGjDom4gcGjhu5FpICAgICAgICB8IEjDoG0gcGjGsMahbmcgc2FpIFwoVihcbXUpXCkgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgR2F1c3NpYW4gICAgICAgICB8IFwoMVwpICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgUG9pc3NvbiAgICAgICAgICB8IFwoXG11XCkgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgQmlub21pYWwgKGxvZ2l0KSB8IFwoXG11KDEgLSBcbXUpXCkgICAgICAgICAgICAgIHwNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCg0KDQojIyAqKkNIxq/GoE5HIDc6IMSQw4FOSCBHScOBIE3hu6hDIMSQ4buYIFBIw5kgSOG7olAgVsOAIEzhu7BBIENI4buMTiBNw5QgSMOMTkggVFJPTkcgR0xNKioNCg0KKioqTeG7pWMgdGnDqnUgxJHhu4MgxJHDoW5oIGdpw6EgbeG7qWMgxJHhu5kgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmggdHV54bq/biB0w61uaCB04buVbmcgcXXDoXQgKEdMTSkgc2F1IGtoaSDEkcOjIHRo4buxYyBoaeG7h24gxrDhu5tjIGzGsOG7o25nIHRoYW0gc+G7kS4gTmfGsOG7nWkgaOG7jWMgc+G6vSBoaeG7g3UgdsOgIHbhuq1uIGThu6VuZyDEkcaw4bujYyBjw6FjIGPDtG5nIGPhu6UgbmjGsCBkZXZpYW5jZSwga2nhu4NtIMSR4buLbmggJFxjaGleMiQsIHbDoCBwaOG6p24gZMawIMSR4buDIGtp4buDbSB0cmEgbeG7qWMgxJHhu5kga2jhu5twIGdp4buvYSBtw7QgaMOsbmggdsOgIGThu68gbGnhu4d1IHRo4buxYyB04bq/LiBDaMawxqFuZyBuw6B5IGPFqW5nIGjGsOG7m25nIGThuqtuIGPDoWNoIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oLCBiYW8gZ+G7k20gbcO0IGjDrG5oIGzhu5NuZyBuaGF1IChz4butIGThu6VuZyBraeG7g20gxJHhu4tuaCBkZXZpYW5jZSkgdsOgIG3DtCBow6xuaCBraMO0bmcgbOG7k25nIG5oYXUgKHPhu60gZOG7pW5nIHRpw6p1IGNow60gdGjDtG5nIHRpbiBuaMawIEFJQyB2w6AgQklDKS4gTmdvw6BpIHJhLCBuZ8aw4budaSBo4buNYyBz4bq9IGJp4bq/dCBjw6FjaCBz4butIGThu6VuZyDEkeG7kyB0aOG7iyBjaOG6qW4gxJFvw6FuIHbDoCBwaMOibiB0w61jaCBwaOG6p24gZMawIMSR4buDIHBow6F0IGhp4buHbiDEkWnhu4NtIG5nb+G6oWkgbGFpIHbDoCDEkWnhu4NtIOG6o25oIGjGsOG7n25nIG3huqFuaC4gQ3Xhu5FpIGPDuW5nLCBjaMawxqFuZyB0csOsbmggYsOgeSBjw6FjaCBwaMOhdCBoaeG7h24gaGnhu4duIHTGsOG7o25nIHF1w6EgcGjDom4gdMOhbiAob3ZlcmRpc3BlcnNpb24pIOKAkyBraGkgcGjGsMahbmcgc2FpIHF1YW4gc8OhdCBs4bubbiBoxqFuIHBoxrDGoW5nIHNhaSBr4buzIHbhu41uZyDigJMgdsOgIGdp4bubaSB0aGnhu4d1IGPDoWMgbcO0IGjDrG5oIHRoYXkgdGjhur8gbmjGsCBxdWFzaS1Qb2lzc29uIGhv4bq3YyBOZWdhdGl2ZSBCaW5vbWlhbCDEkeG7gyB44butIGzDvSBoaeG7h24gdMaw4bujbmcgbsOgeSBt4buZdCBjw6FjaCBoaeG7h3UgcXXhuqMuKioqDQoNCiMjIyAqKjcuMSBHaeG7m2kgdGhp4buHdSoqDQoNClNhdSBraGkgxJHDoyDGsOG7m2MgbMaw4bujbmcgxJHGsOG7o2MgY8OhYyB0aGFtIHPhu5EgJFxiZXRhJCB0cm9uZyBtw7QgaMOsbmggdHV54bq/biB0w61uaCB04buVbmcgcXXDoXQgKEdMTSksIGLGsOG7m2MgdGnhur9wIHRoZW8gbMOgIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oIHbhu5tpIGThu68gbGnhu4d1IHRo4buxYyB04bq/LiDEkOG7k25nIHRo4budaSwgbuG6v3UgdOG7k24gdOG6oWkgbmhp4buBdSBtw7QgaMOsbmggY+G6oW5oIHRyYW5oLCB0YSBj4bqnbiBs4buxYSBjaOG7jW4gbcO0IGjDrG5oIHThu5FpIMawdSBk4buxYSB0csOqbiBjw6FjIHRpw6p1IGNow60gdGjhu5FuZyBrw6ouDQoNCkPDoWMgY8O0bmcgY+G7pSDEkcOhbmggZ2nDoSBiYW8gZ+G7k206DQoNCi0gRGV2aWFuY2UgKMSR4buZIGzhu4djaCkNCg0KLSBLaeG7g20gxJHhu4tuaCAkXGNoaV4yJA0KDQotIFRpw6p1IGNow60gdGjDtG5nIHRpbiBBSUMgdsOgIEJJQw0KDQotIFNvIHPDoW5oIGdp4buvYSBjw6FjIG3DtCBow6xuaCBs4buTbmcgdsOgIGtow7RuZyBs4buTbmcNCg0KLSDEkOG7kyB0aOG7iyBwaOG6p24gZMawIHbDoCBwaMOibiB0w61jaCDEkWnhu4NtIOG6o25oIGjGsOG7n25nDQoNCiMjIyAqKjcuMiBEZXZpYW5jZSDigJMgxJFvIGzGsOG7nW5nIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oKioNCg0KRGV2aWFuY2UgbMOgIMSR4bqhaSBsxrDhu6NuZyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyDEkW8gbMaw4budbmcgbeG7qWMgxJHhu5kga2jDoWMgYmnhu4d0IGdp4buvYSBtw7QgaMOsbmggaGnhu4duIHThuqFpIHbDoCBtw7QgaMOsbmggYsOjbyBow7JhIChzYXR1cmF0ZWQgbW9kZWwpIOKAkyB04bupYyBtw7QgaMOsbmggY8OzIHPhu5EgbMaw4bujbmcgdGhhbSBz4buRIHThu5FpIMSRYSwga2jhu5twIGhvw6BuIHRvw6BuIHbhu5tpIGThu68gbGnhu4d1IHF1YW4gc8OhdC4NCg0KJCQNCkQoeTsgXGhhdHtcbXV9KSA9IDIgXGxlZnRbIFxlbGwoeTsgeSkgLSBcZWxsKFxoYXR7XG11fTsgeSkgXHJpZ2h0XQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KLSAkXGVsbCh5OyB5KSQ6IGxvZy1saWtlbGlob29kIGPhu6dhIG3DtCBow6xuaCBiw6NvIGjDsmEgKHNhdHVyYXRlZCBtb2RlbCkNCg0KLSAkXGVsbChcaGF0e1xtdX07IHkpJDogbG9nLWxpa2VsaWhvb2QgY+G7p2EgbcO0IGjDrG5oIMSRYW5nIHjDqXQNCg0KXChcUmlnaHRhcnJvd1wpIERldmlhbmNlIGPDoG5nIG5o4buPIOKGkiBtw7QgaMOsbmggY8OgbmcgZ+G6p24gduG7m2kgbcO0IGjDrG5oIGLDo28gaMOyYSDihpIgcGjDuSBo4bujcCBoxqFuLg0KDQojIyMgKio3LjMgU28gc8OhbmggbcO0IGjDrG5oIGLhurFuZyBraeG7g20gxJHhu4tuaCBkZXZpYW5jZSoqDQoNCktoaSBzbyBzw6FuaCBoYWkgbcO0IGjDrG5oIGzhu5NuZyBuaGF1IChuZXN0ZWQgbW9kZWxzKSwgdGEgY8OzIHRo4buDIHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIGThu7FhIHRyw6puIHPhu7Egc2FpIGJp4buHdCBkZXZpYW5jZToNCg0KKipDw7RuZyB0aOG7qWMga2nhu4NtIMSR4buLbmg6KioNCg0KJCQNClxEZWx0YSBEID0gRF97XHRleHR7cmVkdWNlZH19IC0gRF97XHRleHR7ZnVsbH19IFxzaW0gXGNoaV4yX3tkZn0NCiQkDQoNClRyb25nIMSRw7M6DQoNCi0gJGRmJDogc+G7kSB0aGFtIHPhu5EgYuG7iyByw6BuZyBideG7mWMgdHJvbmcgbcO0IGjDrG5oIG5o4buPIGjGoW4NCg0KTuG6v3UgJFxEZWx0YSBEJCBs4bubbiB2w6AgcC12YWx1ZSBuaOG7jyDihpIgbcO0IGjDrG5oIMSR4bqneSDEkeG7pyB04buRdCBoxqFuLg0KDQoNCiMjIyAqKjcuNCBBSUMgdsOgIEJJQyDigJMgbOG7sWEgY2jhu41uIGdp4buvYSBjw6FjIG3DtCBow6xuaCBraMO0bmcgbOG7k25nKioNCg0KVHJvbmcgdHLGsOG7nW5nIGjhu6NwIGPDoWMgbcO0IGjDrG5oIGtow7RuZyBs4buTbmcgbmhhdSwgdGEga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIGRldmlhbmNlLCBtw6AgdGhheSB2w6BvIMSRw7Mgc+G7rSBk4bulbmcgY8OhYyB0acOqdSBjaMOtIHRow7RuZyB0aW4gxJHhu4Mgc28gc8OhbmggbeG7qWMgxJHhu5kgcGjDuSBo4bujcCBjw7MgdMOtbmggxJHhur9uIMSR4buZIHBo4bupYyB04bqhcCBj4bunYSBtw7QgaMOsbmguDQoNCioqQUlDIChBa2Fpa2UgSW5mb3JtYXRpb24gQ3JpdGVyaW9uKToqKg0KDQokJA0KQUlDID0gLTJcZWxsICsgMmsNCiQkDQpUcm9uZyDEkcOzOiANCg0KLSAkXGVsbCQ6IGxvZy1saWtlbGlob29kICANCg0KLSAkayQ6IHPhu5EgdGhhbSBz4buRIHRyb25nIG3DtCBow6xuaA0KDQoqKkJJQyAoQmF5ZXNpYW4gSW5mb3JtYXRpb24gQ3JpdGVyaW9uKToqKg0KDQokJA0KQklDID0gLTJcZWxsICsgXGxvZyhuKSBcY2RvdCBrDQokJA0KDQotICRuJDogc+G7kSBxdWFuIHPDoXQNCg0KTcO0IGjDrG5oIGPDsyBBSUMvQklDIHRo4bqlcCBoxqFuIMSRxrDhu6NjIHhlbSBsw6AgdOG7kXQgaMahbi4NCiANCkJJQyDDoXAgZOG7pW5nIG3hu6ljIHBo4bqhdCBu4bq3bmcgaMahbiDEkeG7kWkgduG7m2kgY8OhYyBtw7QgaMOsbmggcGjhu6ljIHThuqFwIHNvIHbhu5tpIEFJQy4NCg0KDQojIyMgKio3LjUgxJDhu5MgdGjhu4sgY2jhuqluIMSRb8OhbiB2w6AgcGjhuqduIGTGsCoqDQoNCiMjIyMgKio3LjUuMSBQaOG6p24gZMawIChyZXNpZHVhbHMpOioqDQoNCioqUGjhuqduIGTGsCB0aMO0IChyYXcgcmVzaWR1YWwpOioqDQoNCiQkDQplX2kgPSB5X2kgLSBcaGF0e1xtdX1faQ0KJCQNCg0KKipQaOG6p24gZMawIFBlYXJzb246KioNCg0KJCQNCnJfaSA9IFxmcmFje3lfaSAtIFxoYXR7XG11fV9pfXtcc3FydHtWKFxoYXR7XG11fV9pKX19DQokJA0KDQoqKlBo4bqnbiBkxrAgZGV2aWFuY2U6KioNCg0KJCQNCmRfaSA9IFx0ZXh0e3NpZ259KHlfaSAtIFxoYXR7XG11fV9pKSBcY2RvdCBcc3FydHsyXGxlZnRbXGVsbCh5X2k7IHlfaSkgLSBcZWxsKFxoYXR7XG11fV9pOyB5X2kpXHJpZ2h0XX0NCiQkDQoNCiMjIyMgKio3LjUuMiDEkOG7kyB0aOG7iyBraeG7g20gdHJhIG3DtCBow6xuaCAoRGlhZ25vc3RpYyBwbG90cyk6KioNCg0KQmnhu4N1IMSR4buTIHBo4bqnbiBkxrAgdnMgZml0dGVkIHZhbHVlcw0KDQpCaeG7g3UgxJHhu5MgTm9ybWFsIFEtUQ0KDQpCaeG7g3UgxJHhu5MgU2NhbGUtTG9jYXRpb24NCg0KQmnhu4N1IMSR4buTIENvb2vigJlzIGRpc3RhbmNlIHZzIGxldmVyYWdlDQoNCkPDoWMgYmnhu4N1IMSR4buTIG7DoHkgZ2nDunAgcGjDoXQgaGnhu4duIGPDoWMgxJFp4buDbSBuZ2/huqFpIGxhaSwgxJFp4buDbSBjw7Mg4bqjbmggaMaw4bufbmcgbOG7m24gxJHhur9uIG3DtCBow6xuaCwgdsOgIGtp4buDbSB0cmEgZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgcGjhuqduIGTGsC4NCg0KIyMjICoqNy42IEtp4buDbSDEkeG7i25oIFBlYXJzb24gQ2hpLXNxdWFyZSoqDQoNCktp4buDbSDEkeG7i25oIFBlYXJzb24gbMOgIG3hu5l0IHBoxrDGoW5nIHBow6FwIGPhu5UgxJFp4buDbiDEkeG7gyDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIGdp4buvYSBk4buvIGxp4buHdSB0aOG7sWMgdOG6vyB2w6AgbcO0IGjDrG5oLg0KDQokJA0KWF4yID0gXHN1bV97aT0xfV5uIFxmcmFjeyh5X2kgLSBcaGF0e1xtdX1faSleMn17VihcaGF0e1xtdX1faSl9DQokJA0KDQpO4bq/dSAkWF4yJCBs4bubbiBoxqFuIG3hu6ljIGvhu7MgduG7jW5nIHRoZW8gcGjDom4gcGjhu5FpICRcY2hpXjJfe2RmfSQgbcO0IGjDrG5oIGPDsyB0aOG7gyBraMO0bmcgcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdS4NCg0KIyMjICoqNy43IMSQ4buZIHBow6JuIHTDoW4gdsOgIHbhuqVuIMSR4buBIG92ZXJkaXNwZXJzaW9uKioNCg0KTeG7mXQgc+G7kSBtw7QgaMOsbmggR0xNIG5oxrAgUG9pc3NvbiB2w6AgQmlub21pYWwgbeG6t2MgxJHhu4tuaCBnaeG6oyDEkeG7i25oIHRoYW0gc+G7kSBwaMOibiB0w6FuOg0KDQokJA0KXHBoaSA9IDENCiQkDQoNClR1eSBuaGnDqm4sIHRyw6puIHRo4buxYyB04bq/LCBwaMawxqFuZyBzYWkgcXVhbiBzw6F0IMSRw7RpIGtoaSBs4bubbiBoxqFuIG5oaeG7gXUgc28gduG7m2kgcGjGsMahbmcgc2FpIGdp4bqjIMSR4buLbmggY+G7p2EgbcO0IGjDrG5oLCBn4buNaSBsw6AgaGnhu4duIHTGsOG7o25nIHF1w6EgcGjDom4gdMOhbiAob3ZlcmRpc3BlcnNpb24pLg0KDQoqKktp4buDbSB0cmEgb3ZlcmRpc3BlcnNpb24qKjoNCg0KSOG7hyBz4buRIHBow6JuIHTDoW4gxrDhu5tjIGzGsOG7o25nIMSRxrDhu6NjIHTDrW5oIHRoZW8gY8O0bmcgdGjhu6ljOg0KDQokJA0KXGhhdHtccGhpfSA9IFxmcmFje1x0ZXh0e0RldmlhbmNlfX17biAtIHB9DQokJA0KDQotICRuJDogc+G7kSBxdWFuIHPDoXQgIA0KDQotICRwJDogc+G7kSB0aGFtIHPhu5EgdHJvbmcgbcO0IGjDrG5oDQoNCk7hur91Og0KDQokJA0KXGhhdHtccGhpfSA+IDEuNQ0KJCQNCg0KTcO0IGjDrG5oICoqY8OzIHRo4buDIGLhu4sgb3ZlcmRpc3BlcnNlZCoqIChxdcOhIHBow6JuIHTDoW4pDQoNClRyb25nIHRyxrDhu51uZyBo4bujcCBuw6B5LCBj4bqnbiDEkWnhu4F1IGNo4buJbmggbcO0IGjDrG5oLCB2w60gZOG7pToNCg0KLSBT4butIGThu6VuZyAqKnF1YXNpLVBvaXNzb24qKg0KDQotIEhv4bq3YyAqKk5lZ2F0aXZlIEJpbm9taWFsKioNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQoNCg0KIyMgKipDSMavxqBORyA4OiBI4buSSSBRVVkgTE9HSVNUSUMgKExPR0lTVElDIFJFR1JFU1NJT04pKioNCg0KKioqTcO0IGjDrG5oIFR1eeG6v24gdMOtbmggVOG7lW5nIHF1w6F0IChHTE0pIMSRxrDhu6NjIHRoaeG6v3Qga+G6vyDEkeG7gyB44butIGzDvSBk4buvIGxp4buHdSBuaOG7iyBwaMOibiwgdHJvbmcgxJHDsyBiaeG6v24gcGjhuqNuIGjhu5NpIGNo4buJIG5o4bqtbiBnacOhIHRy4buLIDAgaG/hurdjIDEuIE3hu6VjIHRpw6p1IGPhu6dhIGNoxrDGoW5nIGzDoCBnacO6cCBuZ8aw4budaSBo4buNYyBu4bqvbSB24buvbmcgY8OhY2ggbcO0IGjDrG5oIGjDs2EgeMOhYyBzdeG6pXQgeOG6o3kgcmEgY+G7p2EgbeG7mXQgc+G7sSBraeG7h24gbmjhu4sgcGjDom4gdGjDtG5nIHF1YSBow6BtIGxpw6puIGvhur90IGxvZ2l0LCB04burIMSRw7MgeMOieSBk4buxbmcgdsOgIGRp4buFbiBnaeG6o2kgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyBt4buZdCBjw6FjaCBjaMOtbmggeMOhYy4gQ2jGsMahbmcgdHLDrG5oIGLDoHkgY2hpIHRp4bq/dCBj4bqldSB0csO6YyBj4bunYSBow6BtIGxvZy1saWtlbGlob29kIGThu7FhIHRyw6puIHBow6JuIHBo4buRaSBCZXJub3VsbGksIHbDoCBjw6FjaCDGsOG7m2MgbMaw4bujbmcgdGhhbSBz4buRIGLhurFuZyBwaMawxqFuZyBwaMOhcCBo4bujcCBsw70gdOG7kWkgxJFhLiBOZ2/DoGkgcmEsIG5nxrDhu51pIGjhu41jIHPhur0gaGnhu4N1IHLDtSDDvSBuZ2jEqWEgY+G7p2EgY8OhYyBo4buHIHPhu5EgaOG7k2kgcXV5IHRow7RuZyBxdWEgb2RkcyByYXRpbywgY8WpbmcgbmjGsCBiaeG6v3QgY8OhY2gga2nhu4NtIMSR4buLbmggbeG7qWMgxJHhu5kgw70gbmdoxKlhIGPhu6dhIGNow7puZyB0aMO0bmcgcXVhIGtp4buDbSDEkeG7i25oIFdhbGQgdsOgIHjDonkgZOG7sW5nIGtob+G6o25nIHRpbiBj4bqteS4gQsOqbiBj4bqhbmggdmnhu4djIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oIHRow7RuZyBxdWEgZGV2aWFuY2UgdsOgIHBzZXVkbywgY2jGsMahbmcgY8WpbmcgbeG7nyBy4buZbmcgc2FuZyBtw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljIMSRYSBiaeG6v24gdsOgIG3DtCBow6xuaCBuaOG7iyB0aOG7qWMgbmjDs20sIGdpw7pwIG5nxrDhu51pIGjhu41jIOG7qW5nIGThu6VuZyBsaW5oIGhv4bqhdCBtw7QgaMOsbmggbsOgeSB0cm9uZyB0aOG7sWMgdOG6vy4qKioNCg0KIyMjICoqOC4xIEdp4bubaSB0aGnhu4d1KioNCg0KSOG7k2kgcXV5IGxvZ2lzdGljIGzDoCBt4buZdCBtw7QgaMOsbmggdGh14buZYyBo4buNIE3DtCBow6xuaCBUdXnhur9uIHTDrW5oIFThu5VuZyBxdcOhdCAoR0xNKSwgxJHGsOG7o2Mgc+G7rSBk4bulbmcgcGjhu5UgYmnhur9uIHRyb25nIHZp4buHYyBtw7QgaMOsbmggaMOzYSBjw6FjIGThu68gbGnhu4d1IG3DoCBiaeG6v24gcGjhuqNuIGjhu5NpIGzDoCBuaOG7iyBwaMOibiwgdOG7qWMgbmjhuq1uIGdpw6EgdHLhu4sgMCBob+G6t2MgMQ0KDQpcWw0KeSBcaW4gXHswLDFcfQ0KXF0NCg0KVsOtIGThu6U6IGPDsyBi4buHbmgva2jDtG5nIGPDsyBi4buHbmgsIG11YSBow6BuZy9raMO0bmcgbXVhIGjDoG5nLCDEkeG6oXQva2jDtG5nIMSR4bqhdC4gVHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHksIGvhu7MgduG7jW5nIGPhu6dhIGJp4bq/biBwaOG6o24gaOG7k2kgbMOgIG3hu5l0IHjDoWMgc3XhuqV0Lg0KDQrEkOG6t2MgxJFp4buDbTogIA0KXFsNClxtdV9pID0gRVt5X2ldID0gUCh5X2k9MSkgXGluICgwLDEpDQpcXQ0KDQpT4butIGThu6VuZyBow6BtIGxpw6puIGvhur90IGxvZ2l0OiAgDQpcWw0KZyhcbXVfaSkgPSBcbG9nXGxlZnQoXGZyYWN7XG11X2l9ezEtXG11X2l9XHJpZ2h0KSA9IFxldGFfaSA9IHhfaV5UIFxiZXRhDQpcXQ0KDQoNCiMjIyAqKjguMiBQaMOibiBwaOG7kWkgQmVybm91bGxpIHbDoCBow6BtIGxvZy1saWtlbGlob29kKioNCg0KVuG7m2kgYmnhur9uIHBo4bqjbiBo4buTaSBuaOG7iyBwaMOibjoNCg0KXFsNCnlfaSBcaW4gXHswLDFcfQ0KXF0gIA0KcGjDom4gcGjhu5FpIHRoZW86ICANCg0KXFsNCnlfaSBcc2ltIFx0ZXh0e0Jlcm5vdWxsaX0oXHBpX2kpDQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQpcWw0KXHBpX2kgPSBQKHlfaT0xKQ0KXF0gIA0KdsOgOiAgDQpcWw0KXGxvZ1xsZWZ0KFxmcmFje1xwaV9pfXsxLVxwaV9pfVxyaWdodCkgPSB4X2leVCBcYmV0YQ0KXF0NCg0KTG9nLWxpa2VsaWhvb2QgdOG7lW5nIHF1w6F0IGNobyB0b8OgbiBi4buZIG3huqt1IGPDsyBk4bqhbmc6ICANClxbDQpcZWxsKFxiZXRhKSA9IFxzdW1fe2k9MX1ebiBcbGVmdFsgeV9pIFxsb2coXHBpX2kpICsgKDEgLSB5X2kpIFxsb2coMS1ccGlfaSkgXHJpZ2h0XQ0KXF0NCg0KRG8ga2jDtG5nIGPDsyBuZ2hp4buHbSBnaeG6o2kgdMaw4budbmcgbWluaCBjaG8gaOG7hyBz4buRIOKGkiBkw7luZyBJUkxTIMSR4buDIHTDrG0gXChcaGF0e1xiZXRhfVwpLg0KDQoNCiMjIyAqKjguMyBEaeG7hW4gZ2nhuqNpIGjhu4cgc+G7kSBo4buTaSBxdXkgdHJvbmcgbG9naXN0aWMgcmVncmVzc2lvbioqDQoNCktoaSBkw7luZyBsb2dpdCBsaW5rOiAgDQpcWw0KXGV0YV9pID0gXGxvZ1xsZWZ0KFxmcmFje1xwaV9pfXsxLVxwaV9pfVxyaWdodCkgPSB4X2leVCBcYmV0YQ0KXF0NCg0K4oaSIFwoXGJldGFfalwpIMSR4bqhaSBkaeG7h24gY2hvIGxvZyBvZGRzIHJhdGlvIG5naMSpYSBsw6A6ICANClxbDQpcdGV4dHtPZGRzIHJhdGlvfSA9IFxleHAoXGJldGFfaikNClxdDQoNCi0gTuG6v3UgXChcYmV0YV9qID4gMFwpOiBiaeG6v24gXCh4X2pcKSBsw6BtIHTEg25nIGto4bqjIG7Eg25nIFwoeT0xXCkNCg0KLSBO4bq/dSBcKFxiZXRhX2ogPCAwXCk6IGJp4bq/biBcKHhfalwpIGzDoG0gZ2nhuqNtIGto4bqjIG7Eg25nIFwoeT0xXCkNCg0KIyMjICoqOC40IEtob+G6o25nIHRpbiBj4bqteSB2w6Aga2nhu4NtIMSR4buLbmgqKg0KDQpTYXUga2hpIMaw4bubYyBsxrDhu6NuZyBcKFxoYXR7XGJldGF9XCksIHRhIGtp4buDbSDEkeG7i25oIMO9IG5naMSpYSBj4bunYSB04burbmcgaOG7hyBz4buRIHRow7RuZyBxdWEga2nhu4NtIMSR4buLbmggV2FsZDoNCg0KXFsNClpfaiA9IFxmcmFje1xoYXR7XGJldGF9X2p9e1NFKFxoYXR7XGJldGF9X2opfSBcc2ltIE4oMCwxKQ0KXF0NCg0KS2hv4bqjbmcgdGluIGPhuq15IDk1JSDEkcaw4bujYyDGsOG7m2MgdMOtbmggbmjGsCBzYXU6ICANClxbDQpcaGF0e1xiZXRhfV9qIFxwbSB6X3swLjk3NX0gXGNkb3QgU0UoXGhhdHtcYmV0YX1faikNClxdDQoNCkNodXnhu4NuIHNhbmcgb2RkcyByYXRpbyBi4bqxbmcgIA0KXFsNClxleHAoXGhhdHtcYmV0YX1faikNClxdDQoNCg0KIyMjICoqOC41IMSQw6FuaCBnacOhIG3DtCBow6xuaCoqDQoNCkRldmlhbmNlIGzDoCBt4buZdCDEkeG6oWkgbMaw4bujbmcgxJFvIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oOg0KDQpcWw0KRCA9IC0yIFxsZWZ0WyBcZWxsKFxoYXR7XGJldGF9KSAtIFxlbGxfe1x0ZXh0e3NhdHVyYXRlZH19IFxyaWdodF0NClxdDQoNCktp4buDbSDEkeG7i25oIGRldmlhbmNlIGdp4buvYSBtw7QgaMOsbmggxJHhuqd5IMSR4bunIHbDoCBtw7QgaMOsbmggcsO6dCBn4buNbi4NCg0KUHNldWRvLVwoUl4yXCk6ICANClxbDQpSXjIgPSAxIC0gXGZyYWN7RF97XHRleHR7bW9kZWx9fX17RF97XHRleHR7bnVsbH19fQ0KXF0NCg0KDQojIyMgKio4LjYgTcO0IGjDrG5oIGjDs2EgduG7m2kgbmhp4buBdSBiaeG6v24gKG11bHRpcGxlIHByZWRpY3RvcnMpKioNCg0KSOG7k2kgcXV5IGxvZ2lzdGljIGPDsyB0aOG7gyBk4buFIGTDoG5nIG3hu58gcuG7mW5nIMSR4buDIGJhbyBn4buTbSBuaGnhu4F1IGJp4bq/biBnaeG6o2kgdGjDrWNoOg0KDQpcWw0KXGxvZ1xsZWZ0KFxmcmFje1xwaV9pfXsxLVxwaV9pfVxyaWdodCkgPSBcYmV0YV8wICsgXGJldGFfMSB4X3tpMX0gKyBcY2RvdHMgKyBcYmV0YV9wIHhfe2lwfQ0KXF0NCg0KxJDDonkgbMOgIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgxJFhIGJp4bq/biAobXVsdGlwbGUgbG9naXN0aWMgcmVncmVzc2lvbiksIGNobyBwaMOpcCBwaMOibiB0w61jaCDhuqNuaCBoxrDhu59uZyDEkeG7k25nIHRo4budaSBj4bunYSBuaGnhu4F1IHnhur91IHThu5EgbMOqbiB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbi4NCg0KDQojIyMgKio4LjcgTcO0IGjDrG5oIGjDs2EgdOG7tyBs4buHIChHcm91cGVkIGJpbm9taWFsIG1vZGVsKSoqDQoNClRyb25nIG3hu5l0IHPhu5EgdHLGsOG7nW5nIGjhu6NwLCBk4buvIGxp4buHdSBwaOG6o24gaOG7k2kga2jDtG5nIHBo4bqjaSB04burbmcgcXVhbiBzw6F0IHJpw6puZyBs4bq7IG3DoCDEkcaw4bujYyB04buVbmcgaOG7o3AgZMaw4bubaSBk4bqhbmcgdOG7tyBs4buHOg0KDQpcWw0KXGZyYWN7eV9pfXtuX2l9DQpcXSAgDQp0YSBkw7luZzogIA0KXFsNCnlfaSBcc2ltIFx0ZXh0e0Jpbm9taWFsfShuX2ksIFxwaV9pKQ0KXF0NCg0KTG9nLWxpa2VsaWhvb2Q6ICANClxbDQpcZWxsKFxiZXRhKSA9IFxzdW1fe2k9MX1ebiBcbGVmdFsgeV9pIFxsb2coXHBpX2kpICsgKG5faSAtIHlfaSkgXGxvZygxLVxwaV9pKSBccmlnaHRdDQpcXQ0KDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCg0KIyMgKipDSMavxqBORyA5OiBI4buSSSBRVVkgUE9JU1NPTiAoUE9JU1NPTiBSRUdSRVNTSU9OKSoqDQoNCioqKk3hu6VjIHRpw6p1IGPhu6dhIGNoxrDGoW5nIG7DoHkgbMOgIGdp4bubaSB0aGnhu4d1IG3DtCBow6xuaCBo4buTaSBxdXkgUG9pc3NvbiB0cm9uZyBraHXDtG4ga2jhu5UgR0xNLCB24buRbiDEkcaw4bujYyB0aGnhur90IGvhur8gxJHhu4MgcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhur9tIOKAkyB04bupYyBjw6FjIGJp4bq/biBwaOG6o24gaOG7k2kgcuG7nWkgcuG6oWMsIGtow7RuZyDDom0gbmjGsCBz4buRIHPhu7Ega2nhu4duIHjhuqN5IHJhIHRyb25nIG3hu5l0IMSRxqFuIHbhu4sgdGjhu51pIGdpYW4gaG/hurdjIGtow7RuZyBnaWFuLiBDaMawxqFuZyB0csOsbmggYsOgeSBjw6FjaCB4w6J5IGThu7FuZyBtw7QgaMOsbmggduG7m2kgaMOgbSBsacOqbiBr4bq/dCBsb2cgxJHhu4MgxJHhuqNtIGLhuqNvIGdpw6EgdHLhu4sga+G7syB24buNbmcgbHXDtG4gZMawxqFuZywgZ2nhuqNpIHRow61jaCDDvSBuZ2jEqWEgY8OhYyBo4buHIHPhu5EgaOG7k2kgcXV5IHRyw6puIHRoYW5nIGxvZ2FyaXQsIHbDoCBjaOG7iSByw7UgY8OhY2ggxrDhu5tjIGzGsOG7o25nIGPDoWMgdGhhbSBz4buRIGLhurFuZyBwaMawxqFuZyBwaMOhcCBo4bujcCBsw70gdOG7kWkgxJFhLiBOZ2/DoGkgcmEsIGNoxrDGoW5nIGPDsm4gdOG6rXAgdHJ1bmcgdsOgbyBjw6FjIHbhuqVuIMSR4buBIHF1YW4gdHLhu41uZyBuaMawIMSRaeG7gXUgY2jhu4luaCBvZmZzZXQga2hpIGThu68gbGnhu4d1IHF1YW4gc8OhdCBjw7MgxJHhu5kgZMOgaSBraMOhYyBuaGF1LCB44butIGzDvSBoaeG7h24gdMaw4bujbmcgcGjDom4gdMOhbiBxdcOhIG3hu6ljIChvdmVyZGlzcGVyc2lvbikgYuG6sW5nIHF1YXNpLVBvaXNzb24gaG/hurdjIE5lZ2F0aXZlIEJpbm9taWFsLCB2w6AgxJHDoW5oIGdpw6EgbcO0IGjDrG5oIHRow7RuZyBxdWEgY8OhYyB0acOqdSBjaMOtIG5oxrAgZGV2aWFuY2UsIEFJQyB2w6Aga2nhu4NtIMSR4buLbmggUGVhcnNvbiBjaGktc3F1YXJlLioqKg0KDQojIyMgKio5LjEgR2nhu5tpIHRoaeG7h3UgdsOgIOG7qW5nIGThu6VuZyB0aOG7sWMgdOG6vyoqDQoNCkjhu5NpIHF1eSBQb2lzc29uIGzDoCBt4buZdCBtw7QgaMOsbmggdGh14buZYyBo4buNIE3DtCBow6xuaCBUdXnhur9uIHTDrW5oIFThu5VuZyBxdcOhdCAoR0xNKSwgxJHGsOG7o2MgdGhp4bq/dCBr4bq/IMSR4buDIG3DtCBow6xuaCBow7NhIGPDoWMgYmnhur9uIHBo4bqjbiBo4buTaSBsw6Agc+G7kSBsxrDhu6NuZyBz4buxIGtp4buHbiB44bqjeSByYSB0cm9uZyBt4buZdCDEkcahbiB24buLIHF1YW4gc8OhdCwgY2jhurNuZyBo4bqhbiBuaMawOg0KDQogIC0gU+G7kSBs4bqnbiBuaOG6rXAgdmnhu4duDQoNCiAgLSBT4buRIHbhu6UgdGFpIG7huqFuIGdpYW8gdGjDtG5nDQoNCiAgLSBT4buRIGzhu5dpIHBo4bqnbiBt4buBbSDEkcaw4bujYyBnaGkgbmjhuq1uDQoNCk3DtCBow6xuaCBuw6B5IMSR4bq3YyBiaeG7h3QgdGjDrWNoIGjhu6NwIGtoaToNCg0KLSBCaeG6v24gcGjhuqNuIGjhu5NpIFwoIHkgXGluIFx7MCwgMSwgMiwgXGxkb3RzIFx9IFwpDQoNCi0gROG7ryBsaeG7h3UgY8OzIHLhu51pIHLhuqFjIHbDoCBraMO0bmcgw6JtDQoNCi0gTeG7pWMgdGnDqnUgbMOgIMaw4bubYyBsxrDhu6NuZyBz4buRIHPhu7Ega2nhu4duIHRydW5nIGLDrG5oIHRoZW8gY8OhYyDEkeG6t2MgdMOtbmggXCggeCBcKQ0KDQoNCiMjIyAqKjkuMiBQaMOibiBwaOG7kWkgUG9pc3NvbiB2w6AgbGnDqm4ga+G6v3QgbG9nKioNCg0KIyMjIyAqKjkuMi4xIEjDoG0geMOhYyBzdeG6pXQ6KiogIA0KXFsNClAoeV9pKSA9IFxmcmFje2Veey1cbXVfaX0gXG11X2lee3lfaX19e3lfaSF9LCBccXVhZCB5X2kgPSAwLCAxLCAyLCBcbGRvdHMNClxdDQoNClRyb25nIMSRw7M6DQoNClxbDQpcbXVfaSA9IEVbeV9pXSA6IFx0ZXh0e3Phu5Egc+G7sSBraeG7h24ga+G7syB24buNbmcgY+G7p2EgcXVhbiBzw6F0IHRo4bupIH0gaQ0KXF0NCg0KXFsNClx0ZXh0e1Zhcn0oeV9pKSA9IFxtdV9pIFxxdWFkIDogXHRleHR7xJHhurdjIMSRaeG7g20gdGhlbiBjaOG7kXR9DQpcXQ0KDQojIyMjICoqOS4yLjIgSMOgbSBsacOqbiBr4bq/dCAoY2Fub25pY2FsKToqKg0KDQpcWw0KXGV0YV9pID0gXGxvZyhcbXVfaSkgPSB4X2leVCBcYmV0YSBcaW1wbGllcyBcbXVfaSA9IGVee3hfaV5UIFxiZXRhfQ0KXF0NCg0KIyMjIyAqKjkuMi4zIEjDoG0gbG9nIMSR4bqjbSBi4bqjbzoqKg0KDQpcWw0KXG11X2kgPiAwDQpcXQ0KDQpN4buRaSBxdWFuIGjhu4cgdHV54bq/biB0w61uaCB0csOqbiBsb2ctc2NhbGUuDQoNCiMjIyAqKjkuMyBIw6BtIGxvZy1saWtlbGlob29kIHbDoCBwaMawxqFuZyB0csOsbmggxJFp4buDbSoqDQoNCiMjIyAqKjkuMy4xIExvZy1saWtlbGlob29kIGPhu6dhIG3DtCBow6xuaDoqKg0KDQpcWw0KXGVsbChcYmV0YSkgPSBcc3VtX3tpPTF9Xm4gXGxlZnRbIHlfaSBcbG9nKFxtdV9pKSAtIFxtdV9pIC0gXGxvZyh5X2khKSBccmlnaHRdDQpcXQ0KDQpUaGF5IFwoXG11X2kgPSBlXnt4X2leVCBcYmV0YX1cKSwgdGEgxJHGsOG7o2M6DQoNClxbDQpcZWxsKFxiZXRhKSA9IFxzdW1fe2k9MX1ebiBcbGVmdFsgeV9pIHhfaV5UIFxiZXRhIC0gZV57eF9pXlQgXGJldGF9IC0gXGxvZyh5X2khKSBccmlnaHRdDQpcXQ0KDQojIyMjICoqOS4zLjIgU2NvcmUgZnVuY3Rpb24gKMSR4bqhbyBow6BtIGxvZy1saWtlbGlob29kKToqKg0KDQpcWw0KVShcYmV0YSkgPSBcc3VtX3tpPTF9Xm4geF9pICh5X2kgLSBcbXVfaSkNClxdDQoNCkdp4bqjaSBwaMawxqFuZyB0csOsbmggXCggVShcYmV0YSkgPSAwIFwpIOKGkiB0w6xtIFwoXGhhdHtcYmV0YX1cKSBi4bqxbmcgSVJMUy4NCg0KIyMjICoqOS40IERp4buFbiBnaeG6o2kgaOG7hyBz4buRIGjhu5NpIHF1eSoqDQoNClRyb25nIGjhu5NpIHF1eSBQb2lzc29uOg0KDQotIE3hu5dpIFwoXGJldGFfalwpIHRo4buDIGhp4buHbiDhuqNuaCBoxrDhu59uZyB0dXnhur9uIHTDrW5oIHRyw6puIHRoYW5nIGxvZyDEkeG6v24gc+G7kSBz4buxIGtp4buHbiB0cnVuZyBiw6xuaC4NCg0KLSBcKGVee1xiZXRhX2p9XCkgbMOgIHThu7cgbOG7hyB0aGF5IMSR4buVaSBr4buzIHbhu41uZyBcKFxtdVwpIGtoaSBcKHhfalwpIHTEg25nIDEgxJHGoW4gduG7iywgY8OhYyBiaeG6v24ga2jDoWMgZ2nhu68gbmd1ecOqbi4NCg0KDQojIyMgKio5LjUgVOG7tyBs4buHIHjhuqN5IHJhICYgb2Zmc2V0KioNCg0KT2Zmc2V0OiBLaGkgY8OhYyBxdWFuIHPDoXQga2jDoWMgbmhhdSB24buBIHRo4budaSBnaWFuIGhv4bq3YyBwaOG6oW0gdmkgdGhlbyBkw7VpLCBj4bqnbiDEkWnhu4F1IGNo4buJbmggxJHhu4MgbcO0IGjDrG5oIHBo4bqjbiDDoW5oIHThu7cgbOG7hyBz4buxIGtp4buHbiwgdGhheSB2w6wgc+G7kSBsxrDhu6NuZyB0dXnhu4d0IMSR4buRaS4NCg0KDQpcWw0KXGZyYWN7XG11X2l9e3RfaX0gXGltcGxpZXMgXGxvZyhcbXVfaSkgPSBcbG9nKHRfaSkgKyB4X2leVCBcYmV0YQ0KXF0NCg0KVHJvbmcgxJHDsyBcKFxsb2codF9pKVwpIGzDoCAqKm9mZnNldCoqIMSRxrDhu6NjIMSRxrBhIHbDoG8gbcO0IGjDrG5oIG5oxrBuZyBraMO0bmcgY8OzIGjhu4cgc+G7kSBo4buTaSBxdXkgxJFpIGvDqG0uDQoNCg0KIyMjICoqOS42IFBwaMOibiB0w6FuIHF1w6EgbeG7qWMgKE92ZXJkaXNwZXJzaW9uKSoqDQoNClbhu4EgbMO9IHRodXnhur90LCBtw7QgaMOsbmggUG9pc3NvbiBnaeG6oyDEkeG7i25oOg0KDQoNClxbDQpcbWF0aHJte1Zhcn0oeV9pKSA9IFxtdV9pDQpcXQ0KDQpUdXkgbmhpw6puLCB0cm9uZyB0aOG7sWMgdOG6vywgdGjGsOG7nW5nIHRo4bqleToNCg0KDQpcWw0KXG1hdGhybXtWYXJ9KHlfaSkgPiBcbXVfaSBccXVhZCBcUmlnaHRhcnJvdyBccXVhZCBcdGV4dHtvdmVyZGlzcGVyc2lvbn0NClxdDQoNCk5ndXnDqm4gbmjDom4gY8OzIHRo4buDIGJhbyBn4buTbTogYuG7jyBzw7N0IGJp4bq/biBxdWFuIHRy4buNbmcsIHF1w6Egbmhp4buBdSBnacOhIHRy4buLIGLhurFuZyAwLCBob+G6t2Mgc+G7sSBiaeG6v24gxJHhu5luZyB2xrDhu6N0IG5nb8OgaSBk4buxIGtp4bq/bi4NCg0KKipI4buHIHPhu5EgcGjDom4gdMOhbjoqKg0KDQpcWw0KXGhhdHtccGhpfSA9IFxmcmFje1x0ZXh0e0RldmlhbmNlfX17biAtIHB9DQpcXQ0KDQpO4bq/dSBcKFxoYXR7XHBoaX0gPiAxLjVcKSB0aMOsIGPhuqduIGzGsHUgw70gaGnhu4duIHTGsOG7o25nIHBow6JuIHTDoW4gcXXDoSBt4bupYy4NCg0KR2nhuqNpIHBow6FwIHjhu60gbMO9Og0KDQogIC0gRMO5bmcgcXVhc2ktUG9pc3NvbjogxJFp4buBdSBjaOG7iW5oIHBoxrDGoW5nIHNhaSBtw6Aga2jDtG5nIHRoYXkgxJHhu5VpIGvhu7MgduG7jW5nLg0KDQogIC0gRMO5bmcgTmVnYXRpdmUgQmlub21pYWw6IHRow6ptIHRoYW0gc+G7kSDOsSDEkeG7gyBtw7QgaMOsbmggaMOzYSBwaMawxqFuZyBzYWkgbOG7m24gaMahbi4NCiAgDQoNCiMjIyAqKjkuNyDEkMOhbmggZ2nDoSBtw7QgaMOsbmgqKg0KDQpDw6FjIHBoxrDGoW5nIHBow6FwIMSRw6FuaCBnacOhIGJhbyBn4buTbToNCg0KICAtIERldmlhbmNlOiDEkW8gbMaw4budbmcgbeG7qWMgxJHhu5kgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmguDQoNCiAgLSBBSUM6IHRpw6p1IGNow60gbOG7sWEgY2jhu41uIG3DtCBow6xuaCB04buRaSDGsHUuDQoNCiAgLSBLaeG7g20gxJHhu4tuaCBkZXZpYW5jZTogc28gc8OhbmggbcO0IGjDrG5oIMSR4bqneSDEkeG7pyB2w6AgbcO0IGjDrG5oIHLDunQgZ+G7jW4uDQoNCiAgLSBCaeG7g3UgxJHhu5MgcGjhuqduIGTGsDoNCg0KICAgICAgLSBSZXNpZHVhbHMgdnMgRml0dGVkDQoNCiAgICAgIC0gRGV2aWFuY2UgcmVzaWR1YWxzDQoNCiAgICAgIC0gQ29va+KAmXMgZGlzdGFuY2UNCg0KKipLaeG7g20gxJHhu4tuaCBQZWFyc29uIGNoaS1zcXVhcmU6KioNCg0KXFsNClheMiA9IFxzdW1fe2k9MX1ebiBcZnJhY3soeV9pIC0gXG11X2kpXjJ9e1xtdV9pfSBccXVhZCBcUmlnaHRhcnJvdyBccXVhZCBYXjIgXHNpbSBcY2hpXjJfe24tcH0NClxdDQoNCiMjIyAqKjkuOCBTbyBzw6FuaCB24bubaSBjw6FjIG3DtCBow6xuaCBraMOhYyoqDQoNCg0KfCBNw7QgaMOsbmggICAgICAgICAgIHwgS2hpIG7DoG8gZMO5bmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqUG9pc3NvbioqICAgICAgIHwgS2hpIGThu68gbGnhu4d1IMSR4bq/bSB2w6AgcGjGsMahbmcgc2FpIHjhuqVwIHjhu4kgYuG6sW5nIGvhu7MgduG7jW5nIChcKFxtYXRocm17VmFyfSh5KSBcYXBwcm94IEUoeSlcKSkgfA0KfCAqKlF1YXNpLVBvaXNzb24qKiB8IEtoaSBjw7MgcGjDom4gdMOhbiBxdcOhIG3hu6ljIG5o4bq5LCB24bqrbiBnaeG7ryBuZ3V5w6puIGjDoG0gbGnDqm4ga+G6v3QgbG9nIChsaW5rIGZ1bmN0aW9uKSAgICAgICAgICAgfA0KfCAqKk5lZ2F0aXZlIEJpbm9taWFsKiogfCBLaGkgcGjDom4gdMOhbiBxdcOhIG3hu6ljIG5naGnDqm0gdHLhu41uZyBob+G6t2MgZOG7ryBsaeG7h3UgY2jhu6lhIG5oaeG7gXUgZ2nDoSB0cuG7iyBi4bqxbmcgMCAgfA0KDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQoNCiMjICoqQ0jGr8agTkcgMTA6IEjhu5JJIFFVWSBHQU1NQSAoR0FNTUEgUkVHUkVTU0lPTikqKg0KDQoqKipDaMawxqFuZyBuw6B5IHThuq1wIHRydW5nIHbDoG8gbcO0IGjDrG5oIGjhu5NpIHF1eSBHYW1tYSDigJMgbeG7mXQgZOG6oW5nIEdMTSBjaHV5w6puIGJp4buHdCBkw7luZyBjaG8gY8OhYyBiaeG6v24gcGjhuqNuIGjhu5NpIGxpw6puIHThu6VjLCBkxrDGoW5nIHbDoCBjw7MgcGjGsMahbmcgc2FpIHThu7cgbOG7hyB24bubaSBiw6xuaCBwaMawxqFuZyBnacOhIHRy4buLIGvhu7MgduG7jW5nLiBN4bulYyB0acOqdSBj4bunYSBjaMawxqFuZyBsw6AgZ2nDunAgbmfGsOG7nWkgxJHhu41jIGhp4buDdSDEkcaw4bujYyBjw6FjaCBtw7QgaMOsbmggaMOzYSBk4buvIGxp4buHdSBraeG7g3UgbsOgeSB0aMO0bmcgcXVhIHBow6JuIHBo4buRaSBHYW1tYSB2w6AgaMOgbSBsacOqbiBr4bq/dCBsb2csIHbhu5FuIHBo4buVIGJp4bq/biB2w6wgxJHhuqNtIGLhuqNvIHTDrW5oIGTGsMahbmcgY+G7p2Ega+G7syB24buNbmcuIENoxrDGoW5nIGPFqW5nIGjGsOG7m25nIGThuqtuIGNoaSB0aeG6v3QgY8OhY2ggdGhp4bq/dCBs4bqtcCBow6BtIGxvZy1saWtlbGlob29kIHbDoCBnaeG6o2kgaOG7hyBwaMawxqFuZyB0csOsbmggxJFp4buDbSBi4bqxbmcgdGh14bqtdCB0b8OhbiBJUkxTIMSR4buDIMaw4bubYyBsxrDhu6NuZyB0aGFtIHPhu5EuIE5nb8OgaSByYSwgY2jGsMahbmcgY8OybiBjdW5nIGPhuqVwIGPDoWNoIGRp4buFbiBnaeG6o2kgY8OhYyBo4buHIHPhu5EgaOG7k2kgcXV5IHRyw6puIHRoYW5nIGxvZywgdGjhu7FjIGhp4buHbiBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCB24bubaSBXYWxkIHRlc3QsIHTDrW5oIGtob+G6o25nIHRpbiBj4bqteSwga2nhu4NtIHRyYSDEkeG7mSBwaMO5IGjhu6NwIG3DtCBow6xuaCB24bubaSBkZXZpYW5jZSB2w6AgUGVhcnNvbiBjaGktc3F1YXJlLCDEkeG7k25nIHRo4budaSBzbyBzw6FuaCB24bubaSBjw6FjIG3DtCBow6xuaCB0aGF5IHRo4bq/IG5oxrAgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggaG/hurdjIGjhu5NpIHF1eSBsb2ctbm9ybWFsLioqKg0KDQojIyMgKioxMC4xIEdp4bubaSB0aGnhu4d1KioNCg0KSOG7k2kgcXV5IEdhbW1hIGzDoCBt4buZdCBtw7QgaMOsbmggdGh14buZYyBo4buNIE3DtCBow6xuaCBUdXnhur9uIHTDrW5oIFThu5VuZyBxdcOhdCAoR0xNKSwgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgbcO0IGjDrG5oIGjDs2EgY8OhYyBiaeG6v24gcGjhuqNuIGjhu5NpIGxpw6puIHThu6VjLCBkxrDGoW5nIHbhu5tpIHBoxrDGoW5nIHNhaSB0xINuZyB0aGVvIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmguIE3DtCBow6xuaCBuw6B5IMSR4bq3YyBiaeG7h3QgcGjDuSBo4bujcCB0cm9uZyBjw6FjIHRyxrDhu51uZyBo4bujcCBtw6AgxJHhu5kgYmnhur9uIHRoacOqbiBj4bunYSBk4buvIGxp4buHdSB04buJIGzhu4cgduG7m2kgYsOsbmggcGjGsMahbmcgdHJ1bmcgYsOsbmguDQoNCk3hu5l0IHPhu5EgdsOtIGThu6Ug4bupbmcgZOG7pW5nIMSRaeG7g24gaMOsbmg6DQoNCiAgLSBDaGkgcGjDrSB5IHThur8NCg0KICAtIFRo4budaSBnaWFuIHPhu5FuZyAoc3Vydml2YWwgdGltZSkNCg0KICAtIEzGsOG7o25nIHRpw6p1IHRo4bulIG7Eg25nIGzGsOG7o25nDQoNCiMjIyAqKjEwLjIgUGjDom4gcGjhu5FpIEdhbW1hKioNCg0KR2nhuqMgxJHhu4tuaCBiaeG6v24gbmfhuqt1IG5oacOqbiBcKCB5X2kgXCksIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIEdhbW1hIHbhu5tpIGPDoWMgdGhhbSBz4buROg0KDQpcWw0KeV9pIFxzaW0gR2FtbWEoXGFscGhhLCBcbXVfaSkNClxdDQoNClRyb25nIMSRw7M6DQoNCiBcKCBcbXVfaSA9IEVbeV9pXSBcKSBsw6Aga+G7syB24buNbmcgY+G7p2EgXCggeV9pIFwpLg0KDQpQaMawxqFuZyBzYWk6ICANClxbDQpWYXIoeV9pKSA9IFxmcmFje1xtdV9pXjJ9e1xhbHBoYX0gPSBccGhpIFxtdV9pXjINClxdDQoNClThu6ljIGzDoCBwaMawxqFuZyBzYWkgdOG7tyBs4buHIHbhu5tpIGLDrG5oIHBoxrDGoW5nIGvhu7MgduG7jW5nIOKAkyBt4buZdCBnaeG6oyDEkeG7i25oIHBow7kgaOG7o3AgdHJvbmcgbmhp4buBdSBiw6BpIHRvw6FuIHRo4buxYyB04bq/IGPDsyB0w61uaCBiaeG6v24gdGhpw6puIHTGsMahbmcgxJHhu5FpIGtow7RuZyDEkeG7lWkuDQoNCiMjIyAqKjEwLjMgSMOgbSBt4bqtdCDEkeG7mSB4w6FjIHN14bqldCBHYW1tYSAoZOG6oW5nIEdMTSkqKg0KDQpIw6BtIG3huq10IMSR4buZIHjDoWMgc3XhuqV0IGPhu6dhIHBow6JuIHBo4buRaSBHYW1tYSAoZMaw4bubaSBk4bqhbmcgaMOgbSBtxakpOg0KDQpcWw0KZih5OyBcbXUsIFxwaGkpID0gXGZyYWN7MX17XEdhbW1hKDEvXHBoaSl9IFxsZWZ0KFxmcmFjezF9e1xwaGkgXG11fVxyaWdodCleezEvXHBoaX0geV57XGZyYWN7MX17XHBoaX0tMX0gXGV4cFxsZWZ0KC1cZnJhY3t5fXtccGhpIFxtdX1ccmlnaHQpDQpcXQ0KDQpQaMOibiBwaOG7kWkgR2FtbWEgdGh14buZYyBo4buNIGjDoG0gbcWpIHbhu5tpIGPDoWMgxJHhurdjIHRyxrBuZzoNCg0KVGhhbSBz4buRIHThu7Egbmhpw6puOg0KXFsNClx0aGV0YSA9IC1cZnJhY3sxfXtcbXV9DQpcXQ0KDQpow6BtIGNodeG6qW4gaMOzYToNCg0KXFsNCmIoXHRoZXRhKSA9IC1cbG9nKC1cdGhldGEpDQpcXQ0KDQpIw6BtIHBoxrDGoW5nIHNhaToNCg0KXFsNClYoXG11KSA9IFxtdV4yDQpcXQ0KDQpcKFxwaGlcKSBsw6AgdGhhbSBz4buRIHBow6JuIHTDoW4uDQoNCiMjIyAqKjEwLjQgSMOgbSBsacOqbiBr4bq/dCAoTGluayBmdW5jdGlvbikqKg0KDQpN4bq3YyDEkeG7i25oIHRyb25nIEdMTSBz4butIGThu6VuZyBow6BtIGxvZyBsw6BtIGjDoG0gbGnDqm4ga+G6v3Q6DQoNClxbDQpnKFxtdV9pKSA9IFxsb2coXG11X2kpID0gXGV0YV9pID0geF9pXlQgXGJldGENClxdDQoNCk5nb8OgaSByYSwgY8OzIHRo4buDIHPhu60gZOG7pW5nIGPDoWMgaMOgbSBsacOqbiBr4bq/dCBraMOhYzoNCg0KLSBIw6BtIMSR4buTbmcgbmjhuqV0IElkZW50aXR5OiBcKCBnKFxtdSkgPSBcbXUgXCkNCg0KLSBIw6BtIG5naOG7i2NoIMSR4bqjbyBJbnZlcnNlOiBcKCBnKFxtdSkgPSBcZnJhY3sxfXtcbXV9IFwpDQoNClR1eSBuaGnDqm4sIGjDoG0gbG9nIHRoxrDhu51uZyDEkcaw4bujYyDGsHUgdGnDqm4gc+G7rSBk4bulbmcgdsOsIMSR4bqjbSBi4bqjbyBcKCBcbXUgPiAwIFwpIHbDoCBkdXkgdHLDrCB0dXnhur9uIHTDrW5oIHRyw6puIHRow6BuIGxvZy4NCg0KDQojIyMgKioxMC41IMav4bubYyBsxrDhu6NuZyB0cm9uZyBo4buTaSBxdXkgR2FtbWEqKg0KDQrGr+G7m2MgbMaw4bujbmcgdGhhbSBz4buRIFwoXGJldGFcKSDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG6sW5nIHBoxrDGoW5nIHBow6FwIGjhu6NwIGzDvSB04buRaSDEkWEgKE1MRSksIHRow7RuZyBxdWEgdGh14bqtdCB0b8OhbiBJUkxTIChJdGVyYXRpdmVseSBSZXdlaWdodGVkIExlYXN0IFNxdWFyZXMpLg0KDQpIw6BtIGxvZy1saWtlbGlob29kOg0KDQpcWw0KXGVsbChcYmV0YSkgPSBcc3VtX3tpPTF9Xm4gXGxlZnRbLVxsb2coXG11X2kpIC0gXGZyYWN7eV9pfXtcbXVfaX0gXHJpZ2h0XSArIFx0ZXh0e2jhurFuZyBz4buRfQ0KXF0NCg0KduG7m2k6DQoNClxbDQpcbXVfaSA9IGVee3hfaV5UIFxiZXRhfQ0KXF0NCg0KVGEgdGhp4bq/dCBs4bqtcCBwaMawxqFuZyB0csOsbmggxJFp4buDbToNCg0KXFsNClxmcmFje1xwYXJ0aWFsIFxlbGx9e1xwYXJ0aWFsIFxiZXRhfSA9IFxzdW1fe2k9MX1ebiB4X2kgXGxlZnQoIHlfaSAtIFxmcmFje1xtdV9pfXtcbXVfaV4yfSBcY2RvdCBcZnJhY3tkXG11X2l9e2RcZXRhX2l9IFxyaWdodCkgPSAwDQpcXQ0KDQpEw7luZyBJUkxTIMSR4buDIGdp4bqjaSBwaMawxqFuZyB0csOsbmggdsOgIHTDrG0gbmdoaeG7h20gXChcaGF0e1xiZXRhfVwpLg0KDQojIyMgKioxMC42IERp4buFbiBnaeG6o2kgaOG7hyBz4buRKioNCg0KVuG7m2kgbGluayBsb2c6DQoNClxbDQpcbG9nKFxtdV9pKSA9IFxiZXRhXzAgKyBcYmV0YV8xIHhfe2kxfSArIFxjZG90cyArIFxiZXRhX3AgeF97aXB9IFxpbXBsaWVzIFxtdV9pID0gZV57eF9pXlQgXGJldGF9DQpcXQ0KDQpN4buXaSBo4buHIHPhu5EgXChcYmV0YV9qXCkgxJHGsOG7o2MgaGnhu4N1IGzDoCAqKnTDoWMgxJHhu5luZyB0csOqbiBsb2ctc2NhbGUqKiwgbmdoxKlhIGzDoCDhuqNuaCBoxrDhu59uZyDEkeG6v24gbG9nIGPhu6dhIGvhu7MgduG7jW5nIHRydW5nIGLDrG5oLg0KDQotIEtoaSBcKHhfalwpIHTEg25nIDEgxJHGoW4gduG7iywgdHJ1bmcgYsOsbmggXChcbXVcKSB0aGF5IMSR4buVaSB0aGVvIHThu7cgbOG7hzoNCg0KXFsNCmVee1xiZXRhX2p9DQpcXQ0KDQp04bupYyBsw6AgaOG7hyBz4buRIHThu7cgbOG7hyB0aGF5IMSR4buVaSBj4bunYSBcKFxtdVwpLg0KDQojIyMgKioxMC43IEtp4buDbSDEkeG7i25oIHbDoCBraG/huqNuZyB0aW4gY+G6rXkqKg0KDQotICoqV2FsZCB0ZXN0KiogxJHhu4Mga2nhu4NtIMSR4buLbmg6DQoNClxbDQpaX2ogPSBcZnJhY3tcaGF0e1xiZXRhfV9qfXtTRShcaGF0e1xiZXRhfV9qKX0gXHNpbSBcbWF0aGNhbHtOfSgwLDEpDQpcXQ0KDQotIEtob+G6o25nIHRpbiBj4bqteSBjaG8gXChcYmV0YV9qXCk6DQoNClxbDQpcaGF0e1xiZXRhfV9qIFxwbSB6X3tcYWxwaGEvMn0gXGNkb3QgU0UoXGhhdHtcYmV0YX1faikNClxdDQoNCi0gQ2h1eeG7g24gc2FuZyBraG/huqNuZyB0aW4gY+G6rXkgdOG7tyBs4buHIHRoYXkgxJHhu5VpIHRydW5nIGLDrG5oOg0KDQpcWw0KXGxlZnQoZV57XGhhdHtcYmV0YX1faiAtIHpfe1xhbHBoYS8yfSBTRShcaGF0e1xiZXRhfV9qKX0sIFxxdWFkIGVee1xoYXR7XGJldGF9X2ogKyB6X3tcYWxwaGEvMn0gU0UoXGhhdHtcYmV0YX1fail9IFxyaWdodCkNClxdDQoNCktob+G6o25nIHRpbiBj4bqteSBuw6B5IGdpw7pwIGRp4buFbiBnaeG6o2kg4bqjbmggaMaw4bufbmcgY+G7p2EgYmnhur9uIGdp4bqjaSB0aMOtY2ggbMOqbiB0cnVuZyBiw6xuaCBwaOG6o24gaOG7k2kgZMaw4bubaSBk4bqhbmcgdOG7tyBs4buHLg0KDQoNCg0KIyMjICoqMTAuOCBLaeG7g20gdHJhIMSR4buZIHBow7kgaOG7o3AgKEdvb2RuZXNzLW9mLWZpdCkqKg0KDQpIYWkgdGnDqnUgY2jDrSBwaOG7lSBiaeG6v24gxJHhu4MgxJHDoW5oIGdpw6EgbcO0IGjDrG5oOg0KDQotICoqRGV2aWFuY2UqKjoNCg0KXFsNCkQgPSAyIFxzdW1fe2k9MX1ebiBcbGVmdFsgXGZyYWN7eV9pIC0gXG11X2l9e1xtdV9pfSAtIFxsb2dcbGVmdChcZnJhY3t5X2l9e1xtdV9pfVxyaWdodCkgXHJpZ2h0XQ0KXF0NCg0KLSAqKlBlYXJzb24gY2hpLXNxdWFyZSoqOg0KDQpcWw0KWF4yID0gXHN1bV97aT0xfV5uIFxsZWZ0KCBcZnJhY3t5X2kgLSBcbXVfaX17XG11X2l9IFxyaWdodCleMg0KXF0NCg0KQ8OhYyBjaOG7iSBz4buRIG7DoHkgcGjhuqNuIMOhbmggbeG7qWMgxJHhu5kgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmggduG7m2kgZOG7ryBsaeG7h3UsIMSR4buTbmcgdGjhu51pIGdpw7pwIHBow6F0IGhp4buHbiBoaeG7h24gdMaw4bujbmcgb3ZlcmRpc3BlcnNpb24gbuG6v3UgY8OzLg0KDQojIyMgKioxMC45IFNvIHPDoW5oIHbhu5tpIG3DtCBow6xuaCBraMOhYyoqDQoNCnwgTcO0IGjDrG5oICAgICAgICAgICAgfCBLaGkgZMO5bmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IEjhu5NpIHF1eSB0dXnhur9uIHTDrW5oICB8IEtoaSBk4buvIGxp4buHdSBwaMOibiBwaOG7kWkgY2h14bqpbiB2w6AgcGjGsMahbmcgc2FpIGtow7RuZyDEkeG7lWkgICAgICAgICAgIHwNCnwgSOG7k2kgcXV5IEdhbW1hICAgICAgfCBLaGkgZOG7ryBsaeG7h3UgZMawxqFuZywgcGjGsMahbmcgc2FpIHThu7cgbOG7hyB24bubaSBiw6xuaCBwaMawxqFuZyB0cnVuZyBiw6xuaCB8DQp8IEjhu5NpIHF1eSBsb2ctbm9ybWFsICB8IEtoaSBcKFxsb2coeSlcKSBwaMOibiBwaOG7kWkgY2h14bqpbiAoc2F1IGJp4bq/biDEkeG7lWkgbG9nKSAgICAgICAgICB8DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KDQojIyAqKkNIxq/GoE5HIDExOiBE4buuIExJ4buGVSBOSMOTTSBIT+G6tkMgVOG7tiBM4buGIChHUk9VUEVEIERBVEEgT1IgUFJPUE9SVElPTlMpKioNCg0KKioqTeG7pWMgdGnDqnUgY2jDrW5oIGPhu6dhIGNoxrDGoW5nIG7DoHkgbMOgIHRyw6xuaCBiw6B5IG3DtCBow6xuaCBow7NhIGThu68gbGnhu4d1IG5o4buLIHRo4bupYyB04buVbmcgcXXDoXQgKGJpbm9taWFsIEdMTSkgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIHBo4bqjbiBo4buTaSBsw6Agc+G7kSBsxrDhu6NuZyB0aMOgbmggY8O0bmcgdHLDqm4gdOG7lW5nIHPhu5EgbOG6p24gdGjhu60sIHRoxrDhu51uZyB4deG6pXQgaGnhu4duIGTGsOG7m2kgZOG6oW5nIGThu68gbGnhu4d1IG5ow7NtIGhv4bq3YyB04bu3IGzhu4cuIFRoYXkgdsOsIMOhcCBk4bulbmcgaOG7k2kgcXV5IGxvZ2lzdGljIGNobyB04burbmcgY8OhIG5ow6JuLCBjaMawxqFuZyBuw6B5IHBow6F0IHRyaeG7g24gbcO0IGjDrG5oIHBow7kgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3UgxJHDoyDEkcaw4bujYyB04buVbmcgaOG7o3Ag4oCTIHbDrSBk4bulIG5oxrAgc+G7kSBuZ8aw4budaSBt4bqvYyBi4buHbmggdHLDqm4gdOG7lW5nIGTDom4gc+G7kSB04burbmcga2h1IHbhu7FjLiBDaMawxqFuZyB0csOsbmggYsOgeSBjaGkgdGnhur90IGPDoWNoIHjDonkgZOG7sW5nIG3DtCBow6xuaCB24bubaSBsaW5rIGxvZ2l0LCBjw6FjaCB0w61uaCBsb2ctbGlrZWxpaG9vZCB2w6Agw6FwIGThu6VuZyB0aHXhuq10IHRvw6FuIElSTFMgY8OzIHRy4buNbmcgc+G7kSDEkeG7gyDGsOG7m2MgbMaw4bujbmcgdGhhbSBz4buRLiBCw6puIGPhuqFuaCDEkcOzLCBjaMawxqFuZyBjxaluZyBzbyBzw6FuaCBoaeG7h3UgcXXhuqMgZ2nhu69hIGThu68gbGnhu4d1IG5ow7NtIHbDoCBk4buvIGxp4buHdSBuaOG7iyBwaMOibiBjw6EgbmjDom4sIGNo4buJIHJhIG5o4buvbmcgbMawdSDDvSBraGkgbMOgbSB2aeG7h2MgduG7m2kgZOG7ryBsaeG7h3UgdOG7tyBs4buHLCDEkeG7k25nIHRo4budaSBoxrDhu5tuZyBk4bqrbiBjw6FjIGtp4buDbSDEkeG7i25oIG3DtCBow6xuaCwgcGjDoXQgaGnhu4duIGhp4buHbiB0xrDhu6NuZyBvdmVyZGlzcGVyc2lvbiwgdsOgIMSR4buBIHh14bqldCBz4butIGThu6VuZyBxdWFzaS1iaW5vbWlhbCBraGkgY+G6p24gdGhp4bq/dC4qKioNCg0KDQojIyMgKioxMS4xIEdp4bubaSB0aGnhu4d1KioNCg0KSOG7k2kgcXV5IGxvZ2lzdGljIHRoxrDhu51uZyDEkcaw4bujYyBkw7luZyDEkeG7gyBtw7QgaMOsbmggaMOzYSBk4buvIGxp4buHdSBuaOG7iyBwaMOibiAwLzEgKEJlcm5vdWxsaSkuIFR1eSBuaGnDqm4sIHRyb25nIHRo4buxYyB04bq/IHRhIHRoxrDhu51uZyBn4bq3cCBjw6FjIHRyxrDhu51uZyBo4bujcCBtw6AgZOG7ryBsaeG7h3UgY8OzIGThuqFuZyBuaMOzbSBob+G6t2MgxJHGsOG7o2MgYmnhu4N1IGRp4buFbiBkxrDhu5tpIGThuqFuZyB04bu3IGzhu4cgdGjDoG5oIGPDtG5nLiBD4bqnbiBkw7luZyBHTE0gZOG6oW5nIG5o4buLIHRo4bupYyB04buVbmcgcXXDoXQgKGJpbm9taWFsIEdMTSksIMOhcCBk4bulbmcgY2hvIHPhu5EgbOG6p24gdGjDoG5oIGPDtG5nIHRyw6puIHPhu5EgbOG6p24gdGjhu60uDQoNCiMjIyAqKjExLjIgTcO0IGjDrG5oIGjDs2Egc+G7kSB0aMOgbmggY8O0bmcgdHJvbmcgbmjDs20qKg0KDQpHaeG6oyBz4butIHbhu5tpIFwoIHlfaSBcc2ltIFx0ZXh0e0Jpbm9taWFsfShuX2ksIFxwaV9pKSBcKSwgdGEgbcO0IGjDrG5oIGjDs2E6DQoNClxbDQpcbG9nIFxsZWZ0KFxmcmFje1xwaV9pfXsxIC0gXHBpX2l9XHJpZ2h0KSA9IFxldGFfaSA9IHhfaV5UIFxiZXRhIFxpbXBsaWVzIFxwaV9pID0gXGZyYWN7ZV57eF9pXlQgXGJldGF9fXsxICsgZV57eF9pXlQgXGJldGF9fQ0KXF0NCg0KVHJvbmcgxJHDszoNCg0KLSBcKCB5X2kgXCk6IHPhu5EgbOG6p24gdGjDoG5oIGPDtG5nIHRyb25nIG5ow7NtIFwoaVwpDQoNCi0gXCggbl9pIFwpOiB04buVbmcgc+G7kSBs4bqnbiB0aOG7rSBuZ2hp4buHbSB0cm9uZyBuaMOzbSBcKGlcKQ0KDQotIFwoIFxwaV9pIFwpOiB4w6FjIHN14bqldCB0aMOgbmggY8O0bmcNCg0KLSBcKCBcbXVfaSA9IEVbeV9pXSA9IG5faSBccGlfaSBcKQ0KDQotIFwoIFx0ZXh0e1Zhcn0oeV9pKSA9IG5faSBccGlfaSAoMSAtIFxwaV9pKSBcKQ0KDQpUaMOtY2ggaOG7o3AgY2hvIGThu68gbGnhu4d1IGThuqFuZyAibiB0aOG7rSBuZ2hp4buHbSwgayB0aMOgbmggY8O0bmciLg0KDQoNCiMjIyAqKjExLjMgTG9nLWxpa2VsaWhvb2QgdsOgIElSTFMqKg0KDQoqKkjDoG0gbG9nLWxpa2VsaWhvb2Q6KioNCg0KXFsNClxlbGwoXGJldGEpID0gXHN1bV97aT0xfV5uIFxsZWZ0WyB5X2kgXGxvZyhccGlfaSkgKyAobl9pIC0geV9pKSBcbG9nKDEgLSBccGlfaSkgXHJpZ2h0XQ0KXF0NCg0KVmnhu4djIMaw4bubYyBsxrDhu6NuZyBcKFxiZXRhXCkgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiBi4bqxbmcgcGjGsMahbmcgcGjDoXAgaOG7o3AgbMO9IHThu5FpIMSRYSAoTUxFKSB0aMO0bmcgcXVhIHRodeG6rXQgdG/DoW4gSVJMUyAoSXRlcmF0aXZlbHkgUmV3ZWlnaHRlZCBMZWFzdCBTcXVhcmVzKSwgdMawxqFuZyB04buxIG5oxrAgbG9naXN0aWMsIG5oxrBuZyBjw7MgdGjDqm0gaOG7hyBz4buRIFwoIG5faSBcKS4NCg0KKipCaeG6v24gZ2nhuqMgdsOgIHRy4buNbmcgc+G7kToqKg0KDQpcWw0Kd19pID0gbl9pIFxwaV9pICgxIC0gXHBpX2kpDQpcXQ0KDQpcWw0Kel9pID0gXGV0YV9pICsgXGZyYWN7eV9pIC0gbl9pIFxwaV9pfXtuX2kgXHBpX2kgKDEgLSBccGlfaSl9DQpcXQ0KDQojIyMgKioxMS40IMavdSDEkWnhu4NtIHNvIHbhu5tpIG3DtCBow6xuaCBuaOG7iyBwaMOibioqDQoNCg0KfCBE4bqhbmcgZOG7ryBsaeG7h3UgICAgICAgICAgfCBNw7QgaMOsbmggdMawxqFuZyDhu6luZyAgICAgICAgICAgICAgIHwgR2hpIGNow7ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDAvMSB04burbmcgY8OhIG5ow6JuICAgICB8IEjhu5NpIHF1eSBsb2dpc3RpYyAgICAgICAgICAgICAgIHwgXCggeV9pIFxzaW0gXHRleHR7QmVybm91bGxpfShccGlfaSkgXCkgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBOaMOzbSBuaGnhu4F1IGPDoSBuaMOibiAgICB8IEJpbm9taWFsIEdMTSB24bubaSBcKCB5X2kgLyBuX2kgXCkgfCBcKCB5X2kgXHNpbSBcdGV4dHtCaW5vbWlhbH0obl9pLCBccGlfaSkgXCkgICAgICAgICAgICAgICAgICAgICB8DQoNCk3DtCBow6xuaCBuaMOzbSBnacO6cCB04bqtbiBk4bulbmcgbmhp4buBdSB0aMO0bmcgdGluIGjGoW4sIHRoxrDhu51uZyBjaG8gxrDhu5tjIGzGsOG7o25nIGNow61uaCB4w6FjIGjGoW4gdsOgIGhp4buHdSBxdeG6oyBoxqFuIHNvIHbhu5tpIG3DtCBow6xuaCB04burbmcgY8OhIG5ow6JuLg0KDQojIyMgKioxMS41IEThu68gbGnhu4d1IHThu7cgbOG7hyAocHJvcG9ydGlvbnMpKioNCg0KTuG6v3UgXCggeV9pIC8gbl9pIFwpIMSRxrDhu6NjIGdoaSBkxrDhu5tpIGThuqFuZyB04bu3IGzhu4cgKDAgPCB04bu3IGzhu4cgPCAxKSwgdGEgduG6q24gZMO5bmcgbcO0IGjDrG5oOg0KDQpcWw0KXGxvZyBcbGVmdChcZnJhY3t5X2kgLyBuX2l9ezEgLSB5X2kgLyBuX2l9XHJpZ2h0KSA9IHhfaV5UIFxiZXRhDQpcXQ0KDQpQaOG6o2kgY3VuZyBj4bqlcCBz4buRIGzhuqduIHRo4butIFwoIG5faSBcKSBjaG8gbeG7l2kgcXVhbiBzw6F0IMSR4buDIHBo4bqnbiBt4buBbSB0aOG7kW5nIGvDqiB0w61uaCDEkcO6bmcgcGjGsMahbmcgc2FpLg0KDQojIyMgKioxMS42IEtp4buDbSDEkeG7i25oIG3DtCBow6xuaCoqDQoNCkPDoWMgY8O0bmcgY+G7pSDEkcOhbmggZ2nDoSBtw7QgaMOsbmg6DQoNCiAgLSBLaeG7g20gxJHhu4tuaCBXYWxkIGNobyB04burbmcgaOG7hyBz4buRIA0KICANCiAgLSBLaeG7g20gxJHhu4tuaCBEZXZpYW5jZSBnaeG7r2EgbcO0IGjDrG5oIMSR4bqneSDEkeG7pyB2w6AgbcO0IGjDrG5oIHLDunQgZ+G7jW4NCg0KICAtIENo4buNbiBtw7QgaMOsbmg6IEFJQywgQklDDQoNCiAgLSBDaOG6qW4gxJFvw6FuIG3DtCBow6xuaDoNCg0KICAgIC0gUGjDom4gdMOtY2ggcGjhuqduIGTGsCBQZWFyc29uDQoNCiAgICAtIFBow6JuIHTDrWNoIHBo4bqnbiBkxrAgZGV2aWFuY2UNCiAgICANCkTDuW5nIMSR4buDIHBow6F0IGhp4buHbiBvdXRsaWVyIHbDoCBxdWFuIHPDoXQga2jDtG5nIHBow7kgaOG7o3AuDQoNCiMjIyAqKjExLjcgS2nhu4NtIHRyYSBvdmVyZGlzcGVyc2lvbioqDQoNCkdp4buRbmcgaOG7k2kgcXV5IGxvZ2lzdGljLCBtw7QgaMOsbmggYmlub21pYWwgZ2nhuqMgxJHhu4tuaDoNCg0KXFsNClx0ZXh0e1Zhcn0oeV9pKSA9IG5faSBccGlfaSAoMSAtIFxwaV9pKQ0KXF0NCg0KVHV5IG5oacOqbiwgbuG6v3UgcXVhbiBzw6F0IHRo4buxYyB04bq/IGNobyB0aOG6pXkgcGjGsMahbmcgc2FpIGzhu5tuIGjGoW4ga+G7syB24buNbmcg4oaSIGhp4buHbiB0xrDhu6NuZyBvdmVyZGlzcGVyc2lvbi4NCg0KKipDw6FjaCBraeG7g20gdHJhOioqDQoNClxbDQpcaGF0e1xwaGl9ID0gXGZyYWN7XHRleHR7RGV2aWFuY2V9fXtuIC0gcH0NClxdDQoNCk7hur91IFwoXGhhdHtccGhpfSA+IDEuNVwpOiBj4bqnbiBjaHV54buDbiBzYW5nIG3DtCBow6xuaCBxdWFzaS1iaW5vbWlhbA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KDQojIyAqKkNIxq/GoE5HIDEyOiBNw5QgSMOMTkggVFVZ4bq+TiBUw41OSCBU4buUTkcgUVXDgVQgVFdFRURFRSAoVFdFRURJRSBHTE1zKSoqDQoNCiAqKipNw7QgaMOsbmggdHV54bq/biB0w61uaCB04buVbmcgcXXDoXQgVHdlZWRpZSDigJMgbeG7mXQgY8O0bmcgY+G7pSBsaW5oIGhv4bqhdCB2w6AgbeG6oW5oIG3hur0gdHJvbmcgcGjDom4gdMOtY2ggdGjhu5FuZyBrw6osIMSR4bq3YyBiaeG7h3QgcGjDuSBo4bujcCB24bubaSBjw6FjIGxv4bqhaSBk4buvIGxp4buHdSBjw7MgY+G6pXUgdHLDumMgcGjhu6ljIHThuqFwIG5oxrAgduG7q2EgY8OzIG5oaeG7gXUgZ2nDoSB0cuG7iyBi4bqxbmcgMCwgduG7q2EgY8OzIHBo4bqnbiBsacOqbiB04bulYyBkxrDGoW5nLiBDaMawxqFuZyBuw6B5IGzDoG0gcsO1IGPDoWNoIG3DtCBow6xuaCBUd2VlZGllIG3hu58gcuG7mW5nIGjhu40gaMOgbSBtxakgdGjDtG5nIHF1YSBow6BtIHBoxrDGoW5nIHNhaSB04buVbmcgcXXDoXQsIGPFqW5nIG5oxrAgdmFpIHRyw7IgdGhlbiBjaOG7kXQgY+G7p2EgY2jhu4kgc+G7kSBz4bupYyBt4bqhbmggdHJvbmcgdmnhu4djIGxpw6puIGvhur90IG3DtCBow6xuaCBuw6B5IHbhu5tpIGPDoWMgcGjDom4gcGjhu5FpIHF1ZW4gdGh14buZYyBuaMawIEdhdXNzaWFuLCBQb2lzc29uIHbDoCBHYW1tYS4gTmfGsOG7nWkgxJHhu41jIHPhur0gbuG6r20gxJHGsOG7o2MgxJHhurdjIMSRaeG7g20sIMSRaeG7gXUga2nhu4duIMOhcCBk4bulbmcgdsOgIOG7qW5nIGThu6VuZyB0aOG7sWMgdGnhu4VuIGPhu6dhIG3DtCBow6xuaCBUd2VlZGllIHRyb25nIGPDoWMgbMSpbmggduG7sWMgbmjGsCBi4bqjbyBoaeG7g20sIHTDoGkgY2jDrW5oLCB5IHThur8g4oCTIG7GoWkgZOG7ryBsaeG7h3UgdGjGsOG7nW5nIHBow6JuIHTDoW4gbeG6oW5oIHbDoCBjw7Mgc+G7sSBr4bq/dCBo4bujcCBnaeG7r2EgY8OhYyDEkeG6t2MgxJFp4buDbSBy4budaSBy4bqhYyB2w6AgbGnDqm4gdOG7pWMuKioqDQoNCg0KIyMjICoqMTIuMSBHaeG7m2kgdGhp4buHdSoqDQoNCk3DtCBow6xuaCBUd2VlZGllIEdMTSBsw6AgbeG7mXQgbeG7nyBy4buZbmcgbGluaCBob+G6oXQgY+G7p2EgaOG7jSBow6BtIG3FqSB0cm9uZyBHTE0sIGNobyBwaMOpcCBtw7QgaMOsbmggaMOzYSBjw6FjIHBow6JuIHBo4buRaSBjw7MgxJHhurdjIHTDrW5oIHRydW5nIGdpYW4gZ2nhu69hIG5o4buvbmcgcGjDom4gcGjhu5FpIHBo4buVIGJp4bq/biBuaMawOg0KDQogIC0gUGjDom4gcGjhu5FpIEdhdXNzaWFuIChjaHXhuqluKQ0KDQogIC0gUGjDom4gcGjhu5FpIFBvaXNzb24NCg0KICAtIFBow6JuIHBo4buRaSBHYW1tYQ0KDQogIC0gUGjDom4gcGjhu5FpIEludmVyc2UgR2F1c3NpYW4NCg0KTcO0IGjDrG5oIG7DoHkgxJHhurdjIGJp4buHdCBo4buvdSDDrWNoIGtoaSBsw6BtIHZp4buHYyB24bubaSBjw6FjIGxv4bqhaSBk4buvIGxp4buHdSBjw7MgdMOtbmggY2jhuqV0Og0KDQogIC0gROG7ryBsaeG7h3UgbGnDqm4gdOG7pWMgZMawxqFuZyBrw6htIG5oaeG7gXUgZ2nDoSB0cuG7iyBi4bqxbmcgMCwgY2jhurNuZyBo4bqhbiBuaMawIGNoaSBwaMOtIHkgdOG6vyBob+G6t2MgdOG7lW4gdGjhuqV0IGLhuqNvIGhp4buDbSDigJMgbsahaSBt4buZdCBz4buRIGPDoSBuaMOibiBraMO0bmcgcGjDoXQgc2luaCBjaGkgcGjDrQ0KDQogIC0gUGjDom4gdMOhbiBxdcOhIG3hu6ljIChvdmVyZGlzcGVyc2lvbiksIHThu6ljIHBoxrDGoW5nIHNhaSBs4bubbiBoxqFuIGvhu7MgduG7jW5nDQoNCiAgLSBE4buvIGxp4buHdSBiYW8gZ+G7k20gcGjhuqduIHLhu51pIHLhuqFjICgwLCAxLCAyLCAuLi4pIGvhur90IGjhu6NwIHbhu5tpIHBo4bqnbiBsacOqbiB04bulYyBkxrDGoW5nDQoNCk5o4budIHTDrW5oIGxpbmggaG/huqF0IMSRw7MsIG3DtCBow6xuaCBUd2VlZGllIMSRxrDhu6NjIOG7qW5nIGThu6VuZyBy4buZbmcgcsOjaSB0cm9uZyBjw6FjIGzEqW5oIHbhu7FjIG5oxrAgYuG6o28gaGnhu4NtLCB0w6BpIGNow61uaCwgeSB04bq/LCB2w6AgxJHhurdjIGJp4buHdCBwaMO5IGjhu6NwIHbhu5tpIGPDoWMgYsOgaSB0b8OhbiBjw7MgZOG7ryBsaeG7h3UgY2jhu6lhIG5oaeG7gXUgc+G7kSAwICh6ZXJvLWluZmxhdGVkKS4NCg0KIyMjICoqMTIuMiDEkOG7i25oIG5naMSpYSB2w6AgdMOtbmggY2jhuqV0KioNCg0KTcO0IGjDrG5oIFR3ZWVkaWUgdGh14buZYyBo4buNIHBow6JuIHBo4buRaSBow6BtIG3FqSAoZXhwb25lbnRpYWwgZmFtaWx5KSwgxJHhurdjIHRyxrBuZyBi4bufaSBow6BtIHBoxrDGoW5nIHNhaSBjw7MgZOG6oW5nOg0KDQpcWw0KXHRleHR7VmFyfShZKSA9IFxwaGkgXG11XnANClxdDQoNClRyb25nIMSRw7M6DQoNCi0gXCggXG11ID0gXG1hdGhiYntFfVtZXSBcKToga+G7syB24buNbmcgY+G7p2EgYmnhur9uIHBo4bqjbiBo4buTaQ0KDQotIFwoIFxwaGkgPiAwIFwpOiBo4buHIHPhu5EgcGjDom4gdMOhbiwgxJFp4buBdSBjaOG7iW5oIMSR4buZIGJp4bq/biB0aGnDqm4gY+G7p2EgZOG7ryBsaeG7h3UNCg0KLSBcKCBwIFwpOiBjaOG7iSBz4buRIHPhu6ljIG3huqFuaCAoKipwb3dlciBpbmRleCoqKSwgeMOhYyDEkeG7i25oIGThuqFuZyBwaMOibiBwaOG7kWkgY+G7pSB0aOG7gyB0cm9uZyBs4bubcCBUd2VlZGllDQoNCg0KIyMjICoqMTIuMyBHacOhIHRy4buLIMSR4bq3YyBiaeG7h3QgY+G7p2EgY2jhu4kgc+G7kSBcKCBwIFwpKioNCg0KDQp8IFwoIHAgXCkgICAgICAgIHwgUGjDom4gcGjhu5FpIHTGsMahbmcg4bupbmcgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDAgICAgICAgICAgICAgIHwgR2F1c3NpYW4gKE5vcm1hbCkgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IDEgICAgICAgICAgICAgIHwgUG9pc3NvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IFwoICgxLCAyKSBcKSAgIHwgVHdlZWRpZSBo4buXbiBo4bujcCAoMCArIGTGsMahbmcgbGnDqm4gdOG7pWMpICAgICB8DQp8IDIgICAgICAgICAgICAgIHwgR2FtbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IDMgICAgICAgICAgICAgIHwgSW52ZXJzZSBHYXVzc2lhbiAgICAgICAgICAgICAgICAgICAgICAgICB8DQoNClbhu5tpIGNo4buJIHPhu5EgXCggMSA8IHAgPCAyIFwpLCB0YSBjw7MgZOG6oW5nIFR3ZWVkaWUgaOG7l24gaOG7o3AsIHLhuqV0IMSR4bq3YyBiaeG7h3QgdsOsOg0KDQogIC0gQ8OzIGto4bqjIG7Eg25nIHTDoWkgaGnhu4duIHPhu5EgbMaw4bujbmcgbOG7m24gZ2nDoSB0cuG7iyBi4bqxbmcgMA0KDQogIC0gxJDhu5NuZyB0aOG7nWkgbcO0IGjDrG5oIGjDs2EgY8OhYyBnacOhIHRy4buLIHBo4bqjbiBo4buTaSBkxrDGoW5nLCBsacOqbiB04bulYw0KDQpNw7QgaMOsbmggbsOgeSBkbyDEkcOzIHLhuqV0IHBow7kgaOG7o3AgY2hvIGPDoWMgZOG7ryBsaeG7h3UgdGjhu7FjIHThur8gbmjGsCBjaGkgcGjDrSBi4bqjbyBoaeG7g20sIHThu5VuIHRo4bqldCB0w6BpIGNow61uaCBob+G6t2MgY8OhYyBiaeG6v24gcGjhuqNuIGjhu5NpIGThuqFuZyDigJwwIGhv4bq3YyBnacOhIHRy4buLIHRp4buBbiB04buHIGTGsMahbmfigJ0uDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCg0KIyA8c3BhbiBzdHlsZT0iIGNvbG9yOiBCbGFjazsiPioqKlBI4bqmTiAyLiBUSOG7kE5HIEvDiiBNw5QgVOG6oiDigJxTVVBFUk1BUktFVCBUUkFOU0FDVElPTlPigJ0qKio8L3NwYW4+DQoNCiMjICoqMS4gxJDhu41jIGThu68gbGnhu4d1KioNCg0KQuG7mSBk4buvIGxp4buHdSDEkcaw4bujYyBjdW5nIGPhuqVwIMSRxrDhu6NjIMSR4buLbmggZOG6oW5nIGzDoCBmaWxlIGNzdi4gVsOsIHbhuq15IHNhdSB0YSBz4bq9IGTDuW5nIGjDoG0gc2F1IMSR4buDIMSR4buNYyBk4buvIGxp4buHdSDEkeG7gSBiw6BpIGNobzoNCg0KYGBge3J9DQpsaWJyYXJ5KGNzdikNCmRhdGEgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL1BDL0Rvd25sb2Fkcy9TdXBlcm1hcmtldCBUcmFuc2FjdGlvbnMuY3N2IikNCnN0ciAoZGF0YSkNCmBgYA0KDQojIyAqKjIuIFThu5VuZyBxdWFuIHPhu5EgbGnhu4d1KioNCg0KYGBge3J9DQpzdW1tYXJ5KGRhdGEpDQpgYGANCg0KDQojIyMgKioyLjEgxJDhu41jIHTDqm4gY8OhYyBiaeG6v24gdHJvbmcgYuG7mSBz4buRIGxp4buHdSoqDQoNCmBgYHtyfQ0KbmFtZXMgKGRhdGEpDQpgYGANCiMjIyAqKjIuMiDEkOG7lWkgdMOqbiBjw6FjIGJp4bq/bioqDQoNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KdmFyaWFibGVfZGVzY3JpcHRpb24gPC0gZGF0YS5mcmFtZSgNCiAgVmFyaWFibGUgPSBjKA0KICAgICJVbm5hbWVkOiAwIiwgIlB1cmNoYXNlRGF0ZSIsICJDdXN0b21lcklEIiwgIkdlbmRlciIsICJNYXJpdGFsU3RhdHVzIiwNCiAgICAiSG9tZW93bmVyIiwgIkNoaWxkcmVuIiwgIkFubnVhbEluY29tZSIsICJDaXR5IiwgIlN0YXRlb3JQcm92aW5jZSIsDQogICAgIkNvdW50cnkiLCAiUHJvZHVjdEZhbWlseSIsICJQcm9kdWN0RGVwYXJ0bWVudCIsICJQcm9kdWN0Q2F0ZWdvcnkiLA0KICAgICJVbml0c1NvbGQiLCAiUmV2ZW51ZSINCiAgKSwNCiAgRGVzY3JpcHRpb24gPSBjKA0KICAgICJNYSBkb25nIChjbyB0aGUgYm8gcXVhKSIsDQogICAgIk5nYXkgbXVhIGhhbmciLA0KICAgICJJRCBraGFjaCBoYW5nIiwNCiAgICAiR2lvaSB0aW5oIChGOiBudSwgTTogbmFtKSIsDQogICAgIlRpbmggdHJhbmcgaG9uIG5oYW4gKFM6IGRvYyB0aGFuLCBNOiBkYSBrZXQgaG9uKSIsDQogICAgIlNvIGh1dSBuaGEgKFk6IGNvLCBOOiBraG9uZykiLA0KICAgICJTbyBjb24gdHJvbmcgZ2lhIGRpbmgiLA0KICAgICJUaHUgbmhhcCBoYW5nIG5hbSAodGhlbyBuaG9tKSIsDQogICAgIlRoYW5oIHBobyBzaW5oIHNvbmciLA0KICAgICJCYW5nIC8gdGluaCIsDQogICAgIlF1b2MgZ2lhIiwNCiAgICAiTmhvbSBzYW4gcGhhbSBjaGluaCAoRm9vZCwgRHJpbmssIC4uLikiLA0KICAgICJQaG9uZyBiYW4gc2FuIHBoYW0gKFNuYWNrcywgUHJvZHVjZSwgLi4uKSIsDQogICAgIkRhbmggbXVjIHNhbiBwaGFtIGN1IHRoZSIsDQogICAgIlNvIGx1b25nIHNhbiBwaGFtIGRhIGJhbiIsDQogICAgIkRvYW5oIHRodSB0dSBnaWFvIGRpY2ggKFVTRCkiDQogICksDQogIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRQ0KKQ0KDQpsaWJyYXJ5KGtuaXRyKQ0Ka2FibGUodmFyaWFibGVfZGVzY3JpcHRpb24sIGNvbC5uYW1lcyA9IGMoIkJpZW4iLCAiTW8gdGEiKSkNCg0KYGBgDQoNCiMjIyAqKiozLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBjw6FjIGJp4bq/bioqKg0KDQoqKipLaeG7g20gdHJhIHPhu5EgZMOybmcsIHPhu5EgY+G7mXQgZOG7ryBsaeG7h3UqKioNCg0KYGBge3J9DQpkaW0oZGF0YSkNCg0KYGBgDQoNCg0KDQoNCioqKlThuqduIHN14bqldCB2w6AgYuG6o25nIHBow6JuIHBo4buRaSBiaeG6v24gcGjDom4gbG/huqFpKioqDQoNCmBgYHtyfQ0KdGFibGUoZGF0YSRHZW5kZXIpDQp0YWJsZShkYXRhJE1hcml0YWxTdGF0dXMpDQp0YWJsZShkYXRhJEhvbWVvd25lcikNCnRhYmxlKGRhdGEkQ2l0eSkNCnRhYmxlKGRhdGEkUHJvZHVjdEZhbWlseSkNCmBgYA0KDQoNCiMjIyAqKio0LiBCaeG7g3UgxJHhu5MgdHLhu7FjIHF1YW4gaMOzYSoqKg0KDQoqKipCaeG7g3UgxJHhu5MgdGjhu4MgaGnhu4duIGdp4bubaSB0w61uaCoqKg0KDQoNCg0KYGBge3J9DQp0YWJsZShkYXRhJEdlbmRlcikNCg0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGRhdGEsIGFlcyh4ID0gR2VuZGVyKSkgKw0KICBnZW9tX2JhcihmaWxsID0gImdyZWVuIikgKw0KICBsYWJzKHRpdGxlID0gIlThuqduIHN14bqldCB0aGVvIEdp4bubaSB0w61uaCIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCmBgYA0KDQoNCioqKkJp4buDdSDEkeG7kyBkb2FuaCB0aHUqKioNCg0KYGBge3J9DQp0YWJsZShkYXRhJFJldmVudWUpDQpnZ3Bsb3QoZGF0YSwgYWVzKHggPSBSZXZlbnVlKSkgKw0KICBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMzAsIGZpbGwgPSAiYmx1ZSIsIGNvbG9yID0gIndoaXRlIikgKw0KICBsYWJzKHRpdGxlID0gIlBow6JuIHBo4buRaSBEb2FuaCB0aHUiLCB4ID0gIlJldmVudWUiLCB5ID0gIkZyZXF1ZW5jeSIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCmBgYA0KDQoNCg0KKioqVuG6vSBiaeG7g3UgxJHhu5MgY+G7mXQgY2hvIFRvcCAxMCBraHUgduG7sWMgY8OzIGRvYW5oIGRvYW5oIHRodSB0aOG6pXAgbmjhuqV0KioqDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KYm90dG9tX2NpdGllcyA8LSBhZ2dyZWdhdGUoUmV2ZW51ZSB+IENpdHksIGRhdGEgPSBkYXRhLCBzdW0pDQpib3R0b21fY2l0aWVzIDwtIGJvdHRvbV9jaXRpZXNbb3JkZXIoYm90dG9tX2NpdGllcyRSZXZlbnVlKSwgXVsxOjEwLCBdDQoNCmdncGxvdChib3R0b21fY2l0aWVzLCBhZXMoeCA9IHJlb3JkZXIoQ2l0eSwgUmV2ZW51ZSksIHkgPSBSZXZlbnVlKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICJyZWQiKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIGxhYnModGl0bGUgPSAiVG9wIDEwIEtodSBW4buxYyBjw7MgVOG7lW5nIERvYW5oIFRodSBUaOG6pXAgTmjhuqV0IiwNCiAgICAgICB4ID0gIktodSB24buxYyAoQ2l0eSkiLA0KICAgICAgIHkgPSAiVOG7lW5nIERvYW5oIHRodSIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE0KSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMikNCiAgKQ0KDQpgYGANCg0KIA0KKioqU28gc8OhbmggZG9hbmggdGh1IHRoZW8gZ2nhu5tpIHTDrW5oKioqDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEsIGFlcyh4ID0gR2VuZGVyLCB5ID0gUmV2ZW51ZSkpICsNCiAgZ2VvbV9ib3hwbG90KGZpbGwgPSAiY29yYWwiKSArDQogIGxhYnModGl0bGUgPSAiU28gc8OhbmggRG9hbmggdGh1IGdp4buvYSBOYW0gdsOgIE7hu68iKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQpgYGANCg0KDQojIyMgKioqNS5L4bq/dCBsdeG6rW4qKioNClF1YSBwaMOibiB0w61jaCB0aOG7kW5nIGvDqiBtw7QgdOG6oyBt4buZdCBz4buRIGJp4bq/biBu4buXaSBi4bqtdCwgdGEgbmjhuq1uIHRo4bqleToNCg0KLSBDw6FjIGJp4bq/biDEkeG7i25oIGzGsOG7o25nIHRo4buDIGhp4buHbiBz4buxIHBow6JuIHTDoW4gcsO1IHLhu4d0IGdp4buvYSBjw6FjIG5ow7NtIGtow6FjaCBow6BuZyB2w6Agc+G6o24gcGjhuqltLCBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHRyb25nIGjDoG5oIHZpIHRpw6p1IGTDuW5nLg0KDQotIEPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggcGjhuqNuIMOhbmggc+G7sSDEkWEgZOG6oW5nIHBob25nIHBow7ogdHJvbmcgdOG6rXAga2jDoWNoIGjDoG5nIGPFqW5nIG5oxrAgZGFuaCBt4bulYyBz4bqjbiBwaOG6qW0uDQoNCi0gRG9hbmggdGh1IGNo4bunIHnhur91IHThuq1wIHRydW5nIHThuqFpIG3hu5l0IHPhu5EgYmFuZywgdGjDoG5oIHBo4buRIHbDoCBuaMOzbSBz4bqjbiBwaOG6qW0gY+G7pSB0aOG7gywgbeG7nyByYSB0aeG7gW0gbsSDbmcgxJHhu4MgdOG7kWkgxrB1IGjDs2EgdsOgIMSR4buLbmggaMaw4bubbmcgY2hp4bq/biBsxrDhu6NjIGtpbmggZG9hbmggaGnhu4d1IHF14bqjIGjGoW4uDQoNClRo4buRbmcga8OqIG3DtCB04bqjIMSRw7NuZyB2YWkgdHLDsiBsw6AgYsaw4bubYyBjaHXhuqluIGLhu4sgcXVhbiB0cuG7jW5nLCBsw6BtIG7hu4FuIHThuqNuZyBjaG8gY8OhYyBwaMOibiB0w61jaCBuw6JuZyBjYW8gaMahbi4NCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==