NHIỆM VỤ 5 BẢNG PHÂN TÍCH VỀ TÌNH HÌNH SẢN XUẤT NÔNG NGHIỆP CỦA ẤN ĐỘ


MỤC TIÊU PHÂN TÍCH

Phân tích tình hình sản xuất nông nghiệp ở Ấn Độ đòi hỏi sự chú ý đến một số mục tiêu quan trọng để hiểu rõ về thị trường nông nghiệp của quốc gia này. Dưới đây là một số mục tiêu quan trọng cần chú ý:

  • Đánh giá mức độ hiệu quả của sản xuất nông nghiệp

  • Nghiên cứu về sự ảnh hưởng của các yếu tố như thời tiết, chất dinh dưỡng đất, và kỹ thuật canh tác đối với năng suất. Nghiên cứu sự phân bố đất đai ở Ấn Độ, cũng như đánh giá hiệu quả sử dụng đất đai trong nông nghiệp.

  • Xem xét ảnh hưởng của nông nghiệp đối với môi trường và phát triển các biện pháp bảo vệ môi trường trong sản xuất nông nghiệp.

PHƯƠNG PHÁP NGHIÊN CỨU

Sử dụng các phương pháp thống kê mô tả dữ liệu:

  • Rút trích dữ liệu

  • Mã hóa dữ liệu

  • Lập bảng tần số

  • Tính toán các đặc trưng đo lường

  • Nhận xét kết quả

BỘ DỮ LIỆU

Bộ dữ liệu về tình hình nông nghiệp của Ấn Độ trong những năm cuối TK 19 đến nay. Dữ liệu được tải về từ Dataset Search

1. Tổng quan về nông nghiệp Ấn Độ

Nằm ở khu vực Tây Nam Á, Ấn Độ có diện tích tự nhiên gần 33 triệu km2, trong đó, diện tích đất nông nghiệp là 141,23 triệu ha với dân số trên 1 tỉ người, có truyền thống văn hóa, lịch sử lâu đời và thế mạnh về phát triển nông nghiệp. Lục địa này có những đồng bằng rộng lớn mà không một quốc gia nào trên thế giới có được. Chỉ riêng đồng bằng Ấn - Hằng, diện tích khoảng 775.000 km2 (gấp 2,3 lần diện tích Việt Nam) với điều kiện tự nhiên thuận lợi đã tạo nên vùng kinh tế trù phú.

Sau đây là dữ liệu về nền nông nghiệp của Ấn Độ đã được tải về

library(csv)
nt <- read.csv(file= 'C:/Users/Admin/Downloads/India Agriculture Crop Production.csv')
nt <- nt[nt$State=='Andaman and Nicobar Islands' | nt$State=='Uttarakhand' | nt$State=='West Bengal' | nt$State=='Uttarakhand'  , ]

Bảng dữ liệu cho ta biết các thông tin sau:

  • State: Bang ở Ấn Độ
  • DiDistrict: tên một thị xã, thị trấn hay thành phố… thuộc bang nào đó ở Ấn Độ
  • Crop: tên nông sản sản xuất
  • Year: năm phân tích
  • Season: mùa vụ
  • Area: diện tích trồng trọt, sản xuất
  • Area.Units: đơn vị diện tích trồng trọt sản xuất (hectare)
  • Production: sản lượng
  • Production.Units: đơn vị sản lượng (tấn)
  • Yiels: năng suất

VẼ BIỂU ĐỒ

1. Nông sản

Ngành nông nghiệp là nguồn sinh kế chính của khoảng 58% dân số Ấn Độ. Mặc dù đóng góp của nó vào tổng sản phẩm quốc nội (GDP) đã giảm xuống dưới 20% và đóng góp của các ngành khác tăng với tốc độ nhanh hơn.

Do đó các loại nông sản Ấn Độ đa dạng và phong phú với nhiều loại khác nhau điển hình là gạo, gừng, khoai tây, ragi…

nt1 <- nt[nt$Crop=='Rice' | nt$Crop=='Sugarcane' | nt$Crop=='Ragi' | nt$Crop=='Wheat' | nt$Crop=='Potato' | nt$Crop=='Ginger', ]
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(scales)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ readr::col_factor() masks scales::col_factor()
## ✖ purrr::discard()    masks scales::discard()
## ✖ dplyr::filter()     masks stats::filter()
## ✖ dplyr::lag()        masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
nt1 %>% group_by(Crop) %>% summarise(m= n()) %>% ggplot(aes(x = Crop, y = m )) + 
  geom_col(fill='pink') + 
  labs(x = 'Nông sản ', y = 'N')

Qua biểu đồ tổng hợp các loại nông sản phổ biến trong đó gạo vẫn là loại nông sản đc trồng nhiều nhất ở Ấn Độ

nt1 %>% group_by(Crop) %>% summarise(n = n()) %>%
  ggplot(aes(x = '', y = n,fill = Crop)) +
  geom_col() +
  geom_text(aes(x = 1.3, label = n),position = position_stack(vjust = .5)) +
  coord_polar('y')

