
Soal 1. Apa Perbedaan Pengambilan Keputusan Statistika
Deskriptif dan Statistika Inferensial
Definsi -> Statistika deskriptif dan Statistika
inferensial adalah dua cabang utama statistika yang digunaan untuk
menganalisis data, tetapi keduanya memiliki tujuan dan pendekatan yang
berbeda.
A. Statistika Deskriptif
Statistika Deskriptif digunakan untuk
mendeskripsikan atau merangkum data
yang ada. Tujuannya adalah memberikan gambaran mengenai data yang sudah
dikumpulkan tanpa membuat generalisasi atau inferensi ke populasi yang
lebih besar.
1. Ciri-ciri
- Berfokus pada deskripsi dataset (tanpa
generalisasi).
- Tidak ada proses pengujian hipotesis.
- Hanya berlaku untuk data yang sedang dianalisis.
- Tidak melibatkan ketidakpastian atau peluang.
2. Teknik yang Digunakan
- Ukuran Pemusatan: Mean, Median, dan Modus.
- Ukuran Penyebaran: Varians, Standar Deviasi,dan
Rentang (Range).
- Visualisasi Data: Grafik batang, Diagram lingkaran,
Histogram, dan Boxplot.
- Distribusi Frekuensi: Tabel frekuensi atau Diagram
distribusi.
3. Contoh Kasus
Seorang Manager pemasaran di sebuah perusahaan sedang melakukan
analisis penjualan untuk bulan ini. Berikut adalah data penjualan
berdasarkan kateori produk yang berhasil dikumpulkan:
a. Kategori Produk Tertinggi dan Terendah
- Makanan \(500\)unit.
- Elektronik \(120\)unit.
b. Rata-rata Penjualan \[
\text{Rata-rata penjualan} = \frac{120 + 300 + 150 + 500 + 200}{5} = 254
\text{ unit}.
\]
c. Urutkan kategori Produk berdasakan Penjualan
- Makanan \(500\)unit.
- Pakaian \(300\) unit.
- Alat Olahraga \(300\) unit.
- Peralatan Rumah Tangga \(150\)unit.
- Elektronik \(120\)unit.
| Elektronik |
120 |
| Pakaian |
300 |
| Peralatan Rumah Tangga |
150 |
| Makanan |
500 |
| Alat Olahraga |
200 |
4. Pengambilan Keputusan
Keputusan diambil berdasarkan gambaran yang jelas tentang
data, seperti mengidentifikasi tren atau pola dari dataset yang
ada. Namun, keputusan ini hanya berlaku unutk Kelompok data yang
dianalisis.
B. Statistika Inferensial
Statistika inferensial adalah metode yang digunakan untuk membuat
kesimpulan atau prediksi tentang suatu
populasi berdasarkan sampel data. Tujuannya adalah
untuk memahami karakteristik populasi dengan memperhitungkan
ketidakpastian dan peluang.
1. Ciri-ciri
- Melibatkan generalisasi dari sempel ke
populasi
- Menggunakan konsep peluang dan distribusi probabilitas
- Melibatkan penguji hipotesis
- Memiliki tingkat ketidakpastian (biasanya dinyatakan dengan tingkat
kepercayaan atau p-value)
2. Teknik yang Digunakan
- Estimasi Parameter: Interval kepercayaan
(confidence interval)
- Pengujian Hipotesis: Uji t, Uji z, Uji chi-square,
Uji ANOVA
- Model Statistika: Regresi linier, Regresi logistik,
Analisis varians
- Prediksi: Prediksi tren masa depan berdasarkan
model.
3. Contoh Kasus
Sebuah toko retail memiliki tiga Produk unggulan, yaitu
Produk A, Produk B, dan Produk C.
Selama empat minggu terakhir, toko tersebut mencatat penjualan mingguan
untuk masing-masing produk. Data penjualan dirangkum sebagai
berikut:
Penjualan Mingguan Berdasarkan Produk
| Minggu 1 |
200 |
150 |
300 |
| Minggu 2 |
250 |
200 |
320 |
| Minggu 3 |
300 |
220 |
400 |
| Minggu 4 |
350 |
250 |
450 |
4. Pengambilan Keputusan
Keputusan diambil berdasarkan hasil analisis yang
digeneralisasi ke populasi, dengan mempertimbangkan kemungkinan
kesalahan. Metode ini memungkinkan pembuatan keputusan strategis
berdasarkan data parsial.
Kesimpulan Soal 1
- Statistika Deskriptif digunakan untuk
menganalisis dan menggambarkan data yang ada,
memberikan informasi tentang karakteristik data tersebut tanpa melakukan
generalisasi lebih lanjut.
- Statistika Inferensial digunakan untuk
membuat kesimpulan atau prediksi tentang populasi berdasarkan
sampel dan untuk menguji hipotesis atau estimasi parameter
populasi.
Soal 2. Apa Perbedaan dari Alpa dengan Beta yang Digunakan
di Uji Hipotesis
Definisi Hipotetis -> Uji Hipotesis adalah
prosedur statistika yang digunakan untuk menguji apakah sebuah klaim
atau dugaan mengenai paraameter populasinya (misalnya, rata-rata,
proposi, dll). Benar atau salah berdasarkan data sampel. Uji ini
melibatkan dua hipotesis utama:
- Hipotesis Nol \(H_0\): Ini adalah kalim yang kita coba uji,
dan sering kali menggambarkan “tidak ada perbedaan” atau “tidak ada
efek”.
- Hipotesis Alternatif \(H_1\): Ini adalah klaim yang ingin kita
buktikan, yang sering kali menggambarkan “ada perbedaan” atau “ada
efek”.
Setelah mengumpulkan data dan melakukan perhitungan, kita membuat
keputusan apakah akan menokal \(H_0\)
atau tidak, berdasarkan hasil uji statistika yang kita lakukan.
A. Alpha \((\alpha)\) Tingkat
Signifikan
Alpha \((\alpha)\)
adalah tingkat signifikan dari uji hipotesis yang digunakan untuk
menentukan batas kritis dalam pengambilan keputusan. Secara statistik,
\(\alpha\) mengidenfikasikan
probabilitas untuk membuat kesalahn tipe I.
1. Kesalahan Tipe I
Kesalahan tipe I terjadi ketika kita menolak hipotesis nol \((H_0)\) padahal sebenarnya hipotesis nol
itu benar. Ini adalah kesalahan yang salah menolak hipotesis
yang benar.
COntohnya:
- Misalkan kita menguji apakah obat baru efektif dari pada obat lama.
Jika kita menolak \(H_0\) yang
menyatakan “obat baru tidak lebih efektif” padahal sbenarnya oabt baru
tidak lebih efektif, maka itu adalah kesalahan tipe I.
Nilai \(\alpha\) menentukan seberapa
besar kemingkinan kita melakukan kesalahan tipe I. Misalnya, jika \(\alpha\) = \(0,05\), maka kita menerima tingkat
kesalahan tipe I sebesar \(5\)%.
Artinya, ada \(%\)% kemungkinan kita
menolak \(H_0\) yang benar.
2. Interpretasi Alpha \((\alpha)\):
- \(\alpha\) = \(0,01\): Menunjukan bahwa kita hanya
menerima \(1\)% kemungkinan kesalahan
tipe I.
- \(\alpha\) = \(0,05\): Menunjukkan bahwa kita menerima
\(5\)% kemungkinan kesalahan tioe
I.
- \(\alpha\) = \(0,10\): Menunjukkan bahwa kita menerima
\(10\)% kemungkinan kesalahn tipe
I.
Catatan: Nilai \(\alpha\) yang kecil menunjukkan pengujian
yang lebih konservatif, di mana kita hanya akan menolak \(H_0\) jika bukti yang ada sangat kuat.
B. Beta \((\beta)\) Probabilitas Kesalahan
Tipe II
Beta \((\beta)\)
mengacu pada probabilitas terjadinya kesalahan tipe II.
Kesalahan tipe II terjadi ketika kita gagal menolak hipotesis nol \((H_0)\) padahal sebenarnya hipotesis nol
itu salah. Ini adalah kesalahan yang gagal mendeteksi perbedaan
yang benar-benar ada.
1. Kesalahan Tipe II:
Kesalahan tipe II terjadi jika kita gagal menemukan bukti yang cukup
untuk menolak \(H_0\) meskipun ada
perbedaan atau efek yang nyata dalam populasi.
Contoh:
- Misalkan kita menguji apakah suatu obat lebih efektif daripada
placebo. Jika kita gagal menolak H₀ yang menyatakan “obat tidak lebih
efektif” padahal obat tersebut sebenarnya lebih efektif, maka itu adalah
kesalahan tipe II.
2. Interpretasi Beta \((\beta)\):
Jika \(\beta\) = \(0,20\), maka ini berarti kita memiliki
\(20\) kemungkinan untuk gagal menolak
\(H_0\) jika \(H_0\) sebenarnya salah (atau ada efek yang
nyata). Sebaliknya,\(1 - \beta\) isebut
sebagai power dari uji hipotesis, yang menunjukkan
probabilitas untuk benar-benar mendeteksi efek yang ada.
3. Power dari Uji Hipotesis
Power dari uji hipotesis adalah kebalikan dari \(\beta (1 - \beta)\). Power yang
menggambarkan kemampuan uji untuk mendeteksi perbedaan yang
benar-benar ada (yaitu, mendeteksi efek nyata jika itu ada).
Sebuah uji yang memiliki power tinggi lebih mammpu mendeteksi efek yang
nyata dalam populasi.
Contoh:
- Jika power = \(0,80\), maka \(80\)% kemungkinan untuk benar mendeteksi
perbedaan yang ada, jika benar ada perbedaan dalam populasi.
Hubungan antara Alpha, Beta, dan Power:
- Power = \(1 -
\beta\): Semakin tinggi ppower, semakin besar peluang kita untuk
menemukan efek yang ada.
- \(\alpha\) dan \(\beta\) memiliki hubungan trade-off:
- Jika kita menurunkan \(\alpha\)
(misalnya darri \(0,05\) menjadi \(0,01\)), kita menjadi lebih konservatif
dalam menolak \(H_0\). Ini dapat
menyebabkan \(\beta\) meningkat
(kesalahan tipe II meningkat).
- Jika kita menurunkan \(\beta\)
(misalnya, meningkatkan ukuran sampel atau meningkatkan kekuatan uji),
maka \(\alpha\) cenderung
meningkat.
4. Contoh Perhitungan
Misalnya, kita ingin melakukan uji hipotesis untuk membandingkan
rata-rata dua kelompok menggunakan uji t. Kita tahu bahwa ukuran sampel
\((n)\) adalah \(30\), rata-rata yang diharapkan \((H_1)\) adalah \(52\), dan rata-rata yang diasumsikan untuk
\(H_0\) adalah \(50\) . Deviasi standar populsai adalah
\(10\).
Kesimpulan Soal 2
- Alpha \((\alpha)\)
mengukur probabilitas kesalahan tipe I, yaitu kesalahan
dalam menolak \(H_0\) yang benar.
- Beta \((\beta)\)
mengukur probabilitas kesalahan tipe II, yaitu
kesalahan dalam gagal menolak \(H_0\)
yang salah.
- Power adalah kemampuan uji untuk mendeteksi
efek yang ada (kebalikan dari \(\beta\)).
- Trade-off antara \(\alpha\) dan
\(\beta\) menunjukkan bahwa memilih
tingkat signifikan yang lebih rendah dapat meningkatkan kemungkinan
kesalahan tipe II \((\beta)\),
sementara meningkatkan ukuran sampel atau power dapat mengurangi risiko
kesalahan tipe II dan meningkatkan kekuatan deteksi.
Dengan pemahaman ini, dapat merancang uji hipotesis dengan lebih baik
dan memahami bagaimana trade-off antara \(\alpha\) dan \(\beta\) mempengaruhi hasil uji dan
interpretasinya.
Soal 3. Kapan kita menggunakan Pesimis dan
Optimis
Dalam Statistika, pendekatan
pesimis dan optimis digunakan dalam
analisis keputusan atau inferensi
statistik
A. Pendekatan Pesimis dalam Statistia
Pendekatan pesimis dalam statistika sering digunakan saat fokusnya
adalah mengantisipasi risiko terburuk. Contohnya:
Aplikasi:
1. Analisis Risisko
Dalam Statistika inferensial, pendekatan pesimis
digunakan untuk menentukan batas bawah suatu estimasi (lowwer bound).
Misalnya:
- Dalam interval kepercayaan, pendekatan pesimis lebih memperhatikan
batas bawah untuk memastikan hasil tidak lebih buruk dari itu.
- Dalam analisis risiko keuangan, digunakan untuk menghitung
Value at Risk (VaR), yaitu kerugian maksimum pada
tingkat kepercayaan tertentu.
2. Hipotesis Nol (Null Hypothesiss)
Saat menguji hipotesis, pendekatan pesimis bisanya mendukung
hipotesis nol \((H_0)\), karena ini
adalah asumsi dasar bahwa ** tidak ada efek atau hubungan**. Penolakan
\(H_0\) hanya dilakukan jika ada cukup
bukti kuat, untuk menghindari kesalahan tipe I (false positive).
3. Keputusan Konservatif
Pendekatan ini diambil ketika seorang analis lebih memilih
meminimalkan kesalahan daripada mengambil risiko,
misalnya saat merancang sistem yang harus beroperasi pada kondisi
terburuk.
Contoh:
Dalam uji t, jika kita ingin menetapkan batas toleransi rendah untuk
mendeteksi perbedaan rata-rata, kita menggunakan pendekatan konservatif
untuk memastikan tidak melewatkan risiko penting.
B. Pendekatan Optimis dalam Statistika
Pendekatan optimis sering digunakan saat fokusnya adalah
memaksimalkan peluang atau mengasumsikan
skenario terbaik.
Aplikasi:
1. Estimasi Maksimum (Upper Bound)
Dalam interval kepercayaan atau analisis risiko, pendekatan optimis
lebih memperhatikan batas atas (upper bound) untuk melihat potensi
terbaik dari suatu estimasi.
2. Perancanaan Berdasarkan Tren Positif
Dalam analisis data tren, pendekatan optimis mengasumsikan bahwa pola
data saat ini (seperti pertumbuhan atau pengurangan) akan berlanjut ke
masa depan.
3. Hipotesis Alternatif (Alternative Hypothesis)
Ketika seorang analis yakin bahwa ada hubungan yang signifikan,
pendekatan optimis mendukung hipotesis alternatif (H₁), yang menyatakan
bahwa ada efek atau hubungan.
Contoh:
Dalam analisis regresi, pendekatan optimis mungkin mengasumsikan
bahwa hubungan variabel independen dan dependen akan terus linier
meskipun ada sedikit deviasi pada data historis.
C. Pendekatan Kombinasi dalam Statistika
Dalam banyak kasus, pendekatan pesimis dan optimis digunakan bersama
untuk mendapatkan analisis realistis, misalnya dalam:
1. Analisis Skenario (Scenario Analysis)
Menggunakan nilai pesimis, optimis, dan realistis untuk
memproyeksikan berbagai kemungkinan hasil.
- Contoh: Dalam peramalan penjualan, pendekatan
optimis menggunakan estimasi pertumbuhan tertinggi, sementara pendekatan
pesimis menggunakan pertumbuhan terendah.
2. Interval Predikai
Pendekatan ini mencakup kedua sisi (pesimis dan optimis), misalnya
interval kepercayaan \(95\)% yang
menunjukkan batas bawah (pesimis) dan batas atas (optimis) estimasi.
3. Uji Statistik dengan Nilai Kritikal
Nilai kritis (critical value) digunakan untuk mendefinisikan batas
optimis (diterima) dan pesimis (ditolak) pada uji hipotesis.
Kesimpulan Soal 3:
- Gunakan pendekatan pesimis saat ingin meminimalkan
risiko kesalahan atau mempersiapkan skenario terburuk.
- Gunakan pendekatan optimis saat fokus pada peluang
terbaik atau mengeksplorasi skenario positif.
- Kombinasikan keduanya untuk mendapatkan gambaran yang seimbang,
misalnya melalui analisis skenario atau interval prediksi.
Refrensi:
- DSciencelabs. (n.d.) Pengantar Statistika untuk Sains Data.
Bookdown. Retrieved from
Klik disini
- Gracia Carolina 2022 Statistika Deskriptif. Bookdown. Retrieved from
Klik
disini
- Arif Mukti Ramadhan statistika Inferensial. Bookdown. Retrieved from
Klik disini
- Joko Ade Nursyiono Statistika: Mengenal Alpha Beta. Bookdown.
Retrieved from
Klik disini
LS0tDQp0aXRsZTogIlR1Z2FzIFBlcnRlbXVhbiBLZSAxNCBTdGF0aXN0aWthIERhc2FyIg0KDQphdXRob3I6IA0KICAgICAtICJOYWJpbGEgQW5nZ2l0YSBQdXRyaSINCiAgICAgDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KDQotLS0NCg0KPGltZyBzcmM9ImltZy9wcm9maWxlLmpwZyIgYWx0PSJwIiBpZD0ibG9nby11dGFtYSIgc3R5bGU9IndpZHRoOjMwMDsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiLz4NCg0KDQojICoqU29hbCAxLiBBcGEgUGVyYmVkYWFuIFBlbmdhbWJpbGFuIEtlcHV0dXNhbiBTdGF0aXN0aWthIERlc2tyaXB0aWYgZGFuIFN0YXRpc3Rpa2EgSW5mZXJlbnNpYWwqKg0KKipEZWZpbnNpKiogLT4gU3RhdGlzdGlrYSBkZXNrcmlwdGlmIGRhbiBTdGF0aXN0aWthIGluZmVyZW5zaWFsIGFkYWxhaCBkdWEgY2FiYW5nIHV0YW1hIHN0YXRpc3Rpa2EgeWFuZyBkaWd1bmFhbiB1bnR1ayBtZW5nYW5hbGlzaXMgZGF0YSwgdGV0YXBpIGtlZHVhbnlhIG1lbWlsaWtpIHR1anVhbiBkYW4gcGVuZGVrYXRhbiB5YW5nIGJlcmJlZGEuDQoNCiMgKipBLiBTdGF0aXN0aWthIERlc2tyaXB0aWYqKg0KU3RhdGlzdGlrYSBEZXNrcmlwdGlmIGRpZ3VuYWthbiB1bnR1ayAqKm1lbmRlc2tyaXBzaWthbioqIGF0YXUgKiptZXJhbmdrdW0qKiBkYXRhIHlhbmcgYWRhLiBUdWp1YW5ueWEgYWRhbGFoIG1lbWJlcmlrYW4gZ2FtYmFyYW4gbWVuZ2VuYWkgZGF0YSB5YW5nIHN1ZGFoIGRpa3VtcHVsa2FuIHRhbnBhIG1lbWJ1YXQgZ2VuZXJhbGlzYXNpIGF0YXUgaW5mZXJlbnNpIGtlIHBvcHVsYXNpIHlhbmcgbGViaWggYmVzYXIuDQoNCiMjICoqMS4gQ2lyaS1jaXJpKioNCg0KLSBCZXJmb2t1cyBwYWRhICoqZGVza3JpcHNpIGRhdGFzZXQqKiAodGFucGEgZ2VuZXJhbGlzYXNpKS4NCi0gVGlkYWsgYWRhIHByb3NlcyBwZW5ndWppYW4gaGlwb3Rlc2lzLg0KLSBIYW55YSBiZXJsYWt1IHVudHVrIGRhdGEgeWFuZyBzZWRhbmcgZGlhbmFsaXNpcy4NCi0gVGlkYWsgbWVsaWJhdGthbiBrZXRpZGFrcGFzdGlhbiBhdGF1IHBlbHVhbmcuDQoNCiMjICoqMi4gVGVrbmlrIHlhbmcgRGlndW5ha2FuKioNCg0KLSAqKlVrdXJhbiBQZW11c2F0YW4qKjogTWVhbiwgTWVkaWFuLCBkYW4gTW9kdXMuDQotICoqVWt1cmFuIFBlbnllYmFyYW4qKjogVmFyaWFucywgU3RhbmRhciBEZXZpYXNpLGRhbiBSZW50YW5nIChSYW5nZSkuDQotICoqVmlzdWFsaXNhc2kgRGF0YSoqOiBHcmFmaWsgYmF0YW5nLCBEaWFncmFtIGxpbmdrYXJhbiwgSGlzdG9ncmFtLCBkYW4gQm94cGxvdC4NCi0gKipEaXN0cmlidXNpIEZyZWt1ZW5zaSoqOiBUYWJlbCBmcmVrdWVuc2kgYXRhdSBEaWFncmFtIGRpc3RyaWJ1c2kuDQoNCiMjICoqMy4gQ29udG9oIEthc3VzKioNClNlb3JhbmcgTWFuYWdlciBwZW1hc2FyYW4gZGkgc2VidWFoIHBlcnVzYWhhYW4gc2VkYW5nIG1lbGFrdWthbiBhbmFsaXNpcyBwZW5qdWFsYW4gdW50dWsgYnVsYW4gaW5pLiBCZXJpa3V0IGFkYWxhaCBkYXRhIHBlbmp1YWxhbiBiZXJkYXNhcmthbiBrYXRlb3JpIHByb2R1ayB5YW5nIGJlcmhhc2lsIGRpa3VtcHVsa2FuOg0KDQoqKmEuIEthdGVnb3JpIFByb2R1ayBUZXJ0aW5nZ2kgZGFuIFRlcmVuZGFoKioNCg0KLSAqKk1ha2FuYW4qKiAkNTAwJHVuaXQuDQotICoqRWxla3Ryb25payoqICQxMjAkdW5pdC4NCg0KKipiLiBSYXRhLXJhdGEgUGVuanVhbGFuKioNClxbDQpcdGV4dHtSYXRhLXJhdGEgcGVuanVhbGFufSA9IFxmcmFjezEyMCArIDMwMCArIDE1MCArIDUwMCArIDIwMH17NX0gPSAyNTQgXHRleHR7IHVuaXR9Lg0KXF0NCg0KKipjLiBVcnV0a2FuIGthdGVnb3JpIFByb2R1ayBiZXJkYXNha2FuIFBlbmp1YWxhbioqDQoNCi0gTWFrYW5hbiAkNTAwJHVuaXQuDQotIFBha2FpYW4gJDMwMCQgdW5pdC4NCi0gQWxhdCBPbGFocmFnYSAkMzAwJCB1bml0Lg0KLSBQZXJhbGF0YW4gUnVtYWggVGFuZ2dhICQxNTAkdW5pdC4NCi0gRWxla3Ryb25payAkMTIwJHVuaXQuDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW1idWF0IGRhdGEgZnJhbWUgZGFyaSBrYXRlZ29yaSBwcm9kdWsgZGFuIGp1bWxhaCBwZW5qdWFsYW4NCmthdGVnb3JpIDwtIGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJQZXJhbGF0YW4gUnVtYWggVGFuZ2dhIiwgIk1ha2FuYW4iLCAiQWxhdCBPbGFocmFnYSIpDQpwZW5qdWFsYW4gPC0gYygxMjAsIDMwMCwgMTUwLCA1MDAsIDIwMCkNCg0KIyBNZW1idWF0IGRhdGFmcmFtZQ0KZGF0YV9wZW5qdWFsYW4gPC0gZGF0YS5mcmFtZShLYXRlZ29yaSA9IGthdGVnb3JpLCBQZW5qdWFsYW4gPSBwZW5qdWFsYW4pDQoNCiMgTWVuYW1waWxrYW4gdGFiZWwgeWFuZyBsZWJpaCBqZWxhcw0KbGlicmFyeShrbml0cikNCmthYmxlKGRhdGFfcGVuanVhbGFuLCBmb3JtYXQgPSAibWFya2Rvd24iLCBjb2wubmFtZXMgPSBjKCJLYXRlZ29yaSBQcm9kdWsiLCAiSnVtbGFoIFBlbmp1YWxhbiIpKQ0KYGBgDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeSB5YW5nIGRpcGVybHVrYW4NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIHBlciBrYXRlZ29yaSBwcm9kdWsNCmthdGVnb3JpIDwtIGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJQZXJhbGF0YW4gUnVtYWggVGFuZ2dhIiwgIk1ha2FuYW4iLCAiQWxhdCBPbGFocmFnYSIpDQpwZW5qdWFsYW4gPC0gYygxMjAsIDMwMCwgMTUwLCA1MDAsIDIwMCkNCg0KIyBNZW1idWF0IGRhdGFmcmFtZSBkYXJpIGRhdGENCmRhdGFfcGVuanVhbGFuIDwtIGRhdGEuZnJhbWUoS2F0ZWdvcmkgPSBrYXRlZ29yaSwgUGVuanVhbGFuID0gcGVuanVhbGFuKQ0KDQojIE1lbWJ1YXQgZGlhZ3JhbSBiYXRhbmcgM0QNCmZpZyA8LSBwbG90X2x5KGRhdGEgPSBkYXRhX3Blbmp1YWxhbiwgDQogICAgICAgICAgICAgICB4ID0gfkthdGVnb3JpLCANCiAgICAgICAgICAgICAgIHkgPSB+UGVuanVhbGFuLCANCiAgICAgICAgICAgICAgIHR5cGUgPSAnYmFyJywgDQogICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ2JsdWUnKSkgJT4lDQogIGxheW91dCh0aXRsZSA9ICJKdW1sYWggUGVuanVhbGFuIFBlciBLYXRlZ29yaSBQcm9kdWsgKDNEKSIsDQogICAgICAgICBzY2VuZSA9IGxpc3QoeGF4aXMgPSBsaXN0KHRpdGxlID0gJ0thdGVnb3JpIFByb2R1aycpLA0KICAgICAgICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICdKdW1sYWggUGVuanVhbGFuJyksDQogICAgICAgICAgICAgICAgICAgICAgemF4aXMgPSBsaXN0KHRpdGxlID0gJ1Blbmp1YWxhbicpKSwNCiAgICAgICAgIGJhcm1vZGUgPSAnc3RhY2snKQ0KDQojIE1lbmFtcGlsa2FuIGRpYWdyYW0NCmZpZw0KYGBgDQojIyAqKjQuIFBlbmdhbWJpbGFuIEtlcHV0dXNhbioqDQpLZXB1dHVzYW4gZGlhbWJpbCBiZXJkYXNhcmthbiAqKmdhbWJhcmFuIHlhbmcgamVsYXMgdGVudGFuZyBkYXRhKiosIHNlcGVydGkgbWVuZ2lkZW50aWZpa2FzaSB0cmVuIGF0YXUgcG9sYSBkYXJpIGRhdGFzZXQgeWFuZyBhZGEuIE5hbXVuLCBrZXB1dHVzYW4gaW5pIGhhbnlhIGJlcmxha3UgdW51dGsgKipLZWxvbXBvayBkYXRhIHlhbmcgZGlhbmFsaXNpcyoqLg0KDQoNCiMgKipCLiBTdGF0aXN0aWthIEluZmVyZW5zaWFsKioNClN0YXRpc3Rpa2EgaW5mZXJlbnNpYWwgYWRhbGFoIG1ldG9kZSB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW1idWF0ICoqa2VzaW1wdWxhbioqIGF0YXUgKipwcmVkaWtzaSoqIHRlbnRhbmcgc3VhdHUgcG9wdWxhc2kgYmVyZGFzYXJrYW4gKipzYW1wZWwgZGF0YSoqLiBUdWp1YW5ueWEgYWRhbGFoIHVudHVrIG1lbWFoYW1pIGthcmFrdGVyaXN0aWsgcG9wdWxhc2kgZGVuZ2FuIG1lbXBlcmhpdHVuZ2thbiBrZXRpZGFrcGFzdGlhbiBkYW4gcGVsdWFuZy4NCg0KIyMgKioxLiBDaXJpLWNpcmkqKg0KDQotIE1lbGliYXRrYW4gKipnZW5lcmFsaXNhc2kgZGFyaSBzZW1wZWwga2UgcG9wdWxhc2kqKg0KLSBNZW5nZ3VuYWthbiBrb25zZXAgcGVsdWFuZyBkYW4gZGlzdHJpYnVzaSBwcm9iYWJpbGl0YXMNCi0gTWVsaWJhdGthbiBwZW5ndWppIGhpcG90ZXNpcw0KLSBNZW1pbGlraSB0aW5na2F0IGtldGlkYWtwYXN0aWFuIChiaWFzYW55YSBkaW55YXRha2FuIGRlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuIGF0YXUgcC12YWx1ZSkNCg0KIyMgKioyLiBUZWtuaWsgeWFuZyBEaWd1bmFrYW4qKg0KDQotICoqRXN0aW1hc2kgUGFyYW1ldGVyKio6IEludGVydmFsIGtlcGVyY2F5YWFuIChjb25maWRlbmNlIGludGVydmFsKQ0KLSAqKlBlbmd1amlhbiBIaXBvdGVzaXMqKjogVWppIHQsIFVqaSB6LCBVamkgY2hpLXNxdWFyZSwgVWppIEFOT1ZBDQotICoqTW9kZWwgU3RhdGlzdGlrYSoqOiBSZWdyZXNpIGxpbmllciwgUmVncmVzaSBsb2dpc3RpaywgQW5hbGlzaXMgdmFyaWFucw0KLSAqKlByZWRpa3NpKio6IFByZWRpa3NpIHRyZW4gbWFzYSBkZXBhbiBiZXJkYXNhcmthbiBtb2RlbC4NCg0KIyMgKiozLiBDb250b2ggS2FzdXMqKg0KU2VidWFoIHRva28gcmV0YWlsIG1lbWlsaWtpIHRpZ2EgUHJvZHVrIHVuZ2d1bGFuLCB5YWl0dSAqKlByb2R1ayBBLCBQcm9kdWsgQiwqKiBkYW4gKipQcm9kdWsgQyoqLiBTZWxhbWEgZW1wYXQgbWluZ2d1IHRlcmFraGlyLCB0b2tvIHRlcnNlYnV0IG1lbmNhdGF0IHBlbmp1YWxhbiBtaW5nZ3VhbiB1bnR1ayBtYXNpbmctbWFzaW5nIHByb2R1ay4gRGF0YSBwZW5qdWFsYW4gZGlyYW5na3VtIHNlYmFnYWkgYmVyaWt1dDoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBJbnN0YWxhc2kgcGFrZXQga25pdHIgKGppa2EgYmVsdW0gYWRhKQ0KaWYgKCFyZXF1aXJlKCJrbml0ciIpKSBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIsIGRlcGVuZGVuY2llcyA9IFRSVUUpDQoNCiMgRGF0YSBwZW5qdWFsYW4gbWluZ2d1YW4NCmRhdGFfcGVuanVhbGFuIDwtIGRhdGEuZnJhbWUoDQogIE1pbmdndSA9IGMoIk1pbmdndSAxIiwgIk1pbmdndSAyIiwgIk1pbmdndSAzIiwgIk1pbmdndSA0IiksDQogIFByb2R1a19BID0gYygyMDAsIDI1MCwgMzAwLCAzNTApLA0KICBQcm9kdWtfQiA9IGMoMTUwLCAyMDAsIDIyMCwgMjUwKSwNCiAgUHJvZHVrX0MgPSBjKDMwMCwgMzIwLCA0MDAsIDQ1MCkNCikNCg0KIyBNZW5hbXBpbGthbiB0YWJlbCByYXBpDQprbml0cjo6a2FibGUoDQogIGRhdGFfcGVuanVhbGFuLCANCiAgY29sLm5hbWVzID0gYygiTWluZ2d1IiwgIlByb2R1ayBBICh1bml0KSIsICJQcm9kdWsgQiAodW5pdCkiLCAiUHJvZHVrIEMgKHVuaXQpIiksDQogIGNhcHRpb24gPSAiUGVuanVhbGFuIE1pbmdndWFuIEJlcmRhc2Fya2FuIFByb2R1ayINCikNCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkgeWFuZyBkaXBlcmx1a2FuDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkodGlkeXIpDQoNCiMgRGF0YSBwZW5qdWFsYW4gbWluZ2d1YW4NCmRhdGFfcGVuanVhbGFuIDwtIGRhdGEuZnJhbWUoDQogIE1pbmdndSA9IGMoIk1pbmdndSAxIiwgIk1pbmdndSAyIiwgIk1pbmdndSAzIiwgIk1pbmdndSA0IiksDQogIFByb2R1a19BID0gYygyMDAsIDI1MCwgMzAwLCAzNTApLA0KICBQcm9kdWtfQiA9IGMoMTUwLCAyMDAsIDIyMCwgMjUwKSwNCiAgUHJvZHVrX0MgPSBjKDMwMCwgMzIwLCA0MDAsIDQ1MCkNCikNCg0KIyBNZW5ndWJhaCBkYXRhIGtlIGZvcm1hdCBwYW5qYW5nIChsb25nIGZvcm1hdCkNCmRhdGFfbG9uZyA8LSBwaXZvdF9sb25nZXIoZGF0YV9wZW5qdWFsYW4sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzID0gYyhQcm9kdWtfQSwgUHJvZHVrX0IsIFByb2R1a19DKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAiUHJvZHVrIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gIlBlbmp1YWxhbiIpDQoNCiMgTWVuYW1iYWhrYW4ga29sb20gdW50dWsgSUQgdW5payBkaSBzZXRpYXAgdGl0aWsgKHVudHVrIHN1bWJ1IFopDQpkYXRhX2xvbmckTWluZ2d1X251bSA8LSBhcy5udW1lcmljKGZhY3RvcihkYXRhX2xvbmckTWluZ2d1KSkgICMgTWVueWltcGFuIHVydXRhbiBtaW5nZ3UNCmRhdGFfbG9uZyRQcm9kdWtfbnVtIDwtIGFzLm51bWVyaWMoZmFjdG9yKGRhdGFfbG9uZyRQcm9kdWspKSAgIyBNZW55aW1wYW4gdXJ1dGFuIHByb2R1aw0KDQojIE1lbWJ1YXQgZGlhZ3JhbSBiYXRhbmcgM0QgZGVuZ2FuIHNjYXR0ZXIzZA0KZmlnIDwtIHBsb3RfbHkoZGF0YV9sb25nLCANCiAgICAgICAgICAgICAgIHggPSB+TWluZ2d1X251bSwgDQogICAgICAgICAgICAgICB5ID0gflByb2R1a19udW0sIA0KICAgICAgICAgICAgICAgeiA9IH5QZW5qdWFsYW4sIA0KICAgICAgICAgICAgICAgdHlwZSA9ICJzY2F0dGVyM2QiLCANCiAgICAgICAgICAgICAgIG1vZGUgPSAibWFya2VycyIsIA0KICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChzaXplID0gOCwgY29sb3IgPSB+UHJvZHVrX251bSwgY29sb3JzY2FsZSA9ICdWaXJpZGlzJyksDQogICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCJQcm9kdWs6ICIsIFByb2R1aywgIjxicj5QZW5qdWFsYW46ICIsIFBlbmp1YWxhbikpIA0KDQojIE1lbmFtYmFoa2FuIGxhYmVsIGRhbiBqdWR1bA0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KA0KICB0aXRsZSA9ICJQZW5qdWFsYW4gTWluZ2d1YW4gQmVyZGFzYXJrYW4gUHJvZHVrICgzRCkiLA0KICBzY2VuZSA9IGxpc3QoDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIk1pbmdndSIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQcm9kdWsiKSwNCiAgICB6YXhpcyA9IGxpc3QodGl0bGUgPSAiSnVtbGFoIFBlbmp1YWxhbiAodW5pdCkiKQ0KICApDQopDQoNCiMgTWVuYW1waWxrYW4gZGlhZ3JhbSAzRA0KZmlnDQpgYGANCiMjICoqNC4gUGVuZ2FtYmlsYW4gS2VwdXR1c2FuKioNCktlcHV0dXNhbiBkaWFtYmlsIGJlcmRhc2Fya2FuICoqaGFzaWwgYW5hbGlzaXMgeWFuZyBkaWdlbmVyYWxpc2FzaSBrZSBwb3B1bGFzaSoqLCBkZW5nYW4gbWVtcGVydGltYmFuZ2thbiBrZW11bmdraW5hbiBrZXNhbGFoYW4uIE1ldG9kZSBpbmkgbWVtdW5na2lua2FuIHBlbWJ1YXRhbiBrZXB1dHVzYW4gc3RyYXRlZ2lzIGJlcmRhc2Fya2FuIGRhdGEgcGFyc2lhbC4NCg0KIyAqKktlc2ltcHVsYW4gU29hbCAxKioNCi0gKipTdGF0aXN0aWthIERlc2tyaXB0aWYqKiBkaWd1bmFrYW4gdW50dWsgKiptZW5nYW5hbGlzaXMgZGFuIG1lbmdnYW1iYXJrYW4gZGF0YSB5YW5nIGFkYSoqLCBtZW1iZXJpa2FuIGluZm9ybWFzaSB0ZW50YW5nIGthcmFrdGVyaXN0aWsgZGF0YSB0ZXJzZWJ1dCB0YW5wYSBtZWxha3VrYW4gZ2VuZXJhbGlzYXNpIGxlYmloIGxhbmp1dC4NCi0gKipTdGF0aXN0aWthIEluZmVyZW5zaWFsKiogZGlndW5ha2FuIHVudHVrICoqbWVtYnVhdCBrZXNpbXB1bGFuIGF0YXUgcHJlZGlrc2kgdGVudGFuZyBwb3B1bGFzaSBiZXJkYXNhcmthbiBzYW1wZWwqKiBkYW4gdW50dWsgbWVuZ3VqaSBoaXBvdGVzaXMgYXRhdSBlc3RpbWFzaSBwYXJhbWV0ZXIgcG9wdWxhc2kuDQoNCiMgKipTb2FsIDIuIEFwYSBQZXJiZWRhYW4gZGFyaSBBbHBhIGRlbmdhbiBCZXRhIHlhbmcgRGlndW5ha2FuIGRpIFVqaSBIaXBvdGVzaXMqKg0KKipEZWZpbmlzaSBIaXBvdGV0aXMqKiAtPiBVamkgSGlwb3Rlc2lzIGFkYWxhaCBwcm9zZWR1ciBzdGF0aXN0aWthIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbmd1amkgYXBha2FoIHNlYnVhaCBrbGFpbSBhdGF1IGR1Z2FhbiBtZW5nZW5haSBwYXJhYW1ldGVyIHBvcHVsYXNpbnlhIChtaXNhbG55YSwgcmF0YS1yYXRhLCBwcm9wb3NpLCBkbGwpLiBCZW5hciBhdGF1IHNhbGFoIGJlcmRhc2Fya2FuIGRhdGEgc2FtcGVsLiBVamkgaW5pIG1lbGliYXRrYW4gZHVhIGhpcG90ZXNpcyB1dGFtYToNCg0KLSAqKkhpcG90ZXNpcyBOb2wqKiAkSF8wJDogSW5pIGFkYWxhaCBrYWxpbSB5YW5nIGtpdGEgY29iYSB1amksIGRhbiBzZXJpbmcga2FsaSBtZW5nZ2FtYmFya2FuICJ0aWRhayBhZGEgcGVyYmVkYWFuIiBhdGF1ICJ0aWRhayBhZGEgZWZlayIuDQotICoqSGlwb3Rlc2lzIEFsdGVybmF0aWYqKiAkSF8xJDogSW5pIGFkYWxhaCBrbGFpbSB5YW5nIGluZ2luIGtpdGEgYnVrdGlrYW4sIHlhbmcgc2VyaW5nIGthbGkgbWVuZ2dhbWJhcmthbiAiYWRhIHBlcmJlZGFhbiIgYXRhdSAiYWRhIGVmZWsiLg0KDQpTZXRlbGFoIG1lbmd1bXB1bGthbiBkYXRhIGRhbiBtZWxha3VrYW4gcGVyaGl0dW5nYW4sIGtpdGEgbWVtYnVhdCBrZXB1dHVzYW4gYXBha2FoIGFrYW4gbWVub2thbCAkSF8wJCBhdGF1IHRpZGFrLCBiZXJkYXNhcmthbiBoYXNpbCB1amkgc3RhdGlzdGlrYSB5YW5nIGtpdGEgbGFrdWthbi4NCg0KIyAqKkEuIEFscGhhKiogJChcYWxwaGEpJCAqKlRpbmdrYXQgU2lnbmlmaWthbioqDQoqKkFscGhhKiogJChcYWxwaGEpJCBhZGFsYWggdGluZ2thdCBzaWduaWZpa2FuIGRhcmkgdWppIGhpcG90ZXNpcyB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW5lbnR1a2FuIGJhdGFzIGtyaXRpcyBkYWxhbSBwZW5nYW1iaWxhbiBrZXB1dHVzYW4uIFNlY2FyYSBzdGF0aXN0aWssICRcYWxwaGEkIG1lbmdpZGVuZmlrYXNpa2FuIHByb2JhYmlsaXRhcyB1bnR1ayBtZW1idWF0ICoqa2VzYWxhaG4gdGlwZSBJKiouDQoNCiMjICoqMS4gS2VzYWxhaGFuIFRpcGUgSSoqDQpLZXNhbGFoYW4gdGlwZSBJIHRlcmphZGkga2V0aWthIGtpdGEgbWVub2xhayBoaXBvdGVzaXMgbm9sICQoSF8wKSQgcGFkYWhhbCBzZWJlbmFybnlhIGhpcG90ZXNpcyBub2wgaXR1IGJlbmFyLiBJbmkgYWRhbGFoICoqa2VzYWxhaGFuIHlhbmcgc2FsYWggbWVub2xhayBoaXBvdGVzaXMgeWFuZyBiZW5hcioqLg0KDQoqKkNPbnRvaG55YSoqOg0KDQotIE1pc2Fsa2FuIGtpdGEgbWVuZ3VqaSBhcGFrYWggb2JhdCBiYXJ1IGVmZWt0aWYgZGFyaSBwYWRhIG9iYXQgbGFtYS4gSmlrYSBraXRhIG1lbm9sYWsgJEhfMCQgeWFuZyBtZW55YXRha2FuICJvYmF0IGJhcnUgdGlkYWsgbGViaWggZWZla3RpZiIgcGFkYWhhbCBzYmVuYXJueWEgb2FidCBiYXJ1IHRpZGFrIGxlYmloIGVmZWt0aWYsIG1ha2EgaXR1IGFkYWxhaCBrZXNhbGFoYW4gdGlwZSBJLg0KDQpOaWxhaSAkXGFscGhhJCBtZW5lbnR1a2FuIHNlYmVyYXBhIGJlc2FyIGtlbWluZ2tpbmFuIGtpdGEgbWVsYWt1a2FuIGtlc2FsYWhhbiB0aXBlIEkuIE1pc2FsbnlhLCBqaWthICRcYWxwaGEkID0gJDAsMDUkLCBtYWthIGtpdGEgbWVuZXJpbWEgdGluZ2thdCBrZXNhbGFoYW4gdGlwZSBJIHNlYmVzYXIgJDUkJS4gQXJ0aW55YSwgYWRhICQlJCUga2VtdW5na2luYW4ga2l0YSBtZW5vbGFrICRIXzAkIHlhbmcgYmVuYXIuDQoNCiMjICoqMi4gSW50ZXJwcmV0YXNpIEFscGhhKiogJChcYWxwaGEpJDoNCg0KLSAkXGFscGhhJCA9ICQwLDAxJDogTWVudW5qdWthbiBiYWh3YSBraXRhIGhhbnlhIG1lbmVyaW1hICQxJCUga2VtdW5na2luYW4ga2VzYWxhaGFuIHRpcGUgSS4NCi0gJFxhbHBoYSQgPSAkMCwwNSQ6IE1lbnVuanVra2FuIGJhaHdhIGtpdGEgbWVuZXJpbWEgJDUkJSBrZW11bmdraW5hbiBrZXNhbGFoYW4gdGlvZSBJLg0KLSAkXGFscGhhJCA9ICQwLDEwJDogTWVudW5qdWtrYW4gYmFod2Ega2l0YSBtZW5lcmltYSAkMTAkJSBrZW11bmdraW5hbiBrZXNhbGFobiB0aXBlIEkuDQoNCioqQ2F0YXRhbioqOiBOaWxhaSAkXGFscGhhJCB5YW5nIGtlY2lsIG1lbnVuanVra2FuIHBlbmd1amlhbiB5YW5nIGxlYmloIGtvbnNlcnZhdGlmLCBkaSBtYW5hIGtpdGEgaGFueWEgYWthbiBtZW5vbGFrICRIXzAkIGppa2EgYnVrdGkgeWFuZyBhZGEgc2FuZ2F0IGt1YXQuDQoNCiMgKipCLiBCZXRhKiogJChcYmV0YSkkICoqUHJvYmFiaWxpdGFzIEtlc2FsYWhhbiBUaXBlIElJKioNCioqQmV0YSoqICQoXGJldGEpJCBtZW5nYWN1IHBhZGEgcHJvYmFiaWxpdGFzIHRlcmphZGlueWEgKiprZXNhbGFoYW4gdGlwZSBJSSoqLiBLZXNhbGFoYW4gdGlwZSBJSSB0ZXJqYWRpIGtldGlrYSBraXRhIGdhZ2FsIG1lbm9sYWsgaGlwb3Rlc2lzIG5vbCAkKEhfMCkkIHBhZGFoYWwgc2ViZW5hcm55YSBoaXBvdGVzaXMgbm9sIGl0dSBzYWxhaC4gSW5pIGFkYWxhaCAqKmtlc2FsYWhhbiB5YW5nIGdhZ2FsIG1lbmRldGVrc2kgcGVyYmVkYWFuIHlhbmcgYmVuYXItYmVuYXIgYWRhKiouDQoNCiMjICoqMS4gS2VzYWxhaGFuIFRpcGUgSUkqKjoNCktlc2FsYWhhbiB0aXBlIElJIHRlcmphZGkgamlrYSBraXRhIGdhZ2FsIG1lbmVtdWthbiBidWt0aSB5YW5nIGN1a3VwIHVudHVrIG1lbm9sYWsgJEhfMCQgbWVza2lwdW4gYWRhIHBlcmJlZGFhbiBhdGF1IGVmZWsgeWFuZyBueWF0YSBkYWxhbSBwb3B1bGFzaS4NCg0KKipDb250b2gqKjoNCg0KLSBNaXNhbGthbiBraXRhIG1lbmd1amkgYXBha2FoIHN1YXR1ICBvYmF0IGxlYmloIGVmZWt0aWYgZGFyaXBhZGEgcGxhY2Viby4gSmlrYSBraXRhIGdhZ2FsIG1lbm9sYWsgSOKCgCB5YW5nIG1lbnlhdGFrYW4gIm9iYXQgdGlkYWsgbGViaWggZWZla3RpZiIgcGFkYWhhbCBvYmF0IHRlcnNlYnV0IHNlYmVuYXJueWEgbGViaWggZWZla3RpZiwgbWFrYSBpdHUgYWRhbGFoIGtlc2FsYWhhbiB0aXBlIElJLg0KDQojIyAqKjIuIEludGVycHJldGFzaSBCZXRhKiogJChcYmV0YSkkOg0KSmlrYSAkXGJldGEkID0gJDAsMjAkLCBtYWthIGluaSBiZXJhcnRpIGtpdGEgbWVtaWxpa2kgJDIwJCBrZW11bmdraW5hbiB1bnR1ayBnYWdhbCBtZW5vbGFrICRIXzAkIGppa2EgJEhfMCQgc2ViZW5hcm55YSBzYWxhaCAoYXRhdSBhZGEgZWZlayB5YW5nIG55YXRhKS4gU2ViYWxpa255YSwkMSAtIFxiZXRhJCBpc2VidXQgc2ViYWdhaSAqKnBvd2VyKiogZGFyaSB1amkgaGlwb3Rlc2lzLCB5YW5nIG1lbnVuanVra2FuIHByb2JhYmlsaXRhcyB1bnR1ayBiZW5hci1iZW5hciBtZW5kZXRla3NpIGVmZWsgeWFuZyBhZGEuDQoNCiMjICoqMy4gUG93ZXIgZGFyaSBVamkgSGlwb3Rlc2lzKioNCioqUG93ZXIqKiBkYXJpIHVqaSBoaXBvdGVzaXMgYWRhbGFoIGtlYmFsaWthbiBkYXJpICRcYmV0YSAoMSAtIFxiZXRhKSQuIFBvd2VyIHlhbmcgbWVuZ2dhbWJhcmthbiBrZW1hbXB1YW4gdWppIHVudHVrICoqbWVuZGV0ZWtzaSBwZXJiZWRhYW4geWFuZyBiZW5hci1iZW5hciBhZGEqKiAoeWFpdHUsIG1lbmRldGVrc2kgZWZlayBueWF0YSBqaWthIGl0dSBhZGEpLiBTZWJ1YWggdWppIHlhbmcgbWVtaWxpa2kgcG93ZXIgdGluZ2dpIGxlYmloIG1hbW1wdSBtZW5kZXRla3NpIGVmZWsgeWFuZyBueWF0YSBkYWxhbSBwb3B1bGFzaS4NCg0KKipDb250b2gqKjoNCg0KLSBKaWthIHBvd2VyID0gJDAsODAkLCBtYWthICQ4MCQlIGtlbXVuZ2tpbmFuIHVudHVrIGJlbmFyIG1lbmRldGVrc2kgcGVyYmVkYWFuIHlhbmcgYWRhLCBqaWthIGJlbmFyIGFkYSBwZXJiZWRhYW4gZGFsYW0gcG9wdWxhc2kuDQoNCioqSHVidW5nYW4gYW50YXJhIEFscGhhLCBCZXRhLCBkYW4gUG93ZXIqKjoNCg0KLSAqKlBvd2VyKiogPSAkMSAtIFxiZXRhJDogU2VtYWtpbiB0aW5nZ2kgcHBvd2VyLCBzZW1ha2luIGJlc2FyIHBlbHVhbmcga2l0YSB1bnR1ayBtZW5lbXVrYW4gZWZlayB5YW5nIGFkYS4NCi0gJFxhbHBoYSQgZGFuICRcYmV0YSQgbWVtaWxpa2kgaHVidW5nYW4gdHJhZGUtb2ZmOg0KICAgIC0gSmlrYSBraXRhIG1lbnVydW5rYW4gJFxhbHBoYSQgKG1pc2FsbnlhIGRhcnJpICQwLDA1JCBtZW5qYWRpICQwLDAxJCksIGtpdGEgbWVuamFkaSBsZWJpaCBrb25zZXJ2YXRpZiBkYWxhbSBtZW5vbGFrICRIXzAkLiBJbmkgZGFwYXQgbWVueWViYWJrYW4gJFxiZXRhJCBtZW5pbmdrYXQgKGtlc2FsYWhhbiB0aXBlIElJIG1lbmluZ2thdCkuDQogICAgLSBKaWthIGtpdGEgbWVudXJ1bmthbiAkXGJldGEkIChtaXNhbG55YSwgbWVuaW5na2F0a2FuIHVrdXJhbiBzYW1wZWwgYXRhdSBtZW5pbmdrYXRrYW4ga2VrdWF0YW4gdWppKSwgbWFrYSAkXGFscGhhJCBjZW5kZXJ1bmcgbWVuaW5na2F0Lg0KICAgIA0KIyMgKio0LiBDb250b2ggUGVyaGl0dW5nYW4qKg0KTWlzYWxueWEsIGtpdGEgaW5naW4gbWVsYWt1a2FuIHVqaSBoaXBvdGVzaXMgdW50dWsgbWVtYmFuZGluZ2thbiByYXRhLXJhdGEgZHVhIGtlbG9tcG9rIG1lbmdndW5ha2FuIHVqaSB0LiBLaXRhIHRhaHUgYmFod2EgdWt1cmFuIHNhbXBlbCAkKG4pJCBhZGFsYWggJDMwJCwgcmF0YS1yYXRhIHlhbmcgZGloYXJhcGthbiAkKEhfMSkkIGFkYWxhaCAkNTIkLCBkYW4gcmF0YS1yYXRhIHlhbmcgZGlhc3Vtc2lrYW4gdW50dWsgJEhfMCQgYWRhbGFoICQ1MCQgLiBEZXZpYXNpIHN0YW5kYXIgcG9wdWxzYWkgYWRhbGFoICQxMCQuDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgSW5zdGFsbCBkYW4gbG9hZCBwYWNrYWdlIHBsb3RseQ0KaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCmxpYnJhcnkocGxvdGx5KQ0KDQojIE1lbmV0YXBrYW4gcGFyYW1ldGVyIHVqaSBoaXBvdGVzaXMNCmFscGhhIDwtIDAuMDUgICAgICMgdGluZ2thdCBzaWduaWZpa2Fuc2kNCm11XzAgPC0gNTAgICAgICAgICMgcmF0YS1yYXRhIGhpcG90ZXNpcyBub2wgKEgwKQ0KbXVfMSA8LSA1MiAgICAgICAgIyByYXRhLXJhdGEgaGlwb3Rlc2lzIGFsdGVybmF0aWYgKEgxKQ0Kc2lnbWEgPC0gMTAgICAgICAgIyBkZXZpYXNpIHN0YW5kYXIgcG9wdWxhc2kNCm4gPC0gMzAgICAgICAgICAgICMgdWt1cmFuIHNhbXBlbA0KDQojIEZ1bmdzaSB1bnR1ayBtZW5naGl0dW5nIFBvd2VyIGRhcmkgbmlsYWkgYWxwaGEgZGFuIGJldGENCmNhbGN1bGF0ZV9wb3dlciA8LSBmdW5jdGlvbihhbHBoYSwgbXVfMCwgbXVfMSwgc2lnbWEsIG4pIHsNCiAgel9hbHBoYSA8LSBxbm9ybSgxIC0gYWxwaGEpICAjIEJhdGFzIGtyaXRpcyBiZXJkYXNhcmthbiBhbHBoYQ0KICB6X2JldGEgPC0gKG11XzAgLSBtdV8xKSAvIChzaWdtYSAvIHNxcnQobikpICAjIE5pbGFpIHogdW50dWsgQmV0YSAoa2VzYWxhaGFuIHRpcGUgSUkpDQogIHBvd2VyIDwtIDEgLSBwbm9ybSh6X2FscGhhIC0gel9iZXRhKSAgIyBQb3dlciAoMSAtIEJldGEpDQogIHJldHVybihwb3dlcikNCn0NCg0KIyBNZW55aWFwa2FuIGdyaWQgbmlsYWkgYWxwaGEgZGFuIG11XzEgdW50dWsgdmlzdWFsaXNhc2kgM0QNCmFscGhhX3ZhbHMgPC0gc2VxKDAuMDEsIDAuMSwgYnkgPSAwLjAxKQ0KbXVfMV92YWxzIDwtIHNlcSg1MCwgNjAsIGJ5ID0gMSkNCnBvd2VyX3ZhbHMgPC0gbWF0cml4KE5BLCBucm93ID0gbGVuZ3RoKGFscGhhX3ZhbHMpLCBuY29sID0gbGVuZ3RoKG11XzFfdmFscykpDQoNCiMgTWVuZ2hpdHVuZyBQb3dlciB1bnR1ayBiZXJiYWdhaSBrb21iaW5hc2kgYWxwaGEgZGFuIG11XzENCmZvciAoaSBpbiAxOmxlbmd0aChhbHBoYV92YWxzKSkgew0KICBmb3IgKGogaW4gMTpsZW5ndGgobXVfMV92YWxzKSkgew0KICAgIHBvd2VyX3ZhbHNbaSwgal0gPC0gY2FsY3VsYXRlX3Bvd2VyKGFscGhhX3ZhbHNbaV0sIG11XzAsIG11XzFfdmFsc1tqXSwgc2lnbWEsIG4pDQogIH0NCn0NCg0KIyBNZW1idWF0IHBsb3QgM0QgbWVuZ2d1bmFrYW4gcGxvdGx5DQpmaWcgPC0gcGxvdF9seSh4ID0gcmVwKGFscGhhX3ZhbHMsIGVhY2ggPSBsZW5ndGgobXVfMV92YWxzKSksDQogICAgICAgICAgICAgICB5ID0gcmVwKG11XzFfdmFscywgdGltZXMgPSBsZW5ndGgoYWxwaGFfdmFscykpLA0KICAgICAgICAgICAgICAgeiA9IGFzLnZlY3Rvcihwb3dlcl92YWxzKSwNCiAgICAgICAgICAgICAgIHR5cGUgPSAic2NhdHRlcjNkIiwNCiAgICAgICAgICAgICAgIG1vZGUgPSAibWFya2VycyIsDQogICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KHNpemUgPSA1LCBjb2xvciA9IGFzLnZlY3Rvcihwb3dlcl92YWxzKSwgY29sb3JzY2FsZSA9ICJWaXJpZGlzIikpDQoNCiMgTWVuYW1iYWhrYW4gbGF5b3V0IGRhbiBqdWR1bA0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KHNjZW5lID0gbGlzdCh4YXhpcyA9IGxpc3QodGl0bGUgPSAiQWxwaGEgKM6xKSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAibXVfMSAoSGlwb3Rlc2lzIEFsdGVybmF0aWYpIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpheGlzID0gbGlzdCh0aXRsZSA9ICJQb3dlciBkYXJpIFVqaSIpKSwNCiAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSAzRCBQb3dlciBkYXJpIFVqaSBIaXBvdGVzaXMiKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCmZpZw0KYGBgDQoNCiMgKipLZXNpbXB1bGFuIFNvYWwgMioqDQoNCi0gKipBbHBoYSoqICQoXGFscGhhKSQgbWVuZ3VrdXIgKipwcm9iYWJpbGl0YXMga2VzYWxhaGFuIHRpcGUgSSoqLCB5YWl0dSBrZXNhbGFoYW4gZGFsYW0gbWVub2xhayAkSF8wJCB5YW5nIGJlbmFyLg0KLSAqKkJldGEqKiAkKFxiZXRhKSQgbWVuZ3VrdXIgKipwcm9iYWJpbGl0YXMga2VzYWxhaGFuIHRpcGUgSUkqKiwgeWFpdHUga2VzYWxhaGFuIGRhbGFtIGdhZ2FsIG1lbm9sYWsgJEhfMCQgeWFuZyBzYWxhaC4NCi0gKipQb3dlcioqIGFkYWxhaCAqKmtlbWFtcHVhbiB1amkgdW50dWsgbWVuZGV0ZWtzaSBlZmVrIHlhbmcgYWRhKiogKGtlYmFsaWthbiBkYXJpICRcYmV0YSQpLg0KLSBUcmFkZS1vZmYgYW50YXJhICRcYWxwaGEkIGRhbiAkXGJldGEkIG1lbnVuanVra2FuIGJhaHdhIG1lbWlsaWggdGluZ2thdCBzaWduaWZpa2FuIHlhbmcgbGViaWggcmVuZGFoIGRhcGF0IG1lbmluZ2thdGthbiBrZW11bmdraW5hbiBrZXNhbGFoYW4gdGlwZSBJSSAkKFxiZXRhKSQsIHNlbWVudGFyYSBtZW5pbmdrYXRrYW4gdWt1cmFuIHNhbXBlbCBhdGF1IHBvd2VyIGRhcGF0IG1lbmd1cmFuZ2kgcmlzaWtvIGtlc2FsYWhhbiB0aXBlIElJIGRhbiBtZW5pbmdrYXRrYW4ga2VrdWF0YW4gZGV0ZWtzaS4NCg0KRGVuZ2FuIHBlbWFoYW1hbiBpbmksIGRhcGF0IG1lcmFuY2FuZyB1amkgaGlwb3Rlc2lzIGRlbmdhbiBsZWJpaCBiYWlrIGRhbiBtZW1haGFtaSBiYWdhaW1hbmEgdHJhZGUtb2ZmIGFudGFyYSAkXGFscGhhJCBkYW4gJFxiZXRhJCBtZW1wZW5nYXJ1aGkgaGFzaWwgdWppIGRhbiBpbnRlcnByZXRhc2lueWEuDQoNCg0KIyAqKlNvYWwgMy4gS2FwYW4ga2l0YSBtZW5nZ3VuYWthbiBQZXNpbWlzIGRhbiBPcHRpbWlzKioNCkRhbGFtICoqU3RhdGlzdGlrYSoqLCBwZW5kZWthdGFuICoqcGVzaW1pcyoqIGRhbiAqKm9wdGltaXMqKiBkaWd1bmFrYW4gZGFsYW0gKiphbmFsaXNpcyBrZXB1dHVzYW4qKiBhdGF1ICoqaW5mZXJlbnNpIHN0YXRpc3RpayoqDQoNCiMgKipBLiBQZW5kZWthdGFuIFBlc2ltaXMgZGFsYW0gU3RhdGlzdGlhKioNClBlbmRla2F0YW4gcGVzaW1pcyBkYWxhbSBzdGF0aXN0aWthIHNlcmluZyBkaWd1bmFrYW4gc2FhdCBmb2t1c255YSBhZGFsYWggKiptZW5nYW50aXNpcGFzaSByaXNpa28gdGVyYnVydWsqKi4gQ29udG9obnlhOg0KDQojIyAqKkFwbGlrYXNpKio6DQoNCioqMS4gQW5hbGlzaXMgUmlzaXNrbyoqDQoNCkRhbGFtICoqU3RhdGlzdGlrYSBpbmZlcmVuc2lhbCoqLCBwZW5kZWthdGFuIHBlc2ltaXMgZGlndW5ha2FuIHVudHVrIG1lbmVudHVrYW4gYmF0YXMgYmF3YWggc3VhdHUgZXN0aW1hc2kgKGxvd3dlciBib3VuZCkuIE1pc2FsbnlhOg0KDQotIERhbGFtIGludGVydmFsIGtlcGVyY2F5YWFuLCBwZW5kZWthdGFuIHBlc2ltaXMgbGViaWggbWVtcGVyaGF0aWthbiBiYXRhcyBiYXdhaCB1bnR1ayBtZW1hc3Rpa2FuIGhhc2lsIHRpZGFrIGxlYmloIGJ1cnVrIGRhcmkgaXR1Lg0KLSBEYWxhbSBhbmFsaXNpcyByaXNpa28ga2V1YW5nYW4sIGRpZ3VuYWthbiB1bnR1ayBtZW5naGl0dW5nICoqVmFsdWUgYXQgUmlzayAoVmFSKSoqLCB5YWl0dSBrZXJ1Z2lhbiBtYWtzaW11bSBwYWRhIHRpbmdrYXQga2VwZXJjYXlhYW4gdGVydGVudHUuDQoNCioqMi4gSGlwb3Rlc2lzIE5vbCAoTnVsbCBIeXBvdGhlc2lzcykqKg0KDQpTYWF0IG1lbmd1amkgaGlwb3Rlc2lzLCBwZW5kZWthdGFuIHBlc2ltaXMgYmlzYW55YSBtZW5kdWt1bmcgaGlwb3Rlc2lzIG5vbCAkKEhfMCkkLCAga2FyZW5hIGluaSBhZGFsYWggYXN1bXNpIGRhc2FyIGJhaHdhICoqIHRpZGFrIGFkYSBlZmVrIGF0YXUgaHVidW5nYW4qKi4gUGVub2xha2FuICRIXzAkICBoYW55YSBkaWxha3VrYW4gamlrYSBhZGEgY3VrdXAgYnVrdGkga3VhdCwgdW50dWsgbWVuZ2hpbmRhcmkga2VzYWxhaGFuIHRpcGUgSSAoZmFsc2UgcG9zaXRpdmUpLg0KDQoqKjMuIEtlcHV0dXNhbiBLb25zZXJ2YXRpZioqDQoNClBlbmRla2F0YW4gaW5pIGRpYW1iaWwga2V0aWthIHNlb3JhbmcgYW5hbGlzIGxlYmloIG1lbWlsaWggKiptZW1pbmltYWxrYW4ga2VzYWxhaGFuKiogIGRhcmlwYWRhIG1lbmdhbWJpbCByaXNpa28sIG1pc2FsbnlhIHNhYXQgbWVyYW5jYW5nIHNpc3RlbSB5YW5nIGhhcnVzIGJlcm9wZXJhc2kgcGFkYSBrb25kaXNpIHRlcmJ1cnVrLg0KDQojIyAqKkNvbnRvaCoqOg0KRGFsYW0gdWppIHQsIGppa2Ega2l0YSBpbmdpbiBtZW5ldGFwa2FuIGJhdGFzIHRvbGVyYW5zaSByZW5kYWggdW50dWsgbWVuZGV0ZWtzaSBwZXJiZWRhYW4gcmF0YS1yYXRhLCBraXRhIG1lbmdndW5ha2FuIHBlbmRla2F0YW4ga29uc2VydmF0aWYgdW50dWsgbWVtYXN0aWthbiB0aWRhayBtZWxld2F0a2FuIHJpc2lrbyBwZW50aW5nLg0KDQoNCiMgKipCLiBQZW5kZWthdGFuIE9wdGltaXMgZGFsYW0gU3RhdGlzdGlrYSoqDQpQZW5kZWthdGFuIG9wdGltaXMgc2VyaW5nIGRpZ3VuYWthbiBzYWF0IGZva3VzbnlhIGFkYWxhaCAqKm1lbWFrc2ltYWxrYW4gcGVsdWFuZyoqIGF0YXUgKiptZW5nYXN1bXNpa2FuIHNrZW5hcmlvIHRlcmJhaWsqKi4NCg0KIyMgKipBcGxpa2FzaSoqOg0KDQoqKjEuIEVzdGltYXNpIE1ha3NpbXVtIChVcHBlciBCb3VuZCkqKg0KDQpEYWxhbSBpbnRlcnZhbCBrZXBlcmNheWFhbiBhdGF1IGFuYWxpc2lzIHJpc2lrbywgcGVuZGVrYXRhbiBvcHRpbWlzIGxlYmloIG1lbXBlcmhhdGlrYW4gYmF0YXMgYXRhcyAodXBwZXIgYm91bmQpIHVudHVrIG1lbGloYXQgcG90ZW5zaSB0ZXJiYWlrIGRhcmkgc3VhdHUgZXN0aW1hc2kuDQoNCioqMi4gUGVyYW5jYW5hYW4gQmVyZGFzYXJrYW4gVHJlbiBQb3NpdGlmKioNCg0KRGFsYW0gYW5hbGlzaXMgZGF0YSB0cmVuLCBwZW5kZWthdGFuIG9wdGltaXMgbWVuZ2FzdW1zaWthbiBiYWh3YSBwb2xhIGRhdGEgc2FhdCBpbmkgKHNlcGVydGkgcGVydHVtYnVoYW4gYXRhdSBwZW5ndXJhbmdhbikgYWthbiBiZXJsYW5qdXQga2UgbWFzYSBkZXBhbi4NCg0KKiozLiBIaXBvdGVzaXMgQWx0ZXJuYXRpZiAoQWx0ZXJuYXRpdmUgSHlwb3RoZXNpcykqKg0KDQpLZXRpa2Egc2VvcmFuZyBhbmFsaXMgeWFraW4gYmFod2EgYWRhIGh1YnVuZ2FuIHlhbmcgc2lnbmlmaWthbiwgcGVuZGVrYXRhbiBvcHRpbWlzIG1lbmR1a3VuZyBoaXBvdGVzaXMgYWx0ZXJuYXRpZiAoSOKCgSksIHlhbmcgbWVueWF0YWthbiBiYWh3YSBhZGEgZWZlayBhdGF1IGh1YnVuZ2FuLg0KDQojIyAqKkNvbnRvaCoqOg0KRGFsYW0gYW5hbGlzaXMgcmVncmVzaSwgcGVuZGVrYXRhbiBvcHRpbWlzIG11bmdraW4gbWVuZ2FzdW1zaWthbiBiYWh3YSBodWJ1bmdhbiB2YXJpYWJlbCBpbmRlcGVuZGVuIGRhbiBkZXBlbmRlbiBha2FuIHRlcnVzIGxpbmllciBtZXNraXB1biBhZGEgc2VkaWtpdCBkZXZpYXNpIHBhZGEgZGF0YSBoaXN0b3Jpcy4NCg0KDQojICoqQy4gUGVuZGVrYXRhbiBLb21iaW5hc2kgZGFsYW0gU3RhdGlzdGlrYSoqDQpEYWxhbSBiYW55YWsga2FzdXMsIHBlbmRla2F0YW4gcGVzaW1pcyBkYW4gb3B0aW1pcyBkaWd1bmFrYW4gYmVyc2FtYSB1bnR1ayBtZW5kYXBhdGthbiBhbmFsaXNpcyByZWFsaXN0aXMsIG1pc2FsbnlhIGRhbGFtOg0KDQojIyAqKjEuIEFuYWxpc2lzIFNrZW5hcmlvIChTY2VuYXJpbyBBbmFseXNpcykqKg0KTWVuZ2d1bmFrYW4gbmlsYWkgcGVzaW1pcywgb3B0aW1pcywgZGFuIHJlYWxpc3RpcyB1bnR1ayBtZW1wcm95ZWtzaWthbiBiZXJiYWdhaSBrZW11bmdraW5hbiBoYXNpbC4NCg0KLSAqKkNvbnRvaCoqOiAgRGFsYW0gcGVyYW1hbGFuIHBlbmp1YWxhbiwgcGVuZGVrYXRhbiBvcHRpbWlzIG1lbmdndW5ha2FuIGVzdGltYXNpIHBlcnR1bWJ1aGFuIHRlcnRpbmdnaSwgc2VtZW50YXJhIHBlbmRla2F0YW4gcGVzaW1pcyBtZW5nZ3VuYWthbiBwZXJ0dW1idWhhbiB0ZXJlbmRhaC4NCg0KIyMgKioyLiBJbnRlcnZhbCBQcmVkaWthaSoqDQpQZW5kZWthdGFuIGluaSBtZW5jYWt1cCBrZWR1YSBzaXNpIChwZXNpbWlzIGRhbiBvcHRpbWlzKSwgbWlzYWxueWEgaW50ZXJ2YWwga2VwZXJjYXlhYW4gJDk1JCUgeWFuZyBtZW51bmp1a2thbiBiYXRhcyBiYXdhaCAocGVzaW1pcykgZGFuIGJhdGFzIGF0YXMgKG9wdGltaXMpIGVzdGltYXNpLg0KDQojIyAqKjMuIFVqaSBTdGF0aXN0aWsgZGVuZ2FuIE5pbGFpIEtyaXRpa2FsKioNCk5pbGFpIGtyaXRpcyAoY3JpdGljYWwgdmFsdWUpIGRpZ3VuYWthbiB1bnR1ayBtZW5kZWZpbmlzaWthbiBiYXRhcyBvcHRpbWlzIChkaXRlcmltYSkgZGFuIHBlc2ltaXMgKGRpdG9sYWspIHBhZGEgdWppIGhpcG90ZXNpcy4NCg0KIyAqKktlc2ltcHVsYW4gU29hbCAzKio6DQoNCi0gR3VuYWthbiAqKnBlbmRla2F0YW4gcGVzaW1pcyoqIHNhYXQgaW5naW4gbWVtaW5pbWFsa2FuIHJpc2lrbyBrZXNhbGFoYW4gYXRhdSBtZW1wZXJzaWFwa2FuIHNrZW5hcmlvIHRlcmJ1cnVrLg0KLSBHdW5ha2FuICoqcGVuZGVrYXRhbiBvcHRpbWlzKiogc2FhdCBmb2t1cyBwYWRhIHBlbHVhbmcgdGVyYmFpayBhdGF1IG1lbmdla3NwbG9yYXNpIHNrZW5hcmlvIHBvc2l0aWYuDQotIEtvbWJpbmFzaWthbiBrZWR1YW55YSB1bnR1ayBtZW5kYXBhdGthbiBnYW1iYXJhbiB5YW5nIHNlaW1iYW5nLCBtaXNhbG55YSBtZWxhbHVpIGFuYWxpc2lzIHNrZW5hcmlvIGF0YXUgaW50ZXJ2YWwgcHJlZGlrc2kuDQoNCiMgKipSZWZyZW5zaSoqOg0KLSBEU2NpZW5jZWxhYnMuIChuLmQuKSBQZW5nYW50YXIgU3RhdGlzdGlrYSB1bnR1ayBTYWlucyBEYXRhLiBCb29rZG93bi4gUmV0cmlldmVkIGZyb20gPGEgaHJlZiA9ICJodHRwczovL2Jvb2tkb3duLm9yZy9kc2NpZW5jZWxhYnMvc3RhdGlzdGlrYV9kYXNhci9fYm9vay8iID4gS2xpayBkaXNpbmk8L2E+DQotIEdyYWNpYSBDYXJvbGluYSAyMDIyIFN0YXRpc3Rpa2EgRGVza3JpcHRpZi4gQm9va2Rvd24uICBSZXRyaWV2ZWQgZnJvbSA8YSBocmVmID0gImh0dHBzOi8vd3d3Lnplbml1cy5uZXQvYmxvZy9zdGF0aXN0aWthLWRlc2tBcmlwdGlmIiA+IEtsaWsgZGlzaW5pPC9hPg0KLSBBcmlmIE11a3RpIFJhbWFkaGFuIHN0YXRpc3Rpa2EgSW5mZXJlbnNpYWwuIEJvb2tkb3duLiBSZXRyaWV2ZWQgZnJvbSA8YSBocmVmID0gImh0dHBzOi8vZWJpem1hcmsuaWQvYXJ0aWtlbC9zdGF0aXN0aWthLWluZmVyZW5zaWFsLXBlbmdlcnRpYW4tZnVuZ3NpLWplbmlzLWRhbi1jb250b2gvP3Nyc2x0aWQ9QWZtQk9vcmFnS19WeW1UNXNfa3VVdUtBc3M3clM4UmxmbUN4cGQ2YmhhYThfVDR2WlNYWW5rSEwiID4gS2xpayBkaXNpbmk8L2E+DQotIEpva28gQWRlIE51cnN5aW9ubyBTdGF0aXN0aWthOiBNZW5nZW5hbCBBbHBoYSBCZXRhLiBCb29rZG93bi4gUmV0cmlldmVkIGZyb20gPGEgaHJlZiA9ICJodHRwczovL3d3dy5rb21wYXNpYW5hLmNvbS9qb2tvYWRlLzU0ZjY3ZTA4YTMzMzExOTExNzhiNGJlMS9zdGF0aXN0aWthLW1lbmdlbmFsLWFscGhhLWRhbi1iZXRhLWRhbGFtLW1lbXV0dXNrYW4tcGVya2FyYSIgPiBLbGlrIGRpc2luaTwvYT4NCg0KDQo=