TUGAS STATISTIKA DASAR

Ukuran Penyebaran Data

Fikaa.jpg


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

Hitung rata-rata, median, dan standar deviasi untuk masing-masing cabang.

Data Penjualan Cabang A

Cabang A (\(50\), \(55\), \(60\), \(65\), \(70\))

1. Rata-Rata (Mean)

Rata-rata (mean) dihitung dengan menjumlahkan semua data, lalu membaginya dengan banyaknya data.

\[ {Mean} = \frac{\sum x}{n} \]

Langkah-langkah Perhitungan:

\[ \text{Mean =} \ \frac{50 + 55 + 60 + 65+ 70}{5} \]

\[ \text{Mean =} \ \frac{300}{5} =60 \] Hasil: Rata-rata penjualan di cabang A adalah \(60\)

2.Median

Median adalah nilai tengah dari data yang telah diurutkan. Karena jumlah datanya ganjil \((5\) data), median adalah data yang berada di tengah.

Data sudah diurutkan: \(50\), \(55\), \(60\), \(65\), \(70\)

Median = \(60\)

Hasil: Median penjualan di Cabang A adalah \(60\) juta rupiah.

3.Standar Deviasi

Standar deviasi mengukur seberapa jauh data menyebar dari rata-ratanya.

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\) = Setiap nilai data
\(\mu\) = rata-rata data
\(n\) = jumlah data

Langkah-langkah Perhitungannya

1.Hitung selisih setiap data dari mean, lalu kuadratkan:

\[ (50-60)^2= (-10)^2=100\] \[ (55-60)^2= (-5)^2=25\] \[ (60-60)^2= (0)^2=0\] \[ (65-60)^2= (5)^2=25\] \[ (70-60)^2= (10)^2=100\] 2.Jumlahkan hasil kuadrat

\[ 100 + 25 + 0+ 25+ 100=250\]

3.Bagi jumlah kuadrat selisih dengan banyaknya data (\(5\)):

\[ \ \frac{250}{5} =50 \] 4.Akar dari hasil tersebut adalah standar deviasi:

\[ \sigma = \sqrt{50} \approx 7.07 \]

Hasil: Standar deviasi penjualan di Cabang A adalah \(7,07\)

Data Penjualan Cabang B

Cabang B (\(40\), \(50\), \(60\), \(70\), \(80\))

1.Rata-rata (Mean)

Rumus untuk menghitung rata-rata (mean) adalah:

\[ {Mean} = \frac{\sum xi}{n} \]

  • \(xi\) = Setiap nilai data
  • \(n\) = Jumlah Data (5)

Perhitungan

\[ \text{Mean =} \ \frac{40 + 50 + 60 + 70+ 80}{5} \]

\[ \text{Mean =} \ \frac{300}{5} =60 \] Hasil: Rata-rata penjualan di cabang B adalah \(60\)

2.Median (Nilai Tengah)

Median adalah nilai tengah dari data yang diurutkan. Karena jumlah data adalah ganjil (\(5\)), median adalah nilai yang berada di posisi tengah.

Data yang sudah diurutkan: \(40\), \(50\), \(60\), \(70\), \(80\)

Jadi, nilai tengah atau median adalah \(60\) juta rupiah.

3.Standar Deviasi

Rumus untuk standar deviasi (\(\sigma\)) adalah:

\[ \sigma = \sqrt{\frac{\sum (x_i - \mu)^2}{n}} \]

\(x_i\) = Setiap nilai data
\(\mu\) = Mean (\(60\)) \(n\) = jumlah data (\(5\))

Langkah-langkah Perhitungannya:

1. Hitung selisih setiap nilai data dengan mean (\(60\)), lalu kuadratkan:

\[ (40-60)^2= (-20)^2=400\] \[ (50-60)^2= (-10)^2=100\]

\[ (60-60)^2= (0)^2=0\] \[ (70-60)^2= (10)^2=100\] \[ (80-60)^2= (20)^2=400\] 2.Jumlahkan hasil kuadrat:

\[ 400 + 100 + 0+ 100+ 400=1000 \]

3.Bagi hasil penjumlahan dengan jumlah data (\(5\)):

\[ \ \frac{1000}{5} =200 \]

4.Akar dari hasil tersebut:

\[ \sigma = \sqrt{200} \approx 14.14 \]

Hasil: Standar deviasi penjualan di Cabang B adalah \(14,14\)

Data Penjualan Cabang C

Cabang C (\(30\), \(30\), \(35\), \(40\), \(45\))

1. Rata-Rata (Mean) Untuk menghitung rata-rata, kita jumlahkan semua data penjualan dan kemudian bagi dengan banyaknya data.

\[ \text{Rata-Rata =} \ \frac{30 + 30 + 35 + 40+ 45}{5} \] \[ \text{Rata-Rata =} \ \frac{180}{5} =36 \]

Hasil: Rata-rata penjualan di cabang C adalah \(36\)

2.Median (Nilai Tengah)

Median adalah nilai tengah dari data yang sudah diurutkan.

Data sudah berurutan: \(30\), \(30\), \(35\), \(40\), \(45\)

Karena jumlah data adalah ganjil (\(5\) data), maka median adalah nilai yang ada di posisi tengah, yaitu \(35\)

3. Standar Deviasi (Standard Deviation)

Untuk menghitung standar deviasi, pertama kita harus menghitung variansi dan kemudian mencari akar kuadrat dari variansi tersebut

Langkah 1: Hitung Selisih Setiap Data dari Rata-Rata

Rata-rata (mean) = \(36\) jadi kita hitung selisih antara setiap data dan rata-rata, lalu kuadratkan hasilnya:

\[ (30-36)^2= (-6)^2=36\] \[ (30-36)^2= (-6)^2=36\]

\[ (35-36)^2= (-1)^2=1\]

\[ (40-36)^2= (4)^2=16\]

\[ (45-36)^2= (9)^2=81\]

Langkah 2: Jumlahkan Hasil Kuadratnya

\[ 36 + 36 + 1+ 16+ 81=170 \]

Langkah 3: Hitung Variansi Karena jumlah data adalah \(5\), kita bagi hasil jumlah kuadrat dengan \(5\) untuk menghitung variansi:

\[ \text{Mean =} \ \frac{170}{5} =34 \]

Langkah 4: Hitung Standar Deviasi Standar deviasi adalah akar kuadrat dari variansi:

\[ \sigma = \sqrt{34} \approx 5.83 \]

Penyebaran data penjualan di Cabang C memiliki standar deviasi sekitar \(5.83\)

Data Penjualan Cabang D

Cabang D (\(70\), \(75\), \(80\), \(85\), \(90\))

1. Rata-Rata (Mean)

Rumus Mean:

\[ {Mean} = \frac{\sum xi}{n} \] 1.Langkah Perhitungannya:

\[ \text{Mean =} \ \frac{70 + 75 + 80 + 85+ 90}{5} \] \[ \text{Mean =} \ \frac{400}{5} =80 \]

Hasil: Rata-rata penjualan di cabang D adalah \(80\)

2.Median (Nilai Tengah)

Untuk mencari median, data harus diurutkan (dalam hal ini sudah diurutkan): \(70\), \(75\), \(80\), \(85\), \(90\)

Karena jumlah datanya ganjil, median adalah nilai tengah, yaitu \(80\)

3.Standar deviasi

Rumus untuk standar deviasi (\(\sigma\)) adalah:

\[ \sigma = \sqrt{\frac{\sum (x_i - \mu)^2}{n}} \]

\(x_i\) = nilai data
\(\mu\) = Mean (\(80\)) \(n\) = jumlah data (\(5\))

Langkah-langkah Perhitungan:

1.Hitung selisih setiap data dari mean, lalu kuadratkan:

\[ (70-80)^2= (-10)^2=100\] \[ (70-85)^2= (-5)^2=25\] \[ (80-80)^2= (0)^2=0\] \[ (85-80)^2= (5)^2=25\] \[ (90-80)^2= (10)^2=100\] 2.Jumlahkan hasil kuadrat:

\[ 100 + 25 + 0+ 25+ 100=250 \]

3.Bagi dengan jumlah data (5):

\[ \ \frac{250}{5} =50 \] 4.Akar dari hasil tersebut:

\[ \sigma = \sqrt{50} \approx 7.07 \]

Cabang mana yang memiliki penyebaran data paling kecil? Jelaskan alasannya.

Rekap Standar Deviasi untuk Cabang A dan D

Cabang A (Data: \(50\), \(55\), \(60\), \(65\), \(70\))

  • Standar Deviasi: \(7,07\) (hasil perhitungan sebelumnya)

Cabang D (Data: \(70\), \(75\), \(80\), \(85\), \(90\))

  • Standar Deviasi: \(7,07\) (hasil perhitungan sebelumnya)

Kesimpulan Penyebaran Data

Cabang A dan Cabang D memiliki standar deviasi yang sama, yaitu (\(7,07\)). Ini berarti penyebaran data di kedua cabang tersebut sama-sama kecil dan stabil, meskipun nilai penjualannya berbeda.

Penjelasan Alasan

Standar deviasi mengukur seberapa jauh nilai-nilai dalam data menyebar dari rata-rata (mean). Jika standar deviasi kecil, berarti nilai-nilai data cenderung berkumpul di sekitar rata-rata. Dengan nilai standar deviasi yang sama untuk Cabang A dan D, dapat disimpulkan bahwa variasi atau penyebaran data penjualan dari kedua cabang ini sama kecilnya.

Penyebaran data yang kecil menunjukkan bahwa penjualan dari masing-masing cabang cukup konsisten atau stabil selama bulan tersebut.

Jika target penjualan minimum adalah \(50\) juta rupiah, cabang mana saja yang gagal mencapai target di semua datanya?

Target Penjualan Minimum: \(50\)

Kriteria: Cabang dikatakan gagal mencapai target jika semua nilai datanya di bawah \(50\).

1. Cabang A: \(50\), \(55\), \(60\), \(65\), \(70\)

  • Penilaian: Semua data: \(50\), \(55\), \(60\), \(65\), \(70\)

  • Nilai \(50\) sudah memenuhi target (sama dengan \(50\)).

Kesimpulan: Cabang A berhasil mencapai target karena tidak semua datanya di bawah \(50\) juta rupiah.

2. Cabang B: \(40\), \(50\), \(60\), \(70\), \(80\)

  • Penilaian: Data: \(40\), \(50\), \(60\), \(70\), \(80\)

  • Nilai \(40\) di bawah target, namun nilai lainnya (\(50\), \(60\), \(70\), \(80\)) memenuhi atau melebihi target.

Kesimpulan: Cabang B berhasil mencapai target karena tidak semua datanya di bawah \(50\).

3. Cabang C: \(30\), \(30\), \(35\), \(40\), \(45\)

  • Penilaian: Semua data: \(30\), \(30\), \(35\), \(40\), \(45\)

  • Semua nilai di bawah \(50\).

Kesimpulan: Cabang C gagal mencapai target karena semua penjualannya di bawah \(50\).

4. Cabang D: \(70\), \(75\), \(80\), \(85\), \(90\)

  • Penilaian: Semua data: \(70\), \(75\), \(80\), \(85\), \(90\)

  • Semua nilai di atas target \(50\).

Kesimpulan: Cabang D berhasil mencapai target karena semua penjualannya melebihi \(50\).

Ringkasan Hasil

Cabang A: ( \(50\), \(55\), \(60\), \(65\), \(70\))

  • Hasil : Berhasil Mencapai Target

Cabang B: ( \(40\), \(50\), \(60\), \(70\), \(80\))

  • Hasil : Berhasil Mencapai Target

Cabang C: (\(30\), \(30\), \(35\), \(40\), \(45\))

  • Hasil : Gagal Mencapai Target

