
Ukuran Penyebaran Data
Definisi Ukuran Penyebaran Data -> Iyalah suatu
konsep dalam statistika yang menggambarkan sejauh mana nilai-nilai dalam
suatau dataset tersebar atau bervariasi dari nilai pusat (misalnya
rata-rata, median). Ukuran ini memberikan informasi tentang distribusi
data, membantu mengidentifikasi tingkat kehomogenan atau keheterogenan
data, serta mendeteksi keberadaan outlier.
A. Jangkauan (Range)
1. Definisi Jangkauan (Range)
adalah suatau ukuran penyebaran data yang paling sederhana, yang
menunjukkan selisih antara nilai maksimum dan nilai minimum dalam suatu
dataset. Jangkauan memberikan gambaran kasar tentang rentang distribusi
data.
2. Rumus:
\[
\text{Range} = \text{Nilai Maksimum} - \text{Nilai Minimum}
\] Contoh:
Jika sebuah dataset memiliki nilai: \(3, 7,
8, 15, 22\)
- Nilai maksimum = \(22\)
- Nilai minimum = \(3\)
Maka, jangkauan (range) adalah: \[
\text{Range} = 22 - 3 = 19
\]
3. Kelebihan:
- Mudah dihitung
- Memberikan informasi dasar tentang rentang distribusi data.
4. Kekurangan:
- Tidak memperhitungkan distribusi data di antara nilai-nilai
tersebut.
- Sangat sensitif terhadap outlier (nilai ekstrem).
Jangkauan biasanya digunakan sebagai langkah awal untuk memahami
sebaran data sebelum menggunakan ukuran penyebaran lainnya yang lebih
kompleks, seperti varians atay standar deviasi.
B. Jangkauan Antar Kuartil (IQR)
1. Definisi IQR
Jangkauan Antar Kuartil adalah ukuran penyebaran data yang
menggambarkan rentang antara kuartil ketiga\((Q3)\) dan kuartil pertama \((Q1)\). IQR menunjukan rentang nilai tengah
dari dataset, yaitu data yang berada di antara 25% hingga 75%
distribusi.
2. Rumus:
\[
\text{IQR} = Q_3 - Q_1
\]
- \(Q1\) (Kuartil
Pertama): Nilai yang memisahkan 25% data terkecil dari
sisanya.
- $Q3 (Kuartil Ketiga): Nilai yang memisahkan 25%
data terbessar dari sisanya.
3. Contoh:
Jika sebuah dataset memiliki nilai: \[
5, 7, 8, 12, 15, 18, 20
\]
- Urutkan data.
- Tentukan \(Q1\) (kuartil pertama):
Median dari setengah data pertama \((5, 7,
8)\) adalah \(7\).
- Tentukan \(Q3\) (kuartil ketiga):
Median dari setengah data kedua \((15, 18,
20)\) adalah \(18\).
- Hitung IQR: \[
IQR = Q3 - Q1 = 18 - 7 = 11
\]
4. Fungsi IQR:
- Mengukur konsentrasi nilai tengah dalam dataset.
- Membantu mengidentifikasi outlier: data yang jauh dari luar rentang
\[
Q_1 - 1.5 \times \text{IQR} \quad \text{atau} \quad Q_3 + 1.5 \times
\text{IQR} \quad \text{dianggap sebagai outlier.}
\]
IQR lebih stabil terhadap outlier dibandingkan jangkauan (range)
karena hanya mengggunakan nilai tengah distribusi data.
C. Varians
1. Definisi Varians
Varians adalah ukuran penyebaran data yang menunjukan sejauh mana
nilai-nilai dalam dataset tersebar atau berbeda dari nilai rata-rata
(mean). Varians mengukur rata-rata kuadrat deviasi (selisih) setiap
nilai data terhadap nilai rata-rata.
2. Rumus Varians:
Untuk dataset dnegan \(n\) data,
varians dihitung dengan rumus:
Varians untuk populasi: \[
\sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2
\] Di mana:
\(\sigma^2\) adalah varians
populasi.
\(N\) adalah jumlah data dalam
populasi.
\(X_i\) adalah nilai individual
dalam data.
\(\mu\) adalah rata-rata
populasi.
Untuk sampel, varians dirumuskan sebagai: \[
s^2 = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})^2
\]
3. Interpretasi:
- Varians tinggi menunjukan bahwa data memiliki
penyebaran yang besar (data lebih jauh dari rata-rata).
- Varians rendahmenunjukkan bahwa data lebih
terkonsentrasi di sekitar rata-rata.
4. Contoh
Jika data \[
[2, 4, 6, 8]:
\]
- Hitung rata-rata: \[
\bar{X} = \frac{2 + 4 + 6 + 8}{4} = 5
\]
- Hitung selsih kuadrat setiap data dari rata-rata: \[
(2 - 5)^2, (4 - 5)^2, (6 - 5)^2, (8 - 5)^2 \implies 9, 1, 1, 9
\]
- Hitung rata-rata selisih kuadrat tersebut:
- Jika populasi: \[ \frac{9 + 1 + 1 + 9}{4}
= 5 \]
- Jika sampel: \[ \frac{9 + 1 + 1 + 9}{3} =
6.67\]
Varians digunakan dalam berbagai bidang, termasuk statistik, ekonomi,
dan machine learning,untuk mengukur penyebaran data.
D. Standar Deviasi
1. Definisi Standar Deviasi
Standar Deviasi adalah ukuran statistik yang menunjukkan seberapa
tersebar atau bervariasinya data dari nilai rata-rata (mean) dalam suatu
distribusi. Standar deviasi memberikan gambaran seberapa jauh setiap
data dalam kumpulan tersebut dari nilai rata-rata.
2. Definisi Matematika:
Standar deviasi dihitung dengan rumus: \[
sigma = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (x_i - \mu)^2}
\]
Penjelasan Komponen:
- \(\sigma\): Standar deviasi.
- \(X_i\): Setiap nilai dalam
kumpulan data.
- \(\mu\): Rata-rata dari seluruh
data. \(n\): Jumlah data.
3. Fungsi Standar Deviasi:
- Mengukur Variabilitas data: Semakin kecil standar
deviasi, semakin dekat data dengan rata-rata, dan sebaliknya.
- Membantu dalam Analisis risiko atau
Variabilitas hasil, misalnya dalam keuangan dan
statistik.
- Memahami Penyebaran data dalam suatu distribusi
normal.
Jenis Standar Deviasi: 1. Populasi
digunakan saat seluruh populasi data diketahui. [
= ] 2. Sampel digunakan saat hanya sebagian data
(sampel) yang dianalisis. \[
s = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2}
\]
4. Contoh:
Misalkan kumpulan data adalah: \(2, 4, 6,
8, 10\).
- Hitung rata-rata \((\mu)\): \((2 + 4 + 6 + 8 + 10)/ 5 = 6\)
- Hitung selisih setiap data dari rata-rata, kuadratkan, lalu cari
rata-rata kuadrat tersebut.
- Ambil akar kaudrat dari rata-rata kuadrat.
Dengan hasilnya, Anda mengetahui bagaimana data menyebar dari
rata-rata.
E. Koefisien Variasi
1. Definisi Koefisien
Koefisien Variasi (CV) adalah statistik yang menunjukkan tingkat
variasi dalam suatu datset relatif terhadap rata-rata dataset tersebut.
CV digunakan untuk membandingkan variasi data antar grup atau dataset
yang memiliki satuan atau skala yang berbeda.
2. Rumus Koefisien Varisi:
\[
CV = \left( \frac{\sigma}{\mu} \right) \times 100
\] Di mana:
- \(\sigma\) = Simpangan baku
(standar deviasi).
- \(\mu\) = Rata-rata (mean).
- \(CV\) = Koefisien variasi dalam
bentuk presentase.
3. Penjelasan Elemen dalam Rumus
- Simpangan Baku (Standard Deviation) : Simpangan
baku \(\sigma\) mengukur seberapa besar
data terbesar dari rata-rata. Semakin besar simpangan baku, semakin
besar penyebaran data.
- Rata-rata (Mean): Rata-rata \(\mu\) adalah nilai pusat dari data, yang
dihitung dengan menjumlahkan semua nilai data dan membaginya dengan
jumlah data.
- Koefisien Variasi (CV): CV memberikan gambaran
tentang tingkat variasi data relatif terhadap rata-rata, lalu mengalikan
hasil pembagian simpangan baku dengan rata-rata, lalu mengalikannya
dengan \(100\), kita memperoleh
persentase variasi yang lebih mudah dibandingkan dengan satuan asli
data.
4. Interpretasi Koefisien Variasi
- CV rendah: Jika relatif rendah, itu menunjukkan
bahwa data lebih terkonsentrasi di sekitar rata-rata. Variasi dalam data
kecil dibandingkan dengan rata-rata. _ CV tinggi: Jika
CV tinggi, itu menunjukkan bahwa data lebih tersebar. Variasi dalam data
besar dibandingkan dengan rata-rata.
5. Contoh Penggunan koefisien Variasi
Misalkan ada dua kolompok siswa yang mengikuti ujian matematika:
- Kelompok A memiliki rata-rata nilai \(80\) dan simpangan baku \(5\).
- Kelompok B memiliki rata-rata nilai \(90\) dan simpangan baku \(10\).
Menghitung CV untuk kedua kelompok:
- Kelompok A \[
CV_A = \left( \frac{5}{80} \right) \times 100 = 6.25\%
\]
- Kelompok B \[
CV_B = \left(\frac{10}{90}\right) \times 100 = 11.11%
\]
Dari perhitungan di atas, meskipun kelompok B memiliki rata-rata yang
lebih tinggi, variasi (atau sebaran) nilai dalam kelompok B lebih besar,
sebagaimana ditunjukkan oleh nilai CV yang lebih tinggi.
F. Rentang Semi-Interkuartil
1. Definisi Rentang Semi-Interkuartil
Rentang Semi-Interkuartil adalah salah satu jenis rentang dalam
analisis statistik yang digunakan untuk mengukur variabilitas atau
penyebaran data. Rentang ini dihitung dengan cara mengurangi nilar
kuartil pertama \((Q1)\) dari nilai
kuartil ketiga \((Q3)\). Dengan kata
lain, rentang semi-interkuartil (atau disebut juga interquartile
range / IQR) menggambarkan sebaran data pada 50% tengah dari
kumpulan data yang telah diurutkan.
2. Rumus Rentang Semi-Interkuaril (IQR)
Rentang Semi-Interkuartil dihitung menggunakan rumus: \[
IQR = Q_3 - Q_1
\]
Di mana:
- \(Q1\) = Kuartil ketiga (nilai pada
posisi ke 75% data)
- \(Q1\) = Kuartil pertama (nilai
pada posisi ke 25% data)
3. Langkah-langkah Menghitung Rentang Semi-Interkuartil
(IQR)
Untuk menghitung IQR, berikut adalah langkah-langkah dilakukan:
Langkah 1: Urutkan Data
Langkah pertama yaitu mengurutkan data dalam urutan menaik (dari yang
terkecil hingga terbesar). Contoh data: \(3,7,8,12,14,18,19,21,22,30\)
Langkah 2: Tentukan Kuartil Pertama (Q1)
Kuartil pertama (Q1) adalah median dari data bagian bawah (nilai yang
terletak di bawah median keseluruhan). Data ini dibagi menjadi dua
bagian, dan Q1 adalah median dari bagian yang lebih kecil.
Langkah 3: Tentukan Kuartil (Q3)
Kuartil ketiga (Q3) adalah median dari data bagian atas (nilai yang
terletak di atas median keseluruhan). Data ini dibagi menjadi dua
bagian, dan Q3 adalah median dari bagian yang lebih besar.
Langakh 4: Hitung IQR
Setelah menemukan nilai Q1 dan Q3, IQR dapat dihitung dengan
mengurangkan Q1 dari Q3: \[
IQR = Q_3 - Q_1
\]
4. Contoh Perhitungan IQR
Misalkan kita memiliki data berikut yang sudah diurutkan: \(1,4,7,9,12,15,18,20,25,30\)
- Median (Q2): Nilai tengah dari data adalah \(12\) (nilai pada posisi \(5\) dan \(6\)).
- Kuartil pertama (Q1): Median dari \(1, 4, 7, 9, 12\) adalah \(7\)
- Kuartil ketiga (Q3): Meidan dari \(15, 18, 20, 25, 30\) adalah \(20\).
Jadi, perhitungan IQR adalah: \[
IQR = Q3 - Q1 = 20 - 7 = 13
\]
Latihan 1
Sebuah perusahaan ingin memahami karakteristik penyebaran data hasil
penjualan dari empat cabang (A, B, C, dan D) selama satu bulan terakhir.
Data penjualan (dalam juta rupiah) dari keempat cabang tersebut adalah
sebagai berikut:
- Cabang A: 50, 55, 60, 65, 70
- Cabang B: 40, 50, 60, 70, 80
- Cabang C: 30, 30, 35, 40, 45
- Cabang D: 70, 75, 80, 85, 90
Soal 2. Cabang mana yang memiliki penyebaran data paling
kecil? Jelaskan alasannya.
Cabang yang memiliki penyebaran data paling kecil
adalah Cabang C, karena standar
deviasi dari data penjualan Cabang C adalah yang paling rendah,
yaitu \(5,83\) juta
Penjelasan:
1. Standar deviasi
Standar deviasi adalah ukuran statistik yang menggambarkan seberapa
tersebar data terhadap rata-rata. Semakin kecil nilai standar deviasi,
semakin dekat data terhadap rata-rata, yang berarti penyebaran data
lebih kecil.
2. Perbandingan standar deviasi antar cabang:
- Cabang A = 7,07 juta
- Cabang B = 14,14 juta
- Cabang C = 5,83 juta (paling kecil)
- Cabang D = 7,07 juta
3. Interpretasi untuk Cabang C:
- Data penjualan Cabang C lebih seragam atau konsisten dibandingkan
cabang lainnya.
- Rentang data di Cabang C juga lebih sempit \((30\) hingga \(45)\)
4. Kesimpulannya:
Cabang C memiliki penyebaran data paling kecil karena data mereka
lebih seragam, dan nilai standar deviasinya adalah yang terendah di
antara semua cabang.**
Soal 3. Jika target penjualan minimum adalah 50 juta rupiah,
cabang mana saja yang gagal mencapai target di semua
datanya?
Cabang yang gagal mencapai target penjualan minimum sebesar 50 juta
rupiah untuk semua datanya adalah Cabang C.
1. Alasan:
- Data penjualan Cabang C: \([30,30,35,40,45]\)
- Seluruh nilai dalam data tersebut kurang dari target 50 juta,
sehingga Cabang C gagal mencapai target di semua
datanya.
2. Pengecekan untuk cabang lain:
- Cabang A: \([50,55,60,65,70]\)
Semua data memenuhi target 50 juta.
- Cabang B: \([40,50,60,70,80]\)
Ada daya yang gagal \((40)\), tetapi
tidak semuanya.
- Cabang D: \([70,75,80,85,90]\)
Semua data memenuhi target 50 juta.
3. Kesimpulan:
Hanya Cabang C yang gagal mencapai target penjualan
50 juta rupiah di semua datanya.
Soal 4. Buatlah diagram kotak (box plot) untuk
memvisualisasikan penyebaran data setiap cabang.
2. Cabang B dalam Boxplot
3. Cabang C dalam Boxplot
4. Cabang D dalam Boxplot
5. Boxplot Cabang A, B, C, dan D
Latihan 2
Perusahaan XYZ mengelola pengeiriman barang ke berbagai wilayah
dengan menggunakan berbagai jenis transportasi. Setiap pengiriman
melibatkan biaya transportasi, waktu yang dibutuhkan, dan jumlah barang
yang dikirim. Berikut adalah data terkait pengriman barang berdasarkan
wilayah dan jenis barang:
Soal 1. Analisis Efisiensi Pengiriman:
- Visualisasikan Pengiriman barang berdasarkan jumlah barang, waktu
pengiriman, dan biaya per unit dengan menggunakan Boxplot 3D.
- Tentukan Wilayah mana yang memiliki efisiensi pengiriman terendah
berdasarkan biaya per unit dan waktu pengiriman.
A. Visualisasi Boxplot 3D
B. Analisis Efisiensi Pengiriman
Berdasarkan data pengiriman barang yang mencakup berbagai wilayah,
jenis barang, waktu pengiriman, dan biaya, kita dapat menganalisis
efisiensi pengiriman dengan cara menghitung biaya per
unit dan waktu pengiriman.
- Penghitungan Biaya Per Unit dan Efisiensi
- Biaya per unit dihitung dengan membagi biaya
pengiriman dengan jumlah unit barang yang dikirim.
- Efisiensi pengiriman dihitung dengan mengalikan
biaya per unit dengan waktu pengiriman (jam). Hal ini memberikan
gambaran tentang berapa banyak biaya yang dikeluarkan untuk setiap unit
barang dalam waktu tertentu.
- Wilayah dengan Efisiensi Pengiriman Terendah
Setelah melakukan perhitungan efisiensi, kita dapat menentukan wilayah
dengan efisiensi pengiriman terendah, yaitu wilayah yang memiliki nilai
biaya per unit dan waktu pengiriman
yang paling rendah.
Berdasarkan perhitungan, wilayah dengan efisiensi pengiriman terendah
adalah Wilayah Tengah dengan nilai efisiensi sebesar 178.2857.
Artinya, pengiriman barang di wilayah Tengah memiliki kombinasi biaya
per unit dan waktu pengiriman yang lebih efisien dibandingkan dengan
wilayah lainnya.
- Kesimpulan
- Wilayah Tengah menunjukkan efisiensi pengiriman
terendah dengan efisiensi sebesar \(178.2857\).
- Visualisasi 3D memberikan gambaran yang jelas tentang pengaruh
jumlah barang, waktu pengiriman, dan biaya per unit terhadap efisiensi
pengiriman di berbagai wilayah.
Dengan informasi ini, perusahaan dapat lebih fokus pada wilayah
Tengah untuk meningkatkan efisiensi pengiriman, baik
dengan mengurangi biaya atau memperpendek waktu pengiriman guna mencapai
performa yang lebih baik dalam pengelolaan logistik.
Soal 2. Rekomendasi Operasional
1. Wilayah yang Memerlukan Perhatian Khusus
- Wilayah Tengah adalah wilayah yang menunjukkan
efisiensi pengiriman terendah. Meskipun biaya per unitnya tidak terlalu
tinggi, waktu pengiriman di wilayah ini cukup panjang (jam) dibandingkan
dengan wilayah lainnya.
- Wilayah ini perlu diperhatikan karena kombinasi biaya dan waktu yang
tinggi dapat mempengaruhi profitabilitas perusahaan serta kepuasan
pelanggan.
- Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di
wilayah tersebut?
2. Rekomendasi untuk Mengurangi Biaya dan Waktu Pengiriman
di Wilayah Tengah
Berdasarkan hasil analisis, beberapa rekomendasi yang dapat
diterapkan untuk mengurangi biaya dan waktu pengiriman di
Wilayah Tengah adalah:
- Optimalkan Rute Pengiriman::
- Melakukan analisis rute pengiriman untuk mengidentifikasi apakah
rute yang digunakan sudah efisien. Penggunaan teknologi seperti sistem
manajemen transportasi (TMS) dapat membantu untuk merencanakan rute
terbaik yang meminimalkan waktu dan biaya.
- Penggunaan kendaraan dengan kapasitas yang lebih sesuai untuk jumlah
barang yang dikirim juga bisa mengurangi waktu dan biaya
pengiriman.
- Peningkatan Pengelolaan Waktu Pengiriman:
- Melakukan perbaikan dalam manajemen logistik untuk mengurangi waktu
tunggu di titik distribusi dan mempercepat proses loading dan unloading
barang.
- Mengoptimalkan jam operasional gudang dan distribusi untuk
mempersingkat waktu pengiriman dari pusat distribusi ke konsumen.
Soal 3. Analisis Kinerja Pengiriman Berdasarkan Jenis Barang
dan Wilayah
Untuk menganalisis kinerja pengiriman berdasarkan jenis barang dan
wilayah, kita akan melihat dua faktor utama: waktu
pengiriman dan biaya per unit.
Tujuan dari analisis ini adalah untuk
mengidentifikasi jenis barang dan wilayah yang memiliki:
- Waktu pengiriman lebih cepet.
- Biaya per unit lebih rendah.
1. Pengelompokan Berdasarkan Jenis Barang dan
Wilayah
Sebelum melakukan analisis lebih lanjut, kita akan membagi data
berdasarkan jenis barang dan wilayah.
Berikut adalah dua metrik utama yang akan dianalisis:
- **Waktu Pengiriman (Jam): Berapa lama waktu yang dibutuhkan untuk
pengiriman.
- Biaya per Unit: Biaya per unit barang yang
dikirim.
2. Wilayah dengan Kinerja Terbaik Berdasarkan Waktu
Pnegiriman dan Biaya per Unit
Dari analisis kinerja pengiriman berdasarkan wilayah, kita dapat
mengidentifikasi wilayah yang menunjukkan pengiriman lebih
cepat dan biaya lebih rendah:
- Wilayah Utara untuk Pakaian dan
Elektronik memiliki biaya per unit yang lebih
rendah dan waktu pengiriman yang lebih cepat
dibandingkan dengan wilayah lainnya.
- Wilayah Timur menunjukkan waktu pengiriman
yang lebih cepat pada Makanan dibandingkan
wilayah lainnya.
3. Kesimpulan
Berdasarkan analisis, kita dapat menyimpulkan bahwa:
- Jenis barang dengan waktu pengiriman lebih cepat: Makanan.
- Jenis barang dengan biaya per unit lebih rendah: Pakaian.
- Wilayah dengan kinerja pengiriman terbaik:
- Wilayah Utara memiliki biaya lebih rendah dan waktu pengiriman lebih
cepat untuk Elektronik dan Pakaian.
- Wilayah Timur memiliki waktu pengiriman yang lebih cepat untuk
Makanan.
Untuk meningkatkan kinerja pengiriman secara keseluruhan, perusahaan
dapat lebih fokus pada Makanan di wilayah Timur yang memiliki waktu
pengiriman yang lebih cepat, serta pada Pakaian di wilayah Utara untuk
mengurangi biaya per unit dan meningkatkan efisiensi.
Kesimpulan AKhir
Penyebaran data menunjukkan perbedaan signifikan dalam efisiensi
pengiriman antar wilayah dan jenis barang. Wilayah Tengah memerlukan
perhatian lebih untuk mengoptimalkan biaya dan waktu pengiriman,
sementara wilayah Utara dan Timur dapat dijadikan model untuk efisiensi
yang lebih baik. Strategi pengelolaan yang disesuaikan dengan pola
penyebaran ini dapat meningkatkan efisiensi operasional perusahaan.
Refrensi
- DSciencelabs. (n.d.) Pengantar Statistika untuk Sains Data.
Bookdown. Retrieved from
Klik disini
- Dr. Anita Rahayu, S.Si., M.Si.Ukuran Penyebaran Data. Binus
University. Bookdown. Retrived from
klik
disini
- Khatib A. Latief.Ukuran Penyebaran Data.UIN. Bookdown. Retrived from
m
Klik disini
LS0tDQp0aXRsZTogIlR1Z2FzIFBlcnRlbXVhbiAxMSINCg0KYXV0aG9yOiANCiAgICAtICJOYWJpbGEgQW5nZ2l0YSBQdXRyaSINCg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIA0KICANCi0tLQ0KPGltZyBzcmM9ImltZy9wcm9maWxlLmpwZyIgYWx0PSJwcm9maWxlIiBpZD0ibG9nby11dGFtYSIgc3R5bGU9IndpZHRoOjMwMHB4OyBheTogZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiLz4NCg0KDQoNCg0KIyBVa3VyYW4gUGVueWViYXJhbiBEYXRhDQoqKkRlZmluaXNpIFVrdXJhbiBQZW55ZWJhcmFuIERhdGEqKiAtPiBJeWFsYWggc3VhdHUga29uc2VwIGRhbGFtIHN0YXRpc3Rpa2EgeWFuZyBtZW5nZ2FtYmFya2FuIHNlamF1aCBtYW5hIG5pbGFpLW5pbGFpIGRhbGFtIHN1YXRhdSBkYXRhc2V0IHRlcnNlYmFyIGF0YXUgYmVydmFyaWFzaSBkYXJpIG5pbGFpIHB1c2F0IChtaXNhbG55YSByYXRhLXJhdGEsIG1lZGlhbikuIFVrdXJhbiBpbmkgbWVtYmVyaWthbiBpbmZvcm1hc2kgdGVudGFuZyBkaXN0cmlidXNpIGRhdGEsIG1lbWJhbnR1IG1lbmdpZGVudGlmaWthc2kgdGluZ2thdCBrZWhvbW9nZW5hbiBhdGF1IGtlaGV0ZXJvZ2VuYW4gZGF0YSwgc2VydGEgbWVuZGV0ZWtzaSBrZWJlcmFkYWFuIG91dGxpZXIuDQoNCiMgQS4gSmFuZ2thdWFuIChSYW5nZSkNCiMjICoqMS4gRGVmaW5pc2kgSmFuZ2thdWFuIChSYW5nZSkqKiANCmFkYWxhaCBzdWF0YXUgdWt1cmFuIHBlbnllYmFyYW4gZGF0YSB5YW5nIHBhbGluZyBzZWRlcmhhbmEsIHlhbmcgbWVudW5qdWtrYW4gc2VsaXNpaCBhbnRhcmEgbmlsYWkgbWFrc2ltdW0gZGFuIG5pbGFpIG1pbmltdW0gZGFsYW0gc3VhdHUgZGF0YXNldC4gSmFuZ2thdWFuIG1lbWJlcmlrYW4gZ2FtYmFyYW4ga2FzYXIgdGVudGFuZyByZW50YW5nIGRpc3RyaWJ1c2kgZGF0YS4NCg0KIyMgKioyLiBSdW11cyoqOg0KXFsNClx0ZXh0e1JhbmdlfSA9IFx0ZXh0e05pbGFpIE1ha3NpbXVtfSAtIFx0ZXh0e05pbGFpIE1pbmltdW19DQpcXQ0KKipDb250b2gqKjoNCg0KSmlrYSBzZWJ1YWggZGF0YXNldCBtZW1pbGlraSBuaWxhaTogJDMsIDcsIDgsIDE1LCAyMiQNCg0KLSBOaWxhaSBtYWtzaW11bSA9ICQyMiQNCi0gTmlsYWkgbWluaW11bSA9ICQzJA0KDQpNYWthLCBqYW5na2F1YW4gKHJhbmdlKSBhZGFsYWg6DQpcWw0KXHRleHR7UmFuZ2V9ID0gMjIgLSAzID0gMTkNClxdDQoNCiMjICoqMy4gS2VsZWJpaGFuKio6DQoNCi0gTXVkYWggZGloaXR1bmcNCi0gTWVtYmVyaWthbiBpbmZvcm1hc2kgZGFzYXIgdGVudGFuZyByZW50YW5nIGRpc3RyaWJ1c2kgZGF0YS4NCg0KIyMgKio0LiBLZWt1cmFuZ2FuKio6DQoNCi0gVGlkYWsgbWVtcGVyaGl0dW5na2FuIGRpc3RyaWJ1c2kgZGF0YSBkaSBhbnRhcmEgbmlsYWktbmlsYWkgdGVyc2VidXQuDQotIFNhbmdhdCBzZW5zaXRpZiB0ZXJoYWRhcCBvdXRsaWVyIChuaWxhaSBla3N0cmVtKS4NCg0KSmFuZ2thdWFuIGJpYXNhbnlhIGRpZ3VuYWthbiBzZWJhZ2FpIGxhbmdrYWggYXdhbCB1bnR1ayBtZW1haGFtaSBzZWJhcmFuIGRhdGEgc2ViZWx1bSBtZW5nZ3VuYWthbiB1a3VyYW4gcGVueWViYXJhbiBsYWlubnlhIHlhbmcgIGxlYmloIGtvbXBsZWtzLCBzZXBlcnRpIHZhcmlhbnMgYXRheSBzdGFuZGFyIGRldmlhc2kuDQoNCiMgQi4gSmFuZ2thdWFuIEFudGFyIEt1YXJ0aWwgKElRUikNCiMjICoqMS4gRGVmaW5pc2kgSVFSKioNCkphbmdrYXVhbiBBbnRhciBLdWFydGlsIGFkYWxhaCB1a3VyYW4gcGVueWViYXJhbiBkYXRhIHlhbmcgbWVuZ2dhbWJhcmthbiByZW50YW5nIGFudGFyYSBrdWFydGlsIGtldGlnYSQoUTMpJCBkYW4ga3VhcnRpbCBwZXJ0YW1hICQoUTEpJC4gSVFSIG1lbnVuanVrYW4gcmVudGFuZyBuaWxhaSB0ZW5nYWggZGFyaSBkYXRhc2V0LCB5YWl0dSBkYXRhIHlhbmcgYmVyYWRhIGRpIGFudGFyYSAyNSUgaGluZ2dhIDc1JSBkaXN0cmlidXNpLg0KDQojIyAqKjIuIFJ1bXVzKio6DQpcWw0KXHRleHR7SVFSfSA9IFFfMyAtIFFfMQ0KXF0NCg0KLSAqKiRRMSQgKEt1YXJ0aWwgUGVydGFtYSkqKjogTmlsYWkgeWFuZyBtZW1pc2Foa2FuIDI1JSBkYXRhIHRlcmtlY2lsIGRhcmkgc2lzYW55YS4NCi0gKiokUTMgKEt1YXJ0aWwgS2V0aWdhKSoqOiBOaWxhaSB5YW5nIG1lbWlzYWhrYW4gMjUlIGRhdGEgdGVyYmVzc2FyIGRhcmkgc2lzYW55YS4NCg0KIyMgKiozLiBDb250b2gqKjoNCg0KSmlrYSBzZWJ1YWggZGF0YXNldCBtZW1pbGlraSBuaWxhaToNClxbDQo1LCA3LCA4LCAxMiwgMTUsIDE4LCAyMA0KXF0NCg0KMS4gVXJ1dGthbiBkYXRhLg0KMi4gVGVudHVrYW4gJFExJCAoa3VhcnRpbCBwZXJ0YW1hKTogTWVkaWFuIGRhcmkgc2V0ZW5nYWggZGF0YSBwZXJ0YW1hICQoNSwgNywgOCkkIGFkYWxhaCAkNyQuDQozLiBUZW50dWthbiAkUTMkIChrdWFydGlsIGtldGlnYSk6IE1lZGlhbiBkYXJpIHNldGVuZ2FoIGRhdGEga2VkdWEgJCgxNSwgMTgsIDIwKSQgYWRhbGFoICQxOCQuDQo0LiBIaXR1bmcgSVFSOg0KXFsNCklRUiA9IFEzIC0gUTEgPSAxOCAtIDcgPSAxMQ0KXF0NCg0KIyMgKio0LiBGdW5nc2kgSVFSKio6DQoNCi0gTWVuZ3VrdXIga29uc2VudHJhc2kgbmlsYWkgdGVuZ2FoIGRhbGFtIGRhdGFzZXQuDQotIE1lbWJhbnR1IG1lbmdpZGVudGlmaWthc2kgb3V0bGllcjogZGF0YSB5YW5nIGphdWggZGFyaSBsdWFyIHJlbnRhbmcgXFsNClFfMSAtIDEuNSBcdGltZXMgXHRleHR7SVFSfSBccXVhZCBcdGV4dHthdGF1fSBccXVhZCBRXzMgKyAxLjUgXHRpbWVzIFx0ZXh0e0lRUn0gXHF1YWQgXHRleHR7ZGlhbmdnYXAgc2ViYWdhaSBvdXRsaWVyLn0NClxdDQoNCklRUiBsZWJpaCBzdGFiaWwgdGVyaGFkYXAgb3V0bGllciBkaWJhbmRpbmdrYW4gamFuZ2thdWFuIChyYW5nZSkga2FyZW5hIGhhbnlhIG1lbmdnZ3VuYWthbiBuaWxhaSB0ZW5nYWggZGlzdHJpYnVzaSBkYXRhLg0KDQojIEMuIFZhcmlhbnMNCiMjICoqMS4gRGVmaW5pc2kgVmFyaWFucyoqDQpWYXJpYW5zIGFkYWxhaCB1a3VyYW4gcGVueWViYXJhbiBkYXRhIHlhbmcgbWVudW5qdWthbiBzZWphdWggbWFuYSBuaWxhaS1uaWxhaSBkYWxhbSBkYXRhc2V0IHRlcnNlYmFyIGF0YXUgYmVyYmVkYSBkYXJpIG5pbGFpIHJhdGEtcmF0YSAobWVhbikuIFZhcmlhbnMgbWVuZ3VrdXIgcmF0YS1yYXRhIGt1YWRyYXQgZGV2aWFzaSAoc2VsaXNpaCkgc2V0aWFwIG5pbGFpIGRhdGEgdGVyaGFkYXAgbmlsYWkgcmF0YS1yYXRhLg0KDQojIyAqKjIuIFJ1bXVzIFZhcmlhbnMqKjoNClVudHVrIGRhdGFzZXQgZG5lZ2FuICRuJCBkYXRhLCB2YXJpYW5zIGRpaGl0dW5nIGRlbmdhbiBydW11czoNCg0KLSAqKlZhcmlhbnMgdW50dWsgcG9wdWxhc2kqKjoNClxbDQpcc2lnbWFeMiA9IFxmcmFjezF9e059IFxzdW1fe2k9MX1ee059ICh4X2kgLSBcbXUpXjINClxdDQpEaSBtYW5hOg0KDQotICRcc2lnbWFeMiQgYWRhbGFoIHZhcmlhbnMgcG9wdWxhc2kuDQotICROJCBhZGFsYWgganVtbGFoIGRhdGEgZGFsYW0gcG9wdWxhc2kuDQotICRYX2kkIGFkYWxhaCBuaWxhaSBpbmRpdmlkdWFsIGRhbGFtIGRhdGEuDQotICRcbXUkIGFkYWxhaCByYXRhLXJhdGEgcG9wdWxhc2kuDQoNClVudHVrIHNhbXBlbCwgdmFyaWFucyBkaXJ1bXVza2FuIHNlYmFnYWk6DQpcWw0Kc14yID0gXGZyYWN7MX17bi0xfSBcc3VtX3tpPTF9Xm4gKHhfaSAtIFxiYXJ7eH0pXjINClxdDQoNCiMjICoqMy4gSW50ZXJwcmV0YXNpKio6DQoNCi0gKipWYXJpYW5zIHRpbmdnaSoqIG1lbnVuanVrYW4gYmFod2EgZGF0YSBtZW1pbGlraSBwZW55ZWJhcmFuIHlhbmcgYmVzYXIgKGRhdGEgbGViaWggamF1aCBkYXJpIHJhdGEtcmF0YSkuDQotICoqVmFyaWFucyByZW5kYWgqKm1lbnVuanVra2FuIGJhaHdhIGRhdGEgbGViaWggdGVya29uc2VudHJhc2kgZGkgc2VraXRhciByYXRhLXJhdGEuDQoNCiMjICoqNC4gQ29udG9oKioNCkppa2EgZGF0YSANClxbDQpbMiwgNCwgNiwgOF06DQpcXQ0KDQoxLiBIaXR1bmcgcmF0YS1yYXRhOg0KXFsNClxiYXJ7WH0gPSBcZnJhY3syICsgNCArIDYgKyA4fXs0fSA9IDUNClxdDQoyLiBIaXR1bmcgc2Vsc2loIGt1YWRyYXQgc2V0aWFwIGRhdGEgZGFyaSByYXRhLXJhdGE6DQpcWw0KKDIgLSA1KV4yLCAoNCAtIDUpXjIsICg2IC0gNSleMiwgKDggLSA1KV4yIFxpbXBsaWVzIDksIDEsIDEsIDkNClxdDQozLiBIaXR1bmcgcmF0YS1yYXRhIHNlbGlzaWgga3VhZHJhdCB0ZXJzZWJ1dDoNCg0KLSBKaWthIHBvcHVsYXNpOiBcWyBcZnJhY3s5ICsgMSArIDEgKyA5fXs0fSA9IDUgXF0NCi0gSmlrYSBzYW1wZWw6IFxbIFxmcmFjezkgKyAxICsgMSArIDl9ezN9ID0gNi42N1xdDQoNClZhcmlhbnMgZGlndW5ha2FuIGRhbGFtIGJlcmJhZ2FpIGJpZGFuZywgdGVybWFzdWsgc3RhdGlzdGlrLCBla29ub21pLCBkYW4gbWFjaGluZSBsZWFybmluZyx1bnR1ayBtZW5ndWt1ciBwZW55ZWJhcmFuIGRhdGEuDQoNCg0KIyAqKkQuIFN0YW5kYXIgRGV2aWFzaSoqDQoNCiMjICoqMS4gRGVmaW5pc2kgU3RhbmRhciBEZXZpYXNpKioNClN0YW5kYXIgRGV2aWFzaSBhZGFsYWggdWt1cmFuIHN0YXRpc3RpayB5YW5nIG1lbnVuanVra2FuIHNlYmVyYXBhIHRlcnNlYmFyIGF0YXUgYmVydmFyaWFzaW55YSBkYXRhIGRhcmkgbmlsYWkgcmF0YS1yYXRhIChtZWFuKSBkYWxhbSBzdWF0dSBkaXN0cmlidXNpLiBTdGFuZGFyIGRldmlhc2kgbWVtYmVyaWthbiBnYW1iYXJhbiBzZWJlcmFwYSBqYXVoIHNldGlhcCBkYXRhIGRhbGFtIGt1bXB1bGFuIHRlcnNlYnV0IGRhcmkgbmlsYWkgcmF0YS1yYXRhLg0KDQojIyAqKjIuIERlZmluaXNpIE1hdGVtYXRpa2EqKjoNClN0YW5kYXIgZGV2aWFzaSBkaWhpdHVuZyBkZW5nYW4gcnVtdXM6DQpcWw0Kc2lnbWEgPSBcc3FydHtcZnJhY3sxfXtufSBcc3VtX3tpPTF9XntufSAoeF9pIC0gXG11KV4yfQ0KXF0NCg0KKipQZW5qZWxhc2FuIEtvbXBvbmVuKio6DQoNCi0gJFxzaWdtYSQ6IFN0YW5kYXIgZGV2aWFzaS4NCi0gJFhfaSQ6IFNldGlhcCBuaWxhaSBkYWxhbSBrdW1wdWxhbiBkYXRhLg0KLSAkXG11JDogUmF0YS1yYXRhIGRhcmkgc2VsdXJ1aCBkYXRhLg0KJG4kOiBKdW1sYWggZGF0YS4NCg0KIyMgKiozLiBGdW5nc2kgU3RhbmRhciBEZXZpYXNpKio6DQoNCi0gTWVuZ3VrdXIgKipWYXJpYWJpbGl0YXMqKiBkYXRhOiBTZW1ha2luIGtlY2lsIHN0YW5kYXIgZGV2aWFzaSwgc2VtYWtpbiBkZWthdCBkYXRhIGRlbmdhbiByYXRhLXJhdGEsIGRhbiBzZWJhbGlrbnlhLg0KLSBNZW1iYW50dSBkYWxhbSAqKkFuYWxpc2lzIHJpc2lrbyoqIGF0YXUgKipWYXJpYWJpbGl0YXMgaGFzaWwqKiwgbWlzYWxueWEgZGFsYW0ga2V1YW5nYW4gZGFuIHN0YXRpc3Rpay4NCi0gTWVtYWhhbWkgKipQZW55ZWJhcmFuKiogZGF0YSBkYWxhbSBzdWF0dSBkaXN0cmlidXNpIG5vcm1hbC4NCg0KKipKZW5pcyBTdGFuZGFyIERldmlhc2kqKjoNCjEuICoqUG9wdWxhc2kqKiBkaWd1bmFrYW4gc2FhdCBzZWx1cnVoIHBvcHVsYXNpIGRhdGEgZGlrZXRhaHVpLg0KW1wNClxzaWdtYSA9IFxzcXJ0e1xzdW1fe2k9MX1ee259ICh4X2kgLSBcbXUpXjJ9DQpcXQ0KMi4gKipTYW1wZWwqKiBkaWd1bmFrYW4gc2FhdCBoYW55YSBzZWJhZ2lhbiBkYXRhIChzYW1wZWwpIHlhbmcgZGlhbmFsaXNpcy4NClxbDQpzID0gXHNxcnR7XGZyYWN7MX17bi0xfSBcc3VtX3tpPTF9XntufSAoeF9pIC0gXGJhcnt4fSleMn0NClxdDQoNCg0KIyMgKio0LiBDb250b2gqKjoNCk1pc2Fsa2FuIGt1bXB1bGFuIGRhdGEgYWRhbGFoOiAkMiwgNCwgNiwgOCwgMTAkLg0KDQoxLiBIaXR1bmcgcmF0YS1yYXRhICQoXG11KSQ6ICQoMiArIDQgKyA2ICsgOCArIDEwKS8gNSA9IDYkDQoyLiBIaXR1bmcgc2VsaXNpaCBzZXRpYXAgZGF0YSBkYXJpIHJhdGEtcmF0YSwga3VhZHJhdGthbiwgbGFsdSBjYXJpIHJhdGEtcmF0YSBrdWFkcmF0IHRlcnNlYnV0Lg0KMy4gQW1iaWwgYWthciBrYXVkcmF0IGRhcmkgcmF0YS1yYXRhIGt1YWRyYXQuDQoNCkRlbmdhbiBoYXNpbG55YSwgQW5kYSBtZW5nZXRhaHVpIGJhZ2FpbWFuYSBkYXRhIG1lbnllYmFyIGRhcmkgcmF0YS1yYXRhLg0KDQoNCiMgKipFLiBLb2VmaXNpZW4gVmFyaWFzaSoqDQoNCiMjICoqMS4gRGVmaW5pc2kgS29lZmlzaWVuKioNCktvZWZpc2llbiBWYXJpYXNpIChDVikgYWRhbGFoIHN0YXRpc3RpayB5YW5nIG1lbnVuanVra2FuIHRpbmdrYXQgdmFyaWFzaSBkYWxhbSBzdWF0dSBkYXRzZXQgcmVsYXRpZiB0ZXJoYWRhcCByYXRhLXJhdGEgZGF0YXNldCB0ZXJzZWJ1dC4gQ1YgZGlndW5ha2FuIHVudHVrIG1lbWJhbmRpbmdrYW4gdmFyaWFzaSBkYXRhIGFudGFyIGdydXAgYXRhdSBkYXRhc2V0IHlhbmcgbWVtaWxpa2kgc2F0dWFuIGF0YXUgc2thbGEgeWFuZyBiZXJiZWRhLg0KDQojIyAqKjIuIFJ1bXVzIEtvZWZpc2llbiBWYXJpc2kqKjoNClxbDQpDViA9IFxsZWZ0KCBcZnJhY3tcc2lnbWF9e1xtdX0gXHJpZ2h0KSBcdGltZXMgMTAwDQpcXQ0KRGkgbWFuYToNCg0KLSAkXHNpZ21hJCA9IFNpbXBhbmdhbiBiYWt1IChzdGFuZGFyIGRldmlhc2kpLg0KLSAkXG11JCA9IFJhdGEtcmF0YSAobWVhbikuDQotICRDViQgPSBLb2VmaXNpZW4gdmFyaWFzaSBkYWxhbSBiZW50dWsgcHJlc2VudGFzZS4NCg0KIyMgKiozLiBQZW5qZWxhc2FuIEVsZW1lbiBkYWxhbSBSdW11cyoqDQoNCjEuICoqU2ltcGFuZ2FuIEJha3UgKFN0YW5kYXJkIERldmlhdGlvbikqKiA6IFNpbXBhbmdhbiBiYWt1ICRcc2lnbWEkIG1lbmd1a3VyIHNlYmVyYXBhIGJlc2FyIGRhdGEgdGVyYmVzYXIgZGFyaSByYXRhLXJhdGEuIFNlbWFraW4gYmVzYXIgc2ltcGFuZ2FuIGJha3UsIHNlbWFraW4gYmVzYXIgcGVueWViYXJhbiBkYXRhLg0KMi4gKipSYXRhLXJhdGEgKE1lYW4pKio6IFJhdGEtcmF0YSAkXG11JCBhZGFsYWggbmlsYWkgcHVzYXQgZGFyaSBkYXRhLCB5YW5nIGRpaGl0dW5nIGRlbmdhbiBtZW5qdW1sYWhrYW4gc2VtdWEgbmlsYWkgZGF0YSBkYW4gbWVtYmFnaW55YSBkZW5nYW4ganVtbGFoIGRhdGEuDQozLiAqKktvZWZpc2llbiBWYXJpYXNpIChDVikqKjogQ1YgbWVtYmVyaWthbiBnYW1iYXJhbiB0ZW50YW5nIHRpbmdrYXQgdmFyaWFzaSBkYXRhIHJlbGF0aWYgdGVyaGFkYXAgcmF0YS1yYXRhLCBsYWx1IG1lbmdhbGlrYW4gaGFzaWwgcGVtYmFnaWFuIHNpbXBhbmdhbiBiYWt1IGRlbmdhbiByYXRhLXJhdGEsIGxhbHUgbWVuZ2FsaWthbm55YSBkZW5nYW4gJDEwMCQsIGtpdGEgbWVtcGVyb2xlaCBwZXJzZW50YXNlIHZhcmlhc2kgeWFuZyBsZWJpaCBtdWRhaCBkaWJhbmRpbmdrYW4gZGVuZ2FuIHNhdHVhbiBhc2xpIGRhdGEuDQoNCiMjICoqNC4gSW50ZXJwcmV0YXNpIEtvZWZpc2llbiBWYXJpYXNpKioNCg0KLSAqKkNWIHJlbmRhaCoqOiBKaWthIHJlbGF0aWYgcmVuZGFoLCBpdHUgbWVudW5qdWtrYW4gYmFod2EgZGF0YSBsZWJpaCB0ZXJrb25zZW50cmFzaSBkaSBzZWtpdGFyIHJhdGEtcmF0YS4gVmFyaWFzaSBkYWxhbSBkYXRhIGtlY2lsIGRpYmFuZGluZ2thbiBkZW5nYW4gcmF0YS1yYXRhLg0KXyAqKkNWIHRpbmdnaSoqOiBKaWthIENWIHRpbmdnaSwgaXR1IG1lbnVuanVra2FuIGJhaHdhIGRhdGEgbGViaWggdGVyc2ViYXIuIFZhcmlhc2kgZGFsYW0gZGF0YSBiZXNhciBkaWJhbmRpbmdrYW4gZGVuZ2FuIHJhdGEtcmF0YS4NCg0KIyMgKio1LiBDb250b2ggUGVuZ2d1bmFuIGtvZWZpc2llbiBWYXJpYXNpKioNCk1pc2Fsa2FuIGFkYSBkdWEga29sb21wb2sgc2lzd2EgeWFuZyBtZW5naWt1dGkgdWppYW4gbWF0ZW1hdGlrYToNCg0KLSBLZWxvbXBvayBBIG1lbWlsaWtpIHJhdGEtcmF0YSBuaWxhaSAkODAkIGRhbiBzaW1wYW5nYW4gYmFrdSAkNSQuDQotIEtlbG9tcG9rIEIgbWVtaWxpa2kgcmF0YS1yYXRhIG5pbGFpICQ5MCQgZGFuIHNpbXBhbmdhbiBiYWt1ICQxMCQuDQoNCioqTWVuZ2hpdHVuZyBDViB1bnR1ayBrZWR1YSBrZWxvbXBvayoqOg0KDQoxLiAqKktlbG9tcG9rIEEqKg0KXFsNCkNWX0EgPSBcbGVmdCggXGZyYWN7NX17ODB9IFxyaWdodCkgXHRpbWVzIDEwMCA9IDYuMjVcJQ0KXF0NCjIuICoqS2Vsb21wb2sgQioqDQpcWw0KQ1ZfQiA9IFxsZWZ0KFxmcmFjezEwfXs5MH1ccmlnaHQpIFx0aW1lcyAxMDAgPSAxMS4xMSUNClxdDQoNCkRhcmkgcGVyaGl0dW5nYW4gZGkgYXRhcywgbWVza2lwdW4ga2Vsb21wb2sgQiBtZW1pbGlraSByYXRhLXJhdGEgeWFuZyBsZWJpaCB0aW5nZ2ksIHZhcmlhc2kgKGF0YXUgc2ViYXJhbikgbmlsYWkgZGFsYW0ga2Vsb21wb2sgQiBsZWJpaCBiZXNhciwgc2ViYWdhaW1hbmEgZGl0dW5qdWtrYW4gb2xlaCBuaWxhaSBDViB5YW5nIGxlYmloIHRpbmdnaS4NCg0KIyAqKkYuIFJlbnRhbmcgU2VtaS1JbnRlcmt1YXJ0aWwqKg0KDQojIyAqKjEuIERlZmluaXNpIFJlbnRhbmcgU2VtaS1JbnRlcmt1YXJ0aWwqKg0KUmVudGFuZyBTZW1pLUludGVya3VhcnRpbCBhZGFsYWggc2FsYWggc2F0dSBqZW5pcyByZW50YW5nIGRhbGFtIGFuYWxpc2lzIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW5ndWt1ciB2YXJpYWJpbGl0YXMgYXRhdSBwZW55ZWJhcmFuIGRhdGEuIFJlbnRhbmcgaW5pIGRpaGl0dW5nIGRlbmdhbiBjYXJhIG1lbmd1cmFuZ2kgbmlsYXIga3VhcnRpbCBwZXJ0YW1hICQoUTEpJCBkYXJpIG5pbGFpIGt1YXJ0aWwga2V0aWdhICQoUTMpJC4gRGVuZ2FuIGthdGEgbGFpbiwgcmVudGFuZyBzZW1pLWludGVya3VhcnRpbCAoYXRhdSBkaXNlYnV0IGp1Z2EgKmludGVycXVhcnRpbGUgcmFuZ2UgLyBJUVIqKSBtZW5nZ2FtYmFya2FuIHNlYmFyYW4gZGF0YSBwYWRhIDUwJSB0ZW5nYWggZGFyaSBrdW1wdWxhbiBkYXRhIHlhbmcgdGVsYWggZGl1cnV0a2FuLg0KDQojIyAqKjIuIFJ1bXVzIFJlbnRhbmcgU2VtaS1JbnRlcmt1YXJpbCAoSVFSKSoqDQpSZW50YW5nIFNlbWktSW50ZXJrdWFydGlsIGRpaGl0dW5nIG1lbmdndW5ha2FuIHJ1bXVzOg0KXFsNCklRUiA9IFFfMyAtIFFfMQ0KXF0NCg0KRGkgbWFuYTogDQoNCi0gJFExJCA9IEt1YXJ0aWwga2V0aWdhIChuaWxhaSBwYWRhIHBvc2lzaSBrZSA3NSUgZGF0YSkNCi0gJFExJCA9IEt1YXJ0aWwgcGVydGFtYSAobmlsYWkgcGFkYSBwb3Npc2kga2UgMjUlIGRhdGEpDQoNCiMjICoqMy4gTGFuZ2thaC1sYW5na2FoIE1lbmdoaXR1bmcgUmVudGFuZyBTZW1pLUludGVya3VhcnRpbCAoSVFSKSoqDQpVbnR1ayBtZW5naGl0dW5nIElRUiwgYmVyaWt1dCBhZGFsYWggbGFuZ2thaC1sYW5na2FoIGRpbGFrdWthbjoNCg0KKipMYW5na2FoIDE6IFVydXRrYW4gRGF0YSoqDQoNCkxhbmdrYWggcGVydGFtYSB5YWl0dSBtZW5ndXJ1dGthbiBkYXRhIGRhbGFtIHVydXRhbiBtZW5haWsgKGRhcmkgeWFuZyB0ZXJrZWNpbCBoaW5nZ2EgdGVyYmVzYXIpLg0KQ29udG9oIGRhdGE6ICQzLDcsOCwxMiwxNCwxOCwxOSwyMSwyMiwzMCQNCg0KKipMYW5na2FoIDI6IFRlbnR1a2FuIEt1YXJ0aWwgUGVydGFtYSAoUTEpKioNCg0KS3VhcnRpbCBwZXJ0YW1hIChRMSkgYWRhbGFoIG1lZGlhbiBkYXJpIGRhdGEgYmFnaWFuIGJhd2FoIChuaWxhaSB5YW5nIHRlcmxldGFrIGRpIGJhd2FoIG1lZGlhbiBrZXNlbHVydWhhbikuIERhdGEgaW5pIGRpYmFnaSBtZW5qYWRpIGR1YSBiYWdpYW4sIGRhbiBRMSBhZGFsYWggbWVkaWFuIGRhcmkgYmFnaWFuIHlhbmcgbGViaWgga2VjaWwuDQoNCioqTGFuZ2thaCAzOiBUZW50dWthbiBLdWFydGlsIChRMykqKg0KDQpLdWFydGlsIGtldGlnYSAoUTMpIGFkYWxhaCBtZWRpYW4gZGFyaSBkYXRhIGJhZ2lhbiBhdGFzIChuaWxhaSB5YW5nIHRlcmxldGFrIGRpIGF0YXMgbWVkaWFuIGtlc2VsdXJ1aGFuKS4gRGF0YSBpbmkgZGliYWdpIG1lbmphZGkgZHVhIGJhZ2lhbiwgZGFuIFEzIGFkYWxhaCBtZWRpYW4gZGFyaSBiYWdpYW4geWFuZyBsZWJpaCBiZXNhci4NCg0KKipMYW5nYWtoIDQ6IEhpdHVuZyBJUVIqKg0KDQpTZXRlbGFoIG1lbmVtdWthbiBuaWxhaSBRMSBkYW4gUTMsIElRUiBkYXBhdCBkaWhpdHVuZyBkZW5nYW4gbWVuZ3VyYW5na2FuIFExIGRhcmkgUTM6DQpcWw0KSVFSID0gUV8zIC0gUV8xDQpcXQ0KDQojIyAqKjQuIENvbnRvaCBQZXJoaXR1bmdhbiBJUVIqKg0KTWlzYWxrYW4ga2l0YSBtZW1pbGlraSBkYXRhIGJlcmlrdXQgeWFuZyBzdWRhaCBkaXVydXRrYW46ICQxLDQsNyw5LDEyLDE1LDE4LDIwLDI1LDMwJA0KDQotICoqTWVkaWFuIChRMikqKjogTmlsYWkgdGVuZ2FoIGRhcmkgZGF0YSBhZGFsYWggJDEyJCAobmlsYWkgcGFkYSBwb3Npc2kgJDUkIGRhbiAkNiQpLg0KLSAqKkt1YXJ0aWwgcGVydGFtYSAoUTEpKio6IE1lZGlhbiBkYXJpICQxLCA0LCA3LCA5LCAxMiQgYWRhbGFoICQ3JA0KLSAqKkt1YXJ0aWwga2V0aWdhIChRMykqKjogTWVpZGFuIGRhcmkgJDE1LCAxOCwgMjAsIDI1LCAzMCQgYWRhbGFoICQyMCQuDQoNCkphZGksIHBlcmhpdHVuZ2FuIElRUiBhZGFsYWg6DQpcWw0KSVFSID0gUTMgLSBRMSA9IDIwIC0gNyA9IDEzDQpcXQ0KDQoNCiMgKipMYXRpaGFuIDEqKg0KU2VidWFoIHBlcnVzYWhhYW4gaW5naW4gbWVtYWhhbWkga2FyYWt0ZXJpc3RpayBwZW55ZWJhcmFuIGRhdGEgaGFzaWwgcGVuanVhbGFuIGRhcmkgZW1wYXQgY2FiYW5nIChBLCBCLCBDLCBkYW4gRCkgc2VsYW1hIHNhdHUgYnVsYW4gdGVyYWtoaXIuIERhdGEgcGVuanVhbGFuIChkYWxhbSBqdXRhIHJ1cGlhaCkgZGFyaSBrZWVtcGF0IGNhYmFuZyB0ZXJzZWJ1dCBhZGFsYWggc2ViYWdhaSBiZXJpa3V0Og0KDQotIENhYmFuZyBBOiA1MCwgNTUsIDYwLCA2NSwgNzANCi0gQ2FiYW5nIEI6IDQwLCA1MCwgNjAsIDcwLCA4MA0KLSBDYWJhbmcgQzogMzAsIDMwLCAzNSwgNDAsIDQ1DQotIENhYmFuZyBEOiA3MCwgNzUsIDgwLCA4NSwgOTANCg0KIyAqKlNvYWwgMS4gSGl0dW5nbGFoIHJhdGEtcmF0YSwgbWVkaWFuLCBkYW4gc3RhbmRhciBkZXZpYXNpIHVudHVrIG1hc2luZy1tYXNpbmcgY2FiYW5nKiouDQoNCiMjICoqQ2FiYW5nIEEqKg0KDQpEYXRhOiAkWzUwLCA1NSwgNjAsIDY1LCA3MF0kDQoNCjEuICoqUmF0YS1yYXRhKio6IA0KXFsNClx0ZXh0e1JhdGEtcmF0YX0gPSBcZnJhY3s1MCArIDU1ICsgNjAgKyA2NSArIDcwfXs1fSA9IFxmcmFjezV9ezMwMH0gPSA2MA0KXF0NCjIuICoqTWVlZGlhbioqOg0KDQotIERhdGEgc3VkYWggdGVydXJ1dDogJFs1MCwgNTUsIDYwLCA2NSwgNzBdJA0KLSBNZWRpYW4gYWRhbGFoIG5pbGFpIHRlbmdhaDogJDYwJA0KDQozLiAqKlN0YW5kYXIgRGV2aWFzaSoqOiANCg0KTGFuZ2thaDoNCg0KLSBIaXR1bmcgJChYXzEgLSBcbXUpXjIkIHVudHVrIHNldGlhcCBkYXRhOg0KXFsNCig1MCAtIDYwKV4yID0gMTAwLCAoNTUgLSA2MCleMiA9IDI1LCAoNjAgLSA2MCleMiA9IDAsICg2NSAtIDYwKV4yID0gMjUsICg3MCAtIDYwKV4yID0gMTAwDQpcXQ0KLSBKdW1sYWhsa2FuOg0KXFsNCjEwMCArIDI1ICsgMCArIDI1ICsgMTAwID0gMjUwDQpcXQ0KLSBTdGFuZGFyIGRldmlhc2k6IA0KXFsNClxzaWdtYSA9IFxzcXJ0e1xmcmFjezI1MH17NX19ID0gXHNxcnR7NTB9IFxhcHByb3ggNy4wNw0KXF0NCg0KIyMgKipDYWJhbmcgQioqDQoNCkRhdGE6ICRbNDAsIDUwLCA2MCwgNzAsIDgwXSQNCg0KMS4gKipSYXRhLXJhdGEqKjoNClxbDQpcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7NDAgKyA1MCArIDYwICsgNzAgKyA4MH17NX0gPSBcZnJhY3s1fXszMDB9ID0gNjANClxdDQoyLiAqKk1lZGlhbioqOg0KDQpNZWRpYW4gYWRhbGFoIG5pbGFpID0gJDYwJA0KDQozLiAqKlN0YW5kYXIgRGV2aWFzaSoqOg0KDQpMYW5na2FoOg0KDQotIEhpdHVuZyAkKFhfMSAtIFxtdSleMiQgdW50dWsgc2V0aWFwIGRhdGE6DQpcWw0KKDQwIC0gNjApXjIgPSA0MDAsICg1MCAtIDYwKV4yID0gMTAwLCAoNjAgLSA2MCleMiA9IDAsICg3MCAtIDYwKV4yID0gMTAwLCAoODAgLSA2MCleMiA9IDQwMA0KXF0NCi0gSnVtbGFoa2FuOg0KXFsNCjQwMCArIDEwMCArIDAgKyAxMDAgKyA0MDAgPSAxMDAwDQpcXQ0KLSBTdGFuZGFyIGRldmlhc2k6DQpcWw0KXHNpZ21hID0gXHNxcnR7XGZyYWN7MTAwMH17NX19ID0gXHNxcnR7MjAwfSBcYXBwcm94IDE0LjE0DQpcXQ0KDQojIyAqKkNhYmFuZyBDKioNCg0KRGF0YTogJFszMCwgMzAsIDM1LCA0MCwgNDVdJA0KDQoxLiAqKlJhdGEtcmF0YSoqOg0KXFsNClx0ZXh0e1JhdGEtcmF0YX0gPSBcZnJhY3szMCArIDMwICsgMzUgKyA0MCArIDQ1fXs1fSA9IFxmcmFjezV9ezE4MH0gPSAzNg0KXF0NCjIuICoqTWVkaWFuKio6DQoNCk1lZGlhbiBhZGFsYWggbmlsYWkgdGVuZ2FoID0gJDM1JA0KDQozLiAqKlN0YW5kYXIgRGV2aWFzaSoqOg0KDQpMYW5na2FoOg0KDQotIEhpdHVuZyAkKFhfMSAtIFxtdSleMiQgdW50dWsgc2V0aWFwIGRhdGE6DQpcWw0KKDMwIC0gMzYpXjIgPSAzNiwgKDMwIC0gMzYpXjIgPSAzNiwgKDM1IC0gMzYpXjIgPSAxLCAoNDAgLSAzNileMiA9IDE2LCAoNDUgLSAzNileMiA9IDgxDQpcXQ0KLSBKdW1sYWhrYW46DQpcWw0KMzYgKyAzNiArIDEgKyAxNiArIDgxID0gMTcwDQpcXQ0KLSBTdGFuZGFyIGRldmlhc2k6DQpcWw0KXHNpZ21hID0gXHNxcnR7XGZyYWN7MTcwfXs1fX0gPSBcc3FydHszNH0gXGFwcHJveCA1LjgzDQpcXQ0KDQoNCiMjICoqQ2FiYW5nIEQqKg0KDQpEYXRhOiAkWzcwLCA3NSwgODAsIDg1LCA5MF0kDQoNCjEuICoqUmF0YS1yYXRhKio6DQpcWw0KXHRleHR7UmF0YS1yYXRhfSA9IFxmcmFjezcwICsgNzUgKyA4MCArIDg1ICsgOTB9ezV9ID0gXGZyYWN7NX17NDAwfSA9IDgwDQpcXQ0KMi4gKipNZWRpYW4qKjoNCg0KTWVkaWFuIGFkYWxhaCBuaWxhaSB0ZW5nYWggPSAkODAkDQoNCjMuICoqU3RhbmRhciBEZXZpYXNpKio6DQoNCkxhbmdrYWg6DQoNCiBIaXR1bmcgJChYXzEgLSBcbXUpXjIkIHVudHVrIHNldGlhcCBkYXRhOg0KXFsNCig3MCAtIDgwKV4yID0gMTAwLCAoNzUgLSA4MCleMiA9IDI1LCAoODAgLSA4MCleMiA9IDAsICg4NSAtIDgwKV4yID0yNSwgKDkwIC0gODApXjIgPSAxMDANClxdDQotIEp1bWxhaGthbjoNClxbDQoxMDAgKyAyNSArIDAgKyAyNSArIDEwMCA9IDI1MA0KXF0NCi0gU3RhbmRhciBkZXZpYXNpOg0KXFsNClxzaWdtYSA9IFxzcXJ0e1xmcmFjezI1MH17NX19ID0gXHNxcnR7NTB9IFxhcHByb3ggNy4wNw0KXF0NCg0KIyAqKlNvYWwgMi4gQ2FiYW5nIG1hbmEgeWFuZyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsPyBKZWxhc2thbiBhbGFzYW5ueWEqKi4NCg0KQ2FiYW5nIHlhbmcgbWVtaWxpa2kgKipwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsKiogYWRhbGFoICoqQ2FiYW5nIEMqKiwga2FyZW5hICoqc3RhbmRhciBkZXZpYXNpKiogZGFyaSBkYXRhIHBlbmp1YWxhbiBDYWJhbmcgQyBhZGFsYWggeWFuZyBwYWxpbmcgcmVuZGFoLCB5YWl0dSAkNSw4MyQganV0YQ0KDQoqKlBlbmplbGFzYW4qKjoNCg0KIyMgKioxLiBTdGFuZGFyIGRldmlhc2kqKiANClN0YW5kYXIgZGV2aWFzaSBhZGFsYWggdWt1cmFuIHN0YXRpc3RpayB5YW5nIG1lbmdnYW1iYXJrYW4gc2ViZXJhcGEgdGVyc2ViYXIgZGF0YSB0ZXJoYWRhcCByYXRhLXJhdGEuIFNlbWFraW4ga2VjaWwgbmlsYWkgc3RhbmRhciBkZXZpYXNpLCBzZW1ha2luIGRla2F0IGRhdGEgdGVyaGFkYXAgcmF0YS1yYXRhLCB5YW5nIGJlcmFydGkgcGVueWViYXJhbiBkYXRhIGxlYmloIGtlY2lsLg0KDQojIyAqKjIuIFBlcmJhbmRpbmdhbiBzdGFuZGFyIGRldmlhc2kgYW50YXIgY2FiYW5nKio6DQoNCi0gKipDYWJhbmcgQSoqID0gNywwNyBqdXRhDQotICoqQ2FiYW5nIEIqKiA9IDE0LDE0IGp1dGENCi0gKipDYWJhbmcgQyoqID0gNSw4MyBqdXRhIChwYWxpbmcga2VjaWwpDQotICoqQ2FiYW5nIEQqKiA9IDcsMDcganV0YQ0KDQojIyAqKjMuIEludGVycHJldGFzaSB1bnR1ayBDYWJhbmcgQyoqOg0KDQotIERhdGEgcGVuanVhbGFuIENhYmFuZyBDIGxlYmloIHNlcmFnYW0gYXRhdSBrb25zaXN0ZW4gZGliYW5kaW5na2FuIGNhYmFuZyBsYWlubnlhLg0KLSBSZW50YW5nIGRhdGEgZGkgQ2FiYW5nIEMganVnYSBsZWJpaCBzZW1waXQgJCgzMCQgaGluZ2dhICQ0NSkkDQoNCiMjIDQuICoqS2VzaW1wdWxhbm55YSoqOg0KQ2FiYW5nIEMgbWVtaWxpa2kgcGVueWViYXJhbiBkYXRhIHBhbGluZyBrZWNpbCBrYXJlbmEgZGF0YSBtZXJla2EgbGViaWggc2VyYWdhbSwgZGFuIG5pbGFpIHN0YW5kYXIgZGV2aWFzaW55YSBhZGFsYWggeWFuZyB0ZXJlbmRhaCBkaSBhbnRhcmEgc2VtdWEgY2FiYW5nLioqDQoNCiMgKipTb2FsIDMuIEppa2EgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtIGFkYWxhaCA1MCBqdXRhIHJ1cGlhaCwgY2FiYW5nIG1hbmEgc2FqYSB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBkaSBzZW11YSBkYXRhbnlhPyoqDQoNCkNhYmFuZyB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBzZWJlc2FyIDUwIGp1dGEgcnVwaWFoIHVudHVrIHNlbXVhIGRhdGFueWEgYWRhbGFoICoqQ2FiYW5nIEMqKi4NCg0KIyMgKioxLiBBbGFzYW4qKjoNCg0KLSBEYXRhIHBlbmp1YWxhbiBDYWJhbmcgQzogJFszMCwzMCwzNSw0MCw0NV0kDQotIFNlbHVydWggbmlsYWkgZGFsYW0gZGF0YSB0ZXJzZWJ1dCBrdXJhbmcgZGFyaSB0YXJnZXQgNTAganV0YSwgc2VoaW5nZ2EgKipDYWJhbmcgQyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgc2VtdWEgZGF0YW55YSoqLg0KDQojIyAqKjIuIFBlbmdlY2VrYW4gdW50dWsgY2FiYW5nIGxhaW4qKjoNCg0KLSAqKkNhYmFuZyBBKio6ICRbNTAsNTUsNjAsNjUsNzBdJA0KDQpTZW11YSBkYXRhIG1lbWVudWhpIHRhcmdldCA1MCBqdXRhLg0KDQotICoqQ2FiYW5nIEIqKjogJFs0MCw1MCw2MCw3MCw4MF0kDQoNCkFkYSBkYXlhIHlhbmcgZ2FnYWwgJCg0MCkkLCB0ZXRhcGkgdGlkYWsgc2VtdWFueWEuDQoNCi0gKipDYWJhbmcgRCoqOiAkWzcwLDc1LDgwLDg1LDkwXSQNCg0KU2VtdWEgZGF0YSBtZW1lbnVoaSB0YXJnZXQgNTAganV0YS4NCg0KIyMgKiozLiBLZXNpbXB1bGFuKio6DQoNCkhhbnlhICoqQ2FiYW5nIEMqKiB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gNTAganV0YSBydXBpYWggZGkgc2VtdWEgZGF0YW55YS4NCg0KIyAqKlNvYWwgNC4gQnVhdGxhaCBkaWFncmFtIGtvdGFrIChib3ggcGxvdCkgdW50dWsgbWVtdmlzdWFsaXNhc2lrYW4gcGVueWViYXJhbiBkYXRhIHNldGlhcCBjYWJhbmcuKioNCg0KIyMgKioxLiBDYWJhbmcgQSBkYWxhbSBCb3hwbHQqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIENhYmFuZyBBDQpkYXRhX2NhYmFuZ19hIDwtIGMoNTAsIDU1LCA2MCwgNjUsIDcwKQ0KDQojIE1lbWJ1YXQgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YV9jYWJhbmdfYV9kZiA8LSBkYXRhLmZyYW1lKA0KICBOaWxhaSA9IGRhdGFfY2FiYW5nX2EsDQogIEtlbG9tcG9rID0gcmVwKCJDYWJhbmcgQSIsIGxlbmd0aChkYXRhX2NhYmFuZ19hKSkNCikNCg0KIyBNZW1idWF0IGJveHBsb3QgaW50ZXJha3RpZiBtZW5nZ3VuYWthbiBQbG90bHkgdW50dWsgQ2FiYW5nIEENCnBsb3RfYm94cGxvdF9jYWJhbmdfYSA8LSBwbG90X2x5KA0KICBkYXRhX2NhYmFuZ19hX2RmLCANCiAgeSA9IH5OaWxhaSwgDQogIGNvbG9yID0gfktlbG9tcG9rLCANCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gImFsbCIsICAjIE1lbmFtcGlsa2FuIHNlbXVhIHRpdGlrLCB0ZXJtYXN1ayBvdXRsaWVycw0KICBqaXR0ZXIgPSAwLjIsICAgICAgICMgTWVtYmVyaWthbiBlZmVrIGppdHRlciBwYWRhIHRpdGlrIGRhdGENCiAgcG9pbnRwb3MgPSAtMS4yICAgICAjIE1lbnllc3VhaWthbiBwb3Npc2kgdGl0aWsgdGVyaGFkYXAgYm94cGxvdA0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIkJveCBQbG90IFBlbmp1YWxhbiBDYWJhbmcgQSIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlBlbmp1YWxhbiAoanV0YSBydXBpYWgpIiksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkNhYmFuZyAiKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkNhYmFuZyBBIiwNCiAgICAgICAgeSA9IG1lZGlhbihkYXRhX2NhYmFuZ19hKSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46IiwgbWVkaWFuKGRhdGFfY2FiYW5nX2EpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3djb2xvciA9ICJibHVlIiwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3RfYm94cGxvdF9jYWJhbmdfYQ0KYGBgDQoNCiMjICoqMi4gQ2FiYW5nIEIgZGFsYW0gQm94cGxvdCoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4gQ2FiYW5nIEINCmRhdGFfY2FiYW5nX2IgPC0gYyg0MCwgNTAsIDYwLCA3MCwgODApDQoNCiMgTWVtYnVhdCBkYXRhIGZyYW1lIHVudHVrIHZpc3VhbGlzYXNpDQpkYXRhX2NhYmFuZ19iX2RmIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gZGF0YV9jYWJhbmdfYiwNCiAgS2Vsb21wb2sgPSByZXAoIkNhYmFuZyBCIiwgbGVuZ3RoKGRhdGFfY2FiYW5nX2IpKQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCBpbnRlcmFrdGlmIG1lbmdndW5ha2FuIFBsb3RseSB1bnR1ayBDYWJhbmcgQg0KcGxvdF9ib3hwbG90X2NhYmFuZ19iIDwtIHBsb3RfbHkoDQogIGRhdGFfY2FiYW5nX2JfZGYsIA0KICB5ID0gfk5pbGFpLCANCiAgY29sb3IgPSB+S2Vsb21wb2ssIA0KICB0eXBlID0gImJveCIsIA0KICBib3hwb2ludHMgPSAiYWxsIiwgICMgTWVuYW1waWxrYW4gc2VtdWEgdGl0aWssIHRlcm1hc3VrIG91dGxpZXJzDQogIGppdHRlciA9IDAuMiwgICAgICAgIyBNZW1iZXJpa2FuIGVmZWsgaml0dGVyIHBhZGEgdGl0aWsgZGF0YQ0KICBwb2ludHBvcyA9IC0xLjIgICAgICMgTWVueWVzdWFpa2FuIHBvc2lzaSB0aXRpayB0ZXJoYWRhcCBib3hwbG90DQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBCIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nICIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiQ2FiYW5nIEIiLA0KICAgICAgICB5ID0gbWVkaWFuKGRhdGFfY2FiYW5nX2IpLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCBtZWRpYW4oZGF0YV9jYWJhbmdfYikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2NvbG9yID0gImJsdWUiLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdF9ib3hwbG90X2NhYmFuZ19iDQpgYGANCg0KIyMgKiozLiBDYWJhbmcgQyBkYWxhbSBCb3hwbG90KioNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4gQ2FiYW5nIEMNCmRhdGFfY2FiYW5nX2MgPC0gYygzMCwgMzAsIDM1LCA0MCwgNDUpDQoNCiMgTWVtYnVhdCBkYXRhIGZyYW1lIHVudHVrIHZpc3VhbGlzYXNpDQpkYXRhX2NhYmFuZ19jX2RmIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gZGF0YV9jYWJhbmdfYywNCiAgS2Vsb21wb2sgPSByZXAoIkNhYmFuZyBDIiwgbGVuZ3RoKGRhdGFfY2FiYW5nX2MpKQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCBpbnRlcmFrdGlmIG1lbmdndW5ha2FuIFBsb3RseSB1bnR1ayBDYWJhbmcgQw0KcGxvdF9ib3hwbG90X2NhYmFuZ19jIDwtIHBsb3RfbHkoDQogIGRhdGFfY2FiYW5nX2NfZGYsIA0KICB5ID0gfk5pbGFpLCANCiAgY29sb3IgPSB+S2Vsb21wb2ssIA0KICB0eXBlID0gImJveCIsIA0KICBib3hwb2ludHMgPSAiYWxsIiwgICMgTWVuYW1waWxrYW4gc2VtdWEgdGl0aWssIHRlcm1hc3VrIG91dGxpZXJzDQogIGppdHRlciA9IDAuMiwgICAgICAgIyBNZW1iZXJpa2FuIGVmZWsgaml0dGVyIHBhZGEgdGl0aWsgZGF0YQ0KICBwb2ludHBvcyA9IC0xLjIgICAgICMgTWVueWVzdWFpa2FuIHBvc2lzaSB0aXRpayB0ZXJoYWRhcCBib3hwbG90DQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBDIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nICIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiQ2FiYW5nIEMiLA0KICAgICAgICB5ID0gbWVkaWFuKGRhdGFfY2FiYW5nX2MpLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCBtZWRpYW4oZGF0YV9jYWJhbmdfYykpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2NvbG9yID0gImJsdWUiLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdF9ib3hwbG90X2NhYmFuZ19jDQpgYGANCg0KIyMgKio0LiBDYWJhbmcgRCBkYWxhbSBCb3hwbG90KioNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4gQ2FiYW5nIEQNCmRhdGFfY2FiYW5nX2QgPC0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgTWVtYnVhdCBkYXRhIGZyYW1lIHVudHVrIHZpc3VhbGlzYXNpDQpkYXRhX2NhYmFuZ19kX2RmIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gZGF0YV9jYWJhbmdfZCwNCiAgS2Vsb21wb2sgPSByZXAoIkNhYmFuZyBEIiwgbGVuZ3RoKGRhdGFfY2FiYW5nX2QpKQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCBpbnRlcmFrdGlmIG1lbmdndW5ha2FuIFBsb3RseSB1bnR1ayBDYWJhbmcgRA0KcGxvdF9ib3hwbG90X2NhYmFuZ19kIDwtIHBsb3RfbHkoDQogIGRhdGFfY2FiYW5nX2RfZGYsIA0KICB5ID0gfk5pbGFpLCANCiAgY29sb3IgPSB+S2Vsb21wb2ssIA0KICB0eXBlID0gImJveCIsIA0KICBib3hwb2ludHMgPSAiYWxsIiwgICMgTWVuYW1waWxrYW4gc2VtdWEgdGl0aWssIHRlcm1hc3VrIG91dGxpZXJzDQogIGppdHRlciA9IDAuMiwgICAgICAgIyBNZW1iZXJpa2FuIGVmZWsgaml0dGVyIHBhZGEgdGl0aWsgZGF0YQ0KICBwb2ludHBvcyA9IC0xLjIgICAgICMgTWVueWVzdWFpa2FuIHBvc2lzaSB0aXRpayB0ZXJoYWRhcCBib3hwbG90DQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBEIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nICIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiQ2FiYW5nIEQiLA0KICAgICAgICB5ID0gbWVkaWFuKGRhdGFfY2FiYW5nX2QpLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCBtZWRpYW4oZGF0YV9jYWJhbmdfZCkpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2NvbG9yID0gImJsdWUiLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdF9ib3hwbG90X2NhYmFuZ19kDQpgYGANCg0KIyMgKio1LiBCb3hwbG90IENhYmFuZyBBLCBCLCBDLCBkYW4gRCoqDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIHVudHVrIGtlZW1wYXQgY2FiYW5nDQpkYXRhX2NhYmFuZ19hIDwtIGMoNTAsIDU1LCA2MCwgNjUsIDcwKQ0KZGF0YV9jYWJhbmdfYiA8LSBjKDQwLCA1MCwgNjAsIDcwLCA4MCkNCmRhdGFfY2FiYW5nX2MgPC0gYygzMCwgMzAsIDM1LCA0MCwgNDUpDQpkYXRhX2NhYmFuZ19kIDwtIGMoNzAsIDc1LCA4MCwgODUsIDkwKQ0KDQojIE1lbWJ1YXQgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YV9hbGwgPC0gZGF0YS5mcmFtZSgNCiAgTmlsYWkgPSBjKGRhdGFfY2FiYW5nX2EsIGRhdGFfY2FiYW5nX2IsIGRhdGFfY2FiYW5nX2MsIGRhdGFfY2FiYW5nX2QpLA0KICBLZWxvbXBvayA9IHJlcChjKCJDYWJhbmcgQSIsICJDYWJhbmcgQiIsICJDYWJhbmcgQyIsICJDYWJhbmcgRCIpLCANCiAgICAgICAgICAgICAgICAgdGltZXMgPSBjKGxlbmd0aChkYXRhX2NhYmFuZ19hKSwgbGVuZ3RoKGRhdGFfY2FiYW5nX2IpLCBsZW5ndGgoZGF0YV9jYWJhbmdfYyksIGxlbmd0aChkYXRhX2NhYmFuZ19kKSkpDQopDQoNCiMgTWVtYnVhdCBib3hwbG90IGludGVyYWt0aWYgbWVuZ2d1bmFrYW4gUGxvdGx5IHVudHVrIGtlZW1wYXQgY2FiYW5nDQpwbG90X2JveHBsb3RfYWxsIDwtIHBsb3RfbHkoDQogIGRhdGFfYWxsLCANCiAgeSA9IH5OaWxhaSwgDQogIGNvbG9yID0gfktlbG9tcG9rLCANCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gImFsbCIsICAjIE1lbmFtcGlsa2FuIHNlbXVhIHRpdGlrLCB0ZXJtYXN1ayBvdXRsaWVycw0KICBqaXR0ZXIgPSAwLjIsICAgICAgICMgTWVtYmVyaWthbiBlZmVrIGppdHRlciBwYWRhIHRpdGlrIGRhdGENCiAgcG9pbnRwb3MgPSAtMS4yICAgICAjIE1lbnllc3VhaWthbiBwb3Npc2kgdGl0aWsgdGVyaGFkYXAgYm94cGxvdA0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIkJveCBQbG90IFBlbmp1YWxhbiBDYWJhbmcgQSwgQiwgQywgZGFuIEQiLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQZW5qdWFsYW4gKGp1dGEgcnVwaWFoKSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmciKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkNhYmFuZyBBIiwNCiAgICAgICAgeSA9IG1lZGlhbihkYXRhX2NhYmFuZ19hKSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW4gQ2FiYW5nIEE6IiwgbWVkaWFuKGRhdGFfY2FiYW5nX2EpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3djb2xvciA9ICJibHVlIiwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiQ2FiYW5nIEIiLA0KICAgICAgICB5ID0gbWVkaWFuKGRhdGFfY2FiYW5nX2IpLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbiBDYWJhbmcgQjoiLCBtZWRpYW4oZGF0YV9jYWJhbmdfYikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2NvbG9yID0gImJsdWUiLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApLA0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9ICJDYWJhbmcgQyIsDQogICAgICAgIHkgPSBtZWRpYW4oZGF0YV9jYWJhbmdfYyksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuIENhYmFuZyBDOiIsIG1lZGlhbihkYXRhX2NhYmFuZ19jKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93Y29sb3IgPSAiYmx1ZSIsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkNhYmFuZyBEIiwNCiAgICAgICAgeSA9IG1lZGlhbihkYXRhX2NhYmFuZ19kKSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW4gQ2FiYW5nIEQ6IiwgbWVkaWFuKGRhdGFfY2FiYW5nX2QpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3djb2xvciA9ICJibHVlIiwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3RfYm94cGxvdF9hbGwNCmBgYA0KDQojICoqU29hbCA1LiBKaWthIGFuZGFsYWggbWFuYWplciBwZXJ1c2FoYWFuLCBiYWdhaW1hbmEgYW5kYSBha2FuIG1lbmdndW5hbmthbiBpbmZvcm1hc2kgaW5pIHVudHVrIG1lcmVuY2FuYWthbiBzdHJhdGVnaSBwZW5pbmdrYXRhbiBwZW5qdWFsYW4/KioNCg0KU2ViYWdhaSBtYW5hamVyIHBlcnVzYWhhYW4geWFuZyBtZW5nYW5hbGlzaXMgYm94cGxvdCBwZW5qdWFsYW4gZGFyaSBrZWVtcGF0IGNhYmFuZywgc2F5YSBha2FuIG1lbmdndW5ha2FuIGluZm9ybWFzaSBpbmkgdW50dWsgbWVyZW5jYW5ha2FuIHN0cmF0ZWdpIHBlbmluZ2thdGFuIHBlbmp1YWxhbiBkZW5nYW4gcGVuZGVrYXRhbiB5YW5nIHRlcmFyYWggZGFuIGJlcmRhc2Fya2FuIHBhZGEgZGF0YS4gQmVyaWt1dCBhZGFsYWggYmViZXJhcGEgbGFuZ2thaCB5YW5nIGJpc2EgZGlhbWJpbDoNCg0KIyMgKioxLiBBbmFsaXNpcyBQZW55ZWJhcmFuIERhdGEqKg0KDQotICoqQ2FiYW5nIGRlbmdhbiBWYXJpYWJpbGl0YXMgVGVyZW5kYWggKFBlbnllYmFyYW4gRGF0YSBLZWNpbCkqKjogDQogIC0gQmVyZGFzYXJrYW4gYm94cGxvdCwga2l0YSBiaXNhIG1lbGloYXQgY2FiYW5nIG1hbmEgeWFuZyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsLCB5YW5nIGJlcmFydGkgcGVuanVhbGFubnlhIHJlbGF0aWYgc3RhYmlsLiBNaXNhbG55YSwgKipDYWJhbmcgQyoqIGRlbmdhbiBuaWxhaSBwZW5qdWFsYW4geWFuZyBrb25zaXN0ZW4gYW50YXJhICQzMCQganV0YSBoaW5nZ2EgJDQ1JCBqdXRhLg0KICAtICoqU3RyYXRlZ2kqKjogQ2FiYW5nIHlhbmcgc3RhYmlsIGJpc2EgZGlndW5ha2FuIHNlYmFnYWkgbW9kZWwgYmFnaSBjYWJhbmcgbGFpbi4gVHVnYXNueWEgYmlzYSBsZWJpaCBmb2t1cyBwYWRhIG1lbXBlcnRhaGFua2FuIHBlcmZvcm1hIHlhbmcgc3VkYWggYWRhIGRhbiBtZW5pbmdrYXRrYW4gZWZla3Rpdml0YXMgb3BlcmFzaW9uYWwgdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaS4gSmlrYSBzdWRhaCBzdGFiaWwsIHN0cmF0ZWdpIHNlcGVydGkgcHJvbW9zaSBwcm9kdWsgdW5nZ3VsYW4gYXRhdSBwZXJsdWFzYW4gcGFzYXIgZGFwYXQgZGl0ZXJhcGthbi4NCi0gKipDYWJhbmcgZGVuZ2FuIFZhcmlhYmlsaXRhcyBUZXJiZXNhciAoUGVueWViYXJhbiBEYXRhIExlYmloIEJlc2FyKSoqOiANCiAgLSBDYWJhbmcgc2VwZXJ0aSAqKkNhYmFuZyBBIGRhbiBEKiogbXVuZ2tpbiBtZW51bmp1a2thbiB2YXJpYWJpbGl0YXMgeWFuZyBsZWJpaCBiZXNhciwgeWFuZyBiZXJhcnRpIGFkYSBmbHVrdHVhc2kgYmVzYXIgZGFsYW0gaGFzaWwgcGVuanVhbGFuLiBIYWwgaW5pIGJpc2EgZGlzZWJhYmthbiBvbGVoIGJlcmJhZ2FpIGZha3RvciBzZXBlcnRpIG11c2ltLCBwZXJ1YmFoYW4gaGFyZ2EsIGF0YXUgZmFrdG9yIGVrc3Rlcm5hbCBsYWlubnlhLg0KICAtICoqU3RyYXRlZ2kqKjpVbnR1ayBjYWJhbmcgZGVuZ2FuIHBlbnllYmFyYW4geWFuZyBsZWJpaCBiZXNhciwgbGFuZ2thaCBwZXJ0YW1hIGFkYWxhaCBtZW5naWRlbnRpZmlrYXNpIHBlbnllYmFiIGZsdWt0dWFzaSB0ZXJzZWJ1dC4gTXVuZ2tpbiBwZXJsdSBtZWxha3VrYW4gYW5hbGlzaXMgbGViaWggbWVuZGFsYW0gdW50dWsgbWVuZ2V0YWh1aSBhcGFrYWggYWRhIGZha3RvciBla3N0ZXJuYWwgeWFuZyBtZW1wZW5nYXJ1aGkgcGVuanVhbGFuIGF0YXUgYXBha2FoIGFkYSBtYXNhbGFoIGRhbGFtIHN0cmF0ZWdpIHBlbmp1YWxhbiBkYW4gcGVtYXNhcmFuLiBTdHJhdGVnaSB5YW5nIGxlYmloIGRpbmFtaXMsIHNlcGVydGkgcGVueWVzdWFpYW4gaGFyZ2EsIHByb21vc2kga2h1c3VzLCBhdGF1IHBlbGF0aWhhbiBsZWJpaCBsYW5qdXQgYmFnaSB0aW0gcGVuanVhbGFuLCBiaXNhIG1lbWJhbnR1IG1lbnN0YWJpbGthbiBraW5lcmphLg0KDQoNCiMjICoqMi4gUGVyZW5jYW5hYW4gQmVyZGFzYXJrYW4gVHJlbiBkYW4gUGVyYmFuZGluZ2FuIEFudGFyIENhYmFuZyoqDQoNCi0gKipLaW5lcmphIENhYmFuZyB5YW5nIExlYmloIFN0YWJpbCAoQ2FiYW5nIEMpKio6IENhYmFuZyB5YW5nIHN0YWJpbCBiaXNhIG1lbmphZGkgY29udG9oIHVudHVrIGNhYmFuZyBsYWluIGRhbGFtIGhhbCBwZW5kZWthdGFuIHBlbmp1YWxhbiB5YW5nIGJlcmhhc2lsLg0KLSAqKkNhYmFuZyBkZW5nYW4gUGVuaW5na2F0YW4geWFuZyBMZWJpaCBTaWduaWZpa2FuIChDYWJhbmcgRCkqKjogTWVuaXJ1IHRla25payBhdGF1IHBlbmRla2F0YW4geWFuZyBkaWd1bmFrYW4gZGkgY2FiYW5nIGluaSB1bnR1ayBtZW5pbmdrYXRrYW4gaGFzaWwgZGkgY2FiYW5nIGxhaW5ueWEuDQotICoqQ2FiYW5nIHlhbmcgUGVybHUgUGVtYmVuYWhhbiAoQ2FiYW5nIEEgZGFuIEIpKio6IEppa2EgY2FiYW5nLWNhYmFuZyBpbmkgbWVudW5qdWtrYW4gZmx1a3R1YXNpIGF0YXUgaGFzaWwgeWFuZyBsZWJpaCByZW5kYWgsIG1ha2EgcGVybHUgZGlsYWt1a2FuIHBlbWJlbmFoYW4uIEhhbCBpbmkgYmlzYSBtZWxpcHV0aSBwZW5pbmdrYXRhbiBrdWFsaXRhcyBwcm9kdWssIHBlbmluZ2thdGFuIHByb21vc2ksIGF0YXUgcGVyYmFpa2FuIG1hbmFqZXJpYWwuDQoNCiMjICoqMy4gTW9uaXRvcmluZyBkYW4gRXZhbHVhc2kgVGVydXMgTWVuZXJ1cyoqDQoNCi0gTWVuZXRhcGthbiBpbmRpa2F0b3Iga2luZXJqYSAoS1BJKSB1bnR1ayBzZXRpYXAgY2FiYW5nIGJlcmRhc2Fya2FuIGFuYWxpc2lzIGluaS4NCi0gTWVsYWt1a2FuIHBlbWFudGF1YW4gc2VjYXJhIGJlcmthbGEgZGFuIG1lbWJ1YXQgcGVueWVzdWFpYW4gc3RyYXRlZ2kgamlrYSBhZGEgcGVydWJhaGFuIHNpZ25pZmlrYW4gZGFsYW0gZGF0YSBwZW5qdWFsYW4geWFuZyB0ZXJwYW50YXUgbWVsYWx1aSBib3hwbG90IHBhZGEgcGVyaW9kZSBiZXJpa3V0bnlhLg0KDQpEZW5nYW4gbWVtYW5mYWF0a2FuIGluZm9ybWFzaSBpbmkgc2VjYXJhIHN0cmF0ZWdpcywgbWFuYWplciBkYXBhdCBtZXJhbmNhbmcgcmVuY2FuYSB5YW5nIGxlYmloIHRlcnN0cnVrdHVyIGRhbiBiZXJiYXNpcyBkYXRhIHVudHVrIG1lbmluZ2thdGthbiBwZW5qdWFsYW4sIG1lbnN0YWJpbGthbiBjYWJhbmcgeWFuZyBiZXJmbHVrdHVhc2ksIGRhbiBtZW5nb3B0aW1hbGthbiBjYWJhbmcgeWFuZyBzdWRhaCBtZW51bmp1a2thbiBwZXJmb3JtYSBiYWlrLg0KDQoNCiMgKipMYXRpaGFuIDIqKg0KDQpQZXJ1c2FoYWFuIFhZWiBtZW5nZWxvbGEgcGVuZ2VpcmltYW4gYmFyYW5nIGtlIGJlcmJhZ2FpIHdpbGF5YWggZGVuZ2FuIG1lbmdndW5ha2FuIGJlcmJhZ2FpIGplbmlzIHRyYW5zcG9ydGFzaS4gU2V0aWFwIHBlbmdpcmltYW4gbWVsaWJhdGthbiBiaWF5YSB0cmFuc3BvcnRhc2ksIHdha3R1IHlhbmcgZGlidXR1aGthbiwgZGFuIGp1bWxhaCBiYXJhbmcgeWFuZyBkaWtpcmltLiBCZXJpa3V0IGFkYWxhaCBkYXRhIHRlcmthaXQgcGVuZ3JpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiB3aWxheWFoIGRhbiBqZW5pcyBiYXJhbmc6DQoNCiMgKipTb2FsIDEuIEFuYWxpc2lzIEVmaXNpZW5zaSBQZW5naXJpbWFuKio6DQoNCi0gVmlzdWFsaXNhc2lrYW4gUGVuZ2lyaW1hbiBiYXJhbmcgYmVyZGFzYXJrYW4ganVtbGFoIGJhcmFuZywgd2FrdHUgcGVuZ2lyaW1hbiwgZGFuIGJpYXlhIHBlciB1bml0IGRlbmdhbiBtZW5nZ3VuYWthbiBCb3hwbG90IDNELg0KLSBUZW50dWthbiBXaWxheWFoIG1hbmEgeWFuZyBtZW1pbGlraSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCBiZXJkYXNhcmthbiBiaWF5YSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbi4NCg0KIyMgKipBLiBWaXN1YWxpc2FzaSBCb3hwbG90IDNEKioNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeSB5YW5nIGRpYnV0dWhrYW4NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuZ2lyaW1hbg0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygnVXRhcmEnLCAnU2VsYXRhbicsICdUaW11cicsICdCYXJhdCcsICdUZW5nYWgnLCAnVXRhcmEnLCAnU2VsYXRhbicsICdUaW11cicsICdCYXJhdCcsICdUZW5nYWgnLCANCiAgICAgICAgICAgICAgJ1V0YXJhJywgJ1NlbGF0YW4nLCAnVGltdXInLCAnQmFyYXQnLCAnVGVuZ2FoJyksDQogIEJhcmFuZyA9IGMoJ0VsZWt0cm9uaWsnLCAnUGFrYWlhbicsICdNYWthbmFuJywgJ1BlcmFsYXRhbicsICdFbGVrdHJvbmlrJywgJ1Bha2FpYW4nLCAnTWFrYW5hbicsICdQZXJhbGF0YW4nLCANCiAgICAgICAgICAgICAnRWxla3Ryb25paycsICdQYWthaWFuJywgJ1BlcmFsYXRhbicsICdFbGVrdHJvbmlrJywgJ1Bha2FpYW4nLCAnTWFrYW5hbicsICdFbGVrdHJvbmlrJyksDQogIFVuaXQgPSBjKDIwMCwgMTUwLCAxODAsIDEyMCwgMjUwLCAzMDAsIDIyMCwgMTQwLCAxODAsIDM1MCwgMTcwLCAyNTAsIDE5MCwgMTgwLCAyMjApLA0KICBKYW0gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDYsIDUpLA0KICBCaWF5YSA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgNzgwMCwgMTIwMDAsIDE2MDAwLCA4MjAwLCAxMDUwMCwgMTIwMDApDQopDQoNCiMgTWVuZ2hpdHVuZyBiaWF5YSBwZXIgdW5pdA0KZGF0YSRCaWF5YV9QZXJfVW5pdCA8LSBkYXRhJEJpYXlhIC8gZGF0YSRVbml0DQoNCiMgTWVuZ2hpdHVuZyBlZmlzaWVuc2kgKEJpYXlhIFBlciBVbml0ICogSmFtKQ0KZGF0YSRFZmlzaWVuc2kgPC0gZGF0YSRCaWF5YV9QZXJfVW5pdCAqIGRhdGEkSmFtDQoNCiMgTWVuZW50dWthbiB3aWxheWFoIGRlbmdhbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaA0KbG93ZXN0X2VmZmljaWVuY3kgPC0gZGF0YVt3aGljaC5taW4oZGF0YSRFZmlzaWVuc2kpLCBdDQpsb3dlc3RfZWZmaWNpZW5jeV93aWxheWFoIDwtIGxvd2VzdF9lZmZpY2llbmN5JFdpbGF5YWgNCmxvd2VzdF9lZmZpY2llbmN5X3ZhbHVlIDwtIGxvd2VzdF9lZmZpY2llbmN5JEVmaXNpZW5zaQ0KDQojIFZpc3VhbGlzYXNpIDNEIG1lbmdndW5ha2FuIHBsb3RseQ0KZmlnIDwtIHBsb3RfbHkoZGF0YSwgeCA9IH5Vbml0LCB5ID0gfkphbSwgeiA9IH5CaWF5YV9QZXJfVW5pdCwgDQogICAgICAgICAgICAgICB0eXBlID0gInNjYXR0ZXIzZCIsIG1vZGUgPSAibWFya2VycyIsIA0KICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChjb2xvciA9IH5FZmlzaWVuc2ksIGNvbG9yc2NhbGUgPSAnVmlyaWRpcycsIHNpemUgPSAxMCkpDQoNCmZpZyA8LSBmaWcgJT4lDQogIGxheW91dChzY2VuZSA9IGxpc3QoeGF4aXMgPSBsaXN0KHRpdGxlID0gJ0p1bWxhaCBCYXJhbmcgKFVuaXQpJyksDQogICAgICAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gJ1dha3R1IFBlbmdpcmltYW4gKEphbSknKSwNCiAgICAgICAgICAgICAgICAgICAgICB6YXhpcyA9IGxpc3QodGl0bGUgPSAnQmlheWEgUGVyIFVuaXQnKSksDQogICAgICAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSBQZW5naXJpbWFuIEJhcmFuZyBCZXJkYXNhcmthbiBKdW1sYWgsIFdha3R1LCBkYW4gQmlheWEgUGVyIFVuaXQiKQ0KDQpmaWcNCmBgYA0KDQojIyAqKkIuIEFuYWxpc2lzIEVmaXNpZW5zaSBQZW5naXJpbWFuKioNCg0KQmVyZGFzYXJrYW4gZGF0YSBwZW5naXJpbWFuIGJhcmFuZyB5YW5nIG1lbmNha3VwIGJlcmJhZ2FpIHdpbGF5YWgsIGplbmlzIGJhcmFuZywgd2FrdHUgcGVuZ2lyaW1hbiwgZGFuIGJpYXlhLCBraXRhIGRhcGF0IG1lbmdhbmFsaXNpcyBlZmlzaWVuc2kgcGVuZ2lyaW1hbiBkZW5nYW4gY2FyYSBtZW5naGl0dW5nICoqYmlheWEgcGVyIHVuaXQqKiBkYW4gKip3YWt0dSBwZW5naXJpbWFuKiouDQoNCjEuICoqUGVuZ2hpdHVuZ2FuIEJpYXlhIFBlciBVbml0IGRhbiBFZmlzaWVuc2kqKg0KDQotICoqQmlheWEgcGVyIHVuaXQqKiBkaWhpdHVuZyBkZW5nYW4gbWVtYmFnaSBiaWF5YSBwZW5naXJpbWFuIGRlbmdhbiBqdW1sYWggdW5pdCBiYXJhbmcgeWFuZyBkaWtpcmltLg0KLSAqKkVmaXNpZW5zaSBwZW5naXJpbWFuKiogZGloaXR1bmcgZGVuZ2FuIG1lbmdhbGlrYW4gYmlheWEgcGVyIHVuaXQgZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4gKGphbSkuIEhhbCBpbmkgbWVtYmVyaWthbiBnYW1iYXJhbiB0ZW50YW5nIGJlcmFwYSBiYW55YWsgYmlheWEgeWFuZyBkaWtlbHVhcmthbiB1bnR1ayBzZXRpYXAgdW5pdCBiYXJhbmcgZGFsYW0gd2FrdHUgdGVydGVudHUuDQoNCjIuICoqV2lsYXlhaCBkZW5nYW4gRWZpc2llbnNpIFBlbmdpcmltYW4gVGVyZW5kYWgqKiBTZXRlbGFoIG1lbGFrdWthbiBwZXJoaXR1bmdhbiBlZmlzaWVuc2ksIGtpdGEgZGFwYXQgbWVuZW50dWthbiB3aWxheWFoIGRlbmdhbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCwgeWFpdHUgd2lsYXlhaCB5YW5nIG1lbWlsaWtpIG5pbGFpICoqYmlheWEgcGVyIHVuaXQqKiBkYW4gKip3YWt0dSBwZW5naXJpbWFuKiogeWFuZyBwYWxpbmcgcmVuZGFoLg0KDQpCZXJkYXNhcmthbiBwZXJoaXR1bmdhbiwgd2lsYXlhaCBkZW5nYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggYWRhbGFoIFdpbGF5YWggVGVuZ2FoIGRlbmdhbiBuaWxhaSBlZmlzaWVuc2kgc2ViZXNhciAxNzguMjg1Ny4NCg0KQXJ0aW55YSwgcGVuZ2lyaW1hbiBiYXJhbmcgZGkgd2lsYXlhaCBUZW5nYWggbWVtaWxpa2kga29tYmluYXNpIGJpYXlhIHBlciB1bml0IGRhbiB3YWt0dSBwZW5naXJpbWFuIHlhbmcgbGViaWggZWZpc2llbiBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdpbGF5YWggbGFpbm55YS4NCg0KMy4gKipLZXNpbXB1bGFuKioNCg0KLSBXaWxheWFoICoqVGVuZ2FoKiogbWVudW5qdWtrYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggZGVuZ2FuIGVmaXNpZW5zaSBzZWJlc2FyICQxNzguMjg1NyQuIA0KLSBWaXN1YWxpc2FzaSAzRCBtZW1iZXJpa2FuIGdhbWJhcmFuIHlhbmcgamVsYXMgdGVudGFuZyBwZW5nYXJ1aCBqdW1sYWggYmFyYW5nLCB3YWt0dSBwZW5naXJpbWFuLCBkYW4gYmlheWEgcGVyIHVuaXQgdGVyaGFkYXAgZWZpc2llbnNpIHBlbmdpcmltYW4gZGkgYmVyYmFnYWkgd2lsYXlhaC4NCg0KRGVuZ2FuIGluZm9ybWFzaSBpbmksIHBlcnVzYWhhYW4gZGFwYXQgbGViaWggZm9rdXMgcGFkYSB3aWxheWFoICoqVGVuZ2FoKiogdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuLCBiYWlrIGRlbmdhbiBtZW5ndXJhbmdpIGJpYXlhIGF0YXUgbWVtcGVycGVuZGVrIHdha3R1IHBlbmdpcmltYW4gZ3VuYSBtZW5jYXBhaSBwZXJmb3JtYSB5YW5nIGxlYmloIGJhaWsgZGFsYW0gcGVuZ2Vsb2xhYW4gbG9naXN0aWsuDQoNCiMgKipTb2FsIDIuIFJla29tZW5kYXNpIE9wZXJhc2lvbmFsKioNCg0KDQojIyAqKjEuIFdpbGF5YWggeWFuZyBNZW1lcmx1a2FuIFBlcmhhdGlhbiBLaHVzdXMqKg0KDQotICoqV2lsYXlhaCBUZW5nYWgqKiBhZGFsYWggd2lsYXlhaCB5YW5nIG1lbnVuanVra2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoLiBNZXNraXB1biBiaWF5YSBwZXIgdW5pdG55YSB0aWRhayB0ZXJsYWx1IHRpbmdnaSwgd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIGluaSBjdWt1cCBwYW5qYW5nIChqYW0pIGRpYmFuZGluZ2thbiBkZW5nYW4gd2lsYXlhaCBsYWlubnlhLg0KLSBXaWxheWFoIGluaSBwZXJsdSBkaXBlcmhhdGlrYW4ga2FyZW5hIGtvbWJpbmFzaSBiaWF5YSBkYW4gd2FrdHUgeWFuZyB0aW5nZ2kgZGFwYXQgbWVtcGVuZ2FydWhpIHByb2ZpdGFiaWxpdGFzIHBlcnVzYWhhYW4gc2VydGEga2VwdWFzYW4gcGVsYW5nZ2FuLg0KLSBBcGEgcmVrb21lbmRhc2kgdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBkYW4gd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIHRlcnNlYnV0Pw0KDQojIyAqKjIuIFJla29tZW5kYXNpIHVudHVrIE1lbmd1cmFuZ2kgQmlheWEgZGFuIFdha3R1IFBlbmdpcmltYW4gZGkgV2lsYXlhaCBUZW5nYWgqKg0KDQpCZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpcywgYmViZXJhcGEgcmVrb21lbmRhc2kgeWFuZyBkYXBhdCBkaXRlcmFwa2FuIHVudHVrIG1lbmd1cmFuZ2kgYmlheWEgZGFuIHdha3R1IHBlbmdpcmltYW4gZGkgKipXaWxheWFoIFRlbmdhaCoqIGFkYWxhaDoNCg0KLSAqKk9wdGltYWxrYW4gUnV0ZSBQZW5naXJpbWFuOioqOg0KICAgIC0gTWVsYWt1a2FuIGFuYWxpc2lzIHJ1dGUgcGVuZ2lyaW1hbiB1bnR1ayBtZW5naWRlbnRpZmlrYXNpIGFwYWthaCBydXRlIHlhbmcgZGlndW5ha2FuIHN1ZGFoIGVmaXNpZW4uIFBlbmdndW5hYW4gdGVrbm9sb2dpIHNlcGVydGkgc2lzdGVtIG1hbmFqZW1lbiB0cmFuc3BvcnRhc2kgKFRNUykgZGFwYXQgbWVtYmFudHUgdW50dWsgbWVyZW5jYW5ha2FuIHJ1dGUgdGVyYmFpayB5YW5nIG1lbWluaW1hbGthbiB3YWt0dSBkYW4gYmlheWEuDQogICAgLSBQZW5nZ3VuYWFuIGtlbmRhcmFhbiBkZW5nYW4ga2FwYXNpdGFzIHlhbmcgbGViaWggc2VzdWFpIHVudHVrIGp1bWxhaCBiYXJhbmcgeWFuZyBkaWtpcmltIGp1Z2EgYmlzYSBtZW5ndXJhbmdpIHdha3R1IGRhbiBiaWF5YSBwZW5naXJpbWFuLg0KDQotICoqUGVuaW5na2F0YW4gUGVuZ2Vsb2xhYW4gV2FrdHUgUGVuZ2lyaW1hbioqOg0KICAgIC0gTWVsYWt1a2FuIHBlcmJhaWthbiBkYWxhbSBtYW5hamVtZW4gbG9naXN0aWsgdW50dWsgbWVuZ3VyYW5naSB3YWt0dSB0dW5nZ3UgZGkgdGl0aWsgZGlzdHJpYnVzaSBkYW4gbWVtcGVyY2VwYXQgcHJvc2VzIGxvYWRpbmcgZGFuIHVubG9hZGluZyBiYXJhbmcuDQogICAgLSBNZW5nb3B0aW1hbGthbiBqYW0gb3BlcmFzaW9uYWwgZ3VkYW5nIGRhbiBkaXN0cmlidXNpIHVudHVrIG1lbXBlcnNpbmdrYXQgd2FrdHUgcGVuZ2lyaW1hbiBkYXJpIHB1c2F0IGRpc3RyaWJ1c2kga2Uga29uc3VtZW4uDQogICAgDQoNCiMgKipTb2FsIDMuIEFuYWxpc2lzIEtpbmVyamEgUGVuZ2lyaW1hbiBCZXJkYXNhcmthbiBKZW5pcyBCYXJhbmcgZGFuIFdpbGF5YWgqKg0KVW50dWsgbWVuZ2FuYWxpc2lzIGtpbmVyamEgcGVuZ2lyaW1hbiBiZXJkYXNhcmthbiBqZW5pcyBiYXJhbmcgZGFuIHdpbGF5YWgsIGtpdGEgYWthbiBtZWxpaGF0IGR1YSBmYWt0b3IgdXRhbWE6ICoqd2FrdHUgcGVuZ2lyaW1hbioqIGRhbiAqKmJpYXlhIHBlciB1bml0KiouDQoNCioqVHVqdWFuKiogZGFyaSBhbmFsaXNpcyBpbmkgYWRhbGFoIHVudHVrIG1lbmdpZGVudGlmaWthc2kgamVuaXMgYmFyYW5nIGRhbiB3aWxheWFoIHlhbmcgbWVtaWxpa2k6DQoNCi0gKipXYWt0dSBwZW5naXJpbWFuIGxlYmloIGNlcGV0KiouDQotICoqQmlheWEgcGVyIHVuaXQgbGViaWggcmVuZGFoKiouDQoNCiMjICoqMS4gUGVuZ2Vsb21wb2thbiBCZXJkYXNhcmthbiBKZW5pcyBCYXJhbmcgZGFuIFdpbGF5YWgqKg0KU2ViZWx1bSBtZWxha3VrYW4gYW5hbGlzaXMgbGViaWggbGFuanV0LCBraXRhIGFrYW4gbWVtYmFnaSBkYXRhIGJlcmRhc2Fya2FuIGplbmlzICoqYmFyYW5nKiogZGFuICoqd2lsYXlhaCoqLiBCZXJpa3V0IGFkYWxhaCBkdWEgbWV0cmlrIHV0YW1hIHlhbmcgYWthbiBkaWFuYWxpc2lzOg0KDQotICoqV2FrdHUgUGVuZ2lyaW1hbiAoSmFtKTogQmVyYXBhIGxhbWEgd2FrdHUgeWFuZyBkaWJ1dHVoa2FuIHVudHVrIHBlbmdpcmltYW4uDQotICoqQmlheWEgcGVyIFVuaXQqKjogQmlheWEgcGVyIHVuaXQgYmFyYW5nIHlhbmcgZGlraXJpbS4NCg0KIyMgKioyLiBXaWxheWFoIGRlbmdhbiBLaW5lcmphIFRlcmJhaWsgQmVyZGFzYXJrYW4gV2FrdHUgUG5lZ2lyaW1hbiBkYW4gQmlheWEgcGVyIFVuaXQqKg0KRGFyaSBhbmFsaXNpcyBraW5lcmphIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gd2lsYXlhaCwga2l0YSBkYXBhdCBtZW5naWRlbnRpZmlrYXNpIHdpbGF5YWggeWFuZyBtZW51bmp1a2thbiBwZW5naXJpbWFuICoqbGViaWggY2VwYXQqKiBkYW4gKipiaWF5YSBsZWJpaCByZW5kYWgqKjoNCg0KLSAqKldpbGF5YWggVXRhcmEqKiB1bnR1ayAqKlBha2FpYW4qKiBkYW4gKipFbGVrdHJvbmlrKiogbWVtaWxpa2kgKipiaWF5YSBwZXIgdW5pdCB5YW5nIGxlYmloIHJlbmRhaCoqIGRhbiAqKndha3R1IHBlbmdpcmltYW4geWFuZyBsZWJpaCBjZXBhdCoqIGRpYmFuZGluZ2thbiBkZW5nYW4gd2lsYXlhaCBsYWlubnlhLg0KLSAqKldpbGF5YWggVGltdXIqKiBtZW51bmp1a2thbiAqKndha3R1IHBlbmdpcmltYW4geWFuZyBsZWJpaCBjZXBhdCoqIHBhZGEgKipNYWthbmFuKiogZGliYW5kaW5na2FuIHdpbGF5YWggbGFpbm55YS4NCg0KIyMgKiozLiBLZXNpbXB1bGFuKioNCkJlcmRhc2Fya2FuIGFuYWxpc2lzLCBraXRhIGRhcGF0IG1lbnlpbXB1bGthbiBiYWh3YToNCg0KLSBKZW5pcyBiYXJhbmcgZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4gbGViaWggY2VwYXQ6IE1ha2FuYW4uDQotIEplbmlzIGJhcmFuZyBkZW5nYW4gYmlheWEgcGVyIHVuaXQgbGViaWggcmVuZGFoOiBQYWthaWFuLg0KLSBXaWxheWFoIGRlbmdhbiBraW5lcmphIHBlbmdpcmltYW4gdGVyYmFpazoNCiAgICAtIFdpbGF5YWggVXRhcmEgbWVtaWxpa2kgYmlheWEgbGViaWggcmVuZGFoIGRhbiB3YWt0dSBwZW5naXJpbWFuIGxlYmloIGNlcGF0IHVudHVrIEVsZWt0cm9uaWsgZGFuIFBha2FpYW4uDQogICAgLSBXaWxheWFoIFRpbXVyIG1lbWlsaWtpIHdha3R1IHBlbmdpcmltYW4geWFuZyBsZWJpaCBjZXBhdCB1bnR1ayBNYWthbmFuLg0KICAgIA0KVW50dWsgbWVuaW5na2F0a2FuIGtpbmVyamEgcGVuZ2lyaW1hbiBzZWNhcmEga2VzZWx1cnVoYW4sIHBlcnVzYWhhYW4gZGFwYXQgbGViaWggZm9rdXMgcGFkYSBNYWthbmFuIGRpIHdpbGF5YWggVGltdXIgeWFuZyBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIHlhbmcgbGViaWggY2VwYXQsIHNlcnRhIHBhZGEgUGFrYWlhbiBkaSB3aWxheWFoIFV0YXJhIHVudHVrIG1lbmd1cmFuZ2kgYmlheWEgcGVyIHVuaXQgZGFuIG1lbmluZ2thdGthbiBlZmlzaWVuc2kuDQoNCiMgKipLZXNpbXB1bGFuIEFLaGlyKioNClBlbnllYmFyYW4gZGF0YSBtZW51bmp1a2thbiBwZXJiZWRhYW4gc2lnbmlmaWthbiBkYWxhbSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiBhbnRhciB3aWxheWFoIGRhbiBqZW5pcyBiYXJhbmcuIFdpbGF5YWggVGVuZ2FoIG1lbWVybHVrYW4gcGVyaGF0aWFuIGxlYmloIHVudHVrIG1lbmdvcHRpbWFsa2FuIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuLCBzZW1lbnRhcmEgd2lsYXlhaCBVdGFyYSBkYW4gVGltdXIgZGFwYXQgZGlqYWRpa2FuIG1vZGVsIHVudHVrIGVmaXNpZW5zaSB5YW5nIGxlYmloIGJhaWsuIFN0cmF0ZWdpIHBlbmdlbG9sYWFuIHlhbmcgZGlzZXN1YWlrYW4gZGVuZ2FuIHBvbGEgcGVueWViYXJhbiBpbmkgZGFwYXQgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBvcGVyYXNpb25hbCBwZXJ1c2FoYWFuLg0KDQojICoqUmVmcmVuc2kqKg0KLSBEU2NpZW5jZWxhYnMuIChuLmQuKSBQZW5nYW50YXIgU3RhdGlzdGlrYSB1bnR1ayBTYWlucyBEYXRhLiBCb29rZG93bi4gUmV0cmlldmVkIGZyb20gPGEgaHJlZiA9ICJodHRwczovL2Jvb2tkb3duLm9yZy9kc2NpZW5jZWxhYnMvc3RhdGlzdGlrYV9kYXNhci9fYm9vay8iID4gS2xpayBkaXNpbmk8L2E+DQotIERyLiBBbml0YSBSYWhheXUsIFMuU2kuLCBNLlNpLlVrdXJhbiBQZW55ZWJhcmFuIERhdGEuIEJpbnVzIFVuaXZlcnNpdHkuIEJvb2tkb3duLiBSZXRyaXZlZCBmcm9tIDxhIGhyZWYgPSAiaHR0cHM6Ly9iaW51cy5hYy5pZC9tYWxhbmcvMjAyMi8wNC91a3VyYW4tcGVueWViYXJhbi1kYXRhLy8iID5rbGlrIGRpc2luaTwvYT4NCi0gS2hhdGliIEEuIExhdGllZi5Va3VyYW4gUGVueWViYXJhbiBEYXRhLlVJTi4gQm9va2Rvd24uIFJldHJpdmVkIGZyb20gbSA8YSBocmVmID0gImh0dHBzOi8vcmVwb3NpdG9yeS5hci1yYW5pcnkuYWMuaWQvaWQvZXByaW50L0EvMS83LVNldmVudGglMjBNZWV0aW5nJTIwLSUyMFVrdXJhbiUyMFBlbnllYmFyYW4lMjBEYXRhLnBkZi8iID4gS2xpayBkaXNpbmk8L2E+DQoNCg==