Mendapatkan Akses ke API

Rekapitulasi data COVID-19 di Indonesia terdapat pada API Publik yang beralamatkan di https://data.covid19.go.id/public/api/update.json

Tambahkan Library httr agar dapat mengakses API selanjutnya gunakan Fungsi GET dari library httr tersebut.

library(httr)
respon <- GET ("https://data.covid19.go.id/public/api/update.json")

Mengevaluasi Hasil Respon

Setelah fungsi GET() dijalankan maka server akan menjawab permintaan yang sudah dibuat.

cara untuk cek respon server adalah sebagai berikut

library(httr)
respon <- GET ("https://data.covid19.go.id/public/api/update.json")
status_code(respon)
[1] 200

Status kode dari respon yang diberikan oleh server dapat dilihat di :

https://restfulapi.net/http-status-codes/

Mengekstrak Isi Dari Respon

Untuk mengekstrak Konten dari permintaan yang sudah dibuat dapat menggunakan fungsi content(), secara otomatis fungsi tersebut akan menyesuaikan output berdasarkan jenis file yang tersedia, dalam hal ini adalah file JSON.

library(httr)
respon <- GET ("https://data.covid19.go.id/public/api/update.json")
cov_id_raw <- content(respon, as = "parsed", simplifyVector = TRUE)

Setelah itu gunakan fungsi lenght() untuk mengetahui jumlah komponen pada objek cov_id_raw

length(cov_id_raw)
[1] 2

kemudian gunakan fungsi names() untuk mengetahui nama komponen pada objek cov_id_raw

names(cov_id_raw)
[1] "data"   "update"

setelah itu simpan dengan nama cov_id_doc

cov_id_doc <- cov_id_raw$update
cov_id_doc$penambahan$tanggal
[1] "2021-09-28"
cov_id_doc$penambahan$jumlah_sembuh
[1] 3551
cov_id_doc$penambahan$jumlah_meninggal
[1] 124
cov_id_doc$total$jumlah_positif
[1] 4211460
cov_id_doc$total$jumlah_meninggal
[1] 141709

Sekarang Kita Melihat di Jawa Timur

respon_jatim <- GET("https://data.covid19.go.id/public/api/prov_detail_JAWA_TIMUR.json")
cov_jatim_raw <- content(respon_jatim, as = "parsed", simplifyVector = TRUE)

Sekarang kita melihat elemen - elemen utaman yabg tersedia menggunakan fungsi names()

names(cov_jatim_raw)
 [1] "last_date"            "provinsi"             "kasus_total"          "kasus_tanpa_tgl"      "kasus_dengan_tgl"    
 [6] "meninggal_persen"     "meninggal_tanpa_tgl"  "meninggal_dengan_tgl" "sembuh_persen"        "sembuh_tanpa_tgl"    
[11] "sembuh_dengan_tgl"    "list_perkembangan"    "data"                
cov_jatim_raw$kasus_total
[1] 394770
cov_jatim_raw$list_perkembangan

simpan hasil extract kedalam object baru bernama cov_jatim

cov_jatim <- cov_jatim_raw$list_perkembangan

Dari hasil yang sudah ditunjukkan pada tabel di atas maka perlu kita olah datanya agar dapat dibaca. Penulisan Format tanggal harus kita perbaiki. Gunakan library dplyr untuk mengolah data.

library(dplyr)

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
new_cov_jatim <-
  cov_jatim %>% 
  select(-contains("DIRAWAT_OR_ISOLASI")) %>% 
  select(-starts_with("AKUMULASI")) %>% 
  rename(
    cov_kasus = KASUS,
    cov_meninggal = MENINGGAL,
    cov_sembuh = SEMBUH
    ) %>% 
  mutate(
    tanggal = as.POSIXct(tanggal / 1000, origin = "1970-01-01"),
    tanggal = as.Date(tanggal)
  )

