Giới thiệu

Hầu hết lợi nhuận của các ngân hàng đến từ hoạt động cấp tín dụng và cho vay. Cấp tín dụng là một trong những hoạt động tạo ra một tỉ trọng lớn về doanh thu và lợi nhuận cho ngân hàng nhưng cũng tiềm ẩn rất nhiều rủi ro (Zakrzewska, 2007). Rủi ro chính của ngân hàng là khả năng khách hàng không có khả năng hoàn trả lại khoản vay mà ngân hàng đã cấp. Mặt khác, quyết định có hay không cung cấp một khoản vay cho khách hàng thường phụ thuộc nhiều vào trình độ cũng như kinh nghiệm của cán nhân viên thẩm định tín dụng (Thomas, 2000).

Một trong những cách tiếp cận truyền thống khi xét duyệt các khoản vay là căn cứ vào một số tiêu chí xếp hạng mà một số trong số đó là rất khó đo lường, hoặc khó có thể đo lường chính xác. Chẳng hạn tiêu chuẩn 5C khi cấp tín dụng là dựa trên những đánh giá của ngân hàng về tư cách, năng lực, vốn, tài sản thế chấp, và điều kiện của người xin vay (Abrahams & Zhang, 2008).Một số tiêu chí, chẳng hạn như tư cách và năng lực của người vay là một nhân tố khó đánh giá và do vậy có thể dẫn đến các sai sót khi quyết định cho vay. Ngoài ra phương pháp đánh giá xếp hạng tín dụng dựa trên tiêu chuẩn 5C là có chi phí cao và có thể xẩy ra sự không nhất quán về việc cho vay hay không giữa những nhân viên thẩm định tín dụng khác nhau đối với cùng một hồ sơ xin vay. Vì những hạn chế này, các ngân hàng cũng như các tổ chức tài chính cần sử dụng các phương pháp thẩm định và xếp hạng tín dụng tin cậy, khách quan và chi phí thấp nhằm giúp những tổ chức này quyết định có hay không cấp tín dụng cho các hồ sơ xin vay (Akhavein, Frame, & White, 2005; Chye, Chin, & Peng, 2004). Hơn nữa, theo Thomas và ctg (2002), các ngân hàng cần một phương pháp xếp hạng tín dụng mà thỏa mãn những đòi hỏi sau: (1) chi phí rẻ và dễ vận hành, (2) nhanh chóng và ổn định, (3) đưa ra những quyết định nhất quán dựa trên các thông tin khách quan không phụ thuộc vào cảm xúc và tình cảm chủ quan của con người, và (4) hiệu quả của hệ phương pháp xếp hạng tín dụng có thể dễ dàng kiểm tra, điều chỉnh ở bất kì thời điểm nào nhằm điều chỉnh kịp thời với những thay đổi về chính sách hoặc điều kiện của nền kinh tế.

