library(readxl)
## Warning: package 'readxl' was built under R version 3.6.3
library(mixtools)
## Warning: package 'mixtools' was built under R version 3.6.3
## mixtools package, version 1.2.0, Released 2020-02-05
## This package is based upon work supported by the National Science Foundation under Grant No. SES-0518772.
library(sn)
## Loading required package: stats4
## 
## Attaching package: 'sn'
## The following object is masked from 'package:stats':
## 
##     sd
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.6.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.6.3
library(VGAM)
## Warning: package 'VGAM' was built under R version 3.6.3
## Loading required package: splines
## 
## Attaching package: 'VGAM'
## The following object is masked from 'package:sn':
## 
##     zeta

dữ liệu: https://docs.google.com/spreadsheets/d/17rSXJR0nLgcgtQBIkPpMVSGnTo1iYZ5t/edit?usp=sharing&ouid=108894724201374299913&rtpof=true&sd=true

1 Chương 1. TỔNG QUAN VỀ ĐỀ TÀI

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

Thị trường chứng khoán Việt Nam (TTCK VN) từ khi đi vào hoạt động đến nay đã thể hiện được vai trò là một trong những kênh huy động vốn quan trọng của các công ty với quy mô ngày càng mở rộng, thu hút nhiều đối tượng tham gia. Nhưng sự biến động của thị trường kèm theo những rủi ro tiềm ẩn khiến không ít người đã thất bại, mất mát và rời bỏ thị trường do không lường hết được những rủi ro có thể gặp phải. Trước tình hình ấy, việc nhận dạng và đo lường rủi ro trong đầu tư cổ phiếu trên Sở Giao dịch Chứng khoán Thành phố Hồ Chí Minh (HOSE) để từ đó đề xuất các khuyến nghị cho các nhà quản lý thị trường, công ty chứng khoán và các nhà đầu tư (NĐT) có giải pháp nhằm hạn chế rủi ro cho NĐT là rất cần thiết, qua đó góp phần vào sự phát triển lành mạnh của HOSE nói riêng và TTCK VN nói chung – một kênh huy động vốn tối quan trọng cho nền kinh tế. Thị trường BĐS Việt Nam cũng đóng vai trò chủ chốt trong việc huy động và sử dụng nguồn vốn cho nền kinh tế. Cả hai thị trường đều có những vị trí, vai trò quan trọng trong các hoạt động về tài chính của đất nước, có tác dụng bổ trợ cho các thị trường khác cùng nhau phát triển. Trong đó, nhóm cổ phiếu BĐS gắn liền với phát triển kinh tế nói chung, vẫn được đánh giá là một trong các nhóm đầu ngành dẫn dắt thị trường. Chính vì vậy, các NĐT cần có đánh giá toàn diện về bức tranh thị trường nhóm cổ phiếu BĐS, để có thể cân nhắc và nắm bắt cơ hội đầu tư trong tương lai. Do đó, tác giả lựa chọn đề tài: “Ứng dụng phương pháp Monte Carlo tính giá trị rủi ro của danh mục đầu tư nhóm ngành bất động sản".

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

Đề tài nghiên cứu nhằm đạt được các mục tiêu chính như sau:

  • Đo lường giá trị rủi ro của danh mục đầu tư nhóm ngành bất động sản
  • Đề xuất một số giải pháp đầu tư giảm thiểu rủi ro cho nhà đầu tư.

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

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

Danh mục đầu tư nhóm ngành bất động sản bao gồm 6 chỉ số giá cổ phiếu BĐS được niêm yết trên sàn HOSE.

1.3.2 Phạm vi nghiên cứu

Không gian: thị trường chứng khoán Việt Nam

Thời gian: 01/01/2019 - 24/03/2023

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

Bài tiểu luận sử dụng phương pháp Monte Carlo để tính giá trị rủi ro của danh mục đầu tư nhóm ngành BĐS.

2 Chương 2. CƠ SỞ LÝ THUYẾT

2.1 Cơ sở về rủi ro

Khi đầu tư vào mỗi loại tài sản, ta đều có thể gặp phải 2 loại rủi ro: rủi ro hệ thống (rủi ro thị trường) và rủi ro phi hệ thống của các tài sản thành phần.

Rủi ro hệ thống là loại rủi ro tác động lên tất cả các tài sản trong danh mục nói riêng và lên tất cả những tài sản cấu thành nên thị trường. Các nhân tố có thể gây nên loại rủi ro này gồm có giá chứng khoán, lãi vay, tỷ giá hối đoái hay giá cả các loại hàng hóa căn bản…

Rủi ro phi hệ thống độc lập với những hiện tượng tác động lên toàn bộ tài sản trên thị trường. Nó chỉ là những rủi ro đặc trưng riêng có của một vài chứng khoán: quản lý doanh nghiệp yếu kém, hỏa hoạn phá hủy nhà xưởng hay tiến bộ khoa học kỹ thuật làm một số loại sản phẩm bị lỗi thời …Rủi ro phi hệ thống có thể loại trừ bằng việc đa dạng hóa.

Rủi ro của danh mục phụ thuộc vào rủi ro từng chứng khoán thành phần và hệ số tương quan giữa những chứng khoán này với nhau. Nếu số lượng chứng khoán cấu thành nên danh mục đủ lớn thì rủi ro danh mục lúc này chỉ còn phụ thuộc vào hệ số tương quan giữa những chứng khoán thành phần.

2.2 Lịch sử hình thành VaR

Khái niệm “Giá trị tại rủi ro – VaR” có nguồn gốc từ lĩnh vực bảo hiểm. Sau đó, nó được du nhập vào thị trường tài chính Mỹ nhờ ngân hàng “Bankers Trust” trong những năm 1980 của thế kỷ này. Tuy nhiên, người có công lớn nhất trong trong việc thực tiễn hóa khái niệm VaR lại là ngân hàng thương mại JPMorgan của Mỹ vào những năm 1994.

Nguồn gốc hình thành nên những cơ sở khoa học đầu tiên về VaR xuất phát từ những báo cáo về hoạt động trên thị trường tài chính của JPMorgan mà ngài chủ tịch lúc đó – Dennis Weatherstones đã yêu cầu các chuyên viên của mình phải thực hiện hàng ngày. Ông Weatherstones muốn có được một cái nhìn tổng quát về rủi ro của từng vị thế khác nhau mà JPMorgan đang thực hiện.

Ngoài ra, việc sử dụng VaR còn được khuyến khích bởi “Nhóm Ba Mươi” vào năm 1993 – tập hợp những định chế tài chính lớn trên thế giới – nhằm kiểm soát rủi ro của từng thành viên. Thật ra, việc tính toán rủi ro thị trường đã dần trở nên phổ biến ở các ngân hàng trong nhiều năm trước đó vì 2 nguyên nhân: Thứ nhất, kết quả kinh doanh của họ ngày càng bị ảnh hưởng nhiều bởi những hoạt động trên thị trường tài chính; thứ hai, nhiều vị thế trên thị trường, ví dụ như vị thế khi đầu tư vào sản phẩm phái sinh, có thể gây nguy hiểm cho sự phát triển lâu dài và bền vững của họ.

Vào năm 1994, JPMorgan cho ra đời hệ thống RiskMetrics và chia sẻ nó với tất cả mọi người trên thế giới hoàn toàn miễn phí thông qua trang web www.riskmetrics.com . Sau một thời gian hoạt động, RiskMetrics sát nhập vào Reuters – một tập đoàn mạnh về thông tin tài chính để cho ra đời một đơn vị chuyên cung cấp cơ sở dữ liệu về tài chính và các phương pháp cần thiết để tính toán VaR cho danh mục đầu tư. Những công ty tài chính và những doanh nghiệp khác cũng có thể sử dụng dịch vụ này để tính toán VaR theo RiskMetrics hoặc thu thập số liệu để quản trị rủi ro cho riêng mình.

Tuy những cơ sở khoa học đầu tiên về VaR được hình thành từ môi trường ngân hàng, song sự phát triển của VaR lại được thăng hoa thông qua việc sử dụng VaR của các định chế tài chính chuyên nghiệp (quỹ đầu tư, công ty tài chính) để quản trị rủi ro cho hoạt động đầu tư của họ.

2.3 Khái niệm VaR

VaR là một phương pháp đo lường khoản lỗ tiềm năng cho một công ty, một quỹ, một danh mục, một giao dịch, hay một chiến lược tài chính. Nó thường thể hiện bằng phần trăm hay bằng đơn vị tiền. Bất kể tại vị thế nào có thể gây ra lỗ cũng là mục tiêu để tính bằng phương pháp đo lường VaR. VaR thường được dùng nhiều để đo lường mức lỗ trong rủi ro thị trường, nhưng nó cũng có thể được dùng để đo lường rủi ro tín dụng và một số loại rủi ro khác.

Chúng ta hiểu rằng VaR là một cách đo lường rủi ro dựa trên xác suất của khả năng lỗ giới hạn. Định nghĩa này là rất chung chung. Tuy nhiên, nếu nói một cách rõ ràng hơn, giá trị có rủi ro là một ước lượng của mức lỗ (số tiền tối thiểu bị lỗ) mà chúng ta kì vọng vượt quá với một xác suất cho sẵn trong một thời kì cụ thể nào đó.

Ta xem xét ví dụ sau về VaR của một danh mục đầu tư: VaR của 1 danh mục là 1.5 triệu USD cho một ngày với xác suất là 0.05. Diễn tả lại bằng một cách khác: có 5% khả năng mà danh mục sẽ mất ít nhất 1.5 triệu USD trong một ngày, nghĩa là trên thực tế 1.5 triệu USD là mức thấp nhất bị lỗ. Với một sự quan tâm đáng kể, có thể diễn tả VaR với ý nghĩa xác suất lớn nhất xảy ra: với xác suất 95% khoản lỗ không vượt quá 1.5 triệu USD nội trong một ngày.

2.4 Ba thông số ảnh hưởng đến VaR danh mục

Mặc dù VaR trở thành một tiêu chuẩn đánh giá thông dụng cho doanh nghiệp, nhưng nó có thể được thực hiện với nhiều hình thức khác nhau, và xây dựng một cách đo lường VaR thích hợp đòi hỏi người sử dụng phải quyết định rất nhiều trong cấu trúc tính toán. Ba thông số quan trọng nhất là phải lấy được một độ tin cậy, xác định khoảng thời gian đo lường VaR, và chọn một cách tiếp cận xác định để mô hình hóa phân bố lời lỗ.

2.4.1 Mức độ tin cậy

Xác suất được chọn thông thường là 0.05 hoặc 0.01 (tương đương với 95% hay 99% mức độ tin cậy). Sử dụng mức 0.01 dẫn đến một sự ước lượng VaR khá thận trọng, vì nó định ra con số mà tại mức nơi đáng lý ra chỉ có 1 % xác suất bị lỗ thì sẽ xấu hơn là mức VaR đã tính.

2.4.2 Khoảng thời gian đo lường

Quyết định quan trọng thứ hai đối với người sử dụng VaR là chọn được khoảng thời gian. VaR thường đo lường trên một ngày, nhưng khác lạ là khoảng thời gian dài thường thông dụng hơn. Các định chế ngân hàng thích chu kì thời gian 2 tuần. Nhiều công ty báo cáo VaR theo quý và năm để thích hợp với chu kỳ báo cáo hoạt động kinh doanh. Ngân hàng đầu tư, các quỹ đầu cơ, và những nhà giao dịch (dealer) có vẻ thích đo lường VaR theo ngày, có lẽ vì vị thế của họ có mức luân chuyển vốn cao. Bất kể khoảng thời gian nào được chọn, nếu thời gian càng dài, con số VaR sẽ càng lớn vì trọng số của mức lỗ mong đợi thay đổi trực tiếp với thời gian dài mà nó đo lường. Một cá nhân hay một tổ chức chịu trách nhiệp quản trị rủi ro sẽ chọn khoảng thời gian riêng.

2.4.3 Đơn vị tiền tệ

Giá trị tại rủi ro là một phương pháp đưa ra một cái nhìn tổng thể về rủi ro thông qua xác suất và cả những tính toán định lượng. Nói cách khác, VaR là một sự đo lường bằng tiền về rủi ro. Như vậy, việc lựa chọn đơn vị tiền tệ là rất quan trọng để trả lời cho câu hỏi: “Số tiền mà tôi có thể bị lỗ trong một khoảng thời gian là bao nhiêu?”.

3 Chương 3. PHƯƠNG PHÁP NGHIÊN CỨU

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

Có nhiều phương pháp để tính toán giá trị rủi ro của danh mục bao gồm: phương pháp phương sai - hiệp phương sai, mô phỏng lịch sử, mô phỏng Monte Carlo,..Bài tiểu luận lựa chọn phương pháp mô phỏng Monte Carlo để tính giá trị rủi ro danh mục đầu tư nhóm ngành BĐS.Về tống quát, mô phỏng Monte Carlo đưa ra những kết quả ngẫu nhiên nên ta có thể kiểm tra cái gì xảy ra sẽ tạo loại rủi ro như thế nào. Phương pháp này được sử dụng rộng rãi cả trong nhiều ngành khoa học cũng như trong kinh doanh để phát hiện ra nhiều những vấn đề khác nhau. Trong thế giới tài chính những năm gần đây, đây đã trở thành một kĩ thuật cực kì quan trọng để đo lường rủi ro. Monte Carlo đưa ra nhiều kết quả ngẫu nhiên nhờ vào những phân phối xác suất được giả định và một loạt những biến số đầu vào. Chúng ta theo đó phân tích những kết quả để tìm ra rủi ro liên quan với những sự kiện. Khi đánh giá VaR, ta dùng mô phỏng Monte Carlo để đưa ra những TSSL danh mục một cách ngẫu nhiên. Sau đó tổng hợp những TSSL này thành một tóm tắt bằng phân phối từ đó chúng ta có thể xác định tại mức dưới 5% (hay 1%, nếu thích hợp) của những kết quả TSSL xuất hiện. Tiếp đó ta thể hiện bằng giá trị của danh mục để đạt được kết quả VaR.

Trình tự thực hiện:

  • Xác định phân phối và thực hiện mô phỏng cho các biến đầu vào (Bài tiểu luận có biến đầu vào là giá cổ phiếu, trong trường hợp không tìm ra phân phối cho các biến đầu vào, tác giả sẽ sử dụng mô hình Geometric Brownian Motion để thực hiện mô phỏng giá cổ phiếu)

  • Xác định mô hình mô phỏng.

  • Thiết lập dự báo yếu tố đầu ra là tỷ suất sinh lời của danh mục với số quan sát là 10000. Từ đó tính giá trị VaR của danh mục và thống kê kết quả.

3.1.1 Mô phỏng các biến đầu vào theo mô hình GBM

Bài tiểu luận sử dụng mô hình GBM để mô phỏng giá cổ phiếu dưới giả định phân phối chuẩn và phân phối ghép

Một quá trình ngẫu nhiên thời gian liên tục {Bt : t > 0} là một Chuyển động Brown (quá trình Wiener) nếu với một số hằng số thực ε^2 nào đó, nó thoả mãn các tính chất sau:

  • B0 = 0
  • Bt liên tục trong khoảng thời gian t > 0

Với t > 0, sự thay đổi \[\Delta B = B_{t+\Delta t}-B_t\] trong khoảng thời gian \[\Delta t\] được xác định

\[\Delta B = Z \sqrt{\Delta t}\] Z là biến ngẫu nhiên có phân phối chuẩn N(0,1)

Giá trị ∆B đối với 2 khoảng thời gian gian ngắn bất kì là độc lập (Ví dụ: Bt+∆t – Bt và Bs+∆s – Bs với 0 ≤ s ≤ t là độc lập )

Do đó, ta có công thức mô phỏng BM (Brown motion) là:

\[ B_{N}=\sqrt{\frac{t} {n}}\sum_{i=1}^{n} Z_i=\sqrt{\frac{t} {n}}F_{Z}(z) \] trong đó

  • Bn là biến ngẫu nhiên chuyển động Brown chuẩn (the standard BM random variable).

  • √t/n là độ lệch chuẩn của BM, Zi(i = 1, 2, ..., n) được phân phối theo phân phối chuẩn N(0, 1).

Từ đây có thể suy ra:

\[ B_{NN}=\sqrt{\frac{t} {n}}F_{Z1}(z1) \]

\[ B_{NL}=\sqrt{\frac{t} {n}}F_{Z2}(z2) \]

Trong đó:

  • BNN là một biến BM ghép giữa hai phân phối chuẩn liên tục
  • BNL là một biến BM ghép giữa phân phối chuẩn và phân phối Laplace
  • FZi (zi) với i = 1, 2 định nghĩa tổng tích lũy của các phân phối ghép tương ứng.

Dẫn xuất mô hình Chuyển động Brown hình học (GBM)

Giả sử St biểu thị lợi nhuận cổ phiếu tại thời điểm t. Mô hình GBM thỏa mãn phương trình vi phân ngẫu nhiên (SDE) sau đây:

\[ dS_t = \theta S_t dt + \epsilon S_tdB_t \] Trong đó:

  • dSt là sự thay đổi giá cổ phiếu
  • theta là tham số trượt (là thành phần xác định, điều khiển xu hướng của quỹ đạo BM) (giả định theta = 5%)
  • epsilon là tham số biến động (là thành phần không chắc chắn, điều khiển tác động ngẫu nhiên trong quỹ đạo)(giả định epsilon = 15%)
  • dBt là sự gia tăng (increment) của BM.

Sau khi thực hiện một loạt biến đổi ta được kết quả (Kết quả chứng minh ở phụ lục) như sau:

\[ S_t= S_{0}\exp((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{t}) (1) \]

Sử dụng mô hình GBM trong Phương trình (1), ta có mô hình GBM dưới giả định phân phối chuẩn và phân phối ghép như sau:

Mô hình 1:

\[ S_{(N)_t} = S_{0}\exp((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{N}) \]

Mô hình 2:

\[ S_{(NN)_t} = S_{0} \exp\left((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{NN}\right) \]

Mô hình 3:

\[ S_{(NL)_t} = S_{0} \exp\left((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{NL}\right) \]

Trong đó:

  • S(Nt), S(NNt), S(NLt) là giá cổ phiếu tại thời điểm t ứng với giả định phân phối chuẩn, phân phối ghép.

3.1.2 Mô hình tính VaR của danh mục

Tương ứng với 3 phương trình mô phỏng giá cổ phiếu theo GBM dưới giả định phân phối chuẩn, phân phối ghép ta có được 3 kết quả VaR của danh mục tương ứng. \[ VaR = V_{p}*percentile(R_P, \alpha) \] Trong đó:

  • VP: khoản đầu tư của danh mục (100.000$)
  • a là mức xác suất ứng với độ tin cậy đang xét (90%; 95%; 97,5%)
  • R(P) là chuỗi tỷ suất lợi nhuận của danh mục được tính toán theo công thức sau, sau đó được sắp xếp theo thứ tứ tăng dần.

\[ R_{P}=\sum_{i=1}^{n} w_{i}R_{i} \] Trong đó:

  • wi: tỷ trọng của tài sản i trong danh mục (wi=(0.2, 0.25, 0.1, 0.1, 0.2, 0.15) tương ứng với mã CP (DIG, DXG, NVL, VHM, KDH, VIC))
  • Ri: tỷ suất lợi nhuận của tài sản i
  • n: số cổ phiểu trong danh mục (n = 6)

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

Dữ liệu giá đóng cửa của 6 mã cổ phiếu nhóm ngành bất động sản bao gồm: DIG, DXG, NVL, VHM, KDH và VIC. Dữ liệu được thu thập từ investing.com trong giai đoạn 02/01/2019 đến 24/03/2023 với 1.055 quan sát.
  • KDH: Công ty cổ phần Đầu tư và kinh doanh nhà Khang Điền
  • DIG: Tổng công ty Cổ phần Đầu tư Phát triển Xây dựng
  • DXG: Công ty cổ phần Tập đoàn Đất Xanh
  • VHM: Công ty cổ phần Vinhomes
  • NVL: Công ty cổ phần Tập đoàn Đầu tư Địa ốc No Va
  • VIC: Tập đoàn VINGROUP

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

4.1 Thống kê mô tả

cam<-file.choose()
rm<-read_excel(cam)
rm1<- rm %>% select(KDH, DIG, DXG, VHM, NVL, VIC)
summary(rm1)
##       KDH             DIG             DXG             VHM       
##  Min.   :14124   Min.   : 6592   Min.   : 6739   Min.   :40900  
##  1st Qu.:18833   1st Qu.: 8651   1st Qu.:11800   1st Qu.:58212  
##  Median :24000   Median :14800   Median :14900   Median :64905  
##  Mean   :27144   Mean   :22194   Mean   :17675   Mean   :64977  
##  3rd Qu.:35500   3rd Qu.:27041   3rd Qu.:21109   3rd Qu.:73491  
##  Max.   :51636   Max.   :98197   Max.   :46750   Max.   :88722  
##       NVL             VIC        
##  Min.   :10250   Min.   : 52500  
##  1st Qu.:31932   1st Qu.: 78873  
##  Median :35214   Median : 93422  
##  Mean   :49516   Mean   : 90104  
##  3rd Qu.:78000   3rd Qu.:104000  
##  Max.   :92366   Max.   :128000

Từ kết quả thống kê mô tả cho thấy:

Giá cổ phiếu KDH có giá trị nhỏ nhất là 14124; giá trị lớn nhất là 51636; giá trị trung bình là 27144; giá trị tứ phân vị thứ nhất là 18833, giá trị trung vị là 24000, giá trị phân vị thứ ba là 35500

Giá cổ phiếu DIG có giá trị nhỏ nhất là 6592; giá trị lớn nhất là 98197; giá trị trung bình là 22194;giá trị tứ phân vị thứ nhất là 8651, giá trị trung vị là 14800, giá trị phân vị thứ ba là 27041

Giá cổ phiếu DXG có giá trị nhỏ nhất là 6739; giá trị lớn nhất là 46750; giá trị trung bình là 17675; giá trị tứ phân vị thứ nhất là 11800, giá trị trung vị là 14900, giá trị tứ phân vị thứ ba là 21109

Giá cổ phiếu VHM có giá trị nhỏ nhất là 40900; giá trị lớn nhất là 88722; giá trị trung bình là 64977; giá trị tứ phân vị thứ nhất là 58212, giá trị trung vị là 64905, giá trị tứ phân vị thứ ba là 73491

Giá cổ phiếu NVL có giá trị nhỏ nhất là 10250; giá trị lớn nhất là 92366; giá trị trung bình là 49516;; giá trị tứ phân vị thứ nhất là 31932, giá trị trung vị là 35214, giá trị tứ phân vị thứ ba là 78000

Giá cổ phiếu VIC có giá trị nhỏ nhất là 52500; giá trị lớn nhất là 12800; giá trị trung bình là 90104;; giá trị tứ phân vị thứ nhất là 78873, giá trị trung vị là 93422, giá trị tứ phân vị thứ ba là 104000

Sau đây tôi sẽ đi kiểm định một số phân phối thông dụng cho 6 biến này.

4.2 Xác định phân phối cho các biến đầu vào

4.2.1 Biến KDH

Vẽ đồ thị histogram

hist(rm1$KDH)

4.2.1.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$KDH)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$KDH
## W = 0.87824, p-value < 2.2e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu KDH có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.1.2 Kiểm định phân phối loga chuẩn

ks.test(rm1$KDH, y = "plnorm", meanlog = mean(log(rm1$KDH)), sdlog = sd(log(rm1$KDH)))
## Warning in ks.test(rm1$KDH, y = "plnorm", meanlog = mean(log(rm1$KDH)), : ties
## should not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$KDH
## D = 0.17337, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu KDH có phân phối loga chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn

4.2.2 Biến DIG

Vẽ đồ thị histogram

hist(rm1$DIG)

4.2.2.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$DIG)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$DIG
## W = 0.7499, p-value < 2.2e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu DIG có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.2.2 Kiểm định phân phối loga chuẩn

ks.test(rm1$DIG, y = "plnorm",meanlog = mean(log(rm1$DIG)), sdlog = sd(log(rm1$DIG)))
## Warning in ks.test(rm1$DIG, y = "plnorm", meanlog = mean(log(rm1$DIG)), : ties
## should not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$DIG
## D = 0.17565, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu DIG có phân phối loga chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn

4.2.2.3 Kiểm định phân phối mũ

ks.test(rm1$DIG, y = "pexp", rate = 1/mean(rm1$DIG))
## Warning in ks.test(rm1$DIG, y = "pexp", rate = 1/mean(rm1$DIG)): ties should not
## be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$DIG
## D = 0.26216, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu DIG có phân phối mũ

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối mũ

4.2.3 Biến DXG

Vẽ đồ thị histogram

hist(rm1$DXG)

4.2.3.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$DXG)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$DXG
## W = 0.86726, p-value < 2.2e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu DXG có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.3.2 Kiểm định phân phối loga chuẩn

ks.test(rm1$DXG, y = "plnorm",meanlog = mean(log(rm1$DXG)), sdlog = sd(log(rm1$DXG)))
## Warning in ks.test(rm1$DXG, y = "plnorm", meanlog = mean(log(rm1$DXG)), : ties
## should not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$DXG
## D = 0.084051, p-value = 6.719e-07
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu DXG có phân phối loga chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn

4.2.3.3 Kiểm định phân phối mũ

ks.test(rm1$DXG, y = "pexp", rate = 1/mean(rm1$DXG))
## Warning in ks.test(rm1$DXG, y = "pexp", rate = 1/mean(rm1$DXG)): ties should not
## be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$DXG
## D = 0.34764, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu DXG có phân phối mũ

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối mũ

4.2.4 Biến VHM

Vẽ đồ thị histogram

hist(rm1$VHM)

4.2.4.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$VHM)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$VHM
## W = 0.98427, p-value = 3.021e-09