nt1 %>% group_by(Crop) %>% summarise(n = mean(Yield)) %>% 
  ggplot(aes(x = '', y = n,fill = Crop)) + 
  geom_col( color = 'black' ) + 
  geom_text(aes(label = n),position = position_stack(vjust = 1)) +
  labs( y = 'Năng suất TB') 

Qua biểu đồ trên ta có thể thấy: Năng suất gạo ở Ấn Độ có thể được coi là đáng chú ý so với nhiều loại nông sản khác. Ấn Độ là một trong những nhà sản xuất gạo lớn nhất thế giới và gạo là một phần quan trọng của chế độ ăn uống của người dân ở đây.

2. Sản lượng

Đối với đất nước có nền nông nghiệp là chủ yếu như Ấn Độ thì sản lượng nông sản hằng năm là vấn đề cần quan tâm nhất. Sản lượng nông sản của Ấn Độ đã có sự biến động trong những năm qua do ảnh hưởng của nhiều yếu tố khác nhau như thời tiết, chính sách nông nghiệp, công nghệ, và biến động thị trường.

nt1 %>% na.omit() %>% ggplot(aes(x = Production , y = Area  , color = Crop )) +
  geom_point()

library(gganimate)
## Warning: package 'gganimate' was built under R version 4.3.3
library(magick)
## Warning: package 'magick' was built under R version 4.3.3
## Linking to ImageMagick 6.9.12.98
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11
nt1 %>% 
  na.omit() %>% 
  ggplot(aes(x = Area, y = Production, color = Crop)) +
  geom_line() +
  geom_point(size=2)

Qua biểu đồ ta thấy được sự thay đổi sản lượng từng thời kì thông qua các yếu tố các nhau

nt3 <- nt1 %>% group_by(State, Crop) %>% summarise(n = n(), .groups='drop')
nt3 %>% ggplot(aes(x = State , y = n)) +
  geom_col(data = nt3 %>% filter(Crop=='Rice'), fill = 'yellow') +
  geom_col(data = nt3 %>% filter(Crop=='Ginger'), fill = 'black')

3. Diện tích

Diện tích đất nông nghiệp của Ấn Độ rộng lớn và đa dạng, cung cấp cơ sở quan trọng cho sản xuất nông nghiệp. Đất nông nghiệp của nước này được sử dụng để trồng nhiều loại cây trồng khác nhau, từ lúa gạo đến đậu và mía. Điều này đóng vai trò quan trọng trong đảm bảo an sinh xã hội và kinh tế của hàng triệu người dân.

nt1 %>% group_by(Crop) %>% summarise(n= sum(Area))%>% ggplot( aes(x = Crop, y= n )) + geom_col (fill='red') + labs(x= 'Nông sản', y= 'diện tích' )

Ấn Độ có một trong những diện tích canh tác gạo lớn nhất thế giới, với hơn 40 triệu hecta đất được dành cho gieo trồng gạo. Tuy nhiên, mặc dù diện tích này lớn, hiệu suất canh tác vẫn còn thấp so với nhiều quốc gia khác.

nt1 %>% na.omit() %>% ggplot( aes( x= Area  , y = Production , color = Crop )) + 
  geom_point(size = 1,alpha = 0.5) +  
  geom_smooth( method = "lm", size = 2)                 
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'

nt1 %>% group_by(State) %>% summarise(n= mean(Area)) %>% 
   ggplot(aes(x = State, y = n)) + 
  geom_col(fill = 'yellow')+
  labs(x= ' Khu vực', y= 'Diện tích')

Với ba khu vực được coi là có diện tích đất nông nghiệp cao nhất Ấn Độ là West Bengal, Andaman and Nicobar Islands, Uttarakhand ta thấy diện tích trung bình giữa các khu vực có sự chênh lệch rất lớn đặc biệt là vùng Wesst Bengal có diện tích trung bình mỗi quận lên tới 50000 hecta.

4. Năng suất

Năng suất gạo ở Ấn Độ là một chủ đề rất quan trọng và phức tạp, vì nó ảnh hưởng đến nền kinh tế, an ninh lương thực và cuộc sống hàng ngày của hàng triệu người dân.

nt1 %>% na.omit() %>% ggplot(aes(y = Yield , x = State , fill = Crop)) + 
  geom_boxplot()+                     
  theme(legend.position = "none")

nt1 %>% na.omit() %>% ggplot(aes(y = Yield, x = State, color = State))+                     
  geom_jitter()

nt1 %>% na.omit() %>% ggplot(aes(y = Yield, x = State, color = State))+                     
  geom_violin()

Ba biểu đồ trên thể hiện sự thay đổi của năng suất nông sản Ấn Độ theo từng khu vực khác nhau: nhìn biểu đồ ta thấy rõ khu vực West Bengal có năng suất gạo lớn nhất và như gấp đôi hai khu vực còn lại.

5. MÙA VỤ

