
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
1.Hitunglah rata-rata, median, dan standar deviasi untuk
masing-masing cabang.
1.1 Menghitung rata-rata untuk masing-masing Cabang.
Rumus Mean (Rata-rata):
\[
{Mean} = \frac{\sum x}{n}
\]
Dimana:
(\(ΣX\))=Jumlah dari semua nilai
data
(\(n\))= Jumlah data
Mean (Rata-rata) untuk Cabang A:
Data Cabang A sebagai berikut: 50, 55, 60, 65, 70
• Menjumlahkan semua nilai (\(ΣX\)):
\[
\sum X =50+ 55+ 60+ 65+ 70=300
\]
• Jumlah data (\(n\)): 5
\[
{Mean(Cabang A)}= \frac{300}{5} = 60
\]
Mean (Rata-rata) untuk Cabang B:
Data Cabang B sebagai berikut: 40, 50, 60, 70, 80
• Menjumlahkan semua nilai (\(ΣX\)):
\[
\sum X =40+ 50+ 60+ 70+ 80=300
\]
• Jumlah data (\(n\)): 5
\[
{Mean(Cabang B)}= \frac{300}{5} = 60
\]
Mean (Rata-rata) untuk Cabang C:
Data Cabang C sebagai berikut: 30, 30, 35, 40, 45
• Menjumlahkan semua nilai (\(ΣX\)):
\[
\sum X =30+ 30+ 35+ 40+ 45=180
\] • Jumlah data (\(n\)): 5
\[
{Mean(Cabang C)}= \frac{180}{5} = 36
\]
Mean (Rata-rata) untuk Cabang D:
Data Cabang D sebagai berikut: 70, 75, 80, 85, 90
• Menjumlahkan semua nilai (\(ΣX\)):
\[
\sum X =70+ 75+ 80+ 85+ 90=400
\] • Jumlah data (\(n\)): 5
\[
{Mean(Cabang D)}= \frac{400}{5} = 80
\]
1.2 Menghitung median untuk masing-masing Cabang .
1.3 Menghitung standar deviasi untuk masing-masing Cabang .
Rumus standar deviasi:
Standar deviasi (\(\sigma\)) untuk
data populasi dihitung menggunakan rumus:
\[
\sigma = \sqrt{\frac{\sum (x_i - \mu)^2}{n}}
\]
Di mana:
- \(\sigma\) = standar deviasi
- \(x_i\) = nilai data individu
- \(\mu\) = rata-rata data
- \(n\) = jumlah data
Berikut adalah perhitungan standar deviasi untuk keempat cabang:
Standar deviasi Cabang A: \(50,
55, 60, 65, 70\)
1. Hitung Rata-rata (\(\mu\)):
\[
\mu = \frac{\sum x_i}{n} = \frac{50 + 55 + 60 + 65 + 70}{5} =
\frac{300}{5} = 60
\]
2. Hitung Selisih Tiap Data dengan Rata-rata (\(x_i - \mu\)):
\[
50 - 60 = -10 \\
55 - 60 = -5 \\
60 - 60 = 0 \\
65 - 60 = 5 \\
70 - 60 = 10
\]
3. Kuadratkan Selisih (\((x_i -
\mu)^2\)):
\[
(-10)^2 = 100 \\
(-5)^2 = 25 \\
0^2 = 0 \\
5^2 = 25 \\
10^2 = 100
\]
4. Hitung Jumlah Kuadrat Selisih (\(\sum
(x_i - \mu)^2\)):
\[
\sum (x_i - \mu)^2 = 100 + 25 + 0 + 25 + 100 = 250
\]
5. Hitung Varians (\(\sigma^2\)):
\[
\sigma^2 = \frac{\sum (x_i - \mu)^2}{n} = \frac{250}{5} = 50
\]
6. Hitung Standar Deviasi (\(\sigma\)):
\[
\sigma = \sqrt{\sigma^2} = \sqrt{50} \approx 7.07
\]
Hasil Cabang A: Standar deviasi adalah \(\sigma \approx 7.07\).
Standar deviasi Cabang B: \(40,
50, 60, 70, 80\)
1. Hitung Rata-rata (\(\mu\)):
\[
\mu = \frac{\sum x_i}{n} = \frac{40 + 50 + 60 + 70 + 80}{5} =
\frac{300}{5} = 60
\]
2. Hitung Selisih Tiap Data dengan Rata-rata (\(x_i - \mu\)):
\[
40 - 60 = -20 \\
50 - 60 = -10 \\
60 - 60 = 0 \\
70 - 60 = 10 \\
80 - 60 = 20
\]
3. Kuadratkan Selisih (\((x_i -
\mu)^2\)):
\[
(-20)^2 = 400 \\
(-10)^2 = 100 \\
0^2 = 0 \\
10^2 = 100 \\
20^2 = 400
\]
4. Hitung Jumlah Kuadrat Selisih (\(\sum
(x_i - \mu)^2\)):
\[
\sum (x_i - \mu)^2 = 400 + 100 + 0 + 100 + 400 = 1000
\]
5. Hitung Varians (\(\sigma^2\)):
\[
\sigma^2 = \frac{\sum (x_i - \mu)^2}{n} = \frac{1000}{5} = 200
\]
6. Hitung Standar Deviasi (\(\sigma\)):
\[
\sigma = \sqrt{\sigma^2} = \sqrt{200} \approx 14.14
\]
Hasil Cabang B: Standar deviasi adalah \(\sigma \approx 14.14\).
Standar deviasi Cabang C: \(30,
30, 35, 40, 45\)
1. Hitung Rata-rata (\(\mu\)):
\[
\mu = \frac{\sum x_i}{n} = \frac{30 + 30 + 35 + 40 + 45}{5} =
\frac{180}{5} = 36
\]
2. Hitung Selisih Tiap Data dengan Rata-rata (\(x_i - \mu\)):
\[
30 - 36 = -6 \\
30 - 36 = -6 \\
35 - 36 = -1 \\
40 - 36 = 4 \\
45 - 36 = 9
\]
3. Kuadratkan Selisih (\((x_i -
\mu)^2\)):
\[
(-6)^2 = 36 \\
(-6)^2 = 36 \\
(-1)^2 = 1 \\
4^2 = 16 \\
9^2 = 81
\]
4. Hitung Jumlah Kuadrat Selisih (\(\sum
(x_i - \mu)^2\)):
\[
\sum (x_i - \mu)^2 = 36 + 36 + 1 + 16 + 81 = 170
\]
5. Hitung Varians (\(\sigma^2\)):
\[
\sigma^2 = \frac{\sum (x_i - \mu)^2}{n} = \frac{170}{5} = 34
\]
6. Hitung Standar Deviasi (\(\sigma\)):
\[
\sigma = \sqrt{\sigma^2} = \sqrt{34} \approx 5.83
\]
Hasil Cabang C: Standar deviasi adalah \(\sigma \approx 5.83\).
Standar deviasi Cabang D: \(70,
75, 80, 85, 90\)
1. Hitung Rata-rata (\(\mu\)):
\[
\mu = \frac{\sum x_i}{n} = \frac{70 + 75 + 80 + 85 + 90}{5} =
\frac{400}{5} = 80
\]
2. Hitung Selisih Tiap Data dengan Rata-rata (\(x_i - \mu\)):
\[
70 - 80 = -10 \\
75 - 80 = -5 \\
80 - 80 = 0 \\
85 - 80 = 5 \\
90 - 80 = 10
\]
3. Kuadratkan Selisih (\((x_i -
\mu)^2\)):
\[
(-10)^2 = 100 \\
(-5)^2 = 25 \\
0^2 = 0 \\
5^2 = 25 \\
10^2 = 100
\]
4. Hitung Jumlah Kuadrat Selisih (\(\sum
(x_i - \mu)^2\)):
\[
\sum (x_i - \mu)^2 = 100 + 25 + 0 + 25 + 100 = 250
\]
5. Hitung Varians (\(\sigma^2\)):
\[
\sigma^2 = \frac{\sum (x_i - \mu)^2}{n} = \frac{250}{5} = 50
\]
6. Hitung Standar Deviasi (\(\sigma\)):
\[
\sigma = \sqrt{\sigma^2} = \sqrt{50} \approx 7.07
\]
Hasil Cabang D: Standar deviasi adalah \(\sigma \approx 7.07\).
2.Cabang mana yang memiliki penyebaran data paling kecil? Jelaskan
alasannya.
Standar deviasi menunjukkan seberapa jauh data tersebar dari
rata-ratanya. Semakin kecil nilai standar deviasi, semakin dekat
nilai-nilai data terhadap rata-rata, artinya penyebaran datanya lebih
kecil.
Hasil Standar Deviasi untuk Keempat Cabang:
Cabang A: \(\sigma \approx
7.07\)
Cabang B: \(\sigma \approx
14.14\)
Cabang C: \(\sigma \approx
5.83\)
Cabang D: \(\sigma \approx
7.07\)
Analisis:
- Cabang C memiliki standar deviasi terkecil, yaitu \(\sigma \approx 5.83\).
- Artinya, data penjualan Cabang C memiliki variasi terkecil, dan
nilai-nilai penjualannya paling mendekati rata-rata \(\mu = 36\).
- Penyebaran yang kecil ini terjadi karena sebagian besar nilai data
berdekatan, seperti \(30, 30, 35, 40,
45\).
- Sebaliknya, Cabang B memiliki standar deviasi terbesar, yaitu \(\sigma \approx 14.14\).
- Data Cabang B memiliki penyebaran paling besar karena nilai-nilainya
lebih berjauhan, dengan rentang \(40 -
80\) yang lebar.
- Cabang A dan D memiliki standar deviasi yang sama, \(\sigma \approx 7.07\).
- Kedua cabang ini memiliki penyebaran yang sedang karena rentang data
mereka relatif seragam (\(50 - 70\)
untuk A dan \(70 - 90\) untuk D).
Kesimpulan Jawaban no 2: - Cabang dengan
Penyebaran Terkecil: Cabang C.
Penyebaran data Cabang C paling kecil karena memiliki standar deviasi
terkecil \(\sigma \approx 5.83\). Ini
menunjukkan bahwa nilai-nilai data penjualannya lebih konsisten dan
dekat dengan rata-rata dibandingkan cabang lainnya.
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 di semua datanya adalah:
Cabang C.
Target penjualan minimum: \(50\) juta rupiah.
- Cabang A :
- Rata-rata \(60 > 50\), yang
berarti secara umum kinerja cabang ini baik.
- Namun, semua data \((50, 55, 60, 65,
70)\) harus diperiksa.
- Hasil: Semua nilai \(\geq
50\), sehingga Cabang A memenuhi target.
- Cabang B:
- Rata-rata \(60 > 50\),
menunjukkan kinerja rata-rata baik.
- Namun, berdasarkan data Cabang B 0,50,60,70,80 ada nilai \(40\), yang \(<
50\).
- Hasil: Tidak semua data memenuhi target, tetapi
rata-rata di atas target menunjukkan hanya sebagian data gagal.
Cabang B tidak gagal di semua datanya.
- Cabang C :
- Rata-rata \(36 < 50\), artinya
kinerja cabang ini sangat rendah secara keseluruhan.
- Semua data \((30, 30, 35, 40, 45)\)
diperiksa, dan semuanya \(<
50\).
- Hasil: Semua nilai gagal mencapai target.
Cabang C gagal di semua datanya.
- Cabang D :
- Rata-rata \(80 > 50\),
menunjukkan kinerja sangat baik.
- Semua data \((70, 75, 80, 85, 90)\)
diperiksa, dan semuanya \(\geq
50\).
- Hasil: Semua nilai memenuhi target. Cabang
D memenuhi target.
Kesimpulan Jawaban no 3:
Rata-rata memberikan gambaran kinerja keseluruhan, tetapi
tidak cukup untuk menentukan apakah sebuah cabang gagal di semua
datanya. Misalnya:
Cabang B memiliki rata-rata \(60\) (di atas target), tetapi salah satu
datanya (\(40\)) gagal.
Cabang C memiliki rata-rata \(36\), yang juga konsisten dengan semua data
yang gagal.
Cabang yang gagal mencapai target di semua datanya adalah:
Cabang C.
Rata-rata \(\mu = 36\) memperkuat
analisis bahwa penjualan Cabang C jauh di bawah target secara
konsisten.
4.Buatlah diagram kotak (box plot) untuk memvisualisasikan
penyebaran data setiap cabang.
Tujuan pembuatan boxplot adalah untuk memberikan gambaran visual
penyebaran data penjualan dari setiap cabang, termasuk nilai minimum,
maksimum, median, dan variasi data melalui kuartil. Boxplot juga
membantu mendeteksi pencilan (outlier) dan memudahkan perbandingan
distribusi penjualan antar cabang, sehingga perusahaan dapat memahami
pola dan karakteristik data untuk mendukung pengambilan keputusan
bisnis.
- Outlier didefinisikan sebagai data yang terletak di
luar rentang: \[
\text{Lower Bound} = Q1 - 1.5 \times IQR
\] \[
\text{Upper Bound} = Q3 + 1.5 \times IQR
\] Di mana:
- \(Q1\) adalah kuartil pertama
(nilai di bawah median),
- \(Q3\) adalah kuartil ketiga (nilai
di atas median),
- \(IQR\) adalah
interquartile range, yaitu selisih antara \(Q3\) dan \(Q1\).
Jika data berada di luar rentang tersebut, maka data tersebut
dianggap sebagai outlier.
Mari kita hitung apakah ada outlier pada setiap cabang berdasarkan
data yang telah diberikan.
Berikut langkah-langkahnya:
- Hitung Q1, Q3, dan
IQR untuk setiap cabang.
- Tentukan Lower Bound dan Upper
Bound untuk mendeteksi apakah ada data yang termasuk
outlier.
Saya akan lakukan perhitungan ini untuk setiap cabang.
Langkah-langkah untuk Menentukan Outlier:
- Cabang A:
- Data: \(50, 55, 60, 65, 70\)
- Urutan Data: \(50, 55, 60, 65,
70\)
- Median (Q2): 60
- Q1 (Kuartil pertama): 55
- Q3 (Kuartil ketiga): 65
- IQR (Interquartile Range): \(Q3 - Q1 = 65 - 55 = 10\)
- Lower Bound: \(Q1 - 1.5
\times IQR = 55 - 1.5 \times 10 = 40\)
- Upper Bound: \(Q3 + 1.5
\times IQR = 65 + 1.5 \times 10 = 80\)
- Rentang Data (40 - 80): Semua data berada dalam
rentang ini, jadi tidak ada outlier.
- Cabang B:
- Data: \(40, 50, 60, 70, 80\)
- Urutan Data: \(40, 50, 60, 70,
80\)
- Median (Q2): 60
- Q1 (Kuartil pertama): 50
- Q3 (Kuartil ketiga): 70
- IQR: \(Q3 - Q1 = 70 - 50
= 20\)
- Lower Bound: \(Q1 - 1.5
\times IQR = 50 - 1.5 \times 20 = 20\)
- Upper Bound: \(Q3 + 1.5
\times IQR = 70 + 1.5 \times 20 = 100\)
- Rentang Data (20 - 100): Semua data berada dalam
rentang ini, jadi tidak ada outlier.
- Cabang C:
- Data: \(30, 30, 35, 40, 45\)
- Urutan Data: \(30, 30, 35, 40,
45\)
- Median (Q2): 35
- Q1 (Kuartil pertama): 30
- Q3 (Kuartil ketiga): 40
- IQR: \(Q3 - Q1 = 40 - 30
= 10\)
- Lower Bound: \(Q1 - 1.5
\times IQR = 30 - 1.5 \times 10 = 15\)
- Upper Bound: \(Q3 + 1.5
\times IQR = 40 + 1.5 \times 10 = 55\)
- Rentang Data (15 - 55): Semua data berada dalam
rentang ini, jadi tidak ada outlier.
- Cabang D:
- Data: \(70, 75, 80, 85, 90\)
- Urutan Data: \(70, 75, 80, 85,
90\)
- Median (Q2): 80
- Q1 (Kuartil pertama): 75
- Q3 (Kuartil ketiga): 85
- IQR: \(Q3 - Q1 = 85 - 75
= 10\)
- Lower Bound: \(Q1 - 1.5
\times IQR = 75 - 1.5 \times 10 = 60\)
- Upper Bound: \(Q3 + 1.5
\times IQR = 85 + 1.5 \times 10 = 100\)
- Rentang Data (60 - 100): Semua data berada dalam
rentang ini, jadi tidak ada outlier.
Berikut ini merupakan data keseluruhan
Latihan 2
Perusahaan XYZ mengelola pengiriman 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 pengiriman barang berdasarkan
wilayah dan jenis barang:
Utara |
Elektronik |
200 |
5 |
15,000 |
Selatan |
Pakaian |
150 |
8 |
8,000 |
Timur |
Makanan |
180 |
6 |
10,000 |
Barat |
Peralatan |
120 |
7 |
12,000 |
Tengah |
Elektronik |
250 |
4 |
14,000 |
Utara |
Pakaian |
300 |
9 |
8,500 |
Selatan |
Makanan |
220 |
7 |
9,500 |
Timur |
Peralatan |
140 |
5 |
11,000 |
Barat |
Elektronik |
180 |
6 |
14,500 |
Tengah |
Pakaian |
350 |
8 |
7,800 |
Utara |
Peralatan |
170 |
4 |
12,000 |
Selatan |
Elektronik |
250 |
6 |
16,000 |
Timur |
Pakaian |
190 |
7 |
8,200 |
Barat |
Makanan |
130 |
5 |
10,500 |
Tengah |
Peralatan |
180 |
5 |
11,500 |
1. Analisis Efisiensi Pengiriman:
1.1• Visualisasikan pengiriman barang berdasarkan jumlah barang,
waktu pengiriman, dan biaya per unit dengan menggunakan plot 3D.
1.2• Tentukan wilayah mana yang memiliki efisiensi pengiriman
terendah berdasarkan biaya per unit dan waktu pengiriman.
## # A tibble: 5 × 3
## Wilayah Total_Biaya Efisiensi_Biaya
## <chr> <dbl> <dbl>
## 1 Barat 5415000 12593.
## 2 Selatan 7290000 11758.
## 3 Tengah 8300000 10641.
## 4 Timur 4898000 9604.
## 5 Utara 7590000 11328.
wilayah Barat yang memiliki efisiensi pengiriman terendah
berdasarkan biaya per unit dan waktu pengiriman.
Semakin mahal biaya per unit suatu wilayah, maka wilayah tersebut
semakin tidak efisien dalam pengiriman barang. Hal ini
dikarenakan tingginya biaya per unit menunjukkan bahwa perusahaan
mengeluarkan lebih banyak biaya untuk setiap unit barang yang
dikirimkan, sehingga efisiensi operasional menjadi rendah. Berdasarkan
data:
Barat |
12,593 |
Paling tidak efisien (mahal) |
Selatan |
11,758 |
Kurang efisien |
Utara |
11,328 |
Relatif efisien |
Tengah |
10,641 |
Cukup efisien |
Timur |
9,604 |
Paling efisien (murah) |
Wilayah Barat memiliki biaya rata-rata per unit
tertinggi (Rp 12,593/unit), yang berarti wilayah ini
membutuhkan perhatian khusus untuk pengoptimalan. Sebaliknya, wilayah
Timur adalah yang paling efisien, dengan biaya
rata-rata terendah (Rp 9,604/unit).
Implikasi
- Biaya yang lebih mahal di wilayah Barat berarti pengiriman lebih
tidak efisien dibandingkan wilayah lain.
- Untuk meningkatkan efisiensi, perusahaan perlu menurunkan biaya per
unit di wilayah Barat, seperti:
- Mengurangi biaya transportasi dengan negosiasi
harga atau mencari alternatif lebih murah.
- Meningkatkan kapasitas pengiriman untuk
memaksimalkan efisiensi logistik.
Kesimpulan
Efisiensi pengiriman sangat bergantung pada rendahnya biaya per unit.
Wilayah dengan biaya per unit yang mahal (seperti Barat) cenderung
menjadi tidak efisien, sehingga memerlukan optimalisasi
strategi pengiriman.
2. Rekomendasi Operasional:
## # A tibble: 5 × 10
## Wilayah Rata_Rata_Waktu Median_Waktu SD_Waktu Rata_Rata_Barang Median_Barang
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Barat 6 6 1 143. 130
## 2 Selatan 7 7 1 207. 220
## 3 Tengah 5.67 5 2.08 260 250
## 4 Timur 6 6 1 170 180
## 5 Utara 6 5 2.65 223. 200
## # ℹ 4 more variables: SD_Barang <dbl>, Rata_Rata_Biaya <dbl>,
## # Median_Biaya <dbl>, SD_Biaya <dbl>
2.1• Berdasarkan hasil analisis, wilayah mana yang memerlukan
perhatian khusus untuk meningkatkan efisiensi pengiriman?
Berdasarkan Hasil Analisis
Wilayah yang Memerlukan Perhatian Khusus adalah Wilayah
Selatan
Wilayah Selatan:
Rata-rata waktu pengiriman tertinggi di antara semua wilayah
(7 jam).
Median jumlah barang yang dikirim cukup besar (220
unit), yang menunjukkan volume pengiriman tinggi.
Standard deviasi waktu pengiriman kecil (1 jam),
menunjukkan waktu pengiriman yang cukup konsisten, namun tetap relatif
lambat.
Rata-rata biaya per unit yang tidak disebutkan secara langsung
dalam tabel, namun jika rata-rata biaya per unit tinggi, ini menjadi
indikator tambahan.
Dari data ini, Wilayah Selatan memerlukan perhatian khusus
karena waktu pengiriman lebih lama dibandingkan wilayah lain, meskipun
volume barangnya tinggi. Efisiensi waktu pengiriman menjadi fokus
perbaikan.
2.2• Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di
wilayah tersebut?
Rekomendasi untuk Wilayah Selatan
2.2.1. Pengoptimalan Waktu Pengiriman
- Rancang Rute yang Lebih Pendek: Analisis ulang rute
transportasi dengan menggunakan perangkat lunak optimisasi rute untuk
mengurangi waktu perjalanan.
- Gunakan Transportasi Cepat: Pilih moda transportasi yang
lebih efisien, seperti kendaraan dengan kecepatan tinggi atau
transportasi berbasis rel jika memungkinkan.
- Penjadwalan yang Lebih Baik: Atur jadwal pengiriman pada
waktu dengan lalu lintas yang lebih lancar untuk menghindari
keterlambatan.
2.2.2. Efisiensi Biaya
- Konsolidasi Pengiriman: Gabungkan beberapa pengiriman
menjadi satu perjalanan untuk memanfaatkan kapasitas kendaraan secara
penuh.
- Negosiasi dengan Penyedia Logistik: Jika menggunakan
layanan logistik pihak ketiga, lakukan negosiasi ulang tarif untuk
mengurangi biaya per unit.
- Evaluasi Infrastruktur Logistik: Perbaiki jalan atau akses
ke titik distribusi di Wilayah Selatan untuk mengurangi biaya
perjalanan.
2.2.3. Peningkatan Manajemen Logistik
- Gudang Lebih Dekat: Jika jarak terlalu jauh, bangun gudang
penyimpanan sementara di dekat Wilayah Selatan untuk memperpendek jarak
pengiriman.
- Penggunaan Teknologi: Implementasikan sistem pelacakan
berbasis GPS untuk memantau dan memperbaiki waktu pengiriman secara
real-time.
- Peningkatan SDM: Latih karyawan logistik untuk mengelola
proses pengiriman lebih cepat dan efisien.
2.2.4. Fokus pada Barang dengan Volume Tinggi
- Pastikan barang dengan volume pengiriman tinggi (seperti pakaian dan
makanan di Wilayah Selatan) diprioritaskan dalam transportasi untuk
menghindari keterlambatan.
Dengan langkah-langkah ini, Wilayah Selatan dapat meningkatkan
efisiensi pengiriman baik dari segi waktu maupun biaya, sekaligus
mempertahankan kualitas layanan.
3. Kinerja Berdasarkan Jenis Barang:
## # A tibble: 15 × 5
## Wilayah Jenis_Barang Rata_Rata_Waktu Rata_Rata_Biaya Total_Jumlah_Barang
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 Barat Makanan 5 10500 130
## 2 Barat Elektronik 6 14500 180
## 3 Barat Peralatan 7 12000 120
## 4 Selatan Elektronik 6 16000 250
## 5 Selatan Makanan 7 9500 220
## 6 Selatan Pakaian 8 8000 150
## 7 Tengah Elektronik 4 14000 250
## 8 Tengah Peralatan 5 11500 180
## 9 Tengah Pakaian 8 7800 350
## 10 Timur Peralatan 5 11000 140
## 11 Timur Makanan 6 10000 180
## 12 Timur Pakaian 7 8200 190
## 13 Utara Peralatan 4 12000 170
## 14 Utara Elektronik 5 15000 200
## 15 Utara Pakaian 9 8500 300
3.1 Analisis kinerja pengiriman berdasarkan jenis barang dan
wilayah. Mana yang memiliki waktu pengiriman lebih cepat dan biaya per
unit lebih rendah?
3.1.1 Waktu Pengiriman Paling Cepat:
- Wilayah Tengah (Elektronik): 4 jam.
- Wilayah Utara (Peralatan): 4 jam.
3.1.2 Biaya Per Unit Paling Rendah:
- Wilayah Tengah (Pakaian): Rp 7,800/unit.
- Wilayah Selatan (Pakaian): Rp 8,000/unit.
3.1.3 Kombinasi Waktu Cepat dan Biaya Rendah:
- Wilayah Tengah (Elektronik): Waktu 4 jam dengan
biaya Rp 14,000/unit.
- Wilayah Selatan (Pakaian): Waktu 8 jam dengan biaya
Rp 8,000/unit (murah tetapi lebih lama).
3.1.4 Kesimpulan
- Jika fokus pada waktu pengiriman tercepat, wilayah
Tengah (Elektronik) dan Utara
(Peralatan) unggul.
- Jika fokus pada biaya per unit terendah, wilayah
Tengah (Pakaian) menjadi pilihan terbaik.
- Kombinasi waktu cepat dan biaya rendah tidak selalu tersedia secara
optimal. Elektronik di wilayah Tengah memiliki performa
terbaik dengan waktu cepat dan biaya relatif kompetitif.
Referensi
Bakti Siregar, M.Sc., CDS. (2024). Ukuran Pemusatan Data. Diambil
dari https://bookdown.org/dsciencelabs/statistika_dasar/_book/Ukuran_Penyebaran_Data.html
Febriani, S. (2022). Analisis Deskriptif Standar Deviasi. Jurnal
Pendidikan Tambusai, 6(1), 910-913.
Primandari, A. H., & Kesumawati, A. Ukuran Penyebaran
Data.
Chyan, P., Hasniati, H., Marsisno, W., Athar, G. A., Wasito, N.,
Minggani, F., … & Asbanu, D. E. (2024). Statistika Pendidikan:
Panduan Praktis Statistika untuk Pendidikan. Penerbit Mifandi Mandiri
Digital, 1(01).
Sutisna, I. (2020). Statistika penelitian. Universitas Negeri
Gorontalo, 1(1), 1-15.
LS0tDQp0aXRsZTogIlR1Z2FzIEluZGl2aWR1Ig0Kc3VidGl0bGU6ICJVa3VyYW4gUGVueWViYXJhbiBEYXRhIg0KYXV0aG9yOiAiT2xpdmlhIE1laWxpbmRhIERhdnRpbiBQZXNpcmVyb24iDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyINCi0tLQ0KDQo8aW1nIHNyYz0iV2hhdHNBcHAgSW1hZ2UgMjAyNC0xMi0wOCBhdCAxMC40MC4xOV83MjJmYTZmNS5qcGciIHdpZHRoPSIzMDAiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIgYWx0PSJGb3RvIERpcmkiPg0KDQoNCg0KIyAgTGF0aWhhbiAxDQoNClNlYnVhaCBwZXJ1c2FoYWFuIGluZ2luIG1lbWFoYW1pIGthcmFrdGVyaXN0aWsgcGVueWViYXJhbiBkYXRhIGhhc2lsIHBlbmp1YWxhbiBkYXJpIGVtcGF0IGNhYmFuZyAoQSwgQiwgQywgZGFuIEQpIHNlbGFtYSBzYXR1IGJ1bGFuIHRlcmFraGlyLiBEYXRhIHBlbmp1YWxhbiAoZGFsYW0ganV0YSBydXBpYWgpIGRhcmkga2VlbXBhdCBjYWJhbmcgdGVyc2VidXQgYWRhbGFoIHNlYmFnYWkgYmVyaWt1dDoNCg0K4oCiIENhYmFuZyBBOiA1MCwgNTUsIDYwLCA2NSwgNzANCg0K4oCiIENhYmFuZyBCOiA0MCwgNTAsIDYwLCA3MCwgODANCg0K4oCiIENhYmFuZyBDOiAzMCwgMzAsIDM1LCA0MCwgNDUNCg0K4oCiIENhYmFuZyBEOiA3MCwgNzUsIDgwLCA4NSwgOTANCg0KIyMgMS5IaXR1bmdsYWggcmF0YS1yYXRhLCBtZWRpYW4sIGRhbiBzdGFuZGFyIGRldmlhc2kgdW50dWsgbWFzaW5nLW1hc2luZyBjYWJhbmcuDQoNCg0KIyMjIDEuMSBNZW5naGl0dW5nIHJhdGEtcmF0YSB1bnR1ayBtYXNpbmctbWFzaW5nIENhYmFuZy4NCg0KIyMjICoqUnVtdXMgTWVhbiAoUmF0YS1yYXRhKSoqOg0KDQokJA0Ke01lYW59ID0gXGZyYWN7XHN1bSB4fXtufQ0KJCQNCg0KRGltYW5hOg0KDQooXCjOo1hcKSk9SnVtbGFoIGRhcmkgc2VtdWEgbmlsYWkgZGF0YSANCg0KKFwoblwpKT0gSnVtbGFoIGRhdGENCg0KLS0tDQoNCiMjIyBNZWFuIChSYXRhLXJhdGEpIHVudHVrIENhYmFuZyBBOg0KRGF0YSBDYWJhbmcgQSBzZWJhZ2FpIGJlcmlrdXQ6IDUwLCA1NSwgNjAsIDY1LCA3MA0KDQrigKIgTWVuanVtbGFoa2FuIHNlbXVhIG5pbGFpIChcKM6jWFwpKToNCg0KJCQNClxzdW0gWCA9NTArIDU1KyA2MCsgNjUrIDcwPTMwMA0KJCQNCg0K4oCiIEp1bWxhaCBkYXRhIChcKG5cKSk6IDUNCg0KJCQNCntNZWFuKENhYmFuZyBBKX09IFxmcmFjezMwMH17NX0gPSA2MA0KJCQNCg0KLS0tDQoNCiMjIyBNZWFuIChSYXRhLXJhdGEpIHVudHVrIENhYmFuZyBCOg0KRGF0YSBDYWJhbmcgQiBzZWJhZ2FpIGJlcmlrdXQ6IDQwLCA1MCwgNjAsIDcwLCA4MA0KDQrigKIgTWVuanVtbGFoa2FuIHNlbXVhIG5pbGFpIChcKM6jWFwpKToNCg0KJCQNClxzdW0gWCA9NDArIDUwKyA2MCsgNzArIDgwPTMwMA0KJCQNCg0K4oCiIEp1bWxhaCBkYXRhIChcKG5cKSk6IDUNCg0KJCQNCntNZWFuKENhYmFuZyBCKX09IFxmcmFjezMwMH17NX0gPSA2MA0KJCQNCg0KLS0tDQoNCiMjIyBNZWFuIChSYXRhLXJhdGEpIHVudHVrIENhYmFuZyBDOg0KRGF0YSBDYWJhbmcgQyBzZWJhZ2FpIGJlcmlrdXQ6IDMwLCAzMCwgMzUsIDQwLCA0NQ0KDQrigKIgTWVuanVtbGFoa2FuIHNlbXVhIG5pbGFpIChcKM6jWFwpKToNCg0KJCQNClxzdW0gWCA9MzArIDMwKyAzNSsgNDArIDQ1PTE4MA0KJCQNCuKAoiBKdW1sYWggZGF0YSAoXChuXCkpOiA1DQoNCiQkDQp7TWVhbihDYWJhbmcgQyl9PSBcZnJhY3sxODB9ezV9ID0gMzYNCiQkDQoNCi0tLQ0KDQojIyMgTWVhbiAoUmF0YS1yYXRhKSB1bnR1ayBDYWJhbmcgRDoNCkRhdGEgQ2FiYW5nIEQgc2ViYWdhaSBiZXJpa3V0OiA3MCwgNzUsIDgwLCA4NSwgOTANCg0K4oCiIE1lbmp1bWxhaGthbiBzZW11YSBuaWxhaSAoXCjOo1hcKSk6DQoNCiQkDQpcc3VtIFggPTcwKyA3NSsgODArIDg1KyA5MD00MDANCiQkDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNQ0KDQokJA0Ke01lYW4oQ2FiYW5nIEQpfT0gXGZyYWN7NDAwfXs1fSA9IDgwDQokJA0KDQojIyMgMS4yIE1lbmdoaXR1bmcgbWVkaWFuIHVudHVrIG1hc2luZy1tYXNpbmcgQ2FiYW5nIC4NCg0KIyMjICoqUnVtdXMgUG9zaXNpIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSoqOg0KDQpVbnR1ayBNZW5lbnR1a2FuIG5pbGFpIG1lZGlhbiBwYWRhIHN1YXR1IGRhdGEgYWRhcHVuIGxhbmdrYWggeWFuZyBoYXJ1cyBkaSBrZXJqYWthbiB5YWl0dSBkZW5nYW4gbWVuZ3VydXRrYW4gdGVybGViaWggZGFodWx1IGRhdGEgeWFuZyBhZGEsbGFsdSBuaWxhaSB0ZW5nYWggZGl0ZW50dWthbiBiZXJkYXNhcmthbiB1cnV0YW4gcG9zaXNpIG5pbGFpIG1lZGlhbiwgcGFkYSBkYXRhIHNvYWwgbGF0aWhhbiAxIGluaSBrZWJldHVsYW4gc2VtdWEganVtbGFoIGRhdGFueWEgYmVybmlsYWkgZ2FuamlsIG1ha2EgbWVuZ2d1bmFrYW4gcnVtdXMgcG9zaXNpIG1lZGlhbiBzZWJhZ2FpIGJlcmlrdXQuDQoNCiQkDQp7UG9zaXNpIE1lZGlhbn0gPSBcZnJhY3tuKzF9ezJ9DQokJA0KRGltYW5hOg0KDQooXChuXCkpPSBKdW1sYWggZGF0YQ0KDQotLS0NCg0KIyMjIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSB1bnR1ayBDYWJhbmcgQToNCkRhdGEgQ2FiYW5nIEEgc2ViYWdhaSBiZXJpa3V0OiA1MCwgNTUsIDYwLCA2NSwgNzANCg0K4oCiIFVydXRhbiBEYXRhOg0KDQokJA0KNTAsIDU1LCA2MCwgNjUsIDcwDQokJA0KDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNSAoZ2FuamlsKQ0KDQrigKIgUG9zaXNpIE1lZGlhbjoNCg0KJCQNCntQb3Npc2kgTWVkaWFufSA9IFxmcmFjezUrMX17Mn09Mw0KJCQNCg0K4oCiIEphZGksIG1lZGlhbiBhZGFsYWggbmlsYWkga2UtMyBwYWRhIENhYmFuZyBBLCB5YWl0dSA2MA0KDQotLS0NCg0KIyMjIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSB1bnR1ayBDYWJhbmcgQjoNCkRhdGEgQ2FiYW5nIEIgc2ViYWdhaSBiZXJpa3V0OiA0MCwgNTAsIDYwLCA3MCwgODANCg0K4oCiIFVydXRhbiBEYXRhOg0KDQokJA0KNDAsIDUwLCA2MCwgNzAsIDgwDQokJA0KDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNSAoZ2FuamlsKQ0KDQrigKIgUG9zaXNpIE1lZGlhbjoNCg0KJCQNCntQb3Npc2kgTWVkaWFufSA9IFxmcmFjezUrMX17Mn09Mw0KJCQNCg0K4oCiIEphZGksIG1lZGlhbiBhZGFsYWggbmlsYWkga2UtMyBwYWRhIENhYmFuZyBCLCB5YWl0dSA2MA0KDQotLS0NCg0KIyMjIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSB1bnR1ayBDYWJhbmcgQzoNCkRhdGEgQ2FiYW5nIEMgc2ViYWdhaSBiZXJpa3V0OiAzMCwgMzAsIDM1LCA0MCwgNDUNCg0K4oCiIFVydXRhbiBEYXRhOg0KDQokJA0KMzAsIDMwLCAzNSwgNDAsIDQ1DQokJA0KDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNSAoZ2FuamlsKQ0KDQrigKIgUG9zaXNpIE1lZGlhbjoNCg0KJCQNCntQb3Npc2kgTWVkaWFufSA9IFxmcmFjezUrMX17Mn09Mw0KJCQNCg0K4oCiIEphZGksIG1lZGlhbiBhZGFsYWggbmlsYWkga2UtMyBwYWRhIENhYmFuZyBDLCB5YWl0dSAzNQ0KDQotLS0NCg0KIyMjIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSB1bnR1ayBDYWJhbmcgRDoNCkRhdGEgQ2FiYW5nIEQgc2ViYWdhaSBiZXJpa3V0OiA3MCwgNzUsIDgwLCA4NSwgOTANCg0K4oCiIFVydXRhbiBEYXRhOg0KDQokJA0KNzAsIDc1LCA4MCwgODUsIDkwDQokJA0KDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNSAoZ2FuamlsKQ0KDQrigKIgUG9zaXNpIE1lZGlhbjoNCg0KJCQNCntQb3Npc2kgTWVkaWFufSA9IFxmcmFjezUrMX17Mn09Mw0KJCQNCg0K4oCiIEphZGksIG1lZGlhbiBhZGFsYWggbmlsYWkga2UtMyBwYWRhIENhYmFuZyBELCB5YWl0dSA4MA0KDQoNCiMjIyAxLjMgTWVuZ2hpdHVuZyBzdGFuZGFyIGRldmlhc2kgdW50dWsgbWFzaW5nLW1hc2luZyBDYWJhbmcgLg0KDQojIyMgKipSdW11cyBzdGFuZGFyIGRldmlhc2kqKjoNCg0KU3RhbmRhciBkZXZpYXNpIChcKFxzaWdtYVwpKSB1bnR1ayBkYXRhIHBvcHVsYXNpIGRpaGl0dW5nIG1lbmdndW5ha2FuIHJ1bXVzOg0KDQpcWw0KXHNpZ21hID0gXHNxcnR7XGZyYWN7XHN1bSAoeF9pIC0gXG11KV4yfXtufX0NClxdDQoNCkRpIG1hbmE6ICANCi0gXChcc2lnbWFcKSA9IHN0YW5kYXIgZGV2aWFzaSAgDQotIFwoeF9pXCkgPSBuaWxhaSBkYXRhIGluZGl2aWR1ICANCi0gXChcbXVcKSA9IHJhdGEtcmF0YSBkYXRhICANCi0gXChuXCnCoD3CoGp1bWxhaMKgZGF0YQ0KDQotLS0NCg0KQmVyaWt1dCBhZGFsYWggcGVyaGl0dW5nYW4gc3RhbmRhciBkZXZpYXNpIHVudHVrIGtlZW1wYXQgY2FiYW5nOg0KDQoNCiMjIyAqKlN0YW5kYXIgZGV2aWFzaSBDYWJhbmcgQTogXCg1MCwgNTUsIDYwLCA2NSwgNzBcKSoqDQoNCiMjIyMgMS4gSGl0dW5nIFJhdGEtcmF0YSAoXChcbXVcKSk6DQpcWw0KXG11ID0gXGZyYWN7XHN1bSB4X2l9e259ID0gXGZyYWN7NTAgKyA1NSArIDYwICsgNjUgKyA3MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANClxdDQoNCiMjIyMgMi4gSGl0dW5nIFNlbGlzaWggVGlhcCBEYXRhIGRlbmdhbiBSYXRhLXJhdGEgKFwoeF9pIC0gXG11XCkpOg0KXFsNCjUwIC0gNjAgPSAtMTAgXFwNCjU1IC0gNjAgPSAtNSBcXA0KNjAgLSA2MCA9IDAgXFwNCjY1IC0gNjAgPSA1IFxcDQo3MCAtIDYwID0gMTANClxdDQoNCiMjIyMgMy4gS3VhZHJhdGthbiBTZWxpc2loIChcKCh4X2kgLSBcbXUpXjJcKSk6DQpcWw0KKC0xMCleMiA9IDEwMCBcXA0KKC01KV4yID0gMjUgXFwNCjBeMiA9IDAgXFwNCjVeMiA9IDI1IFxcDQoxMF4yID0gMTAwDQpcXQ0KDQojIyMjIDQuIEhpdHVuZyBKdW1sYWggS3VhZHJhdCBTZWxpc2loIChcKFxzdW0gKHhfaSAtIFxtdSleMlwpKToNClxbDQpcc3VtICh4X2kgLSBcbXUpXjIgPSAxMDAgKyAyNSArIDAgKyAyNSArIDEwMCA9IDI1MA0KXF0NCg0KIyMjIyA1LiBIaXR1bmcgVmFyaWFucyAoXChcc2lnbWFeMlwpKToNClxbDQpcc2lnbWFeMiA9IFxmcmFje1xzdW0gKHhfaSAtIFxtdSleMn17bn0gPSBcZnJhY3syNTB9ezV9ID0gNTANClxdDQoNCiMjIyMgNi4gSGl0dW5nIFN0YW5kYXIgRGV2aWFzaSAoXChcc2lnbWFcKSk6DQpcWw0KXHNpZ21hID0gXHNxcnR7XHNpZ21hXjJ9ID0gXHNxcnR7NTB9IFxhcHByb3ggNy4wNw0KXF0NCg0KKipIYXNpbCBDYWJhbmcgQTogU3RhbmRhciBkZXZpYXNpIGFkYWxhaCBcKCBcc2lnbWEgXGFwcHJveCA3LjA3IFwpLioqDQoNCg0KLS0tDQoNCiMjIyAqKlN0YW5kYXIgZGV2aWFzaSBDYWJhbmcgQjogXCg0MCwgNTAsIDYwLCA3MCwgODBcKSoqDQoNCiMjIyMgMS4gSGl0dW5nIFJhdGEtcmF0YSAoXChcbXVcKSk6DQpcWw0KXG11ID0gXGZyYWN7XHN1bSB4X2l9e259ID0gXGZyYWN7NDAgKyA1MCArIDYwICsgNzAgKyA4MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANClxdDQoNCiMjIyMgMi4gSGl0dW5nIFNlbGlzaWggVGlhcCBEYXRhIGRlbmdhbiBSYXRhLXJhdGEgKFwoeF9pIC0gXG11XCkpOg0KXFsNCjQwIC0gNjAgPSAtMjAgXFwNCjUwIC0gNjAgPSAtMTAgXFwNCjYwIC0gNjAgPSAwIFxcDQo3MCAtIDYwID0gMTAgXFwNCjgwIC0gNjAgPSAyMA0KXF0NCg0KIyMjIyAzLiBLdWFkcmF0a2FuIFNlbGlzaWggKFwoKHhfaSAtIFxtdSleMlwpKToNClxbDQooLTIwKV4yID0gNDAwIFxcDQooLTEwKV4yID0gMTAwIFxcDQowXjIgPSAwIFxcDQoxMF4yID0gMTAwIFxcDQoyMF4yID0gNDAwDQpcXQ0KDQojIyMjIDQuIEhpdHVuZyBKdW1sYWggS3VhZHJhdCBTZWxpc2loIChcKFxzdW0gKHhfaSAtIFxtdSleMlwpKToNClxbDQpcc3VtICh4X2kgLSBcbXUpXjIgPSA0MDAgKyAxMDAgKyAwICsgMTAwICsgNDAwID0gMTAwMA0KXF0NCg0KIyMjIyA1LiBIaXR1bmcgVmFyaWFucyAoXChcc2lnbWFeMlwpKToNClxbDQpcc2lnbWFeMiA9IFxmcmFje1xzdW0gKHhfaSAtIFxtdSleMn17bn0gPSBcZnJhY3sxMDAwfXs1fSA9IDIwMA0KXF0NCg0KIyMjIyA2LiBIaXR1bmcgU3RhbmRhciBEZXZpYXNpIChcKFxzaWdtYVwpKToNClxbDQpcc2lnbWEgPSBcc3FydHtcc2lnbWFeMn0gPSBcc3FydHsyMDB9IFxhcHByb3ggMTQuMTQNClxdDQoNCioqSGFzaWwgQ2FiYW5nIEI6IFN0YW5kYXIgZGV2aWFzaSBhZGFsYWggXCggXHNpZ21hIFxhcHByb3ggMTQuMTQgXCkuKioNCg0KDQotLS0NCg0KIyMjICoqU3RhbmRhciBkZXZpYXNpIENhYmFuZyBDOiBcKDMwLCAzMCwgMzUsIDQwLCA0NVwpKioNCg0KIyMjIyAxLiBIaXR1bmcgUmF0YS1yYXRhIChcKFxtdVwpKToNClxbDQpcbXUgPSBcZnJhY3tcc3VtIHhfaX17bn0gPSBcZnJhY3szMCArIDMwICsgMzUgKyA0MCArIDQ1fXs1fSA9IFxmcmFjezE4MH17NX0gPSAzNg0KXF0NCg0KIyMjIyAyLiBIaXR1bmcgU2VsaXNpaCBUaWFwIERhdGEgZGVuZ2FuIFJhdGEtcmF0YSAoXCh4X2kgLSBcbXVcKSk6DQpcWw0KMzAgLSAzNiA9IC02IFxcDQozMCAtIDM2ID0gLTYgXFwNCjM1IC0gMzYgPSAtMSBcXA0KNDAgLSAzNiA9IDQgXFwNCjQ1IC0gMzYgPSA5DQpcXQ0KDQojIyMjIDMuIEt1YWRyYXRrYW4gU2VsaXNpaCAoXCgoeF9pIC0gXG11KV4yXCkpOg0KXFsNCigtNileMiA9IDM2IFxcDQooLTYpXjIgPSAzNiBcXA0KKC0xKV4yID0gMSBcXA0KNF4yID0gMTYgXFwNCjleMiA9IDgxDQpcXQ0KDQojIyMjIDQuIEhpdHVuZyBKdW1sYWggS3VhZHJhdCBTZWxpc2loIChcKFxzdW0gKHhfaSAtIFxtdSleMlwpKToNClxbDQpcc3VtICh4X2kgLSBcbXUpXjIgPSAzNiArIDM2ICsgMSArIDE2ICsgODEgPSAxNzANClxdDQoNCiMjIyMgNS4gSGl0dW5nIFZhcmlhbnMgKFwoXHNpZ21hXjJcKSk6DQpcWw0KXHNpZ21hXjIgPSBcZnJhY3tcc3VtICh4X2kgLSBcbXUpXjJ9e259ID0gXGZyYWN7MTcwfXs1fSA9IDM0DQpcXQ0KDQojIyMjIDYuIEhpdHVuZyBTdGFuZGFyIERldmlhc2kgKFwoXHNpZ21hXCkpOg0KXFsNClxzaWdtYSA9IFxzcXJ0e1xzaWdtYV4yfSA9IFxzcXJ0ezM0fSBcYXBwcm94IDUuODMNClxdDQoNCioqSGFzaWwgQ2FiYW5nIEM6IFN0YW5kYXIgZGV2aWFzaSBhZGFsYWggXCggXHNpZ21hIFxhcHByb3ggNS44MyBcKS4qKg0KDQoNCi0tLQ0KDQojIyMgKipTdGFuZGFyIGRldmlhc2kgQ2FiYW5nIEQ6IFwoNzAsIDc1LCA4MCwgODUsIDkwXCkqKg0KDQojIyMjIDEuIEhpdHVuZyBSYXRhLXJhdGEgKFwoXG11XCkpOg0KXFsNClxtdSA9IFxmcmFje1xzdW0geF9pfXtufSA9IFxmcmFjezcwICsgNzUgKyA4MCArIDg1ICsgOTB9ezV9ID0gXGZyYWN7NDAwfXs1fSA9IDgwDQpcXQ0KDQojIyMjIDIuIEhpdHVuZyBTZWxpc2loIFRpYXAgRGF0YSBkZW5nYW4gUmF0YS1yYXRhIChcKHhfaSAtIFxtdVwpKToNClxbDQo3MCAtIDgwID0gLTEwIFxcDQo3NSAtIDgwID0gLTUgXFwNCjgwIC0gODAgPSAwIFxcDQo4NSAtIDgwID0gNSBcXA0KOTAgLSA4MCA9IDEwDQpcXQ0KDQojIyMjIDMuIEt1YWRyYXRrYW4gU2VsaXNpaCAoXCgoeF9pIC0gXG11KV4yXCkpOg0KXFsNCigtMTApXjIgPSAxMDAgXFwNCigtNSleMiA9IDI1IFxcDQowXjIgPSAwIFxcDQo1XjIgPSAyNSBcXA0KMTBeMiA9IDEwMA0KXF0NCg0KIyMjIyA0LiBIaXR1bmcgSnVtbGFoIEt1YWRyYXQgU2VsaXNpaCAoXChcc3VtICh4X2kgLSBcbXUpXjJcKSk6DQpcWw0KXHN1bSAoeF9pIC0gXG11KV4yID0gMTAwICsgMjUgKyAwICsgMjUgKyAxMDAgPSAyNTANClxdDQoNCiMjIyMgNS4gSGl0dW5nIFZhcmlhbnMgKFwoXHNpZ21hXjJcKSk6DQpcWw0KXHNpZ21hXjIgPSBcZnJhY3tcc3VtICh4X2kgLSBcbXUpXjJ9e259ID0gXGZyYWN7MjUwfXs1fSA9IDUwDQpcXQ0KDQojIyMjIDYuIEhpdHVuZyBTdGFuZGFyIERldmlhc2kgKFwoXHNpZ21hXCkpOg0KXFsNClxzaWdtYSA9IFxzcXJ0e1xzaWdtYV4yfSA9IFxzcXJ0ezUwfSBcYXBwcm94IDcuMDcNClxdDQoNCioqSGFzaWwgQ2FiYW5nIEQ6IFN0YW5kYXIgZGV2aWFzaSBhZGFsYWggXCggXHNpZ21hIFxhcHByb3ggNy4wNyBcKS4qKg0KDQoNCi0tLQ0KDQoNCiMjIDIuQ2FiYW5nIG1hbmEgeWFuZyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsPyBKZWxhc2thbiBhbGFzYW5ueWEuDQoNClN0YW5kYXIgZGV2aWFzaSBtZW51bmp1a2thbiBzZWJlcmFwYSBqYXVoIGRhdGEgdGVyc2ViYXIgZGFyaSByYXRhLXJhdGFueWEuIFNlbWFraW4ga2VjaWwgbmlsYWkgc3RhbmRhciBkZXZpYXNpLCBzZW1ha2luIGRla2F0IG5pbGFpLW5pbGFpIGRhdGEgdGVyaGFkYXAgcmF0YS1yYXRhLCBhcnRpbnlhIHBlbnllYmFyYW4gZGF0YW55YSBsZWJpaCBrZWNpbC4NCg0KKipIYXNpbCBTdGFuZGFyIERldmlhc2kgdW50dWsgS2VlbXBhdCBDYWJhbmc6KioNCg0KLSBDYWJhbmcgQTogXCggXHNpZ21hIFxhcHByb3ggNy4wNyBcKQ0KDQotIENhYmFuZyBCOiBcKCBcc2lnbWEgXGFwcHJveCAxNC4xNCBcKQ0KDQotIENhYmFuZyBDOiBcKCBcc2lnbWEgXGFwcHJveCA1LjgzIFwpDQoNCi0gQ2FiYW5nIEQ6IFwoIFxzaWdtYSBcYXBwcm94IDcuMDcgXCkNCg0KKipBbmFsaXNpczoqKg0KDQoxLiBDYWJhbmcgQyBtZW1pbGlraSBzdGFuZGFyIGRldmlhc2kgdGVya2VjaWwsIHlhaXR1IFwoIFxzaWdtYSBcYXBwcm94IDUuODMgXCkuIA0KICAgLSBBcnRpbnlhLCBkYXRhIHBlbmp1YWxhbiBDYWJhbmcgQyBtZW1pbGlraSB2YXJpYXNpIHRlcmtlY2lsLCBkYW4gbmlsYWktbmlsYWkgcGVuanVhbGFubnlhIHBhbGluZyBtZW5kZWthdGkgcmF0YS1yYXRhIFwoIFxtdSA9IDM2IFwpLg0KICAgLSBQZW55ZWJhcmFuIHlhbmcga2VjaWwgaW5pIHRlcmphZGkga2FyZW5hIHNlYmFnaWFuIGJlc2FyIG5pbGFpIGRhdGEgYmVyZGVrYXRhbiwgc2VwZXJ0aSBcKCAzMCwgMzAsIDM1LCA0MCwgNDUgXCkuDQoNCjIuIFNlYmFsaWtueWEsIENhYmFuZyBCIG1lbWlsaWtpIHN0YW5kYXIgZGV2aWFzaSB0ZXJiZXNhciwgeWFpdHUgXCggXHNpZ21hIFxhcHByb3ggMTQuMTQgXCkuIA0KICAgLSBEYXRhIENhYmFuZyBCIG1lbWlsaWtpIHBlbnllYmFyYW4gcGFsaW5nIGJlc2FyIGthcmVuYSBuaWxhaS1uaWxhaW55YSBsZWJpaCBiZXJqYXVoYW4sIGRlbmdhbiByZW50YW5nIFwoIDQwIC0gODAgXCkgeWFuZyBsZWJhci4NCg0KMy4gQ2FiYW5nIEEgZGFuIEQgbWVtaWxpa2kgc3RhbmRhciBkZXZpYXNpIHlhbmcgc2FtYSwgXCggXHNpZ21hIFxhcHByb3ggNy4wNyBcKS4gDQogICAtIEtlZHVhIGNhYmFuZyBpbmkgbWVtaWxpa2kgcGVueWViYXJhbiB5YW5nIHNlZGFuZyBrYXJlbmEgcmVudGFuZyBkYXRhIG1lcmVrYSByZWxhdGlmIHNlcmFnYW0gKFwoIDUwIC0gNzAgXCkgdW50dWsgQSBkYW4gXCggNzAgLSA5MCBcKSB1bnR1ayBEKS4NCg0KKipLZXNpbXB1bGFuIEphd2FiYW4gbm8gMjoqKg0KLSAqKkNhYmFuZyBkZW5nYW4gUGVueWViYXJhbiBUZXJrZWNpbDogQ2FiYW5nIEMuKiogIA0KICBQZW55ZWJhcmFuIGRhdGEgQ2FiYW5nIEMgcGFsaW5nIGtlY2lsIGthcmVuYSBtZW1pbGlraSBzdGFuZGFyIGRldmlhc2kgdGVya2VjaWwgXCggXHNpZ21hIFxhcHByb3ggNS44MyBcKS4gSW5pIG1lbnVuanVra2FuIGJhaHdhIG5pbGFpLW5pbGFpIGRhdGEgcGVuanVhbGFubnlhIGxlYmloIGtvbnNpc3RlbiBkYW4gZGVrYXQgZGVuZ2FuIHJhdGEtcmF0YSBkaWJhbmRpbmdrYW4gY2FiYW5nIGxhaW5ueWEuIA0KDQoNCiMjIDMuSmlrYSB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0gYWRhbGFoIDUwIGp1dGEgcnVwaWFoLCBjYWJhbmcgbWFuYSBzYWphIHlhbmcgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IGRpIHNlbXVhIGRhdGFueWE/DQoNCkNhYmFuZyB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBzZWJlc2FyIDUwIGp1dGEgcnVwaWFoIGRpIHNlbXVhIGRhdGFueWEgYWRhbGFoOg0KDQoqKkNhYmFuZyBDLioqDQoNCioqVGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtOioqIFwoIDUwIFwpIGp1dGEgcnVwaWFoLiAgDQoNCg0KMS4gKipDYWJhbmcgQSA6KioNCiAgIC0gUmF0YS1yYXRhIFwoIDYwID4gNTAgXCksIHlhbmcgYmVyYXJ0aSBzZWNhcmEgdW11bSBraW5lcmphIGNhYmFuZyBpbmkgYmFpay4NCiAgIC0gTmFtdW4sIHNlbXVhIGRhdGEgXCggKDUwLCA1NSwgNjAsIDY1LCA3MCkgXCkgaGFydXMgZGlwZXJpa3NhLiAgDQogICAtICoqSGFzaWw6KiogU2VtdWEgbmlsYWkgXCggXGdlcSA1MCBcKSwgc2VoaW5nZ2EgKipDYWJhbmcgQSBtZW1lbnVoaSB0YXJnZXQuKioNCg0KMi4gKipDYWJhbmcgQjoqKg0KICAgLSBSYXRhLXJhdGEgXCggNjAgPiA1MCBcKSwgbWVudW5qdWtrYW4ga2luZXJqYSByYXRhLXJhdGEgYmFpay4NCiAgIC0gTmFtdW4sIGJlcmRhc2Fya2FuIGRhdGEgQ2FiYW5nIEIgMCw1MCw2MCw3MCw4MCBhZGEgbmlsYWkgXCggNDAgXCksIHlhbmcgXCggPCA1MCBcKS4gIA0KICAgLSAqKkhhc2lsOioqIFRpZGFrIHNlbXVhIGRhdGEgbWVtZW51aGkgdGFyZ2V0LCB0ZXRhcGkgcmF0YS1yYXRhIGRpIGF0YXMgdGFyZ2V0IG1lbnVuanVra2FuIGhhbnlhIHNlYmFnaWFuIGRhdGEgZ2FnYWwuICoqQ2FiYW5nIEIgdGlkYWsgZ2FnYWwgZGkgc2VtdWEgZGF0YW55YS4qKg0KDQozLiAqKkNhYmFuZyBDIDoqKg0KICAgLSBSYXRhLXJhdGEgXCggMzYgPCA1MCBcKSwgYXJ0aW55YSBraW5lcmphIGNhYmFuZyBpbmkgc2FuZ2F0IHJlbmRhaCBzZWNhcmEga2VzZWx1cnVoYW4uDQogICAtIFNlbXVhIGRhdGEgXCggKDMwLCAzMCwgMzUsIDQwLCA0NSkgXCkgZGlwZXJpa3NhLCBkYW4gc2VtdWFueWEgXCggPCA1MCBcKS4gIA0KICAgLSAqKkhhc2lsOioqIFNlbXVhIG5pbGFpIGdhZ2FsIG1lbmNhcGFpIHRhcmdldC4gKipDYWJhbmcgQyBnYWdhbCBkaSBzZW11YSBkYXRhbnlhLioqDQoNCjQuICoqQ2FiYW5nIEQgOioqDQogICAtIFJhdGEtcmF0YSBcKCA4MCA+IDUwIFwpLCBtZW51bmp1a2thbiBraW5lcmphIHNhbmdhdCBiYWlrLg0KICAgLSBTZW11YSBkYXRhIFwoICg3MCwgNzUsIDgwLCA4NSwgOTApIFwpIGRpcGVyaWtzYSwgZGFuIHNlbXVhbnlhIFwoIFxnZXEgNTAgXCkuICANCiAgIC0gKipIYXNpbDoqKiBTZW11YSBuaWxhaSBtZW1lbnVoaSB0YXJnZXQuICoqQ2FiYW5nIEQgbWVtZW51aGkgdGFyZ2V0LioqDQoNCg0KKipLZXNpbXB1bGFuIEphd2FiYW4gbm8gMzoqKg0KDQpSYXRhLXJhdGEgbWVtYmVyaWthbiBnYW1iYXJhbiBraW5lcmphIGtlc2VsdXJ1aGFuLCB0ZXRhcGkgKip0aWRhayBjdWt1cCB1bnR1ayBtZW5lbnR1a2FuIGFwYWthaCBzZWJ1YWggY2FiYW5nIGdhZ2FsIGRpIHNlbXVhIGRhdGFueWEqKi4gTWlzYWxueWE6DQoNCi0gQ2FiYW5nIEIgbWVtaWxpa2kgcmF0YS1yYXRhIFwoIDYwIFwpIChkaSBhdGFzIHRhcmdldCksIHRldGFwaSBzYWxhaCBzYXR1IGRhdGFueWEgKFwoIDQwIFwpKSBnYWdhbC4NCg0KLSBDYWJhbmcgQyBtZW1pbGlraSByYXRhLXJhdGEgXCggMzYgXCksIHlhbmcganVnYSBrb25zaXN0ZW4gZGVuZ2FuIHNlbXVhIGRhdGEgeWFuZyBnYWdhbC4NCg0KKipDYWJhbmcgeWFuZyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgc2VtdWEgZGF0YW55YSBhZGFsYWg6IF9DYWJhbmcgQ18uKiogIA0KUmF0YS1yYXRhIFwoIFxtdSA9IDM2IFwpIG1lbXBlcmt1YXQgYW5hbGlzaXMgYmFod2EgcGVuanVhbGFuIENhYmFuZyBDIGphdWggZGkgYmF3YWggdGFyZ2V0IHNlY2FyYSBrb25zaXN0ZW4uDQoNCiMjIDQuQnVhdGxhaCBkaWFncmFtIGtvdGFrIChib3ggcGxvdCkgdW50dWsgbWVtdmlzdWFsaXNhc2lrYW4gcGVueWViYXJhbiBkYXRhIHNldGlhcCBjYWJhbmcuDQoNClR1anVhbiBwZW1idWF0YW4gYm94cGxvdCBhZGFsYWggdW50dWsgbWVtYmVyaWthbiBnYW1iYXJhbiB2aXN1YWwgcGVueWViYXJhbiBkYXRhIHBlbmp1YWxhbiBkYXJpIHNldGlhcCBjYWJhbmcsIHRlcm1hc3VrIG5pbGFpIG1pbmltdW0sIG1ha3NpbXVtLCBtZWRpYW4sIGRhbiB2YXJpYXNpIGRhdGEgbWVsYWx1aSBrdWFydGlsLiBCb3hwbG90IGp1Z2EgbWVtYmFudHUgbWVuZGV0ZWtzaSBwZW5jaWxhbiAob3V0bGllcikgZGFuIG1lbXVkYWhrYW4gcGVyYmFuZGluZ2FuIGRpc3RyaWJ1c2kgcGVuanVhbGFuIGFudGFyIGNhYmFuZywgc2VoaW5nZ2EgcGVydXNhaGFhbiBkYXBhdCBtZW1haGFtaSBwb2xhIGRhbiBrYXJha3RlcmlzdGlrIGRhdGEgdW50dWsgbWVuZHVrdW5nIHBlbmdhbWJpbGFuIGtlcHV0dXNhbiBiaXNuaXMuDQoNCg0KLSAqKk91dGxpZXIqKiBkaWRlZmluaXNpa2FuIHNlYmFnYWkgZGF0YSB5YW5nIHRlcmxldGFrIGRpIGx1YXIgcmVudGFuZzoNCiAgXFsNCiAgXHRleHR7TG93ZXIgQm91bmR9ID0gUTEgLSAxLjUgXHRpbWVzIElRUg0KICBcXQ0KICBcWw0KICBcdGV4dHtVcHBlciBCb3VuZH0gPSBRMyArIDEuNSBcdGltZXMgSVFSDQogIFxdDQogIERpIG1hbmE6DQogIC0gXCggUTEgXCkgYWRhbGFoIGt1YXJ0aWwgcGVydGFtYSAobmlsYWkgZGkgYmF3YWggbWVkaWFuKSwNCiAgLSBcKCBRMyBcKSBhZGFsYWgga3VhcnRpbCBrZXRpZ2EgKG5pbGFpIGRpIGF0YXMgbWVkaWFuKSwNCiAgLSBcKCBJUVIgXCkgYWRhbGFoICoqaW50ZXJxdWFydGlsZSByYW5nZSoqLCB5YWl0dSBzZWxpc2loIGFudGFyYSBcKCBRMyBcKSBkYW4gXCggUTEgXCkuDQoNCkppa2EgZGF0YSBiZXJhZGEgZGkgbHVhciByZW50YW5nIHRlcnNlYnV0LCBtYWthIGRhdGEgdGVyc2VidXQgZGlhbmdnYXAgc2ViYWdhaSAqKm91dGxpZXIqKi4NCg0KIyMjIE1hcmkga2l0YSBoaXR1bmcgYXBha2FoIGFkYSBvdXRsaWVyIHBhZGEgc2V0aWFwIGNhYmFuZyBiZXJkYXNhcmthbiBkYXRhIHlhbmcgdGVsYWggZGliZXJpa2FuLg0KDQpCZXJpa3V0IGxhbmdrYWgtbGFuZ2thaG55YToNCg0KMS4gSGl0dW5nICoqUTEqKiwgKipRMyoqLCBkYW4gKipJUVIqKiB1bnR1ayBzZXRpYXAgY2FiYW5nLg0KMi4gVGVudHVrYW4gKipMb3dlciBCb3VuZCoqIGRhbiAqKlVwcGVyIEJvdW5kKiogdW50dWsgbWVuZGV0ZWtzaSBhcGFrYWggYWRhIGRhdGEgeWFuZyB0ZXJtYXN1ayBvdXRsaWVyLg0KDQpTYXlhIGFrYW4gbGFrdWthbiBwZXJoaXR1bmdhbiBpbmkgdW50dWsgc2V0aWFwIGNhYmFuZy4NCg0KIyMjIExhbmdrYWgtbGFuZ2thaCB1bnR1ayBNZW5lbnR1a2FuIE91dGxpZXI6DQoNCjEuICoqQ2FiYW5nIEE6KioNCiAgIC0gRGF0YTogXCggNTAsIDU1LCA2MCwgNjUsIDcwIFwpDQogICAtIFVydXRhbiBEYXRhOiBcKCA1MCwgNTUsIDYwLCA2NSwgNzAgXCkNCiAgIC0gKipNZWRpYW4gKFEyKToqKiA2MA0KICAgLSAqKlExIChLdWFydGlsIHBlcnRhbWEpOioqIDU1DQogICAtICoqUTMgKEt1YXJ0aWwga2V0aWdhKToqKiA2NQ0KICAgLSAqKklRUiAoSW50ZXJxdWFydGlsZSBSYW5nZSk6KiogXCggUTMgLSBRMSA9IDY1IC0gNTUgPSAxMCBcKQ0KICAgLSAqKkxvd2VyIEJvdW5kOioqIFwoIFExIC0gMS41IFx0aW1lcyBJUVIgPSA1NSAtIDEuNSBcdGltZXMgMTAgPSA0MCBcKQ0KICAgLSAqKlVwcGVyIEJvdW5kOioqIFwoIFEzICsgMS41IFx0aW1lcyBJUVIgPSA2NSArIDEuNSBcdGltZXMgMTAgPSA4MCBcKQ0KICAgLSAqKlJlbnRhbmcgRGF0YSAoNDAgLSA4MCk6KiogU2VtdWEgZGF0YSBiZXJhZGEgZGFsYW0gcmVudGFuZyBpbmksIGphZGkgKip0aWRhayBhZGEgb3V0bGllcioqLg0KICAgDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIyBNZW11YXQgbGlicmFyeSBwbG90bHkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGENCmRhdGEgPC0gYyg1MCwgNTUsIDYwLCA2NSwgNzApDQoNCiMgTWVtYnVhdCBib3hwbG90IGludGVyYWt0aWYNCmZpZyA8LSBwbG90X2x5KHkgPSBkYXRhLCB0eXBlID0gImJveCIsIA0KICAgICAgICAgICAgICAgYm94cG9pbnRzID0gImFsbCIsIA0KICAgICAgICAgICAgICAgaml0dGVyID0gMC4zLCANCiAgICAgICAgICAgICAgIHBvaW50cG9zID0gLTEuOCkgJT4lDQogbGF5b3V0KHRpdGxlID0gIkJveHBsb3QgSW50ZXJha3RpZiB1bnR1ayBEYXRhIENhYmFuZyBBIiwNCiAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk5pbGFpIiksDQogICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmcgQSIpKQ0KDQojIE1lbmFtcGlsa2FuIGJveHBsb3QNCmZpZw0KDQpgYGANCg0KICAgDQoNCjIuICoqQ2FiYW5nIEI6KioNCiAgIC0gRGF0YTogXCggNDAsIDUwLCA2MCwgNzAsIDgwIFwpDQogICAtIFVydXRhbiBEYXRhOiBcKCA0MCwgNTAsIDYwLCA3MCwgODAgXCkNCiAgIC0gKipNZWRpYW4gKFEyKToqKiA2MA0KICAgLSAqKlExIChLdWFydGlsIHBlcnRhbWEpOioqIDUwDQogICAtICoqUTMgKEt1YXJ0aWwga2V0aWdhKToqKiA3MA0KICAgLSAqKklRUjoqKiBcKCBRMyAtIFExID0gNzAgLSA1MCA9IDIwIFwpDQogICAtICoqTG93ZXIgQm91bmQ6KiogXCggUTEgLSAxLjUgXHRpbWVzIElRUiA9IDUwIC0gMS41IFx0aW1lcyAyMCA9IDIwIFwpDQogICAtICoqVXBwZXIgQm91bmQ6KiogXCggUTMgKyAxLjUgXHRpbWVzIElRUiA9IDcwICsgMS41IFx0aW1lcyAyMCA9IDEwMCBcKQ0KICAgLSAqKlJlbnRhbmcgRGF0YSAoMjAgLSAxMDApOioqIFNlbXVhIGRhdGEgYmVyYWRhIGRhbGFtIHJlbnRhbmcgaW5pLCBqYWRpICoqdGlkYWsgYWRhIG91dGxpZXIqKi4NCiAgIA0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5IHBsb3RseQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YQ0KZGF0YSA8LSBjKDQwLCA1MCwgNjAsIDcwLCA4MCkNCg0KIyBNZW1idWF0IGJveHBsb3QgaW50ZXJha3RpZg0KZmlnIDwtIHBsb3RfbHkoeSA9IGRhdGEsIHR5cGUgPSAiYm94IiwgDQogICAgICAgICAgICAgICAgYm94cG9pbnRzID0gImFsbCIsIA0KICAgICAgICAgICAgICAgIGppdHRlciA9IDAuMywgDQogICAgICAgICAgICAgICAgcG9pbnRwb3MgPSAtMS44KSAlPiUNCiAgbGF5b3V0KHRpdGxlID0gIkJveHBsb3QgSW50ZXJha3RpZiB1bnR1ayBEYXRhIENhYmFuZyBCIiwNCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkNhYmFuZyBCIikpDQoNCiMgTWVuYW1waWxrYW4gYm94cGxvdA0KZmlnDQoNCmBgYA0KICAgDQoNCjMuICoqQ2FiYW5nIEM6KioNCiAgIC0gRGF0YTogXCggMzAsIDMwLCAzNSwgNDAsIDQ1IFwpDQogICAtIFVydXRhbiBEYXRhOiBcKCAzMCwgMzAsIDM1LCA0MCwgNDUgXCkNCiAgIC0gKipNZWRpYW4gKFEyKToqKiAzNQ0KICAgLSAqKlExIChLdWFydGlsIHBlcnRhbWEpOioqIDMwDQogICAtICoqUTMgKEt1YXJ0aWwga2V0aWdhKToqKiA0MA0KICAgLSAqKklRUjoqKiBcKCBRMyAtIFExID0gNDAgLSAzMCA9IDEwIFwpDQogICAtICoqTG93ZXIgQm91bmQ6KiogXCggUTEgLSAxLjUgXHRpbWVzIElRUiA9IDMwIC0gMS41IFx0aW1lcyAxMCA9IDE1IFwpDQogICAtICoqVXBwZXIgQm91bmQ6KiogXCggUTMgKyAxLjUgXHRpbWVzIElRUiA9IDQwICsgMS41IFx0aW1lcyAxMCA9IDU1IFwpDQogICAtICoqUmVudGFuZyBEYXRhICgxNSAtIDU1KToqKiBTZW11YSBkYXRhIGJlcmFkYSBkYWxhbSByZW50YW5nIGluaSwgamFkaSAqKnRpZGFrIGFkYSBvdXRsaWVyKiouDQogICANCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeSBwbG90bHkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGENCmRhdGEgPC0gYygzMCwgMzAsIDM1LCA0MCwgNDUpDQoNCiMgTWVtYnVhdCBib3hwbG90IGludGVyYWt0aWYNCmZpZyA8LSBwbG90X2x5KHkgPSBkYXRhLCB0eXBlID0gImJveCIsIA0KICAgICAgICAgICAgICAgIGJveHBvaW50cyA9ICJhbGwiLCANCiAgICAgICAgICAgICAgICBqaXR0ZXIgPSAwLjMsIA0KICAgICAgICAgICAgICAgIHBvaW50cG9zID0gLTEuOCkgJT4lDQogIGxheW91dCh0aXRsZSA9ICJCb3hwbG90IEludGVyYWt0aWYgdW50dWsgRGF0YSBDYWJhbmcgQyIsDQogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmcgQyIpKQ0KDQojIE1lbmFtcGlsa2FuIGJveHBsb3QNCmZpZw0KYGBgDQogICANCg0KNC4gKipDYWJhbmcgRDoqKg0KICAgLSBEYXRhOiBcKCA3MCwgNzUsIDgwLCA4NSwgOTAgXCkNCiAgIC0gVXJ1dGFuIERhdGE6IFwoIDcwLCA3NSwgODAsIDg1LCA5MCBcKQ0KICAgLSAqKk1lZGlhbiAoUTIpOioqIDgwDQogICAtICoqUTEgKEt1YXJ0aWwgcGVydGFtYSk6KiogNzUNCiAgIC0gKipRMyAoS3VhcnRpbCBrZXRpZ2EpOioqIDg1DQogICAtICoqSVFSOioqIFwoIFEzIC0gUTEgPSA4NSAtIDc1ID0gMTAgXCkNCiAgIC0gKipMb3dlciBCb3VuZDoqKiBcKCBRMSAtIDEuNSBcdGltZXMgSVFSID0gNzUgLSAxLjUgXHRpbWVzIDEwID0gNjAgXCkNCiAgIC0gKipVcHBlciBCb3VuZDoqKiBcKCBRMyArIDEuNSBcdGltZXMgSVFSID0gODUgKyAxLjUgXHRpbWVzIDEwID0gMTAwIFwpDQogICAtICoqUmVudGFuZyBEYXRhICg2MCAtIDEwMCk6KiogU2VtdWEgZGF0YSBiZXJhZGEgZGFsYW0gcmVudGFuZyBpbmksIGphZGkgKip0aWRhayBhZGEgb3V0bGllcioqLg0KICAgDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGENCmRhdGFfY2FiYW5nX2QgPC0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgTWVtYnVhdCBib3hwbG90DQpmaWcgPC0gcGxvdF9seSh5ID0gZGF0YV9jYWJhbmdfZCwgdHlwZSA9ICJib3giLCANCiAgICAgICAgICAgICAgYm94cG9pbnRzID0gImFsbCIsIGppdHRlciA9IDAuMywgcG9pbnRwb3MgPSAtMS44KQ0KDQojIE1lbmFtYmFoa2FuIGxheW91dA0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KHRpdGxlID0gIkJveHBsb3QgQ2FiYW5nIEQiLA0KICAgICAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk5pbGFpIiksDQogICAgICAgICAgICAgICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nIEQiKSkNCg0KIyBNZW5hbXBpbGthbiBib3hwbG90DQpmaWcNCmBgYA0KICAgDQoNCkJlcmlrdXQgaW5pIG1lcnVwYWthbiBkYXRhIGtlc2VsdXJ1aGFuIA0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4NCmRhdGFfcGVuanVhbGFuIDwtIGRhdGEuZnJhbWUoDQogIENhYmFuZyA9IHJlcChjKCJBIiwgIkIiLCAiQyIsICJEIiksIGVhY2ggPSA1KSwNCiAgUGVuanVhbGFuID0gYyg1MCwgNTUsIDYwLCA2NSwgNzAsIA0KICAgICAgICAgICAgICAgIDQwLCA1MCwgNjAsIDcwLCA4MCwNCiAgICAgICAgICAgICAgICAzMCwgMzAsIDM1LCA0MCwgNDUsDQogICAgICAgICAgICAgICAgNzAsIDc1LCA4MCwgODUsIDkwKQ0KKQ0KDQojIE1lbWJ1YXQgYm94IHBsb3QNCmZpZyA8LSBwbG90X2x5KGRhdGFfcGVuanVhbGFuLCB5ID0gflBlbmp1YWxhbiwgY29sb3IgPSB+Q2FiYW5nLCB0eXBlID0gImJveCIsDQogICAgICAgICAgICAgICBib3hwb2ludHMgPSAiYWxsIiwgaml0dGVyID0gMC41LCBwb2ludHBvcyA9IC0xLjgpDQoNCmZpZyA8LSBmaWcgJT4lIGxheW91dCgNCiAgdGl0bGUgPSAiRGlhZ3JhbSBLb3RhayAoQm94IFBsb3QpIFBlbnllYmFyYW4gUGVuanVhbGFuIiwNCiAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlBlbmp1YWxhbiAoSnV0YSBSdXBpYWgpIiksDQogIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmciKQ0KKQ0KDQpmaWcNCg0KYGBgDQoNCg0KIyMgNS5KaWthIEFuZGEgYWRhbGFoIG1hbmFqZXIgcGVydXNhaGFhbiwgYmFnYWltYW5hIEFuZGEgYWthbiBtZW5nZ3VuYWthbiBpbmZvcm1hc2kgaW5pIHVudHVrIG1lcmVuY2FuYWthbiBzdHJhdGVnaSBwZW5pbmdrYXRhbiBwZW5qdWFsYW4/DQoNClNlYmFnYWkgbWFuYWplciBwZXJ1c2FoYWFuLCBpbmZvcm1hc2kgeWFuZyBkaXBlcm9sZWggZGFyaSBhbmFsaXNpcyBkYXRhIHBlbmp1YWxhbiBrZWVtcGF0IGNhYmFuZyAoQSwgQiwgQywgZGFuIEQpIHNhbmdhdCBiZXJoYXJnYSB1bnR1ayBtZXJlbmNhbmFrYW4gc3RyYXRlZ2kgcGVuaW5na2F0YW4gcGVuanVhbGFuLiBCZXJpa3V0IGFkYWxhaCBsYW5na2FoLWxhbmdrYWggZGFuIHN0cmF0ZWdpIHlhbmcgZGFwYXQgZGlhbWJpbCBiZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpczoNCg0KMS4gSWRlbnRpZmlrYXNpIEtpbmVyamEgQ2FiYW5nDQpDYWJhbmcgQzogS2luZXJqYSB0ZXJlbmRhaCBkZW5nYW4gcmF0YS1yYXRhIHBlbmp1YWxhbiAkKCBcbXUgPSAzNiApJCBqdXRhIHJ1cGlhaCBkYW4gc3RhbmRhciBkZXZpYXNpIHRlcmtlY2lsICQoIFxzaWdtYSBcYXBwcm94IDUuODMgKSQuIEluaSBtZW51bmp1a2thbiBwZW5qdWFsYW4geWFuZyBrb25zaXN0ZW4gZGkgYmF3YWggdGFyZ2V0Lg0KQ2FiYW5nIEI6IFJhdGEtcmF0YSBwZW5qdWFsYW4gJCggXG11ID0gNjAgKSQganV0YSBydXBpYWgsIHRldGFwaSB0ZXJkYXBhdCBuaWxhaSB5YW5nIGphdWggZGkgYmF3YWggdGFyZ2V0ICh5YWl0dSAkKCA0MCApJCBqdXRhIHJ1cGlhaCkuIEluaSBtZW51bmp1a2thbiBwb3RlbnNpIHVudHVrIHBlcmJhaWthbi4NCkNhYmFuZyBBIGRhbiBEOiBLaW5lcmphIGJhaWsgZGVuZ2FuIHJhdGEtcmF0YSBwZW5qdWFsYW4gbWFzaW5nLW1hc2luZyAkKCBcbXUgPSA2MCApJCBkYW4gJCggXG11ID0gODAgKSQganV0YSBydXBpYWguDQoNCjIuICoqRm9rdXMgcGFkYSBDYWJhbmcgZGVuZ2FuIEtpbmVyamEgVGVyZW5kYWgqKg0KU3RyYXRlZ2kgdW50dWsgQ2FiYW5nIEM6DQpBbmFsaXNpcyBQZW55ZWJhYjogTGFrdWthbiBhbmFsaXNpcyBtZW5kYWxhbSB1bnR1ayBtZW1haGFtaSBwZW55ZWJhYiByZW5kYWhueWEgcGVuanVhbGFuLCBzZXBlcnRpIGt1cmFuZ255YSBwcm9tb3NpIGF0YXUgcHJvZHVrIHlhbmcgdGlkYWsgc2VzdWFpLg0KUGVsYXRpaGFuIGRhbiBQZW5nZW1iYW5nYW46IEJlcmlrYW4gcGVsYXRpaGFuIGtlcGFkYSBzdGFmIHVudHVrIG1lbmluZ2thdGthbiBrZXRlcmFtcGlsYW4gcGVuanVhbGFuIGRhbiBwZWxheWFuYW4gcGVsYW5nZ2FuLg0KUHJvbW9zaSBkYW4gRGlza29uOiBMdW5jdXJrYW4ga2FtcGFueWUgcHJvbW9zaSBhdGF1IGRpc2tvbiB1bnR1ayBtZW5hcmlrIGxlYmloIGJhbnlhayBwZWxhbmdnYW4uDQpVamkgQ29iYSBQcm9kdWsgQmFydTogUGVya2VuYWxrYW4gcHJvZHVrIGJhcnUgeWFuZyBsZWJpaCBzZXN1YWkgZGVuZ2FuIGtlYnV0dWhhbiBwYXNhci4NCg0KMy4gKipPcHRpbWFsa2FuIEtpbmVyamEgQ2FiYW5nIExhaW4qKg0KQ2FiYW5nIEEgZGFuIEQ6DQpBbmFsaXNpcyBQYXNhcjogTGFrdWthbiBhbmFsaXNpcyB1bnR1ayBtZW1haGFtaSBmYWt0b3Iga2VzdWtzZXNhbiBjYWJhbmcgaW5pLg0KUmVwbGlrYXNpIFN0cmF0ZWdpIFN1a3NlczogVGVyYXBrYW4gc3RyYXRlZ2kgeWFuZyBiZXJoYXNpbCBkaSBDYWJhbmcgQSBkYW4gRCBrZSBDYWJhbmcgQyBkYW4gQi4NClBlbmluZ2thdGFuIExheWFuYW4gUGVsYW5nZ2FuOiBQYXN0aWthbiBzZW11YSBjYWJhbmcgbWVtaWxpa2kgc3RhbmRhciBsYXlhbmFuIHBlbGFuZ2dhbiB5YW5nIHRpbmdnaS4NCg0KNC4gKipNb25pdG9yaW5nIGRhbiBFdmFsdWFzaSoqDQpQZW5ndWt1cmFuIEtpbmVyamE6IFRldGFwa2FuIEtQSSAoS2V5IFBlcmZvcm1hbmNlIEluZGljYXRvcnMpIHVudHVrIHNldGlhcCBjYWJhbmcgZGFuIGxha3VrYW4gcGVtYW50YXVhbiBzZWNhcmEgYmVya2FsYS4NCkZlZWRiYWNrIFBlbGFuZ2dhbjogS3VtcHVsa2FuIHVtcGFuIGJhbGlrIGRhcmkgcGVsYW5nZ2FuIHVudHVrIG1lbWFoYW1pIGtlcHVhc2FuIG1lcmVrYS4NClBlbnllc3VhaWFuIFN0cmF0ZWdpOiBMYWt1a2FuIHBlbnllc3VhaWFuIHN0cmF0ZWdpIGJlcmRhc2Fya2FuIGhhc2lsIG1vbml0b3JpbmcuDQoNCjUuICoqRGl2ZXJzaWZpa2FzaSBkYW4gSW5vdmFzaSoqDQpEaXZlcnNpZmlrYXNpIFByb2R1azogUGVydGltYmFuZ2thbiB1bnR1ayBtZW1wZXJrZW5hbGthbiBwcm9kdWsgYmFydSBhdGF1IGxheWFuYW4gdGFtYmFoYW4uDQpJbm92YXNpIFBlbWFzYXJhbjogR3VuYWthbiBtZWRpYSBzb3NpYWwgZGFuIHBsYXRmb3JtIGRpZ2l0YWwgdW50dWsgbWVuaW5na2F0a2FuIHZpc2liaWxpdGFzIGRhbiBtZW5hcmlrIHBlbGFuZ2dhbiBiYXJ1LCB0ZXJ1dGFtYSBkaSBDYWJhbmcgQy4NCktlc2ltcHVsYW4NCkRlbmdhbiBtZW5nZ3VuYWthbiBpbmZvcm1hc2kgZGFyaSBhbmFsaXNpcyBkYXRhIHBlbmp1YWxhbiwgcGVydXNhaGFhbiBkYXBhdCBtZXJ1bXVza2FuIHN0cmF0ZWdpIHlhbmcgbGViaWggdGVyYXJhaCBkYW4gZWZla3RpZiB1bnR1ayBtZW5pbmdrYXRrYW4gcGVuanVhbGFuIGRpIHNlbXVhIGNhYmFuZy4gRm9rdXMgdXRhbWEgaGFydXMgZGliZXJpa2FuIGtlcGFkYSBDYWJhbmcgQyB1bnR1ayBtZW5pbmdrYXRrYW4ga2luZXJqYW55YSwgc2VtZW50YXJhIGp1Z2EgbWVuZ29wdGltYWxrYW4ga2luZXJqYSBjYWJhbmcgbGFpbiB5YW5nIHN1ZGFoIGJhaWsuIE1lbGFsdWkgcGVuZGVrYXRhbiB5YW5nIHRlcmludGVncmFzaSBkYW4gYmVyYmFzaXMgZGF0YSwgcGVydXNhaGFhbiBkYXBhdCBtZW5pbmdrYXRrYW4ga2luZXJqYSBwZW5qdWFsYW5ueWEgc2VjYXJhIGtlc2VsdXJ1aGFuLg0KDQoNCi0tLQ0KDQojIExhdGloYW4gMg0KDQpQZXJ1c2FoYWFuIFhZWiBtZW5nZWxvbGEgcGVuZ2lyaW1hbiBiYXJhbmcga2UgYmVyYmFnYWkgd2lsYXlhaCBkZW5nYW4gbWVuZ2d1bmFrYW4gYmVyYmFnYWkgamVuaXMgdHJhbnNwb3J0YXNpLiBTZXRpYXAgcGVuZ2lyaW1hbiBtZWxpYmF0a2FuIGJpYXlhIHRyYW5zcG9ydGFzaSwgd2FrdHUgeWFuZyBkaWJ1dHVoa2FuLCBkYW4ganVtbGFoIGJhcmFuZyB5YW5nIGRpa2lyaW0uIEJlcmlrdXQgYWRhbGFoIGRhdGEgdGVya2FpdCBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiB3aWxheWFoIGRhbsKgamVuaXPCoGJhcmFuZzoNCg0KfCAqKldpbGF5YWgqKiB8ICoqSmVuaXMgQmFyYW5nKiogfCAqKkp1bWxhaCBCYXJhbmcgKHVuaXQpKiogfCAqKldha3R1IFBlbmdpcmltYW4gKGphbSkqKiB8ICoqQmlheWEgcGVyIFVuaXQgKFJwKSoqIHwNCnwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBVdGFyYSAgICAgICB8IEVsZWt0cm9uaWsgICAgICAgfCAyMDAgICAgICAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1LDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMTUwICAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LDAwMCAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgICAgIHwgTWFrYW5hbiAgICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IFBlcmFsYXRhbiAgICAgICAgfCAxMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyLDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMjUwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNCwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFV0YXJhICAgICAgIHwgUGFrYWlhbiAgICAgICAgICB8IDMwMCAgICAgICAgICAgICAgICAgICAgICB8IDkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOCw1MDAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IE1ha2FuYW4gICAgICAgICAgfCAyMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDksNTAwICAgICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTQwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMSwwMDAgICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgICAgIHwgRWxla3Ryb25payAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQsNTAwICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IFBha2FpYW4gICAgICAgICAgfCAzNTAgICAgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcsODAwICAgICAgICAgICAgICAgICAgIHwNCnwgVXRhcmEgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTcwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMiwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gICAgIHwgRWxla3Ryb25payAgICAgICB8IDI1MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IFBha2FpYW4gICAgICAgICAgfCAxOTAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgsMjAwICAgICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCBNYWthbmFuICAgICAgICAgIHwgMTMwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMCw1MDAgICAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgICAgIHwgUGVyYWxhdGFuICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEsNTAwICAgICAgICAgICAgICAgICAgfA0KDQojIyAxLiBBbmFsaXNpcyBFZmlzaWVuc2kgUGVuZ2lyaW1hbjoNCg0KIyMjIDEuMeKAoiBWaXN1YWxpc2FzaWthbiBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiBqdW1sYWggYmFyYW5nLCB3YWt0dSBwZW5naXJpbWFuLCBkYW4gYmlheWEgcGVyIHVuaXQgZGVuZ2FuIG1lbmdndW5ha2FuIHBsb3QgM0QuDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEluc3RhbGFzaSBsaWJyYXJ5IGppa2EgYmVsdW0gdGVycGFzYW5nDQppZiAoIXJlcXVpcmVOYW1lc3BhY2UoInBsb3RseSIsIHF1aWV0bHkgPSBUUlVFKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKQ0KfQ0KDQojIE1lbXVhdCBsaWJyYXJ5IHBsb3RseQ0KbGlicmFyeShwbG90bHkpDQoNCiMgTWVtYnVhdCBEYXRhIEZyYW1lIHVudHVrIHBlbmdpcmltYW4NCmRhdGFfcGVuZ2lyaW1hbiA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIpLA0KICBKdW1sYWhfQmFyYW5nID0gYygyMDAsIDE1MCwgMTgwLCAxMjAsIDI1MCwgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIDE3MCwgMjUwLCAxOTAsIDEzMCwgMTgwKSwNCiAgV2FrdHVfUGVuZ2lyaW1hbiA9IGMoNSwgOCwgNiwgNywgNCwgOSwgNywgNSwgNiwgOCwgNCwgNiwgNywgNSwgNSksDQogIEJpYXlhX1Blcl9Vbml0ID0gYygxNTAwMCwgODAwMCwgMTAwMDAsIDEyMDAwLCAxNDAwMCwgODUwMCwgOTUwMCwgMTEwMDAsIDE0NTAwLCA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBNZW1idWF0IFBsb3QgM0QNCnBsb3RfbHkoDQogIGRhdGEgPSBkYXRhX3BlbmdpcmltYW4sDQogIHggPSB+SnVtbGFoX0JhcmFuZywNCiAgeSA9IH5XYWt0dV9QZW5naXJpbWFuLA0KICB6ID0gfkJpYXlhX1Blcl9Vbml0LA0KICBjb2xvciA9IH5XaWxheWFoLA0KICBzeW1ib2wgPSB+SmVuaXNfQmFyYW5nLA0KICB0eXBlID0gInNjYXR0ZXIzZCIsDQogIG1vZGUgPSAibWFya2VycyIsDQogIG1hcmtlciA9IGxpc3Qoc2l6ZSA9IDYpDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgM0QgUGVuZ2lyaW1hbiBCYXJhbmciLA0KICAgIHNjZW5lID0gbGlzdCgNCiAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJKdW1sYWggQmFyYW5nICh1bml0KSIpLA0KICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIldha3R1IFBlbmdpcmltYW4gKGphbSkiKSwNCiAgICAgIHpheGlzID0gbGlzdCh0aXRsZSA9ICJCaWF5YSBwZXIgVW5pdCAoUnApIikNCiAgICApDQogICkNCg0KYGBgDQoNCg0KIyMjIDEuMuKAoiBUZW50dWthbiB3aWxheWFoIG1hbmEgeWFuZyBtZW1pbGlraSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCBiZXJkYXNhcmthbiBiaWF5YSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbi4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZHBseXIpDQoNCiMgRGF0YQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsIA0KICAgICAgICAgICAgICAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiksDQogIEplbmlzX0JhcmFuZyA9IGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgDQogICAgICAgICAgICAgICAgICAgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgDQogICAgICAgICAgICAgICAgICAgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iKSwNCiAgSnVtbGFoX0JhcmFuZyA9IGMoMjAwLCAxNTAsIDE4MCwgMTIwLCAyNTAsIDMwMCwgMjIwLCAxNDAsIDE4MCwgMzUwLCAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9QZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgDQogICAgICAgICAgICAgICAgICAgICA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBNZW5hbWJhaGthbiBrb2xvbSBCaWF5YSBUb3RhbA0KZGF0YSA8LSBkYXRhICU+JQ0KICBtdXRhdGUoQmlheWFfVG90YWwgPSBKdW1sYWhfQmFyYW5nICogQmlheWFfUGVyX1VuaXQpDQoNCiMgTWVuZ2hpdHVuZyB0b3RhbCBiaWF5YSBkYW4gZWZpc2llbnNpIGJpYXlhIHBlciB3aWxheWFoDQplZmlzaWVuc2kgPC0gZGF0YSAlPiUNCiAgZ3JvdXBfYnkoV2lsYXlhaCkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBUb3RhbF9CaWF5YSA9IHN1bShCaWF5YV9Ub3RhbCksDQogICAgRWZpc2llbnNpX0JpYXlhID0gc3VtKEJpYXlhX1RvdGFsKSAvIHN1bShKdW1sYWhfQmFyYW5nKQ0KICApDQoNCiMgT3V0cHV0IGVmaXNpZW5zaQ0KcHJpbnQoZWZpc2llbnNpKQ0KDQpgYGANCg0KKip3aWxheWFoIEJhcmF0IHlhbmcgbWVtaWxpa2kgZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggYmVyZGFzYXJrYW4gYmlheWEgcGVyIHVuaXQgZGFuIHdha3R1IHBlbmdpcmltYW4uKioNCg0KU2VtYWtpbiBtYWhhbCBiaWF5YSBwZXIgdW5pdCBzdWF0dSB3aWxheWFoLCBtYWthIHdpbGF5YWggdGVyc2VidXQgc2VtYWtpbiAqKnRpZGFrIGVmaXNpZW4qKiBkYWxhbSBwZW5naXJpbWFuIGJhcmFuZy4gSGFsIGluaSBkaWthcmVuYWthbiB0aW5nZ2lueWEgYmlheWEgcGVyIHVuaXQgbWVudW5qdWtrYW4gYmFod2EgcGVydXNhaGFhbiBtZW5nZWx1YXJrYW4gbGViaWggYmFueWFrIGJpYXlhIHVudHVrIHNldGlhcCB1bml0IGJhcmFuZyB5YW5nIGRpa2lyaW1rYW4sIHNlaGluZ2dhIGVmaXNpZW5zaSBvcGVyYXNpb25hbCBtZW5qYWRpIHJlbmRhaC4gQmVyZGFzYXJrYW4gZGF0YToNCg0KfCAqKldpbGF5YWgqKiB8ICoqRWZpc2llbnNpIEJpYXlhIChScC91bml0KSoqIHwgKipLZXRlcmFuZ2FuKiogICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IEJhcmF0ICAgICAgIHwgMTIsNTkzICAgICAgICAgICAgICAgICAgICAgICAgfCAqKlBhbGluZyB0aWRhayBlZmlzaWVuKiogKG1haGFsKSAgICB8DQp8IFNlbGF0YW4gICAgIHwgMTEsNzU4ICAgICAgICAgICAgICAgICAgICAgICAgfCBLdXJhbmcgZWZpc2llbiAgICAgICAgICAgICAgICAgICAgIHwNCnwgVXRhcmEgICAgICAgfCAxMSwzMjggICAgICAgICAgICAgICAgICAgICAgICB8IFJlbGF0aWYgZWZpc2llbiAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IDEwLDY0MSAgICAgICAgICAgICAgICAgICAgICAgIHwgQ3VrdXAgZWZpc2llbiAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgICAgIHwgOSw2MDQgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKlBhbGluZyBlZmlzaWVuKiogKG11cmFoKSAgICAgICAgIHwNCg0KV2lsYXlhaCAqKkJhcmF0KiogbWVtaWxpa2kgYmlheWEgcmF0YS1yYXRhIHBlciB1bml0IHRlcnRpbmdnaSAoKipScCAxMiw1OTMvdW5pdCoqKSwgeWFuZyBiZXJhcnRpIHdpbGF5YWggaW5pIG1lbWJ1dHVoa2FuIHBlcmhhdGlhbiBraHVzdXMgdW50dWsgcGVuZ29wdGltYWxhbi4gU2ViYWxpa255YSwgd2lsYXlhaCAqKlRpbXVyKiogYWRhbGFoIHlhbmcgcGFsaW5nIGVmaXNpZW4sIGRlbmdhbiBiaWF5YSByYXRhLXJhdGEgdGVyZW5kYWggKCoqUnAgOSw2MDQvdW5pdCoqKS4NCg0KIyMjIEltcGxpa2FzaQ0KDQoxLiBCaWF5YSB5YW5nIGxlYmloIG1haGFsIGRpIHdpbGF5YWggQmFyYXQgYmVyYXJ0aSBwZW5naXJpbWFuIGxlYmloIHRpZGFrIGVmaXNpZW4gZGliYW5kaW5na2FuIHdpbGF5YWggbGFpbi4NCjIuIFVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2ksIHBlcnVzYWhhYW4gcGVybHUgbWVudXJ1bmthbiBiaWF5YSBwZXIgdW5pdCBkaSB3aWxheWFoIEJhcmF0LCBzZXBlcnRpOg0KICAgLSAqKk1lbmd1cmFuZ2kgYmlheWEgdHJhbnNwb3J0YXNpKiogZGVuZ2FuIG5lZ29zaWFzaSBoYXJnYSBhdGF1IG1lbmNhcmkgYWx0ZXJuYXRpZiBsZWJpaCBtdXJhaC4NCiAgIC0gKipNZW5pbmdrYXRrYW4ga2FwYXNpdGFzIHBlbmdpcmltYW4qKiB1bnR1ayBtZW1ha3NpbWFsa2FuIGVmaXNpZW5zaSBsb2dpc3Rpay4NCg0KIyMjIEtlc2ltcHVsYW4NCkVmaXNpZW5zaSBwZW5naXJpbWFuIHNhbmdhdCBiZXJnYW50dW5nIHBhZGEgcmVuZGFobnlhIGJpYXlhIHBlciB1bml0LiBXaWxheWFoIGRlbmdhbiBiaWF5YSBwZXIgdW5pdCB5YW5nIG1haGFsIChzZXBlcnRpIEJhcmF0KSBjZW5kZXJ1bmcgbWVuamFkaSAqKnRpZGFrIGVmaXNpZW4qKiwgc2VoaW5nZ2EgbWVtZXJsdWthbiBvcHRpbWFsaXNhc2kgc3RyYXRlZ2kgcGVuZ2lyaW1hbi4NCg0KDQojIyAyLiBSZWtvbWVuZGFzaSBPcGVyYXNpb25hbDoNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZHBseXIpDQoNCiMgRGF0YQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsIA0KICAgICAgICAgICAgICAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiksDQogIEplbmlzX0JhcmFuZyA9IGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgDQogICAgICAgICAgICAgICAgICAgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgDQogICAgICAgICAgICAgICAgICAgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iKSwNCiAgSnVtbGFoX0JhcmFuZyA9IGMoMjAwLCAxNTAsIDE4MCwgMTIwLCAyNTAsIDMwMCwgMjIwLCAxNDAsIDE4MCwgMzUwLCAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9QZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgDQogICAgICAgICAgICAgICAgICAgICA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBTdGF0aXN0aWsgcGVyIFdpbGF5YWgNCnN0YXRzIDwtIGRhdGEgJT4lDQogIGdyb3VwX2J5KFdpbGF5YWgpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgUmF0YV9SYXRhX1dha3R1ID0gbWVhbihXYWt0dV9QZW5naXJpbWFuKSwNCiAgICBNZWRpYW5fV2FrdHUgPSBtZWRpYW4oV2FrdHVfUGVuZ2lyaW1hbiksDQogICAgU0RfV2FrdHUgPSBzZChXYWt0dV9QZW5naXJpbWFuKSwNCiAgICBSYXRhX1JhdGFfQmFyYW5nID0gbWVhbihKdW1sYWhfQmFyYW5nKSwNCiAgICBNZWRpYW5fQmFyYW5nID0gbWVkaWFuKEp1bWxhaF9CYXJhbmcpLA0KICAgIFNEX0JhcmFuZyA9IHNkKEp1bWxhaF9CYXJhbmcpLA0KICAgIFJhdGFfUmF0YV9CaWF5YSA9IG1lYW4oQmlheWFfUGVyX1VuaXQpLA0KICAgIE1lZGlhbl9CaWF5YSA9IG1lZGlhbihCaWF5YV9QZXJfVW5pdCksDQogICAgU0RfQmlheWEgPSBzZChCaWF5YV9QZXJfVW5pdCkNCiAgKQ0KDQojIE91dHB1dCBoYXNpbA0KcHJpbnQoc3RhdHMpDQoNCmBgYA0KDQoNCiMjIyAyLjHigKIgQmVyZGFzYXJrYW4gaGFzaWwgYW5hbGlzaXMsIHdpbGF5YWggbWFuYSB5YW5nIG1lbWVybHVrYW4gcGVyaGF0aWFuIGtodXN1cyB1bnR1ayBtZW5pbmdrYXRrYW4gZWZpc2llbnNpIHBlbmdpcmltYW4/DQoNCiBCZXJkYXNhcmthbiBIYXNpbCBBbmFsaXNpcw0KDQogKldpbGF5YWggeWFuZyBNZW1lcmx1a2FuIFBlcmhhdGlhbiBLaHVzdXMgYWRhbGFoICoqV2lsYXlhaCBTZWxhdGFuKioqDQogDQogDQogICAtICpXaWxheWFoIFNlbGF0YW4qOg0KICAgDQogICAgIC0gUmF0YS1yYXRhIHdha3R1IHBlbmdpcmltYW4gdGVydGluZ2dpIGRpIGFudGFyYSBzZW11YSB3aWxheWFoICgqNyBqYW0qKS4NCiAgICAgDQogICAgIC0gTWVkaWFuIGp1bWxhaCBiYXJhbmcgeWFuZyBkaWtpcmltIGN1a3VwIGJlc2FyICgqMjIwIHVuaXQqKSwgeWFuZyBtZW51bmp1a2thbiB2b2x1bWUgcGVuZ2lyaW1hbiB0aW5nZ2kuDQogICAgIA0KICAgICAtIFN0YW5kYXJkIGRldmlhc2kgd2FrdHUgcGVuZ2lyaW1hbiBrZWNpbCAoKjEgamFtKiksIG1lbnVuanVra2FuIHdha3R1IHBlbmdpcmltYW4geWFuZyBjdWt1cCBrb25zaXN0ZW4sIG5hbXVuIHRldGFwIHJlbGF0aWYgbGFtYmF0Lg0KICAgICANCiAgICAgLSBSYXRhLXJhdGEgYmlheWEgcGVyIHVuaXQgeWFuZyB0aWRhayBkaXNlYnV0a2FuIHNlY2FyYSBsYW5nc3VuZyBkYWxhbSB0YWJlbCwgbmFtdW4gamlrYSByYXRhLXJhdGEgYmlheWEgcGVyIHVuaXQgdGluZ2dpLCBpbmkgbWVuamFkaSBpbmRpa2F0b3IgdGFtYmFoYW4uDQoNCiAgIERhcmkgZGF0YSBpbmksICpXaWxheWFoIFNlbGF0YW4qIG1lbWVybHVrYW4gcGVyaGF0aWFuIGtodXN1cyBrYXJlbmEgd2FrdHUgcGVuZ2lyaW1hbiBsZWJpaCBsYW1hIGRpYmFuZGluZ2thbiB3aWxheWFoIGxhaW4sIG1lc2tpcHVuIHZvbHVtZSBiYXJhbmdueWEgdGluZ2dpLiBFZmlzaWVuc2kgd2FrdHUgcGVuZ2lyaW1hbiBtZW5qYWRpIGZva3VzIHBlcmJhaWthbi4NCg0KDQojIyMgMi4y4oCiIEFwYSByZWtvbWVuZGFzaSB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuIGRpIHdpbGF5YWggdGVyc2VidXQ/DQoNCiBSZWtvbWVuZGFzaSB1bnR1ayBXaWxheWFoIFNlbGF0YW4NCg0KIyMjIyAyLjIuMS4gKlBlbmdvcHRpbWFsYW4gV2FrdHUgUGVuZ2lyaW1hbioNCiAgIC0gKlJhbmNhbmcgUnV0ZSB5YW5nIExlYmloIFBlbmRlayo6DQogICAgIEFuYWxpc2lzIHVsYW5nIHJ1dGUgdHJhbnNwb3J0YXNpIGRlbmdhbiBtZW5nZ3VuYWthbiBwZXJhbmdrYXQgbHVuYWsgb3B0aW1pc2FzaSBydXRlIHVudHVrIG1lbmd1cmFuZ2kgd2FrdHUgcGVyamFsYW5hbi4NCiAgIC0gKkd1bmFrYW4gVHJhbnNwb3J0YXNpIENlcGF0KjoNCiAgICAgUGlsaWggbW9kYSB0cmFuc3BvcnRhc2kgeWFuZyBsZWJpaCBlZmlzaWVuLCBzZXBlcnRpIGtlbmRhcmFhbiBkZW5nYW4ga2VjZXBhdGFuIHRpbmdnaSBhdGF1IHRyYW5zcG9ydGFzaSBiZXJiYXNpcyByZWwgamlrYSBtZW11bmdraW5rYW4uDQogICAtICpQZW5qYWR3YWxhbiB5YW5nIExlYmloIEJhaWsqOg0KICAgICBBdHVyIGphZHdhbCBwZW5naXJpbWFuIHBhZGEgd2FrdHUgZGVuZ2FuIGxhbHUgbGludGFzIHlhbmcgbGViaWggbGFuY2FyIHVudHVrIG1lbmdoaW5kYXJpIGtldGVybGFtYmF0YW4uDQoNCiMjIyMgMi4yLjIuICpFZmlzaWVuc2kgQmlheWEqDQogICAtICpLb25zb2xpZGFzaSBQZW5naXJpbWFuKjoNCiAgICAgR2FidW5na2FuIGJlYmVyYXBhIHBlbmdpcmltYW4gbWVuamFkaSBzYXR1IHBlcmphbGFuYW4gdW50dWsgbWVtYW5mYWF0a2FuIGthcGFzaXRhcyBrZW5kYXJhYW4gc2VjYXJhIHBlbnVoLg0KICAgLSAqTmVnb3NpYXNpIGRlbmdhbiBQZW55ZWRpYSBMb2dpc3Rpayo6DQogICAgIEppa2EgbWVuZ2d1bmFrYW4gbGF5YW5hbiBsb2dpc3RpayBwaWhhayBrZXRpZ2EsIGxha3VrYW4gbmVnb3NpYXNpIHVsYW5nIHRhcmlmIHVudHVrIG1lbmd1cmFuZ2kgYmlheWEgcGVyIHVuaXQuDQogICAtICpFdmFsdWFzaSBJbmZyYXN0cnVrdHVyIExvZ2lzdGlrKjoNCiAgICAgUGVyYmFpa2kgamFsYW4gYXRhdSBha3NlcyBrZSB0aXRpayBkaXN0cmlidXNpIGRpIFdpbGF5YWggU2VsYXRhbiB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIHBlcmphbGFuYW4uDQoNCiMjIyMgMi4yLjMuICpQZW5pbmdrYXRhbiBNYW5hamVtZW4gTG9naXN0aWsqDQogICAtICpHdWRhbmcgTGViaWggRGVrYXQqOg0KICAgICBKaWthIGphcmFrIHRlcmxhbHUgamF1aCwgYmFuZ3VuIGd1ZGFuZyBwZW55aW1wYW5hbiBzZW1lbnRhcmEgZGkgZGVrYXQgV2lsYXlhaCBTZWxhdGFuIHVudHVrIG1lbXBlcnBlbmRlayBqYXJhayBwZW5naXJpbWFuLg0KICAgLSAqUGVuZ2d1bmFhbiBUZWtub2xvZ2kqOg0KICAgICBJbXBsZW1lbnRhc2lrYW4gc2lzdGVtIHBlbGFjYWthbiBiZXJiYXNpcyBHUFMgdW50dWsgbWVtYW50YXUgZGFuIG1lbXBlcmJhaWtpIHdha3R1IHBlbmdpcmltYW4gc2VjYXJhIHJlYWwtdGltZS4NCiAgIC0gKlBlbmluZ2thdGFuIFNETSo6DQogICAgIExhdGloIGthcnlhd2FuIGxvZ2lzdGlrIHVudHVrIG1lbmdlbG9sYSBwcm9zZXMgcGVuZ2lyaW1hbiBsZWJpaCBjZXBhdCBkYW4gZWZpc2llbi4NCg0KIyMjIyAyLjIuNC4gKkZva3VzIHBhZGEgQmFyYW5nIGRlbmdhbiBWb2x1bWUgVGluZ2dpKg0KICAgLSBQYXN0aWthbiBiYXJhbmcgZGVuZ2FuIHZvbHVtZSBwZW5naXJpbWFuIHRpbmdnaSAoc2VwZXJ0aSBwYWthaWFuIGRhbiBtYWthbmFuIGRpIFdpbGF5YWggU2VsYXRhbikgZGlwcmlvcml0YXNrYW4gZGFsYW0gdHJhbnNwb3J0YXNpIHVudHVrIG1lbmdoaW5kYXJpIGtldGVybGFtYmF0YW4uDQoNCkRlbmdhbiBsYW5na2FoLWxhbmdrYWggaW5pLCBXaWxheWFoIFNlbGF0YW4gZGFwYXQgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIGJhaWsgZGFyaSBzZWdpIHdha3R1IG1hdXB1biBiaWF5YSwgc2VrYWxpZ3VzIG1lbXBlcnRhaGFua2FuIGt1YWxpdGFzIGxheWFuYW4uDQoNCiMjIDMuIEtpbmVyamEgQmVyZGFzYXJrYW4gSmVuaXMgQmFyYW5nOg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBMb2FkIGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQoNCiMgRGF0YQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsIA0KICAgICAgICAgICAgICAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiksDQogIEplbmlzX0JhcmFuZyA9IGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgDQogICAgICAgICAgICAgICAgICAgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgDQogICAgICAgICAgICAgICAgICAgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iKSwNCiAgSnVtbGFoX0JhcmFuZyA9IGMoMjAwLCAxNTAsIDE4MCwgMTIwLCAyNTAsIDMwMCwgMjIwLCAxNDAsIDE4MCwgMzUwLCAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9QZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgDQogICAgICAgICAgICAgICAgICAgICA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBLaW5lcmphIEJlcmRhc2Fya2FuIEplbmlzIEJhcmFuZyBkYW4gV2lsYXlhaA0Ka2luZXJqYV9iYXJhbmcgPC0gZGF0YSAlPiUNCiAgZ3JvdXBfYnkoV2lsYXlhaCwgSmVuaXNfQmFyYW5nKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIFJhdGFfUmF0YV9XYWt0dSA9IG1lYW4oV2FrdHVfUGVuZ2lyaW1hbiksDQogICAgUmF0YV9SYXRhX0JpYXlhID0gbWVhbihCaWF5YV9QZXJfVW5pdCksDQogICAgVG90YWxfSnVtbGFoX0JhcmFuZyA9IHN1bShKdW1sYWhfQmFyYW5nKSwNCiAgICAuZ3JvdXBzID0gImRyb3AiICMgVW50dWsgbWVuZ2hpbmRhcmkgd2FybmluZyB0ZW50YW5nIGdyb3VwaW5nDQogICkgJT4lDQogIGFycmFuZ2UoV2lsYXlhaCwgUmF0YV9SYXRhX1dha3R1LCBSYXRhX1JhdGFfQmlheWEpDQoNCiMgT3V0cHV0IGhhc2lsDQpwcmludChraW5lcmphX2JhcmFuZykNCg0KYGBgDQoNCg0KIyMjIDMuMSBBbmFsaXNpcyBraW5lcmphIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gamVuaXMgYmFyYW5nIGRhbiB3aWxheWFoLiBNYW5hIHlhbmcgbWVtaWxpa2kgd2FrdHUgcGVuZ2lyaW1hbiBsZWJpaCBjZXBhdCBkYW4gYmlheWEgcGVyIHVuaXTCoGxlYmlowqByZW5kYWg/DQoNCiMjIyMgMy4xLjEgV2FrdHUgUGVuZ2lyaW1hbiBQYWxpbmcgQ2VwYXQ6DQoxLiAqKldpbGF5YWggVGVuZ2FoIChFbGVrdHJvbmlrKSoqOiA0IGphbS4NCjIuICoqV2lsYXlhaCBVdGFyYSAoUGVyYWxhdGFuKSoqOiA0IGphbS4NCg0KIyMjIyAzLjEuMiBCaWF5YSBQZXIgVW5pdCBQYWxpbmcgUmVuZGFoOg0KMS4gKipXaWxheWFoIFRlbmdhaCAoUGFrYWlhbikqKjogUnAgNyw4MDAvdW5pdC4NCjIuICoqV2lsYXlhaCBTZWxhdGFuIChQYWthaWFuKSoqOiBScCA4LDAwMC91bml0Lg0KDQojIyMjIDMuMS4zIEtvbWJpbmFzaSBXYWt0dSBDZXBhdCBkYW4gQmlheWEgUmVuZGFoOg0KLSAqKldpbGF5YWggVGVuZ2FoIChFbGVrdHJvbmlrKSoqOiBXYWt0dSA0IGphbSBkZW5nYW4gYmlheWEgUnAgMTQsMDAwL3VuaXQuDQotICoqV2lsYXlhaCBTZWxhdGFuIChQYWthaWFuKSoqOiBXYWt0dSA4IGphbSBkZW5nYW4gYmlheWEgUnAgOCwwMDAvdW5pdCAobXVyYWggdGV0YXBpIGxlYmloIGxhbWEpLg0KDQojIyMgMy4xLjQgS2VzaW1wdWxhbg0KLSBKaWthIGZva3VzIHBhZGEgKip3YWt0dSBwZW5naXJpbWFuIHRlcmNlcGF0KiosIHdpbGF5YWggKipUZW5nYWgqKiAoRWxla3Ryb25paykgZGFuICoqVXRhcmEqKiAoUGVyYWxhdGFuKSB1bmdndWwuDQotIEppa2EgZm9rdXMgcGFkYSAqKmJpYXlhIHBlciB1bml0IHRlcmVuZGFoKiosIHdpbGF5YWggKipUZW5nYWgqKiAoUGFrYWlhbikgbWVuamFkaSBwaWxpaGFuIHRlcmJhaWsuDQotIEtvbWJpbmFzaSB3YWt0dSBjZXBhdCBkYW4gYmlheWEgcmVuZGFoIHRpZGFrIHNlbGFsdSB0ZXJzZWRpYSBzZWNhcmEgb3B0aW1hbC4gRWxla3Ryb25payBkaSB3aWxheWFoICoqVGVuZ2FoKiogbWVtaWxpa2kgcGVyZm9ybWEgdGVyYmFpayBkZW5nYW4gd2FrdHUgY2VwYXQgZGFuIGJpYXlhIHJlbGF0aWYga29tcGV0aXRpZi4NCg0KDQojIFJlZmVyZW5zaQ0KDQpfQmFrdGkgU2lyZWdhciwgTS5TYy4sIENEUy4gKDIwMjQpLiBVa3VyYW4gUGVtdXNhdGFuIERhdGEuIERpYW1iaWwgZGFyaV8gaHR0cHM6Ly9ib29rZG93bi5vcmcvZHNjaWVuY2VsYWJzL3N0YXRpc3Rpa2FfZGFzYXIvX2Jvb2svVWt1cmFuX1BlbnllYmFyYW5fRGF0YS5odG1sDQoNCl9GZWJyaWFuaSwgUy4gKDIwMjIpLiBBbmFsaXNpcyBEZXNrcmlwdGlmIFN0YW5kYXIgRGV2aWFzaS4gSnVybmFsIFBlbmRpZGlrYW4gVGFtYnVzYWksIDYoMSksIDkxMC05MTMuXw0KDQpfUHJpbWFuZGFyaSwgQS4gSC4sICYgS2VzdW1hd2F0aSwgQS4gVWt1cmFuIFBlbnllYmFyYW4gRGF0YS5fDQoNCl9DaHlhbiwgUC4sIEhhc25pYXRpLCBILiwgTWFyc2lzbm8sIFcuLCBBdGhhciwgRy4gQS4sIFdhc2l0bywgTi4sIE1pbmdnYW5pLCBGLiwgLi4uICYgQXNiYW51LCBELiBFLiAoMjAyNCkuIFN0YXRpc3Rpa2EgUGVuZGlkaWthbjogUGFuZHVhbiBQcmFrdGlzIFN0YXRpc3Rpa2EgdW50dWsgUGVuZGlkaWthbi4gUGVuZXJiaXQgTWlmYW5kaSBNYW5kaXJpIERpZ2l0YWwsIDEoMDEpLl8NCg0KX1N1dGlzbmEsIEkuICgyMDIwKS4gU3RhdGlzdGlrYSBwZW5lbGl0aWFuLiBVbml2ZXJzaXRhcyBOZWdlcmkgR29yb250YWxvLCAxKDEpLCAxLTE1Ll8NCg0K