Giả thuyết H0: Dãy số liệu giá cổ phiểu VHM có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.4.2 Kiểm định phân phối loga chuẩn

ks.test(rm1$VHM, y = "plnorm",meanlog = mean(log(rm1$VHM)), sdlog = sd(log(rm1$VHM)))
## Warning in ks.test(rm1$VHM, y = "plnorm", meanlog = mean(log(rm1$VHM)), : ties
## should not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$VHM
## D = 0.050066, p-value = 0.01009
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu VHM có phân phối loga chuẩn

Với pvalue < 5% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn

4.2.5 Biến NVL

Vẽ đồ thị histogram

hist(rm1$NVL)

4.2.5.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$NVL)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$NVL
## W = 0.8347, p-value < 2.2e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu NVL có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.5.2 Kiểm định phân phối bimodal

Nhìn vào đồ thị histogram ta thấy có dạng 2 đỉnh , đây có thể là hình dạng của phân phối bimodal. Trong R, không có sẵn phân phối bimodal trong hàm ks.test(). DO đó tôi sử dụng gói thư viện "mixtools" trong R để ước lượng mô hình phân phối hỗn hợp và kiểm tra xem có hai thành phần phân phối hay không.

fit <- normalmixEM(rm1$NVL, k = 2)
## number of iterations= 12
summary(fit)
## summary of normalmixEM object:
##             comp 1      comp 2
## lambda 6.36333e-01 3.63667e-01
## mu     3.21992e+04 7.98153e+04
## sigma  8.47362e+03 4.39694e+03
## loglik at estimate:  -11477.15

Kết quả này cho biết mô hình phân phối hỗn hợp bimodal được ước lượng có hai thành phần. Thành phần 1 có tỷ lệ xuất hiện là 0.636333, giá trị trung bình là 32199.2 và độ lệch chuẩn là 8473.63. Thành phần 2 có tỷ lệ xuất hiện là 0.363667, giá trị trung bình là 79815.3 và độ lệch chuẩn là 4396.94. Giá trị log-likelihood (-11477.15) được sử dụng để đánh giá mức độ khớp giữa mô hình và dữ liệu. Mức độ khớp càng cao khi giá trị log-likelihood càng gần 0 hoặc càng lớn. Trong trường hợp này, giá trị log-likelihood âm có thể chỉ ra rằng mô hình không khớp hoàn toàn với dữ liệu.

4.2.6 Biến VIC

Vẽ biểu đồ histogram

hist(rm1$VIC)

4.2.6.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$VIC)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$VIC
## W = 0.96166, p-value = 4.988e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu VIC có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.6.2 Kiểm định phân phối loga chuẩn

ks.test(rm1$VIC, y = "plnorm",meanlog = mean(log(rm1$VIC)), sdlog = sd(log(rm1$VIC)))
## Warning in ks.test(rm1$VIC, y = "plnorm", meanlog = mean(log(rm1$VIC)), : ties
## should not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$VIC
## D = 0.12073, p-value = 8.782e-14
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu VIC có phân phối loga chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn

Kết luận: Sau khi thực hiện các kiểm định tác giả vẫn chưa tìm được phân phối cụ thể của các biến đầu vào, do đó sử dụng mô hình GBM dưới giả định phân phối chuẩn, phân phối ghép để thực hiện mô phỏng các biến này.

4.3 Mô phỏng các biến đầu vào

4.3.1 Mô hình 1

Mô phỏng giá cổ phiếu sử dụng GBM giả định phân phối chuẩn

4.3.1.1 Biến KDH