Đối với vấn đề phân loại và xếp hạng tín dụng, cách tiếp cận truyền thống là dựa vào các phương pháp thống kê thuần túy như hồi quy tuyến tính đa biến (Meyer & Pifer, 1970), phân tích khác biệt (Altman, 1968; Banasik, Crook, & Thomas, 2003), và hồi quy Logistic (Desai, Crook, & Overstreet, 1996; Dimitras, Zanakis, & Zopounidis, 1996; Elliott & Filinkov, 2008; Lee, Chiu, Lu, & Chen, 2002). Tuy nhiên những yêu cầu của hội đồng Basel về giám sát hoạt động ngân hàng (the Basel Committee on Banking Supervision) ban hành năm 2004 đòi hỏi các ngân hàng cũng như các tổ chức tài chính phải sử dụng những mô hình phân loại tín dụng tin cậy hơn nhằm nâng cao hiệu quả của việc phân bổ vốn. Nhằm đáp ứng những đòi hỏi trên, trong những năm gần đây đã xuất hiện một số mô hình phân loại tín dụng mới theo cách tiếp cận của học máy (Machine Learning) và trí thông minh nhân tạo (Artificial Intelligence). Không giống như các tiếp cận trước đây, các phương pháp mới này không đưa ra bất kì giả thiết chặt chẽ nào như đòi hỏi của các cách tiếp cận theo phương pháp thống kê. Thay vào đó, các tiếp cận mới này cố gắng khai thác và đưa ra các kiến thức, các thông tin đầu ra chỉ dựa vào các thông tin đầu vào là các quan sát, các thông tin trong quá khứ. Với bài toán phân loại tín dụng, một số mô hình thuộc học máy như mạng trí tuệ nhân tạo ANN (Artificial Neural Network), Máy Hỗ Trợ Véctơ SVM (Support Vector Machines), K láng giềng gần nhất KNN (K-Nearest Neighbors), rừng ngẫu nhiên RF (Random Forest), cây quyết định DT (Decision Tree) chẳng hạn đã chứng tỏ nhiều ưu thế về mức độ chính xác cũng như tin cậy so với một số mô hình phân loại truyền thống (Chi & Hsu, 2012; Huang et.all, 2004; Huang, Chen, & Wang, 2007; Ince & Aktan, 2009; Martens và ctg., 2010).

Dự án này được thực hiện nhằm đánh giá và so sánh chất lượng phân loại của mô hình Logisitic - một cách tiếp cận truyền thống của thống kê với ba mô hình Machine Learning là Random Forest, Gradient Boosting Machine và Artificial Neural Network (tên đầy đủ là Multi-layer Feedforward Artificial Neural Network) trên cả hai nhóm chỉ tiêu chính là: (1) các chỉ tiêu thống kê thuần túy như Accuracy, và (2) hệ quả kinh tế - lợi nhuận từ việc sử dụng mô hình đối với tổ chức tài chính - ngân hàng.

Dữ liệu sử dụng là hmeq.csv của cuốn CREDIT RISK ANALYTICS MEASUREMENT TECHNIQUES, APPLICATIONS, and EXAMPLES in SAS and R.

Section 1

Give an introduction to section 1A…

Sub Section 1

Write something in this sub section…

library(tidyverse)
theme_set(theme_minimal())
iris %>% 
  ggplot(aes(Sepal.Length, Sepal.Width, color = Species, fill = Species)) + 
  geom_point() + 
  geom_smooth(method = "lm")

Sub Section 2

Write something in this sub section…

summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

Section 2

Give an introduction to section 2…

Sub Section 1

Write something in this sub section…

iris %>% 
  group_by(Species) %>% 
  count() %>% 
  ggplot(aes(Species, n, fill = Species)) + 
  geom_col()

Sub Section 2

Write something in this sub section…

Sub Section 3

Write something in this sub section…