Ấn Độ là một trong những quốc gia có hệ thống mùa vụ phong phú và đa dạng nhất trên thế giới, với sự biến đổi của khí hậu và địa hình ảnh hưởng đến việc trồng trọt và sản xuất nông sản. Mỗi mùa vụ đều mang lại các cơ hội và thách thức riêng, và nó đóng vai trò quan trọng trong đảm bảo an ninh lương thực của quốc gia. Sự thành công của các mùa vụ này không chỉ phụ thuộc vào yếu tố tự nhiên mà còn phụ thuộc vào các biện pháp quản lý nông nghiệp và chính sách hỗ trợ từ chính phủ.

nt2 <- nt1 %>%  group_by(nt1$Season) %>% summarise(n=n())
hist(nt2$n, main="Phân Phối Mùa Vụ" , xlab="Mùa Vụ ", col="orange", border="black")

LS0tDQp0aXRsZTogIk5ISeG7hk0gVuG7pCA1Ig0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUg6JU06JVMsICVkIC0gJW0gLSAlWScpYCINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgbnVtYmVyIHNlY3Rpb246IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KKioqDQojIyAqKk5ISeG7hk0gVuG7pCA1IELhuqJORyBQSMOCTiBUw41DSCBW4buAIFTDjE5IIEjDjE5IIFPhuqJOIFhV4bqkVCBOw5RORyBOR0hJ4buGUCBD4bumQSDhuqROIMSQ4buYICoqDQoqKioNCg0KIyMgKipN4bukQyBUScOKVSBQSMOCTiBUw41DSCoqIA0KDQogICBQaMOibiB0w61jaCB0w6xuaCBow6xuaCBz4bqjbiB4deG6pXQgbsO0bmcgbmdoaeG7h3Ag4bufIOG6pG4gxJDhu5kgxJHDsmkgaOG7j2kgc+G7sSBjaMO6IMO9IMSR4bq/biBt4buZdCBz4buRIG3hu6VjIHRpw6p1IHF1YW4gdHLhu41uZyDEkeG7gyBoaeG7g3UgcsO1IHbhu4EgdGjhu4sgdHLGsOG7nW5nIG7DtG5nIG5naGnhu4dwIGPhu6dhIHF14buRYyBnaWEgbsOgeS4gRMaw4bubaSDEkcOieSBsw6AgbeG7mXQgc+G7kSBt4bulYyB0acOqdSBxdWFuIHRy4buNbmcgY+G6p24gY2jDuiDDvToNCg0KKiAgxJDDoW5oIGdpw6EgbeG7qWMgxJHhu5kgaGnhu4d1IHF14bqjIGPhu6dhIHPhuqNuIHh14bqldCBuw7RuZyBuZ2hp4buHcCANCg0KKiAgTmdoacOqbiBj4bupdSB24buBIHPhu7Eg4bqjbmggaMaw4bufbmcgY+G7p2EgY8OhYyB54bq/dSB04buRIG5oxrAgdGjhu51pIHRp4bq/dCwgY2jhuqV0IGRpbmggZMaw4buhbmcgxJHhuqV0LCB2w6Aga+G7uSB0aHXhuq10IGNhbmggdMOhYyDEkeG7kWkgduG7m2kgbsSDbmcgc3XhuqV0LiBOZ2hpw6puIGPhu6l1IHPhu7EgcGjDom4gYuG7kSDEkeG6pXQgxJFhaSDhu58g4bqkbiDEkOG7mSwgY8WpbmcgbmjGsCDEkcOhbmggZ2nDoSBoaeG7h3UgcXXhuqMgc+G7rSBk4bulbmcgxJHhuqV0IMSRYWkgdHJvbmcgbsO0bmcgbmdoaeG7h3AuDQoNCiogIFhlbSB4w6l0IOG6o25oIGjGsOG7n25nIGPhu6dhIG7DtG5nIG5naGnhu4dwIMSR4buRaSB24bubaSBtw7RpIHRyxrDhu51uZyB2w6AgcGjDoXQgdHJp4buDbiBjw6FjIGJp4buHbiBwaMOhcCBi4bqjbyB24buHIG3DtGkgdHLGsOG7nW5nIHRyb25nIHPhuqNuIHh14bqldCBuw7RuZyBuZ2hp4buHcC4NCg0KICANCiMjICoqUEjGr8agTkcgUEjDgVAgTkdIScOKTiBD4buoVSoqDQoNCiAgU+G7rSBk4bulbmcgY8OhYyBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiBtw7QgdOG6oyBk4buvIGxp4buHdToNCiAgDQoqIFLDunQgdHLDrWNoIGThu68gbGnhu4d1DQoNCiogTcOjIGjDs2EgZOG7ryBsaeG7h3UgDQoNCiogTOG6rXAgYuG6o25nIHThuqduIHPhu5EgDQoNCiogVMOtbmggdG/DoW4gY8OhYyDEkeG6t2MgdHLGsG5nIMSRbyBsxrDhu51uZw0KDQoqIE5o4bqtbiB4w6l0IGvhur90IHF14bqjIA0KDQojIyAqKkLhu5ggROG7riBMSeG7hlUgKioNCg0KICBC4buZIGThu68gbGnhu4d1IHbhu4EgdMOsbmggaMOsbmggbsO0bmcgbmdoaeG7h3AgY+G7p2Eg4bqkbiDEkOG7mSB0cm9uZyBuaOG7r25nIG7Eg20gY3Xhu5FpIFRLIDE5IMSR4bq/biBuYXkuIEThu68gbGnhu4d1IMSRxrDhu6NjIHThuqNpIHbhu4EgdOG7qyBbRGF0YXNldCBTZWFyY2hdKGh0dHBzOi8vZGF0YXNldHNlYXJjaC5yZXNlYXJjaC5nb29nbGUuY29tL3NlYXJjaD9zcmM9MyZxdWVyeT1hZ3JpY3VsdHVyZSZkb2NpZD1MMmN2TVRGcWVuTnlYM016TmclM0QlM0QpDQoNCiAqKjEuIFThu5VuZyBxdWFuIHbhu4EgbsO0bmcgbmdoaeG7h3Ag4bqkbiDEkOG7mSoqDQoNCiAgIE7hurFtIOG7nyBraHUgduG7sWMgVMOieSBOYW0gw4EsIOG6pG4gxJDhu5kgY8OzIGRp4buHbiB0w61jaCB04buxIG5oacOqbiBn4bqnbiAzMyB0cmnhu4d1IGttMiwgdHJvbmcgxJHDsywgZGnhu4duIHTDrWNoIMSR4bqldCBuw7RuZyBuZ2hp4buHcCBsw6AgMTQxLDIzIHRyaeG7h3UgaGEgduG7m2kgZMOibiBz4buRIHRyw6puIDEgdOG7iSBuZ8aw4budaSwgY8OzIHRydXnhu4FuIHRo4buRbmcgdsSDbiBow7NhLCBs4buLY2ggc+G7rSBsw6J1IMSR4budaSB2w6AgdGjhur8gbeG6oW5oIHbhu4EgcGjDoXQgdHJp4buDbiBuw7RuZyBuZ2hp4buHcC4gTOG7pWMgxJHhu4thIG7DoHkgY8OzIG5o4buvbmcgxJHhu5NuZyBi4bqxbmcgcuG7mW5nIGzhu5tuIG3DoCBraMO0bmcgbeG7mXQgcXXhu5FjIGdpYSBuw6BvIHRyw6puIHRo4bq/IGdp4bubaSBjw7MgxJHGsOG7o2MuIENo4buJIHJpw6puZyDEkeG7k25nIGLhurFuZyDhuqRuIC0gSOG6sW5nLCBkaeG7h24gdMOtY2gga2hv4bqjbmcgNzc1LjAwMCBrbTIgKGfhuqVwIDIsMyBs4bqnbiBkaeG7h24gdMOtY2ggVmnhu4d0IE5hbSkgduG7m2kgxJFp4buBdSBraeG7h24gdOG7sSBuaGnDqm4gdGh14bqtbiBs4bujaSDEkcOjIHThuqFvIG7Dqm4gdsO5bmcga2luaCB04bq/IHRyw7kgcGjDui4gDQogICANCiAgIFNhdSDEkcOieSBsw6AgZOG7ryBsaeG7h3UgduG7gSBu4buBbiBuw7RuZyBuZ2hp4buHcCBj4bunYSDhuqRuIMSQ4buZIMSRw6MgxJHGsOG7o2MgdOG6o2kgduG7gSANCiAgIA0KYGBge3J9DQpsaWJyYXJ5KGNzdikNCm50IDwtIHJlYWQuY3N2KGZpbGU9ICdDOi9Vc2Vycy9BZG1pbi9Eb3dubG9hZHMvSW5kaWEgQWdyaWN1bHR1cmUgQ3JvcCBQcm9kdWN0aW9uLmNzdicpDQpudCA8LSBudFtudCRTdGF0ZT09J0FuZGFtYW4gYW5kIE5pY29iYXIgSXNsYW5kcycgfCBudCRTdGF0ZT09J1V0dGFyYWtoYW5kJyB8IG50JFN0YXRlPT0nV2VzdCBCZW5nYWwnIHwgbnQkU3RhdGU9PSdVdHRhcmFraGFuZCcgICwgXQ0KYGBgDQogICANCkLhuqNuZyBk4buvIGxp4buHdSBjaG8gdGEgYmnhur90IGPDoWMgdGjDtG5nIHRpbiBzYXU6IA0KICAgDQoqIFN0YXRlOiBCYW5nIOG7nyDhuqRuIMSQ4buZDQoqIERpRGlzdHJpY3Q6IHTDqm4gbeG7mXQgdGjhu4sgeMOjLCB0aOG7iyB0cuG6pW4gaGF5IHRow6BuaCBwaOG7kS4uLiB0aHXhu5ljIGJhbmcgbsOgbyDEkcOzIOG7nyDhuqRuIMSQ4buZDQoqIENyb3A6IHTDqm4gbsO0bmcgc+G6o24gc+G6o24geHXhuqV0DQoqIFllYXI6IG7Eg20gcGjDom4gdMOtY2ggDQoqIFNlYXNvbjogbcO5YSB24bulDQoqIEFyZWE6IGRp4buHbiB0w61jaCB0cuG7k25nIHRy4buNdCwgc+G6o24geHXhuqV0DQoqIEFyZWEuVW5pdHM6IMSRxqFuIHbhu4sgZGnhu4duIHTDrWNoIHRy4buTbmcgdHLhu410IHPhuqNuIHh14bqldCAoKmhlY3RhcmUqKQ0KKiBQcm9kdWN0aW9uOiBz4bqjbiBsxrDhu6NuZw0KKiBQcm9kdWN0aW9uLlVuaXRzOiDEkcahbiB24buLIHPhuqNuIGzGsOG7o25nICgqdOG6pW4qKQ0KKiBZaWVsczogbsSDbmcgc3XhuqV0IA0KDQojIyAqKlbhurwgQknhu4JVIMSQ4buSKiogDQoNCiMjIyAqKjEuIE7DtG5nIHPhuqNuKiogDQoNCiAgIE5nw6BuaCBuw7RuZyBuZ2hp4buHcCBsw6Agbmd14buTbiBzaW5oIGvhur8gY2jDrW5oIGPhu6dhIGtob+G6o25nIDU4JSBkw6JuIHPhu5Eg4bqkbiDEkOG7mS4gTeG6t2MgZMO5IMSRw7NuZyBnw7NwIGPhu6dhIG7DsyB2w6BvIHThu5VuZyBz4bqjbiBwaOG6qW0gcXXhu5FjIG7hu5lpIChHRFApIMSRw6MgZ2nhuqNtIHh14buRbmcgZMaw4bubaSAyMCUgdsOgIMSRw7NuZyBnw7NwIGPhu6dhIGPDoWMgbmfDoG5oIGtow6FjIHTEg25nIHbhu5tpIHThu5FjIMSR4buZIG5oYW5oIGjGoW4uIA0KICAgDQogICBEbyDEkcOzIGPDoWMgbG/huqFpIG7DtG5nIHPhuqNuIOG6pG4gxJDhu5kgxJFhIGThuqFuZyB2w6AgcGhvbmcgcGjDuiB24bubaSBuaGnhu4F1IGxv4bqhaSBraMOhYyBuaGF1IMSRaeG7g24gaMOsbmggbMOgIGfhuqFvLCBn4burbmcsIGtob2FpIHTDonksIHJhZ2kuLi4NCg0KYGBge3J9DQpudDEgPC0gbnRbbnQkQ3JvcD09J1JpY2UnIHwgbnQkQ3JvcD09J1N1Z2FyY2FuZScgfCBudCRDcm9wPT0nUmFnaScgfCBudCRDcm9wPT0nV2hlYXQnIHwgbnQkQ3JvcD09J1BvdGF0bycgfCBudCRDcm9wPT0nR2luZ2VyJywgXQ0KYGBgDQoNCiAgIA0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbnQxICU+JSBncm91cF9ieShDcm9wKSAlPiUgc3VtbWFyaXNlKG09IG4oKSkgJT4lIGdncGxvdChhZXMoeCA9IENyb3AsIHkgPSBtICkpICsgDQogIGdlb21fY29sKGZpbGw9J3BpbmsnKSArIA0KICBsYWJzKHggPSAnTsO0bmcgc+G6o24gJywgeSA9ICdOJykNCmBgYA0KIA0KICBRdWEgYmnhu4N1IMSR4buTIHThu5VuZyBo4bujcCBjw6FjIGxv4bqhaSBuw7RuZyBz4bqjbiBwaOG7lSBiaeG6v24gdHJvbmcgxJHDsyBn4bqhbyB24bqrbiBsw6AgbG/huqFpIG7DtG5nIHPhuqNuIMSRYyB0cuG7k25nIG5oaeG7gXUgbmjhuqV0IOG7nyDhuqRuIMSQ4buZIA0KDQpgYGB7cn0NCm50MSAlPiUgZ3JvdXBfYnkoQ3JvcCkgJT4lIHN1bW1hcmlzZShuID0gbigpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gJycsIHkgPSBuLGZpbGwgPSBDcm9wKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgZ2VvbV90ZXh0KGFlcyh4ID0gMS4zLCBsYWJlbCA9IG4pLHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAuNSkpICsNCiAgY29vcmRfcG9sYXIoJ3knKQ0KDQpgYGANCg0KYGBge3J9DQpudDEgJT4lIGdyb3VwX2J5KENyb3ApICU+JSBzdW1tYXJpc2UobiA9IG1lYW4oWWllbGQpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9ICcnLCB5ID0gbixmaWxsID0gQ3JvcCkpICsgDQogIGdlb21fY29sKCBjb2xvciA9ICdibGFjaycgKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbikscG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDEpKSArDQogIGxhYnMoIHkgPSAnTsSDbmcgc3XhuqV0IFRCJykgDQpgYGANCg0KICBRdWEgYmnhu4N1IMSR4buTIHRyw6puIHRhIGPDsyB0aOG7gyB0aOG6pXk6IE7Eg25nIHN14bqldCBn4bqhbyDhu58g4bqkbiDEkOG7mSBjw7MgdGjhu4MgxJHGsOG7o2MgY29pIGzDoCDEkcOhbmcgY2jDuiDDvSBzbyB24bubaSBuaGnhu4F1IGxv4bqhaSBuw7RuZyBz4bqjbiBraMOhYy4g4bqkbiDEkOG7mSBsw6AgbeG7mXQgdHJvbmcgbmjhu69uZyBuaMOgIHPhuqNuIHh14bqldCBn4bqhbyBs4bubbiBuaOG6pXQgdGjhur8gZ2nhu5tpIHbDoCBn4bqhbyBsw6AgbeG7mXQgcGjhuqduIHF1YW4gdHLhu41uZyBj4bunYSBjaOG6vyDEkeG7mSDEg24gdeG7kW5nIGPhu6dhIG5nxrDhu51pIGTDom4g4bufIMSRw6J5LiANCg0KIyMjICAqKjIuIFPhuqNuIGzGsOG7o25nKioNCg0KICDEkOG7kWkgduG7m2kgxJHhuqV0IG7GsOG7m2MgY8OzIG7hu4FuIG7DtG5nIG5naGnhu4dwIGzDoCBjaOG7pyB54bq/dSBuaMawIOG6pG4gxJDhu5kgdGjDrCBz4bqjbiBsxrDhu6NuZyBuw7RuZyBz4bqjbiBo4bqxbmcgbsSDbSBsw6AgduG6pW4gxJHhu4EgY+G6p24gcXVhbiB0w6JtIG5o4bqldC4gU+G6o24gbMaw4bujbmcgbsO0bmcgc+G6o24gY+G7p2Eg4bqkbiDEkOG7mSDEkcOjIGPDsyBz4buxIGJp4bq/biDEkeG7mW5nIHRyb25nIG5o4buvbmcgbsSDbSBxdWEgZG8g4bqjbmggaMaw4bufbmcgY+G7p2Egbmhp4buBdSB54bq/dSB04buRIGtow6FjIG5oYXUgbmjGsCB0aOG7nWkgdGnhur90LCBjaMOtbmggc8OhY2ggbsO0bmcgbmdoaeG7h3AsIGPDtG5nIG5naOG7hywgdsOgIGJp4bq/biDEkeG7mW5nIHRo4buLIHRyxrDhu51uZy4NCiAgDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoYWVzKHggPSBQcm9kdWN0aW9uICwgeSA9IEFyZWEgICwgY29sb3IgPSBDcm9wICkpICsNCiAgZ2VvbV9wb2ludCgpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGdnYW5pbWF0ZSkNCmxpYnJhcnkobWFnaWNrKQ0KbnQxICU+JSANCiAgbmEub21pdCgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gQXJlYSwgeSA9IFByb2R1Y3Rpb24sIGNvbG9yID0gQ3JvcCkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBnZW9tX3BvaW50KHNpemU9MikNCmBgYA0KDQogIFF1YSBiaeG7g3UgxJHhu5MgdGEgdGjhuqV5IMSRxrDhu6NjIHPhu7EgdGhheSDEkeG7lWkgc+G6o24gbMaw4bujbmcgdOG7q25nIHRo4budaSBrw6wgdGjDtG5nIHF1YSBjw6FjIHnhur91IHThu5EgY8OhYyBuaGF1IA0KICANCmBgYHtyfSANCm50MyA8LSBudDEgJT4lIGdyb3VwX2J5KFN0YXRlLCBDcm9wKSAlPiUgc3VtbWFyaXNlKG4gPSBuKCksIC5ncm91cHM9J2Ryb3AnKQ0KbnQzICU+JSBnZ3Bsb3QoYWVzKHggPSBTdGF0ZSAsIHkgPSBuKSkgKw0KICBnZW9tX2NvbChkYXRhID0gbnQzICU+JSBmaWx0ZXIoQ3JvcD09J1JpY2UnKSwgZmlsbCA9ICd5ZWxsb3cnKSArDQogIGdlb21fY29sKGRhdGEgPSBudDMgJT4lIGZpbHRlcihDcm9wPT0nR2luZ2VyJyksIGZpbGwgPSAnYmxhY2snKQ0KYGBgDQogIA0KIyMjICoqMy4gRGnhu4duIHTDrWNoKiogDQoNCiBEaeG7h24gdMOtY2ggxJHhuqV0IG7DtG5nIG5naGnhu4dwIGPhu6dhIOG6pG4gxJDhu5kgcuG7mW5nIGzhu5tuIHbDoCDEkWEgZOG6oW5nLCBjdW5nIGPhuqVwIGPGoSBz4bufIHF1YW4gdHLhu41uZyBjaG8gc+G6o24geHXhuqV0IG7DtG5nIG5naGnhu4dwLiDEkOG6pXQgbsO0bmcgbmdoaeG7h3AgY+G7p2Egbsaw4bubYyBuw6B5IMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHRy4buTbmcgbmhp4buBdSBsb+G6oWkgY8OieSB0cuG7k25nIGtow6FjIG5oYXUsIHThu6sgbMO6YSBn4bqhbyDEkeG6v24gxJHhuq11IHbDoCBtw61hLiDEkGnhu4F1IG7DoHkgxJHDs25nIHZhaSB0csOyIHF1YW4gdHLhu41uZyB0cm9uZyDEkeG6o20gYuG6o28gYW4gc2luaCB4w6MgaOG7mWkgdsOgIGtpbmggdOG6vyBj4bunYSBow6BuZyB0cmnhu4d1IG5nxrDhu51pIGTDom4uDQogDQogDQpgYGB7cn0NCm50MSAlPiUgZ3JvdXBfYnkoQ3JvcCkgJT4lIHN1bW1hcmlzZShuPSBzdW0oQXJlYSkpJT4lIGdncGxvdCggYWVzKHggPSBDcm9wLCB5PSBuICkpICsgZ2VvbV9jb2wgKGZpbGw9J3JlZCcpICsgbGFicyh4PSAnTsO0bmcgc+G6o24nLCB5PSAnZGnhu4duIHTDrWNoJyApDQpgYGANCg0KIOG6pG4gxJDhu5kgY8OzIG3hu5l0IHRyb25nIG5o4buvbmcgZGnhu4duIHTDrWNoIGNhbmggdMOhYyBn4bqhbyBs4bubbiBuaOG6pXQgdGjhur8gZ2nhu5tpLCB24bubaSBoxqFuIDQwIHRyaeG7h3UgaGVjdGEgxJHhuqV0IMSRxrDhu6NjIGTDoG5oIGNobyBnaWVvIHRy4buTbmcgZ+G6oW8uIFR1eSBuaGnDqm4sIG3hurdjIGTDuSBkaeG7h24gdMOtY2ggbsOgeSBs4bubbiwgaGnhu4d1IHN14bqldCBjYW5oIHTDoWMgduG6q24gY8OybiB0aOG6pXAgc28gduG7m2kgbmhp4buBdSBxdeG7kWMgZ2lhIGtow6FjLg0KDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoIGFlcyggeD0gQXJlYSAgLCB5ID0gUHJvZHVjdGlvbiAsIGNvbG9yID0gQ3JvcCApKSArIA0KICBnZW9tX3BvaW50KHNpemUgPSAxLGFscGhhID0gMC41KSArICANCiAgZ2VvbV9zbW9vdGgoIG1ldGhvZCA9ICJsbSIsIHNpemUgPSAyKSAgICAgICAgICAgICAgICAgDQpgYGANCiANCiANCmBgYHtyfQ0KbnQxICU+JSBncm91cF9ieShTdGF0ZSkgJT4lIHN1bW1hcmlzZShuPSBtZWFuKEFyZWEpKSAlPiUgDQogICBnZ3Bsb3QoYWVzKHggPSBTdGF0ZSwgeSA9IG4pKSArIA0KICBnZW9tX2NvbChmaWxsID0gJ3llbGxvdycpKw0KICBsYWJzKHg9ICcgS2h1IHbhu7FjJywgeT0gJ0Rp4buHbiB0w61jaCcpDQpgYGANCiANCiBW4bubaSBiYSBraHUgduG7sWMgxJHGsOG7o2MgY29pIGzDoCBjw7MgZGnhu4duIHTDrWNoIMSR4bqldCBuw7RuZyBuZ2hp4buHcCBjYW8gbmjhuqV0IOG6pG4gxJDhu5kgbMOgIFdlc3QgQmVuZ2FsLCBBbmRhbWFuIGFuZCBOaWNvYmFyIElzbGFuZHMsIFV0dGFyYWtoYW5kIHRhIHRo4bqleSBkaeG7h24gdMOtY2ggdHJ1bmcgYsOsbmggZ2nhu69hIGPDoWMga2h1IHbhu7FjIGPDsyBz4buxIGNow6puaCBs4buHY2ggcuG6pXQgbOG7m24gxJHhurdjIGJp4buHdCBsw6AgdsO5bmcgV2Vzc3QgQmVuZ2FsIGPDsyBkaeG7h24gdMOtY2ggdHJ1bmcgYsOsbmggbeG7l2kgcXXhuq1uIGzDqm4gdOG7m2kgNTAwMDAgaGVjdGEuIA0KDQogDQojIyMgKio0LiBOxINuZyBzdeG6pXQqKiANCg0KICBOxINuZyBzdeG6pXQgZ+G6oW8g4bufIOG6pG4gxJDhu5kgbMOgIG3hu5l0IGNo4bunIMSR4buBIHLhuqV0IHF1YW4gdHLhu41uZyB2w6AgcGjhu6ljIHThuqFwLCB2w6wgbsOzIOG6o25oIGjGsOG7n25nIMSR4bq/biBu4buBbiBraW5oIHThur8sIGFuIG5pbmggbMawxqFuZyB0aOG7sWMgdsOgIGN14buZYyBz4buRbmcgaMOgbmcgbmfDoHkgY+G7p2EgaMOgbmcgdHJp4buHdSBuZ8aw4budaSBkw6JuLg0KDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoYWVzKHkgPSBZaWVsZCAsIHggPSBTdGF0ZSAsIGZpbGwgPSBDcm9wKSkgKyANCiAgZ2VvbV9ib3hwbG90KCkrICAgICAgICAgICAgICAgICAgICAgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoYWVzKHkgPSBZaWVsZCwgeCA9IFN0YXRlLCBjb2xvciA9IFN0YXRlKSkrICAgICAgICAgICAgICAgICAgICAgDQogIGdlb21faml0dGVyKCkNCmBgYA0KDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoYWVzKHkgPSBZaWVsZCwgeCA9IFN0YXRlLCBjb2xvciA9IFN0YXRlKSkrICAgICAgICAgICAgICAgICAgICAgDQogIGdlb21fdmlvbGluKCkNCmBgYA0KDQogIEJhIGJp4buDdSDEkeG7kyB0csOqbiB0aOG7gyBoaeG7h24gc+G7sSB0aGF5IMSR4buVaSBj4bunYSBuxINuZyBzdeG6pXQgbsO0bmcgc+G6o24g4bqkbiDEkOG7mSB0aGVvIHThu6tuZyBraHUgduG7sWMga2jDoWMgbmhhdTogbmjDrG4gYmnhu4N1IMSR4buTIHRhIHRo4bqleSByw7Uga2h1IHbhu7FjIFdlc3QgQmVuZ2FsIGPDsyBuxINuZyBzdeG6pXQgZ+G6oW8gbOG7m24gbmjhuqV0IHbDoCBuaMawIGfhuqVwIMSRw7RpIGhhaSBraHUgduG7sWMgY8OybiBs4bqhaS4gDQogIA0KICANCiMjIyAqKjUuIE3DmUEgVuG7pCoqIA0KDQogIOG6pG4gxJDhu5kgbMOgIG3hu5l0IHRyb25nIG5o4buvbmcgcXXhu5FjIGdpYSBjw7MgaOG7hyB0aOG7kW5nIG3DuWEgduG7pSBwaG9uZyBwaMO6IHbDoCDEkWEgZOG6oW5nIG5o4bqldCB0csOqbiB0aOG6vyBnaeG7m2ksIHbhu5tpIHPhu7EgYmnhur9uIMSR4buVaSBj4bunYSBraMOtIGjhuq11IHbDoCDEkeG7i2EgaMOsbmgg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyB0cuG7k25nIHRy4buNdCB2w6Agc+G6o24geHXhuqV0IG7DtG5nIHPhuqNuLiBN4buXaSBtw7lhIHbhu6UgxJHhu4F1IG1hbmcgbOG6oWkgY8OhYyBjxqEgaOG7mWkgdsOgIHRow6FjaCB0aOG7qWMgcmnDqm5nLCB2w6AgbsOzIMSRw7NuZyB2YWkgdHLDsiBxdWFuIHRy4buNbmcgdHJvbmcgxJHhuqNtIGLhuqNvIGFuIG5pbmggbMawxqFuZyB0aOG7sWMgY+G7p2EgcXXhu5FjIGdpYS4gU+G7sSB0aMOgbmggY8O0bmcgY+G7p2EgY8OhYyBtw7lhIHbhu6UgbsOgeSBraMO0bmcgY2jhu4kgcGjhu6UgdGh14buZYyB2w6BvIHnhur91IHThu5EgdOG7sSBuaGnDqm4gbcOgIGPDsm4gcGjhu6UgdGh14buZYyB2w6BvIGPDoWMgYmnhu4duIHBow6FwIHF14bqjbiBsw70gbsO0bmcgbmdoaeG7h3AgdsOgIGNow61uaCBzw6FjaCBo4buXIHRy4bujIHThu6sgY2jDrW5oIHBo4bunLg0KICANCmBgYHtyfQ0KbnQyIDwtIG50MSAlPiUgIGdyb3VwX2J5KG50MSRTZWFzb24pICU+JSBzdW1tYXJpc2Uobj1uKCkpDQpoaXN0KG50MiRuLCBtYWluPSJQaMOibiBQaOG7kWkgTcO5YSBW4bulIiAsIHhsYWI9Ik3DuWEgVuG7pSAiLCBjb2w9Im9yYW5nZSIsIGJvcmRlcj0iYmxhY2siKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==