str(new_cov_jatim)
'data.frame':   558 obs. of  4 variables:
 $ tanggal      : Date, format: "2020-03-18" "2020-03-19" "2020-03-20" "2020-03-21" ...
 $ cov_kasus    : int  7 3 9 9 14 2 3 9 13 3 ...
 $ cov_meninggal: int  1 0 0 1 0 1 1 0 1 1 ...
 $ cov_sembuh   : int  0 0 0 0 0 0 0 1 0 0 ...
head(new_cov_jatim)

Memvisualisasikan Data Melalui Grafik

Gunakan Library ggplot2 dan hrbrthemes

library(ggplot2)
library(hrbrthemes)

ggplot(new_cov_jatim, aes(x = tanggal, y = cov_kasus)) +
  geom_col()

library(ggplot2)
library(hrbrthemes)
ggplot(new_cov_jatim, aes(tanggal, cov_kasus)) +
    geom_col(fill = "salmon") +
    labs(
      x = NULL,
      y = "Jumlah kasus",
      title = "Kasus Harian Positif COVID-19 di Jawa Timur",
      subtitle = "Terjadi pelonjakan kasus di bulan Juli",
      caption = "Sumber data: covid.19.go.id"
    ) +
    theme_ipsum(
      base_size = 13,
      plot_title_size = 21,
      grid = "Y",
      ticks = TRUE
    ) +
    theme(plot.title.position = "plot")

Grafik Untuk Kasus Sembuh

library(ggplot2)
library(hrbrthemes)

ggplot(new_cov_jatim, aes(tanggal, cov_sembuh)) +
  geom_col(fill = "olivedrab2") +
  labs(
    x = NULL,
    y = "Jumlah kasus",
    title = "Kasus Harian Sembuh Dari COVID-19 di Jawa Timur",
    caption = "Sumber data: covid.19.go.id"
  ) +
  theme_ipsum(
    base_size = 13, 
    plot_title_size = 19,
    grid = "Y",
    ticks = TRUE
  ) +
  theme(plot.title.position = "plot")

library(ggplot2)
library(hrbrthemes)

ggplot(new_cov_jatim, aes(tanggal, cov_meninggal)) +
  geom_col(fill = "red") +
  labs(
    x = NULL,
    y = "Jumlah kasus",
    title = "Kasus Harian Meniggal Dari COVID-19 di Jawa Timur",
    caption = "Sumber data: covid19.go.id"
  ) +
  theme_ipsum(
    base_size = 13, 
    plot_title_size = 19,
    grid = "Y",
    ticks = TRUE
  ) +
  theme(plot.title.position = "plot")

