1. Giới thiệu về khái quát về GDP và INDICATOR

  • GDP là thước đo để đánh giá sức khỏe của một nền kinh tế và đại diện cho tổng giá trị của hàng hóa và dịch vụ được sản xuất trong một nền kinh tế. Mục đích của nhiệm vụ này là phân tích GDP theo quốc gia và dữ liệu trước khi xử lý bằng cách sử dụng kiến thức thu được trong suốt mô-đun tiền xử lý dữ liệu.

1.1 Giới thiệu về BX.KLT.DINV.WD.GD.ZS trích xuất từ WorldBank

  • Sử dụng hàm WDIsearch để tìm kiếm các chỉ báo liên quan đến “Tổng vốn đầu tư nước ngoài” (Total) trong cơ sở dữ liệu World Development Indicators (WDI).

  • Bộ dữ liệu được lưu trữ trong biến ind.

  • Sử dụng hàm WDI để truy xuất dữ liệu cho một chỉ báo cụ thể từ cơ sở dữ liệu WDI.

    • Indicator: Mã định danh của chỉ số bạn muốn tải xuống. Trong trường hợp này, mã là “BX.KLT.DINV.WD.GD.ZS”.

    • Country: Một vectơ chứa tên các quốc gia bạn muốn lấy dữ liệu. Trong trường hợp này, vectơ chỉ chứa một phần tử “VNM” là Việt Nam

  • Hàm WDI sẽ trả về một data frame chứa dữ liệu thực tế cho chỉ số được chỉ định và quốc gia được chọn.

library(tidyverse)
library(WDI)
library(data.table)
pxh <- WDI(indicator = 'BX.KLT.DINV.WD.GD.ZS',country = c('VNM'))
data.table(pxh)
country iso2c iso3c year BX.KLT.DINV.WD.GD.ZS
Viet Nam VN VNM 2022 4.3786438
Viet Nam VN VNM 2021 4.2770809
Viet Nam VN VNM 2020 4.5583620
Viet Nam VN VNM 2019 4.8210749
Viet Nam VN VNM 2018 4.9982832
Viet Nam VN VNM 2017 5.0114872
Viet Nam VN VNM 2016 4.9008930
Viet Nam VN VNM 2015 4.9319077
Viet Nam VN VNM 2014 3.9408619
Viet Nam VN VNM 2013 4.1645452
Viet Nam VN VNM 2012 4.2783229
Viet Nam VN VNM 2011 4.3048743
Viet Nam VN VNM 2010 5.4347393
Viet Nam VN VNM 2009 7.1688199
Viet Nam VN VNM 2008 9.6630391
Viet Nam VN VNM 2007 8.6547177
Viet Nam VN VNM 2006 3.6160009
Viet Nam VN VNM 2005 3.3904036
Viet Nam VN VNM 2004 3.5440811
Viet Nam VN VNM 2003 3.6660123
Viet Nam VN VNM 2002 3.9926871
Viet Nam VN VNM 2001 3.9773355
Viet Nam VN VNM 2000 4.1639241
Viet Nam VN VNM 1999 4.9226635
Viet Nam VN VNM 1998 6.1412144
Viet Nam VN VNM 1997 8.2700968
Viet Nam VN VNM 1996 9.7130806
Viet Nam VN VNM 1995 8.5859659
Viet Nam VN VNM 1994 11.9394828
Viet Nam VN VNM 1993 7.0275926
Viet Nam VN VNM 1992 4.8033478
Viet Nam VN VNM 1991 3.9027968
Viet Nam VN VNM 1990 2.7813228
Viet Nam VN VNM 1989 0.0646719
Viet Nam VN VNM 1988 0.0302079
Viet Nam VN VNM 1987 0.0282712
Viet Nam VN VNM 1986 0.0001519
Viet Nam VN VNM 1985 -0.0005676
Viet Nam VN VNM 1984 NA
Viet Nam VN VNM 1983 NA
Viet Nam VN VNM 1982 NA
Viet Nam VN VNM 1981 NA
Viet Nam VN VNM 1980 NA
Viet Nam VN VNM 1979 NA
Viet Nam VN VNM 1978 NA
Viet Nam VN VNM 1977 NA
Viet Nam VN VNM 1976 NA
Viet Nam VN VNM 1975 NA
Viet Nam VN VNM 1974 NA
Viet Nam VN VNM 1973 NA
Viet Nam VN VNM 1972 NA
Viet Nam VN VNM 1971 NA
Viet Nam VN VNM 1970 NA
Viet Nam VN VNM 1969 NA
Viet Nam VN VNM 1968 NA
Viet Nam VN VNM 1967 NA
Viet Nam VN VNM 1966 NA
Viet Nam VN VNM 1965 NA
Viet Nam VN VNM 1964 NA
Viet Nam VN VNM 1963 NA
Viet Nam VN VNM 1962 NA
Viet Nam VN VNM 1961 NA
Viet Nam VN VNM 1960 NA
  • Đoạn mã “BX.KLT.DINV.WD.GD.ZS” là mã chỉ báo cho Tổng vốn đầu tư trực tiếp nước ngoài (FDI) ròng, theo giá trị hiện tại

(USD) trong bộ dữ liệu World Development Indicators (WDI).

  • Phân tích:

    • BX: Mã khu vực (Bank code) - “BX” đại diện cho “East Asia & Pacific” (Đông Á & Thái Bình Dương).

    • KLT: Nhóm chủ đề (Indicator group) - “KLT” đại diện cho “National Accounts”.

    • DINV: Chủ đề (Topic) - “DINV” đại diện cho “Direct investment, net inflows”.

    • WD: Loại dữ liệu (Data type) - “WD” đại diện cho “Current US”. - GD: Biến thể (Variant) - “GD” đại diện cho “Gross”. - ZS: Loại giá trị (Value type) - “ZS” đại diện cho “Z-scores”. Ý nghĩa: Mã này cho biết dữ liệu

được yêu cầu là: - Tổng vốn đầu tư trực tiếp nước ngoài (FDI) ròng (Net inflows) - Được tính theo giá trị hiện tại (Current US)

  • Bộ dữ liệu có 63 quan sát và 5 biến:

    • Country: khu vực

    • iso2c: mã quốc gia trong bộ dữ liệu.

    • iso3c: tên quốc gia.

    • year: năm của mỗi quan sát.

    • BX.KLT.DINV.WD.GD.ZS: Tổng vốn đầu tư nước ngoài(USD)

1.2 Giới thiệu về INDICATOR PCPIO_IX từ IFM