Cabang D: ( \(70\), \(75\), \(80\), \(85\), \(90\)

  • Hasil: Berhasil Mencapai Target

Penjelasan Akhir

Hanya Cabang C yang gagal mencapai target karena semua datanya di bawah \(50\) Cabang lainnya memiliki setidaknya satu atau lebih nilai penjualan yang memenuhi atau melampaui target \(50\).

Buatlah diagram kotak (box plot) untuk memvisualisasikan penyebaran data setiap cabang.

Visualisasi Box Plot Cabang A

Visualisasi Box Plot Cabang B

Visualisasi Box Plot Cabang C

Visualisasi Box Plot Cabang D

Gabungan Visualisasi Box Plot (Cabang A,Cabang B,Cabang C,Cabang D)

Jika Anda adalah manajer perusahaan, bagaimana Anda akan menggunakan informasi ini untuk merencanakan strategi peningkatan penjualan?

Sebagai manajer perusahaan, saya akan memanfaatkan informasi ini untuk melihat pola dan variasi penjualan di setiap cabang. Dari data ini, misalnya, jika ada cabang yang hasil penjualannya konsisten rendah atau tidak stabil, saya akan mencoba mencari tahu penyebabnya. Mungkin perlu diberikan pelatihan tambahan untuk tim penjualan atau strategi pemasaran yang lebih efektif.

Untuk cabang dengan performa penjualan yang sudah baik, seperti Cabang D, saya akan mencari cara agar performa ini tetap terjaga, misalnya dengan memberikan insentif atau bonus kepada karyawan agar mereka tetap termotivasi.

Selain itu, dengan mengetahui penyebaran data penjualan dari setiap cabang, saya bisa membuat target yang lebih realistis untuk masing-masing cabang. Jadi, strategi yang saya terapkan bisa lebih spesifik, sesuai kebutuhan dan tantangan di setiap lokasi.

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:

Data

Wilayah Jenis Barang Jumlah Barang (unit) Waktu Pengiriman (jam) Biaya per Unit (Rp)
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:

  • Visualisasikan pengiriman barang berdasarkan jumlah barang, waktu pengiriman, dan biaya per unit dengan menggunakan plot 3D.

  • Tentukan wilayah mana yang memiliki efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman.

Visualisasi Plot 3D

menentukan wilayah dengan efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman

Langkah-langkah analisis:

1.Rasio Efisiensi: Rasio efisiensi dapat dihitung dengan membagi biaya per unit dengan waktu pengiriman. Semakin kecil rasio ini, semakin efisien pengirimannya (biaya lebih rendah dan waktu lebih singkat).

Formula Rasio Efisiensi:

\[ \text{Rasio Efisiensi} = \dfrac{\text{Biaya Per Unit } }{Waktu \ Pengiriman} \]

2. Kelompokkan Berdasarkan Wilayah: Kita kemudian akan mengelompokkan data berdasarkan wilayah dan menghitung rata-rata rasio efisiensi untuk setiap wilayah. Wilayah dengan rasio tertinggi akan dianggap memiliki efisiensi pengiriman terendah.

## # 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       4890000            9604
## 5 Utara       7590000           11328

Penjelasan Efisiensi Biaya

  • Efisiensi Biaya diukur dalam Rp/unit dan menunjukkan berapa besar biaya yang dikeluarkan per unit barang yang dikirim.

  • Semakin tinggi nilai Efisiensi Biaya, semakin besar biaya yang dikeluarkan untuk setiap unit barang, yang berarti pengiriman di wilayah tersebut kurang efisien.

Analisis Wilayah dengan Efisiensi Terendah

Dari tabel di atas, kita bisa melihat peringkat efisiensi biaya dari tertinggi ke terendah:

1. Barat: \(12,593.023\) (paling tidak efisien)

2. Selatan: \(11,758.065\)

3. Utara: \(11,328.358\)

4. Tengah: \(10,641.026\)

5. Timur: \(9,603.922\) (paling efisien)

Kesimpulan

Wilayah dengan efisiensi biaya terendah (biaya tertinggi per unit) adalah:

Barat dengan Efisiensi Biaya sebesar \(12,593.023\) Rp/unit.

Ini menunjukkan bahwa pengiriman di wilayah Barat memerlukan biaya tertinggi per unit barang yang dikirim, sehingga perlu perhatian khusus untuk meningkatkan efisiensi.

2.Rekomendasi Operasional:

Berdasarkan hasil analisis, wilayah mana yang memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman?

Berdasarkan hasil analisis dari data Total Biaya dan Efisiensi Biaya per wilayah, wilayah yang memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman adalah:

Wilayah Barat

Alasan:

1. Efisiensi Biaya Tertinggi:

  • Wilayah Barat memiliki efisiensi biaya sebesar \(12,593.023\) Rp/unit, tertinggi dibandingkan wilayah lainnya.

  • Ini berarti biaya pengiriman per unit di wilayah ini lebih mahal daripada wilayah lain.

2. Total Biaya yang Tinggi:

Total biaya pengiriman di wilayah Barat adalah Rp \(5,415,000,\) yang cukup besar meskipun jumlah barang yang dikirim lebih sedikit dibanding wilayah lain.

Rekomendasi untuk Wilayah Barat:

1. Optimalkan rute dan jadwal pengiriman untuk mengurangi waktu pengiriman.

2. Gunakan jenis transportasi yang lebih efisien dan hemat biaya.

3. Evaluasi kembali proses logistik untuk menemukan titik-titik inefisiensi.

4. Negosiasi ulang biaya pengiriman dengan penyedia jasa transportasi.

5.Konsolidasi pengiriman barang untuk memaksimalkan kapasitas angkut dan mengurangi biaya per unit.

Dengan melakukan langkah-langkah ini, diharapkan efisiensi biaya pengiriman di wilayah Barat dapat meningkat.

Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di wilayah tersebut?

1. Optimalkan Rute dan Jadwal Pengiriman

  • Identifikasi rute tercepat dan paling efisien dengan menggunakan teknologi seperti sistem manajemen transportasi (TMS) atau aplikasi pemetaan digital.

  • Hindari rute dengan kemacetan atau kondisi jalan yang buruk untuk mempercepat waktu pengiriman.

  • Konsolidasi pengiriman berdasarkan wilayah tujuan agar bisa dilakukan sekali jalan.

2. Gunakan Jenis Transportasi yang Lebih Efisien

  • Evaluasi jenis kendaraan yang digunakan untuk pengiriman.

  • Gunakan kendaraan dengan kapasitas angkut lebih besar atau kendaraan yang lebih hemat bahan bakar untuk menekan biaya operasional.

  • Pertimbangkan opsi transportasi seperti pengiriman melalui kereta api atau kapal untuk jarak jauh jika lebih ekonomis.

3. Negosiasi Tarif dengan Penyedia Layanan Logistik

  • Lakukan negosiasi ulang dengan penyedia jasa pengiriman untuk mendapatkan tarif yang lebih kompetitif.

  • Pertimbangkan bekerja sama dengan beberapa penyedia layanan untuk membandingkan biaya dan memilih yang paling efisien.

4. Konsolidasi Pengiriman Barang

  • Gabungkan pengiriman dari berbagai pesanan untuk memaksimalkan kapasitas angkut dalam satu kali perjalanan.

  • Hindari pengiriman dengan muatan kecil yang menyebabkan biaya per unit menjadi tinggi.

5. Implementasi Teknologi dan Automasi

  • Gunakan sistem pelacakan pengiriman secara real-time untuk memantau pergerakan barang dan mengidentifikasi hambatan.

  • Automasi dalam manajemen gudang dan proses pemuatan barang agar lebih cepat dan efisien.

6. Kurangi Waktu Bongkar Muat

  • Tingkatkan efisiensi proses bongkar muat barang dengan memperbaiki sistem operasional gudang.

  • Pastikan staf gudang memiliki prosedur kerja yang jelas untuk mempercepat proses ini.

7. Evaluasi dan Analisis Berkala

  • Lakukan evaluasi kinerja pengiriman secara berkala untuk menemukan titik-titik inefisiensi.

  • Terapkan metrik kinerja seperti rata-rata waktu pengiriman dan biaya per unit untuk memantau peningkatan efisiensi.

3. Kinerja Berdasarkan Jenis Barang:

Berdasarkan data pengiriman dari Perusahaan XYZ, berikut adalah analisis kinerja pengiriman berdasarkan jenis barang dan wilayah dengan melihat waktu pengiriman dan biaya per unit:

Wilayah Jenis Barang Jumlah Barang (unit) Waktu Pengiriman (jam) Biaya per Unit (Rp)
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

Analisis Kinerja Berdasarkan Jenis Barang

1. Elektronik

  • Waktu Pengiriman Rata-Rata

\[ (5+4+6+6)/4=5,25 \ jam\]

  • Biaya per Unit Rata-Rata:

\[ (15,000+14,000+14,500+16,000)/4=14,875 \ Rp/\ Unit \]

2. Pakaian

  • Waktu Pengiriman Rata-Rata

\[ (8+9+8+7)/4=8 \ jam\]

  • Biaya per Unit Rata-Rata:

\[ (8,000+8,500+7,800+8,200)/4=8,125 \ Rp/\ Unit \]

3. Makanan

  • Waktu Pengiriman Rata-Rata

\[ (6+7+5)/3=6 \ jam\]

  • Biaya per Unit Rata-Rata:

\[ (10,000+9,500+10,500)/3=10,000 \ Rp/\ Unit \]

4. Peralatan

  • Waktu Pengiriman Rata-Rata

\[ (7+5+4+5)/4=5,25 \ jam\]

  • Biaya per Unit Rata-Rata:

\[ (12,000+11,000+12,000+11,500)/4=11,625 \ Rp/\ Unit \]

Kesimpulan Berdasarkan Jenis Barang

1. Waktu Pengiriman Tercepat:

  • Elektronik dan Peralatan: Rata-rata \(5,25\) jam

2. Biaya per Unit Terendah:

  • Pakaian: Rata-rata \(8,125\) Rp/unit

Analisis Kinerja Barang

Analisis Kinerja Pengiriman per Wilayah
Wilayah Total_Waktu_Pengiriman Jumlah_Pengiriman Rata_Rata_Waktu Rata_Rata_Biaya_per_Unit
Utara 18 3 6.00 11833
Selatan 21 3 7.00 11833
Timur 18 3 6.00 9733
Barat 18 3 6.00 12333
Tengah 17 3 5.67 11100

Kesimpulan Berdasarkan Wilayah

1. Waktu Pengiriman Tercepat:

  • Tengah: Rata-rata \(5,67\) jam

2. Biaya per Unit Terendah:

  • Timur: Rata-rata \(9,733\) Rp/unit

Rekomendasi

  • Wilayah yang Efisien:

    • Timur: Biaya per unit terendah (\(9,733\)) Rp/unit) dan waktu pengiriman relatif cepat (\(6\)) jam).
  • Wilayah yang Perlu Perhatian:

    • Barat: Biaya per unit tertinggi (\(12,333\)) Rp/unit) meskipun waktu pengiriman tidak terlalu lama (\(6\) jam).

    • Fokus pada optimasi logistik di wilayah ini untuk menekan biaya.

Dengan memperhatikan rekomendasi ini, perusahaan dapat meningkatkan efisiensi pengiriman secara keseluruhan.

Referensi

TKI Assessment. (n.d.). Ukuran Penyebaran Data: Varians dan Standar Deviasi. TKI. Retrieved from https://assessment.tki.org.nz/Using-evidence-for-learning/Working-with-data/Concepts/Variance-and-standard-deviation

Investopedia. (n.d.). Standard Deviation. Investopedia. Retrieved from https://www.investopedia.com/terms/s/standarddeviation.asp

Khan Academy. (n.d.). Standard Deviation and Variance. Khan Academy. Retrieved from https://www.khanacademy.org/math/statistics-probability/summarizing-quantitative-data/variance-and-standard-deviation/a/variance-and-standard-deviation-review

Gramedia. (n.d.). Penyebaran Data dan Pengukuran: Varians dan Standar Deviasi. Gramedia. Retrieved from https://www.gramedia.com/literasi/standar-deviasi-dan-varians/

Mile App. (n.d.). Cara Praktis Meningkatkan Efisiensi Pengiriman dalam Bisnis FMCG. Mile. Retrieved from https://mile.app/id/blog/cara-praktis-meningkatkan-efisiensi-pengiriman-dalam-bisnis-fmcg