LS0tDQp0aXRsZTogIlZpc3VhbGlzYXNpIERhdGEgQ292aWQgZGkgSmF3YSBUaW11ciBNZW5nZ3VuYWthbiBSIg0KYXV0aG9yOiAiVSd1biBTZXRpYXdhdGksIFMuS29tIg0KZGF0ZTogIjkvMTIvMjAyMSINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6DQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIHRoZW1lOiBzcGFjZWxhYg0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KDQotLS0NCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCg0KYm9keXsgLyogTm9ybWFsICAqLw0KICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICB9DQp0ZCB7ICAvKiBUYWJsZSAgKi8NCiAgZm9udC1zaXplOiAxMnB4Ow0KfQ0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDM4cHg7DQogIGNvbG9yOiBsaWdodGJsdWU7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KaDEgeyAvKiBIZWFkZXIgMSAqLw0KICBmb250LXNpemU6IDI0cHg7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCn0NCmgyIHsgLyogSGVhZGVyIDIgKi8NCiAgZm9udC1zaXplOiAyMHB4Ow0KICBjb2xvcjogRGFya0JsdWU7DQp9DQpoMyB7IC8qIEhlYWRlciAzICovDQogIGZvbnQtc2l6ZTogMTZweDsNCiMgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQp9DQpoNCB7IC8qIEhlYWRlciA0ICovDQogIGZvbnQtc2l6ZTogMTRweDsNCiAgY29sb3I6IERhcmtCbHVlOw0KfQ0KY29kZS5yeyAvKiBDb2RlIGJsb2NrICovDQogICAgZm9udC1zaXplOiAxMnB4Ow0KfQ0KcHJlIHsgLyogQ29kZSBibG9jayAtIGRldGVybWluZXMgY29kZSBzcGFjaW5nIGJldHdlZW4gbGluZXMgKi8NCiAgICBmb250LXNpemU6IDEycHg7DQp9DQo8L3N0eWxlPg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQoja25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gPSBUUlVFLCANCglmaWcuYWxpZ24gPSAiY2VudGVyIiwNCglmaWcuc2hvdyA9ICJob2xkIiwNCgltZXNzYWdlID0gRkFMU0UsDQoJd2FybmluZyA9IEZBTFNFLA0KCXJlc3VsdHMgPSAiaG9sZCINCikNCiANCm9wdGlvbnMoc2NpcGVuID0gOTkpDQpgYGANCg0KIyBNZW5kYXBhdGthbiBBa3NlcyBrZSBBUEkNCg0KUmVrYXBpdHVsYXNpIGRhdGEgQ09WSUQtMTkgZGkgSW5kb25lc2lhIHRlcmRhcGF0IHBhZGEgQVBJIFB1YmxpayB5YW5nIGJlcmFsYW1hdGthbiBkaSANCjxhIGhyZWY9Imh0dHBzOi8vZGF0YS5jb3ZpZDE5LmdvLmlkL3B1YmxpYy9hcGkvdXBkYXRlLmpzb24iIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2RhdGEuY292aWQxOS5nby5pZC9wdWJsaWMvYXBpL3VwZGF0ZS5qc29uPC9hPg0KDQpUYW1iYWhrYW4gTGlicmFyeSBodHRyIGFnYXIgZGFwYXQgbWVuZ2Frc2VzIEFQSSBzZWxhbmp1dG55YSBndW5ha2FuIEZ1bmdzaSBHRVQgZGFyaSBsaWJyYXJ5IGh0dHIgdGVyc2VidXQuDQoNCg0KYGBge3IgZXZhbD1GQUxTRX0NCmxpYnJhcnkoaHR0cikNCnJlc3BvbiA8LSBHRVQgKCJodHRwczovL2RhdGEuY292aWQxOS5nby5pZC9wdWJsaWMvYXBpL3VwZGF0ZS5qc29uIikNCmBgYA0KDQojIE1lbmdldmFsdWFzaSBIYXNpbCBSZXNwb24NCg0KU2V0ZWxhaCBmdW5nc2kgYEdFVCgpYCBkaWphbGFua2FuIG1ha2Egc2VydmVyIGFrYW4gbWVuamF3YWIgcGVybWludGFhbiB5YW5nIHN1ZGFoIGRpYnVhdC4NCg0KY2FyYSB1bnR1ayBjZWsgcmVzcG9uIHNlcnZlciBhZGFsYWggc2ViYWdhaSBiZXJpa3V0DQoNCmBgYHtyfQ0KbGlicmFyeShodHRyKQ0KcmVzcG9uIDwtIEdFVCAoImh0dHBzOi8vZGF0YS5jb3ZpZDE5LmdvLmlkL3B1YmxpYy9hcGkvdXBkYXRlLmpzb24iKQ0Kc3RhdHVzX2NvZGUocmVzcG9uKQ0KYGBgDQpTdGF0dXMga29kZSBkYXJpIHJlc3BvbiB5YW5nIGRpYmVyaWthbiBvbGVoIHNlcnZlciBkYXBhdCBkaWxpaGF0IGRpIDoNCg0KPGEgaHJlZj0iaHR0cHM6Ly9yZXN0ZnVsYXBpLm5ldC9odHRwLXN0YXR1cy1jb2Rlcy8iPmh0dHBzOi8vcmVzdGZ1bGFwaS5uZXQvaHR0cC1zdGF0dXMtY29kZXMvPC9hPg0KDQojIE1lbmdla3N0cmFrIElzaSBEYXJpIFJlc3Bvbg0KDQpVbnR1ayBtZW5nZWtzdHJhayBLb250ZW4gZGFyaSBwZXJtaW50YWFuIHlhbmcgc3VkYWggZGlidWF0IGRhcGF0IG1lbmdndW5ha2FuIGZ1bmdzaSBgY29udGVudCgpYCwgc2VjYXJhIG90b21hdGlzIGZ1bmdzaSB0ZXJzZWJ1dCBha2FuIG1lbnllc3VhaWthbiBvdXRwdXQgYmVyZGFzYXJrYW4gamVuaXMgZmlsZSB5YW5nIHRlcnNlZGlhLCBkYWxhbSBoYWwgaW5pIGFkYWxhaCBmaWxlIGBKU09OYC4gDQoNCmBgYHtyfQ0KbGlicmFyeShodHRyKQ0KcmVzcG9uIDwtIEdFVCAoImh0dHBzOi8vZGF0YS5jb3ZpZDE5LmdvLmlkL3B1YmxpYy9hcGkvdXBkYXRlLmpzb24iKQ0KY292X2lkX3JhdyA8LSBjb250ZW50KHJlc3BvbiwgYXMgPSAicGFyc2VkIiwgc2ltcGxpZnlWZWN0b3IgPSBUUlVFKQ0KYGBgDQoNClNldGVsYWggaXR1IGd1bmFrYW4gZnVuZ3NpIGBsZW5naHQoKWAgdW50dWsgbWVuZ2V0YWh1aSBqdW1sYWgga29tcG9uZW4gcGFkYSBvYmplayBgY292X2lkX3Jhd2ANCg0KYGBge3J9DQpsZW5ndGgoY292X2lkX3JhdykNCmBgYA0Ka2VtdWRpYW4gZ3VuYWthbiBmdW5nc2kgYG5hbWVzKClgICB1bnR1ayBtZW5nZXRhaHVpIG5hbWEga29tcG9uZW4gcGFkYSBvYmplayBgY292X2lkX3Jhd2ANCg0KYGBge3J9DQpuYW1lcyhjb3ZfaWRfcmF3KQ0KYGBgDQpzZXRlbGFoIGl0dSBzaW1wYW4gZGVuZ2FuIG5hbWEgYGNvdl9pZF9kb2NgDQoNCmBgYHtyfQ0KY292X2lkX2RvYyA8LSBjb3ZfaWRfcmF3JHVwZGF0ZQ0KYGBgDQoNCg0KYGBge3J9DQpjb3ZfaWRfZG9jJHBlbmFtYmFoYW4kdGFuZ2dhbA0KYGBgDQpgYGB7cn0NCmNvdl9pZF9kb2MkcGVuYW1iYWhhbiRqdW1sYWhfc2VtYnVoDQpgYGANCmBgYHtyfQ0KY292X2lkX2RvYyRwZW5hbWJhaGFuJGp1bWxhaF9tZW5pbmdnYWwNCmBgYA0KYGBge3J9DQpjb3ZfaWRfZG9jJHRvdGFsJGp1bWxhaF9wb3NpdGlmDQpgYGANCmBgYHtyfQ0KY292X2lkX2RvYyR0b3RhbCRqdW1sYWhfbWVuaW5nZ2FsDQpgYGANCiMgU2VrYXJhbmcgS2l0YSBNZWxpaGF0IGRpIEphd2EgVGltdXINCg0KYGBge3J9DQpyZXNwb25famF0aW0gPC0gR0VUKCJodHRwczovL2RhdGEuY292aWQxOS5nby5pZC9wdWJsaWMvYXBpL3Byb3ZfZGV0YWlsX0pBV0FfVElNVVIuanNvbiIpDQpjb3ZfamF0aW1fcmF3IDwtIGNvbnRlbnQocmVzcG9uX2phdGltLCBhcyA9ICJwYXJzZWQiLCBzaW1wbGlmeVZlY3RvciA9IFRSVUUpDQpgYGANCg0KU2VrYXJhbmcga2l0YSBtZWxpaGF0IGVsZW1lbiAtIGVsZW1lbiB1dGFtYW4geWFiZyB0ZXJzZWRpYSBtZW5nZ3VuYWthbiBmdW5nc2kgbmFtZXMoKQ0KDQpgYGB7cn0NCm5hbWVzKGNvdl9qYXRpbV9yYXcpDQpgYGANCg0KYGBge3J9DQpjb3ZfamF0aW1fcmF3JGthc3VzX3RvdGFsDQpgYGANCmBgYHtyfQ0KY292X2phdGltX3JhdyRsaXN0X3BlcmtlbWJhbmdhbg0KYGBgDQoNCnNpbXBhbiBoYXNpbCBleHRyYWN0IGtlZGFsYW0gb2JqZWN0IGJhcnUgYmVybmFtYSBgY292X2phdGltYA0KDQpgYGB7cn0NCmNvdl9qYXRpbSA8LSBjb3ZfamF0aW1fcmF3JGxpc3RfcGVya2VtYmFuZ2FuDQpgYGANCg0KDQpEYXJpIGhhc2lsIHlhbmcgc3VkYWggZGl0dW5qdWtrYW4gcGFkYSB0YWJlbCBkaSBhdGFzIG1ha2EgcGVybHUga2l0YSBvbGFoIGRhdGFueWEgYWdhciBkYXBhdCBkaWJhY2EuIFBlbnVsaXNhbiBGb3JtYXQgdGFuZ2dhbCBoYXJ1cyBraXRhIHBlcmJhaWtpLiBHdW5ha2FuIGxpYnJhcnkgIGBkcGx5cmAgdW50dWsgbWVuZ29sYWggZGF0YS4NCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KYGBgDQpgYGB7cn0NCm5ld19jb3ZfamF0aW0gPC0NCiAgY292X2phdGltICU+JSANCiAgc2VsZWN0KC1jb250YWlucygiRElSQVdBVF9PUl9JU09MQVNJIikpICU+JSANCiAgc2VsZWN0KC1zdGFydHNfd2l0aCgiQUtVTVVMQVNJIikpICU+JSANCiAgcmVuYW1lKA0KICAgIGNvdl9rYXN1cyA9IEtBU1VTLA0KICAgIGNvdl9tZW5pbmdnYWwgPSBNRU5JTkdHQUwsDQogICAgY292X3NlbWJ1aCA9IFNFTUJVSA0KICAgICkgJT4lIA0KICBtdXRhdGUoDQogICAgdGFuZ2dhbCA9IGFzLlBPU0lYY3QodGFuZ2dhbCAvIDEwMDAsIG9yaWdpbiA9ICIxOTcwLTAxLTAxIiksDQogICAgdGFuZ2dhbCA9IGFzLkRhdGUodGFuZ2dhbCkNCiAgKQ0KDQpzdHIobmV3X2Nvdl9qYXRpbSkNCmBgYA0KYGBge3J9DQpoZWFkKG5ld19jb3ZfamF0aW0pDQpgYGANCiMgTWVtdmlzdWFsaXNhc2lrYW4gRGF0YSBNZWxhbHVpIEdyYWZpaw0KDQpHdW5ha2FuIExpYnJhcnkgYGdncGxvdDJgIGRhbiBgaHJicnRoZW1lc2ANCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGhyYnJ0aGVtZXMpDQoNCmdncGxvdChuZXdfY292X2phdGltLCBhZXMoeCA9IHRhbmdnYWwsIHkgPSBjb3Zfa2FzdXMpKSArDQogIGdlb21fY29sKCkNCmBgYA0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGhyYnJ0aGVtZXMpDQpnZ3Bsb3QobmV3X2Nvdl9qYXRpbSwgYWVzKHRhbmdnYWwsIGNvdl9rYXN1cykpICsNCiAgICBnZW9tX2NvbChmaWxsID0gInNhbG1vbiIpICsNCiAgICBsYWJzKA0KICAgICAgeCA9IE5VTEwsDQogICAgICB5ID0gIkp1bWxhaCBrYXN1cyIsDQogICAgICB0aXRsZSA9ICJLYXN1cyBIYXJpYW4gUG9zaXRpZiBDT1ZJRC0xOSBkaSBKYXdhIFRpbXVyIiwNCiAgICAgIHN1YnRpdGxlID0gIlRlcmphZGkgcGVsb25qYWthbiBrYXN1cyBkaSBidWxhbiBKdWxpIiwNCiAgICAgIGNhcHRpb24gPSAiU3VtYmVyIGRhdGE6IGNvdmlkMTkuZ28uaWQiDQogICAgKSArDQogICAgdGhlbWVfaXBzdW0oDQogICAgICBiYXNlX3NpemUgPSAxMywNCiAgICAgIHBsb3RfdGl0bGVfc2l6ZSA9IDIxLA0KICAgICAgZ3JpZCA9ICJZIiwNCiAgICAgIHRpY2tzID0gVFJVRQ0KICAgICkgKw0KICAgIHRoZW1lKHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIpDQpgYGANCiMgR3JhZmlrIFVudHVrIEthc3VzIFNlbWJ1aA0KDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShocmJydGhlbWVzKQ0KDQpnZ3Bsb3QobmV3X2Nvdl9qYXRpbSwgYWVzKHRhbmdnYWwsIGNvdl9zZW1idWgpKSArDQogIGdlb21fY29sKGZpbGwgPSAib2xpdmVkcmFiMiIpICsNCiAgbGFicygNCiAgICB4ID0gTlVMTCwNCiAgICB5ID0gIkp1bWxhaCBrYXN1cyIsDQogICAgdGl0bGUgPSAiS2FzdXMgSGFyaWFuIFNlbWJ1aCBEYXJpIENPVklELTE5IGRpIEphd2EgVGltdXIiLA0KICAgIGNhcHRpb24gPSAiU3VtYmVyIGRhdGE6IGNvdmlkMTkuZ28uaWQiDQogICkgKw0KICB0aGVtZV9pcHN1bSgNCiAgICBiYXNlX3NpemUgPSAxMywgDQogICAgcGxvdF90aXRsZV9zaXplID0gMTksDQogICAgZ3JpZCA9ICJZIiwNCiAgICB0aWNrcyA9IFRSVUUNCiAgKSArDQogIHRoZW1lKHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIpDQpgYGANCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShocmJydGhlbWVzKQ0KDQpnZ3Bsb3QobmV3X2Nvdl9qYXRpbSwgYWVzKHRhbmdnYWwsIGNvdl9tZW5pbmdnYWwpKSArDQogIGdlb21fY29sKGZpbGwgPSAicmVkIikgKw0KICBsYWJzKA0KICAgIHggPSBOVUxMLA0KICAgIHkgPSAiSnVtbGFoIGthc3VzIiwNCiAgICB0aXRsZSA9ICJLYXN1cyBIYXJpYW4gTWVuaWdnYWwgRGFyaSBDT1ZJRC0xOSBkaSBKYXdhIFRpbXVyIiwNCiAgICBjYXB0aW9uID0gIlN1bWJlciBkYXRhOiBjb3ZpZDE5LmdvLmlkIg0KICApICsNCiAgdGhlbWVfaXBzdW0oDQogICAgYmFzZV9zaXplID0gMTMsIA0KICAgIHBsb3RfdGl0bGVfc2l6ZSA9IDE5LA0KICAgIGdyaWQgPSAiWSIsDQogICAgdGlja3MgPSBUUlVFDQogICkgKw0KICB0aGVtZShwbG90LnRpdGxlLnBvc2l0aW9uID0gInBsb3QiKQ0KYGBgDQoNCg0KIyBEYWZ0YXIgUHVzdGFrYQ0KDQo8YSBocmVmID0gImh0dHBzOi8vd3d3LnItcHJvamVjdC5vcmcvIj5odHRwczovL3d3dy5yLXByb2plY3Qub3JnLzwvYT4NCg0KPGEgaHJlZiA9ICJodHRwczovL2NvdmlkMTkuZ28uaWQiPmh0dHBzOi8vY292aWQxOS5nby5pZDwvYT4gDQoNCg0K