library(tidyverse)
library(imf.data)
tmp <- load_datasets('CPI')
cpi <- tmp$get_series(freq = 'M', ref_area = 'VN', indicator = 'PCPIO_IX')
cpi <- na.omit(cpi)
names(cpi) <- c('ThoiGian','NamGoc','CPI')
cpi <- head(cpi,20)
  • Giải thích các câu lệnh:
    • library(tidyverse): Tải gói tidyverse, bao gồm nhiều gói hữu ích cho phân tích và trực quan hóa dữ liệu trong R.
    • library(imf.data): Tải gói imf.data để truy cập và tải dữ liệu từ Quỹ Tiền tệ Quốc tế (IMF).
    • tmp <- load_datasets(‘CPI’): Tải bộ dữ liệu chỉ số giá tiêu dùng (CPI) từ IMF và lưu tạm thời vào biến tmp.
    • cpi <- tmp$get_series(freq = ‘M’, ref_area = ‘VN’, indicator = ‘NGDPNPI_EUR’): Trích xuất chuỗi dữ liệu cụ thể từ tmp với các tiêu chí:
    • freq = ‘M’: Tần suất dữ liệu theo tháng (Monthly).
    • ref_area = ‘VN’: Khu vực tham chiếu là Việt Nam.
    • indicator = ‘NGDPNPI_EUR’: Chỉ số giá tiêu dùng với đồng tiền cơ sở là Euro.
    • Lưu kết quả vào biến cpi.
    • cpi <- na.omit(cpi): Xóa các dòng chứa giá trị thiếu (NA) trong bảng dữ liệu cpi.
    • names(cpi) <- c(‘ThoiGian’,‘NamGoc’,‘CPI’): Đổi tên các cột trong bảng dữ liệu cpi:
    • Cột thứ nhất: ThoiGian (có thể chứa thời gian hoặc mã thời gian).
    • Cột thứ hai: NamGoc (năm gốc của chỉ số CPI).
    • Cột thứ ba: CPI (giá trị CPI).
    • head(cpi): Hiển thị 6 dòng đầu tiên của bảng dữ liệu cpi để xem tổng quan dữ liệu đã được xử lý.

2. Phân tích về BX.KLT.DINV.WD.GD.ZS theo giai đoạn

2.1 Lượt bỏ các số liệu thiếu ra khỏi dữ liệu để phân tích

library(ggplot2)
pxh <- na.omit(pxh)
data.table(pxh)
country iso2c iso3c year BX.KLT.DINV.WD.GD.ZS
Viet Nam VN VNM 2022 4.3786438
Viet Nam VN VNM 2021 4.2770809
Viet Nam VN VNM 2020 4.5583620
Viet Nam VN VNM 2019 4.8210749
Viet Nam VN VNM 2018 4.9982832
Viet Nam VN VNM 2017 5.0114872
Viet Nam VN VNM 2016 4.9008930
Viet Nam VN VNM 2015 4.9319077
Viet Nam VN VNM 2014 3.9408619
Viet Nam VN VNM 2013 4.1645452
Viet Nam VN VNM 2012 4.2783229
Viet Nam VN VNM 2011 4.3048743
Viet Nam VN VNM 2010 5.4347393
Viet Nam VN VNM 2009 7.1688199
Viet Nam VN VNM 2008 9.6630391
Viet Nam VN VNM 2007 8.6547177
Viet Nam VN VNM 2006 3.6160009
Viet Nam VN VNM 2005 3.3904036
Viet Nam VN VNM 2004 3.5440811
Viet Nam VN VNM 2003 3.6660123
Viet Nam VN VNM 2002 3.9926871
Viet Nam VN VNM 2001 3.9773355
Viet Nam VN VNM 2000 4.1639241
Viet Nam VN VNM 1999 4.9226635
Viet Nam VN VNM 1998 6.1412144
Viet Nam VN VNM 1997 8.2700968
Viet Nam VN VNM 1996 9.7130806
Viet Nam VN VNM 1995 8.5859659
Viet Nam VN VNM 1994 11.9394828
Viet Nam VN VNM 1993 7.0275926
Viet Nam VN VNM 1992 4.8033478
Viet Nam VN VNM 1991 3.9027968
Viet Nam VN VNM 1990 2.7813228
Viet Nam VN VNM 1989 0.0646719
Viet Nam VN VNM 1988 0.0302079
Viet Nam VN VNM 1987 0.0282712
Viet Nam VN VNM 1986 0.0001519
Viet Nam VN VNM 1985 -0.0005676
  • na.omit(d): Hàm na.omit được sử dụng để loại bỏ các giá trị thiếu (NA) khỏi data frame pmc.

2.1 Phân tích giai đoạn 1885- 2000

pxh %>% filter(year >= 1885 & year <= 2000) %>%
  ggplot(aes(x=year, y=BX.KLT.DINV.WD.GD.ZS)) +
  geom_line(color='red', linewidth =1) +
  labs(title = 'Biểu đồ thể hiện tốc độ tăng trưởng vốn đầu tư nước ngoài từ 1885- 2000')

  • Biểu đồ đường thể hiện tốc độ tăng trưởng của tổng vốn đầu tư giai đoạn 1885-2000 ta thấy:

    • Trục tung thể hiện số liệu tổng vốn đầu tư

    • Trục hoành thể hiện năm

    • Năm 1990-1993 có sự phát triển vượt bật trong giai đoạn này cho thấy các nước chú trọng đầu tư vào nền kinh tế của Việt Nam cho thấy tiềm lực phát triển của Việt Nam

    • Năm 1994- 2000 là giai đoạn có mức độ phát triển chậm và tươgn đối giảm so với giai đoạn trước

2.2 Phân tích giai đoạn 2001- 2011

pxh %>% filter(year >= 2001 & year <= 2011) %>%
  ggplot(aes(x=year, y=BX.KLT.DINV.WD.GD.ZS)) +
  geom_line(color='green', linewidth =1) +
  labs(title = 'Biểu đồ thể hiện tốc độ tăng trưởng vốn đầu tư nước ngoài từ 2001- 2011')

  • Biểu đồ đường thể hiện tốc độ tăng trưởng của tổng vốn đầu tư giai đoạn 2001-2011 ta thấy:

    • Trục tung thể hiện số liệu tổng vốn đầu tư

    • Trục hoành thể hiện năm

    • Năm 2006-2008 có sự phát triển vượt bật trong giai đoạn này cho thấy các nước chú trọng đầu tư vào nền kinh tế của Việt Nam cho thấy tiềm lực phát triển của Việt Nam

    • Năm 2008- 2011 là giai đoạn có mức độ phát triển chậm và tương đối giảm so với giai đoạn trước

    • Năm 2001- 2006 là giai đoạn mức độ đầu tư của nước ngoài nằm ở mức ổn định ko có sự bứt phá hay sụt giảm

2.3 Phân tích giai đoạn 2012-2022

pxh %>% filter(year >= 2012 & year <= 2022) %>%
  ggplot(aes(x=year, y=BX.KLT.DINV.WD.GD.ZS)) +
  geom_line(color='purple', linewidth =1) +
  labs(title = 'Biểu đồ thể hiện tốc độ tăng trưởng vốn đầu tư nước ngoàitừ 2001- 2011')

  • Biểu đồ đường thể hiện tốc độ tăng trưởng của tổng vốn đầu tư giai đoạn 2012-2022 ta thấy:

    • Trục tung thể hiện số liệu tổng vốn đầu tư

    • Trục hoành thể hiện năm

    • Năm 2014-2018 có sự phát triển vượt bật trong giai đoạn này cho thấy các nước chú trọng đầu tư vào nền kinh tế của Việt Nam cho thấy tiềm lực phát triển của Việt Nam

    • Năm 2012- 2014 là giai đoạn có mức độ phát triển chậm và tương đối giảm so với giai đoạn trước

    • Năm 2018- 2022 là giai đoạn mức độ đầu tư của nước ngoài nằm giảm mạnh so với giai đoạn trước