LS0tDQp0aXRsZTogIkEgQ29tcGxldGUgTWFjaGluZSBMZWFybmluZyBQcm9qZWN0IiANCiMgc3VidGl0bGU6ICJCdXNpbmVzcyBBbmFseXRpY3MgRGl2aXNpb24iDQphdXRob3I6ICJOZ3V5ZW4gQ2hpIER1bmciDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQogICAgIyBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiAiZmxhdGx5Ig0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KLS0tDQoNCmBgYHtyIHNldHVwLGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQ0KYGBgDQoNCiMjIEdp4bubaSB0aGnhu4d1DQoNCkjhuqd1IGjhur90IGzhu6NpIG5odeG6rW4gY+G7p2EgY8OhYyBuZ8OibiBow6BuZyDEkeG6v24gdOG7qyBob+G6oXQgxJHhu5luZyBj4bqlcCB0w61uIGThu6VuZyB2w6AgY2hvIHZheS4gQ+G6pXAgdMOtbiBk4bulbmcgbMOgIG3hu5l0IHRyb25nIG5o4buvbmcgaG/huqF0IMSR4buZbmcgdOG6oW8gcmEgbeG7mXQgdOG7iSB0cuG7jW5nIGzhu5tuIHbhu4EgZG9hbmggdGh1IHbDoCBs4bujaSBuaHXhuq1uIGNobyBuZ8OibiBow6BuZyBuaMawbmcgY8WpbmcgdGnhu4FtIOG6qW4gcuG6pXQgbmhp4buBdSBy4bunaSBybyAoWmFrcnpld3NrYSwgMjAwNykuIFLhu6dpIHJvIGNow61uaCBj4bunYSBuZ8OibiBow6BuZyBsw6Aga2jhuqMgbsSDbmcga2jDoWNoIGjDoG5nIGtow7RuZyBjw7Mga2jhuqMgbsSDbmcgaG/DoG4gdHLhuqMgbOG6oWkga2hv4bqjbiB2YXkgbcOgIG5nw6JuIGjDoG5nIMSRw6MgY+G6pXAuIE3hurd0IGtow6FjLCBxdXnhur90IMSR4buLbmggY8OzIGhheSBraMO0bmcgY3VuZyBj4bqlcCBt4buZdCBraG/huqNuIHZheSBjaG8ga2jDoWNoIGjDoG5nIHRoxrDhu51uZyBwaOG7pSB0aHXhu5ljIG5oaeG7gXUgdsOgbyB0csOsbmggxJHhu5kgY8WpbmcgbmjGsCBraW5oIG5naGnhu4dtIGPhu6dhIGPDoW4gbmjDom4gdmnDqm4gdGjhuqltIMSR4buLbmggdMOtbiBk4bulbmcgKFRob21hcywgMjAwMCkuDQoNCk3hu5l0IHRyb25nIG5o4buvbmcgY8OhY2ggdGnhur9wIGPhuq1uIHRydXnhu4FuIHRo4buRbmcga2hpIHjDqXQgZHV54buHdCBjw6FjIGtob+G6o24gdmF5IGzDoCAgY8SDbiBj4bupIHbDoG8gbeG7mXQgc+G7kSB0acOqdSBjaMOtIHjhur9wIGjhuqFuZyBtw6AgbeG7mXQgc+G7kSB0cm9uZyBz4buRIMSRw7MgbMOgIHLhuqV0IGtow7MgxJFvIGzGsOG7nW5nLCBob+G6t2Mga2jDsyBjw7MgdGjhu4MgxJFvIGzGsOG7nW5nIGNow61uaCB4w6FjLiBDaOG6s25nIGjhuqFuIHRpw6p1IGNodeG6qW4gNUMga2hpIGPhuqVwIHTDrW4gZOG7pW5nIGzDoCBk4buxYSB0csOqbiBuaOG7r25nIMSRw6FuaCBnacOhIGPhu6dhIG5nw6JuIGjDoG5nIHbhu4EgdMawIGPDoWNoLCBuxINuZyBs4buxYywgduG7kW4sIHTDoGkgc+G6o24gdGjhur8gY2jhuqVwLCB2w6AgxJFp4buBdSBraeG7h24gY+G7p2EgbmfGsOG7nWkgeGluIHZheSAoQWJyYWhhbXMgJiBaaGFuZywgMjAwOCkuTeG7mXQgc+G7kSB0acOqdSBjaMOtLCBjaOG6s25nIGjhuqFuIG5oxrAgdMawIGPDoWNoIHbDoCBuxINuZyBs4buxYyBj4bunYSBuZ8aw4budaSB2YXkgbMOgIG3hu5l0IG5ow6JuIHThu5Ega2jDsyDEkcOhbmggZ2nDoSB2w6AgZG8gduG6rXkgY8OzIHRo4buDIGThuqtuIMSR4bq/biBjw6FjIHNhaSBzw7N0IGtoaSBxdXnhur90IMSR4buLbmggY2hvIHZheS4gTmdvw6BpIHJhIHBoxrDGoW5nIHBow6FwIMSRw6FuaCBnacOhIHjhur9wIGjhuqFuZyB0w61uIGThu6VuZyBk4buxYSB0csOqbiB0acOqdSBjaHXhuqluIDVDIGzDoCBjw7MgY2hpIHBow60gY2FvIHbDoCBjw7MgdGjhu4MgeOG6qXkgcmEgc+G7sSBraMO0bmcgbmjhuqV0IHF1w6FuIHbhu4Egdmnhu4djIGNobyB2YXkgaGF5IGtow7RuZyBnaeG7r2Egbmjhu69uZyBuaMOibiB2acOqbiB0aOG6qW0gxJHhu4tuaCB0w61uIGThu6VuZyBraMOhYyBuaGF1IMSR4buRaSB24bubaSBjw7luZyBt4buZdCBo4buTIHPGoSB4aW4gdmF5LiBWw6wgbmjhu69uZyBo4bqhbiBjaOG6vyBuw6B5LCBjw6FjIG5nw6JuIGjDoG5nIGPFqW5nIG5oxrAgY8OhYyB04buVIGNo4bupYyB0w6BpIGNow61uaCBj4bqnbiBz4butIGThu6VuZyBjw6FjIHBoxrDGoW5nIHBow6FwIHRo4bqpbSDEkeG7i25oIHbDoCB44bq/cCBo4bqhbmcgdMOtbiBk4bulbmcgdGluIGPhuq15LCBraMOhY2ggcXVhbiB2w6AgY2hpIHBow60gdGjhuqVwIG5o4bqxbSBnacO6cCBuaOG7r25nIHThu5UgY2jhu6ljIG7DoHkgcXV54bq/dCDEkeG7i25oIGPDsyBoYXkga2jDtG5nIGPhuqVwIHTDrW4gZOG7pW5nIGNobyBjw6FjIGjhu5Mgc8ahIHhpbiB2YXkgKEFraGF2ZWluLCBGcmFtZSwgJiBXaGl0ZSwgMjAwNTsgQ2h5ZSwgQ2hpbiwgJiBQZW5nLCAyMDA0KS4gSMahbiBu4buvYSwgdGhlbyBUaG9tYXMgdsOgIGN0ZyAoMjAwMiksIGPDoWMgbmfDom4gaMOgbmcgY+G6p24gbeG7mXQgcGjGsMahbmcgcGjDoXAgeOG6v3AgaOG6oW5nIHTDrW4gZOG7pW5nIG3DoCB0aOG7j2EgbcOjbiBuaOG7r25nIMSRw7JpIGjhu49pIHNhdTogKDEpIGNoaSBwaMOtIHLhursgdsOgIGThu4UgduG6rW4gaMOgbmgsICgyKSBuaGFuaCBjaMOzbmcgdsOgIOG7lW4gxJHhu4tuaCwgKDMpIMSRxrBhIHJhIG5o4buvbmcgcXV54bq/dCDEkeG7i25oIG5o4bqldCBxdcOhbiBk4buxYSB0csOqbiBjw6FjIHRow7RuZyB0aW4ga2jDoWNoIHF1YW4ga2jDtG5nIHBo4bulIHRodeG7mWMgdsOgbyBj4bqjbSB4w7pjIHbDoCB0w6xuaCBj4bqjbSBjaOG7pyBxdWFuIGPhu6dhIGNvbiBuZ8aw4budaSwgdsOgICg0KSBoaeG7h3UgcXXhuqMgY+G7p2EgaOG7hyBwaMawxqFuZyBwaMOhcCB44bq/cCBo4bqhbmcgdMOtbiBk4bulbmcgY8OzIHRo4buDIGThu4UgZMOgbmcga2nhu4NtIHRyYSwgxJFp4buBdSBjaOG7iW5oIOG7nyBi4bqldCBrw6wgdGjhu51pIMSRaeG7g20gbsOgbyBuaOG6sW0gxJFp4buBdSBjaOG7iW5oIGvhu4twIHRo4budaSB24bubaSBuaOG7r25nIHRoYXkgxJHhu5VpIHbhu4EgY2jDrW5oIHPDoWNoIGhv4bq3YyDEkWnhu4F1IGtp4buHbiBj4bunYSBu4buBbiBraW5oIHThur8uDQoNCg0KxJDhu5FpIHbhu5tpIHbhuqVuIMSR4buBIHBow6JuIGxv4bqhaSB2w6AgeOG6v3AgaOG6oW5nIHTDrW4gZOG7pW5nLCBjw6FjaCB0aeG6v3AgY+G6rW4gdHJ1eeG7gW4gdGjhu5FuZyBsw6AgZOG7sWEgdsOgbyBjw6FjIHBoxrDGoW5nIHBow6FwIHRo4buRbmcga8OqIHRodeG6p24gdMO6eSBuaMawIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIMSRYSBiaeG6v24gKE1leWVyICYgUGlmZXIsIDE5NzApLCBwaMOibiB0w61jaCBraMOhYyBiaeG7h3QgKEFsdG1hbiwgMTk2ODsgQmFuYXNpaywgQ3Jvb2ssICYgVGhvbWFzLCAyMDAzKSwgdsOgIGjhu5NpIHF1eSBMb2dpc3RpYyAoRGVzYWksIENyb29rLCAmIE92ZXJzdHJlZXQsIDE5OTY7IERpbWl0cmFzLCBaYW5ha2lzLCAmIFpvcG91bmlkaXMsIDE5OTY7IEVsbGlvdHQgJiBGaWxpbmtvdiwgMjAwODsgTGVlLCBDaGl1LCBMdSwgJiBDaGVuLCAyMDAyKS4gVHV5IG5oacOqbiBuaOG7r25nIHnDqnUgY+G6p3UgY+G7p2EgaOG7mWkgxJHhu5NuZyBCYXNlbCB24buBIGdpw6FtIHPDoXQgaG/huqF0IMSR4buZbmcgbmfDom4gaMOgbmcgKHRoZSBCYXNlbCBDb21taXR0ZWUgb24gQmFua2luZyBTdXBlcnZpc2lvbikgYmFuIGjDoG5oIG7Eg20gMjAwNCDEkcOyaSBo4buPaSBjw6FjIG5nw6JuIGjDoG5nIGPFqW5nIG5oxrAgY8OhYyB04buVIGNo4bupYyB0w6BpIGNow61uaCBwaOG6o2kgc+G7rSBk4bulbmcgbmjhu69uZyBtw7QgaMOsbmggcGjDom4gbG/huqFpIHTDrW4gZOG7pW5nIHRpbiBj4bqteSBoxqFuIG5o4bqxbSBuw6JuZyBjYW8gaGnhu4d1IHF14bqjIGPhu6dhIHZp4buHYyBwaMOibiBi4buVIHbhu5FuLiBOaOG6sW0gxJHDoXAg4bupbmcgbmjhu69uZyDEkcOyaSBo4buPaSB0csOqbiwgdHJvbmcgbmjhu69uZyBuxINtIGfhuqduIMSRw6J5IMSRw6MgeHXhuqV0IGhp4buHbiBt4buZdCBz4buRIG3DtCBow6xuaCBwaMOibiBsb+G6oWkgdMOtbiBk4bulbmcgbeG7m2kgdGhlbyBjw6FjaCB0aeG6v3AgY+G6rW4gY+G7p2EgaOG7jWMgbcOheSAoTWFjaGluZSBMZWFybmluZykgdsOgIHRyw60gdGjDtG5nIG1pbmggbmjDom4gdOG6oW8gKEFydGlmaWNpYWwgSW50ZWxsaWdlbmNlKS4gS2jDtG5nIGdp4buRbmcgbmjGsCBjw6FjIHRp4bq/cCBj4bqtbiB0csaw4bubYyDEkcOieSwgY8OhYyBwaMawxqFuZyBwaMOhcCBt4bubaSBuw6B5IGtow7RuZyDEkcawYSByYSBi4bqldCBrw6wgZ2nhuqMgdGhp4bq/dCBjaOG6t3QgY2jhur0gbsOgbyBuaMawIMSRw7JpIGjhu49pIGPhu6dhIGPDoWMgY8OhY2ggdGnhur9wIGPhuq1uIHRoZW8gcGjGsMahbmcgcGjDoXAgdGjhu5FuZyBrw6ouIFRoYXkgdsOgbyDEkcOzLCBjw6FjIHRp4bq/cCBj4bqtbiBt4bubaSBuw6B5IGPhu5EgZ+G6r25nIGtoYWkgdGjDoWMgdsOgIMSRxrBhIHJhIGPDoWMga2nhur9uIHRo4bupYywgY8OhYyB0aMO0bmcgdGluIMSR4bqndSByYSBjaOG7iSBk4buxYSB2w6BvIGPDoWMgdGjDtG5nIHRpbiDEkeG6p3UgdsOgbyBsw6AgY8OhYyBxdWFuIHPDoXQsIGPDoWMgdGjDtG5nIHRpbiB0cm9uZyBxdcOhIGto4bupLiBW4bubaSBiw6BpIHRvw6FuIHBow6JuIGxv4bqhaSB0w61uIGThu6VuZywgbeG7mXQgc+G7kSBtw7QgaMOsbmggdGh14buZYyBo4buNYyBtw6F5IG5oxrAgbeG6oW5nIHRyw60gdHXhu4cgbmjDom4gdOG6oW8gQU5OIChBcnRpZmljaWFsIE5ldXJhbCBOZXR3b3JrKSwgTcOheSBI4buXIFRy4bujIFbDqWN0xqEgU1ZNIChTdXBwb3J0IFZlY3RvciBNYWNoaW5lcyksIEsgbMOhbmcgZ2nhu4FuZyBn4bqnbiBuaOG6pXQgS05OIChLLU5lYXJlc3QgTmVpZ2hib3JzKSwgcuG7q25nIG5n4bqrdSBuaGnDqm4gUkYgKFJhbmRvbSBGb3Jlc3QpLCBjw6J5IHF1eeG6v3QgxJHhu4tuaCBEVCAoRGVjaXNpb24gVHJlZSkgY2jhurNuZyBo4bqhbiDEkcOjIGNo4bupbmcgdOG7jyBuaGnhu4F1IMawdSB0aOG6vyB24buBIG3hu6ljIMSR4buZIGNow61uaCB4w6FjIGPFqW5nIG5oxrAgdGluIGPhuq15IHNvIHbhu5tpIG3hu5l0IHPhu5EgbcO0IGjDrG5oIHBow6JuIGxv4bqhaSB0cnV54buBbiB0aOG7kW5nIChDaGkgJiBIc3UsIDIwMTI7IEh1YW5nIGV0LmFsbCwgMjAwNDsgSHVhbmcsIENoZW4sICYgV2FuZywgMjAwNzsgSW5jZSAmIEFrdGFuLCAyMDA5OyBNYXJ0ZW5zIHbDoCBjdGcuLCAyMDEwKS4NCg0KROG7sSDDoW4gbsOgeSDEkcaw4bujYyB0aOG7sWMgaGnhu4duIG5o4bqxbSDEkcOhbmggZ2nDoSB2w6Agc28gc8OhbmggY2jhuqV0IGzGsOG7o25nIHBow6JuIGxv4bqhaSBj4bunYSBtw7QgaMOsbmggTG9naXNpdGljIC0gbeG7mXQgY8OhY2ggdGnhur9wIGPhuq1uIHRydXnhu4FuIHRo4buRbmcgY+G7p2EgdGjhu5FuZyBrw6ogduG7m2kgIGJhIG3DtCBow6xuaCBNYWNoaW5lIExlYXJuaW5nIGzDoCBSYW5kb20gRm9yZXN0LCBHcmFkaWVudCBCb29zdGluZyBNYWNoaW5lIHbDoCBBcnRpZmljaWFsIE5ldXJhbCBOZXR3b3JrICh0w6puIMSR4bqneSDEkeG7pyBsw6AgTXVsdGktbGF5ZXIgRmVlZGZvcndhcmQgQXJ0aWZpY2lhbCBOZXVyYWwgTmV0d29yaykgdHLDqm4gY+G6oyBoYWkgbmjDs20gY2jhu4kgdGnDqnUgY2jDrW5oIGzDoDogKDEpIGPDoWMgY2jhu4kgdGnDqnUgdGjhu5FuZyBrw6ogdGh14bqnbiB0w7p5IG5oxrAgQWNjdXJhY3ksIHbDoCAoMikgaOG7hyBxdeG6oyBraW5oIHThur8gLSBs4bujaSBuaHXhuq1uIHThu6sgdmnhu4djIHPhu60gZOG7pW5nIG3DtCBow6xuaCDEkeG7kWkgduG7m2kgdOG7lSBjaOG7qWMgdMOgaSBjaMOtbmggLSBuZ8OibiBow6BuZy4gDQoNCkThu68gbGnhu4d1IHPhu60gZOG7pW5nIGzDoCAqKmhtZXEuY3N2KiogY+G7p2EgY3Xhu5FuIFtDUkVESVQgUklTSyBBTkFMWVRJQ1MgTUVBU1VSRU1FTlQgVEVDSE5JUVVFUywgQVBQTElDQVRJT05TLCBhbmQgRVhBTVBMRVMgaW4gU0FTIGFuZCBSXShodHRwOi8vd3d3LmNyZWRpdHJpc2thbmFseXRpY3MubmV0L2RhdGFzZXRzLXByaXZhdGUuaHRtbCkuIA0KDQoNCiMjIFNlY3Rpb24gMSB7LnRhYnNldH0NCg0KR2l2ZSBhbiBpbnRyb2R1Y3Rpb24gdG8gc2VjdGlvbiAxQS4uLg0KDQoNCiMjIyBTdWIgU2VjdGlvbiAxDQoNCldyaXRlIHNvbWV0aGluZyBpbiB0aGlzIHN1YiBzZWN0aW9uLi4uIA0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KdGhlbWVfc2V0KHRoZW1lX21pbmltYWwoKSkNCmlyaXMgJT4lIA0KICBnZ3Bsb3QoYWVzKFNlcGFsLkxlbmd0aCwgU2VwYWwuV2lkdGgsIGNvbG9yID0gU3BlY2llcywgZmlsbCA9IFNwZWNpZXMpKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIikNCg0KYGBgDQoNCiMjIyBTdWIgU2VjdGlvbiAyDQoNCldyaXRlIHNvbWV0aGluZyBpbiB0aGlzIHN1YiBzZWN0aW9uLi4uDQoNCmBgYHtyfQ0Kc3VtbWFyeShpcmlzKQ0KYGBgDQoNCg0KIyMgU2VjdGlvbiAyIHsudGFic2V0fQ0KDQpHaXZlIGFuIGludHJvZHVjdGlvbiB0byBzZWN0aW9uIDIuLi4NCg0KIyMjIFN1YiBTZWN0aW9uIDENCg0KV3JpdGUgc29tZXRoaW5nIGluIHRoaXMgc3ViIHNlY3Rpb24uLi4gDQoNCmBgYHtyfQ0KaXJpcyAlPiUgDQogIGdyb3VwX2J5KFNwZWNpZXMpICU+JSANCiAgY291bnQoKSAlPiUgDQogIGdncGxvdChhZXMoU3BlY2llcywgbiwgZmlsbCA9IFNwZWNpZXMpKSArIA0KICBnZW9tX2NvbCgpDQpgYGANCg0KIyMjIFN1YiBTZWN0aW9uIDINCg0KV3JpdGUgc29tZXRoaW5nIGluIHRoaXMgc3ViIHNlY3Rpb24uLi4NCg0KIyMjIFN1YiBTZWN0aW9uIDMNCg0KV3JpdGUgc29tZXRoaW5nIGluIHRoaXMgc3ViIHNlY3Rpb24uLi4NCg0KDQoNCg0KDQoNCg==