set.seed(1)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
KDH<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$KDH[1])
plot(KDH, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

KDH<-diff(log(KDH))

4.3.1.2 Biến DIG

set.seed(2)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DIG<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DIG[1])
plot(DIG, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DIG<-diff((log(DIG)))

4.3.1.3 Biến DXG

set.seed(3)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DXG<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DXG[1])
plot(DXG, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DXG<-diff(log(DXG))

4.3.1.4 Biến VHM

set.seed(4)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VHM<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VHM[1])
plot(VHM, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VHM<-diff(log(VHM))

4.3.1.5 Biến NVL

set.seed(5)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
NVL<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$NVL[1])
plot(NVL, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

NVL<-diff(log(NVL))

4.3.1.6 Biến VIC

set.seed(6)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VIC<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VIC[1])
plot(VIC, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VIC<- diff(log(VIC))

4.3.2 Mô hình 2

Mô phỏng giá cổ phiếu sử dụng GBM dưới giả định phân phối ghép (convoluted distribution( hai phân phối chuẩn))

4.3.2.1 Biến KDH

set.seed(1)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
KDH2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$KDH[1])
plot(KDH2, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

KDH2<-diff(log(KDH2))

4.3.2.2 Biến DIG

set.seed(2)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DIG2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DIG[1])
plot(DIG2, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DIG2<-diff(log(DIG2))

4.3.2.3 Biến DXG

set.seed(3)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DXG2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DXG[1])
plot(DXG2, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DXG2<-diff(log(DXG2))

4.3.2.4 Biến VHM

set.seed(4)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VHM2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VHM[1])
plot(VHM2, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VHM2<-diff(log(VHM2))

4.3.2.5 Biến NVL

set.seed(5)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
NVL2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$NVL[1])
plot(NVL2, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

NVL2<-diff(log(NVL2))

4.3.2.6 Biến VIC

set.seed(6)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VIC2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VIC[1])
plot(VIC2, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VIC2<-diff(log(VIC2))

4.3.3 Mô hình 3

Mô phỏng giá cổ phiếu sử dụng GBM dưới giả định phân phối ghép (convoluted distribution (ghép giữa phân phối chuẩn và phân phối laplace)

4.3.3.1 Biến KDH

set.seed(1)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
KDH3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$KDH[1])
plot(KDH3, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

KDH3<-diff(log(KDH3))

4.3.3.2 Biến DIG

set.seed(2)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DIG3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DIG[1])
plot(DIG3, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DIG3<-diff(log(DIG3))

4.3.3.3 Biến DXG

set.seed(3)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DXG3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DXG[1])
plot(DXG3, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DXG3<-diff(log(DXG3))

4.3.3.4 Biến VHM

set.seed(4)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VHM3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VHM[1])
plot(VHM3, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VHM3<-diff(log(VHM3))

4.3.3.5 Biến NVL

set.seed(5)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
NVL3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$NVL[1])
plot(NVL3, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

NVL3<-diff(log(NVL3))

4.3.3.6 Biến VIC

set.seed(6)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VIC3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VIC[1])
plot(VIC3, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VIC3<-diff(log(VIC3))

4.4 VaR của danh mục

4.4.1 Mô hình 1

mac<-data.frame(DIG, DXG, NVL, VHM, KDH, VIC)
Vp<-100000 # Giá trị danh mục đầu tư
w<-c(0.2, 0.25, 0.1, 0.1, 0.2, 0.15)# Tỷ trọng của từng tài sản trong danh mục
RP1 <- apply(mac, 1, function(row) sum(row * w))#Tỷ suất lợi nhuận của danh mục
hist(RP1)

Giá trị VaR của danh mục ứng với 3 mức độ tin cậy 90%; 95%; 97,5%

N<- 10000 # Số quan sát của chuối tỷ suất lợi nhuận danh mục
# Sắp xếp tỷ suất lợị nhuận danh mục theo thứ tự tăng dần
sorted_values <- sort(RP1)
# Chọn chỉ số tương ứng với mức tin cậy
alpha<- c(0.9, 0.95, 0.975)
k <- ceiling((1 - alpha) * N)
# Tính VaR
var1 <- Vp*sorted_values[k]
# Tạo data frame kết quả VaR
var_results <- data.frame(
  MucDoTinCay = alpha * 100,
  VaR = var1)
var_results
  • VaR của một khoản đầu tư 100000 USD vào danh mục trong ngày tiếp theo ứng với độ tin cậy 90% là -83,10422 USD (với xác suất 90% khoản lỗ không vượt quá 83,10422 USD trong một ngày)

  • VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 95% là -105,28042 (với xác suất 95% khoản lỗ không vượt quá 105,28042 USD trong một ngày)

  • VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 97,5% là -126,5106 (với xác suất 97,5% khoản lỗ không vượt quá 126,5106 USD trong một ngày)

Giá trị của danh mục đầu tư

V1<-100000*RP1
cut_result <- cut(V1, breaks = c(-Inf, 0, Inf), labels = c("loss", "profit"))

# Tạo vector profit và loss dựa trên kết quả chia khoảng
profit <- V1[cut_result == "profit"]
loss <- V1[cut_result == "loss"]

# Hiển thị kết quả
table(cut_result)
## cut_result
##   loss profit 
##   4978   5021

Trong 10000 phiên giao dịch kế tiếp có 4978 phiên giao dịch có lợi nhuận âm.

Qui ước mức độ rủi ro của danh mục đầu tư như sau:

  • Rủi ro cao: khi mức lỗ của danh mục lớn hơn 0,2%
  • Rủi ro vừa phải: Khi mức lỗ của danh mục nằm trong khoảng (0,1% - 0,2%]
  • Rủi ro thấp: Khi mức lỗ của danh mục nhỏ hơn 0,1%
cao <- RP1[RP1 < -0.002]
vuavua <- RP1[RP1 >= -0.002 & RP1 < -0.001]
thap <- RP1[RP1 >= -0.001 & RP1 <0]
table(cut(RP1, breaks = c(-Inf,-0.002, -0.001, 0), labels = c("Rủi ro cao", "Rủi ro vừa", "Rủi ro thấp")))
## 
##         R<U+1EE7>i ro cao  R<U+1EE7>i ro v<U+1EEB>a R<U+1EE7>i ro th<U+1EA5>p 
##                        10                       580                      4388
data <- data.frame(
  RuiRo = factor(c("Rui ro cao", "Rui ro vua", "Rui ro thap"), levels = c("Rui ro cao", "Rui ro vua", "Rui ro thap")),
  Probability = c(length(cao)/length(RP1), length(vuavua)/length(RP1), length(thap)/length(RP1)))
ggplot(data, aes(x = RuiRo, y = Probability, fill = RuiRo)) +
  geom_bar(stat = "identity", color = "blue") +
  geom_text(aes(label = scales::percent(Probability)), vjust = -0.5, color = "black") 

4.4.2 Mô hình 2

mac2<-data.frame(DIG2, DXG2, NVL2, VHM2, KDH2, VIC2)
Vp<-100000 # Giá trị danh mục đầu tư
w<-c(0.2, 0.25, 0.1, 0.1, 0.2, 0.15)# Tỷ trọng của từng tài sản trong danh mục
RP2 <- apply(mac2, 1, function(row) sum(row * w))#Tỷ suất lợi nhuận của danh mục
hist(RP2)

Giá trị VaR của danh mục ứng với 3 mức độ tin cậy 90%; 95%; 97,5%

N<- 10000 # Số quan sát của chuối tỷ suất lợi nhuận danh mục
# Sắp xếp tỷ suất lợị nhuận danh mục theo thứ tự tăng dần
sorted_values <- sort(RP2)
# Chọn chỉ số tương ứng với mức tin cậy
alpha<- c(0.9, 0.95, 0.975)
k <- ceiling((1 - alpha) * N)
# Tính VaR
var2 <- Vp*sorted_values[k]
# Tạo data frame kết quả VaR
var_results <- data.frame(
  MucDoTinCay = alpha * 100,
  VaR = var2)
var_results
  • VaR của một khoản đầu tư 100000 USD vào danh mục trong ngày tiếp theo ứng với độ tin cậy 90% là -118,3469 USD (với xác suất 90% khoản lỗ không vượt quá 118,3469 USD trong một ngày)

  • VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 95% là -151,2942 (với xác suất 95% khoản lỗ không vượt quá 151,2942 USD trong một ngày)

  • VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 97,5% là -179,059 (với xác suất 97,5% khoản lỗ không vượt quá 179,059 USD trong một ngày)

Đánh giá mức độ rủi ro của danh mục đầu tư

V2<-100000*RP2
cut_result <- cut(V2, breaks = c(-Inf, 0, Inf), labels = c("loss", "profit"))

# Tạo vector profit và loss dựa trên kết quả chia khoảng
profit <- V2[cut_result == "profit"]
loss <- V2[cut_result == "loss"]

# Hiển thị kết quả
table(cut_result)
## cut_result
##   loss profit 
##   5058   4941

Trong 10000 phiên giao dịch kế tiếp có 5058 phiên giao dịch có lợi nhuận âm.

Qui ước mức độ rủi ro của danh mục đầu tư như sau:

  • Rủi ro cao: khi mức lỗ của danh mục lớn hơn 0,2%
  • Rủi ro vừa phải: Khi mức lỗ của danh mục nằm trong khoảng (0,1% - 0,2%]
  • Rủi ro thấp: Khi mức lỗ của danh mục nhỏ hơn 0,1%
cao <- RP2[RP2 < -0.002]
vuavua <- RP2[RP2 >= -0.002 & RP1 < -0.001]
thap <- RP2[RP2 >= -0.001 & RP1 <0]
table(cut(RP2, breaks = c(-Inf,-0.002, -0.001, 0), labels = c("Rủi ro cao", "Rủi ro vừa", "Rủi ro thấp")))
## 
##         R<U+1EE7>i ro cao  R<U+1EE7>i ro v<U+1EEB>a R<U+1EE7>i ro th<U+1EA5>p 
##                       145                      1204                      3709
data <- data.frame(
  RuiRo = factor(c("Rui ro cao", "Rui ro vua", "Rui ro thap"), levels = c("Rui ro cao", "Rui ro vua", "Rui ro thap")),
  Probability = c(length(cao)/length(RP2), length(vuavua)/length(RP2), length(thap)/length(RP2)))
ggplot(data, aes(x = RuiRo, y = Probability, fill = RuiRo)) +
  geom_bar(stat = "identity", color = "blue") +
  geom_text(aes(label = scales::percent(Probability)), vjust = -0.5, color = "black") 

4.4.3 Mô hình 3

mac3<-data.frame(DIG3, DXG3, NVL3, VHM3, KDH3, VIC3)

Vp<-100000 # Giá trị danh mục đầu tư
w<-c(0.2, 0.25, 0.1, 0.1, 0.2, 0.15)# Tỷ trọng của từng tài sản trong danh mục
RP3 <- apply(mac3, 1, function(row) sum(row * w)) #Tỷ suất lợi nhuận của danh mục
hist(RP3)

Giá trị VaR của danh mục ứng với 3 mức độ tin cậy 90%; 95%; 97,5%

N<- 10000 # Số quan sát của chuối tỷ suất lợi nhuận danh mục
# Sắp xếp tỷ suất lợị nhuận danh mục theo thứ tự tăng dần
sorted_values <- sort(RP3)
# Chọn chỉ số tương ứng với mức tin cậy
alpha<- c(0.9, 0.95, 0.975)
k <- ceiling((1 - alpha) * N)
# Tính VaR
var3 <- Vp*sorted_values[k]
# Tạo data frame kết quả VaR
var_results <- data.frame(
  MucDoTinCay = alpha * 100,
  VaR = var3)
var_results
  • VaR của một khoản đầu tư 100000 USD vào danh mục trong ngày tiếp theo ứng với độ tin cậy 90% là -142,5306 USD (với xác suất 90% khoản lỗ không vượt quá 142,5306 USD trong một ngày)

  • VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 95% là -182,5676 (với xác suất 95% khoản lỗ không vượt quá 182,5676 USD trong một ngày)

  • VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 97,5% là -223,8178 (với xác suất 97,5% khoản lỗ không vượt quá 223,8178 USD trong một ngày)

Đánh giá mức độ rủi ro của danh mục đầu tư

V3<-100000*RP3
cut_result <- cut(V3, breaks = c(-Inf, 0, Inf), labels = c("loss", "profit"))

# Tạo vector profit và loss dựa trên kết quả chia khoảng
profit <- V3[cut_result == "profit"]
loss <- V3[cut_result == "loss"]

# Hiển thị kết quả
table(cut_result)
## cut_result
##   loss profit 
##   5055   4944

Trong 10000 phiên giao dịch kế tiếp có 5055 phiên giao dịch có lợi nhuận âm.

Qui ước mức độ rủi ro của danh mục đầu tư như sau:

  • Rủi ro cao: khi mức lỗ của danh mục lớn hơn 0,2%
  • Rủi ro vừa phải: Khi mức lỗ của danh mục nằm trong khoảng (0,1% - 0,2%]
  • Rủi ro thấp: Khi mức lỗ của danh mục nhỏ hơn 0,1%
cao <- RP3[RP3 < -0.002]
vuavua <- RP3[RP3 >= -0.002 & RP1 < -0.001]
thap <- RP3[RP3 >= -0.001 & RP1 <0]
table(cut(RP3, breaks = c(-Inf,-0.002, -0.001, 0), labels = c("Rủi ro cao", "Rủi ro vừa", "Rủi ro thấp")))
## 
##         R<U+1EE7>i ro cao  R<U+1EE7>i ro v<U+1EEB>a R<U+1EE7>i ro th<U+1EA5>p 
##                       378                      1436                      3241
data <- data.frame(
  RuiRo = factor(c("Rui ro cao", "Rui ro vua", "Rui ro thap"), levels = c("Rui ro cao", "Rui ro vua", "Rui ro thap")),
  Probability = c(length(cao)/length(RP3), length(vuavua)/length(RP3), length(thap)/length(RP3)))
ggplot(data, aes(x = RuiRo, y = Probability, fill = RuiRo)) +
  geom_bar(stat = "identity", color = "blue") +
  geom_text(aes(label = scales::percent(Probability)), vjust = -0.5, color = "black") 

4.4.4 So sánh giá trị VaR giữa 3 mô hình

confidence_levels <- c(90, 95, 97.5)
var_values <- c(var1, var2, var3)
model_names <- rep(c("MH1", "MH2", "MH3"), each = 3)

data <- data.frame(
  Model = model_names,
  ConfidenceLevel = rep(confidence_levels, times = 3),
  VaR = var_values)

ggplot(data, aes(x = factor(ConfidenceLevel), y = VaR, fill = Model)) +
  geom_col(position = "dodge") +
  labs(x = "Confidence_levels", y = "VaR") +
  scale_fill_discrete(name ="Model")

Dựa vào biểu đồ trên ta thấy giá trị VaR của danh mục khi mô phỏng giá cổ phiếu theo GBM dưới giả định phân phối chuẩn (MH1) cho ra kết quả thấp nhất và giá trị VaR của danh mục khi mô phỏng giá cổ phiếu theo GBM dưới giả định phân phối ghép giữa phân phối chuẩn và phân phối laplace (MH3) cho ra kết quả cao nhất ở cả 3 mức độ tin cậy.

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

Bài tiểu luận sử dụng phương pháp mô phỏng Monte Carlo để tính giá trị rủi ro của danh mục đầu tư nhóm các cổ phiếu BĐS niêm yết trên HOSE trong phạm vi thời gian 01/01/2019 - 24/03/2023 . Khi xác định phân phối cho các biến đầu vào để thực hiện mô phỏng, tác giả không tìm thấy phân phối của chúng do đó sử dụng mô hình GBM để thực hiện mô phỏng cho các biến này dưới giả định phân phối chuẩn và phân phối ghép. Kết quả ta tính được VaR ở 3 mức tin cậy 90%; 95%; 97,5% tương ứng với từng giả định phân phối của mô hình. Qua đó, ta thấy được giá trị VaR của danh mục khi mô phỏng giá cổ phiếu theo GBM dưới giả định phân phối chuẩn (MH1) cho ra kết quả thấp nhất và giá trị VaR của danh mục khi mô phỏng giá cổ phiếu theo GBM dưới giả định phân phối ghép giữa phân phối chuẩn và phân phối laplace (MH3) cho ra kết quả cao nhất ở cả 3 mức độ tin cậy.

6 TÀI LIỆU THAM KHẢO

Mensah, E. T., Boateng, A., Frempong, N. K., & Maposa, D. (2023). Simulating stock prices using geometric Brownian motion model under normal and convoluted distributional assumptions. Scientific African, 19, e01556.

7 PHỤ LỤC

knitr::include_graphics("D:/Random Simulaton/Capture.PNG")

LS0tDQp0aXRsZTogIuG7qE5HIEThu6RORyBQSMavxqBORyBQSMOBUCBNw5QgUEjhu45ORyBNT05URSBDQVJMTyBUw41OSCBHScOBIFRS4buKIFLhu6ZJIFJPIEPhu6ZBIERBTkggTeG7pEMgxJDhuqZVIFTGryBOSMOTTSBOR8OATkggQuG6pFQgxJDhu5hORyBT4bqiTiINCmF1dGhvcjogIlRy4bqnbiBUaOG7iyBUaHUgQ+G6qW0iDQpkYXRlOiAiMDQtMDYtMjAyMyINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogbm8NCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KLS0tDQoNCg0KYGBge3J9DQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkobWl4dG9vbHMpDQpsaWJyYXJ5KHNuKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoVkdBTSkNCmBgYA0KZOG7ryBsaeG7h3U6IDxodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8xN3JTWEpSMG5MZ2NndFFCSWtQcE1WU0duVG8xaVlaNXQvZWRpdD91c3A9c2hhcmluZyZvdWlkPTEwODg5NDcyNDIwMTM3NDI5OTkxMyZydHBvZj10cnVlJnNkPXRydWU+DQoNCiMgQ2jGsMahbmcgMS4gVOG7lE5HIFFVQU4gVuG7gCDEkOG7gCBUw4BJDQoNCiMjIEzDvSBkbyBjaOG7jW4gxJHhu4EgdMOgaQ0KDQo8ZGl2IGFsaWduPSJqdXN0aWZ5Ij5UaOG7iyB0csaw4budbmcgY2jhu6luZyBraG/DoW4gVmnhu4d0IE5hbSAoVFRDSyBWTikgdOG7qyBraGkgxJFpIHbDoG8gaG/huqF0IMSR4buZbmcgxJHhur9uIG5heSDEkcOjIHRo4buDIGhp4buHbiDEkcaw4bujYyB2YWkgdHLDsiBsw6AgbeG7mXQgdHJvbmcgbmjhu69uZyBrw6puaCBodXkgxJHhu5luZyB24buRbiBxdWFuIHRy4buNbmcgY+G7p2EgY8OhYyBjw7RuZyB0eSB24bubaSBxdXkgbcO0IG5nw6B5IGPDoG5nIG3hu58gcuG7mW5nLCB0aHUgaMO6dCBuaGnhu4F1IMSR4buRaSB0xrDhu6NuZyB0aGFtIGdpYS4gTmjGsG5nIHPhu7EgYmnhur9uIMSR4buZbmcgY+G7p2EgdGjhu4sgdHLGsOG7nW5nIGvDqG0gdGhlbyBuaOG7r25nIHLhu6dpIHJvIHRp4buBbSDhuqluIGtoaeG6v24ga2jDtG5nIMOtdCBuZ8aw4budaSDEkcOjIHRo4bqldCBi4bqhaSwgbeG6pXQgbcOhdCB2w6AgcuG7nWkgYuG7jyB0aOG7iyB0csaw4budbmcgZG8ga2jDtG5nIGzGsOG7nW5nIGjhur90IMSRxrDhu6NjIG5o4buvbmcgcuG7p2kgcm8gY8OzIHRo4buDIGfhurdwIHBo4bqjaS4gVHLGsOG7m2MgdMOsbmggaMOsbmgg4bqleSwgdmnhu4djIG5o4bqtbiBk4bqhbmcgdsOgIMSRbyBsxrDhu51uZyBy4bunaSBybyB0cm9uZyDEkeG6p3UgdMawIGPhu5UgcGhp4bq/dSB0csOqbiBT4bufIEdpYW8gZOG7i2NoIENo4bupbmcga2hvw6FuIFRow6BuaCBwaOG7kSBI4buTIENow60gTWluaCAoSE9TRSkgxJHhu4MgdOG7qyDEkcOzIMSR4buBIHh14bqldCBjw6FjIGtodXnhur9uIG5naOG7iyBjaG8gY8OhYyBuaMOgIHF14bqjbiBsw70gdGjhu4sgdHLGsOG7nW5nLCBjw7RuZyB0eSBjaOG7qW5nIGtob8OhbiB2w6AgY8OhYyBuaMOgIMSR4bqndSB0xrAgKE7EkFQpIGPDsyBnaeG6o2kgcGjDoXAgbmjhurFtIGjhuqFuIGNo4bq/IHLhu6dpIHJvIGNobyBOxJBUIGzDoCBy4bqldCBj4bqnbiB0aGnhur90LCBxdWEgxJHDsyBnw7NwIHBo4bqnbiB2w6BvIHPhu7EgcGjDoXQgdHJp4buDbiBsw6BuaCBt4bqhbmggY+G7p2EgSE9TRSBuw7NpIHJpw6puZyB2w6AgVFRDSyBWTiBuw7NpIGNodW5nIOKAkyBt4buZdCBrw6puaCBodXkgxJHhu5luZyB24buRbiB04buRaSBxdWFuIHRy4buNbmcgY2hvIG7hu4FuIGtpbmggdOG6vy4gVGjhu4sgdHLGsOG7nW5nIELEkFMgVmnhu4d0IE5hbSBjxaluZyDEkcOzbmcgdmFpIHRyw7IgY2jhu6cgY2jhu5F0IHRyb25nIHZp4buHYyBodXkgxJHhu5luZyB2w6Agc+G7rSBk4bulbmcgbmd14buTbiB24buRbiBjaG8gbuG7gW4ga2luaCB04bq/LiBD4bqjIGhhaSB0aOG7iyB0csaw4budbmcgxJHhu4F1IGPDsyBuaOG7r25nIHbhu4sgdHLDrSwgdmFpIHRyw7IgcXVhbiB0cuG7jW5nIHRyb25nIGPDoWMgaG/huqF0IMSR4buZbmcgduG7gSB0w6BpIGNow61uaCBj4bunYSDEkeG6pXQgbsaw4bubYywgY8OzIHTDoWMgZOG7pW5nIGLhu5UgdHLhu6MgY2hvIGPDoWMgdGjhu4sgdHLGsOG7nW5nIGtow6FjIGPDuW5nIG5oYXUgcGjDoXQgdHJp4buDbi4gVHJvbmcgxJHDsywgbmjDs20gY+G7lSBwaGnhur91IELEkFMgZ+G6r24gbGnhu4FuIHbhu5tpIHBow6F0IHRyaeG7g24ga2luaCB04bq/IG7Ds2kgY2h1bmcsIHbhuqtuIMSRxrDhu6NjIMSRw6FuaCBnacOhIGzDoCBt4buZdCB0cm9uZyBjw6FjIG5ow7NtIMSR4bqndSBuZ8OgbmggZOG6q24gZOG6r3QgdGjhu4sgdHLGsOG7nW5nLiBDaMOtbmggdsOsIHbhuq15LCBjw6FjIE7EkFQgY+G6p24gY8OzIMSRw6FuaCBnacOhIHRvw6BuIGRp4buHbiB24buBIGLhu6ljIHRyYW5oIHRo4buLIHRyxrDhu51uZyBuaMOzbSBj4buVIHBoaeG6v3UgQsSQUywgxJHhu4MgY8OzIHRo4buDIGPDom4gbmjhuq9jIHbDoCBu4bqvbSBi4bqvdCBjxqEgaOG7mWkgxJHhuqd1IHTGsCB0cm9uZyB0xrDGoW5nIGxhaS4gRG8gxJHDsywgdMOhYyBnaeG6oyBs4buxYSBjaOG7jW4gxJHhu4EgdMOgaTogKirigJzhu6huZyBk4bulbmcgcGjGsMahbmcgcGjDoXAgTW9udGUgQ2FybG8gdMOtbmggZ2nDoSB0cuG7iyBy4bunaSBybyBj4bunYSBkYW5oIG3hu6VjIMSR4bqndSB0xrAgbmjDs20gbmfDoG5oIGLhuqV0IMSR4buZbmcgc+G6o24iLioqPC9kaXY+DQoNCiMjIE3hu6VjIHRpw6p1IG5naGnDqm4gY+G7qXUNCg0KxJDhu4EgdMOgaSBuZ2hpw6puIGPhu6l1IG5o4bqxbSDEkeG6oXQgxJHGsOG7o2MgY8OhYyBt4bulYyB0acOqdSBjaMOtbmggbmjGsCBzYXU6DQoNCiogxJBvIGzGsOG7nW5nIGdpw6EgdHLhu4sgcuG7p2kgcm8gY+G7p2EgZGFuaCBt4bulYyDEkeG6p3UgdMawIG5ow7NtIG5nw6BuaCBi4bqldCDEkeG7mW5nIHPhuqNuDQoqIMSQ4buBIHh14bqldCBt4buZdCBz4buRIGdp4bqjaSBwaMOhcCDEkeG6p3UgdMawIGdp4bqjbSB0aGnhu4N1IHLhu6dpIHJvIGNobyBuaMOgIMSR4bqndSB0xrAuDQoNCiMjIMSQ4buRaSB0xrDhu6NuZyB2w6AgcGjhuqFtIHZpIG5naGnDqm4gY+G7qXUNCg0KIyMjIMSQ4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1DQoNCkRhbmggbeG7pWMgxJHhuqd1IHTGsCBuaMOzbSBuZ8OgbmggYuG6pXQgxJHhu5luZyBz4bqjbiBiYW8gZ+G7k20gNiBjaOG7iSBz4buRIGdpw6EgY+G7lSBwaGnhur91IELEkFMgxJHGsOG7o2MgbmnDqm0geeG6v3QgdHLDqm4gc8OgbiBIT1NFLg0KDQojIyMgUGjhuqFtIHZpIG5naGnDqm4gY+G7qXUNCg0KS2jDtG5nIGdpYW46IHRo4buLIHRyxrDhu51uZyBjaOG7qW5nIGtob8OhbiBWaeG7h3QgTmFtDQoNClRo4budaSBnaWFuOiAwMS8wMS8yMDE5IC0gMjQvMDMvMjAyMyANCg0KIyMgUGjGsMahbmcgcGjDoXAgbmdoacOqbiBj4bupdQ0KDQpCw6BpIHRp4buDdSBsdeG6rW4gc+G7rSBk4bulbmcgcGjGsMahbmcgcGjDoXAgTW9udGUgQ2FybG8gxJHhu4MgdMOtbmggZ2nDoSB0cuG7iyBy4bunaSBybyBj4bunYSBkYW5oIG3hu6VjIMSR4bqndSB0xrAgbmjDs20gbmfDoG5oIELEkFMuDQoNCiMgQ2jGsMahbmcgMi4gQ8agIFPhu54gTMOdIFRIVVnhur5UDQoNCiMjIEPGoSBz4bufIHbhu4EgcuG7p2kgcm8NCg0KPGRpdiBhbGlnbj0ianVzdGlmeSI+S2hpIMSR4bqndSB0xrAgdsOgbyBt4buXaSBsb+G6oWkgdMOgaSBz4bqjbiwgdGEgxJHhu4F1IGPDsyB0aOG7gyBn4bq3cCBwaOG6o2kgMiBsb+G6oWkgcuG7p2kgcm86IHLhu6dpIHJvIGjhu4cgdGjhu5FuZw0KKHLhu6dpIHJvIHRo4buLIHRyxrDhu51uZykgdsOgIHLhu6dpIHJvIHBoaSBo4buHIHRo4buRbmcgY+G7p2EgY8OhYyB0w6BpIHPhuqNuIHRow6BuaCBwaOG6p24uDQoNClLhu6dpIHJvIGjhu4cgdGjhu5FuZyBsw6AgbG/huqFpIHLhu6dpIHJvIHTDoWMgxJHhu5luZyBsw6puIHThuqV0IGPhuqMgY8OhYyB0w6BpIHPhuqNuIHRyb25nIGRhbmggbeG7pWMgbsOzaSByacOqbmcNCnbDoCBsw6puIHThuqV0IGPhuqMgbmjhu69uZyB0w6BpIHPhuqNuIGPhuqV1IHRow6BuaCBuw6puIHRo4buLIHRyxrDhu51uZy4gQ8OhYyBuaMOibiB04buRIGPDsyB0aOG7gyBnw6J5IG7Dqm4gbG/huqFpDQpy4bunaSBybyBuw6B5IGfhu5NtIGPDsyBnacOhIGNo4bupbmcga2hvw6FuLCBsw6NpIHZheSwgdOG7tyBnacOhIGjhu5FpIMSRb8OhaSBoYXkgZ2nDoSBj4bqjIGPDoWMgbG/huqFpIGjDoG5nDQpow7NhIGPEg24gYuG6o27igKYNCg0KUuG7p2kgcm8gcGhpIGjhu4cgdGjhu5FuZyDEkeG7mWMgbOG6rXAgduG7m2kgbmjhu69uZyBoaeG7h24gdMaw4bujbmcgdMOhYyDEkeG7mW5nIGzDqm4gdG/DoG4gYuG7mSB0w6BpIHPhuqNuIHRyw6puIHRo4buLIHRyxrDhu51uZy4gTsOzIGNo4buJIGzDoCBuaOG7r25nIHLhu6dpIHJvIMSR4bq3YyB0csawbmcgcmnDqm5nIGPDsyBj4bunYSBt4buZdCB2w6BpIGNo4bupbmcga2hvw6FuOiBxdeG6o24gbMO9IGRvYW5oIG5naGnhu4dwIHnhur91IGvDqW0sIGjhu49hIGhv4bqhbiBwaMOhIGjhu6d5IG5ow6AgeMaw4bufbmcgaGF5IHRp4bq/biBi4buZIGtob2EgaOG7jWMga+G7uSB0aHXhuq10IGzDoG0gbeG7mXQgc+G7kSBsb+G6oWkgc+G6o24gcGjhuqltIGLhu4sgbOG7l2kgdGjhu51pIOKAplLhu6dpIHJvIHBoaSBo4buHIHRo4buRbmcgY8OzIHRo4buDIGxv4bqhaSB0cuG7qyBi4bqxbmcgdmnhu4djIMSRYSBk4bqhbmcgaMOzYS4NCg0KUuG7p2kgcm8gY+G7p2EgZGFuaCBt4bulYyBwaOG7pSB0aHXhu5ljIHbDoG8gcuG7p2kgcm8gdOG7q25nIGNo4bupbmcga2hvw6FuIHRow6BuaCBwaOG6p24gdsOgIGjhu4cgc+G7kSB0xrDGoW5nIHF1YW4gZ2nhu69hIG5o4buvbmcgY2jhu6luZyBraG/DoW4gbsOgeSB24bubaSBuaGF1LiBO4bq/dSBz4buRIGzGsOG7o25nIGNo4bupbmcga2hvw6FuIGPhuqV1IHRow6BuaCBuw6puIGRhbmggbeG7pWMgxJHhu6cgbOG7m24gdGjDrCBy4bunaSBybyBkYW5oIG3hu6VjIGzDumMgbsOgeSBjaOG7iSBjw7JuIHBo4bulIHRodeG7mWMgdsOgbyBo4buHIHPhu5EgdMawxqFuZyBxdWFuIGdp4buvYSBuaOG7r25nIGNo4bupbmcga2hvw6FuIHRow6BuaCBwaOG6p24uPC9kaXY+DQoNCiMjIEzhu4tjaCBz4butIGjDrG5oIHRow6BuaCBWYVINCg0KPGRpdiBhbGlnbj0ianVzdGlmeSI+S2jDoWkgbmnhu4dtIOKAnEdpw6EgdHLhu4sgdOG6oWkgcuG7p2kgcm8g4oCTIFZhUuKAnSBjw7Mgbmd14buTbiBn4buRYyB04burIGzEqW5oIHbhu7FjIGLhuqNvIGhp4buDbS4gU2F1IMSRw7MsIG7Dsw0KxJHGsOG7o2MgZHUgbmjhuq1wIHbDoG8gdGjhu4sgdHLGsOG7nW5nIHTDoGkgY2jDrW5oIE3hu7kgbmjhu50gbmfDom4gaMOgbmcg4oCcQmFua2VycyBUcnVzdOKAnSB0cm9uZw0Kbmjhu69uZyBuxINtIDE5ODAgY+G7p2EgdGjhur8ga+G7tyBuw6B5LiBUdXkgbmhpw6puLCBuZ8aw4budaSBjw7MgY8O0bmcgbOG7m24gbmjhuqV0IHRyb25nIHRyb25nIHZp4buHYw0KdGjhu7FjIHRp4buFbiBow7NhIGtow6FpIG5p4buHbSBWYVIgbOG6oWkgbMOgIG5nw6JuIGjDoG5nIHRoxrDGoW5nIG3huqFpIEpQTW9yZ2FuIGPhu6dhIE3hu7kgdsOgbw0Kbmjhu69uZyBuxINtIDE5OTQuDQoNCk5ndeG7k24gZ+G7kWMgaMOsbmggdGjDoG5oIG7Dqm4gbmjhu69uZyBjxqEgc+G7nyBraG9hIGjhu41jIMSR4bqndSB0acOqbiB24buBIFZhUiB4deG6pXQgcGjDoXQgdOG7qyBuaOG7r25nDQpiw6FvIGPDoW8gduG7gSBob+G6oXQgxJHhu5luZyB0csOqbiB0aOG7iyB0csaw4budbmcgdMOgaSBjaMOtbmggY+G7p2EgSlBNb3JnYW4gbcOgIG5nw6BpIGNo4bunIHThu4tjaCBsw7pjIMSRw7MNCuKAkyBEZW5uaXMgV2VhdGhlcnN0b25lcyDEkcOjIHnDqnUgY+G6p3UgY8OhYyBjaHV5w6puIHZpw6puIGPhu6dhIG3DrG5oIHBo4bqjaSB0aOG7sWMgaGnhu4duIGjDoG5nIG5nw6B5LiDDlG5nIFdlYXRoZXJzdG9uZXMgbXXhu5FuIGPDsyDEkcaw4bujYyBt4buZdCBjw6FpIG5ow6xuIHThu5VuZyBxdcOhdCB24buBIHLhu6dpIHJvIGPhu6dhIHThu6tuZyB24buLDQp0aOG6vyBraMOhYyBuaGF1IG3DoCBKUE1vcmdhbiDEkWFuZyB0aOG7sWMgaGnhu4duLg0KDQpOZ2/DoGkgcmEsIHZp4buHYyBz4butIGThu6VuZyBWYVIgY8OybiDEkcaw4bujYyBraHV54bq/biBraMOtY2ggYuG7n2kg4oCcTmjDs20gQmEgTcawxqFp4oCdIHbDoG8gbsSDbQ0KMTk5MyDigJMgdOG6rXAgaOG7o3Agbmjhu69uZyDEkeG7i25oIGNo4bq/IHTDoGkgY2jDrW5oIGzhu5tuIHRyw6puIHRo4bq/IGdp4bubaSDigJMgbmjhurFtIGtp4buDbSBzb8OhdCBy4bunaSBybyBj4bunYQ0KdOG7q25nIHRow6BuaCB2acOqbi4gVGjhuq10IHJhLCB2aeG7h2MgdMOtbmggdG/DoW4gcuG7p2kgcm8gdGjhu4sgdHLGsOG7nW5nIMSRw6MgZOG6p24gdHLhu58gbsOqbiBwaOG7lSBiaeG6v24g4bufIGPDoWMNCm5nw6JuIGjDoG5nIHRyb25nIG5oaeG7gXUgbsSDbSB0csaw4bubYyDEkcOzIHbDrCAyIG5ndXnDqm4gbmjDom46IFRo4bupIG5o4bqldCwga+G6v3QgcXXhuqMga2luaCBkb2FuaA0KY+G7p2EgaOG7jSBuZ8OgeSBjw6BuZyBi4buLIOG6o25oIGjGsOG7n25nIG5oaeG7gXUgYuG7n2kgbmjhu69uZyBob+G6oXQgxJHhu5luZyB0csOqbiB0aOG7iyB0csaw4budbmcgdMOgaSBjaMOtbmg7DQp0aOG7qSBoYWksIG5oaeG7gXUgduG7iyB0aOG6vyB0csOqbiB0aOG7iyB0csaw4budbmcsIHbDrSBk4bulIG5oxrAgduG7iyB0aOG6vyBraGkgxJHhuqd1IHTGsCB2w6BvIHPhuqNuIHBo4bqpbSBwaMOhaQ0Kc2luaCwgY8OzIHRo4buDIGfDonkgbmd1eSBoaeG7g20gY2hvIHPhu7EgcGjDoXQgdHJp4buDbiBsw6J1IGTDoGkgdsOgIGLhu4FuIHbhu69uZyBj4bunYSBo4buNLg0KDQpWw6BvIG7Eg20gMTk5NCwgSlBNb3JnYW4gY2hvIHJhIMSR4budaSBo4buHIHRo4buRbmcgUmlza01ldHJpY3MgdsOgIGNoaWEgc+G6uyBuw7MgduG7m2kgdOG6pXQgY+G6ow0KbeG7jWkgbmfGsOG7nWkgdHLDqm4gdGjhur8gZ2nhu5tpIGhvw6BuIHRvw6BuIG1p4buFbiBwaMOtIHRow7RuZyBxdWEgdHJhbmcgd2ViDQp3d3cucmlza21ldHJpY3MuY29tIC4gU2F1IG3hu5l0IHRo4budaSBnaWFuIGhv4bqhdCDEkeG7mW5nLCBSaXNrTWV0cmljcyBzw6F0IG5o4bqtcCB2w6BvDQpSZXV0ZXJzIOKAkyBt4buZdCB04bqtcCDEkW/DoG4gbeG6oW5oIHbhu4EgdGjDtG5nIHRpbiB0w6BpIGNow61uaCDEkeG7gyBjaG8gcmEgxJHhu51pIG3hu5l0IMSRxqFuIHbhu4sgY2h1ecOqbg0KY3VuZyBj4bqlcCBjxqEgc+G7nyBk4buvIGxp4buHdSB24buBIHTDoGkgY2jDrW5oIHbDoCBjw6FjIHBoxrDGoW5nIHBow6FwIGPhuqduIHRoaeG6v3QgxJHhu4MgdMOtbmggdG/DoW4gVmFSDQpjaG8gZGFuaCBt4bulYyDEkeG6p3UgdMawLiBOaOG7r25nIGPDtG5nIHR5IHTDoGkgY2jDrW5oIHbDoCBuaOG7r25nIGRvYW5oIG5naGnhu4dwIGtow6FjIGPFqW5nIGPDsw0KdGjhu4Mgc+G7rSBk4bulbmcgZOG7i2NoIHbhu6UgbsOgeSDEkeG7gyB0w61uaCB0b8OhbiBWYVIgdGhlbyBSaXNrTWV0cmljcyBob+G6t2MgdGh1IHRo4bqtcCBz4buRIGxp4buHdSDEkeG7gw0KcXXhuqNuIHRy4buLIHLhu6dpIHJvIGNobyByacOqbmcgbcOsbmguDQoNClR1eSBuaOG7r25nIGPGoSBz4bufIGtob2EgaOG7jWMgxJHhuqd1IHRpw6puIHbhu4EgVmFSIMSRxrDhu6NjIGjDrG5oIHRow6BuaCB04burIG3DtGkgdHLGsOG7nW5nIG5nw6JuDQpow6BuZywgc29uZyBz4buxIHBow6F0IHRyaeG7g24gY+G7p2EgVmFSIGzhuqFpIMSRxrDhu6NjIHRoxINuZyBob2EgdGjDtG5nIHF1YSB2aeG7h2Mgc+G7rSBk4bulbmcgVmFSIGPhu6dhDQpjw6FjIMSR4buLbmggY2jhur8gdMOgaSBjaMOtbmggY2h1ecOqbiBuZ2hp4buHcCAocXXhu7kgxJHhuqd1IHTGsCwgY8O0bmcgdHkgdMOgaSBjaMOtbmgpIMSR4buDIHF14bqjbiB0cuG7iyBy4bunaSBybw0KY2hvIGhv4bqhdCDEkeG7mW5nIMSR4bqndSB0xrAgY+G7p2EgaOG7jS48L2Rpdj4NCg0KIyMgS2jDoWkgbmnhu4dtIFZhUg0KDQo8ZGl2IGFsaWduPSJqdXN0aWZ5Ij4gVmFSIGzDoCBt4buZdCBwaMawxqFuZyBwaMOhcCDEkW8gbMaw4budbmcga2hv4bqjbiBs4buXIHRp4buBbSBuxINuZyBjaG8gbeG7mXQgY8O0bmcgdHksIG3hu5l0IHF14bu5LA0KbeG7mXQgZGFuaCBt4bulYywgbeG7mXQgZ2lhbyBk4buLY2gsIGhheSBt4buZdCBjaGnhur9uIGzGsOG7o2MgdMOgaSBjaMOtbmguIE7DsyB0aMaw4budbmcgdGjhu4MgaGnhu4duIGLhurFuZw0KcGjhuqduIHRyxINtIGhheSBi4bqxbmcgxJHGoW4gduG7iyB0aeG7gW4uIELhuqV0IGvhu4MgdOG6oWkgduG7iyB0aOG6vyBuw6BvIGPDsyB0aOG7gyBnw6J5IHJhIGzhu5cgY8WpbmcgbMOgIG3hu6VjIHRpw6p1DQrEkeG7gyB0w61uaCBi4bqxbmcgcGjGsMahbmcgcGjDoXAgxJFvIGzGsOG7nW5nIFZhUi4gVmFSIHRoxrDhu51uZyDEkcaw4bujYyBkw7luZyBuaGnhu4F1IMSR4buDIMSRbyBsxrDhu51uZw0KbeG7qWMgbOG7lyB0cm9uZyBy4bunaSBybyB0aOG7iyB0csaw4budbmcsIG5oxrBuZyBuw7MgY8WpbmcgY8OzIHRo4buDIMSRxrDhu6NjIGTDuW5nIMSR4buDIMSRbyBsxrDhu51uZyBy4bunaSBybyB0w61uDQpk4bulbmcgdsOgIG3hu5l0IHPhu5EgbG/huqFpIHLhu6dpIHJvIGtow6FjLg0KDQpDaMO6bmcgdGEgaGnhu4N1IHLhurFuZyBWYVIgbMOgIG3hu5l0IGPDoWNoIMSRbyBsxrDhu51uZyBy4bunaSBybyBk4buxYSB0csOqbiB4w6FjIHN14bqldCBj4bunYSBraOG6oyBuxINuZw0KbOG7lyBnaeG7m2kgaOG6oW4uIMSQ4buLbmggbmdoxKlhIG7DoHkgbMOgIHLhuqV0IGNodW5nIGNodW5nLiBUdXkgbmhpw6puLCBu4bq/dSBuw7NpIG3hu5l0IGPDoWNoIHLDtSByw6BuZw0KaMahbiwgZ2nDoSB0cuG7iyBjw7MgcuG7p2kgcm8gbMOgIG3hu5l0IMaw4bubYyBsxrDhu6NuZyBj4bunYSBt4bupYyBs4buXIChz4buRIHRp4buBbiB04buRaSB0aGnhu4N1IGLhu4sgbOG7lykgbcOgIGNow7puZyB0YQ0Ka8OsIHbhu41uZyB2xrDhu6N0IHF1w6EgduG7m2kgbeG7mXQgeMOhYyBzdeG6pXQgY2hvIHPhurVuIHRyb25nIG3hu5l0IHRo4budaSBrw6wgY+G7pSB0aOG7gyBuw6BvIMSRw7MuDQoNClRhIHhlbSB4w6l0IHbDrSBk4bulIHNhdSB24buBIFZhUiBj4bunYSBt4buZdCBkYW5oIG3hu6VjIMSR4bqndSB0xrA6IFZhUiBj4bunYSAxIGRhbmggbeG7pWMgbMOgIDEuNQ0KdHJp4buHdSBVU0QgY2hvIG3hu5l0IG5nw6B5IHbhu5tpIHjDoWMgc3XhuqV0IGzDoCAwLjA1LiBEaeG7hW4gdOG6oyBs4bqhaSBi4bqxbmcgbeG7mXQgY8OhY2gga2jDoWM6IGPDsyA1JQ0Ka2jhuqMgbsSDbmcgbcOgIGRhbmggbeG7pWMgc+G6vSBt4bqldCDDrXQgbmjhuqV0IDEuNSB0cmnhu4d1IFVTRCB0cm9uZyBt4buZdCBuZ8OgeSwgbmdoxKlhIGzDoCB0csOqbg0KdGjhu7FjIHThur8gMS41IHRyaeG7h3UgVVNEIGzDoCBt4bupYyB0aOG6pXAgbmjhuqV0IGLhu4sgbOG7ly4gVuG7m2kgbeG7mXQgc+G7sSBxdWFuIHTDom0gxJHDoW5nIGvhu4MsIGPDsyB0aOG7gw0KZGnhu4VuIHThuqMgVmFSIHbhu5tpIMO9IG5naMSpYSB4w6FjIHN14bqldCBs4bubbiBuaOG6pXQgeOG6o3kgcmE6IHbhu5tpIHjDoWMgc3XhuqV0IDk1JSBraG/huqNuIGzhu5cga2jDtG5nDQp2xrDhu6N0IHF1w6EgMS41IHRyaeG7h3UgVVNEIG7hu5lpIHRyb25nIG3hu5l0IG5nw6B5Lg0KPC9kaXY+DQoNCg0KIyMgQmEgdGjDtG5nIHPhu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIFZhUiBkYW5oIG3hu6VjDQoNCg0KPGRpdiBhbGlnbj0ianVzdGlmeSI+IE3hurdjIGTDuSBWYVIgdHLhu58gdGjDoG5oIG3hu5l0IHRpw6p1IGNodeG6qW4gxJHDoW5oIGdpw6EgdGjDtG5nIGThu6VuZyBjaG8gZG9hbmggbmdoaeG7h3AsIG5oxrBuZw0KbsOzIGPDsyB0aOG7gyDEkcaw4bujYyB0aOG7sWMgaGnhu4duIHbhu5tpIG5oaeG7gXUgaMOsbmggdGjhu6ljIGtow6FjIG5oYXUsIHbDoCB4w6J5IGThu7FuZyBt4buZdCBjw6FjaCDEkW8NCmzGsOG7nW5nIFZhUiB0aMOtY2ggaOG7o3AgxJHDsmkgaOG7j2kgbmfGsOG7nWkgc+G7rSBk4bulbmcgcGjhuqNpIHF1eeG6v3QgxJHhu4tuaCBy4bqldCBuaGnhu4F1IHRyb25nIGPhuqV1IHRyw7pjDQp0w61uaCB0b8Ohbi4gQmEgdGjDtG5nIHPhu5EgcXVhbiB0cuG7jW5nIG5o4bqldCBsw6AgcGjhuqNpIGzhuqV5IMSRxrDhu6NjIG3hu5l0IMSR4buZIHRpbiBj4bqteSwgeMOhYyDEkeG7i25oDQpraG/huqNuZyB0aOG7nWkgZ2lhbiDEkW8gbMaw4budbmcgVmFSLCB2w6AgY2jhu41uIG3hu5l0IGPDoWNoIHRp4bq/cCBj4bqtbiB4w6FjIMSR4buLbmggxJHhu4MgbcO0IGjDrG5oIGjDs2ENCnBow6JuIGLhu5EgbOG7nWkgbOG7ly4NCjwvZGl2Pg0KDQojIyMgTeG7qWMgxJHhu5kgdGluIGPhuq15DQoNCjxkaXYgYWxpZ249Imp1c3RpZnkiPljDoWMgc3XhuqV0IMSRxrDhu6NjIGNo4buNbiB0aMO0bmcgdGjGsOG7nW5nIGzDoCAwLjA1IGhv4bq3YyAwLjAxICh0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIDk1JSBoYXkgOTklDQpt4bupYyDEkeG7mSB0aW4gY+G6rXkpLiBT4butIGThu6VuZyBt4bupYyAwLjAxIGThuqtuIMSR4bq/biBt4buZdCBz4buxIMaw4bubYyBsxrDhu6NuZyBWYVIga2jDoSB0aOG6rW4gdHLhu41uZywgdsOsDQpuw7MgxJHhu4tuaCByYSBjb24gc+G7kSBtw6AgdOG6oWkgbeG7qWMgbsahaSDEkcOhbmcgbMO9IHJhIGNo4buJIGPDsyAxICUgeMOhYyBzdeG6pXQgYuG7iyBs4buXIHRow6wgc+G6vSB44bqldSBoxqFuIGzDoA0KbeG7qWMgVmFSIMSRw6MgdMOtbmguDQoNCjwvZGl2Pg0KDQoNCiMjIyBLaG/huqNuZyB0aOG7nWkgZ2lhbiDEkW8gbMaw4budbmcNCg0KPGRpdiBhbGlnbj0ianVzdGlmeSI+UXV54bq/dCDEkeG7i25oIHF1YW4gdHLhu41uZyB0aOG7qSBoYWkgxJHhu5FpIHbhu5tpIG5nxrDhu51pIHPhu60gZOG7pW5nIFZhUiBsw6AgY2jhu41uIMSRxrDhu6NjIGtob+G6o25nIHRo4budaQ0KZ2lhbi4gVmFSIHRoxrDhu51uZyDEkW8gbMaw4budbmcgdHLDqm4gbeG7mXQgbmfDoHksIG5oxrBuZyBraMOhYyBs4bqhIGzDoCBraG/huqNuZyB0aOG7nWkgZ2lhbiBkw6BpDQp0aMaw4budbmcgdGjDtG5nIGThu6VuZyBoxqFuLiBDw6FjIMSR4buLbmggY2jhur8gbmfDom4gaMOgbmcgdGjDrWNoIGNodSBrw6wgdGjhu51pIGdpYW4gMiB0deG6p24uIE5oaeG7gXUNCmPDtG5nIHR5IGLDoW8gY8OhbyBWYVIgdGhlbyBxdcO9IHbDoCBuxINtIMSR4buDIHRow61jaCBo4bujcCB24bubaSBjaHUga+G7syBiw6FvIGPDoW8gaG/huqF0IMSR4buZbmcNCmtpbmggZG9hbmguIE5nw6JuIGjDoG5nIMSR4bqndSB0xrAsIGPDoWMgcXXhu7kgxJHhuqd1IGPGoSwgdsOgIG5o4buvbmcgbmjDoCBnaWFvIGThu4tjaCAoZGVhbGVyKSBjw7MgduG6uw0KdGjDrWNoIMSRbyBsxrDhu51uZyBWYVIgdGhlbyBuZ8OgeSwgY8OzIGzhur0gdsOsIHbhu4sgdGjhur8gY+G7p2EgaOG7jSBjw7MgbeG7qWMgbHXDom4gY2h1eeG7g24gduG7kW4gY2FvLg0KQuG6pXQga+G7gyBraG/huqNuZyB0aOG7nWkgZ2lhbiBuw6BvIMSRxrDhu6NjIGNo4buNbiwgbuG6v3UgdGjhu51pIGdpYW4gY8OgbmcgZMOgaSwgY29uIHPhu5EgVmFSIHPhur0gY8OgbmcNCmzhu5tuIHbDrCB0cuG7jW5nIHPhu5EgY+G7p2EgbeG7qWMgbOG7lyBtb25nIMSR4bujaSB0aGF5IMSR4buVaSB0cuG7sWMgdGnhur9wIHbhu5tpIHRo4budaSBnaWFuIGTDoGkgbcOgIG7DsyDEkW8NCmzGsOG7nW5nLiBN4buZdCBjw6EgbmjDom4gaGF5IG3hu5l0IHThu5UgY2jhu6ljIGNo4buLdSB0csOhY2ggbmhp4buHcCBxdeG6o24gdHLhu4sgcuG7p2kgcm8gc+G6vSBjaOG7jW4ga2hv4bqjbmcNCnRo4budaSBnaWFuIHJpw6puZy4NCg0KPC9kaXY+DQoNCg0KIyMjIMSQxqFuIHbhu4sgdGnhu4FuIHThu4cNCg0KPGRpdiBhbGlnbj0ianVzdGlmeSI+DQpHacOhIHRy4buLIHThuqFpIHLhu6dpIHJvIGzDoCBt4buZdCBwaMawxqFuZyBwaMOhcCDEkcawYSByYSBt4buZdCBjw6FpIG5ow6xuIHThu5VuZyB0aOG7gyB24buBIHLhu6dpIHJvIHRow7RuZyBxdWENCnjDoWMgc3XhuqV0IHbDoCBj4bqjIG5o4buvbmcgdMOtbmggdG/DoW4gxJHhu4tuaCBsxrDhu6NuZy4gTsOzaSBjw6FjaCBraMOhYywgVmFSIGzDoCBt4buZdCBz4buxIMSRbyBsxrDhu51uZw0KYuG6sW5nIHRp4buBbiB24buBIHLhu6dpIHJvLiBOaMawIHbhuq15LCB2aeG7h2MgbOG7sWEgY2jhu41uIMSRxqFuIHbhu4sgdGnhu4FuIHThu4cgbMOgIHLhuqV0IHF1YW4gdHLhu41uZyDEkeG7gyB0cuG6oyBs4budaQ0KY2hvIGPDonUgaOG7j2k6IOKAnFPhu5EgdGnhu4FuIG3DoCB0w7RpIGPDsyB0aOG7gyBi4buLIGzhu5cgdHJvbmcgbeG7mXQga2hv4bqjbmcgdGjhu51pIGdpYW4gbMOgIGJhbyBuaGnDqnU/4oCdLg0KPC9kaXY+DQoNCiMgQ2jGsMahbmcgMy4gUEjGr8agTkcgUEjDgVAgTkdIScOKTiBD4buoVQ0KDQojIyBQaMawxqFuZyBwaMOhcCBuZ2hpw6puIGPhu6l1DQoNCg0KPGRpdiBhbGlnbj0ianVzdGlmeSI+DQpDw7Mgbmhp4buBdSBwaMawxqFuZyBwaMOhcCDEkeG7gyB0w61uaCB0b8OhbiBnacOhIHRy4buLIHLhu6dpIHJvIGPhu6dhIGRhbmggbeG7pWMgYmFvIGfhu5NtOiBwaMawxqFuZyBwaMOhcCBwaMawxqFuZyBzYWkgLSBoaeG7h3AgcGjGsMahbmcgc2FpLCBtw7QgcGjhu49uZyBs4buLY2ggc+G7rSwgbcO0IHBo4buPbmcgTW9udGUgQ2FybG8sLi5Cw6BpIHRp4buDdSBsdeG6rW4gbOG7sWEgY2jhu41uIHBoxrDGoW5nIHBow6FwIG3DtCBwaOG7j25nIE1vbnRlIENhcmxvIMSR4buDIHTDrW5oIGdpw6EgdHLhu4sgcuG7p2kgcm8gZGFuaCBt4bulYyDEkeG6p3UgdMawIG5ow7NtIG5nw6BuaCBCxJBTLlbhu4EgdOG7kW5nIHF1w6F0LCBtw7QgcGjhu49uZyBNb250ZSBDYXJsbyDEkcawYSByYSBuaOG7r25nIGvhur90IHF14bqjIG5n4bqrdSBuaGnDqm4gbsOqbiB0YQ0KY8OzIHRo4buDIGtp4buDbSB0cmEgY8OhaSBnw6wgeOG6o3kgcmEgc+G6vSB04bqhbyBsb+G6oWkgcuG7p2kgcm8gbmjGsCB0aOG6vyBuw6BvLiBQaMawxqFuZyBwaMOhcCBuw6B5IMSRxrDhu6NjIHPhu60NCmThu6VuZyBy4buZbmcgcsOjaSBj4bqjIHRyb25nIG5oaeG7gXUgbmfDoG5oIGtob2EgaOG7jWMgY8WpbmcgbmjGsCB0cm9uZyBraW5oIGRvYW5oIMSR4buDIHBow6F0IGhp4buHbg0KcmEgbmhp4buBdSBuaOG7r25nIHbhuqVuIMSR4buBIGtow6FjIG5oYXUuIFRyb25nIHRo4bq/IGdp4bubaSB0w6BpIGNow61uaCBuaOG7r25nIG7Eg20gZ+G6p24gxJHDonksIMSRw6J5DQrEkcOjIHRy4bufIHRow6BuaCBt4buZdCBrxKkgdGh14bqtdCBj4buxYyBrw6wgcXVhbiB0cuG7jW5nIMSR4buDIMSRbyBsxrDhu51uZyBy4bunaSByby4gTW9udGUgQ2FybG8gxJHGsGEgcmENCm5oaeG7gXUga+G6v3QgcXXhuqMgbmfhuqt1IG5oacOqbiBuaOG7nSB2w6BvIG5o4buvbmcgcGjDom4gcGjhu5FpIHjDoWMgc3XhuqV0IMSRxrDhu6NjIGdp4bqjIMSR4buLbmggdsOgIG3hu5l0DQpsb+G6oXQgbmjhu69uZyBiaeG6v24gc+G7kSDEkeG6p3UgdsOgby4gQ2jDum5nIHRhIHRoZW8gxJHDsyBwaMOibiB0w61jaCBuaOG7r25nIGvhur90IHF14bqjIMSR4buDIHTDrG0gcmEgcuG7p2kgcm8NCmxpw6puIHF1YW4gduG7m2kgbmjhu69uZyBz4buxIGtp4buHbi4gS2hpIMSRw6FuaCBnacOhIFZhUiwgdGEgZMO5bmcgbcO0IHBo4buPbmcgTW9udGUgQ2FybG8gxJHhu4MNCsSRxrBhIHJhIG5o4buvbmcgVFNTTCBkYW5oIG3hu6VjIG3hu5l0IGPDoWNoIG5n4bqrdSBuaGnDqm4uIFNhdSDEkcOzIHThu5VuZyBo4bujcCBuaOG7r25nIFRTU0wNCm7DoHkgdGjDoG5oIG3hu5l0IHTDs20gdOG6r3QgYuG6sW5nIHBow6JuIHBo4buRaSB04burIMSRw7MgY2jDum5nIHRhIGPDsyB0aOG7gyB4w6FjIMSR4buLbmggdOG6oWkgbeG7qWMgZMaw4bubaSA1JSAoaGF5IDElLCBu4bq/dSB0aMOtY2ggaOG7o3ApIGPhu6dhIG5o4buvbmcga+G6v3QgcXXhuqMgVFNTTCB4deG6pXQgaGnhu4duLiBUaeG6v3AgxJHDsyB0YSB0aOG7gyBoaeG7h24NCmLhurFuZyBnacOhIHRy4buLIGPhu6dhIGRhbmggbeG7pWMgxJHhu4MgxJHhuqF0IMSRxrDhu6NjIGvhur90IHF14bqjIFZhUi4NCg0KVHLDrG5oIHThu7EgdGjhu7FjIGhp4buHbjoNCg0KLSBYw6FjIMSR4buLbmggcGjDom4gcGjhu5FpIHbDoCB0aOG7sWMgaGnhu4duIG3DtCBwaOG7j25nIGNobyBjw6FjIGJp4bq/biDEkeG6p3UgdsOgbyAoQsOgaSB0aeG7g3UgbHXhuq1uIGPDsyBiaeG6v24gxJHhuqd1IHbDoG8gbMOgIGdpw6EgY+G7lSBwaGnhur91LCB0cm9uZyB0csaw4budbmcgaOG7o3Aga2jDtG5nIHTDrG0gcmEgcGjDom4gcGjhu5FpIGNobyBjw6FjIGJp4bq/biDEkeG6p3UgdsOgbywgdMOhYyBnaeG6oyBz4bq9IHPhu60gZOG7pW5nIG3DtCBow6xuaCBHZW9tZXRyaWMgQnJvd25pYW4gTW90aW9uIMSR4buDIHRo4buxYyBoaeG7h24gbcO0IHBo4buPbmcgZ2nDoSBj4buVIHBoaeG6v3UpDQoNCi0gWMOhYyDEkeG7i25oIG3DtCBow6xuaCBtw7QgcGjhu49uZy4NCg0KLSBUaGnhur90IGzhuq1wIGThu7EgYsOhbyB54bq/dSB04buRIMSR4bqndSByYSBsw6AgdOG7tyBzdeG6pXQgc2luaCBs4budaSBj4bunYSBkYW5oIG3hu6VjIHbhu5tpIHPhu5EgcXVhbiBzw6F0IGzDoCAxMDAwMC4gVOG7qyDEkcOzIHTDrW5oIGdpw6EgdHLhu4sgVmFSIGPhu6dhIGRhbmggbeG7pWMgdsOgIHRo4buRbmcga8OqIGvhur90IHF14bqjLg0KDQoNCjwvZGl2Pg0KDQojIyMgTcO0IHBo4buPbmcgY8OhYyBiaeG6v24gxJHhuqd1IHbDoG8gdGhlbyBtw7QgaMOsbmggR0JNDQoNCkLDoGkgdGnhu4N1IGx14bqtbiBz4butIGThu6VuZyBtw7QgaMOsbmggR0JNIMSR4buDIG3DtCBwaOG7j25nIGdpw6EgY+G7lSBwaGnhur91IGTGsOG7m2kgZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbiB2w6AgcGjDom4gcGjhu5FpIGdow6lwDQoNCk3hu5l0IHF1w6EgdHLDrG5oIG5n4bqrdSBuaGnDqm4gdGjhu51pIGdpYW4gbGnDqm4gdOG7pWMge0J0IDogdCA+IDB9IGzDoCBt4buZdCBDaHV54buDbiDEkeG7mW5nIEJyb3duIChxdcOhIHRyw6xuaCBXaWVuZXIpIG7hur91IHbhu5tpIG3hu5l0IHPhu5EgaOG6sW5nIHPhu5EgdGjhu7FjIM61XjIgbsOgbyDEkcOzLCBuw7MgdGhv4bqjIG3Do24gY8OhYyB0w61uaCBjaOG6pXQgc2F1Og0KDQotIEIwID0gMA0KLSBCdCBsacOqbiB04bulYyB0cm9uZyBraG/huqNuZyB0aOG7nWkgZ2lhbiB0ID4gMA0KDQpW4bubaSB0ID4gMCwgc+G7sSB0aGF5IMSR4buVaSAkJFxEZWx0YSBCID0gQl97dCtcRGVsdGEgdH0tQl90JCQgdHJvbmcga2hv4bqjbmcgdGjhu51pIGdpYW4gJCRcRGVsdGEgdCQkIMSRxrDhu6NjIHjDoWMgxJHhu4tuaA0KDQoNCg0KDQoNCiQkXERlbHRhIEIgPSBaIFxzcXJ0e1xEZWx0YSB0fSQkDQpaIGzDoCBiaeG6v24gbmfhuqt1IG5oacOqbiBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4gTigwLDEpDQoNCkdpw6EgdHLhu4sg4oiGQiDEkeG7kWkgduG7m2kgMiBraG/huqNuZyB0aOG7nWkgZ2lhbiBnaWFuIG5n4bqvbiBi4bqldCBrw6wgbMOgIMSR4buZYyBs4bqtcCAoVsOtIGThu6U6IEJ0K+KIhnQg4oCTIEJ0IHbDoCBCcyviiIZzIOKAkyBCcyB24bubaSAwIOKJpCBzIOKJpCB0IGzDoCDEkeG7mWMgbOG6rXAgKQ0KDQpEbyDEkcOzLCB0YSBjw7MgY8O0bmcgdGjhu6ljIG3DtCBwaOG7j25nIEJNIChCcm93biBtb3Rpb24pIGzDoDoNCg0KJCQNCkJfe059PVxzcXJ0e1xmcmFje3R9IHtufX1cc3VtX3tpPTF9XntufSBaX2k9XHNxcnR7XGZyYWN7dH0ge259fUZfe1p9KHopDQokJA0KdHJvbmcgxJHDsyANCg0KKiBCbiBsw6AgYmnhur9uIG5n4bqrdSBuaGnDqm4gY2h1eeG7g24gxJHhu5luZyBCcm93biBjaHXhuqluICh0aGUgc3RhbmRhcmQgQk0gcmFuZG9tIHZhcmlhYmxlKS4NCg0KKiDiiJp0L24gbMOgIMSR4buZIGzhu4djaCBjaHXhuqluIGPhu6dhIEJNLCBaaShpID0gMSwgMiwgLi4uLCBuKSDEkcaw4bujYyBwaMOibiBwaOG7kWkgdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbiBOKDAsIDEpLg0KDQogVOG7qyDEkcOieSBjw7MgdGjhu4Mgc3V5IHJhOg0KDQoNCg0KJCQNCkJfe05OfT1cc3FydHtcZnJhY3t0fSB7bn19Rl97WjF9KHoxKQ0KJCQNCg0KJCQNCkJfe05MfT1cc3FydHtcZnJhY3t0fSB7bn19Rl97WjJ9KHoyKQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KKiBCTk4gbMOgIG3hu5l0IGJp4bq/biBCTSBnaMOpcCBnaeG7r2EgaGFpIHBow6JuIHBo4buRaSBjaHXhuqluIGxpw6puIHThu6VjDQoqIEJOTCBsw6AgbeG7mXQgYmnhur9uIEJNIGdow6lwIGdp4buvYSBwaMOibiBwaOG7kWkgY2h14bqpbiB2w6AgcGjDom4gcGjhu5FpIExhcGxhY2UNCiogRlppICh6aSkgduG7m2kgaSA9IDEsIDIgxJHhu4tuaCBuZ2jEqWEgdOG7lW5nIHTDrWNoIGzFqXkgY+G7p2EgY8OhYyBwaMOibiBwaOG7kWkgZ2jDqXAgdMawxqFuZyDhu6luZy4NCg0KROG6q24geHXhuqV0IG3DtCBow6xuaCBDaHV54buDbiDEkeG7mW5nIEJyb3duIGjDrG5oIGjhu41jIChHQk0pDQoNCkdp4bqjIHPhu60gU3QgYmnhu4N1IHRo4buLIGzhu6NpIG5odeG6rW4gY+G7lSBwaGnhur91IHThuqFpIHRo4budaSDEkWnhu4NtIHQuIE3DtCBow6xuaCBHQk0gdGjhu49hIG3Do24gcGjGsMahbmcgdHLDrG5oIHZpIHBow6JuIG5n4bqrdSBuaGnDqm4gKFNERSkgc2F1IMSRw6J5Og0KDQokJCBkU190ID0gXHRoZXRhIFNfdCBkdCArIFxlcHNpbG9uIFNfdGRCX3QgJCQNClRyb25nIMSRw7M6DQoNCiogZFN0IGzDoCBz4buxIHRoYXkgxJHhu5VpIGdpw6EgY+G7lSBwaGnhur91DQoqIHRoZXRhIGzDoCB0aGFtIHPhu5EgdHLGsOG7o3QgKGzDoCB0aMOgbmggcGjhuqduIHjDoWMgxJHhu4tuaCwgxJFp4buBdSBraGnhu4NuIHh1IGjGsOG7m25nIGPhu6dhIHF14bu5IMSR4bqhbyBCTSkgKGdp4bqjIMSR4buLbmggdGhldGEgPSA1JSkNCiogZXBzaWxvbiBsw6AgdGhhbSBz4buRIGJp4bq/biDEkeG7mW5nIChsw6AgdGjDoG5oIHBo4bqnbiBraMO0bmcgY2jhuq9jIGNo4bqvbiwgxJFp4buBdSBraGnhu4NuIHTDoWMgxJHhu5luZyBuZ+G6q3Ugbmhpw6puIHRyb25nIHF14bu5IMSR4bqhbykoZ2nhuqMgxJHhu4tuaCBlcHNpbG9uID0gMTUlKQ0KKiBkQnQgbMOgIHPhu7EgZ2lhIHTEg25nIChpbmNyZW1lbnQpIGPhu6dhIEJNLg0KDQpTYXUga2hpIHRo4buxYyBoaeG7h24gbeG7mXQgbG/huqF0IGJp4bq/biDEkeG7lWkgdGEgxJHGsOG7o2Mga+G6v3QgcXXhuqMgKEvhur90IHF14bqjIGNo4bupbmcgbWluaCDhu58gcGjhu6UgbOG7pWMpIG5oxrAgc2F1Og0KDQokJA0KU190PSBTX3swfVxleHAoKFx0aGV0YS1cZnJhY3tcZXBzaWxvbl4yfXsyfSl0ICsgXGVwc2lsb24gQl97dH0pICAgICAgICAgKDEpDQokJCANCg0KU+G7rSBk4bulbmcgbcO0IGjDrG5oIEdCTSB0cm9uZyBQaMawxqFuZyB0csOsbmggKDEpLCB0YSBjw7MgbcO0IGjDrG5oIEdCTSBkxrDhu5tpIGdp4bqjIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4gdsOgIHBow6JuIHBo4buRaSBnaMOpcCBuaMawIHNhdToNCg0KKipNw7QgaMOsbmggMToqKg0KDQokJA0KU197KE4pX3R9ID0gU197MH1cZXhwKChcdGhldGEtXGZyYWN7XGVwc2lsb25eMn17Mn0pdCArIFxlcHNpbG9uIEJfe059KQ0KJCQgDQoNCioqTcO0IGjDrG5oIDI6KioNCg0KICQkDQpTX3soTk4pX3R9ID0gU197MH0gXGV4cFxsZWZ0KChcdGhldGEtXGZyYWN7XGVwc2lsb25eMn17Mn0pdCArIFxlcHNpbG9uIEJfe05OfVxyaWdodCkNCiQkDQoNCioqTcO0IGjDrG5oIDM6KioNCg0KJCQNClNfeyhOTClfdH0gPSBTX3swfSBcZXhwXGxlZnQoKFx0aGV0YS1cZnJhY3tcZXBzaWxvbl4yfXsyfSl0ICsgXGVwc2lsb24gQl97Tkx9XHJpZ2h0KQ0KJCQNCg0KDQpUcm9uZyDEkcOzOg0KDQoqIFMoTnQpLCBTKE5OdCksIFMoTkx0KSBsw6AgZ2nDoSBj4buVIHBoaeG6v3UgdOG6oWkgdGjhu51pIMSRaeG7g20gdCDhu6luZyB24bubaSBnaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluLCBwaMOibiBwaOG7kWkgZ2jDqXAuDQoNCiMjIyBNw7QgaMOsbmggdMOtbmggVmFSIGPhu6dhIGRhbmggbeG7pWMgDQoNClTGsMahbmcg4bupbmcgduG7m2kgMyBwaMawxqFuZyB0csOsbmggbcO0IHBo4buPbmcgZ2nDoSBj4buVIHBoaeG6v3UgdGhlbyBHQk0gZMaw4bubaSBnaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluLCBwaMOibiBwaOG7kWkgZ2jDqXAgdGEgY8OzIMSRxrDhu6NjIDMga+G6v3QgcXXhuqMgVmFSIGPhu6dhIGRhbmggbeG7pWMgdMawxqFuZyDhu6luZy4NCiQkDQpWYVIgPSBWX3twfSpwZXJjZW50aWxlKFJfUCwgXGFscGhhKQ0KJCQNCiBUcm9uZyDEkcOzOg0KIA0KKiBWUDoga2hv4bqjbiDEkeG6p3UgdMawIGPhu6dhIGRhbmggbeG7pWMgKDEwMC4wMDAkKQ0KKiBhIGzDoCBt4bupYyB4w6FjIHN14bqldCDhu6luZyB24bubaSDEkeG7mSB0aW4gY+G6rXkgxJFhbmcgeMOpdCAoOTAlOyA5NSU7IDk3LDUlKQ0KKiBSKFApIGzDoCBjaHXhu5dpIHThu7cgc3XhuqV0IGzhu6NpIG5odeG6rW4gY+G7p2EgZGFuaCBt4bulYyDEkcaw4bujYyB0w61uaCB0b8OhbiB0aGVvIGPDtG5nIHRo4bupYyBzYXUsIHNhdSDEkcOzIMSRxrDhu6NjIHPhuq9wIHjhur9wIHRoZW8gdGjhu6kgdOG7qSB0xINuZyBk4bqnbi4NCg0KJCQNClJfe1B9PVxzdW1fe2k9MX1ee259IHdfe2l9Ul97aX0NCiQkDQpUcm9uZyDEkcOzOg0KDQoqIHdpOiB04bu3IHRy4buNbmcgY+G7p2EgdMOgaSBz4bqjbiBpIHRyb25nIGRhbmggbeG7pWMNCih3aT0oMC4yLCAwLjI1LCAwLjEsIDAuMSwgMC4yLCAwLjE1KSB0xrDGoW5nIOG7qW5nIHbhu5tpIG3DoyBDUCAoRElHLCBEWEcsIE5WTCwgVkhNLCBLREgsIFZJQykpDQoqIFJpOiB04bu3IHN14bqldCBs4bujaSBuaHXhuq1uIGPhu6dhIHTDoGkgc+G6o24gaQ0KKiBuOiBz4buRIGPhu5UgcGhp4buDdSB0cm9uZyBkYW5oIG3hu6VjIChuID0gNikNCg0KDQoNCiMjIEThu68gbGnhu4d1IG5naGnDqm4gY+G7qXUNCg0KPGRpdiBhbGlnbj0ianVzdGlmeSI+ROG7ryBsaeG7h3UgZ2nDoSDEkcOzbmcgY+G7rWEgY+G7p2EgNiBtw6MgY+G7lSBwaGnhur91IG5ow7NtIG5nw6BuaCBi4bqldCDEkeG7mW5nIHPhuqNuIGJhbyBn4buTbTogRElHLCBEWEcsIE5WTCwgVkhNLCBLREggdsOgIFZJQy4gROG7ryBsaeG7h3UgxJHGsOG7o2MgdGh1IHRo4bqtcCB04burIGludmVzdGluZy5jb20gdHJvbmcgZ2lhaSDEkW/huqFuIDAyLzAxLzIwMTkgxJHhur9uIDI0LzAzLzIwMjMgduG7m2kgMS4wNTUgcXVhbiBzw6F0LiA8L2Rpdj4NCg0KKiBLREg6IEPDtG5nIHR5IGPhu5UgcGjhuqduIMSQ4bqndSB0xrAgdsOgIGtpbmggZG9hbmggbmjDoCBLaGFuZyDEkGnhu4FuIA0KKiBESUc6IFThu5VuZyBjw7RuZyB0eSBD4buVIHBo4bqnbiDEkOG6p3UgdMawIFBow6F0IHRyaeG7g24gWMOieSBk4buxbmcNCiogRFhHOiBDw7RuZyB0eSBj4buVIHBo4bqnbiBU4bqtcCDEkW/DoG4gxJDhuqV0IFhhbmgNCiogVkhNOiBDw7RuZyB0eSBj4buVIHBo4bqnbiBWaW5ob21lcw0KKiBOVkw6IEPDtG5nIHR5IGPhu5UgcGjhuqduIFThuq1wIMSRb8OgbiDEkOG6p3UgdMawIMSQ4buLYSDhu5FjIE5vIFZhDQoqIFZJQzogVOG6rXAgxJFvw6BuIFZJTkdST1VQDQoNCiMgQ2jGsMahbmcgNC4gS+G6vlQgUVXhuqIgTkdIScOKTiBD4buoVQ0KDQojIyBUaOG7kW5nIGvDqiBtw7QgdOG6ow0KDQoNCmBgYHtyfQ0KY2FtPC1maWxlLmNob29zZSgpDQpybTwtcmVhZF9leGNlbChjYW0pDQpybTE8LSBybSAlPiUgc2VsZWN0KEtESCwgRElHLCBEWEcsIFZITSwgTlZMLCBWSUMpDQpzdW1tYXJ5KHJtMSkNCg0KYGBgDQpU4burIGvhur90IHF14bqjIHRo4buRbmcga8OqIG3DtCB04bqjIGNobyB0aOG6pXk6DQoNCkdpw6EgY+G7lSBwaGnhur91IEtESCBjw7MgZ2nDoSB0cuG7iyBuaOG7jyBuaOG6pXQgbMOgIDE0MTI0OyBnacOhIHRy4buLIGzhu5tuIG5o4bqldCBsw6AgNTE2MzY7IGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggbMOgIDI3MTQ0Ow0KZ2nDoSB0cuG7iyB04bupIHBow6JuIHbhu4sgdGjhu6kgbmjhuqV0IGzDoCAxODgzMywgZ2nDoSB0cuG7iyB0cnVuZyB24buLIGzDoCAyNDAwMCwgZ2nDoSB0cuG7iyBwaMOibiB24buLIHRo4bupIGJhIGzDoCAzNTUwMCANCg0KR2nDoSBj4buVIHBoaeG6v3UgRElHIGPDsyBnacOhIHRy4buLIG5o4buPIG5o4bqldCBsw6AgNjU5MjsgZ2nDoSB0cuG7iyBs4bubbiBuaOG6pXQgbMOgIDk4MTk3OyBnacOhIHRy4buLIHRydW5nIGLDrG5oIGzDoCAyMjE5NDtnacOhIHRy4buLIHThu6kgcGjDom4gduG7iyB0aOG7qSBuaOG6pXQgbMOgIDg2NTEsIGdpw6EgdHLhu4sgdHJ1bmcgduG7iyBsw6AgMTQ4MDAsIGdpw6EgdHLhu4sgcGjDom4gduG7iyB0aOG7qSBiYSBsw6AgMjcwNDENCg0KR2nDoSBj4buVIHBoaeG6v3UgRFhHIGPDsyBnacOhIHRy4buLIG5o4buPIG5o4bqldCBsw6AgNjczOTsgZ2nDoSB0cuG7iyBs4bubbiBuaOG6pXQgbMOgIDQ2NzUwOyBnacOhIHRy4buLIHRydW5nIGLDrG5oIGzDoCAxNzY3NTsgZ2nDoSB0cuG7iyB04bupIHBow6JuIHbhu4sgdGjhu6kgbmjhuqV0IGzDoCAxMTgwMCwgZ2nDoSB0cuG7iyB0cnVuZyB24buLIGzDoCAxNDkwMCwgZ2nDoSB0cuG7iyB04bupIHBow6JuIHbhu4sgdGjhu6kgYmEgbMOgIDIxMTA5DQoNCkdpw6EgY+G7lSBwaGnhur91IFZITSBjw7MgZ2nDoSB0cuG7iyBuaOG7jyBuaOG6pXQgbMOgIDQwOTAwOyBnacOhIHRy4buLIGzhu5tuIG5o4bqldCBsw6AgODg3MjI7IGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggbMOgIDY0OTc3OyBnacOhIHRy4buLIHThu6kgcGjDom4gduG7iyB0aOG7qSBuaOG6pXQgbMOgIDU4MjEyLCBnacOhIHRy4buLIHRydW5nIHbhu4sgbMOgIDY0OTA1LCBnacOhIHRy4buLIHThu6kgcGjDom4gduG7iyB0aOG7qSBiYSBsw6AgNzM0OTENCg0KR2nDoSBj4buVIHBoaeG6v3UgTlZMIGPDsyBnacOhIHRy4buLIG5o4buPIG5o4bqldCBsw6AgMTAyNTA7IGdpw6EgdHLhu4sgbOG7m24gbmjhuqV0IGzDoCA5MjM2NjsgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBsw6AgNDk1MTY7OyBnacOhIHRy4buLIHThu6kgcGjDom4gduG7iyB0aOG7qSBuaOG6pXQgbMOgIDMxOTMyLCBnacOhIHRy4buLIHRydW5nIHbhu4sgbMOgIDM1MjE0LCBnacOhIHRy4buLIHThu6kgcGjDom4gduG7iyB0aOG7qSBiYSBsw6AgNzgwMDANCg0KR2nDoSBj4buVIHBoaeG6v3UgVklDIGPDsyBnacOhIHRy4buLIG5o4buPIG5o4bqldCBsw6AgNTI1MDA7IGdpw6EgdHLhu4sgbOG7m24gbmjhuqV0IGzDoCAxMjgwMDsgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBsw6AgOTAxMDQ7OyBnacOhIHRy4buLIHThu6kgcGjDom4gduG7iyB0aOG7qSBuaOG6pXQgbMOgIDc4ODczLCBnacOhIHRy4buLIHRydW5nIHbhu4sgbMOgIDkzNDIyLCBnacOhIHRy4buLIHThu6kgcGjDom4gduG7iyB0aOG7qSBiYSBsw6AgMTA0MDAwDQoNCg0KU2F1IMSRw6J5IHTDtGkgc+G6vSDEkWkga2nhu4NtIMSR4buLbmggbeG7mXQgc+G7kSBwaMOibiBwaOG7kWkgdGjDtG5nIGThu6VuZyBjaG8gNiBiaeG6v24gbsOgeS4NCg0KIyMgWMOhYyDEkeG7i25oIHBow6JuIHBo4buRaSBjaG8gY8OhYyBiaeG6v24gxJHhuqd1IHbDoG8NCg0KIyMjIEJp4bq/biBLREgNCg0KVuG6vSDEkeG7kyB0aOG7iyBoaXN0b2dyYW0NCg0KDQpgYGB7cn0NCmhpc3Qocm0xJEtESCkNCmBgYA0KDQojIyMjIEtp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCg0KS2nhu4NtIMSR4buLbmggU0hhcGlyby1XaWxrIFRlc3QNCg0KYGBge3J9DQpzaGFwaXJvLnRlc3Qocm0xJEtESCkNCmBgYA0KR2nhuqMgdGh1eeG6v3QgSDA6IETDo3kgc+G7kSBsaeG7h3UgZ2nDoSBj4buVIHBoaeG7g3UgS0RIIGPDsyBwaMOibiBwaOG7kWkgIGNodeG6qW4NCg0KVuG7m2kgcHZhbHVlIDwgMSUgLCBiw6FjIGLhu48gSDAgbsOqbiBkw6N5IHPhu5EgbGnhu4d1IG7DoHkga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQojIyMjIEtp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBsb2dhIGNodeG6qW4NCg0KDQpgYGB7cn0NCmtzLnRlc3Qocm0xJEtESCwgeSA9ICJwbG5vcm0iLCBtZWFubG9nID0gbWVhbihsb2cocm0xJEtESCkpLCBzZGxvZyA9IHNkKGxvZyhybTEkS0RIKSkpDQpgYGANCg0KR2nhuqMgdGh1eeG6v3QgSDA6IETDo3kgc+G7kSBsaeG7h3UgZ2nDoSBj4buVIHBoaeG7g3UgS0RIIGPDsyBwaMOibiBwaOG7kWkgbG9nYSBjaHXhuqluDQoNClbhu5tpIHB2YWx1ZSA8IDElICwgYsOhYyBi4buPIEgwIG7Dqm4gZMOjeSBz4buRIGxp4buHdSBuw6B5IGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIGxvZ2EgY2h14bqpbg0KDQoNCiMjIyBCaeG6v24gRElHDQoNClbhur0gxJHhu5MgdGjhu4sgaGlzdG9ncmFtDQpgYGB7cn0NCmhpc3Qocm0xJERJRykNCmBgYA0KDQojIyMjIEtp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCg0KS2nhu4NtIMSR4buLbmggU0hhcGlyby1XaWxrIFRlc3QNCmBgYHtyfQ0Kc2hhcGlyby50ZXN0KHJtMSRESUcpDQpgYGANCkdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGdpw6EgY+G7lSBwaGnhu4N1IERJRyBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KVuG7m2kgcHZhbHVlIDwgMSUgLCBiw6FjIGLhu48gSDAgbsOqbiBkw6N5IHPhu5EgbGnhu4d1IG7DoHkga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQojIyMjIEtp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBsb2dhIGNodeG6qW4NCg0KYGBge3J9DQprcy50ZXN0KHJtMSRESUcsIHkgPSAicGxub3JtIixtZWFubG9nID0gbWVhbihsb2cocm0xJERJRykpLCBzZGxvZyA9IHNkKGxvZyhybTEkRElHKSkpDQpgYGANCg0KR2nhuqMgdGh1eeG6v3QgSDA6IETDo3kgc+G7kSBsaeG7h3UgZ2nDoSBj4buVIHBoaeG7g3UgRElHIGPDsyBwaMOibiBwaOG7kWkgbG9nYSBjaHXhuqluDQoNClbhu5tpIHB2YWx1ZSA8IDElICwgYsOhYyBi4buPIEgwIG7Dqm4gZMOjeSBz4buRIGxp4buHdSBuw6B5IGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIGxvZ2EgY2h14bqpbg0KDQojIyMjIEtp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBtxakNCg0KYGBge3J9DQprcy50ZXN0KHJtMSRESUcsIHkgPSAicGV4cCIsIHJhdGUgPSAxL21lYW4ocm0xJERJRykpDQpgYGANCkdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGdpw6EgY+G7lSBwaGnhu4N1IERJRyBjw7MgcGjDom4gcGjhu5FpIG3FqQ0KDQpW4bubaSBwdmFsdWUgPCAxJSAsIGLDoWMgYuG7jyBIMCBuw6puIGTDo3kgc+G7kSBsaeG7h3UgbsOgeSBraMO0bmcgY8OzIHBow6JuIHBo4buRaSBtxakNCg0KIyMjIEJp4bq/biBEWEcNCg0KVuG6vSDEkeG7kyB0aOG7iyBoaXN0b2dyYW0NCmBgYHtyfQ0KaGlzdChybTEkRFhHKQ0KYGBgDQoNCiMjIyMgS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KS2nhu4NtIMSR4buLbmggU0hhcGlyby1XaWxrIFRlc3QNCmBgYHtyfQ0Kc2hhcGlyby50ZXN0KHJtMSREWEcpDQpgYGANCkdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGdpw6EgY+G7lSBwaGnhu4N1IERYRyBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KVuG7m2kgcHZhbHVlIDwgMSUgLCBiw6FjIGLhu48gSDAgbsOqbiBkw6N5IHPhu5EgbGnhu4d1IG7DoHkga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQojIyMjIEtp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBsb2dhIGNodeG6qW4NCg0KYGBge3J9DQprcy50ZXN0KHJtMSREWEcsIHkgPSAicGxub3JtIixtZWFubG9nID0gbWVhbihsb2cocm0xJERYRykpLCBzZGxvZyA9IHNkKGxvZyhybTEkRFhHKSkpDQpgYGANCkdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGdpw6EgY+G7lSBwaGnhu4N1IERYRyBjw7MgcGjDom4gcGjhu5FpIGxvZ2EgIGNodeG6qW4NCg0KVuG7m2kgcHZhbHVlIDwgMSUgLCBiw6FjIGLhu48gSDAgbsOqbiBkw6N5IHPhu5EgbGnhu4d1IG7DoHkga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgbG9nYSBjaHXhuqluDQoNCiMjIyMgS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIG3FqQ0KDQpgYGB7cn0NCmtzLnRlc3Qocm0xJERYRywgeSA9ICJwZXhwIiwgcmF0ZSA9IDEvbWVhbihybTEkRFhHKSkNCmBgYA0KR2nhuqMgdGh1eeG6v3QgSDA6IETDo3kgc+G7kSBsaeG7h3UgZ2nDoSBj4buVIHBoaeG7g3UgRFhHIGPDsyBwaMOibiBwaOG7kWkgbcWpDQoNClbhu5tpIHB2YWx1ZSA8IDElICwgYsOhYyBi4buPIEgwIG7Dqm4gZMOjeSBz4buRIGxp4buHdSBuw6B5IGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIG3FqQ0KDQojIyMgQmnhur9uIFZITQ0KDQpW4bq9IMSR4buTIHRo4buLIGhpc3RvZ3JhbQ0KYGBge3J9DQpoaXN0KHJtMSRWSE0pDQpgYGANCg0KIyMjIyBLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQoNCg0KS2nhu4NtIMSR4buLbmggU0hhcGlyby1XaWxrIFRlc3QNCmBgYHtyfQ0Kc2hhcGlyby50ZXN0KHJtMSRWSE0pDQpgYGANCg0KR2nhuqMgdGh1eeG6v3QgSDA6IETDo3kgc+G7kSBsaeG7h3UgZ2nDoSBj4buVIHBoaeG7g3UgVkhNIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQpW4bubaSBwdmFsdWUgPCAxJSAsIGLDoWMgYuG7jyBIMCBuw6puIGTDo3kgc+G7kSBsaeG7h3UgbsOgeSBraMO0bmcgY8OzIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCiMjIyMgS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIGxvZ2EgY2h14bqpbg0KDQpgYGB7cn0NCmtzLnRlc3Qocm0xJFZITSwgeSA9ICJwbG5vcm0iLG1lYW5sb2cgPSBtZWFuKGxvZyhybTEkVkhNKSksIHNkbG9nID0gc2QobG9nKHJtMSRWSE0pKSkNCmBgYA0KR2nhuqMgdGh1eeG6v3QgSDA6IETDo3kgc+G7kSBsaeG7h3UgZ2nDoSBj4buVIHBoaeG7g3UgVkhNIGPDsyBwaMOibiBwaOG7kWkgbG9nYSAgY2h14bqpbg0KDQpW4bubaSBwdmFsdWUgPCA1JSAsIGLDoWMgYuG7jyBIMCBuw6puIGTDo3kgc+G7kSBsaeG7h3UgbsOgeSBraMO0bmcgY8OzIHBow6JuIHBo4buRaSBsb2dhIGNodeG6qW4NCg0KDQojIyMgQmnhur9uIE5WTA0KDQpW4bq9IMSR4buTIHRo4buLIGhpc3RvZ3JhbQ0KYGBge3J9DQpoaXN0KHJtMSROVkwpDQpgYGANCg0KIyMjIyBLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQoNCktp4buDbSDEkeG7i25oIFNIYXBpcm8tV2lsayBUZXN0DQpgYGB7cn0NCnNoYXBpcm8udGVzdChybTEkTlZMKQ0KYGBgDQpHaeG6oyB0aHV54bq/dCBIMDogRMOjeSBz4buRIGxp4buHdSBnacOhIGPhu5UgcGhp4buDdSBOVkwgY8OzIHBow6JuIHBo4buRaSBjaHXhuqluDQoNClbhu5tpIHB2YWx1ZSA8IDElICwgYsOhYyBi4buPIEgwIG7Dqm4gZMOjeSBz4buRIGxp4buHdSBuw6B5IGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KIyMjIyBLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgYmltb2RhbA0KDQpOaMOsbiB2w6BvIMSR4buTIHRo4buLIGhpc3RvZ3JhbSB0YSB0aOG6pXkgY8OzIGThuqFuZyAyIMSR4buJbmggLCDEkcOieSBjw7MgdGjhu4MgbMOgIGjDrG5oIGThuqFuZyBj4bunYSBwaMOibiBwaOG7kWkgYmltb2RhbC4gVHJvbmcgUiwga2jDtG5nIGPDsyBz4bq1biBwaMOibiBwaOG7kWkgYmltb2RhbCB0cm9uZyBow6BtIGtzLnRlc3QoKS4gRE8gxJHDsyB0w7RpIHPhu60gZOG7pW5nIGfDs2kgdGjGsCB2aeG7h24gIm1peHRvb2xzIiB0cm9uZyBSIMSR4buDIMaw4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggcGjDom4gcGjhu5FpIGjhu5duIGjhu6NwIHbDoCBraeG7g20gdHJhIHhlbSBjw7MgaGFpIHRow6BuaCBwaOG6p24gcGjDom4gcGjhu5FpIGhheSBraMO0bmcuDQpgYGB7cn0NCmZpdCA8LSBub3JtYWxtaXhFTShybTEkTlZMLCBrID0gMikNCg0Kc3VtbWFyeShmaXQpDQoNCmBgYA0KDQpL4bq/dCBxdeG6oyBuw6B5IGNobyBiaeG6v3QgbcO0IGjDrG5oIHBow6JuIHBo4buRaSBo4buXbiBo4bujcCBiaW1vZGFsIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBjw7MgaGFpIHRow6BuaCBwaOG6p24uIFRow6BuaCBwaOG6p24gMSBjw7MgdOG7tyBs4buHIHh14bqldCBoaeG7h24gbMOgIDAuNjM2MzMzLCBnacOhIHRy4buLIHRydW5nIGLDrG5oIGzDoCAzMjE5OS4yIHbDoCDEkeG7mSBs4buHY2ggY2h14bqpbiBsw6AgODQ3My42My4gVGjDoG5oIHBo4bqnbiAyIGPDsyB04bu3IGzhu4cgeHXhuqV0IGhp4buHbiBsw6AgMC4zNjM2NjcsIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggbMOgIDc5ODE1LjMgdsOgIMSR4buZIGzhu4djaCBjaHXhuqluIGzDoCA0Mzk2Ljk0LiBHacOhIHRy4buLIGxvZy1saWtlbGlob29kICgtMTE0NzcuMTUpIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIGto4bubcCBnaeG7r2EgbcO0IGjDrG5oIHbDoCBk4buvIGxp4buHdS4gTeG7qWMgxJHhu5kga2jhu5twIGPDoG5nIGNhbyBraGkgZ2nDoSB0cuG7iyBsb2ctbGlrZWxpaG9vZCBjw6BuZyBn4bqnbiAwIGhv4bq3YyBjw6BuZyBs4bubbi4gVHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHksIGdpw6EgdHLhu4sgbG9nLWxpa2VsaWhvb2Qgw6JtIGPDsyB0aOG7gyBjaOG7iSByYSBy4bqxbmcgbcO0IGjDrG5oIGtow7RuZyBraOG7m3AgaG/DoG4gdG/DoG4gduG7m2kgZOG7ryBsaeG7h3UuDQoNCg0KIyMjIEJp4bq/biBWSUMNCg0KVuG6vSBiaeG7g3UgxJHhu5MgaGlzdG9ncmFtDQpgYGB7cn0NCmhpc3Qocm0xJFZJQykNCmBgYA0KDQojIyMjIEtp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCg0KS2nhu4NtIMSR4buLbmggU0hhcGlyby1XaWxrIFRlc3QNCmBgYHtyfQ0Kc2hhcGlyby50ZXN0KHJtMSRWSUMpDQpgYGANCkdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGdpw6EgY+G7lSBwaGnhu4N1IFZJQyBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KVuG7m2kgcHZhbHVlIDwgMSUgLCBiw6FjIGLhu48gSDAgbsOqbiBkw6N5IHPhu5EgbGnhu4d1IG7DoHkga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQojIyMjIEtp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBsb2dhIGNodeG6qW4NCg0KYGBge3J9DQprcy50ZXN0KHJtMSRWSUMsIHkgPSAicGxub3JtIixtZWFubG9nID0gbWVhbihsb2cocm0xJFZJQykpLCBzZGxvZyA9IHNkKGxvZyhybTEkVklDKSkpDQpgYGANCkdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGdpw6EgY+G7lSBwaGnhu4N1IFZJQyBjw7MgcGjDom4gcGjhu5FpIGxvZ2EgIGNodeG6qW4NCg0KVuG7m2kgcHZhbHVlIDwgMSUgLCBiw6FjIGLhu48gSDAgbsOqbiBkw6N5IHPhu5EgbGnhu4d1IG7DoHkga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgbG9nYSBjaHXhuqluDQoNCioqS+G6v3QgbHXhuq1uKio6IFNhdSBraGkgdGjhu7FjIGhp4buHbiBjw6FjIGtp4buDbSDEkeG7i25oIHTDoWMgZ2nhuqMgduG6q24gY2jGsGEgdMOsbSDEkcaw4bujYyBwaMOibiBwaOG7kWkgY+G7pSB0aOG7gyBj4bunYSBjw6FjIGJp4bq/biDEkeG6p3UgdsOgbywgZG8gxJHDsyBz4butIGThu6VuZyBtw7QgaMOsbmggR0JNIGTGsOG7m2kgZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbiwgcGjDom4gcGjhu5FpIGdow6lwIMSR4buDIHRo4buxYyBoaeG7h24gbcO0IHBo4buPbmcgY8OhYyBiaeG6v24gbsOgeS4NCg0KIyMgTcO0IHBo4buPbmcgY8OhYyBiaeG6v24gxJHhuqd1IHbDoG8NCg0KIyMjIE3DtCBow6xuaCAxDQoNCiBNw7QgcGjhu49uZyBnacOhIGPhu5UgcGhp4bq/dSBz4butIGThu6VuZyBHQk0gZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQoNCg0KIyMjIyBCaeG6v24gS0RIDQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMSkNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0ocm5vcm0oKG4pLDAsMSkpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KS0RIPC1nYm0uZihuPTEwMDAwLCB0aGV0YSA9IDAuMDUsIGVwc2lsb24gPSAwLjE1LCBTMCA9cm0xJEtESFsxXSkNCnBsb3QoS0RILCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScsIA0KICAgICAgeWxhYiA9ICJQcmljZSIsDQogICAgICB4bGFiID0gIlRpbWUgKERheXMpIikNCktESDwtZGlmZihsb2coS0RIKSkNCmBgYA0KDQoNCiMjIyMgQmnhur9uIERJRw0KDQpgYGB7cn0NCg0Kc2V0LnNlZWQoMikNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0ocm5vcm0oKG4pLDAsMSkpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KRElHPC1nYm0uZihuPTEwMDAwLCB0aGV0YSA9IDAuMDUsIGVwc2lsb24gPSAwLjE1LCBTMCA9cm0xJERJR1sxXSkNCnBsb3QoRElHLCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScsIA0KICAgICAgeWxhYiA9ICJQcmljZSIsDQogICAgICB4bGFiID0gIlRpbWUgKERheXMpIikNCkRJRzwtZGlmZigobG9nKERJRykpKQ0KYGBgDQoNCiMjIyMgQmnhur9uIERYRw0KDQpgYGB7cn0NCnNldC5zZWVkKDMpDQpnYm0uZj0gZnVuY3Rpb24obixTMCx0aGV0YSwgZXBzaWxvbil7DQogIHQgPSAxDQogIHQucyA9c2VxKDAsdCxsZW5ndGg9bikNCiAgZHQ9dC9uDQogIEJ0ID0gc3FydChkdCkqY3Vtc3VtKHJub3JtKChuKSwwLDEpKQ0KICBTdD1TMCpleHAoKHRoZXRhLWVwc2lsb25eMi8yKSp0LnMrZXBzaWxvbipCdCkNCn0NCkRYRzwtZ2JtLmYobj0xMDAwMCwgdGhldGEgPSAwLjA1LCBlcHNpbG9uID0gMC4xNSwgUzAgPXJtMSREWEdbMV0pDQpwbG90KERYRywgdHlwZSA9ICdsJywgY29sID0gJ2JsdWUnLCANCiAgICAgIHlsYWIgPSAiUHJpY2UiLA0KICAgICAgeGxhYiA9ICJUaW1lIChEYXlzKSIpDQpEWEc8LWRpZmYobG9nKERYRykpDQpgYGANCg0KDQoNCiMjIyMgQmnhur9uIFZITQ0KDQpgYGB7cn0NCg0Kc2V0LnNlZWQoNCkNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0ocm5vcm0oKG4pLDAsMSkpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KVkhNPC1nYm0uZihuPTEwMDAwLCB0aGV0YSA9IDAuMDUsIGVwc2lsb24gPSAwLjE1LCBTMCA9cm0xJFZITVsxXSkNCnBsb3QoVkhNLCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScsIA0KICAgICAgeWxhYiA9ICJQcmljZSIsDQogICAgICB4bGFiID0gIlRpbWUgKERheXMpIikNClZITTwtZGlmZihsb2coVkhNKSkNCmBgYA0KDQoNCiMjIyMgQmnhur9uIE5WTA0KDQpgYGB7cn0NCg0Kc2V0LnNlZWQoNSkNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0ocm5vcm0oKG4pLDAsMSkpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KTlZMPC1nYm0uZihuPTEwMDAwLCB0aGV0YSA9IDAuMDUsIGVwc2lsb24gPSAwLjE1LCBTMCA9cm0xJE5WTFsxXSkNCnBsb3QoTlZMLCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScsIA0KICAgICAgeWxhYiA9ICJQcmljZSIsDQogICAgICB4bGFiID0gIlRpbWUgKERheXMpIikNCk5WTDwtZGlmZihsb2coTlZMKSkNCmBgYA0KDQoNCg0KIyMjIyBCaeG6v24gVklDDQoNCmBgYHtyfQ0KDQpzZXQuc2VlZCg2KQ0KZ2JtLmY9IGZ1bmN0aW9uKG4sUzAsdGhldGEsIGVwc2lsb24pew0KICB0ID0gMQ0KICB0LnMgPXNlcSgwLHQsbGVuZ3RoPW4pDQogIGR0PXQvbg0KICBCdCA9IHNxcnQoZHQpKmN1bXN1bShybm9ybSgobiksMCwxKSkNCiAgU3Q9UzAqZXhwKCh0aGV0YS1lcHNpbG9uXjIvMikqdC5zK2Vwc2lsb24qQnQpDQp9DQpWSUM8LWdibS5mKG49MTAwMDAsIHRoZXRhID0gMC4wNSwgZXBzaWxvbiA9IDAuMTUsIFMwID1ybTEkVklDWzFdKQ0KcGxvdChWSUMsIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgDQogICAgICB5bGFiID0gIlByaWNlIiwNCiAgICAgIHhsYWIgPSAiVGltZSAoRGF5cykiKQ0KVklDPC0gZGlmZihsb2coVklDKSkNCmBgYA0KDQojIyMgTcO0IGjDrG5oIDINCiANCiBNw7QgcGjhu49uZyBnacOhIGPhu5UgcGhp4bq/dSBz4butIGThu6VuZyBHQk0gZMaw4bubaSBnaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSBnaMOpcCAoY29udm9sdXRlZCBkaXN0cmlidXRpb24oIGhhaSBwaMOibiBwaOG7kWkgY2h14bqpbikpDQogDQojIyMjIEJp4bq/biBLREgNCg0KYGBge3J9DQpzZXQuc2VlZCgxKQ0KZ2JtLmY9IGZ1bmN0aW9uKG4sUzAsdGhldGEsIGVwc2lsb24pew0KICB0ID0gMQ0KICB0LnMgPXNlcSgwLHQsbGVuZ3RoPW4pDQogIGR0PXQvbg0KICBaMTwtIHJub3JtKG4sMCwxKQ0KICBaMjwtIHJub3JtKG4sMCwxKQ0KICBCdCA9IHNxcnQoZHQpKmN1bXN1bShaMStaMikNCiAgU3Q9UzAqZXhwKCh0aGV0YS1lcHNpbG9uXjIvMikqdC5zK2Vwc2lsb24qQnQpDQp9DQpLREgyPC1nYm0uZihuPTEwMDAwLCB0aGV0YSA9IDAuMDUsIGVwc2lsb24gPSAwLjE1LCBTMCA9cm0xJEtESFsxXSkNCnBsb3QoS0RIMiwgdHlwZSA9ICdsJywgY29sID0gJ2JsdWUnLCANCiAgICAgIHlsYWIgPSAiUHJpY2UiLA0KICAgICAgeGxhYiA9ICJUaW1lIChEYXlzKSIpDQpLREgyPC1kaWZmKGxvZyhLREgyKSkNCmBgYA0KDQoNCiMjIyMgQmnhur9uIERJRw0KDQpgYGB7cn0NCg0Kc2V0LnNlZWQoMikNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgWjE8LSBybm9ybShuLDAsMSkNCiAgWjI8LSBybm9ybShuLDAsMSkNCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0oWjErWjIpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KRElHMjwtZ2JtLmYobj0xMDAwMCwgdGhldGEgPSAwLjA1LCBlcHNpbG9uID0gMC4xNSwgUzAgPXJtMSRESUdbMV0pDQpwbG90KERJRzIsIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgDQogICAgICB5bGFiID0gIlByaWNlIiwNCiAgICAgIHhsYWIgPSAiVGltZSAoRGF5cykiKQ0KRElHMjwtZGlmZihsb2coRElHMikpDQpgYGANCg0KIyMjIyBCaeG6v24gRFhHDQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMykNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgWjE8LSBybm9ybShuLDAsMSkNCiAgWjI8LSBybm9ybShuLDAsMSkNCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0oWjErWjIpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KRFhHMjwtZ2JtLmYobj0xMDAwMCwgdGhldGEgPSAwLjA1LCBlcHNpbG9uID0gMC4xNSwgUzAgPXJtMSREWEdbMV0pDQpwbG90KERYRzIsIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgDQogICAgICB5bGFiID0gIlByaWNlIiwNCiAgICAgIHhsYWIgPSAiVGltZSAoRGF5cykiKQ0KRFhHMjwtZGlmZihsb2coRFhHMikpDQpgYGANCg0KDQoNCiMjIyMgQmnhur9uIFZITQ0KDQpgYGB7cn0NCg0Kc2V0LnNlZWQoNCkNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgWjE8LSBybm9ybShuLDAsMSkNCiAgWjI8LSBybm9ybShuLDAsMSkNCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0oWjErWjIpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KVkhNMjwtZ2JtLmYobj0xMDAwMCwgdGhldGEgPSAwLjA1LCBlcHNpbG9uID0gMC4xNSwgUzAgPXJtMSRWSE1bMV0pDQpwbG90KFZITTIsIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgDQogICAgICB5bGFiID0gIlByaWNlIiwNCiAgICAgIHhsYWIgPSAiVGltZSAoRGF5cykiKQ0KVkhNMjwtZGlmZihsb2coVkhNMikpDQpgYGANCg0KDQojIyMjIEJp4bq/biBOVkwNCg0KYGBge3J9DQoNCnNldC5zZWVkKDUpDQpnYm0uZj0gZnVuY3Rpb24obixTMCx0aGV0YSwgZXBzaWxvbil7DQogIHQgPSAxDQogIHQucyA9c2VxKDAsdCxsZW5ndGg9bikNCiAgZHQ9dC9uDQogIFoxPC0gcm5vcm0obiwwLDEpDQogIFoyPC0gcm5vcm0obiwwLDEpDQogIEJ0ID0gc3FydChkdCkqY3Vtc3VtKFoxK1oyKQ0KICBTdD1TMCpleHAoKHRoZXRhLWVwc2lsb25eMi8yKSp0LnMrZXBzaWxvbipCdCkNCn0NCk5WTDI8LWdibS5mKG49MTAwMDAsIHRoZXRhID0gMC4wNSwgZXBzaWxvbiA9IDAuMTUsIFMwID1ybTEkTlZMWzFdKQ0KcGxvdChOVkwyLCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScsIA0KICAgICAgeWxhYiA9ICJQcmljZSIsDQogICAgICB4bGFiID0gIlRpbWUgKERheXMpIikNCk5WTDI8LWRpZmYobG9nKE5WTDIpKQ0KYGBgDQoNCg0KDQojIyMjIEJp4bq/biBWSUMNCg0KYGBge3J9DQoNCnNldC5zZWVkKDYpDQpnYm0uZj0gZnVuY3Rpb24obixTMCx0aGV0YSwgZXBzaWxvbil7DQogIHQgPSAxDQogIHQucyA9c2VxKDAsdCxsZW5ndGg9bikNCiAgZHQ9dC9uDQogIFoxPC0gcm5vcm0obiwwLDEpDQogIFoyPC0gcm5vcm0obiwwLDEpDQogIEJ0ID0gc3FydChkdCkqY3Vtc3VtKFoxK1oyKQ0KICBTdD1TMCpleHAoKHRoZXRhLWVwc2lsb25eMi8yKSp0LnMrZXBzaWxvbipCdCkNCn0NClZJQzI8LWdibS5mKG49MTAwMDAsIHRoZXRhID0gMC4wNSwgZXBzaWxvbiA9IDAuMTUsIFMwID1ybTEkVklDWzFdKQ0KcGxvdChWSUMyLCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScsIA0KICAgICAgeWxhYiA9ICJQcmljZSIsDQogICAgICB4bGFiID0gIlRpbWUgKERheXMpIikNClZJQzI8LWRpZmYobG9nKFZJQzIpKQ0KDQpgYGANCg0KIyMjIE3DtCBow6xuaCAzDQoNCk3DtCBwaOG7j25nIGdpw6EgY+G7lSBwaGnhur91IHPhu60gZOG7pW5nIEdCTSBkxrDhu5tpIGdp4bqjIMSR4buLbmggcGjDom4gcGjhu5FpIGdow6lwIChjb252b2x1dGVkIGRpc3RyaWJ1dGlvbiAoZ2jDqXAgZ2nhu69hIHBow6JuIHBo4buRaSBjaHXhuqluIHbDoCBwaMOibiBwaOG7kWkgbGFwbGFjZSkNCg0KIyMjIyBCaeG6v24gS0RIDQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMSkNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgWjE8LSBybm9ybShuLDAsMSkNCiAgWjI8LSBybGFwbGFjZShuLCBsb2NhdGlvbiA9IDAsIHNjYWxlID0gMSkNCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0oWjErWjIpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KS0RIMzwtZ2JtLmYobj0xMDAwMCwgdGhldGEgPSAwLjA1LCBlcHNpbG9uID0gMC4xNSwgUzAgPXJtMSRLREhbMV0pDQpwbG90KEtESDMsIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgDQogICAgICB5bGFiID0gIlByaWNlIiwNCiAgICAgIHhsYWIgPSAiVGltZSAoRGF5cykiKQ0KS0RIMzwtZGlmZihsb2coS0RIMykpDQoNCmBgYA0KDQoNCiMjIyMgQmnhur9uIERJRw0KDQpgYGB7cn0NCg0Kc2V0LnNlZWQoMikNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgWjE8LSBybm9ybShuLDAsMSkNCiAgWjI8LSBybGFwbGFjZShuLCBsb2NhdGlvbiA9IDAsIHNjYWxlID0gMSkNCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0oWjErWjIpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KRElHMzwtZ2JtLmYobj0xMDAwMCwgdGhldGEgPSAwLjA1LCBlcHNpbG9uID0gMC4xNSwgUzAgPXJtMSRESUdbMV0pDQpwbG90KERJRzMsIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgDQogICAgICB5bGFiID0gIlByaWNlIiwNCiAgICAgIHhsYWIgPSAiVGltZSAoRGF5cykiKQ0KRElHMzwtZGlmZihsb2coRElHMykpDQpgYGANCg0KIyMjIyBCaeG6v24gRFhHDQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMykNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgWjE8LSBybm9ybShuLDAsMSkNCiAgWjI8LSBybGFwbGFjZShuLCBsb2NhdGlvbiA9IDAsIHNjYWxlID0gMSkNCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0oWjErWjIpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KRFhHMzwtZ2JtLmYobj0xMDAwMCwgdGhldGEgPSAwLjA1LCBlcHNpbG9uID0gMC4xNSwgUzAgPXJtMSREWEdbMV0pDQpwbG90KERYRzMsIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgDQogICAgICB5bGFiID0gIlByaWNlIiwNCiAgICAgIHhsYWIgPSAiVGltZSAoRGF5cykiKQ0KRFhHMzwtZGlmZihsb2coRFhHMykpDQpgYGANCg0KDQoNCiMjIyMgQmnhur9uIFZITQ0KDQpgYGB7cn0NCg0Kc2V0LnNlZWQoNCkNCmdibS5mPSBmdW5jdGlvbihuLFMwLHRoZXRhLCBlcHNpbG9uKXsNCiAgdCA9IDENCiAgdC5zID1zZXEoMCx0LGxlbmd0aD1uKQ0KICBkdD10L24NCiAgWjE8LSBybm9ybShuLDAsMSkNCiAgWjI8LSBybGFwbGFjZShuLCBsb2NhdGlvbiA9IDAsIHNjYWxlID0gMSkNCiAgQnQgPSBzcXJ0KGR0KSpjdW1zdW0oWjErWjIpDQogIFN0PVMwKmV4cCgodGhldGEtZXBzaWxvbl4yLzIpKnQucytlcHNpbG9uKkJ0KQ0KfQ0KVkhNMzwtZ2JtLmYobj0xMDAwMCwgdGhldGEgPSAwLjA1LCBlcHNpbG9uID0gMC4xNSwgUzAgPXJtMSRWSE1bMV0pDQpwbG90KFZITTMsIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgDQogICAgICB5bGFiID0gIlByaWNlIiwNCiAgICAgIHhsYWIgPSAiVGltZSAoRGF5cykiKQ0KVkhNMzwtZGlmZihsb2coVkhNMykpDQpgYGANCg0KDQojIyMjIEJp4bq/biBOVkwNCg0KYGBge3J9DQoNCnNldC5zZWVkKDUpDQpnYm0uZj0gZnVuY3Rpb24obixTMCx0aGV0YSwgZXBzaWxvbil7DQogIHQgPSAxDQogIHQucyA9c2VxKDAsdCxsZW5ndGg9bikNCiAgZHQ9dC9uDQogIFoxPC0gcm5vcm0obiwwLDEpDQogIFoyPC0gcmxhcGxhY2UobiwgbG9jYXRpb24gPSAwLCBzY2FsZSA9IDEpDQogIEJ0ID0gc3FydChkdCkqY3Vtc3VtKFoxK1oyKQ0KICBTdD1TMCpleHAoKHRoZXRhLWVwc2lsb25eMi8yKSp0LnMrZXBzaWxvbipCdCkNCn0NCk5WTDM8LWdibS5mKG49MTAwMDAsIHRoZXRhID0gMC4wNSwgZXBzaWxvbiA9IDAuMTUsIFMwID1ybTEkTlZMWzFdKQ0KcGxvdChOVkwzLCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScsIA0KICAgICAgeWxhYiA9ICJQcmljZSIsDQogICAgICB4bGFiID0gIlRpbWUgKERheXMpIikNCk5WTDM8LWRpZmYobG9nKE5WTDMpKQ0KYGBgDQoNCg0KDQojIyMjIEJp4bq/biBWSUMNCg0KYGBge3J9DQoNCnNldC5zZWVkKDYpDQpnYm0uZj0gZnVuY3Rpb24obixTMCx0aGV0YSwgZXBzaWxvbil7DQogIHQgPSAxDQogIHQucyA9c2VxKDAsdCxsZW5ndGg9bikNCiAgZHQ9dC9uDQogIFoxPC0gcm5vcm0obiwwLDEpDQogIFoyPC0gcmxhcGxhY2UobiwgbG9jYXRpb24gPSAwLCBzY2FsZSA9IDEpDQogIEJ0ID0gc3FydChkdCkqY3Vtc3VtKFoxK1oyKQ0KICBTdD1TMCpleHAoKHRoZXRhLWVwc2lsb25eMi8yKSp0LnMrZXBzaWxvbipCdCkNCn0NClZJQzM8LWdibS5mKG49MTAwMDAsIHRoZXRhID0gMC4wNSwgZXBzaWxvbiA9IDAuMTUsIFMwID1ybTEkVklDWzFdKQ0KcGxvdChWSUMzLCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScsIA0KICAgICAgeWxhYiA9ICJQcmljZSIsDQogICAgICB4bGFiID0gIlRpbWUgKERheXMpIikNClZJQzM8LWRpZmYobG9nKFZJQzMpKQ0KYGBgDQoNCiMjIFZhUiBj4bunYSBkYW5oIG3hu6VjDQoNCiMjIyBNw7QgaMOsbmggMQ0KDQpgYGB7cn0NCm1hYzwtZGF0YS5mcmFtZShESUcsIERYRywgTlZMLCBWSE0sIEtESCwgVklDKQ0KVnA8LTEwMDAwMCAjIEdpw6EgdHLhu4sgZGFuaCBt4bulYyDEkeG6p3UgdMawDQp3PC1jKDAuMiwgMC4yNSwgMC4xLCAwLjEsIDAuMiwgMC4xNSkjIFThu7cgdHLhu41uZyBj4bunYSB04burbmcgdMOgaSBz4bqjbiB0cm9uZyBkYW5oIG3hu6VjDQpSUDEgPC0gYXBwbHkobWFjLCAxLCBmdW5jdGlvbihyb3cpIHN1bShyb3cgKiB3KSkjVOG7tyBzdeG6pXQgbOG7o2kgbmh14bqtbiBj4bunYSBkYW5oIG3hu6VjDQpoaXN0KFJQMSkNCg0KDQpgYGANCg0KKipHacOhIHRy4buLIFZhUiBj4bunYSBkYW5oIG3hu6VjIOG7qW5nIHbhu5tpIDMgbeG7qWMgxJHhu5kgdGluIGPhuq15IDkwJTsgOTUlOyA5Nyw1JSoqDQoNCmBgYHtyfQ0KTjwtIDEwMDAwICMgU+G7kSBxdWFuIHPDoXQgY+G7p2EgY2h14buRaSB04bu3IHN14bqldCBs4bujaSBuaHXhuq1uIGRhbmggbeG7pWMNCiMgU+G6r3AgeOG6v3AgdOG7tyBzdeG6pXQgbOG7o+G7iyBuaHXhuq1uIGRhbmggbeG7pWMgdGhlbyB0aOG7qSB04buxIHTEg25nIGThuqduDQpzb3J0ZWRfdmFsdWVzIDwtIHNvcnQoUlAxKQ0KIyBDaOG7jW4gY2jhu4kgc+G7kSB0xrDGoW5nIOG7qW5nIHbhu5tpIG3hu6ljIHRpbiBj4bqteQ0KYWxwaGE8LSBjKDAuOSwgMC45NSwgMC45NzUpDQprIDwtIGNlaWxpbmcoKDEgLSBhbHBoYSkgKiBOKQ0KIyBUw61uaCBWYVINCnZhcjEgPC0gVnAqc29ydGVkX3ZhbHVlc1trXQ0KIyBU4bqhbyBkYXRhIGZyYW1lIGvhur90IHF14bqjIFZhUg0KdmFyX3Jlc3VsdHMgPC0gZGF0YS5mcmFtZSgNCiAgTXVjRG9UaW5DYXkgPSBhbHBoYSAqIDEwMCwNCiAgVmFSID0gdmFyMSkNCnZhcl9yZXN1bHRzDQpgYGANCg0KKiBWYVIgY+G7p2EgbeG7mXQga2hv4bqjbiDEkeG6p3UgdMawIDEwMDAwMCBVU0QgdsOgbyBkYW5oIG3hu6VjIHRyb25nIG5nw6B5IHRp4bq/cCB0aGVvIOG7qW5nIHbhu5tpIMSR4buZIHRpbiBj4bqteSA5MCUgbMOgIC04MywxMDQyMiBVU0QgKHbhu5tpIHjDoWMgc3XhuqV0IDkwJSBraG/huqNuIGzhu5cga2jDtG5nIHbGsOG7o3QgcXXDoSA4MywxMDQyMiBVU0QgdHJvbmcgbeG7mXQgbmfDoHkpDQoNCiogVmFSIGPhu6dhIG3hu5l0IGtob+G6o24gxJHhuqd1IHTGsCAxMDAwMDAkIHbDoG8gZGFuaCBt4bulYyB0cm9uZyBuZ8OgeSB0aeG6v3AgdGhlbyDhu6luZyB24bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlIGzDoCAtMTA1LDI4MDQyICh24bubaSB4w6FjIHN14bqldCA5NSUga2hv4bqjbiBs4buXIGtow7RuZyB2xrDhu6N0IHF1w6EgMTA1LDI4MDQyIFVTRCB0cm9uZyBt4buZdCBuZ8OgeSkNCg0KKiBWYVIgY+G7p2EgbeG7mXQga2hv4bqjbiDEkeG6p3UgdMawIDEwMDAwMCQgdsOgbyBkYW5oIG3hu6VjIHRyb25nIG5nw6B5IHRp4bq/cCB0aGVvIOG7qW5nIHbhu5tpIMSR4buZIHRpbiBj4bqteSA5Nyw1JSBsw6AgLTEyNiw1MTA2ICh24bubaSB4w6FjIHN14bqldCA5Nyw1JSBraG/huqNuIGzhu5cga2jDtG5nIHbGsOG7o3QgcXXDoSAxMjYsNTEwNiBVU0QgdHJvbmcgbeG7mXQgbmfDoHkpDQoNCioqR2nDoSB0cuG7iyBj4bunYSBkYW5oIG3hu6VjIMSR4bqndSB0xrAqKg0KDQpgYGB7cn0NClYxPC0xMDAwMDAqUlAxDQpjdXRfcmVzdWx0IDwtIGN1dChWMSwgYnJlYWtzID0gYygtSW5mLCAwLCBJbmYpLCBsYWJlbHMgPSBjKCJsb3NzIiwgInByb2ZpdCIpKQ0KDQojIFThuqFvIHZlY3RvciBwcm9maXQgdsOgIGxvc3MgZOG7sWEgdHLDqm4ga+G6v3QgcXXhuqMgY2hpYSBraG/huqNuZw0KcHJvZml0IDwtIFYxW2N1dF9yZXN1bHQgPT0gInByb2ZpdCJdDQpsb3NzIDwtIFYxW2N1dF9yZXN1bHQgPT0gImxvc3MiXQ0KDQojIEhp4buDbiB0aOG7iyBr4bq/dCBxdeG6ow0KdGFibGUoY3V0X3Jlc3VsdCkNCg0KYGBgDQpUcm9uZyAxMDAwMCBwaGnDqm4gZ2lhbyBk4buLY2gga+G6vyB0aeG6v3AgY8OzIDQ5NzggcGhpw6puIGdpYW8gZOG7i2NoIGPDsyBs4bujaSBuaHXhuq1uIMOibS4NCg0KUXVpIMaw4bubYyBt4bupYyDEkeG7mSBy4bunaSBybyBj4bunYSBkYW5oIG3hu6VjIMSR4bqndSB0xrAgbmjGsCBzYXU6DQoNCiogUuG7p2kgcm8gY2FvOiBraGkgbeG7qWMgbOG7lyBj4bunYSBkYW5oIG3hu6VjIGzhu5tuIGjGoW4gMCwyJQ0KKiBS4bunaSBybyB24burYSBwaOG6o2k6IEtoaSBt4bupYyBs4buXIGPhu6dhIGRhbmggbeG7pWMgbuG6sW0gdHJvbmcga2hv4bqjbmcgKDAsMSUgLSAwLDIlXQ0KKiBS4bunaSBybyB0aOG6pXA6IEtoaSBt4bupYyBs4buXIGPhu6dhIGRhbmggbeG7pWMgbmjhu48gaMahbiAwLDElDQpgYGB7cn0NCg0KY2FvIDwtIFJQMVtSUDEgPCAtMC4wMDJdDQp2dWF2dWEgPC0gUlAxW1JQMSA+PSAtMC4wMDIgJiBSUDEgPCAtMC4wMDFdDQp0aGFwIDwtIFJQMVtSUDEgPj0gLTAuMDAxICYgUlAxIDwwXQ0KdGFibGUoY3V0KFJQMSwgYnJlYWtzID0gYygtSW5mLC0wLjAwMiwgLTAuMDAxLCAwKSwgbGFiZWxzID0gYygiUuG7p2kgcm8gY2FvIiwgIlLhu6dpIHJvIHbhu6thIiwgIlLhu6dpIHJvIHRo4bqlcCIpKSkNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgUnVpUm8gPSBmYWN0b3IoYygiUnVpIHJvIGNhbyIsICJSdWkgcm8gdnVhIiwgIlJ1aSBybyB0aGFwIiksIGxldmVscyA9IGMoIlJ1aSBybyBjYW8iLCAiUnVpIHJvIHZ1YSIsICJSdWkgcm8gdGhhcCIpKSwNCiAgUHJvYmFiaWxpdHkgPSBjKGxlbmd0aChjYW8pL2xlbmd0aChSUDEpLCBsZW5ndGgodnVhdnVhKS9sZW5ndGgoUlAxKSwgbGVuZ3RoKHRoYXApL2xlbmd0aChSUDEpKSkNCmdncGxvdChkYXRhLCBhZXMoeCA9IFJ1aVJvLCB5ID0gUHJvYmFiaWxpdHksIGZpbGwgPSBSdWlSbykpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGNvbG9yID0gImJsdWUiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQoUHJvYmFiaWxpdHkpKSwgdmp1c3QgPSAtMC41LCBjb2xvciA9ICJibGFjayIpIA0KYGBgDQoNCiMjIyBNw7QgaMOsbmggMg0KDQoNCmBgYHtyfQ0KDQoNCm1hYzI8LWRhdGEuZnJhbWUoRElHMiwgRFhHMiwgTlZMMiwgVkhNMiwgS0RIMiwgVklDMikNClZwPC0xMDAwMDAgIyBHacOhIHRy4buLIGRhbmggbeG7pWMgxJHhuqd1IHTGsA0KdzwtYygwLjIsIDAuMjUsIDAuMSwgMC4xLCAwLjIsIDAuMTUpIyBU4bu3IHRy4buNbmcgY+G7p2EgdOG7q25nIHTDoGkgc+G6o24gdHJvbmcgZGFuaCBt4bulYw0KUlAyIDwtIGFwcGx5KG1hYzIsIDEsIGZ1bmN0aW9uKHJvdykgc3VtKHJvdyAqIHcpKSNU4bu3IHN14bqldCBs4bujaSBuaHXhuq1uIGPhu6dhIGRhbmggbeG7pWMNCmhpc3QoUlAyKQ0KYGBgDQoNCioqR2nDoSB0cuG7iyBWYVIgY+G7p2EgZGFuaCBt4bulYyDhu6luZyB24bubaSAzIG3hu6ljIMSR4buZIHRpbiBj4bqteSA5MCU7IDk1JTsgOTcsNSUqKg0KDQpgYGB7cn0NCk48LSAxMDAwMCAjIFPhu5EgcXVhbiBzw6F0IGPhu6dhIGNodeG7kWkgdOG7tyBzdeG6pXQgbOG7o2kgbmh14bqtbiBkYW5oIG3hu6VjDQojIFPhuq9wIHjhur9wIHThu7cgc3XhuqV0IGzhu6Phu4sgbmh14bqtbiBkYW5oIG3hu6VjIHRoZW8gdGjhu6kgdOG7sSB0xINuZyBk4bqnbg0Kc29ydGVkX3ZhbHVlcyA8LSBzb3J0KFJQMikNCiMgQ2jhu41uIGNo4buJIHPhu5EgdMawxqFuZyDhu6luZyB24bubaSBt4bupYyB0aW4gY+G6rXkNCmFscGhhPC0gYygwLjksIDAuOTUsIDAuOTc1KQ0KayA8LSBjZWlsaW5nKCgxIC0gYWxwaGEpICogTikNCiMgVMOtbmggVmFSDQp2YXIyIDwtIFZwKnNvcnRlZF92YWx1ZXNba10NCiMgVOG6oW8gZGF0YSBmcmFtZSBr4bq/dCBxdeG6oyBWYVINCnZhcl9yZXN1bHRzIDwtIGRhdGEuZnJhbWUoDQogIE11Y0RvVGluQ2F5ID0gYWxwaGEgKiAxMDAsDQogIFZhUiA9IHZhcjIpDQp2YXJfcmVzdWx0cw0KYGBgDQoNCiogVmFSIGPhu6dhIG3hu5l0IGtob+G6o24gxJHhuqd1IHTGsCAxMDAwMDAgVVNEIHbDoG8gZGFuaCBt4bulYyB0cm9uZyBuZ8OgeSB0aeG6v3AgdGhlbyDhu6luZyB24bubaSDEkeG7mSB0aW4gY+G6rXkgOTAlIGzDoCAtMTE4LDM0NjkgVVNEICh24bubaSB4w6FjIHN14bqldCA5MCUga2hv4bqjbiBs4buXIGtow7RuZyB2xrDhu6N0IHF1w6EgMTE4LDM0NjkgVVNEIHRyb25nIG3hu5l0IG5nw6B5KQ0KDQoqIFZhUiBj4bunYSBt4buZdCBraG/huqNuIMSR4bqndSB0xrAgMTAwMDAwJCB2w6BvIGRhbmggbeG7pWMgdHJvbmcgbmfDoHkgdGnhur9wIHRoZW8g4bupbmcgduG7m2kgxJHhu5kgdGluIGPhuq15IDk1JSBsw6AgLTE1MSwyOTQyICh24bubaSB4w6FjIHN14bqldCA5NSUga2hv4bqjbiBs4buXIGtow7RuZyB2xrDhu6N0IHF1w6EgMTUxLDI5NDIgVVNEIHRyb25nIG3hu5l0IG5nw6B5KQ0KDQoqIFZhUiBj4bunYSBt4buZdCBraG/huqNuIMSR4bqndSB0xrAgMTAwMDAwJCB2w6BvIGRhbmggbeG7pWMgdHJvbmcgbmfDoHkgdGnhur9wIHRoZW8g4bupbmcgduG7m2kgxJHhu5kgdGluIGPhuq15IDk3LDUlIGzDoCAtMTc5LDA1OSAoduG7m2kgeMOhYyBzdeG6pXQgOTcsNSUga2hv4bqjbiBs4buXIGtow7RuZyB2xrDhu6N0IHF1w6EgMTc5LDA1OSBVU0QgdHJvbmcgbeG7mXQgbmfDoHkpDQoNCioqxJDDoW5oIGdpw6EgbeG7qWMgxJHhu5kgcuG7p2kgcm8gY+G7p2EgZGFuaCBt4bulYyDEkeG6p3UgdMawKioNCg0KYGBge3J9DQpWMjwtMTAwMDAwKlJQMg0KY3V0X3Jlc3VsdCA8LSBjdXQoVjIsIGJyZWFrcyA9IGMoLUluZiwgMCwgSW5mKSwgbGFiZWxzID0gYygibG9zcyIsICJwcm9maXQiKSkNCg0KIyBU4bqhbyB2ZWN0b3IgcHJvZml0IHbDoCBsb3NzIGThu7FhIHRyw6puIGvhur90IHF14bqjIGNoaWEga2hv4bqjbmcNCnByb2ZpdCA8LSBWMltjdXRfcmVzdWx0ID09ICJwcm9maXQiXQ0KbG9zcyA8LSBWMltjdXRfcmVzdWx0ID09ICJsb3NzIl0NCg0KIyBIaeG7g24gdGjhu4sga+G6v3QgcXXhuqMNCnRhYmxlKGN1dF9yZXN1bHQpDQoNCg0KYGBgDQpUcm9uZyAxMDAwMCBwaGnDqm4gZ2lhbyBk4buLY2gga+G6vyB0aeG6v3AgY8OzIDUwNTggcGhpw6puIGdpYW8gZOG7i2NoIGPDsyBs4bujaSBuaHXhuq1uIMOibS4NCg0KUXVpIMaw4bubYyBt4bupYyDEkeG7mSBy4bunaSBybyBj4bunYSBkYW5oIG3hu6VjIMSR4bqndSB0xrAgbmjGsCBzYXU6DQoNCiogUuG7p2kgcm8gY2FvOiBraGkgbeG7qWMgbOG7lyBj4bunYSBkYW5oIG3hu6VjIGzhu5tuIGjGoW4gMCwyJQ0KKiBS4bunaSBybyB24burYSBwaOG6o2k6IEtoaSBt4bupYyBs4buXIGPhu6dhIGRhbmggbeG7pWMgbuG6sW0gdHJvbmcga2hv4bqjbmcgKDAsMSUgLSAwLDIlXQ0KKiBS4bunaSBybyB0aOG6pXA6IEtoaSBt4bupYyBs4buXIGPhu6dhIGRhbmggbeG7pWMgbmjhu48gaMahbiAwLDElDQpgYGB7cn0NCg0KY2FvIDwtIFJQMltSUDIgPCAtMC4wMDJdDQp2dWF2dWEgPC0gUlAyW1JQMiA+PSAtMC4wMDIgJiBSUDEgPCAtMC4wMDFdDQp0aGFwIDwtIFJQMltSUDIgPj0gLTAuMDAxICYgUlAxIDwwXQ0KdGFibGUoY3V0KFJQMiwgYnJlYWtzID0gYygtSW5mLC0wLjAwMiwgLTAuMDAxLCAwKSwgbGFiZWxzID0gYygiUuG7p2kgcm8gY2FvIiwgIlLhu6dpIHJvIHbhu6thIiwgIlLhu6dpIHJvIHRo4bqlcCIpKSkNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgUnVpUm8gPSBmYWN0b3IoYygiUnVpIHJvIGNhbyIsICJSdWkgcm8gdnVhIiwgIlJ1aSBybyB0aGFwIiksIGxldmVscyA9IGMoIlJ1aSBybyBjYW8iLCAiUnVpIHJvIHZ1YSIsICJSdWkgcm8gdGhhcCIpKSwNCiAgUHJvYmFiaWxpdHkgPSBjKGxlbmd0aChjYW8pL2xlbmd0aChSUDIpLCBsZW5ndGgodnVhdnVhKS9sZW5ndGgoUlAyKSwgbGVuZ3RoKHRoYXApL2xlbmd0aChSUDIpKSkNCmdncGxvdChkYXRhLCBhZXMoeCA9IFJ1aVJvLCB5ID0gUHJvYmFiaWxpdHksIGZpbGwgPSBSdWlSbykpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGNvbG9yID0gImJsdWUiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQoUHJvYmFiaWxpdHkpKSwgdmp1c3QgPSAtMC41LCBjb2xvciA9ICJibGFjayIpIA0KYGBgDQoNCiMjIyBNw7QgaMOsbmggMw0KDQoNCmBgYHtyfQ0KbWFjMzwtZGF0YS5mcmFtZShESUczLCBEWEczLCBOVkwzLCBWSE0zLCBLREgzLCBWSUMzKQ0KDQpWcDwtMTAwMDAwICMgR2nDoSB0cuG7iyBkYW5oIG3hu6VjIMSR4bqndSB0xrANCnc8LWMoMC4yLCAwLjI1LCAwLjEsIDAuMSwgMC4yLCAwLjE1KSMgVOG7tyB0cuG7jW5nIGPhu6dhIHThu6tuZyB0w6BpIHPhuqNuIHRyb25nIGRhbmggbeG7pWMNClJQMyA8LSBhcHBseShtYWMzLCAxLCBmdW5jdGlvbihyb3cpIHN1bShyb3cgKiB3KSkgI1Thu7cgc3XhuqV0IGzhu6NpIG5odeG6rW4gY+G7p2EgZGFuaCBt4bulYw0KaGlzdChSUDMpDQpgYGANCg0KKipHacOhIHRy4buLIFZhUiBj4bunYSBkYW5oIG3hu6VjIOG7qW5nIHbhu5tpIDMgbeG7qWMgxJHhu5kgdGluIGPhuq15IDkwJTsgOTUlOyA5Nyw1JSoqDQoNCmBgYHtyfQ0KTjwtIDEwMDAwICMgU+G7kSBxdWFuIHPDoXQgY+G7p2EgY2h14buRaSB04bu3IHN14bqldCBs4bujaSBuaHXhuq1uIGRhbmggbeG7pWMNCiMgU+G6r3AgeOG6v3AgdOG7tyBzdeG6pXQgbOG7o+G7iyBuaHXhuq1uIGRhbmggbeG7pWMgdGhlbyB0aOG7qSB04buxIHTEg25nIGThuqduDQpzb3J0ZWRfdmFsdWVzIDwtIHNvcnQoUlAzKQ0KIyBDaOG7jW4gY2jhu4kgc+G7kSB0xrDGoW5nIOG7qW5nIHbhu5tpIG3hu6ljIHRpbiBj4bqteQ0KYWxwaGE8LSBjKDAuOSwgMC45NSwgMC45NzUpDQprIDwtIGNlaWxpbmcoKDEgLSBhbHBoYSkgKiBOKQ0KIyBUw61uaCBWYVINCnZhcjMgPC0gVnAqc29ydGVkX3ZhbHVlc1trXQ0KIyBU4bqhbyBkYXRhIGZyYW1lIGvhur90IHF14bqjIFZhUg0KdmFyX3Jlc3VsdHMgPC0gZGF0YS5mcmFtZSgNCiAgTXVjRG9UaW5DYXkgPSBhbHBoYSAqIDEwMCwNCiAgVmFSID0gdmFyMykNCnZhcl9yZXN1bHRzDQpgYGANCg0KKiBWYVIgY+G7p2EgbeG7mXQga2hv4bqjbiDEkeG6p3UgdMawIDEwMDAwMCBVU0QgdsOgbyBkYW5oIG3hu6VjIHRyb25nIG5nw6B5IHRp4bq/cCB0aGVvIOG7qW5nIHbhu5tpIMSR4buZIHRpbiBj4bqteSA5MCUgbMOgIC0xNDIsNTMwNiBVU0QgKHbhu5tpIHjDoWMgc3XhuqV0IDkwJSBraG/huqNuIGzhu5cga2jDtG5nIHbGsOG7o3QgcXXDoSAxNDIsNTMwNiBVU0QgdHJvbmcgbeG7mXQgbmfDoHkpDQoNCiogVmFSIGPhu6dhIG3hu5l0IGtob+G6o24gxJHhuqd1IHTGsCAxMDAwMDAkIHbDoG8gZGFuaCBt4bulYyB0cm9uZyBuZ8OgeSB0aeG6v3AgdGhlbyDhu6luZyB24bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlIGzDoCAtMTgyLDU2NzYgKHbhu5tpIHjDoWMgc3XhuqV0IDk1JSBraG/huqNuIGzhu5cga2jDtG5nIHbGsOG7o3QgcXXDoSAxODIsNTY3NiBVU0QgdHJvbmcgbeG7mXQgbmfDoHkpDQoNCiogVmFSIGPhu6dhIG3hu5l0IGtob+G6o24gxJHhuqd1IHTGsCAxMDAwMDAkIHbDoG8gZGFuaCBt4bulYyB0cm9uZyBuZ8OgeSB0aeG6v3AgdGhlbyDhu6luZyB24bubaSDEkeG7mSB0aW4gY+G6rXkgOTcsNSUgbMOgIC0yMjMsODE3OCAoduG7m2kgeMOhYyBzdeG6pXQgOTcsNSUga2hv4bqjbiBs4buXIGtow7RuZyB2xrDhu6N0IHF1w6EgMjIzLDgxNzggVVNEIHRyb25nIG3hu5l0IG5nw6B5KQ0KDQoqKsSQw6FuaCBnacOhIG3hu6ljIMSR4buZIHLhu6dpIHJvIGPhu6dhIGRhbmggbeG7pWMgxJHhuqd1IHTGsCoqDQoNCmBgYHtyfQ0KVjM8LTEwMDAwMCpSUDMNCmN1dF9yZXN1bHQgPC0gY3V0KFYzLCBicmVha3MgPSBjKC1JbmYsIDAsIEluZiksIGxhYmVscyA9IGMoImxvc3MiLCAicHJvZml0IikpDQoNCiMgVOG6oW8gdmVjdG9yIHByb2ZpdCB2w6AgbG9zcyBk4buxYSB0csOqbiBr4bq/dCBxdeG6oyBjaGlhIGtob+G6o25nDQpwcm9maXQgPC0gVjNbY3V0X3Jlc3VsdCA9PSAicHJvZml0Il0NCmxvc3MgPC0gVjNbY3V0X3Jlc3VsdCA9PSAibG9zcyJdDQoNCiMgSGnhu4NuIHRo4buLIGvhur90IHF14bqjDQp0YWJsZShjdXRfcmVzdWx0KQ0KDQpgYGANClRyb25nIDEwMDAwIHBoacOqbiBnaWFvIGThu4tjaCBr4bq/IHRp4bq/cCBjw7MgNTA1NSBwaGnDqm4gZ2lhbyBk4buLY2ggY8OzIGzhu6NpIG5odeG6rW4gw6JtLg0KDQpRdWkgxrDhu5tjIG3hu6ljIMSR4buZIHLhu6dpIHJvIGPhu6dhIGRhbmggbeG7pWMgxJHhuqd1IHTGsCBuaMawIHNhdToNCg0KKiBS4bunaSBybyBjYW86IGtoaSBt4bupYyBs4buXIGPhu6dhIGRhbmggbeG7pWMgbOG7m24gaMahbiAwLDIlDQoqIFLhu6dpIHJvIHbhu6thIHBo4bqjaTogS2hpIG3hu6ljIGzhu5cgY+G7p2EgZGFuaCBt4bulYyBu4bqxbSB0cm9uZyBraG/huqNuZyAoMCwxJSAtIDAsMiVdDQoqIFLhu6dpIHJvIHRo4bqlcDogS2hpIG3hu6ljIGzhu5cgY+G7p2EgZGFuaCBt4bulYyBuaOG7jyBoxqFuIDAsMSUNCmBgYHtyfQ0KDQpjYW8gPC0gUlAzW1JQMyA8IC0wLjAwMl0NCnZ1YXZ1YSA8LSBSUDNbUlAzID49IC0wLjAwMiAmIFJQMSA8IC0wLjAwMV0NCnRoYXAgPC0gUlAzW1JQMyA+PSAtMC4wMDEgJiBSUDEgPDBdDQp0YWJsZShjdXQoUlAzLCBicmVha3MgPSBjKC1JbmYsLTAuMDAyLCAtMC4wMDEsIDApLCBsYWJlbHMgPSBjKCJS4bunaSBybyBjYW8iLCAiUuG7p2kgcm8gduG7q2EiLCAiUuG7p2kgcm8gdGjhuqVwIikpKQ0KDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIFJ1aVJvID0gZmFjdG9yKGMoIlJ1aSBybyBjYW8iLCAiUnVpIHJvIHZ1YSIsICJSdWkgcm8gdGhhcCIpLCBsZXZlbHMgPSBjKCJSdWkgcm8gY2FvIiwgIlJ1aSBybyB2dWEiLCAiUnVpIHJvIHRoYXAiKSksDQogIFByb2JhYmlsaXR5ID0gYyhsZW5ndGgoY2FvKS9sZW5ndGgoUlAzKSwgbGVuZ3RoKHZ1YXZ1YSkvbGVuZ3RoKFJQMyksIGxlbmd0aCh0aGFwKS9sZW5ndGgoUlAzKSkpDQpnZ3Bsb3QoZGF0YSwgYWVzKHggPSBSdWlSbywgeSA9IFByb2JhYmlsaXR5LCBmaWxsID0gUnVpUm8pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBjb2xvciA9ICJibHVlIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpwZXJjZW50KFByb2JhYmlsaXR5KSksIHZqdXN0ID0gLTAuNSwgY29sb3IgPSAiYmxhY2siKSANCg0KYGBgDQoNCiMjIyBTbyBzw6FuaCBnacOhIHRy4buLIFZhUiBnaeG7r2EgMyBtw7QgaMOsbmgNCg0KYGBge3J9DQpjb25maWRlbmNlX2xldmVscyA8LSBjKDkwLCA5NSwgOTcuNSkNCnZhcl92YWx1ZXMgPC0gYyh2YXIxLCB2YXIyLCB2YXIzKQ0KbW9kZWxfbmFtZXMgPC0gcmVwKGMoIk1IMSIsICJNSDIiLCAiTUgzIiksIGVhY2ggPSAzKQ0KDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIE1vZGVsID0gbW9kZWxfbmFtZXMsDQogIENvbmZpZGVuY2VMZXZlbCA9IHJlcChjb25maWRlbmNlX2xldmVscywgdGltZXMgPSAzKSwNCiAgVmFSID0gdmFyX3ZhbHVlcykNCg0KZ2dwbG90KGRhdGEsIGFlcyh4ID0gZmFjdG9yKENvbmZpZGVuY2VMZXZlbCksIHkgPSBWYVIsIGZpbGwgPSBNb2RlbCkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGxhYnMoeCA9ICJDb25maWRlbmNlX2xldmVscyIsIHkgPSAiVmFSIikgKw0KICBzY2FsZV9maWxsX2Rpc2NyZXRlKG5hbWUgPSJNb2RlbCIpDQpgYGANCg0KPGRpdiBhbGlnbj0ianVzdGlmeSI+ROG7sWEgdsOgbyBiaeG7g3UgxJHhu5MgdHLDqm4gdGEgdGjhuqV5IGdpw6EgdHLhu4sgVmFSIGPhu6dhIGRhbmggbeG7pWMga2hpIG3DtCBwaOG7j25nIGdpw6EgY+G7lSBwaGnhur91IHRoZW8gR0JNIGTGsOG7m2kgZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbiAoTUgxKSBjaG8gcmEga+G6v3QgcXXhuqMgdGjhuqVwIG5o4bqldCB2w6AgZ2nDoSB0cuG7iyBWYVIgY+G7p2EgZGFuaCBt4bulYyBraGkgbcO0IHBo4buPbmcgZ2nDoSBj4buVIHBoaeG6v3UgdGhlbyBHQk0gZMaw4bubaSBnaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSBnaMOpcCBnaeG7r2EgcGjDom4gcGjhu5FpIGNodeG6qW4gdsOgIHBow6JuIHBo4buRaSBsYXBsYWNlIChNSDMpIGNobyByYSBr4bq/dCBxdeG6oyBjYW8gbmjhuqV0IOG7nyBj4bqjIDMgbeG7qWMgxJHhu5kgdGluIGPhuq15LjwvZGl2PiANCg0KIyBDaMawxqFuZyA1LiBL4bq+VCBMVeG6rE4gDQoNCjxkaXYgYWxpZ249Imp1c3RpZnkiPkLDoGkgdGnhu4N1IGx14bqtbiBz4butIGThu6VuZyBwaMawxqFuZyBwaMOhcCBtw7QgcGjhu49uZyBNb250ZSBDYXJsbyDEkeG7gyB0w61uaCBnacOhIHRy4buLIHLhu6dpIHJvIGPhu6dhIGRhbmggbeG7pWMgxJHhuqd1IHTGsCBuaMOzbSBjw6FjIGPhu5UgcGhp4bq/dSBCxJBTIG5pw6ptIHnhur90IHRyw6puIEhPU0UgdHJvbmcgcGjhuqFtIHZpIHRo4budaSBnaWFuIDAxLzAxLzIwMTkgLSAyNC8wMy8yMDIzIC4gS2hpIHjDoWMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY2hvIGPDoWMgYmnhur9uIMSR4bqndSB2w6BvIMSR4buDIHRo4buxYyBoaeG7h24gbcO0IHBo4buPbmcsIHTDoWMgZ2nhuqMga2jDtG5nIHTDrG0gdGjhuqV5IHBow6JuIHBo4buRaSBj4bunYSBjaMO6bmcgZG8gxJHDsyBz4butIGThu6VuZyBtw7QgaMOsbmggR0JNIMSR4buDIHRo4buxYyBoaeG7h24gbcO0IHBo4buPbmcgY2hvIGPDoWMgYmnhur9uIG7DoHkgZMaw4bubaSBnaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluIHbDoCBwaMOibiBwaOG7kWkgZ2jDqXAuIEvhur90IHF14bqjIHRhIHTDrW5oIMSRxrDhu6NjIFZhUiDhu58gMyBt4bupYyB0aW4gY+G6rXkgOTAlOyA5NSU7IDk3LDUlIHTGsMahbmcg4bupbmcgduG7m2kgdOG7q25nIGdp4bqjIMSR4buLbmggcGjDom4gcGjhu5FpIGPhu6dhIG3DtCBow6xuaC4gUXVhIMSRw7MsIHRhIHRo4bqleSDEkcaw4bujYyBnacOhIHRy4buLIFZhUiBj4bunYSBkYW5oIG3hu6VjIGtoaSBtw7QgcGjhu49uZyBnacOhIGPhu5UgcGhp4bq/dSB0aGVvIEdCTSBkxrDhu5tpIGdp4bqjIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4gKE1IMSkgY2hvIHJhIGvhur90IHF14bqjIHRo4bqlcCBuaOG6pXQgdsOgIGdpw6EgdHLhu4sgVmFSIGPhu6dhIGRhbmggbeG7pWMga2hpIG3DtCBwaOG7j25nIGdpw6EgY+G7lSBwaGnhur91IHRoZW8gR0JNIGTGsOG7m2kgZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgZ2jDqXAgZ2nhu69hIHBow6JuIHBo4buRaSBjaHXhuqluIHbDoCBwaMOibiBwaOG7kWkgbGFwbGFjZSAoTUgzKSBjaG8gcmEga+G6v3QgcXXhuqMgY2FvIG5o4bqldCDhu58gY+G6oyAzIG3hu6ljIMSR4buZIHRpbiBj4bqteS48L2Rpdj4NCg0KIyBUw4BJIExJ4buGVSBUSEFNIEtI4bqiTw0KDQpNZW5zYWgsIEUuIFQuLCBCb2F0ZW5nLCBBLiwgRnJlbXBvbmcsIE4uIEsuLCAmIE1hcG9zYSwgRC4gKDIwMjMpLiBTaW11bGF0aW5nIHN0b2NrIHByaWNlcyB1c2luZyBnZW9tZXRyaWMgQnJvd25pYW4gbW90aW9uIG1vZGVsIHVuZGVyIG5vcm1hbCBhbmQgY29udm9sdXRlZCBkaXN0cmlidXRpb25hbCBhc3N1bXB0aW9ucy4gU2NpZW50aWZpYyBBZnJpY2FuLCAxOSwgZTAxNTU2Lg0KDQojIFBI4bukIEzhu6RDDQoNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkQ6L1JhbmRvbSBTaW11bGF0b24vQ2FwdHVyZS5QTkciKQ0KYGBgDQo=