2.4 Các yếu tố ảnh hưởng tới quyết định chi tiêu của chính phủ ở nước ta ảnh hưởng tới nguồn đầu tư nước ngoài:

  • Môi trường đầu tư:

  • Chính sách đầu tư:

    • Mức độ ưu đãi thuế, chính sách hỗ trợ nhà đầu tư.

    • Hệ thống pháp luật minh bạch, ổn định và dễ dự đoán.

    • Thủ tục hành chính đơn giản, nhanh chóng.

  • Cơ sở hạ tầng:

    • Hệ thống giao thông, thông tin liên lạc, năng lượng phát triển.

    • Khu công nghiệp, khu chế xuất được quy hoạch bài bản.

  • Chất lượng nguồn nhân lực:

    • Lực lượng lao động trẻ, dồi dào, có trình độ học vấn và kỹ năng ngày càng cao.

    • Chi phí lao động cạnh tranh.

  • Thị trường:

  • Quy mô thị trường:

    • Dân số Việt Nam đông, trẻ và đang tăng trưởng.

    • Nhu cầu tiêu dùng ngày càng cao.

    • Mức độ hội nhập kinh tế quốc tế:

  • Việt Nam tham gia nhiều Hiệp định thương mại tự do (FTA), tạo điều kiện thuận lợi cho xuất nhập khẩu.

  • Thị trường Việt Nam được kết nối với thị trường của các nước khác trong khu vực và trên thế giới.

  • Yếu tố bên ngoài:

    • Sự ổn định chính trị:

    • Môi trường chính trị ổn định, an ninh đảm bảo.

  • Văn hóa và phong tục tập quán:

    -Văn hóa thân thiện, cởi mở, chào đón nhà đầu tư nước ngoài.

3. Phân tích về PCPIO_IX từ IMF

  • PCPIO_IX là viết tắt của Personal Consumption Expenditures Price Index, Excluding Food and Energy, hay Chỉ số giá chi tiêu tiêu dùng cá nhân, loại trừ thực phẩm và năng lượng.
ggplot(data = cpi, aes(x = `ThoiGian`, y = CPI)) +
  geom_col(fill = "orange", color = "black") +
  labs(x = "ThoiGian",y = "Chỉ số giá tiêu dùng (CPI)") +
  ggtitle("Biểu đồ chỉ số giá tiêu dùng (CPI) so với năm 2019 (2002 - 2005)") +
  theme_minimal() + theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))

- Nhận xét: - Chỉ số gía tiêu dùng của các tháng qua từng năm là không đồng đều - Từ đây các doanh nghiệp có thể phân tích hành vi người tiêu dùng để có thể đưa ra các chiế lược sản xuất phù hợp với thị trường

3.2 Phân tích chỉ số giá tiêu dùng (CPI) của tất cả các mặt hàng của nước ta

  • Để phân tích chi tiết chỉ số giá tiêu dùng (CPI) của tất cả các mặt hàng tại Việt Nam, chúng ta cần dựa vào các đặc điểm sau:

  • Biểu hiện chung:

    • Mức tăng/giảm của CPI: So sánh CPI của tháng/quý/năm hiện tại với tháng/quý/năm trước để đánh giá mức độ tăng/giảm chung của giá cả hàng hóa và dịch vụ.
    • So sánh với mục tiêu lạm phát: Xem xét mức tăng/giảm của CPI so với mục tiêu lạm phát do Chính phủ đề ra để đánh giá mức độ kiểm soát lạm phát.
    • Xu hướng biến động: Phân tích xu hướng biến động của CPI trong thời gian qua để dự đoán xu hướng trong tương lai.
    • Phân tích theo nhóm hàng hóa và dịch vụ:
    • Mức tăng/giảm của từng nhóm: So sánh mức tăng/giảm của từng nhóm hàng hóa và dịch vụ để xác định nhóm nào có mức tăng/giảm cao nhất, thấp nhất.
    • So sánh mức tăng/giảm giữa các nhóm: Phân tích mức tăng/giảm của các nhóm hàng hóa và dịch vụ để đánh giá mức độ ảnh hưởng của từng nhóm đến CPI chung.
    • Phân tích nguyên nhân: Xác định nguyên nhân dẫn đến mức tăng/giảm của từng nhóm hàng hóa và dịch vụ.
    • Phân tích theo khu vực: Mức tăng/giảm của từng khu vực: So sánh mức tăng/giảm của CPI giữa các khu vực (thành thị, nông thôn, vùng miền) để đánh giá mức độ chênh lệch giá cả giữa các khu vực. Phân tích nguyên nhân: Xác định nguyên nhân dẫn đến mức tăng/giảm của CPI giữa các khu vực.
    • Phân tích theo đối tượng: Mức tăng/giảm theo nhóm thu nhập: So sánh mức tăng/giảm của CPI giữa các nhóm thu nhập (cao, trung bình, thấp) để đánh giá mức độ ảnh hưởng của lạm phát đến từng nhóm thu nhập.
    • Phân tích nguyên nhân: Xác định nguyên nhân dẫn đến mức tăng/giảm của CPI giữa các nhóm thu nhập.
  • Ngoài ra, cần lưu ý một số điểm sau:

    • Dữ liệu CPI: Sử dụng dữ liệu CPI chính thức được công bố bởi Tổng cục Thống kê.
    • Cập nhật thông tin: Theo dõi cập nhật thông tin về giá cả thị trường, các yếu tố ảnh hưởng đến CPI để có phân tích chính xác.
    • Phân tích khách quan: Tránh đưa ra những nhận định chủ quan, thiếu cơ sở.