LS0tDQp0aXRsZTogIlRVR0FTIFNUQVRJU1RJS0EgREFTQVIiDQoNCnN1YnRpdGxlOiAiVWt1cmFuIFBlbnllYmFyYW4gRGF0YSINCg0KYXV0aG9yOiANCiAgLSAiIEZpa2EgSXJzYW5kaSBEZXN2eWFudGkgKDUyMjQwMDAxMykiDQogIA0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJTdHlsZS5jc3MiDQogICAgDQotLS0NCg0KIDxpbWcgaWQ9ImxvZ28tdXRhbWEiIHNyYz0iRmlrYWEuanBnIiBhbHQ9IkZpa2FhLmpwZyIgc3R5bGU9IndpZHRoOjIwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyI+DQoNCi0tLQ0KDQojIExhdGloYW4gMQ0KDQpTZWJ1YWggcGVydXNhaGFhbiBpbmdpbiBtZW1haGFtaSBrYXJha3RlcmlzdGlrIHBlbnllYmFyYW4gZGF0YSBoYXNpbCBwZW5qdWFsYW4gZGFyaSBlbXBhdCBjYWJhbmcgKEEsIEIsIEMsIGRhbiBEKSBzZWxhbWEgc2F0dSBidWxhbiB0ZXJha2hpci4gRGF0YSBwZW5qdWFsYW4gKGRhbGFtIGp1dGEgcnVwaWFoKSBkYXJpIGtlZW1wYXQgY2FiYW5nIHRlcnNlYnV0IGFkYWxhaCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCi0gQ2FiYW5nIEE6IDUwLCA1NSwgNjAsIDY1LCA3MA0KDQotIENhYmFuZyBCOiA0MCwgNTAsIDYwLCA3MCwgODANCg0KLSBDYWJhbmcgQzogMzAsIDMwLCAzNSwgNDAsIDQ1DQoNCi0gQ2FiYW5nIEQ6IDcwLCA3NSwgODAsIDg1LCA5MA0KDQojIyBIaXR1bmcgcmF0YS1yYXRhLCBtZWRpYW4sIGRhbiBzdGFuZGFyIGRldmlhc2kgdW50dWsgbWFzaW5nLW1hc2luZyBjYWJhbmcuDQoNCiMgRGF0YSBQZW5qdWFsYW4gQ2FiYW5nIEEgDQoqKkNhYmFuZyBBKiogIChcKDUwXCksIFwoNTVcKSwgXCg2MFwpLCBcKDY1XCksIFwoNzBcKSkgDQoNCioqMS4gUmF0YS1SYXRhIChNZWFuKSoqDQoNCioqUmF0YS1yYXRhIChtZWFuKSoqIGRpaGl0dW5nIGRlbmdhbiBtZW5qdW1sYWhrYW4gc2VtdWEgZGF0YSwgbGFsdSBtZW1iYWdpbnlhIGRlbmdhbiBiYW55YWtueWEgZGF0YS4NCg0KJCQNCntNZWFufSA9IFxmcmFje1xzdW0geH17bn0NCiQkDQoNCioqTGFuZ2thaC1sYW5na2FoIFBlcmhpdHVuZ2FuOioqDQoNCiQkDQpcdGV4dHtNZWFuID19IFwgXGZyYWN7NTAgKyA1NSArIDYwICsgNjUrIDcwfXs1fSANCiQkDQoNCiQkDQpcdGV4dHtNZWFuID19IFwgXGZyYWN7MzAwfXs1fSA9NjANCiQkDQoqKkhhc2lsOioqIFJhdGEtcmF0YSBwZW5qdWFsYW4gZGkgY2FiYW5nIEEgYWRhbGFoIFwoNjBcKQ0KDQoqKjIuTWVkaWFuKioNCg0KKipNZWRpYW4qKiBhZGFsYWggbmlsYWkgdGVuZ2FoIGRhcmkgZGF0YSB5YW5nIHRlbGFoIGRpdXJ1dGthbi4NCkthcmVuYSBqdW1sYWggZGF0YW55YSBnYW5qaWwgXCgoNVwpIGRhdGEpLCBtZWRpYW4gYWRhbGFoIGRhdGEgeWFuZyBiZXJhZGEgZGkgdGVuZ2FoLg0KDQpEYXRhIHN1ZGFoIGRpdXJ1dGthbjoNClwoNTBcKSwgXCg1NVwpLCBcKDYwXCksIFwoNjVcKSwgXCg3MFwpDQoNCk1lZGlhbiA9IFwoNjBcKQ0KDQoqKkhhc2lsOioqIE1lZGlhbiBwZW5qdWFsYW4gZGkgQ2FiYW5nIEEgYWRhbGFoIFwoNjBcKSBqdXRhIHJ1cGlhaC4NCg0KDQoqKjMuU3RhbmRhciBEZXZpYXNpKioNCg0KKipTdGFuZGFyIGRldmlhc2kqKiBtZW5ndWt1ciBzZWJlcmFwYSBqYXVoIGRhdGEgbWVueWViYXIgZGFyaSByYXRhLXJhdGFueWEuIA0KDQpTdGFuZGFyIGRldmlhc2kgKFwoXHNpZ21hXCkpIHVudHVrIGRhdGEgcG9wdWxhc2kgZGloaXR1bmcgbWVuZ2d1bmFrYW4gcnVtdXM6DQoNClxbDQpcc2lnbWEgPSBcc3FydHtcZnJhY3tcc3VtICh4X2kgLSBcbXUpXjJ9e259fQ0KXF0NCg0KKipEaSBtYW5hOioqICANCiBcKFxzaWdtYVwpID0gU3RhbmRhciBkZXZpYXNpICANCiBcKHhfaVwpID0gU2V0aWFwIG5pbGFpIGRhdGEgIA0KIFwoXG11XCkgPSByYXRhLXJhdGEgZGF0YSAgDQogXChuXCkgPSBqdW1sYWggZGF0YQ0KIA0KICoqTGFuZ2thaC1sYW5na2FoIFBlcmhpdHVuZ2FubnlhKioNCiANCiAqKjEuSGl0dW5nIHNlbGlzaWggc2V0aWFwIGRhdGEgZGFyaSBtZWFuLCBsYWx1IGt1YWRyYXRrYW46KioNCiANCiAkJCAoNTAtNjApXjI9ICgtMTApXjI9MTAwJCQNCiAkJCAoNTUtNjApXjI9ICgtNSleMj0yNSQkDQogJCQgKDYwLTYwKV4yPSAoMCleMj0wJCQNCiAgJCQgKDY1LTYwKV4yPSAoNSleMj0yNSQkDQogICQkICg3MC02MCleMj0gKDEwKV4yPTEwMCQkDQogKioyLkp1bWxhaGthbiBoYXNpbCBrdWFkcmF0KioNCiANCiAkJCAxMDAgKyAyNSArIDArIDI1KyAxMDA9MjUwJCQNCiANCiAqKjMuQmFnaSBqdW1sYWgga3VhZHJhdCBzZWxpc2loIGRlbmdhbiBiYW55YWtueWEgZGF0YSAoXCg1XCkpOioqDQogDQogJCQgXCBcZnJhY3syNTB9ezV9ID01MCAkJA0KICoqNC5Ba2FyIGRhcmkgaGFzaWwgdGVyc2VidXQgYWRhbGFoIHN0YW5kYXIgZGV2aWFzaToqKg0KIA0KIFxbDQpcc2lnbWEgPSBcc3FydHs1MH0gXGFwcHJveCA3LjA3DQpcXQ0KDQoqKkhhc2lsOioqIFN0YW5kYXIgZGV2aWFzaSBwZW5qdWFsYW4gZGkgQ2FiYW5nIEEgYWRhbGFoIFwoNywwN1wpDQoNCiMgRGF0YSBQZW5qdWFsYW4gQ2FiYW5nIEINCg0KKipDYWJhbmcgQioqIChcKDQwXCksIFwoNTBcKSwgXCg2MFwpLCBcKDcwXCksIFwoODBcKSkgDQoNCioqMS5SYXRhLXJhdGEgKE1lYW4pKioNCg0KUnVtdXMgdW50dWsgbWVuZ2hpdHVuZyByYXRhLXJhdGEgKG1lYW4pIGFkYWxhaDoNCg0KJCQNCntNZWFufSA9IFxmcmFje1xzdW0geGl9e259DQokJA0KDQotIFwoeGlcKVwgPSBTZXRpYXAgbmlsYWkgZGF0YQ0KLSBcKG5cKVwgPSBKdW1sYWggRGF0YSAoNSkNCg0KKipQZXJoaXR1bmdhbioqDQoNCiQkDQpcdGV4dHtNZWFuID19IFwgXGZyYWN7NDAgKyA1MCArIDYwICsgNzArIDgwfXs1fSANCiQkDQoNCiQkDQpcdGV4dHtNZWFuID19IFwgXGZyYWN7MzAwfXs1fSA9NjANCiQkDQoqKkhhc2lsOioqIFJhdGEtcmF0YSBwZW5qdWFsYW4gZGkgY2FiYW5nIEIgYWRhbGFoIFwoNjBcKQ0KDQoqKjIuTWVkaWFuIChOaWxhaSBUZW5nYWgpKioNCg0KKipNZWRpYW4qKiBhZGFsYWggbmlsYWkgdGVuZ2FoIGRhcmkgZGF0YSB5YW5nIGRpdXJ1dGthbi4gS2FyZW5hIGp1bWxhaCBkYXRhIGFkYWxhaCBnYW5qaWwgKFwoNVwpKSwgbWVkaWFuIGFkYWxhaCBuaWxhaSB5YW5nIGJlcmFkYSBkaSBwb3Npc2kgdGVuZ2FoLg0KDQpEYXRhIHlhbmcgc3VkYWggZGl1cnV0a2FuOg0KXCg0MFwpLCBcKDUwXCksIFwoNjBcKSwgXCg3MFwpLCBcKDgwXCkNCg0KSmFkaSwgbmlsYWkgdGVuZ2FoIGF0YXUgbWVkaWFuIGFkYWxhaCBcKDYwXCkganV0YSBydXBpYWguDQoNCioqMy5TdGFuZGFyIERldmlhc2kqKg0KDQpSdW11cyB1bnR1ayBzdGFuZGFyIGRldmlhc2kgKFwoXHNpZ21hXCkpIGFkYWxhaDoNCg0KXFsNClxzaWdtYSA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxtdSleMn17bn19DQpcXQ0KDQpcKHhfaVwpID0gU2V0aWFwIG5pbGFpIGRhdGEgIA0KIFwoXG11XCkgPSBNZWFuIChcKDYwXCkpIA0KIFwoblwpID0ganVtbGFoIGRhdGEgKFwoNVwpKQ0KIA0KICoqTGFuZ2thaC1sYW5na2FoIFBlcmhpdHVuZ2FubnlhOioqDQogDQogKioxLiBIaXR1bmcgc2VsaXNpaCBzZXRpYXAgbmlsYWkgZGF0YSBkZW5nYW4gbWVhbiAoXCg2MFwpKSwgbGFsdSBrdWFkcmF0a2FuOioqDQogDQogJCQgKDQwLTYwKV4yPSAoLTIwKV4yPTQwMCQkDQogJCQgKDUwLTYwKV4yPSAoLTEwKV4yPTEwMCQkDQogDQogJCQgKDYwLTYwKV4yPSAoMCleMj0wJCQNCiAkJCAoNzAtNjApXjI9ICgxMCleMj0xMDAkJA0KICQkICg4MC02MCleMj0gKDIwKV4yPTQwMCQkDQogKioyLkp1bWxhaGthbiBoYXNpbCBrdWFkcmF0OioqDQogDQokJCA0MDAgKyAxMDAgKyAwKyAxMDArIDQwMD0xMDAwICQkDQoNCioqMy5CYWdpIGhhc2lsIHBlbmp1bWxhaGFuIGRlbmdhbiBqdW1sYWggZGF0YSAoXCg1XCkpOioqDQogDQogJCQgXCBcZnJhY3sxMDAwfXs1fSA9MjAwICQkDQogDQogKio0LkFrYXIgZGFyaSBoYXNpbCB0ZXJzZWJ1dDoqKg0KIA0KIFxbDQpcc2lnbWEgPSBcc3FydHsyMDB9IFxhcHByb3ggMTQuMTQNClxdDQoNCioqSGFzaWw6KiogU3RhbmRhciBkZXZpYXNpIHBlbmp1YWxhbiBkaSBDYWJhbmcgQiBhZGFsYWggXCgxNCwxNFwpDQoNCiMgRGF0YSBQZW5qdWFsYW4gQ2FiYW5nIEMNCioqQ2FiYW5nIEMqKiAoXCgzMFwpLCBcKDMwXCksIFwoMzVcKSwgXCg0MFwpLCBcKDQ1XCkpIA0KDQoqKjEuIFJhdGEtUmF0YSAoTWVhbikqKiANClVudHVrIG1lbmdoaXR1bmcgcmF0YS1yYXRhLCBraXRhIGp1bWxhaGthbiBzZW11YSBkYXRhIHBlbmp1YWxhbiBkYW4ga2VtdWRpYW4gYmFnaSBkZW5nYW4gYmFueWFrbnlhIGRhdGEuDQoNCiQkDQpcdGV4dHtSYXRhLVJhdGEgPX0gXCBcZnJhY3szMCArIDMwICsgMzUgKyA0MCsgNDV9ezV9IA0KJCQNCiQkDQpcdGV4dHtSYXRhLVJhdGEgPX0gXCBcZnJhY3sxODB9ezV9ID0zNg0KJCQNCg0KKipIYXNpbDoqKiBSYXRhLXJhdGEgcGVuanVhbGFuIGRpIGNhYmFuZyBDIGFkYWxhaCBcKDM2XCkNCg0KKioyLk1lZGlhbiAoTmlsYWkgVGVuZ2FoKSoqDQoNCioqTWVkaWFuKiogYWRhbGFoIG5pbGFpIHRlbmdhaCBkYXJpIGRhdGEgeWFuZyBzdWRhaCBkaXVydXRrYW4uIA0KDQpEYXRhIHN1ZGFoIGJlcnVydXRhbjoNClwoMzBcKSwgXCgzMFwpLCBcKDM1XCksIFwoNDBcKSwgXCg0NVwpDQoNCkthcmVuYSBqdW1sYWggZGF0YSBhZGFsYWggZ2FuamlsIChcKDVcKSBkYXRhKSwgbWFrYSBtZWRpYW4gYWRhbGFoIG5pbGFpIHlhbmcgYWRhIGRpIHBvc2lzaSB0ZW5nYWgsIHlhaXR1IFwoMzVcKSANCg0KKiozLiBTdGFuZGFyIERldmlhc2kgKFN0YW5kYXJkIERldmlhdGlvbikqKg0KDQpVbnR1ayBtZW5naGl0dW5nIHN0YW5kYXIgZGV2aWFzaSwgcGVydGFtYSBraXRhIGhhcnVzIG1lbmdoaXR1bmcgdmFyaWFuc2kgZGFuIGtlbXVkaWFuIG1lbmNhcmkgYWthciBrdWFkcmF0IGRhcmkgdmFyaWFuc2kgdGVyc2VidXQNCg0KKipMYW5na2FoIDE6IEhpdHVuZyBTZWxpc2loIFNldGlhcCBEYXRhIGRhcmkgUmF0YS1SYXRhKioNCg0KUmF0YS1yYXRhIChtZWFuKSA9IFwoMzZcKSBqYWRpIGtpdGEgaGl0dW5nIHNlbGlzaWggYW50YXJhIHNldGlhcCBkYXRhIGRhbiByYXRhLXJhdGEsIGxhbHUga3VhZHJhdGthbiBoYXNpbG55YToNCg0KICQkICgzMC0zNileMj0gKC02KV4yPTM2JCQNCiAkJCAoMzAtMzYpXjI9ICgtNileMj0zNiQkDQogDQogJCQgKDM1LTM2KV4yPSAoLTEpXjI9MSQkDQogDQogICQkICg0MC0zNileMj0gKDQpXjI9MTYkJA0KICANCiAgJCQgKDQ1LTM2KV4yPSAoOSleMj04MSQkDQogIA0KICAqKkxhbmdrYWggMjogSnVtbGFoa2FuIEhhc2lsIEt1YWRyYXRueWEqKg0KIA0KJCQgMzYgKyAzNiArIDErIDE2KyA4MT0xNzAgJCQNCg0KKipMYW5na2FoIDM6IEhpdHVuZyBWYXJpYW5zaSoqDQpLYXJlbmEganVtbGFoIGRhdGEgYWRhbGFoIFwoNVwpLCBraXRhIGJhZ2kgaGFzaWwganVtbGFoIGt1YWRyYXQgZGVuZ2FuIFwoNVwpIHVudHVrIG1lbmdoaXR1bmcgdmFyaWFuc2k6DQoNCiQkDQpcdGV4dHtNZWFuID19IFwgXGZyYWN7MTcwfXs1fSA9MzQNCiQkDQoNCioqTGFuZ2thaCA0OiBIaXR1bmcgU3RhbmRhciBEZXZpYXNpKioNClN0YW5kYXIgZGV2aWFzaSBhZGFsYWggYWthciBrdWFkcmF0IGRhcmkgdmFyaWFuc2k6DQoNClxbDQpcc2lnbWEgPSBcc3FydHszNH0gXGFwcHJveCA1LjgzDQpcXQ0KDQpQZW55ZWJhcmFuIGRhdGEgcGVuanVhbGFuIGRpIENhYmFuZyBDIG1lbWlsaWtpIHN0YW5kYXIgZGV2aWFzaSBzZWtpdGFyIFwoNS44M1wpIA0KDQojIERhdGEgUGVuanVhbGFuIENhYmFuZyBEDQoqKkNhYmFuZyBEKiogKFwoNzBcKSwgXCg3NVwpLCBcKDgwXCksIFwoODVcKSwgXCg5MFwpKSANCg0KKioxLiBSYXRhLVJhdGEgKE1lYW4pKiogDQoNCioqUnVtdXMgTWVhbjoqKg0KDQokJA0Ke01lYW59ID0gXGZyYWN7XHN1bSB4aX17bn0NCiQkDQoqKjEuTGFuZ2thaCBQZXJoaXR1bmdhbm55YToqKg0KDQokJA0KXHRleHR7TWVhbiA9fSBcIFxmcmFjezcwICsgNzUgKyA4MCArIDg1KyA5MH17NX0gDQokJA0KJCQNClx0ZXh0e01lYW4gPX0gXCBcZnJhY3s0MDB9ezV9ID04MA0KJCQNCg0KKipIYXNpbDoqKiBSYXRhLXJhdGEgcGVuanVhbGFuIGRpIGNhYmFuZyBEIGFkYWxhaCBcKDgwXCkNCg0KKioyLk1lZGlhbiAoTmlsYWkgVGVuZ2FoKSoqDQoNClVudHVrIG1lbmNhcmkgbWVkaWFuLCBkYXRhIGhhcnVzIGRpdXJ1dGthbiAoZGFsYW0gaGFsIGluaSBzdWRhaCBkaXVydXRrYW4pOg0KXCg3MFwpLCBcKDc1XCksIFwoODBcKSwgXCg4NVwpLCBcKDkwXCkNCg0KS2FyZW5hIGp1bWxhaCBkYXRhbnlhIGdhbmppbCwgbWVkaWFuIGFkYWxhaCBuaWxhaSB0ZW5nYWgsIHlhaXR1IFwoODBcKQ0KDQoqKjMuU3RhbmRhciBkZXZpYXNpKioNCg0KKipSdW11cyB1bnR1ayBzdGFuZGFyIGRldmlhc2kqKiAoXChcc2lnbWFcKSkgYWRhbGFoOg0KDQpcWw0KXHNpZ21hID0gXHNxcnR7XGZyYWN7XHN1bSAoeF9pIC0gXG11KV4yfXtufX0NClxdDQoNClwoeF9pXCkgPSBuaWxhaSBkYXRhICANCiBcKFxtdVwpID0gTWVhbiAoXCg4MFwpKSANCiBcKG5cKSA9IGp1bWxhaCBkYXRhIChcKDVcKSkNCiANCioqTGFuZ2thaC1sYW5na2FoIFBlcmhpdHVuZ2FuOioqDQoNCioqMS5IaXR1bmcgc2VsaXNpaCBzZXRpYXAgZGF0YSBkYXJpIG1lYW4sIGxhbHUga3VhZHJhdGthbjoqKg0KIA0KICQkICg3MC04MCleMj0gKC0xMCleMj0xMDAkJA0KICAkJCAoNzAtODUpXjI9ICgtNSleMj0yNSQkDQogICAkJCAoODAtODApXjI9ICgwKV4yPTAkJA0KICAgICAkJCAoODUtODApXjI9ICg1KV4yPTI1JCQNCiAgICAgICAkJCAoOTAtODApXjI9ICgxMCleMj0xMDAkJA0KKioyLkp1bWxhaGthbiBoYXNpbCBrdWFkcmF0OioqDQoNCiQkIDEwMCArIDI1ICsgMCsgMjUrIDEwMD0yNTAgJCQNCg0KKiozLkJhZ2kgZGVuZ2FuIGp1bWxhaCBkYXRhICg1KToqKg0KDQokJA0KXCBcZnJhY3syNTB9ezV9ID01MA0KJCQNCioqNC5Ba2FyIGRhcmkgaGFzaWwgdGVyc2VidXQ6KioNCg0KXFsNClxzaWdtYSA9IFxzcXJ0ezUwfSBcYXBwcm94IDcuMDcNClxdDQoNCiMjIyBDYWJhbmcgbWFuYSB5YW5nIG1lbWlsaWtpIHBlbnllYmFyYW4gZGF0YSBwYWxpbmcga2VjaWw/IEplbGFza2FuIGFsYXNhbm55YS4NCg0KKipSZWthcCBTdGFuZGFyIERldmlhc2kgdW50dWsgQ2FiYW5nIEEgZGFuIEQqKg0KDQoqKkNhYmFuZyBBKiogKERhdGE6IFwoNTBcKSwgXCg1NVwpLCBcKDYwXCksIFwoNjVcKSwgXCg3MFwpKQ0KDQotIFN0YW5kYXIgRGV2aWFzaTogXCg3LDA3XCkgIChoYXNpbCBwZXJoaXR1bmdhbiBzZWJlbHVtbnlhKQ0KDQoqKkNhYmFuZyBEKiogKERhdGE6IFwoNzBcKSwgXCg3NVwpLCBcKDgwXCksIFwoODVcKSwgXCg5MFwpKQ0KDQotIFN0YW5kYXIgRGV2aWFzaTogXCg3LDA3XCkgIChoYXNpbCBwZXJoaXR1bmdhbiBzZWJlbHVtbnlhKQ0KDQoqKktlc2ltcHVsYW4gUGVueWViYXJhbiBEYXRhKioNCg0KQ2FiYW5nIEEgZGFuIENhYmFuZyBEIG1lbWlsaWtpIHN0YW5kYXIgZGV2aWFzaSB5YW5nIHNhbWEsIHlhaXR1IChcKDcsMDdcKSkuDQpJbmkgYmVyYXJ0aSBwZW55ZWJhcmFuIGRhdGEgZGkga2VkdWEgY2FiYW5nIHRlcnNlYnV0IHNhbWEtc2FtYSBrZWNpbCBkYW4gc3RhYmlsLCBtZXNraXB1biBuaWxhaSBwZW5qdWFsYW5ueWEgYmVyYmVkYS4NCg0KKipQZW5qZWxhc2FuIEFsYXNhbioqDQoNClN0YW5kYXIgZGV2aWFzaSBtZW5ndWt1ciBzZWJlcmFwYSBqYXVoIG5pbGFpLW5pbGFpIGRhbGFtIGRhdGEgbWVueWViYXIgZGFyaSByYXRhLXJhdGEgKG1lYW4pLiBKaWthIHN0YW5kYXIgZGV2aWFzaSBrZWNpbCwgYmVyYXJ0aSBuaWxhaS1uaWxhaSBkYXRhIGNlbmRlcnVuZyBiZXJrdW1wdWwgZGkgc2VraXRhciByYXRhLXJhdGEuIERlbmdhbiBuaWxhaSBzdGFuZGFyIGRldmlhc2kgeWFuZyBzYW1hIHVudHVrIENhYmFuZyBBIGRhbiBELCBkYXBhdCBkaXNpbXB1bGthbiBiYWh3YSB2YXJpYXNpIGF0YXUgcGVueWViYXJhbiBkYXRhIHBlbmp1YWxhbiBkYXJpIGtlZHVhIGNhYmFuZyBpbmkgc2FtYSBrZWNpbG55YS4NCg0KUGVueWViYXJhbiBkYXRhIHlhbmcga2VjaWwgbWVudW5qdWtrYW4gYmFod2EgcGVuanVhbGFuIGRhcmkgbWFzaW5nLW1hc2luZyBjYWJhbmcgY3VrdXAga29uc2lzdGVuIGF0YXUgc3RhYmlsIHNlbGFtYSBidWxhbiB0ZXJzZWJ1dC4NCg0KIyMjIEppa2EgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtIGFkYWxhaCBcKDUwXCkganV0YSBydXBpYWgsIGNhYmFuZyBtYW5hIHNhamEgeWFuZyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgc2VtdWEgZGF0YW55YT8NCg0KKipUYXJnZXQgUGVuanVhbGFuIE1pbmltdW06IFwoNTBcKSoqDQoNCktyaXRlcmlhOiBDYWJhbmcgZGlrYXRha2FuIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBqaWthIHNlbXVhIG5pbGFpIGRhdGFueWEgZGkgYmF3YWggXCg1MFwpLg0KDQoqKjEuIENhYmFuZyBBOioqIFwoNTBcKSwgXCg1NVwpLCBcKDYwXCksIFwoNjVcKSwgXCg3MFwpDQoNCi0gKipQZW5pbGFpYW46KioNClNlbXVhIGRhdGE6IFwoNTBcKSwgXCg1NVwpLCBcKDYwXCksIFwoNjVcKSwgXCg3MFwpDQoNCi0gTmlsYWkgXCg1MFwpIHN1ZGFoIG1lbWVudWhpIHRhcmdldCAoc2FtYSBkZW5nYW4gXCg1MFwpKS4NCg0KKipLZXNpbXB1bGFuOioqIENhYmFuZyBBIGJlcmhhc2lsIG1lbmNhcGFpIHRhcmdldCBrYXJlbmEgdGlkYWsgc2VtdWEgZGF0YW55YSBkaSBiYXdhaCBcKDUwXCkganV0YSBydXBpYWguDQoNCioqMi4gQ2FiYW5nIEI6KiogXCg0MFwpLCBcKDUwXCksIFwoNjBcKSwgXCg3MFwpLCBcKDgwXCkNCg0KLSAqKlBlbmlsYWlhbjoqKg0KRGF0YTogXCg0MFwpLCBcKDUwXCksIFwoNjBcKSwgXCg3MFwpLCBcKDgwXCkNCg0KLSBOaWxhaSBcKDQwXCkgZGkgYmF3YWggdGFyZ2V0LCBuYW11biBuaWxhaSBsYWlubnlhIChcKDUwXCksIFwoNjBcKSwgXCg3MFwpLCBcKDgwXCkpIG1lbWVudWhpIGF0YXUgbWVsZWJpaGkgdGFyZ2V0Lg0KDQoqKktlc2ltcHVsYW46KiogQ2FiYW5nIEIgYmVyaGFzaWwgbWVuY2FwYWkgdGFyZ2V0IGthcmVuYSB0aWRhayBzZW11YSBkYXRhbnlhIGRpIGJhd2FoIFwoNTBcKS4NCg0KKiozLiBDYWJhbmcgQzoqKiBcKDMwXCksIFwoMzBcKSwgXCgzNVwpLCBcKDQwXCksIFwoNDVcKQ0KDQotICoqUGVuaWxhaWFuOioqDQpTZW11YSBkYXRhOiBcKDMwXCksIFwoMzBcKSwgXCgzNVwpLCBcKDQwXCksIFwoNDVcKQ0KDQotIFNlbXVhIG5pbGFpIGRpIGJhd2FoIFwoNTBcKS4NCg0KKipLZXNpbXB1bGFuOioqIENhYmFuZyBDIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBrYXJlbmEgc2VtdWEgcGVuanVhbGFubnlhIGRpIGJhd2FoIFwoNTBcKS4NCg0KKio0LiBDYWJhbmcgRDoqKiBcKDcwXCksIFwoNzVcKSwgXCg4MFwpLCBcKDg1XCksIFwoOTBcKQ0KDQotICoqUGVuaWxhaWFuOioqDQpTZW11YSBkYXRhOiBcKDcwXCksIFwoNzVcKSwgXCg4MFwpLCBcKDg1XCksIFwoOTBcKQ0KDQotIFNlbXVhIG5pbGFpIGRpIGF0YXMgdGFyZ2V0IFwoNTBcKS4NCg0KKipLZXNpbXB1bGFuOioqIENhYmFuZyBEIGJlcmhhc2lsIG1lbmNhcGFpIHRhcmdldCBrYXJlbmEgc2VtdWEgcGVuanVhbGFubnlhIG1lbGViaWhpIFwoNTBcKS4NCg0KKipSaW5na2FzYW4gSGFzaWwqKg0KDQoqKkNhYmFuZyBBOioqICgJXCg1MFwpLCBcKDU1XCksIFwoNjBcKSwgXCg2NVwpLCBcKDcwXCkpDQoNCi0gSGFzaWwgOiBCZXJoYXNpbCBNZW5jYXBhaSBUYXJnZXQNCg0KKipDYWJhbmcgQjoqKiAoCVwoNDBcKSwgXCg1MFwpLCBcKDYwXCksIFwoNzBcKSwgXCg4MFwpKQ0KDQotIEhhc2lsIDogQmVyaGFzaWwgTWVuY2FwYWkgVGFyZ2V0DQoNCioqQ2FiYW5nIEM6KiogKFwoMzBcKSwgXCgzMFwpLCBcKDM1XCksIFwoNDBcKSwgXCg0NVwpKQ0KDQotIEhhc2lsIDogR2FnYWwgTWVuY2FwYWkgVGFyZ2V0DQoNCioqQ2FiYW5nIEQ6KiogKAlcKDcwXCksIFwoNzVcKSwgXCg4MFwpLCBcKDg1XCksIFwoOTBcKQ0KDQotIEhhc2lsOiBCZXJoYXNpbCBNZW5jYXBhaSBUYXJnZXQgDQoNCioqUGVuamVsYXNhbiBBa2hpcioqDQoNCkhhbnlhIENhYmFuZyBDIHlhbmcgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IGthcmVuYSBzZW11YSBkYXRhbnlhIGRpIGJhd2FoIFwoNTBcKSBDYWJhbmcgbGFpbm55YSBtZW1pbGlraSBzZXRpZGFrbnlhIHNhdHUgYXRhdSBsZWJpaCBuaWxhaSBwZW5qdWFsYW4geWFuZyBtZW1lbnVoaSBhdGF1IG1lbGFtcGF1aSB0YXJnZXQgXCg1MFwpLg0KDQojIyMgQnVhdGxhaCBkaWFncmFtIGtvdGFrIChib3ggcGxvdCkgdW50dWsgbWVtdmlzdWFsaXNhc2lrYW4gcGVueWViYXJhbiBkYXRhIHNldGlhcCBjYWJhbmcuDQoNCioqVmlzdWFsaXNhc2kgQm94IFBsb3QgQ2FiYW5nIEEgKioNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIENhYmFuZyBBDQpjYWJhbmdfYSA8LSBjKDUwLCA1NSwgNjAsIDY1LCA3MCkNCg0KIyBNZW1idWF0IEJveCBQbG90IHVudHVrIENhYmFuZyBBDQpwbG90X2x5KCkgJT4lDQogIGFkZF90cmFjZSgNCiAgICB5ID0gY2FiYW5nX2EsDQogICAgdHlwZSA9ICJib3giLA0KICAgIG5hbWUgPSAiQ2FiYW5nIEEiLA0KICAgIGJveG1lYW4gPSBUUlVFLA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAnbGF2ZW5kZXInKQ0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBBIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nIEEiKQ0KICApDQoNCg0KDQpgYGANCg0KDQoqKlZpc3VhbGlzYXNpIEJveCBQbG90IENhYmFuZyBCKiogDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4gQ2FiYW5nIEINCmNhYmFuZ19iIDwtIGMoNDAsIDUwLCA2MCwgNzAsIDgwKQ0KDQojIE1lbWJ1YXQgQm94IFBsb3QgdW50dWsgQ2FiYW5nIEIgZGVuZ2FuIHdhcm5hIHBpbmsNCnBsb3RfbHkoKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBjYWJhbmdfYiwNCiAgICB0eXBlID0gImJveCIsDQogICAgbmFtZSA9ICJDYWJhbmcgQiIsDQogICAgYm94bWVhbiA9IFRSVUUsDQogICAgZmlsbGNvbG9yID0gJ3BpbmsnLCAgICAgICAgIyBNZW5nYXR1ciB3YXJuYSBpc2kga290YWsgbWVuamFkaSBwaW5rDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAnYmxhY2snKSAgIyBPcHNpb25hbDogTWVuZ2F0dXIgd2FybmEgZ2FyaXMgdGVwaSBrb3Rhaw0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBCIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nIEIiKQ0KICApDQoNCg0KYGBgDQoNCg0KKipWaXN1YWxpc2FzaSBCb3ggUGxvdCBDYWJhbmcgQyoqDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIHBlbmp1YWxhbiBDYWJhbmcgQw0KY2FiYW5nX2MgPC0gYygzMCwgMzAsIDM1LCA0MCwgNDUpDQoNCiMgTWVtYnVhdCBCb3ggUGxvdCB1bnR1ayBDYWJhbmcgQyBkZW5nYW4gd2FybmEgdW5ndQ0KcGxvdF9seSgpICU+JQ0KICBhZGRfdHJhY2UoDQogICAgeSA9IGNhYmFuZ19jLA0KICAgIHR5cGUgPSAiYm94IiwNCiAgICBuYW1lID0gIkNhYmFuZyBDIiwNCiAgICBib3htZWFuID0gVFJVRSwNCiAgICBmaWxsY29sb3IgPSAncHVycGxlJywgICAgICMgTWVuZ2F0dXIgd2FybmEga290YWsgbWVuamFkaSB1bmd1DQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAnYmxhY2snKSAgIyBNZW5nYXR1ciB3YXJuYSBnYXJpcyB0ZXBpIGtvdGFrDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJCb3ggUGxvdCBQZW5qdWFsYW4gQ2FiYW5nIEMiLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQZW5qdWFsYW4gKGp1dGEgcnVwaWFoKSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmcgQyIpDQogICkNCg0KDQpgYGANCg0KDQoqKlZpc3VhbGlzYXNpIEJveCBQbG90IENhYmFuZyBEKioNCg0KYGBge3IgIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIHBlbmp1YWxhbiBDYWJhbmcgRA0KY2FiYW5nX2QgPC0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgTWVtYnVhdCBCb3ggUGxvdCB1bnR1ayBDYWJhbmcgRCBkZW5nYW4gd2FybmEgbWVyYWgNCnBsb3RfbHkoKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBjYWJhbmdfZCwNCiAgICB0eXBlID0gImJveCIsDQogICAgbmFtZSA9ICJDYWJhbmcgRCIsDQogICAgYm94bWVhbiA9IFRSVUUsDQogICAgZmlsbGNvbG9yID0gJ3JlZCcsICAgICAgICAgICAgIyBNZW5nYXR1ciB3YXJuYSBpc2kga290YWsgbWVuamFkaSBtZXJhaA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ2JsYWNrJykgICMgTWVuZ2F0dXIgd2FybmEgZ2FyaXMgdGVwaSBrb3Rhaw0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBEIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nIEQiKQ0KICApDQoNCg0KYGBgDQoNCg0KKipHYWJ1bmdhbiBWaXN1YWxpc2FzaSBCb3ggUGxvdCAoQ2FiYW5nIEEsQ2FiYW5nIEIsQ2FiYW5nIEMsQ2FiYW5nIEQpKioNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIHVudHVrIHNldGlhcCBjYWJhbmcNCmNhYmFuZ19hIDwtIGMoNTAsIDU1LCA2MCwgNjUsIDcwKQ0KY2FiYW5nX2IgPC0gYyg0MCwgNTAsIDYwLCA3MCwgODApDQpjYWJhbmdfYyA8LSBjKDMwLCAzMCwgMzUsIDQwLCA0NSkNCmNhYmFuZ19kIDwtIGMoNzAsIDc1LCA4MCwgODUsIDkwKQ0KDQojIE1lbWJ1YXQgQm94IFBsb3QgZ2FidW5nYW4gdW50dWsgc2VtdWEgY2FiYW5nDQpwbG90X2x5KCkgJT4lDQogIGFkZF90cmFjZSgNCiAgICB5ID0gY2FiYW5nX2EsDQogICAgdHlwZSA9ICJib3giLA0KICAgIG5hbWUgPSAiQ2FiYW5nIEEiLA0KICAgIGZpbGxjb2xvciA9ICdsaWdodGJsdWUnLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ2JsYWNrJykNCiAgKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBjYWJhbmdfYiwNCiAgICB0eXBlID0gImJveCIsDQogICAgbmFtZSA9ICJDYWJhbmcgQiIsDQogICAgZmlsbGNvbG9yID0gJ2xpZ2h0Z3JlZW4nLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ2JsYWNrJykNCiAgKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBjYWJhbmdfYywNCiAgICB0eXBlID0gImJveCIsDQogICAgbmFtZSA9ICJDYWJhbmcgQyIsDQogICAgZmlsbGNvbG9yID0gJ3B1cnBsZScsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAnYmxhY2snKQ0KICApICU+JQ0KICBhZGRfdHJhY2UoDQogICAgeSA9IGNhYmFuZ19kLA0KICAgIHR5cGUgPSAiYm94IiwNCiAgICBuYW1lID0gIkNhYmFuZyBEIiwNCiAgICBmaWxsY29sb3IgPSAncmVkJywNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdibGFjaycpDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJCb3ggUGxvdCBQZW5qdWFsYW4gQ2FiYW5nIEEsIEIsIEMsIGRhbiBEIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nIikNCiAgKQ0KDQoNCmBgYA0KDQojIyMgSmlrYSBBbmRhIGFkYWxhaCBtYW5hamVyIHBlcnVzYWhhYW4sIGJhZ2FpbWFuYSBBbmRhIGFrYW4gbWVuZ2d1bmFrYW4gaW5mb3JtYXNpIGluaSB1bnR1ayBtZXJlbmNhbmFrYW4gc3RyYXRlZ2kgcGVuaW5na2F0YW4gcGVuanVhbGFuPw0KDQpTZWJhZ2FpIG1hbmFqZXIgcGVydXNhaGFhbiwgc2F5YSBha2FuIG1lbWFuZmFhdGthbiBpbmZvcm1hc2kgaW5pIHVudHVrIG1lbGloYXQgcG9sYSBkYW4gdmFyaWFzaSBwZW5qdWFsYW4gZGkgc2V0aWFwIGNhYmFuZy4gRGFyaSBkYXRhIGluaSwgbWlzYWxueWEsIGppa2EgYWRhIGNhYmFuZyB5YW5nIGhhc2lsIHBlbmp1YWxhbm55YSBrb25zaXN0ZW4gcmVuZGFoIGF0YXUgdGlkYWsgc3RhYmlsLCBzYXlhIGFrYW4gbWVuY29iYSBtZW5jYXJpIHRhaHUgcGVueWViYWJueWEuIE11bmdraW4gcGVybHUgZGliZXJpa2FuIHBlbGF0aWhhbiB0YW1iYWhhbiB1bnR1ayB0aW0gcGVuanVhbGFuIGF0YXUgc3RyYXRlZ2kgcGVtYXNhcmFuIHlhbmcgbGViaWggZWZla3RpZi4NCg0KVW50dWsgY2FiYW5nIGRlbmdhbiBwZXJmb3JtYSBwZW5qdWFsYW4geWFuZyBzdWRhaCBiYWlrLCBzZXBlcnRpIENhYmFuZyBELCBzYXlhIGFrYW4gbWVuY2FyaSBjYXJhIGFnYXIgcGVyZm9ybWEgaW5pIHRldGFwIHRlcmphZ2EsIG1pc2FsbnlhIGRlbmdhbiBtZW1iZXJpa2FuIGluc2VudGlmIGF0YXUgYm9udXMga2VwYWRhIGthcnlhd2FuIGFnYXIgbWVyZWthIHRldGFwIHRlcm1vdGl2YXNpLg0KDQpTZWxhaW4gaXR1LCBkZW5nYW4gbWVuZ2V0YWh1aSBwZW55ZWJhcmFuIGRhdGEgcGVuanVhbGFuIGRhcmkgc2V0aWFwIGNhYmFuZywgc2F5YSBiaXNhIG1lbWJ1YXQgdGFyZ2V0IHlhbmcgbGViaWggcmVhbGlzdGlzIHVudHVrIG1hc2luZy1tYXNpbmcgY2FiYW5nLiBKYWRpLCBzdHJhdGVnaSB5YW5nIHNheWEgdGVyYXBrYW4gYmlzYSBsZWJpaCBzcGVzaWZpaywgc2VzdWFpIGtlYnV0dWhhbiBkYW4gdGFudGFuZ2FuIGRpIHNldGlhcCBsb2thc2kuDQoNCg0KIyBMYXRpaGFuIDINCg0KUGVydXNhaGFhbiBYWVogbWVuZ2Vsb2xhIHBlbmdpcmltYW4gYmFyYW5nIGtlIGJlcmJhZ2FpIHdpbGF5YWggZGVuZ2FuIG1lbmdndW5ha2FuIGJlcmJhZ2FpIGplbmlzIHRyYW5zcG9ydGFzaS4gU2V0aWFwIHBlbmdpcmltYW4gbWVsaWJhdGthbiBiaWF5YSB0cmFuc3BvcnRhc2ksIHdha3R1IHlhbmcgZGlidXR1aGthbiwgZGFuIGp1bWxhaCBiYXJhbmcgeWFuZyBkaWtpcmltLiBCZXJpa3V0IGFkYWxhaCBkYXRhIHRlcmthaXQgcGVuZ2lyaW1hbiBiYXJhbmcgYmVyZGFzYXJrYW4gd2lsYXlhaCBkYW4gamVuaXMgYmFyYW5nOg0KDQojIyBEYXRhDQoNCnwgKldpbGF5YWgqIHwgKkplbmlzIEJhcmFuZyogfCAqSnVtbGFoIEJhcmFuZyAodW5pdCkqIHwgKldha3R1IFBlbmdpcmltYW4gKGphbSkqIHwgKkJpYXlhIHBlciBVbml0IChScCkqIHwNCnwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBVdGFyYSAgICAgICB8IEVsZWt0cm9uaWsgICAgICAgfCAyMDAgICAgICAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1LDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMTUwICAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LDAwMCAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgICAgIHwgTWFrYW5hbiAgICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IFBlcmFsYXRhbiAgICAgICAgfCAxMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyLDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMjUwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNCwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFV0YXJhICAgICAgIHwgUGFrYWlhbiAgICAgICAgICB8IDMwMCAgICAgICAgICAgICAgICAgICAgICB8IDkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOCw1MDAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IE1ha2FuYW4gICAgICAgICAgfCAyMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDksNTAwICAgICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTQwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMSwwMDAgICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgICAgIHwgRWxla3Ryb25payAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQsNTAwICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IFBha2FpYW4gICAgICAgICAgfCAzNTAgICAgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcsODAwICAgICAgICAgICAgICAgICAgIHwNCnwgVXRhcmEgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTcwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMiwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gICAgIHwgRWxla3Ryb25payAgICAgICB8IDI1MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IFBha2FpYW4gICAgICAgICAgfCAxOTAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgsMjAwICAgICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCBNYWthbmFuICAgICAgICAgIHwgMTMwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMCw1MDAgICAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgICAgIHwgUGVyYWxhdGFuICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEsNTAwICAgICAgICAgICAgICAgICAgfA0KDQoNCg0KIyMgMS4gQW5hbGlzaXMgRWZpc2llbnNpIFBlbmdpcmltYW46DQoNCi0gVmlzdWFsaXNhc2lrYW4gcGVuZ2lyaW1hbiBiYXJhbmcgYmVyZGFzYXJrYW4ganVtbGFoIGJhcmFuZywgd2FrdHUgcGVuZ2lyaW1hbiwgZGFuIGJpYXlhIHBlciB1bml0IGRlbmdhbiBtZW5nZ3VuYWthbiBwbG90IDNELg0KDQotIFRlbnR1a2FuIHdpbGF5YWggbWFuYSB5YW5nIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoIGJlcmRhc2Fya2FuIGJpYXlhIHBlciB1bml0IGRhbiB3YWt0dSBwZW5naXJpbWFuLg0KDQoqKlZpc3VhbGlzYXNpIFBsb3QgM0QqKg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCiMgTWVtYnVhdCBEYXRhIEZyYW1lIHVudHVrIHBlbmdpcmltYW4NCmRhdGFfcGVuZ2lyaW1hbiA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIpLA0KICBKdW1sYWhfQmFyYW5nID0gYygyMDAsIDE1MCwgMTgwLCAxMjAsIDI1MCwgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIDE3MCwgMjUwLCAxOTAsIDEzMCwgMTgwKSwNCiAgV2FrdHVfUGVuZ2lyaW1hbiA9IGMoNSwgOCwgNiwgNywgNCwgOSwgNywgNSwgNiwgOCwgNCwgNiwgNywgNSwgNSksDQogIEJpYXlhX1Blcl9Vbml0ID0gYygxNTAwMCwgODAwMCwgMTAwMDAsIDEyMDAwLCAxNDAwMCwgODUwMCwgOTUwMCwgMTEwMDAsIDE0NTAwLCA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBNZW1idWF0IFBsb3QgM0QNCnBsb3RfbHkoDQogIGRhdGEgPSBkYXRhX3BlbmdpcmltYW4sDQogIHggPSB+SnVtbGFoX0JhcmFuZywNCiAgeSA9IH5XYWt0dV9QZW5naXJpbWFuLA0KICB6ID0gfkJpYXlhX1Blcl9Vbml0LA0KICBjb2xvciA9IH5XaWxheWFoLA0KICBzeW1ib2wgPSB+SmVuaXNfQmFyYW5nLA0KICB0eXBlID0gInNjYXR0ZXIzZCIsDQogIG1vZGUgPSAibWFya2VycyIsDQogIG1hcmtlciA9IGxpc3Qoc2l6ZSA9IDYpDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgM0QgUGVuZ2lyaW1hbiBCYXJhbmciLA0KICAgIHNjZW5lID0gbGlzdCgNCiAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJKdW1sYWggQmFyYW5nICh1bml0KSIpLA0KICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIldha3R1IFBlbmdpcmltYW4gKGphbSkiKSwNCiAgICAgIHpheGlzID0gbGlzdCh0aXRsZSA9ICJCaWF5YSBwZXIgVW5pdCAoUnApIikNCiAgICApDQogICkNCg0KDQpgYGANCg0KDQoqKm1lbmVudHVrYW4gd2lsYXlhaCBkZW5nYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggYmVyZGFzYXJrYW4gYmlheWEgcGVyIHVuaXQgZGFuIHdha3R1IHBlbmdpcmltYW4qKg0KDQoqKkxhbmdrYWgtbGFuZ2thaCBhbmFsaXNpczoqKg0KDQoqKjEuUmFzaW8gRWZpc2llbnNpOioqDQpSYXNpbyBlZmlzaWVuc2kgZGFwYXQgZGloaXR1bmcgZGVuZ2FuIG1lbWJhZ2kgYmlheWEgcGVyIHVuaXQgZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4uIFNlbWFraW4ga2VjaWwgcmFzaW8gaW5pLCBzZW1ha2luIGVmaXNpZW4gcGVuZ2lyaW1hbm55YSAoYmlheWEgbGViaWggcmVuZGFoIGRhbiB3YWt0dSBsZWJpaCBzaW5na2F0KS4NCg0KRm9ybXVsYSBSYXNpbyBFZmlzaWVuc2k6DQoNCiQkDQpcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGRmcmFje1x0ZXh0e0JpYXlhIFBlciBVbml0IH0gfXtXYWt0dSAgXCBQZW5naXJpbWFufQ0KJCQNCg0KKioyLiBLZWxvbXBva2thbiBCZXJkYXNhcmthbiBXaWxheWFoOioqDQpLaXRhIGtlbXVkaWFuIGFrYW4gbWVuZ2Vsb21wb2trYW4gZGF0YSBiZXJkYXNhcmthbiB3aWxheWFoIGRhbiBtZW5naGl0dW5nIHJhdGEtcmF0YSByYXNpbyBlZmlzaWVuc2kgdW50dWsgc2V0aWFwIHdpbGF5YWguIFdpbGF5YWggZGVuZ2FuIHJhc2lvIHRlcnRpbmdnaSBha2FuIGRpYW5nZ2FwIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoLg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBJbnN0YWxsIGRhbiBsb2FkIGxpYnJhcnkgdGliYmxlIGppa2EgYmVsdW0gYWRhDQppZiAoIXJlcXVpcmVOYW1lc3BhY2UoInRpYmJsZSIsIHF1aWV0bHkgPSBUUlVFKSkgaW5zdGFsbC5wYWNrYWdlcygidGliYmxlIikNCmxpYnJhcnkodGliYmxlKQ0KDQojIE1lbWJ1YXQgdGFiZWwgc2VwZXJ0aSBwYWRhIGdhbWJhcg0KZGF0YSA8LSB0aWJibGUoDQogIFdpbGF5YWggPSBjKCJCYXJhdCIsICJTZWxhdGFuIiwgIlRlbmdhaCIsICJUaW11ciIsICJVdGFyYSIpLA0KICBUb3RhbF9CaWF5YSA9IGMoNTQxNTAwMCwgNzI5MDAwMCwgODMwMDAwMCwgNDg5MDAwMCwgNzU5MDAwMCksDQogIEVmaXNpZW5zaV9CaWF5YSA9IGMoMTI1OTMsIDExNzU4LCAxMDY0MSwgOTYwNCwgMTEzMjgpDQopDQoNCiMgQ2V0YWsgdGFiZWwNCnByaW50KGRhdGEpDQoNCg0KYGBgDQoNCioqUGVuamVsYXNhbiBFZmlzaWVuc2kgQmlheWEqKg0KDQotIEVmaXNpZW5zaSBCaWF5YSBkaXVrdXIgZGFsYW0gUnAvdW5pdCBkYW4gbWVudW5qdWtrYW4gYmVyYXBhIGJlc2FyIGJpYXlhIHlhbmcgZGlrZWx1YXJrYW4gcGVyIHVuaXQgYmFyYW5nIHlhbmcgZGlraXJpbS4NCg0KLSBTZW1ha2luIHRpbmdnaSBuaWxhaSBFZmlzaWVuc2kgQmlheWEsIHNlbWFraW4gYmVzYXIgYmlheWEgeWFuZyBkaWtlbHVhcmthbiB1bnR1ayBzZXRpYXAgdW5pdCBiYXJhbmcsIHlhbmcgYmVyYXJ0aSBwZW5naXJpbWFuIGRpIHdpbGF5YWggdGVyc2VidXQga3VyYW5nIGVmaXNpZW4uDQoNCioqQW5hbGlzaXMgV2lsYXlhaCBkZW5nYW4gRWZpc2llbnNpIFRlcmVuZGFoKiogDQoNCkRhcmkgdGFiZWwgZGkgYXRhcywga2l0YSBiaXNhIG1lbGloYXQgcGVyaW5na2F0IGVmaXNpZW5zaSBiaWF5YSBkYXJpIHRlcnRpbmdnaSBrZSB0ZXJlbmRhaDoNCg0KKioxLiBCYXJhdDoqKiBcKDEyLDU5My4wMjNcKSAqKihwYWxpbmcgdGlkYWsgZWZpc2llbikqKg0KDQoqKjIuIFNlbGF0YW46KiogXCgxMSw3NTguMDY1XCkNCg0KKiozLiBVdGFyYToqKiBcKDExLDMyOC4zNThcKQ0KDQoqKjQuIFRlbmdhaDoqKiBcKDEwLDY0MS4wMjZcKQ0KDQoqKjUuIFRpbXVyOioqIFwoOSw2MDMuOTIyXCkgKioocGFsaW5nIGVmaXNpZW4pKioNCg0KKipLZXNpbXB1bGFuKioNCg0KV2lsYXlhaCBkZW5nYW4gZWZpc2llbnNpIGJpYXlhIHRlcmVuZGFoIChiaWF5YSB0ZXJ0aW5nZ2kgcGVyIHVuaXQpIGFkYWxhaDoNCg0KQmFyYXQgZGVuZ2FuIEVmaXNpZW5zaSBCaWF5YSBzZWJlc2FyIFwoMTIsNTkzLjAyM1wpIFJwL3VuaXQuDQoNCkluaSBtZW51bmp1a2thbiBiYWh3YSBwZW5naXJpbWFuIGRpIHdpbGF5YWggQmFyYXQgbWVtZXJsdWthbiBiaWF5YSB0ZXJ0aW5nZ2kgcGVyIHVuaXQgYmFyYW5nIHlhbmcgZGlraXJpbSwgc2VoaW5nZ2EgcGVybHUgcGVyaGF0aWFuIGtodXN1cyB1bnR1ayBtZW5pbmdrYXRrYW4gZWZpc2llbnNpLg0KDQojIyAyLlJla29tZW5kYXNpIE9wZXJhc2lvbmFsOg0KDQojIyMgQmVyZGFzYXJrYW4gaGFzaWwgYW5hbGlzaXMsIHdpbGF5YWggbWFuYSB5YW5nIG1lbWVybHVrYW4gcGVyaGF0aWFuIGtodXN1cyB1bnR1ayBtZW5pbmdrYXRrYW4gZWZpc2llbnNpIHBlbmdpcmltYW4/DQoNCkJlcmRhc2Fya2FuIGhhc2lsIGFuYWxpc2lzIGRhcmkgZGF0YSAqKlRvdGFsIEJpYXlhKiogZGFuICoqRWZpc2llbnNpIEJpYXlhKiogcGVyIHdpbGF5YWgsIHdpbGF5YWggeWFuZyBtZW1lcmx1a2FuIHBlcmhhdGlhbiBraHVzdXMgdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIGFkYWxhaDoNCg0KKipXaWxheWFoIEJhcmF0KioNCg0KKipBbGFzYW46KioNCg0KKioxLiBFZmlzaWVuc2kgQmlheWEgVGVydGluZ2dpOioqDQoNCi0gV2lsYXlhaCBCYXJhdCBtZW1pbGlraSBlZmlzaWVuc2kgYmlheWEgc2ViZXNhciBcKDEyLDU5My4wMjNcKSBScC91bml0LCB0ZXJ0aW5nZ2kgZGliYW5kaW5na2FuIHdpbGF5YWggbGFpbm55YS4NCg0KLSBJbmkgYmVyYXJ0aSBiaWF5YSBwZW5naXJpbWFuIHBlciB1bml0IGRpIHdpbGF5YWggaW5pIGxlYmloIG1haGFsIGRhcmlwYWRhIHdpbGF5YWggbGFpbi4NCg0KKioyLiBUb3RhbCBCaWF5YSB5YW5nIFRpbmdnaToqKg0KDQpUb3RhbCBiaWF5YSBwZW5naXJpbWFuIGRpIHdpbGF5YWggQmFyYXQgYWRhbGFoIFJwIFwoNSw0MTUsMDAwLFwpIHlhbmcgY3VrdXAgYmVzYXIgbWVza2lwdW4ganVtbGFoIGJhcmFuZyB5YW5nIGRpa2lyaW0gbGViaWggc2VkaWtpdCBkaWJhbmRpbmcgd2lsYXlhaCBsYWluLg0KDQoqKlJla29tZW5kYXNpIHVudHVrIFdpbGF5YWggQmFyYXQ6KioNCg0KKioxLiBPcHRpbWFsa2FuIHJ1dGUgZGFuIGphZHdhbCBwZW5naXJpbWFuIHVudHVrIG1lbmd1cmFuZ2kgd2FrdHUgcGVuZ2lyaW1hbi4qKg0KDQoqKjIuIEd1bmFrYW4gamVuaXMgdHJhbnNwb3J0YXNpIHlhbmcgbGViaWggZWZpc2llbiBkYW4gaGVtYXQgYmlheWEuKioNCg0KKiozLiBFdmFsdWFzaSBrZW1iYWxpIHByb3NlcyBsb2dpc3RpayB1bnR1ayBtZW5lbXVrYW4gdGl0aWstdGl0aWsgaW5lZmlzaWVuc2kuKioNCiANCioqNC4gTmVnb3NpYXNpIHVsYW5nIGJpYXlhIHBlbmdpcmltYW4gZGVuZ2FuIHBlbnllZGlhIGphc2EgdHJhbnNwb3J0YXNpLioqDQoNCioqNS5Lb25zb2xpZGFzaSBwZW5naXJpbWFuIGJhcmFuZyB1bnR1ayBtZW1ha3NpbWFsa2FuIGthcGFzaXRhcyBhbmdrdXQgZGFuIG1lbmd1cmFuZ2kgYmlheWEgcGVyIHVuaXQuKioNCg0KICBEZW5nYW4gbWVsYWt1a2FuIGxhbmdrYWgtbGFuZ2thaCBpbmksIGRpaGFyYXBrYW4gZWZpc2llbnNpIGJpYXlhIHBlbmdpcmltYW4gZGkgd2lsYXlhaCBCYXJhdCBkYXBhdCBtZW5pbmdrYXQuDQoNCiMjIyBBcGEgcmVrb21lbmRhc2kgdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBkYW4gd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIHRlcnNlYnV0Pw0KDQoqKjEuIE9wdGltYWxrYW4gUnV0ZSBkYW4gSmFkd2FsIFBlbmdpcmltYW4qKg0KDQotIElkZW50aWZpa2FzaSBydXRlIHRlcmNlcGF0IGRhbiBwYWxpbmcgZWZpc2llbiBkZW5nYW4gbWVuZ2d1bmFrYW4gdGVrbm9sb2dpIHNlcGVydGkgc2lzdGVtIG1hbmFqZW1lbiB0cmFuc3BvcnRhc2kgKFRNUykgYXRhdSBhcGxpa2FzaSBwZW1ldGFhbiBkaWdpdGFsLg0KDQotIEhpbmRhcmkgcnV0ZSBkZW5nYW4ga2VtYWNldGFuIGF0YXUga29uZGlzaSBqYWxhbiB5YW5nIGJ1cnVrIHVudHVrIG1lbXBlcmNlcGF0IHdha3R1IHBlbmdpcmltYW4uDQoNCi0gS29uc29saWRhc2kgcGVuZ2lyaW1hbiBiZXJkYXNhcmthbiB3aWxheWFoIHR1anVhbiBhZ2FyIGJpc2EgZGlsYWt1a2FuIHNla2FsaSBqYWxhbi4NCg0KKioyLiBHdW5ha2FuIEplbmlzIFRyYW5zcG9ydGFzaSB5YW5nIExlYmloIEVmaXNpZW4qKg0KDQotIEV2YWx1YXNpIGplbmlzIGtlbmRhcmFhbiB5YW5nIGRpZ3VuYWthbiB1bnR1ayBwZW5naXJpbWFuLg0KDQotIEd1bmFrYW4ga2VuZGFyYWFuIGRlbmdhbiBrYXBhc2l0YXMgYW5na3V0IGxlYmloIGJlc2FyIGF0YXUga2VuZGFyYWFuIHlhbmcgbGViaWggaGVtYXQgYmFoYW4gYmFrYXIgdW50dWsgbWVuZWthbiBiaWF5YSBvcGVyYXNpb25hbC4NCg0KLSBQZXJ0aW1iYW5na2FuIG9wc2kgdHJhbnNwb3J0YXNpIHNlcGVydGkgcGVuZ2lyaW1hbiBtZWxhbHVpIGtlcmV0YSBhcGkgYXRhdSBrYXBhbCB1bnR1ayBqYXJhayBqYXVoIGppa2EgbGViaWggZWtvbm9taXMuDQoNCioqMy4gTmVnb3NpYXNpIFRhcmlmIGRlbmdhbiBQZW55ZWRpYSBMYXlhbmFuIExvZ2lzdGlrKioNCg0KLSBMYWt1a2FuIG5lZ29zaWFzaSB1bGFuZyBkZW5nYW4gcGVueWVkaWEgamFzYSBwZW5naXJpbWFuIHVudHVrIG1lbmRhcGF0a2FuIHRhcmlmIHlhbmcgbGViaWgga29tcGV0aXRpZi4NCg0KLSBQZXJ0aW1iYW5na2FuIGJla2VyamEgc2FtYSBkZW5nYW4gYmViZXJhcGEgcGVueWVkaWEgbGF5YW5hbiB1bnR1ayBtZW1iYW5kaW5na2FuIGJpYXlhIGRhbiBtZW1pbGloIHlhbmcgcGFsaW5nIGVmaXNpZW4uDQoNCioqNC4gS29uc29saWRhc2kgUGVuZ2lyaW1hbiBCYXJhbmcqKg0KDQotIEdhYnVuZ2thbiBwZW5naXJpbWFuIGRhcmkgYmVyYmFnYWkgcGVzYW5hbiB1bnR1ayBtZW1ha3NpbWFsa2FuIGthcGFzaXRhcyBhbmdrdXQgZGFsYW0gc2F0dSBrYWxpIHBlcmphbGFuYW4uDQoNCi0gSGluZGFyaSBwZW5naXJpbWFuIGRlbmdhbiBtdWF0YW4ga2VjaWwgeWFuZyBtZW55ZWJhYmthbiBiaWF5YSBwZXIgdW5pdCBtZW5qYWRpIHRpbmdnaS4NCg0KKio1LiBJbXBsZW1lbnRhc2kgVGVrbm9sb2dpIGRhbiBBdXRvbWFzaSoqDQoNCi0gR3VuYWthbiBzaXN0ZW0gcGVsYWNha2FuIHBlbmdpcmltYW4gc2VjYXJhIHJlYWwtdGltZSB1bnR1ayBtZW1hbnRhdSBwZXJnZXJha2FuIGJhcmFuZyBkYW4gbWVuZ2lkZW50aWZpa2FzaSBoYW1iYXRhbi4NCg0KLSBBdXRvbWFzaSBkYWxhbSBtYW5hamVtZW4gZ3VkYW5nIGRhbiBwcm9zZXMgcGVtdWF0YW4gYmFyYW5nIGFnYXIgbGViaWggY2VwYXQgZGFuIGVmaXNpZW4uDQoNCioqNi4gS3VyYW5naSBXYWt0dSBCb25na2FyIE11YXQqKg0KDQotIFRpbmdrYXRrYW4gZWZpc2llbnNpIHByb3NlcyBib25na2FyIG11YXQgYmFyYW5nIGRlbmdhbiBtZW1wZXJiYWlraSBzaXN0ZW0gb3BlcmFzaW9uYWwgZ3VkYW5nLg0KDQotIFBhc3Rpa2FuIHN0YWYgZ3VkYW5nIG1lbWlsaWtpIHByb3NlZHVyIGtlcmphIHlhbmcgamVsYXMgdW50dWsgbWVtcGVyY2VwYXQgcHJvc2VzIGluaS4NCg0KKio3LiBFdmFsdWFzaSBkYW4gQW5hbGlzaXMgQmVya2FsYSoqDQoNCi0gTGFrdWthbiBldmFsdWFzaSBraW5lcmphIHBlbmdpcmltYW4gc2VjYXJhIGJlcmthbGEgdW50dWsgbWVuZW11a2FuIHRpdGlrLXRpdGlrIGluZWZpc2llbnNpLg0KDQotIFRlcmFwa2FuIG1ldHJpayBraW5lcmphIHNlcGVydGkgcmF0YS1yYXRhIHdha3R1IHBlbmdpcmltYW4gZGFuIGJpYXlhIHBlciB1bml0IHVudHVrIG1lbWFudGF1IHBlbmluZ2thdGFuIGVmaXNpZW5zaS4NCg0KDQojIyAzLiBLaW5lcmphIEJlcmRhc2Fya2FuIEplbmlzIEJhcmFuZzoNCg0KQmVyZGFzYXJrYW4gZGF0YSBwZW5naXJpbWFuIGRhcmkgUGVydXNhaGFhbiBYWVosIGJlcmlrdXQgYWRhbGFoIGFuYWxpc2lzIGtpbmVyamEgcGVuZ2lyaW1hbiBiZXJkYXNhcmthbiBqZW5pcyBiYXJhbmcgZGFuIHdpbGF5YWggZGVuZ2FuIG1lbGloYXQgd2FrdHUgcGVuZ2lyaW1hbiBkYW4gYmlheWEgcGVyIHVuaXQ6DQoNCnwgKldpbGF5YWgqIHwgKkplbmlzIEJhcmFuZyogfCAqSnVtbGFoIEJhcmFuZyAodW5pdCkqIHwgKldha3R1IFBlbmdpcmltYW4gKGphbSkqIHwgKkJpYXlhIHBlciBVbml0IChScCkqIHwNCnwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBVdGFyYSAgICAgICB8IEVsZWt0cm9uaWsgICAgICAgfCAyMDAgICAgICAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1LDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMTUwICAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LDAwMCAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgICAgIHwgTWFrYW5hbiAgICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IFBlcmFsYXRhbiAgICAgICAgfCAxMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyLDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMjUwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNCwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFV0YXJhICAgICAgIHwgUGFrYWlhbiAgICAgICAgICB8IDMwMCAgICAgICAgICAgICAgICAgICAgICB8IDkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOCw1MDAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IE1ha2FuYW4gICAgICAgICAgfCAyMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDksNTAwICAgICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTQwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMSwwMDAgICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgICAgIHwgRWxla3Ryb25payAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQsNTAwICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IFBha2FpYW4gICAgICAgICAgfCAzNTAgICAgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcsODAwICAgICAgICAgICAgICAgICAgIHwNCnwgVXRhcmEgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTcwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMiwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gICAgIHwgRWxla3Ryb25payAgICAgICB8IDI1MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IFBha2FpYW4gICAgICAgICAgfCAxOTAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgsMjAwICAgICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCBNYWthbmFuICAgICAgICAgIHwgMTMwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMCw1MDAgICAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgICAgIHwgUGVyYWxhdGFuICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEsNTAwICAgICAgICAgICAgICAgICAgfA0KDQoqKkFuYWxpc2lzIEtpbmVyamEgQmVyZGFzYXJrYW4gSmVuaXMgQmFyYW5nKioNCg0KKioxLiBFbGVrdHJvbmlrKioNCg0KLSBXYWt0dSBQZW5naXJpbWFuIFJhdGEtUmF0YQ0KDQoNCiQkICg1KzQrNis2KS80PTUsMjUgXCBqYW0kJA0KDQotICBCaWF5YSBwZXIgVW5pdCBSYXRhLVJhdGE6DQoNCiQkICgxNSwwMDArMTQsMDAwKzE0LDUwMCsxNiwwMDApLzQ9MTQsODc1IFwgUnAvXCBVbml0ICQkDQoNCioqMi4gUGFrYWlhbioqDQoNCi0gV2FrdHUgUGVuZ2lyaW1hbiBSYXRhLVJhdGENCg0KJCQgKDgrOSs4KzcpLzQ9OCBcIGphbSQkDQoNCi0gQmlheWEgcGVyIFVuaXQgUmF0YS1SYXRhOg0KDQokJCAoOCwwMDArOCw1MDArNyw4MDArOCwyMDApLzQ9OCwxMjUgXCBScC9cIFVuaXQgJCQNCg0KKiozLiBNYWthbmFuKioNCg0KLSBXYWt0dSBQZW5naXJpbWFuIFJhdGEtUmF0YQ0KDQokJCAoNis3KzUpLzM9NiBcIGphbSQkDQoNCi0gQmlheWEgcGVyIFVuaXQgUmF0YS1SYXRhOg0KDQokJCAoMTAsMDAwKzksNTAwKzEwLDUwMCkvMz0xMCwwMDAgXCBScC9cIFVuaXQgJCQNCg0KKio0LiBQZXJhbGF0YW4qKg0KDQotIFdha3R1IFBlbmdpcmltYW4gUmF0YS1SYXRhDQoNCiQkICg3KzUrNCs1KS80PTUsMjUgXCBqYW0kJA0KDQotIEJpYXlhIHBlciBVbml0IFJhdGEtUmF0YToNCg0KJCQgKDEyLDAwMCsxMSwwMDArMTIsMDAwKzExLDUwMCkvND0xMSw2MjUgXCBScC9cIFVuaXQgJCQNCg0KKipLZXNpbXB1bGFuIEJlcmRhc2Fya2FuIEplbmlzIEJhcmFuZyoqDQoNCioqMS4gV2FrdHUgUGVuZ2lyaW1hbiBUZXJjZXBhdDoqKg0KDQotIEVsZWt0cm9uaWsgZGFuIFBlcmFsYXRhbjogUmF0YS1yYXRhIFwoNSwyNVwpIGphbQ0KDQoqKjIuIEJpYXlhIHBlciBVbml0IFRlcmVuZGFoOioqDQoNCi0gUGFrYWlhbjogUmF0YS1yYXRhIFwoOCwxMjVcKSBScC91bml0DQoNCioqQW5hbGlzaXMgS2luZXJqYSBCYXJhbmcqKg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeSB1bnR1ayB2aXN1YWxpc2FzaQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoa25pdHIpDQoNCiMgRGF0YSBwZW5naXJpbWFuDQpkYXRhX3BlbmdpcmltYW4gPC0gZGF0YS5mcmFtZSgNCiAgV2lsYXlhaCA9IGMoIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiksDQogIFRvdGFsX1dha3R1X1BlbmdpcmltYW4gPSBjKDE4LCAyMSwgMTgsIDE4LCAxNyksDQogIEp1bWxhaF9QZW5naXJpbWFuID0gYygzLCAzLCAzLCAzLCAzKSwNCiAgUmF0YV9SYXRhX1dha3R1ID0gYyg2LCA3LCA2LCA2LCA1LjY3KSwNCiAgUmF0YV9SYXRhX0JpYXlhX3Blcl9Vbml0ID0gYygxMTgzMywgMTE4MzMsIDk3MzMsIDEyMzMzLCAxMTEwMCkNCikNCg0KIyBNZW5hbXBpbGthbiB0YWJlbCBkYWxhbSBmb3JtYXQgeWFuZyByYXBpDQprYWJsZShkYXRhX3BlbmdpcmltYW4sIGNhcHRpb24gPSAiQW5hbGlzaXMgS2luZXJqYSBQZW5naXJpbWFuIHBlciBXaWxheWFoIikNCg0KDQpgYGANCg0KKipLZXNpbXB1bGFuIEJlcmRhc2Fya2FuIFdpbGF5YWgqKg0KDQoqKjEuIFdha3R1IFBlbmdpcmltYW4gVGVyY2VwYXQ6KioNCg0KLSBUZW5nYWg6IFJhdGEtcmF0YSBcKDUsNjdcKSBqYW0NCg0KKioyLiBCaWF5YSBwZXIgVW5pdCBUZXJlbmRhaDoqKg0KDQotIFRpbXVyOiBSYXRhLXJhdGEgXCg5LDczM1wpIFJwL3VuaXQNCg0KKipSZWtvbWVuZGFzaSoqDQoNCi0gV2lsYXlhaCB5YW5nIEVmaXNpZW46DQoNCiAgLSBUaW11cjogQmlheWEgcGVyIHVuaXQgdGVyZW5kYWggKFwoOSw3MzNcKSkgUnAvdW5pdCkgZGFuIHdha3R1IHBlbmdpcmltYW4gcmVsYXRpZiBjZXBhdCAoXCg2XCkpIGphbSkuDQoNCg0KLSBXaWxheWFoIHlhbmcgUGVybHUgUGVyaGF0aWFuOg0KICAtIEJhcmF0OiBCaWF5YSBwZXIgdW5pdCB0ZXJ0aW5nZ2kgKFwoMTIsMzMzXCkpIFJwL3VuaXQpIG1lc2tpcHVuIHdha3R1IHBlbmdpcmltYW4gdGlkYWsgdGVybGFsdSBsYW1hIChcKDZcKSBqYW0pLg0KDQogIC0gRm9rdXMgcGFkYSBvcHRpbWFzaSBsb2dpc3RpayBkaSB3aWxheWFoIGluaSB1bnR1ayBtZW5la2FuIGJpYXlhLg0KDQpEZW5nYW4gbWVtcGVyaGF0aWthbiByZWtvbWVuZGFzaSBpbmksIHBlcnVzYWhhYW4gZGFwYXQgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIHNlY2FyYSBrZXNlbHVydWhhbi4NCg0KIyBSZWZlcmVuc2kNCg0KVEtJIEFzc2Vzc21lbnQuIChuLmQuKS4gVWt1cmFuIFBlbnllYmFyYW4gRGF0YTogVmFyaWFucyBkYW4gU3RhbmRhciBEZXZpYXNpLiBUS0kuIFJldHJpZXZlZCBmcm9tIGh0dHBzOi8vYXNzZXNzbWVudC50a2kub3JnLm56L1VzaW5nLWV2aWRlbmNlLWZvci1sZWFybmluZy9Xb3JraW5nLXdpdGgtZGF0YS9Db25jZXB0cy9WYXJpYW5jZS1hbmQtc3RhbmRhcmQtZGV2aWF0aW9uDQoNCkludmVzdG9wZWRpYS4gKG4uZC4pLiBTdGFuZGFyZCBEZXZpYXRpb24uIEludmVzdG9wZWRpYS4gUmV0cmlldmVkIGZyb20gaHR0cHM6Ly93d3cuaW52ZXN0b3BlZGlhLmNvbS90ZXJtcy9zL3N0YW5kYXJkZGV2aWF0aW9uLmFzcA0KDQpLaGFuIEFjYWRlbXkuIChuLmQuKS4gU3RhbmRhcmQgRGV2aWF0aW9uIGFuZCBWYXJpYW5jZS4gS2hhbiBBY2FkZW15LiBSZXRyaWV2ZWQgZnJvbSBodHRwczovL3d3dy5raGFuYWNhZGVteS5vcmcvbWF0aC9zdGF0aXN0aWNzLXByb2JhYmlsaXR5L3N1bW1hcml6aW5nLXF1YW50aXRhdGl2ZS1kYXRhL3ZhcmlhbmNlLWFuZC1zdGFuZGFyZC1kZXZpYXRpb24vYS92YXJpYW5jZS1hbmQtc3RhbmRhcmQtZGV2aWF0aW9uLXJldmlldw0KDQpHcmFtZWRpYS4gKG4uZC4pLiBQZW55ZWJhcmFuIERhdGEgZGFuIFBlbmd1a3VyYW46IFZhcmlhbnMgZGFuIFN0YW5kYXIgRGV2aWFzaS4gR3JhbWVkaWEuIFJldHJpZXZlZCBmcm9tIGh0dHBzOi8vd3d3LmdyYW1lZGlhLmNvbS9saXRlcmFzaS9zdGFuZGFyLWRldmlhc2ktZGFuLXZhcmlhbnMvDQoNCk1pbGUgQXBwLiAobi5kLikuIENhcmEgUHJha3RpcyBNZW5pbmdrYXRrYW4gRWZpc2llbnNpIFBlbmdpcmltYW4gZGFsYW0gQmlzbmlzIEZNQ0cuIE1pbGUuIFJldHJpZXZlZCBmcm9tIGh0dHBzOi8vbWlsZS5hcHAvaWQvYmxvZy9jYXJhLXByYWt0aXMtbWVuaW5na2F0a2FuLWVmaXNpZW5zaS1wZW5naXJpbWFuLWRhbGFtLWJpc25pcy1mbWNnDQo=