LS0tCnRpdGxlOiAiTmhp4buHbSB24bulIDYiCmF1dGhvcjogIlBo4bqhbSBYdcOibiBIb2FuIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBkZl9wcmludDoga2FibGUKICAgIGhpZ2hsaWdodDogdGFuZ28KICBwZGZfZG9jdW1lbnQ6CiAgICBleHRyYV9kZXBlbmRlbmNpZXM6CiAgICAgIHZpZXRuYW06IHV0ZjgKICAgIHRvYzogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBjbGFzcy5zb3VyY2UgPSAibnVtYmVyTGluZXMgbGluZUFuY2hvcnMiLCAKICBjbGFzcy5vdXRwdXQgPSBjKCJudW1iZXJMaW5lcyBsaW5lQW5jaG9ycyBjaHVua291dCIpIAopCmBgYAoKYGBge2NzcywgZWNobyA9IEZBTFNFfQpkaXYuc291cmNlQ29kZSBwcmUuY2h1bmtvdXQgewogIGJhY2tncm91bmQ6IHdoaXRlOwp9CmBgYAoKIyAxLiBHaeG7m2kgdGhp4buHdSB24buBIGtow6FpIHF1w6F0IHbhu4EgR0RQIHbDoCBJTkRJQ0FUT1IgCi0gR0RQIGzDoCB0aMaw4bubYyDEkW8gxJHhu4MgxJHDoW5oIGdpw6Egc+G7qWMga2jhu49lIGPhu6dhIG3hu5l0IG7hu4FuIGtpbmggdOG6vyB2w6AgxJHhuqFpIGRp4buHbiBjaG8gdOG7lW5nIGdpw6EgdHLhu4sgY+G7p2EgaMOgbmcgaMOzYSB2w6AgZOG7i2NoIHbhu6UgxJHGsOG7o2Mgc+G6o24geHXhuqV0IHRyb25nIG3hu5l0IG7hu4FuIGtpbmggdOG6vy4gTeG7pWMgxJHDrWNoIGPhu6dhIG5oaeG7h20gduG7pSBuw6B5IGzDoCBwaMOibiB0w61jaCBHRFAgdGhlbyBxdeG7kWMgZ2lhIHbDoCBk4buvIGxp4buHdSB0csaw4bubYyBraGkgeOG7rSBsw70gYuG6sW5nIGPDoWNoIHPhu60gZOG7pW5nIGtp4bq/biB0aOG7qWMgdGh1IMSRxrDhu6NjIHRyb25nIHN14buRdCBtw7QtxJF1biB0aeG7gW4geOG7rSBsw70gZOG7ryBsaeG7h3UuCgojIyAxLjEgR2nhu5tpIHRoaeG7h3UgduG7gSBCWC5LTFQuRElOVi5XRC5HRC5aUyB0csOtY2ggeHXhuqV0IHThu6sgV29ybGRCYW5rCgotIFPhu60gZOG7pW5nIGjDoG0gV0RJc2VhcmNoIMSR4buDIHTDrG0ga2nhur9tIGPDoWMgY2jhu4kgYsOhbyBsacOqbiBxdWFuIMSR4bq/biDigJxU4buVbmcgduG7kW4gxJHhuqd1IHTGsCBuxrDhu5tjIG5nb8OgaeKAnSAoVG90YWwpIHRyb25nIGPGoSBz4bufIGThu68gbGnhu4d1IFdvcmxkIERldmVsb3BtZW50IEluZGljYXRvcnMgKFdESSkuCgotIELhu5kgZOG7ryBsaeG7h3UgxJHGsOG7o2MgbMawdSB0cuG7ryB0cm9uZyBiaeG6v24gaW5kLgoKLSBT4butIGThu6VuZyBow6BtIFdESSDEkeG7gyB0cnV5IHh14bqldCBk4buvIGxp4buHdSBjaG8gbeG7mXQgY2jhu4kgYsOhbyBj4bulIHRo4buDIHThu6sgY8ahIHPhu58gZOG7ryBsaeG7h3UgV0RJLgoKICAtICoqSW5kaWNhdG9yKio6IE3DoyDEkeG7i25oIGRhbmggY+G7p2EgY2jhu4kgc+G7kSBi4bqhbiBtdeG7kW4gdOG6o2kgeHXhu5FuZy4gVHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHksIG3DoyBsw6Ag4oCcQlguS0xULkRJTlYuV0QuR0QuWlPigJ0uCgogIC0gKipDb3VudHJ5Kio6IE3hu5l0IHZlY3TGoSBjaOG7qWEgdMOqbiBjw6FjIHF14buRYyBnaWEgYuG6oW4gbXXhu5FuIGzhuqV5IGThu68gbGnhu4d1LiBUcm9uZyB0csaw4budbmcgaOG7o3AgbsOgeSwgdmVjdMahIGNo4buJIGNo4bupYSBt4buZdCBwaOG6p24gdOG7rSAiVk5NIiBsw6AgVmnhu4d0IE5hbQoKLSBIw6BtIFdESSBz4bq9IHRy4bqjIHbhu4EgbeG7mXQgZGF0YSBmcmFtZSBjaOG7qWEgZOG7ryBsaeG7h3UgdGjhu7FjIHThur8gY2hvIGNo4buJIHPhu5EgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaCB2w6AgcXXhu5FjIGdpYSDEkcaw4bujYyBjaOG7jW4uCgogIApgYGB7ciBtZXNzYWdlPUZBTFNFLCAsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KFdESSkKbGlicmFyeShkYXRhLnRhYmxlKQpweGggPC0gV0RJKGluZGljYXRvciA9ICdCWC5LTFQuRElOVi5XRC5HRC5aUycsY291bnRyeSA9IGMoJ1ZOTScpKQpkYXRhLnRhYmxlKHB4aCkKYGBgCgotIMSQb+G6oW4gbcOjICoqIkJYLktMVC5ESU5WLldELkdELlpTIioqIGzDoCBtw6MgY2jhu4kgYsOhbyBjaG8gVOG7lW5nIHbhu5FuIMSR4bqndSB0xrAgdHLhu7FjIHRp4bq/cCBuxrDhu5tjIG5nb8OgaSAoRkRJKSByw7JuZywgdGhlbyBnacOhIHRy4buLIGhp4buHbiB04bqhaSAKCihVU0QpIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgV29ybGQgRGV2ZWxvcG1lbnQgSW5kaWNhdG9ycyAoV0RJKS4KCi0gUGjDom4gdMOtY2g6CiAKICAtIEJYOiBNw6Mga2h1IHbhu7FjIChCYW5rIGNvZGUpIC0gIkJYIiDEkeG6oWkgZGnhu4duIGNobyAiRWFzdCBBc2lhICYgUGFjaWZpYyIgKMSQw7RuZyDDgSAmIFRow6FpIELDrG5oIETGsMahbmcpLgogCiAgLSBLTFQ6IE5ow7NtIGNo4bunIMSR4buBIChJbmRpY2F0b3IgZ3JvdXApIC0gIktMVCIgxJHhuqFpIGRp4buHbiBjaG8gIk5hdGlvbmFsIEFjY291bnRzIi4KIAogIC0gRElOVjogQ2jhu6cgxJHhu4EgKFRvcGljKSAtICJESU5WIiDEkeG6oWkgZGnhu4duIGNobyAiRGlyZWN0IGludmVzdG1lbnQsIG5ldCBpbmZsb3dzIi4KIAogIC0gV0Q6IExv4bqhaSBk4buvIGxp4buHdSAoRGF0YSB0eXBlKSAtICJXRCIgxJHhuqFpIGRp4buHbiBjaG8gIkN1cnJlbnQgVVM8c3BhbiBjbGFzcz0ibWF0aC1pbmxpbmUiPiIuIC0gKipHRCoqOiBCaeG6v24gdGjhu4MgKFZhcmlhbnQpIC0gIkdEIiAKxJHhuqFpIGRp4buHbiBjaG8gIkdyb3NzIi4gLSAqKlpTKio6IExv4bqhaSBnacOhIHRy4buLIChWYWx1ZSB0eXBlKSAtICJaUyIgxJHhuqFpIGRp4buHbiBjaG8gIlotc2NvcmVzIi4gKirDnSBuZ2jEqWE6KiogTcOjIG7DoHkgY2hvIGJp4bq/dCBk4buvIGxp4buHdSAKCsSRxrDhu6NjIHnDqnUgY+G6p3UgbMOgOiAtIFThu5VuZyB24buRbiDEkeG6p3UgdMawIHRy4buxYyB0aeG6v3Agbsaw4bubYyBuZ2/DoGkgKEZESSkgcsOybmcgKE5ldCBpbmZsb3dzKSAtIMSQxrDhu6NjIHTDrW5oIHRoZW8gZ2nDoSB0cuG7iyBoaeG7h24gdOG6oWkgKEN1cnJlbnQgVVMpCgotIELhu5kgZOG7ryBsaeG7h3UgY8OzIDYzIHF1YW4gc8OhdCB2w6AgNSBiaeG6v246CgogIC0gKipDb3VudHJ5Kio6IGtodSB24buxYwoKICAtICoqaXNvMmMqKjogbcOjIHF14buRYyBnaWEgdHJvbmcgYuG7mSBk4buvIGxp4buHdS4KCiAgLSAqKmlzbzNjKio6IHTDqm4gcXXhu5FjIGdpYS4KCiAgLSAqKnllYXIqKjogbsSDbSBj4bunYSBt4buXaSBxdWFuIHPDoXQuCgogIC0gKipCWC5LTFQuRElOVi5XRC5HRC5aUyoqOiBU4buVbmcgduG7kW4gxJHhuqd1IHTGsCBuxrDhu5tjIG5nb8OgaShVU0QpCgojIyAxLjIgR2nhu5tpIHRoaeG7h3UgduG7gSBJTkRJQ0FUT1IgUENQSU9fSVggdOG7qyBJRk0KYGBge3IgbWVzc2FnZT1GQUxTRSwgLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShpbWYuZGF0YSkKdG1wIDwtIGxvYWRfZGF0YXNldHMoJ0NQSScpCmNwaSA8LSB0bXAkZ2V0X3NlcmllcyhmcmVxID0gJ00nLCByZWZfYXJlYSA9ICdWTicsIGluZGljYXRvciA9ICdQQ1BJT19JWCcpCmNwaSA8LSBuYS5vbWl0KGNwaSkKbmFtZXMoY3BpKSA8LSBjKCdUaG9pR2lhbicsJ05hbUdvYycsJ0NQSScpCmNwaSA8LSBoZWFkKGNwaSwyMCkKYGBgCi0gR2nhuqNpIHRow61jaCBjw6FjIGPDonUgbOG7h25oOgogIC0gbGlicmFyeSh0aWR5dmVyc2UpOiBU4bqjaSBnw7NpIHRpZHl2ZXJzZSwgYmFvIGfhu5NtIG5oaeG7gXUgZ8OzaSBo4buvdSDDrWNoIGNobyBwaMOibiB0w61jaCB2w6AgdHLhu7FjIHF1YW4gaMOzYSBk4buvIGxp4buHdSB0cm9uZyBSLgogIC0gbGlicmFyeShpbWYuZGF0YSk6IFThuqNpIGfDs2kgaW1mLmRhdGEgxJHhu4MgdHJ1eSBj4bqtcCB2w6AgdOG6o2kgZOG7ryBsaeG7h3UgdOG7qyBRdeG7uSBUaeG7gW4gdOG7hyBRdeG7kWMgdOG6vyAoSU1GKS4KICAtIHRtcCA8LSBsb2FkX2RhdGFzZXRzKCdDUEknKTogVOG6o2kgYuG7mSBk4buvIGxp4buHdSBjaOG7iSBz4buRIGdpw6EgdGnDqnUgZMO5bmcgKENQSSkgdOG7qyBJTUYgdsOgIGzGsHUgdOG6oW0gdGjhu51pIHbDoG8gYmnhur9uIHRtcC4KICAtIGNwaSA8LSB0bXAkZ2V0X3NlcmllcyhmcmVxID0gJ00nLCByZWZfYXJlYSA9ICdWTicsIGluZGljYXRvciA9ICdOR0RQTlBJX0VVUicpOiBUcsOtY2ggeHXhuqV0IGNodeG7l2kgZOG7ryBsaeG7h3UgY+G7pSB0aOG7gyB04burIHRtcCB24bubaSBjw6FjIHRpw6p1IGNow606CiAgIC0gZnJlcSA9ICdNJzogVOG6p24gc3XhuqV0IGThu68gbGnhu4d1IHRoZW8gdGjDoW5nIChNb250aGx5KS4KICAgLSByZWZfYXJlYSA9ICdWTic6IEtodSB24buxYyB0aGFtIGNoaeG6v3UgbMOgIFZp4buHdCBOYW0uCiAgIC0gaW5kaWNhdG9yID0gJ05HRFBOUElfRVVSJzogQ2jhu4kgc+G7kSBnacOhIHRpw6p1IGTDuW5nIHbhu5tpIMSR4buTbmcgdGnhu4FuIGPGoSBz4bufIGzDoCBFdXJvLgogICAtIEzGsHUga+G6v3QgcXXhuqMgdsOgbyBiaeG6v24gY3BpLgogIC0gY3BpIDwtIG5hLm9taXQoY3BpKTogWMOzYSBjw6FjIGTDsm5nIGNo4bupYSBnacOhIHRy4buLIHRoaeG6v3UgKE5BKSB0cm9uZyBi4bqjbmcgZOG7ryBsaeG7h3UgY3BpLgogIC0gbmFtZXMoY3BpKSA8LSBjKCdUaG9pR2lhbicsJ05hbUdvYycsJ0NQSScpOiDEkOG7lWkgdMOqbiBjw6FjIGPhu5l0IHRyb25nIGLhuqNuZyBk4buvIGxp4buHdSBjcGk6CiAgIC0gQ+G7mXQgdGjhu6kgbmjhuqV0OiBUaG9pR2lhbiAoY8OzIHRo4buDIGNo4bupYSB0aOG7nWkgZ2lhbiBob+G6t2MgbcOjIHRo4budaSBnaWFuKS4KICAgLSBD4buZdCB0aOG7qSBoYWk6IE5hbUdvYyAobsSDbSBn4buRYyBj4bunYSBjaOG7iSBz4buRIENQSSkuCiAgIC0gQ+G7mXQgdGjhu6kgYmE6IENQSSAoZ2nDoSB0cuG7iyBDUEkpLgogIC0gaGVhZChjcGkpOiBIaeG7g24gdGjhu4sgNiBkw7JuZyDEkeG6p3UgdGnDqm4gY+G7p2EgYuG6o25nIGThu68gbGnhu4d1IGNwaSDEkeG7gyB4ZW0gdOG7lW5nIHF1YW4gZOG7ryBsaeG7h3UgxJHDoyDEkcaw4bujYyB44butIGzDvS4KCgojIDIuIFBow6JuIHTDrWNoIHbhu4EgQlguS0xULkRJTlYuV0QuR0QuWlMgdGhlbyBnaWFpIMSRb+G6oW4gCiMjIDIuMSBMxrDhu6N0IGLhu48gY8OhYyBz4buRIGxp4buHdSB0aGnhur91IHJhIGto4buPaSBk4buvIGxp4buHdSDEkeG7gyBwaMOibiB0w61jaCAKYGBge3IgZWNobz1UUlVFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGdncGxvdDIpCnB4aCA8LSBuYS5vbWl0KHB4aCkKZGF0YS50YWJsZShweGgpCmBgYAoKLSBuYS5vbWl0KGQpOiBIw6BtIG5hLm9taXQgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgbG/huqFpIGLhu48gY8OhYyBnacOhIHRy4buLIHRoaeG6v3UgKE5BKSBraOG7j2kgZGF0YSBmcmFtZSBwbWMuCgojIyAyLjEgUGjDom4gdMOtY2ggZ2lhaSDEkW/huqFuIDE4ODUtIDIwMDAKYGBge3IgZWNobz1UUlVFLCB3YXJuaW5nPUZBTFNFfQpweGggJT4lIGZpbHRlcih5ZWFyID49IDE4ODUgJiB5ZWFyIDw9IDIwMDApICU+JQogIGdncGxvdChhZXMoeD15ZWFyLCB5PUJYLktMVC5ESU5WLldELkdELlpTKSkgKwogIGdlb21fbGluZShjb2xvcj0ncmVkJywgbGluZXdpZHRoID0xKSArCiAgbGFicyh0aXRsZSA9ICdCaeG7g3UgxJHhu5MgdGjhu4MgaGnhu4duIHThu5FjIMSR4buZIHTEg25nIHRyxrDhu59uZyB24buRbiDEkeG6p3UgdMawIG7GsOG7m2Mgbmdvw6BpIHThu6sgMTg4NS0gMjAwMCcpCmBgYAoKLSBCaeG7g3UgxJHhu5MgxJHGsOG7nW5nIHRo4buDIGhp4buHbiB04buRYyDEkeG7mSB0xINuZyB0csaw4bufbmcgY+G7p2EgdOG7lW5nIHbhu5FuIMSR4bqndSB0xrAgZ2lhaSDEkW/huqFuIDE4ODUtMjAwMCB0YSB0aOG6pXk6CgogIC0gVHLhu6VjIHR1bmcgdGjhu4MgaGnhu4duIHPhu5EgbGnhu4d1IHThu5VuZyB24buRbiDEkeG6p3UgdMawCiAgIAogIC0gVHLhu6VjIGhvw6BuaCB0aOG7gyBoaeG7h24gbsSDbQogIAogIC0gTsSDbSAxOTkwLTE5OTMgY8OzIHPhu7EgcGjDoXQgdHJp4buDbiB2xrDhu6N0IGLhuq10IHRyb25nIGdpYWkgxJFv4bqhbiBuw6B5IGNobyB0aOG6pXkgY8OhYyBuxrDhu5tjIGNow7ogdHLhu41uZyDEkeG6p3UgdMawIHbDoG8gbuG7gW4ga2luaCB04bq/IGPhu6dhIFZp4buHdCBOYW0gCmNobyB0aOG6pXkgdGnhu4FtIGzhu7FjIHBow6F0IHRyaeG7g24gY+G7p2EgVmnhu4d0IE5hbQogIAogIC0gTsSDbSAxOTk0LSAyMDAwIGzDoCBnaWFpIMSRb+G6oW4gY8OzIG3hu6ljIMSR4buZIHBow6F0IHRyaeG7g24gY2jhuq1tIHbDoCB0xrDGoWduIMSR4buRaSBnaeG6o20gc28gduG7m2kgZ2lhaSDEkW/huqFuIHRyxrDhu5tjCiAgCiMjIDIuMiBQaMOibiB0w61jaCBnaWFpIMSRb+G6oW4gMjAwMS0gMjAxMQoKYGBge3IgZWNobz1UUlVFLCB3YXJuaW5nPUZBTFNFfQpweGggJT4lIGZpbHRlcih5ZWFyID49IDIwMDEgJiB5ZWFyIDw9IDIwMTEpICU+JQogIGdncGxvdChhZXMoeD15ZWFyLCB5PUJYLktMVC5ESU5WLldELkdELlpTKSkgKwogIGdlb21fbGluZShjb2xvcj0nZ3JlZW4nLCBsaW5ld2lkdGggPTEpICsKICBsYWJzKHRpdGxlID0gJ0Jp4buDdSDEkeG7kyB0aOG7gyBoaeG7h24gdOG7kWMgxJHhu5kgdMSDbmcgdHLGsOG7n25nIHbhu5FuIMSR4bqndSB0xrAgbsaw4bubYyBuZ2/DoGkgdOG7qyAyMDAxLSAyMDExJykKYGBgCgotIEJp4buDdSDEkeG7kyDEkcaw4budbmcgdGjhu4MgaGnhu4duIHThu5FjIMSR4buZIHTEg25nIHRyxrDhu59uZyBj4bunYSB04buVbmcgduG7kW4gxJHhuqd1IHTGsCBnaWFpIMSRb+G6oW4gMjAwMS0yMDExIHRhIHRo4bqleToKCiAgLSBUcuG7pWMgdHVuZyB0aOG7gyBoaeG7h24gc+G7kSBsaeG7h3UgdOG7lW5nIHbhu5FuIMSR4bqndSB0xrAKICAgCiAgLSBUcuG7pWMgaG/DoG5oIHRo4buDIGhp4buHbiBuxINtCiAgCiAgLSBOxINtIDIwMDYtMjAwOCBjw7Mgc+G7sSBwaMOhdCB0cmnhu4NuIHbGsOG7o3QgYuG6rXQgdHJvbmcgZ2lhaSDEkW/huqFuIG7DoHkgY2hvIHRo4bqleSBjw6FjIG7GsOG7m2MgY2jDuiB0cuG7jW5nIMSR4bqndSB0xrAgdsOgbyBu4buBbiBraW5oIHThur8gY+G7p2EgVmnhu4d0IE5hbSAKY2hvIHRo4bqleSB0aeG7gW0gbOG7sWMgcGjDoXQgdHJp4buDbiBj4bunYSBWaeG7h3QgTmFtCiAgCiAgLSBOxINtIDIwMDgtIDIwMTEgbMOgIGdpYWkgxJFv4bqhbiBjw7MgbeG7qWMgxJHhu5kgcGjDoXQgdHJp4buDbiBjaOG6rW0gdsOgIHTGsMahbmcgxJHhu5FpIGdp4bqjbSBzbyB24bubaSBnaWFpIMSRb+G6oW4gdHLGsOG7m2MKICAKICAtIE7Eg20gMjAwMS0gMjAwNiBsw6AgZ2lhaSDEkW/huqFuIG3hu6ljIMSR4buZIMSR4bqndSB0xrAgY+G7p2Egbsaw4bubYyBuZ2/DoGkgbuG6sW0g4bufIG3hu6ljIOG7lW4gxJHhu4tuaCBrbyBjw7Mgc+G7sSBi4bupdCBwaMOhIGhheSBz4buldCBnaeG6o20gCiAgCiMjIDIuMyBQaMOibiB0w61jaCBnaWFpIMSRb+G6oW4gMjAxMi0yMDIyCmBgYHtyIGVjaG89VFJVRSwgd2FybmluZz1GQUxTRX0KcHhoICU+JSBmaWx0ZXIoeWVhciA+PSAyMDEyICYgeWVhciA8PSAyMDIyKSAlPiUKICBnZ3Bsb3QoYWVzKHg9eWVhciwgeT1CWC5LTFQuRElOVi5XRC5HRC5aUykpICsKICBnZW9tX2xpbmUoY29sb3I9J3B1cnBsZScsIGxpbmV3aWR0aCA9MSkgKwogIGxhYnModGl0bGUgPSAnQmnhu4N1IMSR4buTIHRo4buDIGhp4buHbiB04buRYyDEkeG7mSB0xINuZyB0csaw4bufbmcgduG7kW4gxJHhuqd1IHTGsCBuxrDhu5tjIG5nb8OgaXThu6sgMjAwMS0gMjAxMScpCmBgYAoKLSBCaeG7g3UgxJHhu5MgxJHGsOG7nW5nIHRo4buDIGhp4buHbiB04buRYyDEkeG7mSB0xINuZyB0csaw4bufbmcgY+G7p2EgdOG7lW5nIHbhu5FuIMSR4bqndSB0xrAgZ2lhaSDEkW/huqFuIDIwMTItMjAyMiB0YSB0aOG6pXk6CgogIC0gVHLhu6VjIHR1bmcgdGjhu4MgaGnhu4duIHPhu5EgbGnhu4d1IHThu5VuZyB24buRbiDEkeG6p3UgdMawCiAgIAogIC0gVHLhu6VjIGhvw6BuaCB0aOG7gyBoaeG7h24gbsSDbQogIAogIC0gTsSDbSAyMDE0LTIwMTggY8OzIHPhu7EgcGjDoXQgdHJp4buDbiB2xrDhu6N0IGLhuq10IHRyb25nIGdpYWkgxJFv4bqhbiBuw6B5IGNobyB0aOG6pXkgY8OhYyBuxrDhu5tjIGNow7ogdHLhu41uZyDEkeG6p3UgdMawIHbDoG8gbuG7gW4ga2luaCB04bq/IGPhu6dhIFZp4buHdCBOYW0gCmNobyB0aOG6pXkgdGnhu4FtIGzhu7FjIHBow6F0IHRyaeG7g24gY+G7p2EgVmnhu4d0IE5hbQogIAogIC0gTsSDbSAyMDEyLSAyMDE0IGzDoCBnaWFpIMSRb+G6oW4gY8OzIG3hu6ljIMSR4buZIHBow6F0IHRyaeG7g24gY2jhuq1tIHbDoCB0xrDGoW5nIMSR4buRaSBnaeG6o20gc28gduG7m2kgZ2lhaSDEkW/huqFuIHRyxrDhu5tjCiAgCiAgLSBOxINtIDIwMTgtIDIwMjIgbMOgIGdpYWkgxJFv4bqhbiBt4bupYyDEkeG7mSDEkeG6p3UgdMawIGPhu6dhIG7GsOG7m2Mgbmdvw6BpIG7hurFtIGdp4bqjbSBt4bqhbmggc28gduG7m2kgZ2lhaSDEkW/huqFuIHRyxrDhu5tjCgojIyAyLjQgQ8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIHThu5tpIHF1eeG6v3QgxJHhu4tuaCBjaGkgdGnDqnUgY+G7p2EgY2jDrW5oIHBo4bunIOG7nyBuxrDhu5tjIHRhIOG6o25oIGjGsOG7n25nIHThu5tpIG5ndeG7k24gxJHhuqd1IHTGsCBuxrDhu5tjIG5nb8OgaToKLSBNw7RpIHRyxrDhu51uZyDEkeG6p3UgdMawOgoKLSBDaMOtbmggc8OhY2ggxJHhuqd1IHTGsDoKCiAgLSBN4bupYyDEkeG7mSDGsHUgxJHDo2kgdGh14bq/LCBjaMOtbmggc8OhY2ggaOG7lyB0cuG7oyBuaMOgIMSR4bqndSB0xrAuCiAgCiAgLSBI4buHIHRo4buRbmcgcGjDoXAgbHXhuq10IG1pbmggYuG6oWNoLCDhu5VuIMSR4buLbmggdsOgIGThu4UgZOG7sSDEkW/DoW4uCiAgCiAgLSBUaOG7pyB04bulYyBow6BuaCBjaMOtbmggxJHGoW4gZ2nhuqNuLCBuaGFuaCBjaMOzbmcuCiAgCi0gQ8ahIHPhu58gaOG6oSB04bqnbmc6CgogIC0gSOG7hyB0aOG7kW5nIGdpYW8gdGjDtG5nLCB0aMO0bmcgdGluIGxpw6puIGzhuqFjLCBuxINuZyBsxrDhu6NuZyBwaMOhdCB0cmnhu4NuLgogIAogIC0gS2h1IGPDtG5nIG5naGnhu4dwLCBraHUgY2jhur8geHXhuqV0IMSRxrDhu6NjIHF1eSBob+G6oWNoIGLDoGkgYuG6o24uCiAgCi0gQ2jhuqV0IGzGsOG7o25nIG5ndeG7k24gbmjDom4gbOG7sWM6CgogIC0gTOG7sWMgbMaw4bujbmcgbGFvIMSR4buZbmcgdHLhurssIGThu5NpIGTDoG8sIGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdsOgIGvhu7kgbsSDbmcgbmfDoHkgY8OgbmcgY2FvLgogIAogIC0gQ2hpIHBow60gbGFvIMSR4buZbmcgY+G6oW5oIHRyYW5oLgogIAotIFRo4buLIHRyxrDhu51uZzoKCi0gUXV5IG3DtCB0aOG7iyB0csaw4budbmc6CgogIC0gRMOibiBz4buRIFZp4buHdCBOYW0gxJHDtG5nLCB0cuG6uyB2w6AgxJFhbmcgdMSDbmcgdHLGsOG7n25nLgogIAogIC0gTmh1IGPhuqd1IHRpw6p1IGTDuW5nIG5nw6B5IGPDoG5nIGNhby4KICAKICAtIE3hu6ljIMSR4buZIGjhu5lpIG5o4bqtcCBraW5oIHThur8gcXXhu5FjIHThur86Ci0gVmnhu4d0IE5hbSB0aGFtIGdpYSBuaGnhu4F1IEhp4buHcCDEkeG7i25oIHRoxrDGoW5nIG3huqFpIHThu7EgZG8gKEZUQSksIHThuqFvIMSRaeG7gXUga2nhu4duIHRodeG6rW4gbOG7o2kgY2hvIHh14bqldCBuaOG6rXAga2jhuql1LgoKLSBUaOG7iyB0csaw4budbmcgVmnhu4d0IE5hbSDEkcaw4bujYyBr4bq/dCBu4buRaSB24bubaSB0aOG7iyB0csaw4budbmcgY+G7p2EgY8OhYyBuxrDhu5tjIGtow6FjIHRyb25nIGtodSB24buxYyB2w6AgdHLDqm4gdGjhur8gZ2nhu5tpLgoKLSBZ4bq/dSB04buRIGLDqm4gbmdvw6BpOgoKICAtIFPhu7Eg4buVbiDEkeG7i25oIGNow61uaCB0cuG7izoKICAKICAtIE3DtGkgdHLGsOG7nW5nIGNow61uaCB0cuG7iyDhu5VuIMSR4buLbmgsIGFuIG5pbmggxJHhuqNtIGLhuqNvLgogIAotIFbEg24gaMOzYSB2w6AgcGhvbmcgdOG7pWMgdOG6rXAgcXXDoW46CgogIC1WxINuIGjDs2EgdGjDom4gdGhp4buHbiwgY+G7n2kgbeG7nywgY2jDoG8gxJHDs24gbmjDoCDEkeG6p3UgdMawIG7GsOG7m2Mgbmdvw6BpLgogIAogIAojIDMuIFBow6JuIHTDrWNoIHbhu4EgUENQSU9fSVggdOG7qyBJTUYgCgotIFBDUElPX0lYIGzDoCB2aeG6v3QgdOG6r3QgY+G7p2EgUGVyc29uYWwgQ29uc3VtcHRpb24gRXhwZW5kaXR1cmVzIFByaWNlIEluZGV4LCBFeGNsdWRpbmcgRm9vZCBhbmQgRW5lcmd5LCBoYXkgKipDaOG7iSBz4buRIGdpw6EgY2hpIHRpw6p1IHRpw6p1IGTDuW5nIGPDoSBuaMOibiwgbG/huqFpIHRy4burIHRo4buxYyBwaOG6qW0gdsOgIG7Eg25nIGzGsOG7o25nLioqCmBgYHtyIGVjaG89VFJVRSwgd2FybmluZz1GQUxTRX0KZ2dwbG90KGRhdGEgPSBjcGksIGFlcyh4ID0gYFRob2lHaWFuYCwgeSA9IENQSSkpICsKICBnZW9tX2NvbChmaWxsID0gIm9yYW5nZSIsIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnMoeCA9ICJUaG9pR2lhbiIseSA9ICJDaOG7iSBz4buRIGdpw6EgdGnDqnUgZMO5bmcgKENQSSkiKSArCiAgZ2d0aXRsZSgiQmnhu4N1IMSR4buTIGNo4buJIHPhu5EgZ2nDoSB0acOqdSBkw7luZyAoQ1BJKSBzbyB24bubaSBuxINtIDIwMTkgKDIwMDIgLSAyMDA1KSIpICsKICB0aGVtZV9taW5pbWFsKCkgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCB2anVzdCA9IDEsIGhqdXN0PTEpKQpgYGAKLSBOaOG6rW4geMOpdDoKICAtIENo4buJIHPhu5EgZ8OtYSB0acOqdSBkw7luZyBj4bunYSBjw6FjIHRow6FuZyBxdWEgdOG7q25nIG7Eg20gbMOgIGtow7RuZyDEkeG7k25nIMSR4buBdSAKICAtIFThu6sgxJHDonkgY8OhYyBkb2FuaCBuZ2hp4buHcCBjw7MgdGjhu4MgcGjDom4gdMOtY2ggaMOgbmggdmkgbmfGsOG7nWkgdGnDqnUgZMO5bmcgxJHhu4MgY8OzIHRo4buDIMSRxrBhIHJhIGPDoWMgY2hp4bq/IGzGsOG7o2Mgc+G6o24geHXhuqV0IHBow7kgaOG7o3AgduG7m2kgdGjhu4sgdHLGsOG7nW5nIAoKIyMgMy4yIFBow6JuIHTDrWNoIGNo4buJIHPhu5EgZ2nDoSB0acOqdSBkw7luZyAoQ1BJKSBj4bunYSB04bqldCBj4bqjIGPDoWMgbeG6t3QgaMOgbmcgY+G7p2Egbsaw4bubYyB0YQotIMSQ4buDIHBow6JuIHTDrWNoIGNoaSB0aeG6v3QgY2jhu4kgc+G7kSBnacOhIHRpw6p1IGTDuW5nIChDUEkpIGPhu6dhIHThuqV0IGPhuqMgY8OhYyBt4bq3dCBow6BuZyB04bqhaSBWaeG7h3QgTmFtLCBjaMO6bmcgdGEgY+G6p24gZOG7sWEgdsOgbyBjw6FjIMSR4bq3YyDEkWnhu4NtIHNhdToKCi0gQmnhu4N1IGhp4buHbiBjaHVuZzogCiAgLSBN4bupYyB0xINuZy9naeG6o20gY+G7p2EgQ1BJOiBTbyBzw6FuaCBDUEkgY+G7p2EgdGjDoW5nL3F1w70vbsSDbSBoaeG7h24gdOG6oWkgduG7m2kgdGjDoW5nL3F1w70vbsSDbSB0csaw4bubYyDEkeG7gyDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSB0xINuZy9naeG6o20gY2h1bmcgY+G7p2EgZ2nDoSBj4bqjIGjDoG5nIGjDs2EgdsOgIGThu4tjaCB24bulLgogIC0gU28gc8OhbmggduG7m2kgbeG7pWMgdGnDqnUgbOG6oW0gcGjDoXQ6IFhlbSB4w6l0IG3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSBDUEkgc28gduG7m2kgbeG7pWMgdGnDqnUgbOG6oW0gcGjDoXQgZG8gQ2jDrW5oIHBo4bunIMSR4buBIHJhIMSR4buDIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIGtp4buDbSBzb8OhdCBs4bqhbSBwaMOhdC4KICAtIFh1IGjGsOG7m25nIGJp4bq/biDEkeG7mW5nOiBQaMOibiB0w61jaCB4dSBoxrDhu5tuZyBiaeG6v24gxJHhu5luZyBj4bunYSBDUEkgdHJvbmcgdGjhu51pIGdpYW4gcXVhIMSR4buDIGThu7EgxJFvw6FuIHh1IGjGsOG7m25nIHRyb25nIHTGsMahbmcgbGFpLgogIC0gUGjDom4gdMOtY2ggdGhlbyBuaMOzbSBow6BuZyBow7NhIHbDoCBk4buLY2ggduG7pToKICAtIE3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSB04burbmcgbmjDs206IFNvIHPDoW5oIG3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSB04burbmcgbmjDs20gaMOgbmcgaMOzYSB2w6AgZOG7i2NoIHbhu6UgxJHhu4MgeMOhYyDEkeG7i25oIG5ow7NtIG7DoG8gY8OzIG3hu6ljIHTEg25nL2dp4bqjbSBjYW8gbmjhuqV0LCB0aOG6pXAgbmjhuqV0LgogIC0gU28gc8OhbmggbeG7qWMgdMSDbmcvZ2nhuqNtIGdp4buvYSBjw6FjIG5ow7NtOiBQaMOibiB0w61jaCBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgY8OhYyBuaMOzbSBow6BuZyBow7NhIHbDoCBk4buLY2ggduG7pSDEkeG7gyDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSB04burbmcgbmjDs20gxJHhur9uIENQSSBjaHVuZy4KICAtIFBow6JuIHTDrWNoIG5ndXnDqm4gbmjDom46IFjDoWMgxJHhu4tuaCBuZ3V5w6puIG5ow6JuIGThuqtuIMSR4bq/biBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgdOG7q25nIG5ow7NtIGjDoG5nIGjDs2EgdsOgIGThu4tjaCB24bulLgogIC0gUGjDom4gdMOtY2ggdGhlbyBraHUgduG7sWM6IE3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSB04burbmcga2h1IHbhu7FjOiBTbyBzw6FuaCBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgQ1BJIGdp4buvYSBjw6FjIGtodSB24buxYyAodGjDoG5oIHRo4buLLCBuw7RuZyB0aMO0biwgdsO5bmcgbWnhu4FuKSDEkeG7gyDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSBjaMOqbmggbOG7h2NoIGdpw6EgY+G6oyBnaeG7r2EgY8OhYyBraHUgduG7sWMuClBow6JuIHTDrWNoIG5ndXnDqm4gbmjDom46IFjDoWMgxJHhu4tuaCBuZ3V5w6puIG5ow6JuIGThuqtuIMSR4bq/biBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgQ1BJIGdp4buvYSBjw6FjIGtodSB24buxYy4KICAtIFBow6JuIHTDrWNoIHRoZW8gxJHhu5FpIHTGsOG7o25nOiBN4bupYyB0xINuZy9naeG6o20gdGhlbyBuaMOzbSB0aHUgbmjhuq1wOiBTbyBzw6FuaCBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgQ1BJIGdp4buvYSBjw6FjIG5ow7NtIHRodSBuaOG6rXAgKGNhbywgdHJ1bmcgYsOsbmgsIHRo4bqlcCkgxJHhu4MgxJHDoW5oIGdpw6EgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgbOG6oW0gcGjDoXQgxJHhur9uIHThu6tuZyBuaMOzbSB0aHUgbmjhuq1wLgogIC0gUGjDom4gdMOtY2ggbmd1ecOqbiBuaMOibjogWMOhYyDEkeG7i25oIG5ndXnDqm4gbmjDom4gZOG6q24gxJHhur9uIG3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSBDUEkgZ2nhu69hIGPDoWMgbmjDs20gdGh1IG5o4bqtcC4KLSBOZ2/DoGkgcmEsIGPhuqduIGzGsHUgw70gbeG7mXQgc+G7kSDEkWnhu4NtIHNhdToKIAogIC0gROG7ryBsaeG7h3UgQ1BJOiBT4butIGThu6VuZyBk4buvIGxp4buHdSBDUEkgY2jDrW5oIHRo4bupYyDEkcaw4bujYyBjw7RuZyBi4buRIGLhu59pIFThu5VuZyBj4bulYyBUaOG7kW5nIGvDqi4KICAtIEPhuq1wIG5o4bqtdCB0aMO0bmcgdGluOiBUaGVvIGTDtWkgY+G6rXAgbmjhuq10IHRow7RuZyB0aW4gduG7gSBnacOhIGPhuqMgdGjhu4sgdHLGsOG7nW5nLCBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIENQSSDEkeG7gyBjw7MgcGjDom4gdMOtY2ggY2jDrW5oIHjDoWMuCiAgLSBQaMOibiB0w61jaCBraMOhY2ggcXVhbjogVHLDoW5oIMSRxrBhIHJhIG5o4buvbmcgbmjhuq1uIMSR4buLbmggY2jhu6cgcXVhbiwgdGhp4bq/dSBjxqEgc+G7ny4K