Praktikum Ukuran Pemusatan Data

Statistika Dasar

1 Praktikum 1

1.1 Mean untuk Data Kelompok

Mean untuk data kelompok merupakan representasi nilai yang terdapat pada suatu data yang disajikan dalam bentuk kelompok. Dalam bentuk ini, nilai mean diperoleh dari hasil bagi antara perkalian frekuensi setiap kelas dan nilai tengah pada setiap kelas dengan jumlah frekuensi.

Mean untuk data kelompok memiliki rumus sebagai berikut: \[ \bar{X} = \frac {∑f \cdot x_i}{∑f} \] Keterangan: \[ \bar{X} = Nilai~mean~(rata-rata)~untuk~data~kelompok\\ ∑f = Jumlah~total~frekuensi\\ x_i = Nilai~tengah~(x_i)~dari~kelas~interval,~dihitung~dengan~rumus: \]

\[ x_i = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2} \] Langkah-langkah untuk menghitung mean untuk data kelompok, yaitu:

  1. Menentukan tepi bawah dan tepi atas kelas lalu menghitung nilai tengah dengan menjumlahkan tepi bawah dan tepi atas kelas setelah itu dibagi dengan 2.

  2. Mengkalikan frekuensi dengan nilai tengah (\(f \cdot x_i\))

  3. Menghitung jumlah total dari perkalian frekuensi dengan nilai tengah (\(∑f \cdot x_i\))

  4. Menghitung jumlah total frekuensi (∑f): dengan cara menjumlahkan semua frekuensi yang ada.

  5. Memasukkan ke dalam rumus lalu menghitung secara matematical.

1.1.1 Contoh

Berikut adalah data nilai ujian Statistika Dasar dari 30 mahasiswa Sains Data.

Nilai Frekuensi (f)
30 - 39 1
40 - 49 4
50 - 59 5
60 - 69 7
70 - 79 6
80 - 89 3
90 - 99 4

1.1.1.1 Mean dengan Outlier

1.Menentukan nilai tengah (\(x\))

  • Interval 30 - 39 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {29,5+39,5}{2}=34,5\)

  • Interval 40 - 49 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {39,5+49,5}{2}=44,5\)

  • Interval 50 - 59 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {49,5+59,5}{2}=54,5\)

  • Interval 60 - 69 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {59,5+69,5}{2}=64,5\)

  • Interval 70 - 79 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {69,5+79,5}{2}=74,5\)

  • Interval 80 - 89 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {79,5+89,5}{2}=84,5\)

  • Interval 90 - 99 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {89,5+99,5}{2}=94,5\)

Nilai Frekuensi (\(f\)) Nilai Tengah (\(x_i\))
30 - 39 1 34.5
40 - 49 4 44.5
50 - 59 5 54.5
60 - 69 7 64.5
70 - 79 6 74.5
80 - 89 3 84.5
90 - 99 4 94.5
  1. Mengkalikan frekuensi dengan nilai tengah (\(f \cdot x_i\))
  • Interval 30 - 39 : \(f \cdot x_i= 1 \cdot 34,5= 34,5\)

  • Interval 40 - 49 : \(f \cdot x_i= 4 \cdot 44,5= 178\)

  • Interval 50 - 59 : \(f \cdot x_i= 5 \cdot 54,5= 272,5\)

  • Interval 60 - 69 : \(f \cdot x_i= 7 \cdot 64,5= 451,5\)

  • Interval 70 - 79 : \(f \cdot x_i= 6 \cdot 74,5= 447\)

  • Interval 80 - 89 : \(f \cdot x_i= 3 \cdot 84,5= 253,5\)

  • Interval 90 - 99 : \(f \cdot x_i= 4 \cdot 94,5= 378\)

Nilai Frekuensi (\(f\)) Nilai Tengah (\(x_i\)) \(f \cdot x_i\)
30 - 39 1 34.5 34.5
40 - 49 4 44.5 178
50 - 59 5 54.5 272.5
60 - 69 7 64.5 451.5
70 - 79 6 74.5 447
80 - 89 3 84.5 253.5
90 - 99 4 94.5 378
  1. Menghitung jumlah total dari perkalian frekuensi dengan nilai tengah (\(∑f \cdot x_i\)) \[∑f \cdot x_i=34,5+178+272,5+451,5+447+253,5+378=2015\]

  2. Menghitung jumlah total frekuensi (∑f) \[∑f=1+4+5+7+6+3+4=30\]

  3. Memasukkan ke dalam rumus \[\bar{X} = \frac {∑f \cdot x_i}{∑f}= \frac {2015}{30}=67,17\]

1.1.1.2 Mean tanpa Outlier

Menganggap interval kelas 30 - 39 sebagai outlier dalam analisis data kelompok dapat dipertimbangkan karena frekuensinya yang sangat rendah (hanya 1 mahasiswa) dibandingkan dengan kelas lainnya, serta distribusi data yang lebih terkonsentrasi pada nilai yang lebih tinggi seperti 60 - 69 dan 70 - 79. Selain itu, rentang nilai kelas 30 - 39 yang jauh lebih rendah juga dapat dianggap sebagai anomali dalam konteks data yang lebih luas. Dalam visualisasi data, kelas ini terlihat terpisah dari pola distribusi umum, sehingga dapat dipandang sebagai data yang tidak sesuai dengan pola mayoritas. Penghapusan kelas ini juga dapat membantu untuk fokus pada kelompok data yang lebih relevan dan memberikan gambaran distribusi yang lebih representatif.

Nilai Frekuensi (\(f\))
40 - 49 4
50 - 59 5
60 - 69 7
70 - 79 6
80 - 89 3
90 - 99 4

1.Menentukan nilai tengah (\(x\))

  • Interval 40 - 49 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {39,5+49,5}{2}=44,5\)

  • Interval 50 - 59 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {49,5+59,5}{2}=54,5\)

  • Interval 60 - 69 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {59,5+69,5}{2}=64,5\)

  • Interval 70 - 79 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {69,5+79,5}{2}=74,5\)

  • Interval 80 - 89 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {79,5+89,5}{2}=84,5\)

  • Interval 90 - 99 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {89,5+99,5}{2}=94,5\)

Nilai Frekuensi (\(f\)) Nilai Tengah (\(x_i\))
40 - 49 4 44.5
50 - 59 5 54.5
60 - 69 7 64.5
70 - 79 6 74.5
80 - 89 3 84.5
90 - 99 4 94.5
  1. Mengkalikan frekuensi dengan nilai tengah (\(f \cdot x_i\))
  • Interval 40 - 49 : \(f \cdot x_i= 4 \cdot 44,5= 178\)

  • Interval 50 - 59 : \(f \cdot x_i= 5 \cdot 54,5= 272,5\)

  • Interval 60 - 69 : \(f \cdot x_i= 7 \cdot 64,5= 451,5\)

  • Interval 70 - 79 : \(f \cdot x_i= 6 \cdot 74,5= 447\)

  • Interval 80 - 89 : \(f \cdot x_i= 3 \cdot 84,5= 253,5\)

  • Interval 90 - 99 : \(f \cdot x_i= 4 \cdot 94,5= 378\)

Interval Nilai Frekuensi (\(f\)) Nilai Tengah (\(x_i\)) \(f \cdot x_i\)
40 - 49 4 44.5 178
50 - 59 5 54.5 272.5
60 - 69 7 64.5 451.5
70 - 79 6 74.5 447
80 - 89 3 84.5 253.5
90 - 99 4 94.5 378
  1. Menghitung jumlah total dari perkalian frekuensi dengan nilai tengah (\(∑f \cdot x_i\)) \[∑f \cdot x_i=178+272,5+451,5+447+253,5+378=1980,5\]

  2. Menghitung jumlah total frekuensi (∑f) \[∑f=4+5+7+6+3+4=29\]

  3. Memasukkan ke dalam rumus \[\bar{X} = \frac {∑f \cdot x_i}{∑f}= \frac {1980,5}{29}=68,29\]

1.1.1.3 Mean dengan Boxplot

1.1.1.4 Mean dengan Histogram

1.1.1.5 Analisis Mean

Mean dengan Outlier: 67,17

Mean tanpa Outlier: 68,29

Interpretasi:

Nilai mean memberikan gambaran tentang nilai rata-rata ujian Statistika Dasar pada populasi mahasiswa yang diteliti. Perbedaan antara mean dengan outlier (67,17) dan mean tanpa outlier (68,29) menunjukkan bahwa kehadiran interval 30 - 39 yang memiliki frekuensi sangat rendah (hanya 1 mahasiswa) memengaruhi sedikit nilai rata-rata keseluruhan, tetapi cukup untuk menurunkan rata-rata tersebut. Meskipun sebagian besar mahasiswa memiliki nilai yang lebih tinggi, satu mahasiswa dengan nilai yang jauh lebih rendah menarik rata-rata menjadi lebih rendah.

Pengaruh terhadap Kasus:

Jika kita hanya melihat mean tanpa outlier (68,29), rata-rata nilai ujian lebih realistis dan menunjukkan bahwa mayoritas mahasiswa memiliki nilai yang cukup baik, dengan konsentrasi nilai di rentang 60 ke atas. Ini berarti bahwa meskipun ada satu mahasiswa yang memiliki nilai sangat rendah, sebagian besar mahasiswa menunjukkan kinerja yang baik di ujian ini.

1.2 Median untuk Data Kelompok

Median adalah nilai tengah dari data yang telah diurutkan. Untuk data kelompok, median dihitung dengan menggunakan rumus khusus yang memperhitungkan kelas interval. Median membagi data menjadi dua bagian yang sama besar: separuh data berada di bawah median, dan separuh berada di atasnya.

Median untuk data kelompok memiliki rumus sebagai berikut:

\[ M_e = T_b + \frac {\frac{∑f}{2}-f_k}{f_m} \cdot p \] Keterangan: \[ M_e = Nilai~median~untuk~data~kelompok\\ T_b = Tepi~bawah~kelas~median~data~kelompok\\ ∑f = Jumlah~total~frekuensi\\ f_k = Frekuensi~kumulatif~sebelum~kelas~median\\ f_m = Frekuensi~kelas~median\\ p = Panjang~interval~kelas \] Langkah-langkah dalam menghitung median untuk data kelompok:

  1. Menghitung jumlah total frekuensi (∑f): dengan cara menjumlahkan semua frekuensi yang ada.

  2. Membagi jumlah total frekuensi dengan 2.

  3. Menentukan frekuensi kumulatif: frekuensi kumulatif adalah jumlah frekuensi yang dihitung secara bertahap dari awal hingga akhir, dengan menambahkan frekuensi pada setiap langkah. Langkah-langkah menentukan frekuensi kumulatif, yaitu: Mulai dari frekuensi kelas pertama, Tambahkan frekuensi setiap kelas ke jumlah frekuensi sebelumnya secara berurutan.

  4. Menentukan kelas median: kelas median merupakan interval kelas yang mengandung jumlah total frekuensi dibagi dengan 2 dari distribusi frkuensi kumulatif.

  5. Menentukan frekuensi kumulatif sebelum kelas median.

  6. Menentukan frekuensi kelas median.

  7. Menentukan panjang interval kelas.

  8. Menentukan tepi bawah kelas median.

  9. Memasukkan ke dalam rumus lalu menghitung secara matematical.

1.2.1 Contoh

Berikut adalah data nilai ujian Statistika Dasar dari 30 mahasiswa Sains Data.

Nilai Frekuensi (f)
30 - 39 1
40 - 49 4
50 - 59 5
60 - 69 7
70 - 79 6
80 - 89 3
90 - 99 4

1.2.1.1 Median Dengan Outlier

  1. Menghitung jumlah total frekuensi (∑f) \[∑f=1+4+5+7+6+3+4=30\]
  2. Membagi jumlah total frekuensi dengan 2. \[ \frac {∑f}{2} = \frac {30}{2} = 15\]
  3. Menentukan frekuensi kumulatif
Interval Nilai Frekuensi (\(f\)) Frekuensi Kumulatif
30 - 39 1 1
40 - 49 4 5
50 - 59 5 10
60 - 69 7 17
70 - 79 6 23
80 - 89 3 26
90 - 99 4 30
  1. Menentukan kelas median

Kelas median adalah 60 - 69 (frekuensi kumulatif sebelum kelas ini adalah 10, dan kumulatif kelas ini mencapai 17).

  1. Menentukan frekuensi kumulatif sebelum kelas median. \[f_k= 10\]

  2. Menentukan frekuensi kelas median. \[f_m= 7\]

  3. Menentukan panjang interval kelas. \[p= 10\]

  4. Menentukan tepi bawah kelas median. \[T_b = 59,5\]

  5. Memasukkan ke dalam rumus. \[ M_e = T_b + \frac {\frac{∑f}{2}-f_k}{f_m} \cdot p = 59,5 + \frac {15-10}{7} \cdot 10 = 66,64 \]

1.2.1.2 Median Tanpa Outlier

Menganggap interval kelas 30 - 39 sebagai outlier dalam analisis data kelompok dapat dipertimbangkan karena frekuensinya yang sangat rendah (hanya 1 mahasiswa) dibandingkan dengan kelas lainnya, serta distribusi data yang lebih terkonsentrasi pada nilai yang lebih tinggi seperti 60 - 69 dan 70 - 79. Selain itu, rentang nilai kelas 30 - 39 yang jauh lebih rendah juga dapat dianggap sebagai anomali dalam konteks data yang lebih luas. Dalam visualisasi data, kelas ini terlihat terpisah dari pola distribusi umum, sehingga dapat dipandang sebagai data yang tidak sesuai dengan pola mayoritas. Penghapusan kelas ini juga dapat membantu untuk fokus pada kelompok data yang lebih relevan dan memberikan gambaran distribusi yang lebih representatif.

Nilai Frekuensi (\(f\))
40 - 49 4
50 - 59 5
60 - 69 7
70 - 79 6
80 - 89 3
90 - 99 4
  1. Menghitung jumlah total frekuensi (∑f) \[∑f=4+5+7+6+3+4=29\]
  2. Membagi jumlah total frekuensi dengan 2. \[ \frac {∑f}{2} = \frac {29}{2} = 14,5\]
  3. Menentukan frekuensi kumulatif
Nilai Frekuensi (\(f\)) Frekuensi Kumulatif
40 - 49 4 4
50 - 59 5 9
60 - 69 7 16
70 - 79 6 22
80 - 89 3 25
90 - 99 4 29
  1. Menentukan kelas median

Kelas median adalah 60 - 69 (frekuensi kumulatif sebelum kelas ini adalah 9, dan kumulatif kelas ini mencapai 16).

  1. Menentukan frekuensi kumulatif sebelum kelas median. \[f_k= 9\]
  2. Menentukan frekuensi kelas median. \[f_m= 7\]
  3. Menentukan panjang interval kelas. \[p= 10\]
  4. Menentukan tepi bawah kelas median. \[T_b = 59,5\]
  5. Memasukkan ke dalam rumus. \[ M_e = T_b + \frac {\frac{∑f}{2}-f_k}{f_m} \cdot p = 59,5 + \frac {14,5-9}{7} \cdot 10 = 67,36 \]

1.2.1.3 Median dengan Boxplot

1.2.1.4 Median dengan Histogram

1.2.1.5 Analisis Median

Median dengan Outlier: 66,64

Median tanpa Outlier: 67,36

Interpretasi:

Nilai median menunjukkan posisi tengah dari data yang telah diurutkan. Median dengan outlier (66,64) sedikit lebih rendah daripada median tanpa outlier (67,36), yang mengindikasikan bahwa penghapusan interval kelas 30 - 39, yang memiliki frekuensi sangat rendah, sedikit menggeser posisi tengah data ke atas. Meskipun nilai median dengan outlier menunjukkan posisi tengah data secara keseluruhan, penghapusan kelas 30 - 39 yang terisolasi memberikan gambaran yang lebih akurat tentang distribusi data mayoritas, yaitu nilai-nilai ujian yang lebih tinggi.

Pengaruh terhadap Kasus:

Jika kita hanya melihat median tanpa outlier (67,36), posisi tengah data menjadi sedikit lebih tinggi, yang mencerminkan kenyataan bahwa mayoritas mahasiswa memiliki nilai di atas 60, dengan konsentrasi nilai yang cukup besar di rentang 60 - 69 dan 70 - 79. Hal ini menunjukkan bahwa, meskipun ada satu nilai yang sangat rendah, mayoritas mahasiswa berada di atas nilai tengah, yang menunjukkan kinerja yang lebih baik di ujian Statistika Dasar.

1.3 Modus untuk Data Kelompok

Modus untuk data kelompok adalah nilai yang paling sering muncul atau memiliki frekuensi tertinggi dalam distribusi data kelompok.

Modus untuk data kelompok memiliki rumus sebagai berikut:

\[ M_o = T_b + \frac {d_1} {d_1+d_2} \cdot p \]

Keterangan:

\[ M_O = Nilai~modus~untuk~data~kelompok\\ T_b = Tepi~bawah~kelas~modus~data~kelompok\\ d_1 = Selisih~frekuensi~kelas~modus~dengan~frekuensi~sebelum~kelas~modus\\ d_2 = Selisih~frekuensi~kelas~modus~dengan~frekuensi~setelah~kelas~modus\\ p = Panjang~interval~kelas \]

Langkah-langkah dalam menghitung modus untuk data kelompok, yaitu:

  1. Mengidentifikasi kelas modus : Dengan cara mencari kelas yang memiliki frekuensi tertinggi.

  2. Menentukan tepi bawah kelas modus : Dengan cara mengurangi batas bawah kelas modus tersebut dengan 0,5.

  3. Menentukan \(d_1\):selisih frekuensi kelas modus dengan frekuensi sebelum kelas modus.

  4. Menentukan \(d_2\):selisih frekuensi kelas modus dengan frekuensi setelah kelas modus.

  5. Mentukan panjang interval kelas.

  6. Memasukkan ke dalam rumus lalu menghitung secara matematical.

1.3.1 Contoh

Berikut adalah data nilai ujian Statistika Dasar dari 30 mahasiswa Sains Data.

Nilai Frekuensi (f)
30 - 39 1
40 - 49 4
50 - 59 5
60 - 69 7
70 - 79 6
80 - 89 3
90 - 99 4

1.3.1.1 Modus Dengan Outlier

  1. Mengidentifikasi kelas modus

Kelas modus adalah 60-69 karena memiliki frekuensi tertinggi yaitu 7

  1. Menentukan tepi bawah kelas modus \[ T_b = 59,5 \]
  2. Menentukan \(d_1\) \[ d_1 = 7-5 = 2\]
  3. Menentukan \(d_2\) \[ d_2 = 7-6 = 1\]
  4. Mentukan panjang interval kelas \[p= 10\]
  5. Memasukkan ke dalam rumus \[ M_o = T_b + \frac {d_1} {d_1+d_2} \cdot p= 59,5 + \frac {2}{2+1} \cdot 10 = 66,17 \]

1.3.1.2 Modus Tanpa Outlier

Menganggap interval kelas 30 - 39 sebagai outlier dalam analisis data kelompok dapat dipertimbangkan karena frekuensinya yang sangat rendah (hanya 1 mahasiswa) dibandingkan dengan kelas lainnya, serta distribusi data yang lebih terkonsentrasi pada nilai yang lebih tinggi seperti 60 - 69 dan 70 - 79. Selain itu, rentang nilai kelas 30 - 39 yang jauh lebih rendah juga dapat dianggap sebagai anomali dalam konteks data yang lebih luas. Dalam visualisasi data, kelas ini terlihat terpisah dari pola distribusi umum, sehingga dapat dipandang sebagai data yang tidak sesuai dengan pola mayoritas. Penghapusan kelas ini juga dapat membantu untuk fokus pada kelompok data yang lebih relevan dan memberikan gambaran distribusi yang lebih representatif.

Nilai Frekuensi (\(f\))
40 - 49 4
50 - 59 5
60 - 69 7
70 - 79 6
80 - 89 3
90 - 99 4
  1. Mengidentifikasi kelas modus

Kelas modus adalah 60-69 karena memiliki frekuensi tertinggi yaitu 7 Menentukan \(d_1\)

  1. Menentukan tepi bawah kelas modus \[ T_b = 59,5 \]

  2. Menentukan \(d_1\) \[ d_1 = 7-5 = 2\]

  3. Menentukan \(d_2\) \[ d_2 = 7-6 = 1\]

  4. Mentukan panjang interval kelas \[p= 10\]

  5. Memasukkan ke dalam rumus \[ M_o = T_b + \frac {d_1} {d_1+d_2} \cdot p= 59,5 + \frac {2}{2+1} \cdot 10 = 66,17 \]

1.3.1.3 Modus dengan Boxplot

1.3.1.4 Modus dengan Histogram

1.3.1.5 Analisis Modus

Modus dengan Outlier: 66,17

Modus tanpa Outlier: 66,17

Interpretasi:

Nilai modus menunjukkan nilai yang paling sering muncul dalam distribusi data. Dalam kasus ini, baik dengan atau tanpa outlier, modus tetap berada pada nilai 66,17. Ini karena kelas dengan frekuensi tertinggi (60-69) tetap menjadi kelas modus baik sebelum maupun setelah penghapusan interval kelas 30 - 39. Meskipun kelas 30 - 39 memiliki frekuensi yang sangat rendah dan dapat dianggap sebagai outlier, penghapusan kelas ini tidak mempengaruhi hasil perhitungan modus secara signifikan.

Pengaruh terhadap Kasus:

Modus ini menunjukkan bahwa nilai ujian yang paling sering ditemui di kalangan mahasiswa adalah di rentang 60 - 69. Artinya, sebagian besar mahasiswa memperoleh nilai yang berada di kisaran tersebut, yang mencerminkan konsentrasi tinggi di kelompok nilai sedang. Penghapusan kelas dengan frekuensi rendah (30 - 39) tidak mengubah distribusi mayoritas data, yang tetap menunjukkan bahwa mayoritas mahasiswa berada dalam kategori nilai menengah.

2 Praktikum 2

Contoh sederhana yang menggunakan ukuran pemusatan data dalam studi kasus

2.1 Bisnis

Sebuah perusahaan ingin menganalisis distribusi gaji bulanan karyawan mereka untuk memahami rentang gaji yang paling umum diterima di perusahaan tersebut. Data ini akan membantu perusahaan dalam melakukan perencanaan kebijakan gaji dan menentukan apakah struktur gaji yang ada perlu disesuaikan untuk menarik dan mempertahankan talenta terbaik. Perusahaan mengelompokkan data gaji bulanan karyawan dalam beberapa rentang gaji, seperti berikut:

Rentang Gaji Jumlah Karyawan (f)
$0 - $999 8
$1000 - $1999 15
$2000 - $2999 25
$3000 - $3999 20
$4000 - $4999 10
$5000 - $5999 5

Gaji $5000 - $5999 dianggap sebagai outlier karena frekuensinya jauh lebih rendah dibandingkan dengan rentang gaji lainnya, dan angkanya jauh lebih tinggi dibandingkan dengan sebagian besar data, yang menciptakan ketidakseimbangan dalam distribusi gaji secara keseluruhan. Maka data tanpa outlier, seperti berikut:

Rentang Gaji Jumlah Karyawan (f)
$0 - $999 8
$1000 - $1999 15
$2000 - $2999 25
$3000 - $3999 20
$4000 - $4999 10

2.1.1 Mean dengan Outlier

1.Menentukan nilai tengah (\(x_i\))

  • Interval $0 - $999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {-0,5+999,5}{2}=499,5\)

  • Interval $1000 - $1999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {999,5+1999,5}{2}=1499,5\)

  • Interval $2000 - $2999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {1999,5+2999,5}{2}=2499,5\)

  • Interval $3000 - $3999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {2999,5+3999,5}{2}=3499,5\)

  • Interval $4000 - $4999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {3999,5+4999,5}{2}=4499,5\)

  • Interval $5000 - $5999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {4999,5+5999,5}{2}=5499,5\)

Rentang Gaji Frekuensi (f) Nilai Tengah (x_i)
$0 - $999 8 499.5
$1000 - $1999 15 1499.5
$2000 - $2999 25 2499.5
$3000 - $3999 20 3499.5
$4000 - $4999 10 4499.5
$5000 - $5999 5 4499.5
  1. Mengkalikan frekuensi dengan nilai tengah (\(f \cdot x_i\))
  • Interval $0 - $999 : \(f \cdot x_i= 8 \cdot 499.5= 3996\)

  • Interval $1000 - $1999 : \(f \cdot x_i= 15 \cdot 1499.5= 22492.5\)

  • Interval $2000 - $2999 : \(f \cdot x_i= 25 \cdot 2499.5= 62487.5\)

  • Interval $3000 - $3999 : \(f \cdot x_i= 20 \cdot 3499.5= 69990\)

  • Interval $4000 - $4999 : \(f \cdot x_i= 10 \cdot 4499.5= 44995\)

  • Interval $5000 - $5999 : \(f \cdot x_i= 5 \cdot 4499.5= 27497.5\)

Rentang Gaji Frekuensi (f) Nilai Tengah (x_i) \(f_i \cdot x_i\)
$0 - $999 8 499.5 3996
$1000 - $1999 15 1499.5 22492.5
$2000 - $2999 25 2499.5 62487.5
$3000 - $3999 20 3499.5 69990
$4000 - $4999 10 4499.5 44995
$5000 - $5999 5 5499.5 27497.5
  1. Menghitung jumlah total dari perkalian frekuensi dengan nilai tengah (\(∑f \cdot x_i\)) \[∑f \cdot x_i=3996+22492.5+62487.5+69990+44995+27497.5=231458,5\]

  2. Menghitung jumlah total frekuensi (∑f) \[∑f=8+15+25+20+10+5=83\]

  3. Memasukkan ke dalam rumus \[\bar{X} = \frac {∑f \cdot x_i}{∑f}= \frac {231458,5}{83}=2788,65\]

2.1.2 Mean tanpa Outlier

1.Menentukan nilai tengah (\(x_i\))

  • Interval $0 - $999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {-0,5+999,5}{2}=499,5\)

  • Interval $1000 - $1999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {999,5+1999,5}{2}=1499,5\)

  • Interval $2000 - $2999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {1999,5+2999,5}{2}=2499,5\)

  • Interval $3000 - $3999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {2999,5+3999,5}{2}=3499,5\)

  • Interval $4000 - $4999 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {3999,5+4999,5}{2}=4499,5\)

Rentang Gaji Frekuensi (f) Nilai Tengah (x_i)
$0 - $999 8 499.5
$1000 - $1999 15 1499.5
$2000 - $2999 25 2499.5
$3000 - $3999 20 3499.5
$4000 - $4999 10 4499.5
  1. Mengkalikan frekuensi dengan nilai tengah (\(f \cdot x_i\))
  • Interval $0 - $999 : \(f \cdot x_i= 8 \cdot 499.5= 3996\)

  • Interval $1000 - $1999 : \(f \cdot x_i= 15 \cdot 1499.5= 22492.5\)

  • Interval $2000 - $2999 : \(f \cdot x_i= 25 \cdot 2499.5= 62487.5\)

  • Interval $3000 - $3999 : \(f \cdot x_i= 20 \cdot 3499.5= 69990\)

  • Interval $4000 - $4999 : \(f \cdot x_i= 10 \cdot 4499.5= 44995\)

Rentang Gaji Frekuensi (f) Nilai Tengah (x_i) \(f_i \cdot x_i\)
$0 - $999 8 499.5 3996
$1000 - $1999 15 1499.5 22492.5
$2000 - $2999 25 2499.5 62487.5
$3000 - $3999 20 3499.5 69990
$4000 - $4999 10 4499.5 44995
  1. Menghitung jumlah total dari perkalian frekuensi dengan nilai tengah (\(∑f \cdot x_i\)) \[∑f \cdot x_i=3996+22492.5+62487.5+69990+44995 = 203961\]

  2. Menghitung jumlah total frekuensi (∑f) \[∑f=8+15+25+20+10=78\]

  3. Memasukkan ke dalam rumus \[\bar{X} = \frac {∑f \cdot x_i}{∑f}= \frac {203961}{78}=2641,88\]

2.1.3 Median dengan Outlier

  1. Menghitung jumlah total frekuensi (∑f) \[∑f=8+15+25+20+10+5=83\]

  2. Membagi jumlah total frekuensi dengan 2. \[ \frac {∑f}{2} = \frac {83}{2} = 41,5\]

  3. Menentukan frekuensi kumulatif

Rentang Gaji Jumlah Karyawan (f) Frekuensi Kumulatif
$0 - $999 8 8
$1000 - $1999 15 23
$2000 - $2999 25 48
$3000 - $3999 20 68
$4000 - $4999 10 78
$5000 - $5999 5 83
  1. Menentukan kelas median

Kelas median adalah $2000 - $2999 (frekuensi kumulatif sebelum kelas ini adalah 23, dan kumulatif kelas ini mencapai 48).

  1. Menentukan frekuensi kumulatif sebelum kelas median. \[f_k= 23\]

  2. Menentukan frekuensi kelas median. \[f_m= 25\]

  3. Menentukan panjang interval kelas. \[p= 1000\]

  4. Menentukan tepi bawah kelas median. \[T_b = 1999,5\]

  5. Memasukkan ke dalam rumus. \[ M_e = T_b + \frac {\frac{∑f}{2}-f_k}{f_m} \cdot p = 1999,5 + \frac {41,5-23}{25} \cdot 1000 = 2739,5 \]

2.1.4 Median tanpa Outlier

  1. Menghitung jumlah total frekuensi (∑f) \[∑f=8+15+25+20+10=78\]

  2. Membagi jumlah total frekuensi dengan 2. \[ \frac {∑f}{2} = \frac {78}{2} = 39\]

  3. Menentukan frekuensi kumulatif

Rentang Gaji Jumlah Karyawan (f) Frekuensi Kumulatif
$0 - $999 8 8
$1000 - $1999 15 23
$2000 - $2999 25 48
$3000 - $3999 20 68
$4000 - $4999 10 78
  1. Menentukan kelas median

Kelas median adalah $2000 - $2999 (frekuensi kumulatif sebelum kelas ini adalah 23, dan kumulatif kelas ini mencapai 48).

  1. Menentukan frekuensi kumulatif sebelum kelas median. \[f_k= 23\]

  2. Menentukan frekuensi kelas median. \[f_m= 25\]

  3. Menentukan panjang interval kelas. \[p= 1000\]

  4. Menentukan tepi bawah kelas median. \[T_b = 1999,5\]

  5. Memasukkan ke dalam rumus. \[ M_e = T_b + \frac {\frac{∑f}{2}-f_k}{f_m} \cdot p = 1999,5 + \frac {39-23}{25} \cdot 1000 = 2639,5 \]

2.1.5 Modus dengan Outlier

  1. Mengidentifikasi kelas modus

Kelas modus adalah $2000 - $2999 karena memiliki frekuensi tertinggi yaitu 25

  1. Menentukan tepi bawah kelas modus \[ T_b = 1999,5 \]

  2. Menentukan \(d_1\) \[ d_1 = 25-15 = 10\]

  3. Menentukan \(d_2\) \[ d_2 = 25-20 = 5\]

  4. Mentukan panjang interval kelas \[p= 1000\]

  5. Memasukkan ke dalam rumus \[ M_o = T_b + \frac {d_1} {d_1+d_2} \cdot p= 1999,5 + \frac {10}{10+5} \cdot 1000 = 2666,17 \]

2.1.6 Modus tanpa Outlier

  1. Mengidentifikasi kelas modus

Kelas modus adalah $2000 - $2999 karena memiliki frekuensi tertinggi yaitu 25

  1. Menentukan tepi bawah kelas modus \[ T_b = 1999,5 \]

  2. Menentukan \(d_1\) \[ d_1 = 25-15 = 10\]

  3. Menentukan \(d_2\) \[ d_2 = 25-20 = 5\]

  4. Mentukan panjang interval kelas \[p= 1000\]

  5. Memasukkan ke dalam rumus \[ M_o = T_b + \frac {d_1} {d_1+d_2} \cdot p= 1999,5 + \frac {10}{10+5} \cdot 1000 = 2666,17 \]

2.1.7 Visualisasi dengan Boxplot

2.1.8 Visualisasi dengan Histogram

2.1.9 Analisis

Mean (Rata-rata)

Mean dengan Outlier: $2788,65

Mean tanpa Outlier: $2641,88

Interpretasi:
Nilai mean memberikan gambaran tentang rata-rata gaji bulanan karyawan perusahaan. Perbedaan antara mean dengan outlier (2788,65) dan mean tanpa outlier (2641,88) menunjukkan bahwa kehadiran rentang gaji yang sangat tinggi ($5000 - $5999) yang diwakili oleh sedikit karyawan (5 orang) sedikit mempengaruhi rata-rata gaji keseluruhan. Meskipun mayoritas karyawan memiliki gaji yang lebih rendah, keberadaan gaji yang sangat tinggi ini mendorong rata-rata gaji lebih tinggi.

Pengaruh terhadap Kasus:
Jika hanya melihat mean tanpa outlier (2641,88), rata-rata gaji karyawan lebih mencerminkan distribusi gaji mayoritas, yang berada di bawah $3000. Artinya, sebagian besar karyawan menerima gaji yang relatif lebih rendah dibandingkan dengan nilai rata-rata yang tercatat saat mempertimbangkan outlier. Hal ini dapat menjadi bahan pertimbangan bagi perusahaan dalam merancang kebijakan gaji agar lebih adil dan merata.

Median

Median dengan Outlier: $2739,5

Median tanpa Outlier: $2639,5

Interpretasi:
Median menunjukkan nilai tengah dari distribusi gaji. Dalam hal ini, perbedaan antara median dengan outlier (2739,5) dan median tanpa outlier (2639,5) relatif kecil, menunjukkan bahwa kehadiran gaji tinggi tidak terlalu mempengaruhi nilai tengah distribusi. Ini menunjukkan bahwa sebagian besar karyawan memiliki gaji di bawah $3000, meskipun ada sejumlah kecil karyawan yang menerima gaji jauh lebih tinggi.

Pengaruh terhadap Kasus:
Nilai median yang dekat dengan $2700 menunjukkan bahwa separuh besar karyawan memiliki gaji yang tidak jauh dari angka tersebut, yang menunjukkan struktur gaji yang cukup konsisten di bawah $3000. Oleh karena itu, perusahaan mungkin perlu mengevaluasi kembali rentang gaji untuk memastikan keberagaman kompensasi yang lebih baik dan lebih menarik bagi talenta terbaik.

Modus

Modus dengan Outlier: $2666,17

Modus tanpa Outlier: $2666,17

Interpretasi:
Modus adalah nilai yang paling sering muncul dalam distribusi gaji. Dalam hal ini, kelas gaji yang memiliki frekuensi tertinggi adalah $2000 - $2999, dengan 25 karyawan. Baik dengan maupun tanpa outlier, modus tetap berada pada rentang gaji ini, yang menegaskan bahwa sebagian besar karyawan berada dalam kisaran gaji tersebut.

Pengaruh terhadap Kasus:
Karena modus menunjukkan nilai paling umum atau sering muncul, maka distribusi gaji yang paling sering adalah di kisaran $2000 - $2999. Ini menunjukkan bahwa mayoritas karyawan memiliki gaji yang lebih rendah, dan perusahaan mungkin perlu mempertimbangkan untuk menyesuaikan struktur gaji agar lebih kompetitif, terutama di luar rentang ini.

2.2 Kesehatan

Seorang peneliti ingin menganalisis distribusi Indeks Massa Tubuh (IMT) pada populasi dewasa di sebuah wilayah. Penelitian ini bertujuan untuk memahami pola distribusi IMT serta mengidentifikasi kelompok yang mungkin berisiko mengalami obesitas. Data IMT dikumpulkan dari 195 individu dan dikelompokkan dalam interval IMT memiliki kategori kategori sendiri terhadap interval IMT nya yaitu :

Interval IMT (kg/m²) Kategori
15.0 - 18.4 Berat badan kurang
18.5 - 24.9 Normal
25.0 - 29.9 Berat badan lebih
30.0 - 34.9 Obesitas I
35.0 - 39.9 Obesitas II
40.0 - 44.9 Obesitas III

Data IMT dari 195 individu yaitu sebagai berikut:

Interval IMT (kg/m²) Frekuensi (\(f\))
15.0 - 18.4 10
18.5 - 24.9 60
25.0 - 29.9 50
30.0 - 34.9 40
35.0 - 39.9 30
40.0 - 44.9 5

Interval 40.0 - 44.9 dianggap sebagai outlier karena frekuensinya yang sangat rendah (5), yang menunjukkan bahwa sangat sedikit individu yang memiliki IMT dalam rentang tersebut, serta posisinya yang jauh lebih tinggi dibandingkan interval lainnya.

Interval IMT (kg/m²) Frekuensi (\(f\))
15.0 - 18.4 10
18.5 - 24.9 60
25.0 - 29.9 50
30.0 - 34.9 40
35.0 - 39.9 30

2.2.1 Mean dengan Outlier

1.Menentukan nilai tengah (\(x_i\))

  • Interval 15.0 - 18.4 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {14,5+18,9}{2}=16,7\)

  • Interval 18.5 - 24.9 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {18+25,4}{2}=21,7\)

  • Interval 25.0 - 29.9 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {24,5+30,4}{2}=27,45\)

  • Interval 30.0 - 34.9 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {29,5+35,4}{2}=32,45\)

  • Interval 35.0 - 39.9 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {34,5+40,4}{2}=37,45\)

  • Interval 40.0 - 44.9 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {39,5+45,4}{2}=42,45\)

Interval IMT (kg/m²) Frekuensi (f) Nilai Tengah (xᵢ)
15.0 - 18.4 10 16.7
18.5 - 24.9 60 21.7
25.0 - 29.9 50 27.45
30.0 - 34.9 40 32.45
35.0 - 39.9 30 37.45
40.0 - 44.9 5 42.45
  1. Mengkalikan frekuensi dengan nilai tengah (\(f \cdot x_i\))
  • Interval 15.0 - 18.4 : \(f \cdot x_i= 10 \cdot 16,7= 167\)

  • Interval 18.5 - 24.9 : \(f \cdot x_i= 60 \cdot 21,7= 1302\)

  • Interval 25.0 - 29.9 : \(f \cdot x_i= 50 \cdot 27,45= 1372,5\)

  • Interval 30.0 - 34.9 : \(f \cdot x_i= 40 \cdot 32,45= 1298\)

  • Interval 35.0 - 39.9 : \(f \cdot x_i= 30 \cdot 37,45= 1123,5\)

  • Interval 40.0 - 44.9 : \(f \cdot x_i= 5 \cdot 42,45= 212,25\)

Interval IMT (kg/m²) Frekuensi (f) Nilai Tengah (xᵢ) \(f \cdot x_i\)
15.0 - 18.4 10 16.7 167
18.5 - 24.9 60 21.7 1302
25.0 - 29.9 50 27.45 1372.5
30.0 - 34.9 40 32.45 1298
35.0 - 39.9 30 37.45 1123.5
40.0 - 44.9 5 42.45 212.25
  1. Menghitung jumlah total dari perkalian frekuensi dengan nilai tengah (\(∑f \cdot x_i\)) \[∑f \cdot x_i=167+1302+1372,5+1298+1123,5+212,25=5475,25\]

  2. Menghitung jumlah total frekuensi (∑f) \[∑f=10+60+50+40+30+5=195\]

  3. Memasukkan ke dalam rumus \[\bar{X} = \frac {∑f \cdot x_i}{∑f}= \frac {5475,25}{195}=28,08\]

2.2.2 Mean tanpa Outlier

1.Menentukan nilai tengah (\(x_i\))

  • Interval 15.0 - 18.4 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {14,5+18,9}{2}=16,7\)

  • Interval 18.5 - 24.9 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {18+25,4}{2}=21,7\)

  • Interval 25.0 - 29.9 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {24,5+30,4}{2}=27,45\)

  • Interval 30.0 - 34.9 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {29,5+35,4}{2}=32,45\)

  • Interval 35.0 - 39.9 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {34,5+40,4}{2}=37,45\)

Interval IMT (kg/m²) Frekuensi (f) Nilai Tengah (xᵢ)
15.0 - 18.4 10 16.7
18.5 - 24.9 60 21.7
25.0 - 29.9 50 27.45
30.0 - 34.9 40 32.45
35.0 - 39.9 30 37.45
  1. Mengkalikan frekuensi dengan nilai tengah (\(f \cdot x_i\))
  • Interval 15.0 - 18.4 : \(f \cdot x_i= 10 \cdot 16,7= 167\)

  • Interval 18.5 - 24.9 : \(f \cdot x_i= 60 \cdot 21,7= 1302\)

  • Interval 25.0 - 29.9 : \(f \cdot x_i= 50 \cdot 27,45= 1372,5\)

  • Interval 30.0 - 34.9 : \(f \cdot x_i= 40 \cdot 32,45= 1298\)

  • Interval 35.0 - 39.9 : \(f \cdot x_i= 30 \cdot 37,45= 1123,5\)

Interval IMT (kg/m²) Frekuensi (f) Nilai Tengah (xᵢ) \(f \cdot x_i\)
15.0 - 18.4 10 16.7 167
18.5 - 24.9 60 21.7 1302
25.0 - 29.9 50 27.45 1372.5
30.0 - 34.9 40 32.45 1298
35.0 - 39.9 30 37.45 1123.5
  1. Menghitung jumlah total dari perkalian frekuensi dengan nilai tengah (\(∑f \cdot x_i\)) \[∑f \cdot x_i=167+1302+1372,5+1298+1123,5=5263\]

  2. Menghitung jumlah total frekuensi (∑f) \[∑f=10+60+50+40+30=190\]

  3. Memasukkan ke dalam rumus \[\bar{X} = \frac {∑f \cdot x_i}{∑f}= \frac {5263}{190}=27,7\]

2.2.3 Median dengan Outlier

  1. Menghitung jumlah total frekuensi (∑f) \[∑f=10+60+50+40+30+5=195\]

  2. Membagi jumlah total frekuensi dengan 2. \[ \frac {∑f}{2} = \frac {195}{2} = 97,5\]

  3. Menentukan frekuensi kumulatif

Interval IMT (kg/m²) Frekuensi (\(f\)) Frekuensi Kumulatif
15.0 - 18.4 10 10
18.5 - 24.9 60 70
25.0 - 29.9 50 120
30.0 - 34.9 40 160
35.0 - 39.9 30 190
40.0 - 44.9 5 195
  1. Menentukan kelas median

Kelas median adalah 25.0 - 29.9 (frekuensi kumulatif sebelum kelas ini adalah 70, dan kumulatif kelas ini mencapai 120).

  1. Menentukan frekuensi kumulatif sebelum kelas median. \[f_k= 70\]

  2. Menentukan frekuensi kelas median. \[f_m= 50\]

  3. Menentukan panjang interval kelas. \[p= 5\]

  4. Menentukan tepi bawah kelas median. \[T_b = 24,5\]

  5. Memasukkan ke dalam rumus. \[ M_e = T_b + \frac {\frac{∑f}{2}-f_k}{f_m} \cdot p = 24,5 + \frac {97,5-70}{50} \cdot 5 = 27,25 \]

2.2.4 Median tanpa Outlier

  1. Menghitung jumlah total frekuensi (∑f) \[∑f=10+60+50+40+30=190\]

  2. Membagi jumlah total frekuensi dengan 2. \[ \frac {∑f}{2} = \frac {190}{2} = 95\]

  3. Menentukan frekuensi kumulatif

Interval IMT (kg/m²) Frekuensi (\(f\)) Frekuensi Kumulatif
15.0 - 18.4 10 10
18.5 - 24.9 60 70
25.0 - 29.9 50 120
30.0 - 34.9 40 160
35.0 - 39.9 30 190
  1. Menentukan kelas median

Kelas median adalah 25.0 - 29.9 (frekuensi kumulatif sebelum kelas ini adalah 70, dan kumulatif kelas ini mencapai 120).

  1. Menentukan frekuensi kumulatif sebelum kelas median. \[f_k= 70\]

  2. Menentukan frekuensi kelas median. \[f_m= 50\]

  3. Menentukan panjang interval kelas. \[p= 5\]

  4. Menentukan tepi bawah kelas median. \[T_b = 24,5\]

  5. Memasukkan ke dalam rumus. \[ M_e = T_b + \frac {\frac{∑f}{2}-f_k}{f_m} \cdot p = 24,5 + \frac {95-70}{50} \cdot 5 = 27 \]

2.2.5 Modus dengan Outlier

  1. Mengidentifikasi kelas modus

Kelas modus adalah 18.5 - 24.9 karena memiliki frekuensi tertinggi yaitu 60

  1. Menentukan tepi bawah kelas modus \[ T_b = 18 \]

  2. Menentukan \(d_1\) \[ d_1 = 60-10 = 50\]

  3. Menentukan \(d_2\) \[ d_2 = 60-50 = 10\]

  4. Mentukan panjang interval kelas \[p= 5\]

  5. Memasukkan ke dalam rumus \[ M_o = T_b + \frac {d_1} {d_1+d_2} \cdot p= 18 + \frac {50}{50+10} \cdot 5 = 22,17 \]

2.2.6 Modus tanpa Outlier

  1. Mengidentifikasi kelas modus

Kelas modus adalah 18.5 - 24.9 karena memiliki frekuensi tertinggi yaitu 60

  1. Menentukan tepi bawah kelas modus \[ T_b = 18 \]

  2. Menentukan \(d_1\) \[ d_1 = 60-10 = 50\]

  3. Menentukan \(d_2\) \[ d_2 = 60-50 = 10\]

  4. Mentukan panjang interval kelas \[p= 5\]

  5. Memasukkan ke dalam rumus \[ M_o = T_b + \frac {d_1} {d_1+d_2} \cdot p= 18 + \frac {50}{50+10} \cdot 5 = 22,17 \]

2.2.7 Visualisasi dengan Boxplot

2.2.8 Visualisasi dengan Histogram

2.2.9 Analisis

Mean (Rata-rata)

Mean dengan Outlier: 28,08

Mean tanpa Outlier: 27,7

Interpretasi:

Nilai mean memberikan gambaran tentang nilai rata-rata IMT pada populasi yang diteliti. Perbedaan antara mean dengan outlier (28,08) dan mean tanpa outlier (27,7) menunjukkan bahwa kehadiran interval IMT yang sangat tinggi (40.0 - 44.9 dengan frekuensi 5) berpengaruh sedikit terhadap rata-rata keseluruhan, tetapi cukup untuk menaikkan nilai rata-rata tersebut. Ini berarti bahwa meskipun sebagian besar individu memiliki IMT yang lebih rendah, beberapa individu yang memiliki IMT sangat tinggi (obesitas morbid) menarik rata-rata IMT lebih tinggi.

Pengaruh terhadap Kasus:

Jika kita hanya melihat mean tanpa outlier (27,7), rata-rata IMT populasi lebih realistis dan menunjukkan bahwa secara umum, populasi ini cenderung berada pada kategori overweight (kelebihan berat badan). Artinya, meskipun banyak individu dalam kategori normal (IMT 18.5 - 24.9), ada juga kelompok yang cukup besar yang berada pada overweight, yang menandakan adanya risiko terhadap masalah kesehatan terkait obesitas.

Median

Median dengan Outlier: 27,25

Median tanpa Outlier: 27

Interpretasi:

Median memberikan nilai tengah yang membagi data menjadi dua bagian yang sama. Median dengan outlier (27,25) dan median tanpa outlier (27) sangat mirip, yang menunjukkan bahwa posisi nilai tengah data tidak banyak terpengaruh oleh data ekstrem pada interval IMT yang sangat tinggi (40.0 - 44.9). Artinya, median memberikan gambaran yang lebih stabil dan tidak terpengaruh oleh nilai ekstrem, serta mencerminkan bahwa sebagian besar individu dalam populasi memiliki IMT di sekitar 27, yang berada pada kategori overweight (kelebihan berat badan).

Pengaruh terhadap Kasus:

Nilai median yang dekat dengan 27 menunjukkan bahwa sebagian besar individu dalam populasi memiliki IMT yang lebih tinggi daripada kategori normal (18.5 - 24.9) tetapi tidak mencapai level obesitas berat. Ini mengindikasikan bahwa ada kecenderungan populasi untuk memiliki berat badan lebih dari yang disarankan untuk kesehatan, dengan lebih banyak individu di kategori overweight.

Modus

Modus dengan Outlier: 22,17

Modus tanpa Outlier: 22,17

Interpretasi:

Modus adalah nilai yang paling sering muncul dalam data, yaitu interval dengan frekuensi tertinggi. Dalam kasus ini, interval 18.5 - 24.9 (Normal) memiliki frekuensi tertinggi yaitu 60 individu, yang menunjukkan bahwa sebagian besar individu dalam populasi ini memiliki IMT dalam rentang yang dianggap sehat (normal). Baik dengan atau tanpa outlier, moda tetap berada pada interval ini, yang memperkuat kesimpulan bahwa mayoritas individu berada dalam kategori IMT yang sehat.

Pengaruh terhadap Kasus:

Modus yang berada pada nilai 22,17 menegaskan bahwa meskipun ada kelompok individu yang mengalami kelebihan berat badan atau obesitas, kelompok normal (IMT 18.5 - 24.9) adalah kelompok yang paling dominan. Ini menunjukkan bahwa meskipun ada permasalahan obesitas dalam populasi, sebagian besar individu memiliki IMT yang sehat.

2.3 Pendidikan

Sebuah sekolah melakukan survei untuk mengetahui berapa lama waktu yang dihabiskan siswa untuk belajar sebelum ujian akhir. Waktu belajar ini dikelompokkan dalam interval waktu tertentu. Data rentang waktu belajar siswa dalam satuan jam dengan jumlah siswa sebagai frekuensi adalah seperti berikut:

Rentang Waktu Belajar (Jam) Jumlah Siswa (f)
0 - 1 3
1 - 2 8
2 - 3 12
3 - 4 20
4 - 5 10
5 - 6 2
6 - 7 1

Rentang waktu 5-6 jam dan 6-7 jam dianggap outlier. Hal ini terjadi karena jumlah siswa pada rentang waktu ini sangat kecil dibandingkan dengan rentang waktu lainnya yang memiliki lebih banyak siswa serta distribusi waktu belajar siswa cenderung lebih terkonsentrasi di sekitar waktu yang lebih rendah, dan rentang waktu yang lebih panjang memiliki sedikit siswa, menunjukkan penyimpangan yang signifikan.

Rentang Waktu Belajar (Jam) Jumlah Siswa (f)
0 - 1 3
1 - 2 8
2 - 3 12
3 - 4 20
4 - 5 10

2.3.1 Mean dengan Outlier

1.Menentukan nilai tengah (\(x_i\))

  • Interval 0 - 1 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {-0,5+1,5}{2}=0,5\)

  • Interval 1 - 2 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {0,5+2,5}{2}=1,5\)

  • Interval 2 - 3 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {1,5+3,5}{2}=2,5\)

  • Interval 3 - 4 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {2,5+4,5}{2}=3,5\)

  • Interval 4 - 5 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {3,5+5,5}{2}=4,5\)

  • Interval 5 - 6 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {4,5+6,5}{2}=5,5\)

  • Interval 6 - 7 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {5,5+7,5}{2}=6,5\)

Rentang Waktu Belajar (Jam) Jumlah Siswa (\(f\)) Nilai Tengah (\(x_i\))
0 - 1 3 0.5
1 - 2 8 1.5
2 - 3 12 2.5
3 - 4 20 3.5
4 - 5 10 4.5
5 - 6 2 5.5
6 - 7 1 6.5
  1. Mengkalikan frekuensi dengan nilai tengah (\(f \cdot x_i\))
  • Interval 0 - 1 : \(f \cdot x_i= 3 \cdot 0,5= 1,5\)

  • Interval 1 - 2 : \(f \cdot x_i= 8 \cdot 1,5= 12\)

  • Interval 2 - 3 : \(f \cdot x_i= 12 \cdot 2,5= 30\)

  • Interval 3 - 4 : \(f \cdot x_i= 20 \cdot 3,5= 70\)

  • Interval 4 - 5 : \(f \cdot x_i= 10 \cdot 4,5= 45\)

  • Interval 5 - 6 : \(f \cdot x_i= 2 \cdot 5,5= 11\)

  • Interval 6 - 7 : \(f \cdot x_i= 1 \cdot 6,5= 6,5\)

Rentang Waktu Belajar (Jam) Jumlah Siswa (\(f\)) Nilai Tengah (\(x_i\)) \(f \cdot x_i\)
0 - 1 3 0.5 1.5
1 - 2 8 1.5 12
2 - 3 12 2.5 30
3 - 4 20 3.5 70
4 - 5 10 4.5 45
5 - 6 2 5.5 11
6 - 7 1 6.5 6.5
  1. Menghitung jumlah total dari perkalian frekuensi dengan nilai tengah (\(∑f \cdot x_i\)) \[∑f \cdot x_i=1,5+12+30+70+45+11+6,5=176\]

  2. Menghitung jumlah total frekuensi (∑f) \[∑f=3+8+12+20+10+2+1=56\]

  3. Memasukkan ke dalam rumus \[\bar{X} = \frac {∑f \cdot x_i}{∑f}= \frac {176}{56}=3,14\]

2.3.2 Mean tanpa Outlier

1.Menentukan nilai tengah (\(x_i\))

  • Interval 0 - 1 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {-0,5+1,5}{2}=0,5\)

  • Interval 1 - 2 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {0,5+2,5}{2}=1,5\)

  • Interval 2 - 3 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {1,5+3,5}{2}=2,5\)

  • Interval 3 - 4 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {2,5+4,5}{2}=3,5\)

  • Interval 4 - 5 : \(x = \frac {tepi~bawah~kelas~+~tepi~atas~kelas}{2}= \frac {3,5+5,5}{2}=4,5\)

Rentang Waktu Belajar (Jam) Jumlah Siswa (\(f\)) Nilai Tengah (\(x_i\))
0 - 1 3 0.5
1 - 2 8 1.5
2 - 3 12 2.5
3 - 4 20 3.5
4 - 5 10 4.5
  1. Mengkalikan frekuensi dengan nilai tengah (\(f \cdot x_i\))
  • Interval 0 - 1 : \(f \cdot x_i= 3 \cdot 0,5= 1,5\)

  • Interval 1 - 2 : \(f \cdot x_i= 8 \cdot 1,5= 12\)

  • Interval 2 - 3 : \(f \cdot x_i= 12 \cdot 2,5= 30\)

  • Interval 3 - 4 : \(f \cdot x_i= 20 \cdot 3,5= 70\)

  • Interval 4 - 5 : \(f \cdot x_i= 10 \cdot 4,5= 45\)

Rentang Waktu Belajar (Jam) Jumlah Siswa (\(f\)) Nilai Tengah (\(x_i\)) \(f \cdot x_i\)
0 - 1 3 0.5 1.5
1 - 2 8 1.5 12
2 - 3 12 2.5 30
3 - 4 20 3.5 70
4 - 5 10 4.5 45
  1. Menghitung jumlah total dari perkalian frekuensi dengan nilai tengah (\(∑f \cdot x_i\)) \[∑f \cdot x_i=1,5+12+30+70+45=158,5\]

  2. Menghitung jumlah total frekuensi (∑f) \[∑f=3+8+12+20+10=53\]

  3. Memasukkan ke dalam rumus \[\bar{X} = \frac {∑f \cdot x_i}{∑f}= \frac {158,5}{53}=2,99\]

2.3.3 Median dengan Outlier

  1. Menghitung jumlah total frekuensi (∑f) \[∑f=3+8+12+20+10+2+1=56\]

  2. Membagi jumlah total frekuensi dengan 2. \[ \frac {∑f}{2} = \frac {56}{2} = 28\]

  3. Menentukan frekuensi kumulatif

Rentang Waktu Belajar (Jam) Jumlah Siswa (\(f\)) Frekuensi Kumulatif
0 - 1 3 3
1 - 2 8 11
2 - 3 12 23
3 - 4 20 43
4 - 5 10 53
5 - 6 2 55
6 - 7 1 56
  1. Menentukan kelas median

Kelas median adalah 3 - 4 (frekuensi kumulatif sebelum kelas ini adalah 23, dan kumulatif kelas ini mencapai 43).

  1. Menentukan frekuensi kumulatif sebelum kelas median. \[f_k= 23\]

  2. Menentukan frekuensi kelas median. \[f_m= 20\]

  3. Menentukan panjang interval kelas. \[p= 1\]

  4. Menentukan tepi bawah kelas median. \[T_b = 2,5\]

  5. Memasukkan ke dalam rumus. \[ M_e = T_b + \frac {\frac{∑f}{2}-f_k}{f_m} \cdot p = 2,5 + \frac {28-23}{20} \cdot 1 = 2,75 \]

2.3.4 Median tanpa Outlier

  1. Menghitung jumlah total frekuensi (∑f) \[∑f=3+8+12+20+10=53\]

  2. Membagi jumlah total frekuensi dengan 2. \[ \frac {∑f}{2} = \frac {53}{2} = 26,5\]

  3. Menentukan frekuensi kumulatif

Rentang Waktu Belajar (Jam) Jumlah Siswa (\(f\)) Frekuensi Kumulatif
0 - 1 3 3
1 - 2 8 11
2 - 3 12 23
3 - 4 20 43
4 - 5 10 53
  1. Menentukan kelas median

Kelas median adalah 3 - 4 (frekuensi kumulatif sebelum kelas ini adalah 23, dan kumulatif kelas ini mencapai 43).

  1. Menentukan frekuensi kumulatif sebelum kelas median. \[f_k= 23\]

  2. Menentukan frekuensi kelas median. \[f_m= 20\]

  3. Menentukan panjang interval kelas. \[p= 1\]

  4. Menentukan tepi bawah kelas median. \[T_b = 2,5\]

  5. Memasukkan ke dalam rumus. \[ M_e = T_b + \frac {\frac{∑f}{2}-f_k}{f_m} \cdot p = 2,5 + \frac {26,5-23}{20} \cdot 1 = 2,675 \]

2.3.5 Modus dengan Outlier

  1. Mengidentifikasi kelas modus

Kelas modus adalah 3 - 4 karena memiliki frekuensi tertinggi yaitu 20

  1. Menentukan tepi bawah kelas modus \[ T_b = 2,5 \]

  2. Menentukan \(d_1\) \[ d_1 = 20-12 = 8\]

  3. Menentukan \(d_2\) \[ d_2 = 20-10 = 10\]

  4. Mentukan panjang interval kelas \[p= 1\]

  5. Memasukkan ke dalam rumus \[ M_o = T_b + \frac {d_1} {d_1+d_2} \cdot p= 2,5 + \frac {8}{8+10} \cdot 1 = 2,95 \]

2.3.6 Modus tanpa Outlier

  1. Mengidentifikasi kelas modus

Kelas modus adalah 3 - 4 karena memiliki frekuensi tertinggi yaitu 20

  1. Menentukan tepi bawah kelas modus \[ T_b = 2,5 \]

  2. Menentukan \(d_1\) \[ d_1 = 20-12 = 8\]

  3. Menentukan \(d_2\) \[ d_2 = 20-10 = 10\]

  4. Mentukan panjang interval kelas \[p= 1\]

  5. Memasukkan ke dalam rumus \[ M_o = T_b + \frac {d_1} {d_1+d_2} \cdot p= 2,5 + \frac {8}{8+10} \cdot 1 = 2,95 \]

2.3.7 Visualisasi dengan Boxplot

2.3.8 Visualisasi dengan Histogram

2.3.9 Analisis

Mean (Rata-rata)

Mean dengan Outlier: 3,14

Mean tanpa Outlier: 2,99

Interpretasi:

Nilai mean memberikan gambaran tentang waktu belajar rata-rata yang dihabiskan oleh siswa. Perbedaan antara mean dengan outlier (3,14 jam) dan mean tanpa outlier (2,99 jam) menunjukkan bahwa adanya beberapa siswa yang menghabiskan waktu belajar sangat lama (misalnya 5-7 jam) menyebabkan rata-rata keseluruhan menjadi lebih tinggi. Meskipun sebagian besar siswa belajar dalam rentang waktu yang lebih pendek, kehadiran siswa yang belajar dalam waktu lama menarik rata-rata waktu belajar ke angka yang lebih tinggi.

Pengaruh terhadap Kasus:

Jika hanya melihat mean tanpa outlier (2,99 jam), rata-rata waktu belajar siswa lebih realistis dan mencerminkan kebiasaan belajar mayoritas siswa, yang menghabiskan waktu kurang dari 3 jam. Artinya, meskipun ada beberapa siswa yang belajar dalam waktu lama, mayoritas siswa lebih memilih untuk belajar dalam waktu yang lebih singkat.

Median

Median dengan Outlier: 2,75

Median tanpa Outlier: 2,675

Interpretasi:

Median memberikan nilai tengah dari data yang terurut, membagi data menjadi dua bagian yang sama. Median dengan outlier (2,75 jam) dan median tanpa outlier (2,675 jam) menunjukkan nilai yang hampir sama, yang menunjukkan bahwa posisi nilai tengah tidak banyak dipengaruhi oleh data ekstrim (outlier). Median tetap memberikan gambaran yang stabil tentang kebiasaan waktu belajar siswa, tanpa terpengaruh oleh siswa yang menghabiskan waktu belajar jauh lebih lama.

Pengaruh terhadap Kasus:

Nilai median yang mendekati 2,7 menunjukkan bahwa sebagian besar siswa menghabiskan waktu belajar dalam rentang 0-3 jam. Ini menegaskan bahwa mayoritas siswa belajar dengan durasi yang cukup moderat, tanpa terpengaruh oleh siswa yang menghabiskan waktu belajar secara ekstrem.

Modus

Modus dengan Outlier: 2,95

Modus tanpa Outlier: 2,95

Interpretasi:

Modus adalah nilai yang paling sering muncul dalam data. Dalam kasus ini, rentang waktu belajar 3-4 jam memiliki frekuensi tertinggi, yaitu lebih banyak siswa yang menghabiskan waktu belajar pada rentang ini. Baik dengan atau tanpa outlier, modus tetap berada pada rentang 3-4 jam, yang menunjukkan bahwa sebagian besar siswa cenderung belajar dalam waktu tersebut.

Pengaruh terhadap Kasus:

Modus yang berada pada nilai 2,95 jam menunjukkan bahwa mayoritas siswa menghabiskan waktu belajar antara 3-4 jam. Ini mengindikasikan bahwa rentang waktu ini adalah pilihan yang paling umum di antara siswa, meskipun ada variasi waktu belajar yang lebih lama atau lebih singkat pada beberapa siswa.

LS0tDQp0aXRsZTogIlByYWt0aWt1bSBVa3VyYW4gUGVtdXNhdGFuIERhdGEiDQpzdWJ0aXRsZTogIlN0YXRpc3Rpa2EgRGFzYXIiDQphdXRob3I6ICJJc25haW5pIE51ciBIYXNhbmFoICg1MjI0MDAwNSkiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZSAoMSkuY3NzIg0KLS0tDQoNCg0KIyBQcmFrdGlrdW0gMQ0KDQojIyBNZWFuIHVudHVrIERhdGEgS2Vsb21wb2sNCg0KTWVhbiB1bnR1ayBkYXRhIGtlbG9tcG9rIG1lcnVwYWthbiByZXByZXNlbnRhc2kgbmlsYWkgeWFuZyB0ZXJkYXBhdCBwYWRhIHN1YXR1IGRhdGEgeWFuZyBkaXNhamlrYW4gZGFsYW0gIGJlbnR1ayBrZWxvbXBvay4gRGFsYW0gYmVudHVrIGluaSwgbmlsYWkgbWVhbiBkaXBlcm9sZWggZGFyaSBoYXNpbCBiYWdpIGFudGFyYSBwZXJrYWxpYW4gZnJla3VlbnNpIHNldGlhcCBrZWxhcyBkYW4gbmlsYWkgdGVuZ2FoIHBhZGEgc2V0aWFwIGtlbGFzIGRlbmdhbiBqdW1sYWggZnJla3VlbnNpLg0KDQpNZWFuIHVudHVrIGRhdGEga2Vsb21wb2sgbWVtaWxpa2kgcnVtdXMgc2ViYWdhaSBiZXJpa3V0Og0KJCQNClxiYXJ7WH0gPSBcZnJhYyB74oiRZiBcY2RvdCB4X2l9e+KIkWZ9DQokJA0KS2V0ZXJhbmdhbjoNCiQkDQpcYmFye1h9ID0gTmlsYWl+bWVhbn4ocmF0YS1yYXRhKX51bnR1a35kYXRhfmtlbG9tcG9rXFwNCuKIkWYgPSAgSnVtbGFofnRvdGFsfmZyZWt1ZW5zaVxcDQp4X2kgPSAgTmlsYWl+dGVuZ2Fofih4X2kpfmRhcml+a2VsYXN+aW50ZXJ2YWwsfmRpaGl0dW5nfmRlbmdhbn5ydW11czoNCiQkDQoNCg0KJCQNCnhfaSA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfQ0KJCQNCkxhbmdrYWgtbGFuZ2thaCB1bnR1ayBtZW5naGl0dW5nIG1lYW4gdW50dWsgZGF0YSBrZWxvbXBvaywgeWFpdHU6DQoNCjEuIE1lbmVudHVrYW4gdGVwaSBiYXdhaCBkYW4gdGVwaSBhdGFzIGtlbGFzIGxhbHUgbWVuZ2hpdHVuZyBuaWxhaSB0ZW5nYWggZGVuZ2FuIG1lbmp1bWxhaGthbiB0ZXBpIGJhd2FoIGRhbiB0ZXBpIGF0YXMga2VsYXMgc2V0ZWxhaCBpdHUgZGliYWdpIGRlbmdhbiAyLg0KDQoyLiBNZW5na2FsaWthbiBmcmVrdWVuc2kgZGVuZ2FuIG5pbGFpIHRlbmdhaCAoJGYgXGNkb3QgeF9pJCkNCg0KMy4gTWVuZ2hpdHVuZyBqdW1sYWggdG90YWwgZGFyaSBwZXJrYWxpYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggKCTiiJFmIFxjZG90IHhfaSQpDQoNCjQuIE1lbmdoaXR1bmcganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSAo4oiRZik6IGRlbmdhbiBjYXJhIG1lbmp1bWxhaGthbiBzZW11YSBmcmVrdWVuc2kgeWFuZyBhZGEuDQoNCjUuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMgbGFsdSBtZW5naGl0dW5nIHNlY2FyYSBtYXRlbWF0aWNhbC4NCg0KIyMjIENvbnRvaA0KQmVyaWt1dCBhZGFsYWggZGF0YSBuaWxhaSB1amlhbiBTdGF0aXN0aWthIERhc2FyIGRhcmkgMzAgbWFoYXNpc3dhIFNhaW5zIERhdGEuDQoNCnwgIE5pbGFpIHwgRnJla3VlbnNpIChmKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfA0KfCAzMCAtIDM5ICAgICAgICAgfCAxICAgICAgICAgICAgIHwNCnwgNDAgLSA0OSAgICAgICAgIHwgNCAgICAgICAgICAgICB8DQp8IDUwIC0gNTkgICAgICAgICB8IDUgICAgICAgICAgICAgfA0KfCA2MCAtIDY5ICAgICAgICAgfCA3ICAgICAgICAgICAgIHwNCnwgNzAgLSA3OSAgICAgICAgIHwgNiAgICAgICAgICAgICB8DQp8IDgwIC0gODkgICAgICAgICB8IDMgICAgICAgICAgICAgfA0KfCA5MCAtIDk5ICAgICAgICAgfCA0ICAgICAgICAgICAgIHwNCg0KIyMjIyBNZWFuIGRlbmdhbiBPdXRsaWVyDQoNCjEuTWVuZW50dWthbiBuaWxhaSB0ZW5nYWggKCR4JCkNCg0KKiBJbnRlcnZhbCAzMCAtIDM5IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHsyOSw1KzM5LDV9ezJ9PTM0LDUkDQoNCiogSW50ZXJ2YWwgNDAgLSA0OSA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7MzksNSs0OSw1fXsyfT00NCw1JA0KDQoqIEludGVydmFsIDUwIC0gNTkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezQ5LDUrNTksNX17Mn09NTQsNSQNCg0KKiBJbnRlcnZhbCA2MCAtIDY5IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHs1OSw1KzY5LDV9ezJ9PTY0LDUkDQoNCiogSW50ZXJ2YWwgNzAgLSA3OSA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7NjksNSs3OSw1fXsyfT03NCw1JA0KDQoqIEludGVydmFsIDgwIC0gODkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezc5LDUrODksNX17Mn09ODQsNSQNCg0KKiBJbnRlcnZhbCA5MCAtIDk5IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHs4OSw1Kzk5LDV9ezJ9PTk0LDUkDQoNCnwgIE5pbGFpIHwgRnJla3VlbnNpIChcKGZcKSkgfCBOaWxhaSBUZW5nYWggKFwoeF9pXCkpIHwNCnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgMzAgLSAzOSAgICAgICAgIHwgMSAgICAgICAgICAgICAgICAgfCAzNC41ICAgICAgICAgICAgICAgICAgIHwNCnwgNDAgLSA0OSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgfCA0NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgNTAgLSA1OSAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgfCA1NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgNjAgLSA2OSAgICAgICAgIHwgNyAgICAgICAgICAgICAgICAgfCA2NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgNzAgLSA3OSAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgfCA3NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgODAgLSA4OSAgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgfCA4NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgOTAgLSA5OSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgfCA5NC41ICAgICAgICAgICAgICAgICAgIHwNCg0KMi4gTWVuZ2thbGlrYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggKCRmIFxjZG90IHhfaSQpDQoNCiogSW50ZXJ2YWwgMzAgLSAzOSA6ICRmIFxjZG90IHhfaT0gMSBcY2RvdCAzNCw1PSAzNCw1JA0KDQoqIEludGVydmFsIDQwIC0gNDkgOiAkZiBcY2RvdCB4X2k9IDQgXGNkb3QgNDQsNT0gMTc4JA0KDQoqIEludGVydmFsIDUwIC0gNTkgOiAkZiBcY2RvdCB4X2k9IDUgXGNkb3QgNTQsNT0gMjcyLDUkDQoNCiogSW50ZXJ2YWwgNjAgLSA2OSA6ICRmIFxjZG90IHhfaT0gNyBcY2RvdCA2NCw1PSA0NTEsNSQNCg0KKiBJbnRlcnZhbCA3MCAtIDc5IDogJGYgXGNkb3QgeF9pPSA2IFxjZG90IDc0LDU9IDQ0NyQNCg0KKiBJbnRlcnZhbCA4MCAtIDg5IDogJGYgXGNkb3QgeF9pPSAzIFxjZG90IDg0LDU9IDI1Myw1JA0KDQoqIEludGVydmFsIDkwIC0gOTkgOiAkZiBcY2RvdCB4X2k9IDQgXGNkb3QgOTQsNT0gMzc4JA0KDQoNCnwgIE5pbGFpIHwgRnJla3VlbnNpIChcKGZcKSkgfCBOaWxhaSBUZW5nYWggKFwoeF9pXCkpIHwgXCggZiBcY2RvdCB4X2kgXCkgfA0KfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDMwIC0gMzkgICAgICAgICB8IDEgICAgICAgICAgICAgICAgIHwgMzQuNSAgICAgICAgICAgICAgICAgICB8IDM0LjUgICAgICAgICAgICAgIHwNCnwgNDAgLSA0OSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgfCA0NC41ICAgICAgICAgICAgICAgICAgIHwgMTc4ICAgICAgICAgICAgICAgfA0KfCA1MCAtIDU5ICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICB8IDU0LjUgICAgICAgICAgICAgICAgICAgfCAyNzIuNSAgICAgICAgICAgICB8DQp8IDYwIC0gNjkgICAgICAgICB8IDcgICAgICAgICAgICAgICAgIHwgNjQuNSAgICAgICAgICAgICAgICAgICB8IDQ1MS41ICAgICAgICAgICAgIHwNCnwgNzAgLSA3OSAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgfCA3NC41ICAgICAgICAgICAgICAgICAgIHwgNDQ3ICAgICAgICAgICAgICAgfA0KfCA4MCAtIDg5ICAgICAgICAgfCAzICAgICAgICAgICAgICAgICB8IDg0LjUgICAgICAgICAgICAgICAgICAgfCAyNTMuNSAgICAgICAgICAgICB8DQp8IDkwIC0gOTkgICAgICAgICB8IDQgICAgICAgICAgICAgICAgIHwgOTQuNSAgICAgICAgICAgICAgICAgICB8IDM3OCAgICAgICAgICAgICAgIHwNCg0KMy4gTWVuZ2hpdHVuZyBqdW1sYWggdG90YWwgZGFyaSBwZXJrYWxpYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggKCTiiJFmIFxjZG90IHhfaSQpDQokJOKIkWYgXGNkb3QgeF9pPTM0LDUrMTc4KzI3Miw1KzQ1MSw1KzQ0NysyNTMsNSszNzg9MjAxNSQkDQo0LiBNZW5naGl0dW5nIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgKOKIkWYpDQokJOKIkWY9MSs0KzUrNys2KzMrND0zMCQkDQoNCjUuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMNCiQkXGJhcntYfSA9IFxmcmFjIHviiJFmIFxjZG90IHhfaX174oiRZn09IFxmcmFjIHsyMDE1fXszMH09NjcsMTckJA0KDQojIyMjIE1lYW4gdGFucGEgT3V0bGllcg0KDQpNZW5nYW5nZ2FwIGludGVydmFsIGtlbGFzIDMwIC0gMzkgc2ViYWdhaSBvdXRsaWVyIGRhbGFtIGFuYWxpc2lzIGRhdGEga2Vsb21wb2sgZGFwYXQgZGlwZXJ0aW1iYW5na2FuIGthcmVuYSBmcmVrdWVuc2lueWEgeWFuZyBzYW5nYXQgcmVuZGFoIChoYW55YSAxIG1haGFzaXN3YSkgZGliYW5kaW5na2FuIGRlbmdhbiBrZWxhcyBsYWlubnlhLCBzZXJ0YSBkaXN0cmlidXNpIGRhdGEgeWFuZyBsZWJpaCB0ZXJrb25zZW50cmFzaSBwYWRhIG5pbGFpIHlhbmcgbGViaWggdGluZ2dpIHNlcGVydGkgNjAgLSA2OSBkYW4gNzAgLSA3OS4gU2VsYWluIGl0dSwgcmVudGFuZyBuaWxhaSBrZWxhcyAzMCAtIDM5IHlhbmcgamF1aCBsZWJpaCByZW5kYWgganVnYSBkYXBhdCBkaWFuZ2dhcCBzZWJhZ2FpIGFub21hbGkgZGFsYW0ga29udGVrcyBkYXRhIHlhbmcgbGViaWggbHVhcy4gRGFsYW0gdmlzdWFsaXNhc2kgZGF0YSwga2VsYXMgaW5pIHRlcmxpaGF0IHRlcnBpc2FoIGRhcmkgcG9sYSBkaXN0cmlidXNpIHVtdW0sIHNlaGluZ2dhIGRhcGF0IGRpcGFuZGFuZyBzZWJhZ2FpIGRhdGEgeWFuZyB0aWRhayBzZXN1YWkgZGVuZ2FuIHBvbGEgbWF5b3JpdGFzLiBQZW5naGFwdXNhbiBrZWxhcyBpbmkganVnYSBkYXBhdCBtZW1iYW50dSB1bnR1ayBmb2t1cyBwYWRhIGtlbG9tcG9rIGRhdGEgeWFuZyBsZWJpaCByZWxldmFuIGRhbiBtZW1iZXJpa2FuIGdhbWJhcmFuIGRpc3RyaWJ1c2kgeWFuZyBsZWJpaCByZXByZXNlbnRhdGlmLg0KDQp8ICBOaWxhaSB8IEZyZWt1ZW5zaSAoXChmXCkpIHwNCnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCA0MCAtIDQ5ICAgICAgICAgfCA0ICAgICAgICAgICAgICAgICB8DQp8IDUwIC0gNTkgICAgICAgICB8IDUgICAgICAgICAgICAgICAgIHwNCnwgNjAgLSA2OSAgICAgICAgIHwgNyAgICAgICAgICAgICAgICAgfA0KfCA3MCAtIDc5ICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICB8DQp8IDgwIC0gODkgICAgICAgICB8IDMgICAgICAgICAgICAgICAgIHwNCnwgOTAgLSA5OSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgfA0KDQoxLk1lbmVudHVrYW4gbmlsYWkgdGVuZ2FoICgkeCQpDQoNCiogSW50ZXJ2YWwgNDAgLSA0OSA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7MzksNSs0OSw1fXsyfT00NCw1JA0KDQoqIEludGVydmFsIDUwIC0gNTkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezQ5LDUrNTksNX17Mn09NTQsNSQNCg0KKiBJbnRlcnZhbCA2MCAtIDY5IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHs1OSw1KzY5LDV9ezJ9PTY0LDUkDQoNCiogSW50ZXJ2YWwgNzAgLSA3OSA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7NjksNSs3OSw1fXsyfT03NCw1JA0KDQoqIEludGVydmFsIDgwIC0gODkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezc5LDUrODksNX17Mn09ODQsNSQNCg0KKiBJbnRlcnZhbCA5MCAtIDk5IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHs4OSw1Kzk5LDV9ezJ9PTk0LDUkDQoNCnwgIE5pbGFpIHwgRnJla3VlbnNpIChcKGZcKSkgfCBOaWxhaSBUZW5nYWggKFwoeF9pXCkpIHwNCnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgNDAgLSA0OSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgfCA0NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgNTAgLSA1OSAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgfCA1NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgNjAgLSA2OSAgICAgICAgIHwgNyAgICAgICAgICAgICAgICAgfCA2NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgNzAgLSA3OSAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgfCA3NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgODAgLSA4OSAgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgfCA4NC41ICAgICAgICAgICAgICAgICAgIHwNCnwgOTAgLSA5OSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgfCA5NC41ICAgICAgICAgICAgICAgICAgIHwNCg0KMi4gTWVuZ2thbGlrYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggKCRmIFxjZG90IHhfaSQpDQoNCiogSW50ZXJ2YWwgNDAgLSA0OSA6ICRmIFxjZG90IHhfaT0gNCBcY2RvdCA0NCw1PSAxNzgkDQoNCiogSW50ZXJ2YWwgNTAgLSA1OSA6ICRmIFxjZG90IHhfaT0gNSBcY2RvdCA1NCw1PSAyNzIsNSQNCg0KKiBJbnRlcnZhbCA2MCAtIDY5IDogJGYgXGNkb3QgeF9pPSA3IFxjZG90IDY0LDU9IDQ1MSw1JA0KDQoqIEludGVydmFsIDcwIC0gNzkgOiAkZiBcY2RvdCB4X2k9IDYgXGNkb3QgNzQsNT0gNDQ3JA0KDQoqIEludGVydmFsIDgwIC0gODkgOiAkZiBcY2RvdCB4X2k9IDMgXGNkb3QgODQsNT0gMjUzLDUkDQoNCiogSW50ZXJ2YWwgOTAgLSA5OSA6ICRmIFxjZG90IHhfaT0gNCBcY2RvdCA5NCw1PSAzNzgkDQoNCnwgSW50ZXJ2YWwgTmlsYWkgfCBGcmVrdWVuc2kgKFwoZlwpKSB8IE5pbGFpIFRlbmdhaCAoXCh4X2lcKSkgfCBcKCBmIFxjZG90IHhfaSBcKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgNDAgLSA0OSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgfCA0NC41ICAgICAgICAgICAgICAgICAgIHwgMTc4ICAgICAgICAgICAgICAgfA0KfCA1MCAtIDU5ICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICB8IDU0LjUgICAgICAgICAgICAgICAgICAgfCAyNzIuNSAgICAgICAgICAgICB8DQp8IDYwIC0gNjkgICAgICAgICB8IDcgICAgICAgICAgICAgICAgIHwgNjQuNSAgICAgICAgICAgICAgICAgICB8IDQ1MS41ICAgICAgICAgICAgIHwNCnwgNzAgLSA3OSAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgfCA3NC41ICAgICAgICAgICAgICAgICAgIHwgNDQ3ICAgICAgICAgICAgICAgfA0KfCA4MCAtIDg5ICAgICAgICAgfCAzICAgICAgICAgICAgICAgICB8IDg0LjUgICAgICAgICAgICAgICAgICAgfCAyNTMuNSAgICAgICAgICAgICB8DQp8IDkwIC0gOTkgICAgICAgICB8IDQgICAgICAgICAgICAgICAgIHwgOTQuNSAgICAgICAgICAgICAgICAgICB8IDM3OCAgICAgICAgICAgICAgIHwNCg0KMy4gTWVuZ2hpdHVuZyBqdW1sYWggdG90YWwgZGFyaSBwZXJrYWxpYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggKCTiiJFmIFxjZG90IHhfaSQpDQokJOKIkWYgXGNkb3QgeF9pPTE3OCsyNzIsNSs0NTEsNSs0NDcrMjUzLDUrMzc4PTE5ODAsNSQkDQoNCjQuIE1lbmdoaXR1bmcganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSAo4oiRZikNCiQk4oiRZj00KzUrNys2KzMrND0yOSQkDQoNCjUuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMNCiQkXGJhcntYfSA9IFxmcmFjIHviiJFmIFxjZG90IHhfaX174oiRZn09IFxmcmFjIHsxOTgwLDV9ezI5fT02OCwyOSQkDQoNCiMjIyMgTWVhbiBkZW5nYW4gQm94cGxvdA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCB9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIGtlbG9tcG9rIChpbnRlcnZhbCBuaWxhaSBkYW4gZnJla3VlbnNpKQ0KaW50ZXJ2YWwgPC0gYygiMzAgLSAzOSIsICI0MCAtIDQ5IiwgIjUwIC0gNTkiLCAiNjAgLSA2OSIsICI3MCAtIDc5IiwgIjgwIC0gODkiLCAiOTAgLSA5OSIpDQpmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIGMoMSwgNCwgNSwgNywgNiwgMywgNCkgICMgRGVuZ2FuIG91dGxpZXJzDQpmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMgPC0gYygwLCA0LCA1LCA3LCA2LCAzLCA0KSAgICMgVGFucGEgb3V0bGllcnMgKG1lbmdoYXB1cyBrZWxhcyAzMC0zOSkNCg0KIyBNZW5naGl0dW5nIG5pbGFpIHRlbmdhaCAoeF9pKSB1bnR1ayBzZXRpYXAgaW50ZXJ2YWwNCm5pbGFpX3RlbmdhaCA8LSBjKDM0LjUsIDQ0LjUsIDU0LjUsIDY0LjUsIDc0LjUsIDg0LjUsIDk0LjUpDQoNCiMgTWVuZ2hpdHVuZyB0b3RhbCBmcmVrdWVuc2kNCnRvdGFsX2ZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQp0b3RhbF9mcmVrdWVuc2lfdGFucGFfb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycykNCg0KIyBNZW5naGl0dW5nIE1lYW4gdW50dWsgZGVuZ2FuIGRhbiB0YW5wYSBvdXRsaWVycw0KbWVhbl9kZW5nYW5fb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMgKiBuaWxhaV90ZW5nYWgpIC8gdG90YWxfZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycw0KbWVhbl90YW5wYV9vdXRsaWVycyA8LSBzdW0oZnJla3VlbnNpX3RhbnBhX291dGxpZXJzICogbmlsYWlfdGVuZ2FoKSAvIHRvdGFsX2ZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycw0KDQojIE1lbmdnYWJ1bmdrYW4gZGF0YSBrZSBkYWxhbSBzYXR1IGRhdGEgZnJhbWUgdW50dWsgdmlzdWFsaXNhc2kNCmRhdGFfZGVuZ2FuX291dGxpZXJzIDwtIHJlcChuaWxhaV90ZW5nYWgsIGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQpkYXRhX3RhbnBhX291dGxpZXJzIDwtIHJlcChuaWxhaV90ZW5nYWgsIGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycykNCg0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBOaWxhaSA9IGMoZGF0YV9kZW5nYW5fb3V0bGllcnMsIGRhdGFfdGFucGFfb3V0bGllcnMpLA0KICBLZWxvbXBvayA9IHJlcChjKCJEZW5nYW4gT3V0bGllcnMiLCAiVGFucGEgT3V0bGllcnMiKSwgDQogICAgICAgICAgICAgICAgIHRpbWVzID0gYyhsZW5ndGgoZGF0YV9kZW5nYW5fb3V0bGllcnMpLCBsZW5ndGgoZGF0YV90YW5wYV9vdXRsaWVycykpKQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSA9IGRhdGEsIA0KICB5ID0gfk5pbGFpLCANCiAgY29sb3IgPSB+S2Vsb21wb2ssIA0KICB0eXBlID0gImJveCIsIA0KICBib3hwb2ludHMgPSAiYWxsIiAgIyBNZW5hbXBpbGthbiBzZW11YSB0aXRpayBkYXRhDQopICU+JSANCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlBlbmdhcnVoIE91dGxpZXJzIHRlcmhhZGFwIE1lYW4iLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbWVhbl90YW5wYV9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCmBgYA0KDQojIyMjIE1lYW4gZGVuZ2FuIEhpc3RvZ3JhbQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCB9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhOiBJbnRlcnZhbCBuaWxhaSBkYW4gZnJla3VlbnNpDQppbnRlcnZhbCA8LSBjKCIzMCAtIDM5IiwgIjQwIC0gNDkiLCAiNTAgLSA1OSIsICI2MCAtIDY5IiwgIjcwIC0gNzkiLCAiODAgLSA4OSIsICI5MCAtIDk5IikNCmZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMgPC0gYygxLCA0LCA1LCA3LCA2LCAzLCA0KSAgIyBEZW5nYW4gb3V0bGllcnMNCmZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyA8LSBjKDAsIDQsIDUsIDcsIDYsIDMsIDQpICAgIyBUYW5wYSBvdXRsaWVycyAobWVuZ2hhcHVzIGtlbGFzIDMwLTM5KQ0KDQojIE1lbmdoaXR1bmcgbmlsYWkgdGVuZ2FoICh4X2kpIHVudHVrIHNldGlhcCBpbnRlcnZhbA0KbmlsYWlfdGVuZ2FoIDwtIGMoMzQuNSwgNDQuNSwgNTQuNSwgNjQuNSwgNzQuNSwgODQuNSwgOTQuNSkNCg0KIyBNZW5naGl0dW5nIHRvdGFsIGZyZWt1ZW5zaSB1bnR1ayBrZWR1YSBkYXRhc2V0DQp0b3RhbF9mcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzKQ0KdG90YWxfZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZ2hpdHVuZyByYXRhLXJhdGEgKG1lYW4pIHVudHVrIGtlZHVhIGRhdGFzZXQNCm1lYW5fZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzICogbmlsYWlfdGVuZ2FoKSAvIHRvdGFsX2ZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMNCm1lYW5fdGFucGFfb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyAqIG5pbGFpX3RlbmdhaCkgLyB0b3RhbF9mcmVrdWVuc2lfdGFucGFfb3V0bGllcnMNCg0KIyBNZW1idWF0IGRlbnNpdHkgcGxvdCB1bnR1ayBtYXNpbmctbWFzaW5nIGRhdGFzZXQNCiMgRGF0YSBkZW5nYW4gb3V0bGllcnMNCmRhdGFfZGVuZ2FuX291dGxpZXJzIDwtIHJlcChuaWxhaV90ZW5nYWgsIGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQojIERhdGEgdGFucGEgb3V0bGllcnMNCmRhdGFfdGFucGFfb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaCwgZnJla3VlbnNpX3RhbnBhX291dGxpZXJzKQ0KDQojIE1lbmdoaXR1bmcgZGVuc2l0eSBwbG90DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KZGVuc2l0eV90YW5wYV9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfdGFucGFfb3V0bGllcnMpDQoNCiMgUGFzdGlrYW4gdGlkYWsgYWRhIG5pbGFpIG5lZ2F0aWYgZGkgeCBkYW4geQ0KZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCA8LSBwbWF4KDAsIGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzJHggPC0gcG1heCgwLCBkZW5zaXR5X3RhbnBhX291dGxpZXJzJHgpDQoNCiMgTWVtYnVhdCBwbG90IG1lbmdndW5ha2FuIFBsb3RseQ0KcGxvdCA8LSBwbG90X2x5KCkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJEZW5nYW4gT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJUYW5wYSBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyByYXRhLXJhdGEgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lYW5fZGVuZ2FuX291dGxpZXJzLCBtZWFuX2Rlbmdhbl9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSAiUmF0YS1yYXRhIChEZW5nYW4gT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyByYXRhLXJhdGEgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVhbl90YW5wYV9vdXRsaWVycywgbWVhbl90YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJSYXRhLXJhdGEgKFRhbnBhIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBNZWFuIHBhZGEgRGVuc2l0eSBQbG90IiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiS2VwYWRhdGFuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIHJhdGEtcmF0YSBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwgICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayByYXRhLXJhdGEgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fdGFucGFfb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00NSwgICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCmBgYA0KDQojIyMjIEFuYWxpc2lzIE1lYW4NCg0KTWVhbiBkZW5nYW4gT3V0bGllcjogNjcsMTcNCg0KTWVhbiB0YW5wYSBPdXRsaWVyOiA2OCwyOQ0KDQoqSW50ZXJwcmV0YXNpOioNCg0KTmlsYWkgbWVhbiBtZW1iZXJpa2FuIGdhbWJhcmFuIHRlbnRhbmcgbmlsYWkgcmF0YS1yYXRhIHVqaWFuIFN0YXRpc3Rpa2EgRGFzYXIgcGFkYSBwb3B1bGFzaSBtYWhhc2lzd2EgeWFuZyBkaXRlbGl0aS4gUGVyYmVkYWFuIGFudGFyYSBtZWFuIGRlbmdhbiBvdXRsaWVyICg2NywxNykgZGFuIG1lYW4gdGFucGEgb3V0bGllciAoNjgsMjkpIG1lbnVuanVra2FuIGJhaHdhIGtlaGFkaXJhbiBpbnRlcnZhbCAzMCAtIDM5IHlhbmcgbWVtaWxpa2kgZnJla3VlbnNpIHNhbmdhdCByZW5kYWggKGhhbnlhIDEgbWFoYXNpc3dhKSBtZW1lbmdhcnVoaSBzZWRpa2l0IG5pbGFpIHJhdGEtcmF0YSBrZXNlbHVydWhhbiwgdGV0YXBpIGN1a3VwIHVudHVrIG1lbnVydW5rYW4gcmF0YS1yYXRhIHRlcnNlYnV0LiBNZXNraXB1biBzZWJhZ2lhbiBiZXNhciBtYWhhc2lzd2EgbWVtaWxpa2kgbmlsYWkgeWFuZyBsZWJpaCB0aW5nZ2ksIHNhdHUgbWFoYXNpc3dhIGRlbmdhbiBuaWxhaSB5YW5nIGphdWggbGViaWggcmVuZGFoIG1lbmFyaWsgcmF0YS1yYXRhIG1lbmphZGkgbGViaWggcmVuZGFoLg0KDQoqUGVuZ2FydWggdGVyaGFkYXAgS2FzdXM6Kg0KDQpKaWthIGtpdGEgaGFueWEgbWVsaWhhdCBtZWFuIHRhbnBhIG91dGxpZXIgKDY4LDI5KSwgcmF0YS1yYXRhIG5pbGFpIHVqaWFuIGxlYmloIHJlYWxpc3RpcyBkYW4gbWVudW5qdWtrYW4gYmFod2EgbWF5b3JpdGFzIG1haGFzaXN3YSBtZW1pbGlraSBuaWxhaSB5YW5nIGN1a3VwIGJhaWssIGRlbmdhbiBrb25zZW50cmFzaSBuaWxhaSBkaSByZW50YW5nIDYwIGtlIGF0YXMuIEluaSBiZXJhcnRpIGJhaHdhIG1lc2tpcHVuIGFkYSBzYXR1IG1haGFzaXN3YSB5YW5nIG1lbWlsaWtpIG5pbGFpIHNhbmdhdCByZW5kYWgsIHNlYmFnaWFuIGJlc2FyIG1haGFzaXN3YSBtZW51bmp1a2thbiBraW5lcmphIHlhbmcgYmFpayBkaSB1amlhbiBpbmkuDQoNCiMjIE1lZGlhbiB1bnR1ayBEYXRhIEtlbG9tcG9rDQoNCk1lZGlhbiBhZGFsYWggbmlsYWkgdGVuZ2FoIGRhcmkgZGF0YSB5YW5nIHRlbGFoIGRpdXJ1dGthbi4gVW50dWsgZGF0YSBrZWxvbXBvaywgbWVkaWFuIGRpaGl0dW5nIGRlbmdhbiBtZW5nZ3VuYWthbiBydW11cyBraHVzdXMgeWFuZyBtZW1wZXJoaXR1bmdrYW4ga2VsYXMgaW50ZXJ2YWwuIE1lZGlhbiBtZW1iYWdpIGRhdGEgbWVuamFkaSBkdWEgYmFnaWFuIHlhbmcgc2FtYSBiZXNhcjogc2VwYXJ1aCBkYXRhIGJlcmFkYSBkaSBiYXdhaCBtZWRpYW4sIGRhbiBzZXBhcnVoIGJlcmFkYSBkaSBhdGFzbnlhLiANCg0KTWVkaWFuIHVudHVrIGRhdGEga2Vsb21wb2sgbWVtaWxpa2kgcnVtdXMgc2ViYWdhaSBiZXJpa3V0Og0KDQokJA0KTV9lID0gVF9iICsgXGZyYWMge1xmcmFje+KIkWZ9ezJ9LWZfa317Zl9tfSBcY2RvdCBwDQokJA0KS2V0ZXJhbmdhbjoNCiQkDQpNX2UgPSBOaWxhaX5tZWRpYW5+dW50dWt+ZGF0YX5rZWxvbXBva1xcDQpUX2IgPSBUZXBpfmJhd2FofmtlbGFzfm1lZGlhbn5kYXRhfmtlbG9tcG9rXFwNCuKIkWYgPSBKdW1sYWh+dG90YWx+ZnJla3VlbnNpXFwNCmZfayA9IEZyZWt1ZW5zaX5rdW11bGF0aWZ+c2ViZWx1bX5rZWxhc35tZWRpYW5cXA0KZl9tID0gRnJla3VlbnNpfmtlbGFzfm1lZGlhblxcDQpwID0gUGFuamFuZ35pbnRlcnZhbH5rZWxhcw0KJCQNCkxhbmdrYWgtbGFuZ2thaCBkYWxhbSBtZW5naGl0dW5nIG1lZGlhbiB1bnR1ayBkYXRhIGtlbG9tcG9rOg0KDQoxLiBNZW5naGl0dW5nIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgKOKIkWYpOiBkZW5nYW4gY2FyYSBtZW5qdW1sYWhrYW4gc2VtdWEgZnJla3VlbnNpIHlhbmcgYWRhLg0KDQoyLiBNZW1iYWdpIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgZGVuZ2FuIDIuDQoNCjMuIE1lbmVudHVrYW4gZnJla3VlbnNpIGt1bXVsYXRpZjogZnJla3VlbnNpIGt1bXVsYXRpZiBhZGFsYWgganVtbGFoIGZyZWt1ZW5zaSB5YW5nIGRpaGl0dW5nIHNlY2FyYSBiZXJ0YWhhcCBkYXJpIGF3YWwgaGluZ2dhIGFraGlyLCBkZW5nYW4gbWVuYW1iYWhrYW4gZnJla3VlbnNpIHBhZGEgc2V0aWFwIGxhbmdrYWguIExhbmdrYWgtbGFuZ2thaCBtZW5lbnR1a2FuIGZyZWt1ZW5zaSBrdW11bGF0aWYsIHlhaXR1OiBNdWxhaSBkYXJpIGZyZWt1ZW5zaSBrZWxhcyBwZXJ0YW1hLCBUYW1iYWhrYW4gZnJla3VlbnNpIHNldGlhcCBrZWxhcyBrZSBqdW1sYWggZnJla3VlbnNpIHNlYmVsdW1ueWEgc2VjYXJhIGJlcnVydXRhbi4NCg0KNC4gTWVuZW50dWthbiBrZWxhcyBtZWRpYW46IGtlbGFzIG1lZGlhbiBtZXJ1cGFrYW4gaW50ZXJ2YWwga2VsYXMgeWFuZyBtZW5nYW5kdW5nIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgZGliYWdpIGRlbmdhbiAyIGRhcmkgZGlzdHJpYnVzaSBmcmt1ZW5zaSBrdW11bGF0aWYuDQoNCjUuIE1lbmVudHVrYW4gZnJla3VlbnNpIGt1bXVsYXRpZiBzZWJlbHVtIGtlbGFzIG1lZGlhbi4NCg0KNi4gTWVuZW50dWthbiBmcmVrdWVuc2kga2VsYXMgbWVkaWFuLg0KDQo3LiBNZW5lbnR1a2FuIHBhbmphbmcgaW50ZXJ2YWwga2VsYXMuDQoNCjguIE1lbmVudHVrYW4gdGVwaSBiYXdhaCBrZWxhcyBtZWRpYW4uDQoNCjkuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMgbGFsdSBtZW5naGl0dW5nIHNlY2FyYSBtYXRlbWF0aWNhbC4NCg0KIyMjIENvbnRvaA0KDQpCZXJpa3V0IGFkYWxhaCBkYXRhIG5pbGFpIHVqaWFuIFN0YXRpc3Rpa2EgRGFzYXIgZGFyaSAzMCBtYWhhc2lzd2EgU2FpbnMgRGF0YS4NCg0KfCAgTmlsYWkgfCBGcmVrdWVuc2kgKGYpIHwNCnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18DQp8IDMwIC0gMzkgICAgICAgICB8IDEgICAgICAgICAgICAgfA0KfCA0MCAtIDQ5ICAgICAgICAgfCA0ICAgICAgICAgICAgIHwNCnwgNTAgLSA1OSAgICAgICAgIHwgNSAgICAgICAgICAgICB8DQp8IDYwIC0gNjkgICAgICAgICB8IDcgICAgICAgICAgICAgfA0KfCA3MCAtIDc5ICAgICAgICAgfCA2ICAgICAgICAgICAgIHwNCnwgODAgLSA4OSAgICAgICAgIHwgMyAgICAgICAgICAgICB8DQp8IDkwIC0gOTkgICAgICAgICB8IDQgICAgICAgICAgICAgfA0KDQojIyMjIE1lZGlhbiBEZW5nYW4gT3V0bGllcg0KDQoxLiBNZW5naGl0dW5nIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgKOKIkWYpDQokJOKIkWY9MSs0KzUrNys2KzMrND0zMCQkDQoyLiBNZW1iYWdpIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgZGVuZ2FuIDIuDQokJCBcZnJhYyB74oiRZn17Mn0gPSBcZnJhYyB7MzB9ezJ9ID0gMTUkJA0KMy4gTWVuZW50dWthbiBmcmVrdWVuc2kga3VtdWxhdGlmDQoNCnwgSW50ZXJ2YWwgTmlsYWkgfCBGcmVrdWVuc2kgKFwoZlwpKSB8IEZyZWt1ZW5zaSBLdW11bGF0aWYgfA0KfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAzMCAtIDM5ICAgICAgICAgfCAxICAgICAgICAgICAgICAgICB8IDEgICAgICAgICAgICAgICAgICAgfA0KfCA0MCAtIDQ5ICAgICAgICAgfCA0ICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgfA0KfCA1MCAtIDU5ICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICB8IDEwICAgICAgICAgICAgICAgICAgfA0KfCA2MCAtIDY5ICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICB8IDE3ICAgICAgICAgICAgICAgICAgfA0KfCA3MCAtIDc5ICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICB8IDIzICAgICAgICAgICAgICAgICAgfA0KfCA4MCAtIDg5ICAgICAgICAgfCAzICAgICAgICAgICAgICAgICB8IDI2ICAgICAgICAgICAgICAgICAgfA0KfCA5MCAtIDk5ICAgICAgICAgfCA0ICAgICAgICAgICAgICAgICB8IDMwICAgICAgICAgICAgICAgICAgfA0KDQo0LiBNZW5lbnR1a2FuIGtlbGFzIG1lZGlhbg0KDQpLZWxhcyBtZWRpYW4gYWRhbGFoIDYwIC0gNjkgKGZyZWt1ZW5zaSBrdW11bGF0aWYgc2ViZWx1bSBrZWxhcyBpbmkgYWRhbGFoIDEwLCBkYW4ga3VtdWxhdGlmIGtlbGFzIGluaSBtZW5jYXBhaSAxNykuDQoNCjUuIE1lbmVudHVrYW4gZnJla3VlbnNpIGt1bXVsYXRpZiBzZWJlbHVtIGtlbGFzIG1lZGlhbi4NCiQkZl9rPSAxMCQkDQoNCjYuIE1lbmVudHVrYW4gZnJla3VlbnNpIGtlbGFzIG1lZGlhbi4NCiQkZl9tPSA3JCQNCg0KNy4gTWVuZW50dWthbiBwYW5qYW5nIGludGVydmFsIGtlbGFzLg0KJCRwPSAxMCQkDQo4LiBNZW5lbnR1a2FuIHRlcGkgYmF3YWgga2VsYXMgbWVkaWFuLg0KJCRUX2IgPSA1OSw1JCQNCjkuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMuDQokJA0KTV9lID0gVF9iICsgXGZyYWMge1xmcmFje+KIkWZ9ezJ9LWZfa317Zl9tfSBcY2RvdCBwID0gNTksNSArIFxmcmFjIHsxNS0xMH17N30gXGNkb3QgMTAgPSA2Niw2NA0KJCQNCg0KIyMjIyBNZWRpYW4gVGFucGEgT3V0bGllcg0KDQpNZW5nYW5nZ2FwIGludGVydmFsIGtlbGFzIDMwIC0gMzkgc2ViYWdhaSBvdXRsaWVyIGRhbGFtIGFuYWxpc2lzIGRhdGEga2Vsb21wb2sgZGFwYXQgZGlwZXJ0aW1iYW5na2FuIGthcmVuYSBmcmVrdWVuc2lueWEgeWFuZyBzYW5nYXQgcmVuZGFoIChoYW55YSAxIG1haGFzaXN3YSkgZGliYW5kaW5na2FuIGRlbmdhbiBrZWxhcyBsYWlubnlhLCBzZXJ0YSBkaXN0cmlidXNpIGRhdGEgeWFuZyBsZWJpaCB0ZXJrb25zZW50cmFzaSBwYWRhIG5pbGFpIHlhbmcgbGViaWggdGluZ2dpIHNlcGVydGkgNjAgLSA2OSBkYW4gNzAgLSA3OS4gU2VsYWluIGl0dSwgcmVudGFuZyBuaWxhaSBrZWxhcyAzMCAtIDM5IHlhbmcgamF1aCBsZWJpaCByZW5kYWgganVnYSBkYXBhdCBkaWFuZ2dhcCBzZWJhZ2FpIGFub21hbGkgZGFsYW0ga29udGVrcyBkYXRhIHlhbmcgbGViaWggbHVhcy4gRGFsYW0gdmlzdWFsaXNhc2kgZGF0YSwga2VsYXMgaW5pIHRlcmxpaGF0IHRlcnBpc2FoIGRhcmkgcG9sYSBkaXN0cmlidXNpIHVtdW0sIHNlaGluZ2dhIGRhcGF0IGRpcGFuZGFuZyBzZWJhZ2FpIGRhdGEgeWFuZyB0aWRhayBzZXN1YWkgZGVuZ2FuIHBvbGEgbWF5b3JpdGFzLiBQZW5naGFwdXNhbiBrZWxhcyBpbmkganVnYSBkYXBhdCBtZW1iYW50dSB1bnR1ayBmb2t1cyBwYWRhIGtlbG9tcG9rIGRhdGEgeWFuZyBsZWJpaCByZWxldmFuIGRhbiBtZW1iZXJpa2FuIGdhbWJhcmFuIGRpc3RyaWJ1c2kgeWFuZyBsZWJpaCByZXByZXNlbnRhdGlmLiANCg0KfCAgTmlsYWkgfCBGcmVrdWVuc2kgKFwoZlwpKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgNDAgLSA0OSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgfA0KfCA1MCAtIDU5ICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICB8DQp8IDYwIC0gNjkgICAgICAgICB8IDcgICAgICAgICAgICAgICAgIHwNCnwgNzAgLSA3OSAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgfA0KfCA4MCAtIDg5ICAgICAgICAgfCAzICAgICAgICAgICAgICAgICB8DQp8IDkwIC0gOTkgICAgICAgICB8IDQgICAgICAgICAgICAgICAgIHwNCg0KMS4gTWVuZ2hpdHVuZyBqdW1sYWggdG90YWwgZnJla3VlbnNpICjiiJFmKQ0KJCTiiJFmPTQrNSs3KzYrMys0PTI5JCQNCjIuIE1lbWJhZ2kganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSBkZW5nYW4gMi4NCiQkIFxmcmFjIHviiJFmfXsyfSA9IFxmcmFjIHsyOX17Mn0gPSAxNCw1JCQNCjMuIE1lbmVudHVrYW4gZnJla3VlbnNpIGt1bXVsYXRpZg0KDQp8IE5pbGFpICB8IEZyZWt1ZW5zaSAoXChmXCkpIHwgRnJla3VlbnNpIEt1bXVsYXRpZiAgfA0KfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgNDAgLSA0OSAgICAgICAgfCA0ICAgICAgICAgICAgICAgICB8IDQgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IDUwIC0gNTkgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgfCA5ICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCA2MCAtIDY5ICAgICAgICB8IDcgICAgICAgICAgICAgICAgIHwgMTYgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgNzAgLSA3OSAgICAgICAgfCA2ICAgICAgICAgICAgICAgICB8IDIyICAgICAgICAgICAgICAgICAgICAgICB8DQp8IDgwIC0gODkgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgfCAyNSAgICAgICAgICAgICAgICAgICAgICAgfA0KfCA5MCAtIDk5ICAgICAgICB8IDQgICAgICAgICAgICAgICAgIHwgMjkgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KNC4gTWVuZW50dWthbiBrZWxhcyBtZWRpYW4NCg0KS2VsYXMgbWVkaWFuIGFkYWxhaCA2MCAtIDY5IChmcmVrdWVuc2kga3VtdWxhdGlmIHNlYmVsdW0ga2VsYXMgaW5pIGFkYWxhaCA5LCBkYW4ga3VtdWxhdGlmIGtlbGFzIGluaSBtZW5jYXBhaSAxNikuDQoNCjUuIE1lbmVudHVrYW4gZnJla3VlbnNpIGt1bXVsYXRpZiBzZWJlbHVtIGtlbGFzIG1lZGlhbi4NCiQkZl9rPSA5JCQNCjYuIE1lbmVudHVrYW4gZnJla3VlbnNpIGtlbGFzIG1lZGlhbi4NCiQkZl9tPSA3JCQNCjcuIE1lbmVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcy4NCiQkcD0gMTAkJA0KOC4gTWVuZW50dWthbiB0ZXBpIGJhd2FoIGtlbGFzIG1lZGlhbi4NCiQkVF9iID0gNTksNSQkDQo5LiBNZW1hc3Vra2FuIGtlIGRhbGFtIHJ1bXVzLg0KJCQNCk1fZSA9IFRfYiArIFxmcmFjIHtcZnJhY3viiJFmfXsyfS1mX2t9e2ZfbX0gXGNkb3QgcCA9IDU5LDUgKyBcZnJhYyB7MTQsNS05fXs3fSBcY2RvdCAxMCA9IDY3LDM2DQokJA0KDQojIyMjIE1lZGlhbiBkZW5nYW4gQm94cGxvdA0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YQ0KaW50ZXJ2YWwgPC0gYygiMzAgLSAzOSIsICI0MCAtIDQ5IiwgIjUwIC0gNTkiLCAiNjAgLSA2OSIsICI3MCAtIDc5IiwgIjgwIC0gODkiLCAiOTAgLSA5OSIpDQpuaWxhaV90ZW5nYWggPC0gYygzNC41LCA0NC41LCA1NC41LCA2NC41LCA3NC41LCA4NC41LCA5NC41KSAgIyBOaWxhaSB0ZW5nYWggdW50dWsgc2V0aWFwIGludGVydmFsDQpmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIGMoMSwgNCwgNSwgNywgNiwgMywgNCkgICAgICAgICAgIyBGcmVrdWVuc2kgZGVuZ2FuIG91dGxpZXJzDQpmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMgPC0gYygwLCA0LCA1LCA3LCA2LCAzLCA0KSAgICAgICAgICAgIyBGcmVrdWVuc2kgdGFucGEgb3V0bGllcnMNCg0KIyBNZW1idWF0IGRhdGEgbGVuZ2thcCBiZXJkYXNhcmthbiBmcmVrdWVuc2kNCmRhdGFfZGVuZ2FuX291dGxpZXJzIDwtIHJlcChuaWxhaV90ZW5nYWgsIGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQpkYXRhX3RhbnBhX291dGxpZXJzIDwtIHJlcChuaWxhaV90ZW5nYWgsIGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycykNCg0KIyBNZW5nZ2FidW5na2FuIGRhdGEga2UgZGFsYW0gc2F0dSBkYXRhIGZyYW1lDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gYyhkYXRhX2Rlbmdhbl9vdXRsaWVycywgZGF0YV90YW5wYV9vdXRsaWVycyksDQogIERhdGFzZXQgPSBjKHJlcCgiRGVuZ2FuIE91dGxpZXJzIiwgbGVuZ3RoKGRhdGFfZGVuZ2FuX291dGxpZXJzKSksDQogICAgICAgICAgICAgIHJlcCgiVGFucGEgT3V0bGllcnMiLCBsZW5ndGgoZGF0YV90YW5wYV9vdXRsaWVycykpKQ0KKQ0KDQojIE5pbGFpIG1lZGlhbiBkYXJpIGhhc2lsIHBlcmhpdHVuZ2FuIG1hbnVhbA0KbWVkaWFuX2Rlbmdhbl9vdXRsaWVycyA8LSA2Ni42NA0KbWVkaWFuX3RhbnBhX291dGxpZXJzIDwtIDY3LjM2DQoNCiMgTWVtYnVhdCBib3hwbG90IGludGVyYWt0aWYgbWVuZ2d1bmFrYW4gUGxvdGx5DQpib3hwbG90X3Bsb3QgPC0gcGxvdF9seShkYXRhLCB5ID0gfk5pbGFpLCB4ID0gfkRhdGFzZXQsIGNvbG9yID0gfkRhdGFzZXQsIHR5cGUgPSAiYm94IikgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBNZWRpYW4iLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHNob3dsZWdlbmQgPSBGQUxTRSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtZWRpYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCByb3VuZChtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lZGlhbl90YW5wYV9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46Iiwgcm91bmQobWVkaWFuX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpib3hwbG90X3Bsb3QNCg0KDQpgYGANCg0KIyMjIyBNZWRpYW4gZGVuZ2FuIEhpc3RvZ3JhbQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YTogSW50ZXJ2YWwgbmlsYWkgZGFuIGZyZWt1ZW5zaQ0KaW50ZXJ2YWwgPC0gYygiMzAgLSAzOSIsICI0MCAtIDQ5IiwgIjUwIC0gNTkiLCAiNjAgLSA2OSIsICI3MCAtIDc5IiwgIjgwIC0gODkiLCAiOTAgLSA5OSIpDQpmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIGMoMSwgNCwgNSwgNywgNiwgMywgNCkgICMgRGVuZ2FuIG91dGxpZXJzDQpmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMgPC0gYygwLCA0LCA1LCA3LCA2LCAzLCA0KSAgICMgVGFucGEgb3V0bGllcnMgKG1lbmdoYXB1cyBrZWxhcyAzMC0zOSkNCg0KIyBOaWxhaSB0ZW5nYWggKHhpKSB1bnR1ayBzZXRpYXAgaW50ZXJ2YWwNCm5pbGFpX3RlbmdhaCA8LSBjKDM0LjUsIDQ0LjUsIDU0LjUsIDY0LjUsIDc0LjUsIDg0LjUsIDk0LjUpDQoNCiMgTWVuZW50dWthbiBrZWxhcyBtZWRpYW4gYmVyZGFzYXJrYW4gZGF0YSBzZWJlbHVtbnlhDQprZWxhc19tZWRpYW5fZGVuZ2FuX291dGxpZXJzIDwtIDQgICMgSW50ZXJ2YWwgNjAgLSA2OQ0Ka2VsYXNfbWVkaWFuX3RhbnBhX291dGxpZXJzIDwtIDQgICMgSW50ZXJ2YWwgNjAgLSA2OQ0KDQojIERhdGEgdW50dWsga2VsYXMgbWVkaWFuDQp0ZXBpX2Jhd2FoX2Rlbmdhbl9vdXRsaWVycyA8LSA1OS41DQp0ZXBpX2Jhd2FoX3RhbnBhX291dGxpZXJzIDwtIDU5LjUNCmZyZWt1ZW5zaV9rdW11bGF0aWZfZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzWzE6KGtlbGFzX21lZGlhbl9kZW5nYW5fb3V0bGllcnMgLSAxKV0pDQpmcmVrdWVuc2lfa3VtdWxhdGlmX3RhbnBhX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfdGFucGFfb3V0bGllcnNbMTooa2VsYXNfbWVkaWFuX3RhbnBhX291dGxpZXJzIC0gMSldKQ0KZnJla3VlbnNpX2tlbGFzX2Rlbmdhbl9vdXRsaWVycyA8LSBmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzW2tlbGFzX21lZGlhbl9kZW5nYW5fb3V0bGllcnNdDQpmcmVrdWVuc2lfa2VsYXNfdGFucGFfb3V0bGllcnMgPC0gZnJla3VlbnNpX3RhbnBhX291dGxpZXJzW2tlbGFzX21lZGlhbl90YW5wYV9vdXRsaWVyc10NCnBhbmphbmdfa2VsYXMgPC0gMTANCg0KIyBNZW5naGl0dW5nIG1lZGlhbiBkZW5nYW4gZGFuIHRhbnBhIG91dGxpZXJzDQptZWRpYW5fZGVuZ2FuX291dGxpZXJzIDwtIHRlcGlfYmF3YWhfZGVuZ2FuX291dGxpZXJzICsgDQogICgoc3VtKGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpIC8gMiAtIGZyZWt1ZW5zaV9rdW11bGF0aWZfZGVuZ2FuX291dGxpZXJzKSAvIGZyZWt1ZW5zaV9rZWxhc19kZW5nYW5fb3V0bGllcnMpICogcGFuamFuZ19rZWxhcw0KDQptZWRpYW5fdGFucGFfb3V0bGllcnMgPC0gdGVwaV9iYXdhaF90YW5wYV9vdXRsaWVycyArIA0KICAoKHN1bShmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpIC8gMiAtIGZyZWt1ZW5zaV9rdW11bGF0aWZfdGFucGFfb3V0bGllcnMpIC8gZnJla3VlbnNpX2tlbGFzX3RhbnBhX291dGxpZXJzKSAqIHBhbmphbmdfa2VsYXMNCg0KIyBNZW1idWF0IGRlbnNpdHkgcGxvdA0KZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMgPC0gZGVuc2l0eShyZXAobmlsYWlfdGVuZ2FoLCBmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzKSkNCmRlbnNpdHlfdGFucGFfb3V0bGllcnMgPC0gZGVuc2l0eShyZXAobmlsYWlfdGVuZ2FoLCBmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpKQ0KDQojIE1lbWJ1YXQgcGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgpICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiVGFucGEgT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgbWVkaWFuIHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCBtZWRpYW5fZGVuZ2FuX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNZWRpYW4gKERlbmdhbiBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBkYXNoID0gJ2RvdCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgbWVkaWFuIHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lZGlhbl90YW5wYV9vdXRsaWVycywgbWVkaWFuX3RhbnBhX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1lZGlhbiAoVGFucGEgT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTWVkaWFuIHBhZGEgRGVuc2l0eSBQbG90IiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiS2VwYWRhdGFuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1lZGlhbiBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuOiIsIHJvdW5kKG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICAjIEFub3Rhc2kgdW50dWsgbWVkaWFuIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWRpYW5fdGFucGFfb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46Iiwgcm91bmQobWVkaWFuX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtNDUsDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KYGBgDQoNCiMjIyMgQW5hbGlzaXMgTWVkaWFuDQoNCk1lZGlhbiBkZW5nYW4gT3V0bGllcjogNjYsNjQNCg0KTWVkaWFuIHRhbnBhIE91dGxpZXI6IDY3LDM2DQoNCipJbnRlcnByZXRhc2k6Kg0KDQpOaWxhaSBtZWRpYW4gbWVudW5qdWtrYW4gcG9zaXNpIHRlbmdhaCBkYXJpIGRhdGEgeWFuZyB0ZWxhaCBkaXVydXRrYW4uIE1lZGlhbiBkZW5nYW4gb3V0bGllciAoNjYsNjQpIHNlZGlraXQgbGViaWggcmVuZGFoIGRhcmlwYWRhIG1lZGlhbiB0YW5wYSBvdXRsaWVyICg2NywzNiksIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBlbmdoYXB1c2FuIGludGVydmFsIGtlbGFzIDMwIC0gMzksIHlhbmcgbWVtaWxpa2kgZnJla3VlbnNpIHNhbmdhdCByZW5kYWgsIHNlZGlraXQgbWVuZ2dlc2VyIHBvc2lzaSB0ZW5nYWggZGF0YSBrZSBhdGFzLiBNZXNraXB1biBuaWxhaSBtZWRpYW4gZGVuZ2FuIG91dGxpZXIgbWVudW5qdWtrYW4gcG9zaXNpIHRlbmdhaCBkYXRhIHNlY2FyYSBrZXNlbHVydWhhbiwgcGVuZ2hhcHVzYW4ga2VsYXMgMzAgLSAzOSB5YW5nIHRlcmlzb2xhc2kgbWVtYmVyaWthbiBnYW1iYXJhbiB5YW5nIGxlYmloIGFrdXJhdCB0ZW50YW5nIGRpc3RyaWJ1c2kgZGF0YSBtYXlvcml0YXMsIHlhaXR1IG5pbGFpLW5pbGFpIHVqaWFuIHlhbmcgbGViaWggdGluZ2dpLg0KDQoqUGVuZ2FydWggdGVyaGFkYXAgS2FzdXM6Kg0KDQpKaWthIGtpdGEgaGFueWEgbWVsaWhhdCBtZWRpYW4gdGFucGEgb3V0bGllciAoNjcsMzYpLCBwb3Npc2kgdGVuZ2FoIGRhdGEgbWVuamFkaSBzZWRpa2l0IGxlYmloIHRpbmdnaSwgeWFuZyBtZW5jZXJtaW5rYW4ga2VueWF0YWFuIGJhaHdhIG1heW9yaXRhcyBtYWhhc2lzd2EgbWVtaWxpa2kgbmlsYWkgZGkgYXRhcyA2MCwgZGVuZ2FuIGtvbnNlbnRyYXNpIG5pbGFpIHlhbmcgY3VrdXAgYmVzYXIgZGkgcmVudGFuZyA2MCAtIDY5IGRhbiA3MCAtIDc5LiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhLCBtZXNraXB1biBhZGEgc2F0dSBuaWxhaSB5YW5nIHNhbmdhdCByZW5kYWgsIG1heW9yaXRhcyBtYWhhc2lzd2EgYmVyYWRhIGRpIGF0YXMgbmlsYWkgdGVuZ2FoLCB5YW5nIG1lbnVuanVra2FuIGtpbmVyamEgeWFuZyBsZWJpaCBiYWlrIGRpIHVqaWFuIFN0YXRpc3Rpa2EgRGFzYXIuDQoNCiMjIE1vZHVzIHVudHVrIERhdGEgS2Vsb21wb2sNCg0KTW9kdXMgdW50dWsgZGF0YSBrZWxvbXBvayBhZGFsYWggbmlsYWkgeWFuZyBwYWxpbmcgc2VyaW5nIG11bmN1bCBhdGF1IG1lbWlsaWtpIGZyZWt1ZW5zaSB0ZXJ0aW5nZ2kgZGFsYW0gZGlzdHJpYnVzaSBkYXRhIGtlbG9tcG9rLiANCg0KTW9kdXMgdW50dWsgZGF0YSBrZWxvbXBvayBtZW1pbGlraSBydW11cyBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiQkDQpNX28gPSBUX2IgKyBcZnJhYyB7ZF8xfSB7ZF8xK2RfMn0gXGNkb3QgcA0KJCQNCg0KS2V0ZXJhbmdhbjoNCg0KJCQNCk1fTyA9IE5pbGFpfm1vZHVzfnVudHVrfmRhdGF+a2Vsb21wb2tcXA0KVF9iID0gVGVwaX5iYXdhaH5rZWxhc35tb2R1c35kYXRhfmtlbG9tcG9rXFwNCmRfMSA9IFNlbGlzaWh+ZnJla3VlbnNpfmtlbGFzfm1vZHVzfmRlbmdhbn5mcmVrdWVuc2l+c2ViZWx1bX5rZWxhc35tb2R1c1xcDQpkXzIgPSBTZWxpc2lofmZyZWt1ZW5zaX5rZWxhc35tb2R1c35kZW5nYW5+ZnJla3VlbnNpfnNldGVsYWh+a2VsYXN+bW9kdXNcXA0KcCAgPSBQYW5qYW5nfmludGVydmFsfmtlbGFzDQokJA0KDQpMYW5na2FoLWxhbmdrYWggZGFsYW0gbWVuZ2hpdHVuZyBtb2R1cyB1bnR1ayBkYXRhIGtlbG9tcG9rLCB5YWl0dToNCg0KMS4gTWVuZ2lkZW50aWZpa2FzaSBrZWxhcyBtb2R1cyA6IERlbmdhbiBjYXJhIG1lbmNhcmkga2VsYXMgeWFuZyBtZW1pbGlraSBmcmVrdWVuc2kgdGVydGluZ2dpLg0KDQoyLiBNZW5lbnR1a2FuIHRlcGkgYmF3YWgga2VsYXMgbW9kdXMgOiBEZW5nYW4gY2FyYSBtZW5ndXJhbmdpIGJhdGFzIGJhd2FoIGtlbGFzIG1vZHVzIHRlcnNlYnV0IGRlbmdhbiAwLDUuDQoNCjMuIE1lbmVudHVrYW4gJGRfMSQ6c2VsaXNpaCBmcmVrdWVuc2kga2VsYXMgbW9kdXMgZGVuZ2FuIGZyZWt1ZW5zaSBzZWJlbHVtIGtlbGFzIG1vZHVzLg0KDQo0LiBNZW5lbnR1a2FuICRkXzIkOnNlbGlzaWggZnJla3VlbnNpIGtlbGFzIG1vZHVzIGRlbmdhbiBmcmVrdWVuc2kgc2V0ZWxhaCBrZWxhcyBtb2R1cy4NCg0KNS4gTWVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcy4NCg0KNi4gTWVtYXN1a2thbiBrZSBkYWxhbSBydW11cyBsYWx1IG1lbmdoaXR1bmcgc2VjYXJhIG1hdGVtYXRpY2FsLg0KDQojIyMgQ29udG9oDQoNCkJlcmlrdXQgYWRhbGFoIGRhdGEgbmlsYWkgdWppYW4gU3RhdGlzdGlrYSBEYXNhciBkYXJpIDMwIG1haGFzaXN3YSBTYWlucyBEYXRhLg0KDQp8ICBOaWxhaSB8IEZyZWt1ZW5zaSAoZikgfA0KfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwNCnwgMzAgLSAzOSAgICAgICAgIHwgMSAgICAgICAgICAgICB8DQp8IDQwIC0gNDkgICAgICAgICB8IDQgICAgICAgICAgICAgfA0KfCA1MCAtIDU5ICAgICAgICAgfCA1ICAgICAgICAgICAgIHwNCnwgNjAgLSA2OSAgICAgICAgIHwgNyAgICAgICAgICAgICB8DQp8IDcwIC0gNzkgICAgICAgICB8IDYgICAgICAgICAgICAgfA0KfCA4MCAtIDg5ICAgICAgICAgfCAzICAgICAgICAgICAgIHwNCnwgOTAgLSA5OSAgICAgICAgIHwgNCAgICAgICAgICAgICB8DQoNCiMjIyMgTW9kdXMgRGVuZ2FuIE91dGxpZXINCg0KMS4gTWVuZ2lkZW50aWZpa2FzaSBrZWxhcyBtb2R1cw0KDQpLZWxhcyBtb2R1cyBhZGFsYWggNjAtNjkga2FyZW5hIG1lbWlsaWtpIGZyZWt1ZW5zaSB0ZXJ0aW5nZ2kgeWFpdHUgNyANCg0KMi4gTWVuZW50dWthbiB0ZXBpIGJhd2FoIGtlbGFzIG1vZHVzDQokJCBUX2IgPSA1OSw1ICQkDQozLiBNZW5lbnR1a2FuICRkXzEkDQokJCBkXzEgPSA3LTUgPSAyJCQNCjQuIE1lbmVudHVrYW4gJGRfMiQNCiQkIGRfMiA9IDctNiA9IDEkJA0KNS4gTWVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcw0KJCRwPSAxMCQkDQo2LiBNZW1hc3Vra2FuIGtlIGRhbGFtIHJ1bXVzDQokJA0KTV9vID0gVF9iICsgXGZyYWMge2RfMX0ge2RfMStkXzJ9IFxjZG90IHA9IDU5LDUgKyBcZnJhYyB7Mn17MisxfSBcY2RvdCAxMCA9IDY2LDE3DQokJA0KDQojIyMjIE1vZHVzIFRhbnBhIE91dGxpZXINCg0KTWVuZ2FuZ2dhcCBpbnRlcnZhbCBrZWxhcyAzMCAtIDM5IHNlYmFnYWkgb3V0bGllciBkYWxhbSBhbmFsaXNpcyBkYXRhIGtlbG9tcG9rIGRhcGF0IGRpcGVydGltYmFuZ2thbiBrYXJlbmEgZnJla3VlbnNpbnlhIHlhbmcgc2FuZ2F0IHJlbmRhaCAoaGFueWEgMSBtYWhhc2lzd2EpIGRpYmFuZGluZ2thbiBkZW5nYW4ga2VsYXMgbGFpbm55YSwgc2VydGEgZGlzdHJpYnVzaSBkYXRhIHlhbmcgbGViaWggdGVya29uc2VudHJhc2kgcGFkYSBuaWxhaSB5YW5nIGxlYmloIHRpbmdnaSBzZXBlcnRpIDYwIC0gNjkgZGFuIDcwIC0gNzkuIFNlbGFpbiBpdHUsIHJlbnRhbmcgbmlsYWkga2VsYXMgMzAgLSAzOSB5YW5nIGphdWggbGViaWggcmVuZGFoIGp1Z2EgZGFwYXQgZGlhbmdnYXAgc2ViYWdhaSBhbm9tYWxpIGRhbGFtIGtvbnRla3MgZGF0YSB5YW5nIGxlYmloIGx1YXMuIERhbGFtIHZpc3VhbGlzYXNpIGRhdGEsIGtlbGFzIGluaSB0ZXJsaWhhdCB0ZXJwaXNhaCBkYXJpIHBvbGEgZGlzdHJpYnVzaSB1bXVtLCBzZWhpbmdnYSBkYXBhdCBkaXBhbmRhbmcgc2ViYWdhaSBkYXRhIHlhbmcgdGlkYWsgc2VzdWFpIGRlbmdhbiBwb2xhIG1heW9yaXRhcy4gUGVuZ2hhcHVzYW4ga2VsYXMgaW5pIGp1Z2EgZGFwYXQgbWVtYmFudHUgdW50dWsgZm9rdXMgcGFkYSBrZWxvbXBvayBkYXRhIHlhbmcgbGViaWggcmVsZXZhbiBkYW4gbWVtYmVyaWthbiBnYW1iYXJhbiBkaXN0cmlidXNpIHlhbmcgbGViaWggcmVwcmVzZW50YXRpZi4NCg0KfCAgTmlsYWkgfCBGcmVrdWVuc2kgKFwoZlwpKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgNDAgLSA0OSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgfA0KfCA1MCAtIDU5ICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICB8DQp8IDYwIC0gNjkgICAgICAgICB8IDcgICAgICAgICAgICAgICAgIHwNCnwgNzAgLSA3OSAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgfA0KfCA4MCAtIDg5ICAgICAgICAgfCAzICAgICAgICAgICAgICAgICB8DQp8IDkwIC0gOTkgICAgICAgICB8IDQgICAgICAgICAgICAgICAgIHwNCg0KMS4gTWVuZ2lkZW50aWZpa2FzaSBrZWxhcyBtb2R1cw0KDQpLZWxhcyBtb2R1cyBhZGFsYWggNjAtNjkga2FyZW5hIG1lbWlsaWtpIGZyZWt1ZW5zaSB0ZXJ0aW5nZ2kgeWFpdHUgNyBNZW5lbnR1a2FuICRkXzEkDQoNCjIuIE1lbmVudHVrYW4gdGVwaSBiYXdhaCBrZWxhcyBtb2R1cw0KJCQgVF9iID0gNTksNSAkJA0KDQozLiBNZW5lbnR1a2FuICRkXzEkDQokJCBkXzEgPSA3LTUgPSAyJCQNCg0KNC4gTWVuZW50dWthbiAkZF8yJA0KJCQgZF8yID0gNy02ID0gMSQkDQoNCjUuIE1lbnR1a2FuIHBhbmphbmcgaW50ZXJ2YWwga2VsYXMNCiQkcD0gMTAkJA0KDQo2LiBNZW1hc3Vra2FuIGtlIGRhbGFtIHJ1bXVzDQokJA0KTV9vID0gVF9iICsgXGZyYWMge2RfMX0ge2RfMStkXzJ9IFxjZG90IHA9IDU5LDUgKyBcZnJhYyB7Mn17MisxfSBcY2RvdCAxMCA9IDY2LDE3DQokJA0KDQoNCiMjIyMgTW9kdXMgZGVuZ2FuIEJveHBsb3QNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEga2Vsb21wb2sgKGludGVydmFsIG5pbGFpIGRhbiBmcmVrdWVuc2kpDQppbnRlcnZhbCA8LSBjKCIzMCAtIDM5IiwgIjQwIC0gNDkiLCAiNTAgLSA1OSIsICI2MCAtIDY5IiwgIjcwIC0gNzkiLCAiODAgLSA4OSIsICI5MCAtIDk5IikNCmZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMgPC0gYygxLCA0LCA1LCA3LCA2LCAzLCA0KSAgIyBEZW5nYW4gb3V0bGllcnMNCmZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyA8LSBjKDAsIDQsIDUsIDcsIDYsIDMsIDQpICAgIyBUYW5wYSBvdXRsaWVycyAobWVuZ2hhcHVzIGtlbGFzIDMwLTM5KQ0KDQojIE1lbmdoaXR1bmcgbmlsYWkgdGVuZ2FoICh4X2kpIHVudHVrIHNldGlhcCBpbnRlcnZhbA0KbmlsYWlfdGVuZ2FoIDwtIGMoMzQuNSwgNDQuNSwgNTQuNSwgNjQuNSwgNzQuNSwgODQuNSwgOTQuNSkNCg0KIyBNZW5naGl0dW5nIHRvdGFsIGZyZWt1ZW5zaQ0KdG90YWxfZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycyA8LSBzdW0oZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycykNCnRvdGFsX2ZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyA8LSBzdW0oZnJla3VlbnNpX3RhbnBhX291dGxpZXJzKQ0KDQojIE1lbmdoaXR1bmcgTW9kdXMgdW50dWsga2VkdWEgZGF0YXNldA0KIyBNb2R1cyBkaWhpdHVuZyBiZXJkYXNhcmthbiBpbnRlcnZhbCBrZWxhcyBtb2R1cyAoNjAgLSA2OSkNClRfYiA8LSA1OS41ICAjIEJhdGFzIGJhd2FoIGtlbGFzIG1vZHVzDQpmMSA8LSA3ICAgICMgRnJla3VlbnNpIGtlbGFzIG1vZHVzDQpmMCA8LSA1ICAgICMgRnJla3VlbnNpIGtlbGFzIHNlYmVsdW0ga2VsYXMgbW9kdXMNCmYyIDwtIDYgICAgIyBGcmVrdWVuc2kga2VsYXMgc2V0ZWxhaCBrZWxhcyBtb2R1cw0KcCA8LSAxMCAgICAjIExlYmFyIGtlbGFzDQoNCm1vZHVzX2Rlbmdhbl9vdXRsaWVycyA8LSBUX2IgKyAoKGYxIC0gZjApIC8gKGYxIC0gZjAgKyBmMSAtIGYyKSkgKiBwDQptb2R1c190YW5wYV9vdXRsaWVycyA8LSBUX2IgKyAoKGYxIC0gZjApIC8gKGYxIC0gZjAgKyBmMSAtIGYyKSkgKiBwDQoNCiMgTWVuZ2dhYnVuZ2thbiBkYXRhIGtlIGRhbGFtIHNhdHUgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YV9kZW5nYW5fb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaCwgZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycykNCmRhdGFfdGFucGFfb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaCwgZnJla3VlbnNpX3RhbnBhX291dGxpZXJzKQ0KDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gYyhkYXRhX2Rlbmdhbl9vdXRsaWVycywgZGF0YV90YW5wYV9vdXRsaWVycyksDQogIEtlbG9tcG9rID0gcmVwKGMoIkRlbmdhbiBPdXRsaWVycyIsICJUYW5wYSBPdXRsaWVycyIpLCANCiAgICAgICAgICAgICAgICAgdGltZXMgPSBjKGxlbmd0aChkYXRhX2Rlbmdhbl9vdXRsaWVycyksIGxlbmd0aChkYXRhX3RhbnBhX291dGxpZXJzKSkpDQopDQoNCiMgTWVtYnVhdCBib3hwbG90IG1lbmdndW5ha2FuIFBsb3RseQ0KcGxvdCA8LSBwbG90X2x5KA0KICBkYXRhID0gZGF0YSwgDQogIHkgPSB+TmlsYWksIA0KICBjb2xvciA9IH5LZWxvbXBvaywgDQogIHR5cGUgPSAiYm94IiwgDQogIGJveHBvaW50cyA9ICJhbGwiICAjIE1lbmFtcGlsa2FuIHNlbXVhIHRpdGlrIGRhdGENCikgJT4lIA0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTW9kdXMiLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1vZHVzX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNb2R1czoiLCByb3VuZChtb2R1c19kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00MA0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbW9kdXNfdGFucGFfb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00MA0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCmBgYA0KDQojIyMjIE1vZHVzIGRlbmdhbiBIaXN0b2dyYW0NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGE6IEludGVydmFsIG5pbGFpIGRhbiBmcmVrdWVuc2kNCmludGVydmFsIDwtIGMoIjMwIC0gMzkiLCAiNDAgLSA0OSIsICI1MCAtIDU5IiwgIjYwIC0gNjkiLCAiNzAgLSA3OSIsICI4MCAtIDg5IiwgIjkwIC0gOTkiKQ0KZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycyA8LSBjKDEsIDQsIDUsIDcsIDYsIDMsIDQpICAjIERlbmdhbiBvdXRsaWVycw0KZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIGMoMCwgNCwgNSwgNywgNiwgMywgNCkgICAjIFRhbnBhIG91dGxpZXJzIChtZW5naGFwdXMga2VsYXMgMzAtMzkpDQoNCiMgTmlsYWkgdGVuZ2FoICh4aSkgdW50dWsgc2V0aWFwIGludGVydmFsDQpuaWxhaV90ZW5nYWggPC0gYygzNC41LCA0NC41LCA1NC41LCA2NC41LCA3NC41LCA4NC41LCA5NC41KQ0KDQojIFBhcmFtZXRlciBrZWxhcyBtb2R1cw0Ka2VsYXNfbW9kdXMgPC0gNCAgIyBJbnRlcnZhbCA2MC02OQ0KdGVwaV9iYXdhaCA8LSA1OS41DQpkMSA8LSA3IC0gNQ0KZDIgPC0gNyAtIDYNCnBhbmphbmdfa2VsYXMgPC0gMTANCg0KIyBNZW5naGl0dW5nIG1vZHVzIGRlbmdhbiBkYW4gdGFucGEgb3V0bGllcnMNCm1vZHVzX2Rlbmdhbl9vdXRsaWVycyA8LSB0ZXBpX2Jhd2FoICsgKGQxIC8gKGQxICsgZDIpKSAqIHBhbmphbmdfa2VsYXMNCm1vZHVzX3RhbnBhX291dGxpZXJzIDwtIHRlcGlfYmF3YWggKyAoZDEgLyAoZDEgKyBkMikpICogcGFuamFuZ19rZWxhcw0KDQojIE1lbWJ1YXQgZGVuc2l0eSBwbG90DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyA8LSBkZW5zaXR5KHJlcChuaWxhaV90ZW5nYWgsIGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpKQ0KZGVuc2l0eV90YW5wYV9vdXRsaWVycyA8LSBkZW5zaXR5KHJlcChuaWxhaV90ZW5nYWgsIGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycykpDQoNCiMgTWVtYnVhdCBwbG90IG1lbmdndW5ha2FuIFBsb3RseQ0KcGxvdCA8LSBwbG90X2x5KCkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJEZW5nYW4gT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJUYW5wYSBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyBtb2R1cyB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobW9kdXNfZGVuZ2FuX291dGxpZXJzLCBtb2R1c19kZW5nYW5fb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1vZHVzIChEZW5nYW4gT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjYpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1vZHVzIHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1vZHVzX3RhbnBhX291dGxpZXJzLCBtb2R1c190YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNb2R1cyAoVGFucGEgT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTW9kdXMgcGFkYSBEZW5zaXR5IFBsb3QiLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJLZXBhZGF0YW4iKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICAjIEFub3Rhc2kgdW50dWsgbW9kdXMgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtb2R1c19kZW5nYW5fb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtMzAsDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApLA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1vZHVzIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtb2R1c190YW5wYV9vdXRsaWVycywNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzOiIsIHJvdW5kKG1vZHVzX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtNDUsDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KYGBgDQoNCiMjIyMgQW5hbGlzaXMgTW9kdXMNCg0KTW9kdXMgZGVuZ2FuIE91dGxpZXI6IDY2LDE3DQoNCk1vZHVzIHRhbnBhIE91dGxpZXI6IDY2LDE3DQoNCipJbnRlcnByZXRhc2k6Kg0KDQpOaWxhaSBtb2R1cyBtZW51bmp1a2thbiBuaWxhaSB5YW5nIHBhbGluZyBzZXJpbmcgbXVuY3VsIGRhbGFtIGRpc3RyaWJ1c2kgZGF0YS4gRGFsYW0ga2FzdXMgaW5pLCBiYWlrIGRlbmdhbiBhdGF1IHRhbnBhIG91dGxpZXIsIG1vZHVzIHRldGFwIGJlcmFkYSBwYWRhIG5pbGFpIDY2LDE3LiBJbmkga2FyZW5hIGtlbGFzIGRlbmdhbiBmcmVrdWVuc2kgdGVydGluZ2dpICg2MC02OSkgdGV0YXAgbWVuamFkaSBrZWxhcyBtb2R1cyBiYWlrIHNlYmVsdW0gbWF1cHVuIHNldGVsYWggcGVuZ2hhcHVzYW4gaW50ZXJ2YWwga2VsYXMgMzAgLSAzOS4gTWVza2lwdW4ga2VsYXMgMzAgLSAzOSBtZW1pbGlraSBmcmVrdWVuc2kgeWFuZyBzYW5nYXQgcmVuZGFoIGRhbiBkYXBhdCBkaWFuZ2dhcCBzZWJhZ2FpIG91dGxpZXIsIHBlbmdoYXB1c2FuIGtlbGFzIGluaSB0aWRhayBtZW1wZW5nYXJ1aGkgaGFzaWwgcGVyaGl0dW5nYW4gbW9kdXMgc2VjYXJhIHNpZ25pZmlrYW4uDQoNCipQZW5nYXJ1aCB0ZXJoYWRhcCBLYXN1czoqDQoNCk1vZHVzIGluaSBtZW51bmp1a2thbiBiYWh3YSBuaWxhaSB1amlhbiB5YW5nIHBhbGluZyBzZXJpbmcgZGl0ZW11aSBkaSBrYWxhbmdhbiBtYWhhc2lzd2EgYWRhbGFoIGRpIHJlbnRhbmcgNjAgLSA2OS4gQXJ0aW55YSwgc2ViYWdpYW4gYmVzYXIgbWFoYXNpc3dhIG1lbXBlcm9sZWggbmlsYWkgeWFuZyBiZXJhZGEgZGkga2lzYXJhbiB0ZXJzZWJ1dCwgeWFuZyBtZW5jZXJtaW5rYW4ga29uc2VudHJhc2kgdGluZ2dpIGRpIGtlbG9tcG9rIG5pbGFpIHNlZGFuZy4gUGVuZ2hhcHVzYW4ga2VsYXMgZGVuZ2FuIGZyZWt1ZW5zaSByZW5kYWggKDMwIC0gMzkpIHRpZGFrIG1lbmd1YmFoIGRpc3RyaWJ1c2kgbWF5b3JpdGFzIGRhdGEsIHlhbmcgdGV0YXAgbWVudW5qdWtrYW4gYmFod2EgbWF5b3JpdGFzIG1haGFzaXN3YSBiZXJhZGEgZGFsYW0ga2F0ZWdvcmkgbmlsYWkgbWVuZW5nYWguDQoNCiMgUHJha3Rpa3VtIDINCg0KQ29udG9oIHNlZGVyaGFuYSB5YW5nIG1lbmdndW5ha2FuIHVrdXJhbiBwZW11c2F0YW4gZGF0YSBkYWxhbSBzdHVkaSBrYXN1cw0KDQojIyBCaXNuaXMNCg0KU2VidWFoIHBlcnVzYWhhYW4gaW5naW4gbWVuZ2FuYWxpc2lzIGRpc3RyaWJ1c2kgZ2FqaSBidWxhbmFuIGthcnlhd2FuIG1lcmVrYSB1bnR1ayBtZW1haGFtaSByZW50YW5nIGdhamkgeWFuZyBwYWxpbmcgdW11bSBkaXRlcmltYSBkaSBwZXJ1c2FoYWFuIHRlcnNlYnV0LiBEYXRhIGluaSBha2FuIG1lbWJhbnR1IHBlcnVzYWhhYW4gZGFsYW0gbWVsYWt1a2FuIHBlcmVuY2FuYWFuIGtlYmlqYWthbiBnYWppIGRhbiBtZW5lbnR1a2FuIGFwYWthaCBzdHJ1a3R1ciBnYWppIHlhbmcgYWRhIHBlcmx1IGRpc2VzdWFpa2FuIHVudHVrIG1lbmFyaWsgZGFuIG1lbXBlcnRhaGFua2FuIHRhbGVudGEgdGVyYmFpay4gUGVydXNhaGFhbiBtZW5nZWxvbXBva2thbiBkYXRhIGdhamkgYnVsYW5hbiBrYXJ5YXdhbiBkYWxhbSBiZWJlcmFwYSByZW50YW5nIGdhamksIHNlcGVydGkgYmVyaWt1dDoNCg0KfCBSZW50YW5nIEdhamkgICAgfCBKdW1sYWggS2FyeWF3YW4gKGYpIHwNCnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICQwIC0gJDk5OSAgICAgICB8IDggICAgICAgICAgICAgICAgICAgfA0KfCAkMTAwMCAtICQxOTk5ICAgfCAxNSAgICAgICAgICAgICAgICAgIHwNCnwgJDIwMDAgLSAkMjk5OSAgIHwgMjUgICAgICAgICAgICAgICAgICB8DQp8ICQzMDAwIC0gJDM5OTkgICB8IDIwICAgICAgICAgICAgICAgICAgfA0KfCAkNDAwMCAtICQ0OTk5ICAgfCAxMCAgICAgICAgICAgICAgICAgIHwNCnwgJDUwMDAgLSAkNTk5OSAgIHwgNSAgICAgICAgICAgICAgICAgICB8DQoNCkdhamkgJDUwMDAgLSAkNTk5OSBkaWFuZ2dhcCBzZWJhZ2FpIG91dGxpZXIga2FyZW5hIGZyZWt1ZW5zaW55YSBqYXVoIGxlYmloIHJlbmRhaCBkaWJhbmRpbmdrYW4gZGVuZ2FuIHJlbnRhbmcgZ2FqaSBsYWlubnlhLCBkYW4gYW5na2FueWEgamF1aCBsZWJpaCB0aW5nZ2kgZGliYW5kaW5na2FuIGRlbmdhbiBzZWJhZ2lhbiBiZXNhciBkYXRhLCB5YW5nIG1lbmNpcHRha2FuIGtldGlkYWtzZWltYmFuZ2FuIGRhbGFtIGRpc3RyaWJ1c2kgZ2FqaSBzZWNhcmEga2VzZWx1cnVoYW4uIE1ha2EgZGF0YSB0YW5wYSBvdXRsaWVyLCBzZXBlcnRpIGJlcmlrdXQ6DQoNCnwgUmVudGFuZyBHYWppICAgIHwgSnVtbGFoIEthcnlhd2FuIChmKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAkMCAtICQ5OTkgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgIHwNCnwgJDEwMDAgLSAkMTk5OSAgIHwgMTUgICAgICAgICAgICAgICAgICB8DQp8ICQyMDAwIC0gJDI5OTkgICB8IDI1ICAgICAgICAgICAgICAgICAgfA0KfCAkMzAwMCAtICQzOTk5ICAgfCAyMCAgICAgICAgICAgICAgICAgIHwNCnwgJDQwMDAgLSAkNDk5OSAgIHwgMTAgICAgICAgICAgICAgICAgICB8DQoNCiMjIyBNZWFuIGRlbmdhbiBPdXRsaWVyDQoNCjEuTWVuZW50dWthbiBuaWxhaSB0ZW5nYWggKCR4X2kkKQ0KDQoqIEludGVydmFsICQwIC0gJDk5OSA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7LTAsNSs5OTksNX17Mn09NDk5LDUkDQoNCiogSW50ZXJ2YWwgICQxMDAwIC0gJDE5OTkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezk5OSw1KzE5OTksNX17Mn09MTQ5OSw1JA0KDQoqIEludGVydmFsICQyMDAwIC0gJDI5OTkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezE5OTksNSsyOTk5LDV9ezJ9PTI0OTksNSQNCg0KKiBJbnRlcnZhbCAkMzAwMCAtICQzOTk5IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHsyOTk5LDUrMzk5OSw1fXsyfT0zNDk5LDUkDQoNCiogSW50ZXJ2YWwgJDQwMDAgLSAkNDk5OSA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7Mzk5OSw1KzQ5OTksNX17Mn09NDQ5OSw1JA0KDQoqIEludGVydmFsICQ1MDAwIC0gJDU5OTkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezQ5OTksNSs1OTk5LDV9ezJ9PTU0OTksNSQNCg0KfCBSZW50YW5nIEdhamkgICAgICAgfCBGcmVrdWVuc2kgKGYpIHwgTmlsYWkgVGVuZ2FoICh4X2kpIHwgDQp8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAkMCAtICQ5OTkgICAgICAgICAgfCA4ICAgICAgICAgICAgIHwgNDk5LjUgICAgICAgICAgICAgIHwNCnwgJDEwMDAgLSAkMTk5OSAgICAgIHwgMTUgICAgICAgICAgICB8IDE0OTkuNSAgICAgICAgICAgICB8IA0KfCAkMjAwMCAtICQyOTk5ICAgICAgfCAyNSAgICAgICAgICAgIHwgMjQ5OS41ICAgICAgICAgICAgIHwNCnwgJDMwMDAgLSAkMzk5OSAgICAgIHwgMjAgICAgICAgICAgICB8IDM0OTkuNSAgICAgICAgICAgICB8DQp8ICQ0MDAwIC0gJDQ5OTkgICAgICB8IDEwICAgICAgICAgICAgfCA0NDk5LjUgICAgICAgICAgICAgfA0KfCAkNTAwMCAtICQ1OTk5ICAgICAgfCA1ICAgICAgICAgICAgIHwgNDQ5OS41ICAgICAgICAgICAgfA0KDQoyLiBNZW5na2FsaWthbiBmcmVrdWVuc2kgZGVuZ2FuIG5pbGFpIHRlbmdhaCAoJGYgXGNkb3QgeF9pJCkNCg0KKiBJbnRlcnZhbCAkMCAtICQ5OTkgOiAkZiBcY2RvdCB4X2k9IDggXGNkb3QgNDk5LjU9IDM5OTYkDQoNCiogSW50ZXJ2YWwgJDEwMDAgLSAkMTk5OSA6ICRmIFxjZG90IHhfaT0gMTUgXGNkb3QgMTQ5OS41PSAyMjQ5Mi41JA0KDQoqIEludGVydmFsICQyMDAwIC0gJDI5OTkgOiAkZiBcY2RvdCB4X2k9IDI1IFxjZG90IDI0OTkuNT0gNjI0ODcuNSQNCg0KKiBJbnRlcnZhbCAkMzAwMCAtICQzOTk5IDogJGYgXGNkb3QgeF9pPSAyMCBcY2RvdCAzNDk5LjU9IDY5OTkwJA0KDQoqIEludGVydmFsICQ0MDAwIC0gJDQ5OTkgOiAkZiBcY2RvdCB4X2k9IDEwIFxjZG90IDQ0OTkuNT0gNDQ5OTUkDQoNCiogSW50ZXJ2YWwgJDUwMDAgLSAkNTk5OSA6ICRmIFxjZG90IHhfaT0gNSBcY2RvdCA0NDk5LjU9IDI3NDk3LjUkDQoNCnwgUmVudGFuZyBHYWppICAgICAgIHwgRnJla3VlbnNpIChmKSB8IE5pbGFpIFRlbmdhaCAoeF9pKSB8IFwoIGZfaSBcY2RvdCB4X2kgXCkgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAkMCAtICQ5OTkgICAgICAgICAgfCA4ICAgICAgICAgICAgIHwgNDk5LjUgICAgICAgICAgICAgIHwgMzk5NiAgICAgICAgICAgICAgICAgfA0KfCAkMTAwMCAtICQxOTk5ICAgICAgfCAxNSAgICAgICAgICAgIHwgMTQ5OS41ICAgICAgICAgICAgIHwgMjI0OTIuNSAgICAgICAgICAgICAgfA0KfCAkMjAwMCAtICQyOTk5ICAgICAgfCAyNSAgICAgICAgICAgIHwgMjQ5OS41ICAgICAgICAgICAgIHwgNjI0ODcuNSAgICAgICAgICAgICAgfA0KfCAkMzAwMCAtICQzOTk5ICAgICAgfCAyMCAgICAgICAgICAgIHwgMzQ5OS41ICAgICAgICAgICAgIHwgNjk5OTAgICAgICAgICAgICAgICAgfA0KfCAkNDAwMCAtICQ0OTk5ICAgICAgfCAxMCAgICAgICAgICAgIHwgNDQ5OS41ICAgICAgICAgICAgIHwgNDQ5OTUgICAgICAgICAgICAgICAgfA0KfCAkNTAwMCAtICQ1OTk5ICAgICAgfCA1ICAgICAgICAgICAgIHwgNTQ5OS41ICAgICAgICAgICAgIHwgMjc0OTcuNSAgICAgICAgICAgICAgfA0KDQozLiBNZW5naGl0dW5nIGp1bWxhaCB0b3RhbCBkYXJpIHBlcmthbGlhbiBmcmVrdWVuc2kgZGVuZ2FuIG5pbGFpIHRlbmdhaCAoJOKIkWYgXGNkb3QgeF9pJCkNCiQk4oiRZiBcY2RvdCB4X2k9Mzk5NisyMjQ5Mi41KzYyNDg3LjUrNjk5OTArNDQ5OTUrMjc0OTcuNT0yMzE0NTgsNSQkDQoNCjQuIE1lbmdoaXR1bmcganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSAo4oiRZikNCiQk4oiRZj04KzE1KzI1KzIwKzEwKzU9ODMkJA0KDQo1LiBNZW1hc3Vra2FuIGtlIGRhbGFtIHJ1bXVzDQokJFxiYXJ7WH0gPSBcZnJhYyB74oiRZiBcY2RvdCB4X2l9e+KIkWZ9PSBcZnJhYyB7MjMxNDU4LDV9ezgzfT0yNzg4LDY1JCQNCg0KDQojIyMgTWVhbiB0YW5wYSBPdXRsaWVyDQoNCjEuTWVuZW50dWthbiBuaWxhaSB0ZW5nYWggKCR4X2kkKQ0KDQoqIEludGVydmFsICQwIC0gJDk5OSA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7LTAsNSs5OTksNX17Mn09NDk5LDUkDQoNCiogSW50ZXJ2YWwgICQxMDAwIC0gJDE5OTkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezk5OSw1KzE5OTksNX17Mn09MTQ5OSw1JA0KDQoqIEludGVydmFsICQyMDAwIC0gJDI5OTkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezE5OTksNSsyOTk5LDV9ezJ9PTI0OTksNSQNCg0KKiBJbnRlcnZhbCAkMzAwMCAtICQzOTk5IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHsyOTk5LDUrMzk5OSw1fXsyfT0zNDk5LDUkDQoNCiogSW50ZXJ2YWwgJDQwMDAgLSAkNDk5OSA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7Mzk5OSw1KzQ5OTksNX17Mn09NDQ5OSw1JA0KDQp8IFJlbnRhbmcgR2FqaSAgICAgICB8IEZyZWt1ZW5zaSAoZikgfCBOaWxhaSBUZW5nYWggKHhfaSkgfCANCnwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICQwIC0gJDk5OSAgICAgICAgICB8IDggICAgICAgICAgICAgfCA0OTkuNSAgICAgICAgICAgICAgfA0KfCAkMTAwMCAtICQxOTk5ICAgICAgfCAxNSAgICAgICAgICAgIHwgMTQ5OS41ICAgICAgICAgICAgIHwgDQp8ICQyMDAwIC0gJDI5OTkgICAgICB8IDI1ICAgICAgICAgICAgfCAyNDk5LjUgICAgICAgICAgICAgfA0KfCAkMzAwMCAtICQzOTk5ICAgICAgfCAyMCAgICAgICAgICAgIHwgMzQ5OS41ICAgICAgICAgICAgIHwNCnwgJDQwMDAgLSAkNDk5OSAgICAgIHwgMTAgICAgICAgICAgICB8IDQ0OTkuNSAgICAgICAgICAgICB8DQoNCjIuIE1lbmdrYWxpa2FuIGZyZWt1ZW5zaSBkZW5nYW4gbmlsYWkgdGVuZ2FoICgkZiBcY2RvdCB4X2kkKSANCg0KKiBJbnRlcnZhbCAkMCAtICQ5OTkgOiAkZiBcY2RvdCB4X2k9IDggXGNkb3QgNDk5LjU9IDM5OTYkDQoNCiogSW50ZXJ2YWwgJDEwMDAgLSAkMTk5OSA6ICRmIFxjZG90IHhfaT0gMTUgXGNkb3QgMTQ5OS41PSAyMjQ5Mi41JA0KDQoqIEludGVydmFsICQyMDAwIC0gJDI5OTkgOiAkZiBcY2RvdCB4X2k9IDI1IFxjZG90IDI0OTkuNT0gNjI0ODcuNSQNCg0KKiBJbnRlcnZhbCAkMzAwMCAtICQzOTk5IDogJGYgXGNkb3QgeF9pPSAyMCBcY2RvdCAzNDk5LjU9IDY5OTkwJA0KDQoqIEludGVydmFsICQ0MDAwIC0gJDQ5OTkgOiAkZiBcY2RvdCB4X2k9IDEwIFxjZG90IDQ0OTkuNT0gNDQ5OTUkDQoNCnwgUmVudGFuZyBHYWppICAgICAgIHwgRnJla3VlbnNpIChmKSB8IE5pbGFpIFRlbmdhaCAoeF9pKSB8IFwoIGZfaSBcY2RvdCB4X2kgXCkgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAkMCAtICQ5OTkgICAgICAgICAgfCA4ICAgICAgICAgICAgIHwgNDk5LjUgICAgICAgICAgICAgIHwgMzk5NiAgICAgICAgICAgICAgICAgfA0KfCAkMTAwMCAtICQxOTk5ICAgICAgfCAxNSAgICAgICAgICAgIHwgMTQ5OS41ICAgICAgICAgICAgIHwgMjI0OTIuNSAgICAgICAgICAgICAgfA0KfCAkMjAwMCAtICQyOTk5ICAgICAgfCAyNSAgICAgICAgICAgIHwgMjQ5OS41ICAgICAgICAgICAgIHwgNjI0ODcuNSAgICAgICAgICAgICAgfA0KfCAkMzAwMCAtICQzOTk5ICAgICAgfCAyMCAgICAgICAgICAgIHwgMzQ5OS41ICAgICAgICAgICAgIHwgNjk5OTAgICAgICAgICAgICAgICAgfA0KfCAkNDAwMCAtICQ0OTk5ICAgICAgfCAxMCAgICAgICAgICAgIHwgNDQ5OS41ICAgICAgICAgICAgIHwgNDQ5OTUgICAgICAgICAgICAgICAgfA0KDQozLiBNZW5naGl0dW5nIGp1bWxhaCB0b3RhbCBkYXJpIHBlcmthbGlhbiBmcmVrdWVuc2kgZGVuZ2FuIG5pbGFpIHRlbmdhaCAoJOKIkWYgXGNkb3QgeF9pJCkNCiQk4oiRZiBcY2RvdCB4X2k9Mzk5NisyMjQ5Mi41KzYyNDg3LjUrNjk5OTArNDQ5OTUgPSAyMDM5NjEkJA0KDQo0LiBNZW5naGl0dW5nIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgKOKIkWYpDQokJOKIkWY9OCsxNSsyNSsyMCsxMD03OCQkDQoNCjUuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMNCiQkXGJhcntYfSA9IFxmcmFjIHviiJFmIFxjZG90IHhfaX174oiRZn09IFxmcmFjIHsyMDM5NjF9ezc4fT0yNjQxLDg4JCQNCg0KIyMjIE1lZGlhbiBkZW5nYW4gT3V0bGllcg0KDQoxLiBNZW5naGl0dW5nIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgKOKIkWYpDQokJOKIkWY9OCsxNSsyNSsyMCsxMCs1PTgzJCQNCg0KMi4gTWVtYmFnaSBqdW1sYWggdG90YWwgZnJla3VlbnNpIGRlbmdhbiAyLg0KJCQgXGZyYWMge+KIkWZ9ezJ9ID0gXGZyYWMgezgzfXsyfSA9IDQxLDUkJA0KDQozLiBNZW5lbnR1a2FuIGZyZWt1ZW5zaSBrdW11bGF0aWYNCg0KfCBSZW50YW5nIEdhamkgICAgfCBKdW1sYWggS2FyeWF3YW4gKGYpIHwgRnJla3VlbnNpIEt1bXVsYXRpZiB8DQp8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgJDAgLSAkOTk5ICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgICAgICAgfA0KfCAkMTAwMCAtICQxOTk5ICAgfCAxNSAgICAgICAgICAgICAgICAgIHwgMjMgICAgICAgICAgICAgICAgICB8DQp8ICQyMDAwIC0gJDI5OTkgICB8IDI1ICAgICAgICAgICAgICAgICAgfCA0OCAgICAgICAgICAgICAgICAgIHwNCnwgJDMwMDAgLSAkMzk5OSAgIHwgMjAgICAgICAgICAgICAgICAgICB8IDY4ICAgICAgICAgICAgICAgICAgfA0KfCAkNDAwMCAtICQ0OTk5ICAgfCAxMCAgICAgICAgICAgICAgICAgIHwgNzggICAgICAgICAgICAgICAgICB8DQp8ICQ1MDAwIC0gJDU5OTkgICB8IDUgICAgICAgICAgICAgICAgICAgfCA4MyAgICAgICAgICAgICAgICAgIHwNCg0KNC4gTWVuZW50dWthbiBrZWxhcyBtZWRpYW4NCg0KS2VsYXMgbWVkaWFuIGFkYWxhaCAkMjAwMCAtICQyOTk5IChmcmVrdWVuc2kga3VtdWxhdGlmIHNlYmVsdW0ga2VsYXMgaW5pIGFkYWxhaCAyMywgZGFuIGt1bXVsYXRpZiBrZWxhcyBpbmkgbWVuY2FwYWkgNDgpLg0KDQo1LiBNZW5lbnR1a2FuIGZyZWt1ZW5zaSBrdW11bGF0aWYgc2ViZWx1bSBrZWxhcyBtZWRpYW4uDQokJGZfaz0gMjMkJA0KDQo2LiBNZW5lbnR1a2FuIGZyZWt1ZW5zaSBrZWxhcyBtZWRpYW4uDQokJGZfbT0gMjUkJA0KDQo3LiBNZW5lbnR1a2FuIHBhbmphbmcgaW50ZXJ2YWwga2VsYXMuDQokJHA9IDEwMDAkJA0KDQo4LiBNZW5lbnR1a2FuIHRlcGkgYmF3YWgga2VsYXMgbWVkaWFuLg0KJCRUX2IgPSAxOTk5LDUkJA0KDQo5LiBNZW1hc3Vra2FuIGtlIGRhbGFtIHJ1bXVzLg0KJCQNCk1fZSA9IFRfYiArIFxmcmFjIHtcZnJhY3viiJFmfXsyfS1mX2t9e2ZfbX0gXGNkb3QgcCA9IDE5OTksNSArIFxmcmFjIHs0MSw1LTIzfXsyNX0gXGNkb3QgMTAwMCA9IDI3MzksNQ0KJCQNCg0KIyMjIE1lZGlhbiB0YW5wYSBPdXRsaWVyDQoNCjEuIE1lbmdoaXR1bmcganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSAo4oiRZikNCiQk4oiRZj04KzE1KzI1KzIwKzEwPTc4JCQNCg0KMi4gTWVtYmFnaSBqdW1sYWggdG90YWwgZnJla3VlbnNpIGRlbmdhbiAyLg0KJCQgXGZyYWMge+KIkWZ9ezJ9ID0gXGZyYWMgezc4fXsyfSA9IDM5JCQNCg0KMy4gTWVuZW50dWthbiBmcmVrdWVuc2kga3VtdWxhdGlmDQoNCnwgUmVudGFuZyBHYWppICAgIHwgSnVtbGFoIEthcnlhd2FuIChmKSB8IEZyZWt1ZW5zaSBLdW11bGF0aWYgfA0KfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICQwIC0gJDk5OSAgICAgICB8IDggICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgIHwNCnwgJDEwMDAgLSAkMTk5OSAgIHwgMTUgICAgICAgICAgICAgICAgICB8IDIzICAgICAgICAgICAgICAgICAgfA0KfCAkMjAwMCAtICQyOTk5ICAgfCAyNSAgICAgICAgICAgICAgICAgIHwgNDggICAgICAgICAgICAgICAgICB8DQp8ICQzMDAwIC0gJDM5OTkgICB8IDIwICAgICAgICAgICAgICAgICAgfCA2OCAgICAgICAgICAgICAgICAgIHwNCnwgJDQwMDAgLSAkNDk5OSAgIHwgMTAgICAgICAgICAgICAgICAgICB8IDc4ICAgICAgICAgICAgICAgICAgfA0KDQo0LiBNZW5lbnR1a2FuIGtlbGFzIG1lZGlhbg0KDQpLZWxhcyBtZWRpYW4gYWRhbGFoICQyMDAwIC0gJDI5OTkgKGZyZWt1ZW5zaSBrdW11bGF0aWYgc2ViZWx1bSBrZWxhcyBpbmkgYWRhbGFoIDIzLCBkYW4ga3VtdWxhdGlmIGtlbGFzIGluaSBtZW5jYXBhaSA0OCkuDQoNCjUuIE1lbmVudHVrYW4gZnJla3VlbnNpIGt1bXVsYXRpZiBzZWJlbHVtIGtlbGFzIG1lZGlhbi4NCiQkZl9rPSAyMyQkDQoNCjYuIE1lbmVudHVrYW4gZnJla3VlbnNpIGtlbGFzIG1lZGlhbi4NCiQkZl9tPSAyNSQkDQoNCjcuIE1lbmVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcy4NCiQkcD0gMTAwMCQkDQoNCjguIE1lbmVudHVrYW4gdGVwaSBiYXdhaCBrZWxhcyBtZWRpYW4uDQokJFRfYiA9IDE5OTksNSQkDQoNCjkuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMuDQokJA0KTV9lID0gVF9iICsgXGZyYWMge1xmcmFje+KIkWZ9ezJ9LWZfa317Zl9tfSBcY2RvdCBwID0gMTk5OSw1ICsgXGZyYWMgezM5LTIzfXsyNX0gXGNkb3QgMTAwMCA9IDI2MzksNQ0KJCQNCg0KIyMjIE1vZHVzIGRlbmdhbiBPdXRsaWVyIA0KDQoxLiBNZW5naWRlbnRpZmlrYXNpIGtlbGFzIG1vZHVzDQoNCktlbGFzIG1vZHVzIGFkYWxhaCAkMjAwMCAtICQyOTk5IGthcmVuYSBtZW1pbGlraSBmcmVrdWVuc2kgdGVydGluZ2dpIHlhaXR1IDI1IA0KDQoyLiBNZW5lbnR1a2FuIHRlcGkgYmF3YWgga2VsYXMgbW9kdXMNCiQkIFRfYiA9IDE5OTksNSAkJA0KDQozLiBNZW5lbnR1a2FuICRkXzEkDQokJCBkXzEgPSAyNS0xNSA9IDEwJCQNCg0KNC4gTWVuZW50dWthbiAkZF8yJA0KJCQgZF8yID0gMjUtMjAgPSA1JCQNCg0KNS4gTWVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcw0KJCRwPSAxMDAwJCQNCg0KNi4gTWVtYXN1a2thbiBrZSBkYWxhbSBydW11cw0KJCQNCk1fbyA9IFRfYiArIFxmcmFjIHtkXzF9IHtkXzErZF8yfSBcY2RvdCBwPSAxOTk5LDUgKyBcZnJhYyB7MTB9ezEwKzV9IFxjZG90IDEwMDAgPSAyNjY2LDE3DQokJA0KDQojIyMgTW9kdXMgdGFucGEgT3V0bGllcg0KDQoxLiBNZW5naWRlbnRpZmlrYXNpIGtlbGFzIG1vZHVzDQoNCktlbGFzIG1vZHVzIGFkYWxhaCAkMjAwMCAtICQyOTk5IGthcmVuYSBtZW1pbGlraSBmcmVrdWVuc2kgdGVydGluZ2dpIHlhaXR1IDI1IA0KDQoyLiBNZW5lbnR1a2FuIHRlcGkgYmF3YWgga2VsYXMgbW9kdXMNCiQkIFRfYiA9IDE5OTksNSAkJA0KDQozLiBNZW5lbnR1a2FuICRkXzEkDQokJCBkXzEgPSAyNS0xNSA9IDEwJCQNCg0KNC4gTWVuZW50dWthbiAkZF8yJA0KJCQgZF8yID0gMjUtMjAgPSA1JCQNCg0KNS4gTWVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcw0KJCRwPSAxMDAwJCQNCg0KNi4gTWVtYXN1a2thbiBrZSBkYWxhbSBydW11cw0KJCQNCk1fbyA9IFRfYiArIFxmcmFjIHtkXzF9IHtkXzErZF8yfSBcY2RvdCBwPSAxOTk5LDUgKyBcZnJhYyB7MTB9ezEwKzV9IFxjZG90IDEwMDAgPSAyNjY2LDE3DQokJA0KDQojIyMgVmlzdWFsaXNhc2kgZGVuZ2FuIEJveHBsb3QNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEga2Vsb21wb2sgKGludGVydmFsIG5pbGFpIGRhbiBmcmVrdWVuc2kpDQpyZW50YW5nX2dhamkgPC0gYygiMCAtIDk5OSIsICIxMDAwIC0gMTk5OSIsICIyMDAwIC0gMjk5OSIsICIzMDAwIC0gMzk5OSIsICI0MDAwIC0gNDk5OSIsICI1MDAwIC0gNTk5OSIpDQpmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIGMoOCwgMTUsIDI1LCAyMCwgMTAsIDUpICAjIERlbmdhbiBvdXRsaWVycw0KZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIGMoOCwgMTUsIDI1LCAyMCwgMTAsMCkgICAgICAjIFRhbnBhIG91dGxpZXJzIChtZW5naGFwdXMga2VsYXMgNTAwMC01OTk5KQ0KDQojIE1lbmdoaXR1bmcgbmlsYWkgdGVuZ2FoICh4X2kpIHVudHVrIHNldGlhcCBpbnRlcnZhbA0KbmlsYWlfdGVuZ2FoIDwtIGMoNDk5LjUsIDE0OTkuNSwgMjQ5OS41LCAzNDk5LjUsIDQ0OTkuNSwgNTQ5OS41KQ0KDQojIE1lbmdoaXR1bmcgdG90YWwgZnJla3VlbnNpDQp0b3RhbF9mcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzKQ0KdG90YWxfZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZ2hpdHVuZyBNZWFuIHVudHVrIGRlbmdhbiBkYW4gdGFucGEgb3V0bGllcnMNCm1lYW5fZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzICogbmlsYWlfdGVuZ2FoKSAvIHRvdGFsX2ZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMNCm1lYW5fdGFucGFfb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyAqIG5pbGFpX3RlbmdhaCkgLyB0b3RhbF9mcmVrdWVuc2lfdGFucGFfb3V0bGllcnMNCg0KIyBNZW5naGl0dW5nIE1lZGlhbiB1bnR1ayBkZW5nYW4gZGFuIHRhbnBhIG91dGxpZXJzDQojIE1lbmdoaXR1bmcgZnJla3VlbnNpIGt1bXVsYXRpZg0KZnJla3VlbnNpX2t1bXVsYXRpZl9kZW5nYW5fb3V0bGllcnMgPC0gY3Vtc3VtKGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQpmcmVrdWVuc2lfa3VtdWxhdGlmX3RhbnBhX291dGxpZXJzIDwtIGN1bXN1bShmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZW50dWthbiBtZWRpYW4NCm1lZGlhbl9kZW5nYW5fb3V0bGllcnMgPC0gMTk5OS41ICsgKCh0b3RhbF9mcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIC8gMiAtIDIzKSAvIDI1KSAqIDEwMDANCm1lZGlhbl90YW5wYV9vdXRsaWVycyA8LSAxOTk5LjUgKyAoKHRvdGFsX2ZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyAvIDIgLSAyMykgLyAyNSkgKiAxMDAwDQoNCiMgTWVuZ2hpdHVuZyBNb2R1cyB1bnR1ayBkZW5nYW4gZGFuIHRhbnBhIG91dGxpZXJzDQojIE1vZHVzIHRlcmphZGkgcGFkYSBpbnRlcnZhbCBkZW5nYW4gZnJla3VlbnNpIHRlcnRpbmdnaSAoZGVuZ2FuIG91dGxpZXJzIGRhbiB0YW5wYSBvdXRsaWVycykNCm1vZHVzX2Rlbmdhbl9vdXRsaWVycyA8LSAxOTk5LjUgKyAoMTAgLyAoMTAgKyA1KSkgKiAxMDAwDQptb2R1c190YW5wYV9vdXRsaWVycyA8LSAxOTk5LjUgKyAoMTAgLyAoMTAgKyA1KSkgKiAxMDAwDQoNCiMgTWVuZ2dhYnVuZ2thbiBkYXRhIGtlIGRhbGFtIHNhdHUgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YV9kZW5nYW5fb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaCwgZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycykNCmRhdGFfdGFucGFfb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaCwgZnJla3VlbnNpX3RhbnBhX291dGxpZXJzKQ0KDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gYyhkYXRhX2Rlbmdhbl9vdXRsaWVycywgZGF0YV90YW5wYV9vdXRsaWVycyksDQogIEtlbG9tcG9rID0gcmVwKGMoIkRlbmdhbiBPdXRsaWVycyIsICJUYW5wYSBPdXRsaWVycyIpLCANCiAgICAgICAgICAgICAgICAgdGltZXMgPSBjKGxlbmd0aChkYXRhX2Rlbmdhbl9vdXRsaWVycyksIGxlbmd0aChkYXRhX3RhbnBhX291dGxpZXJzKSkpDQopDQoNCiMgTWVtYnVhdCBib3hwbG90IG1lbmdndW5ha2FuIFBsb3RseQ0KcGxvdCA8LSBwbG90X2x5KA0KICBkYXRhID0gZGF0YSwgDQogIHkgPSB+TmlsYWksIA0KICBjb2xvciA9IH5LZWxvbXBvaywgDQogIHR5cGUgPSAiYm94IiwgDQogIGJveHBvaW50cyA9ICJhbGwiICAjIE1lbmFtcGlsa2FuIHNlbXVhIHRpdGlrIGRhdGENCikgJT4lIA0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTWVhbiwgTWVkaWFuLCBkYW4gTW9kdXMiLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbWVhbl90YW5wYV9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuOiIsIHJvdW5kKG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbWVkaWFuX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCByb3VuZChtZWRpYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1vZHVzX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNb2R1czoiLCByb3VuZChtb2R1c19kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbW9kdXNfdGFucGFfb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCmBgYA0KDQojIyMgVmlzdWFsaXNhc2kgZGVuZ2FuIEhpc3RvZ3JhbQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YTogSW50ZXJ2YWwgbmlsYWkgZGFuIGZyZWt1ZW5zaQ0KaW50ZXJ2YWwgPC0gYygiMCAtIDk5OSIsICIxMDAwIC0gMTk5OSIsICIyMDAwIC0gMjk5OSIsICIzMDAwIC0gMzk5OSIsICI0MDAwIC0gNDk5OSIsICI1MDAwIC0gNTk5OSIpDQpmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIGMoOCwgMTUsIDI1LCAyMCwgMTAsIDUpICAjIERlbmdhbiBvdXRsaWVycw0KZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIGMoOCwgMTUsIDI1LCAyMCwgMTApICAgICAgIyBUYW5wYSBvdXRsaWVycyAobWVuZ2hhcHVzIGtlbGFzIDUwMDAgLSA1OTk5KQ0KDQojIE1lbmdoaXR1bmcgbmlsYWkgdGVuZ2FoICh4X2kpIHVudHVrIHNldGlhcCBpbnRlcnZhbA0KbmlsYWlfdGVuZ2FoIDwtIGMoNDk5LjUsIDE0OTkuNSwgMjQ5OS41LCAzNDk5LjUsIDQ0OTkuNSwgNTQ5OS41KQ0KDQojIE1lbmdoaXR1bmcgdG90YWwgZnJla3VlbnNpIHVudHVrIGtlZHVhIGRhdGFzZXQNCnRvdGFsX2ZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQp0b3RhbF9mcmVrdWVuc2lfdGFucGFfb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycykNCg0KIyBNZW5naGl0dW5nIHJhdGEtcmF0YSAobWVhbikgdW50dWsga2VkdWEgZGF0YXNldA0KbWVhbl9kZW5nYW5fb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMgKiBuaWxhaV90ZW5nYWgpIC8gdG90YWxfZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycw0KbWVhbl90YW5wYV9vdXRsaWVycyA8LSBzdW0oZnJla3VlbnNpX3RhbnBhX291dGxpZXJzICogbmlsYWlfdGVuZ2FoWzE6NV0pIC8gdG90YWxfZnJla3VlbnNpX3RhbnBhX291dGxpZXJzICAjIEhhbnlhIDUgaW50ZXJ2YWwgdGFucGEgb3V0bGllcnMNCg0KIyBNZW5lbnR1a2FuIG5pbGFpIG1lZGlhbg0KbWVkaWFuX2Rlbmdhbl9vdXRsaWVycyA8LSAyNzM5LjUgICMgTmlsYWkgbWVkaWFuIGRlbmdhbiBvdXRsaWVycw0KbWVkaWFuX3RhbnBhX291dGxpZXJzIDwtIDI2MzkuNSAgICMgTmlsYWkgbWVkaWFuIHRhbnBhIG91dGxpZXJzDQoNCiMgTWVuZW50dWthbiBuaWxhaSBtb2R1cw0KbW9kdXNfZGVuZ2FuX291dGxpZXJzIDwtIDI2NjYuMTcgICMgTmlsYWkgbW9kdXMgeWFuZyBkaWtldGFodWkNCm1vZHVzX3RhbnBhX291dGxpZXJzIDwtIDI2NjYuMTcgICAjIE5pbGFpIG1vZHVzIHlhbmcgZGlrZXRhaHVpDQoNCiMgTWVtYnVhdCBkZW5zaXR5IHBsb3QgdW50dWsgbWFzaW5nLW1hc2luZyBkYXRhc2V0DQojIERhdGEgZGVuZ2FuIG91dGxpZXJzDQpkYXRhX2Rlbmdhbl9vdXRsaWVycyA8LSByZXAobmlsYWlfdGVuZ2FoLCBmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzKQ0KIyBEYXRhIHRhbnBhIG91dGxpZXJzDQpkYXRhX3RhbnBhX291dGxpZXJzIDwtIHJlcChuaWxhaV90ZW5nYWhbMTo1XSwgZnJla3VlbnNpX3RhbnBhX291dGxpZXJzKQ0KDQojIE1lbmdoaXR1bmcgZGVuc2l0eSBwbG90DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KZGVuc2l0eV90YW5wYV9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfdGFucGFfb3V0bGllcnMpDQoNCiMgUGFzdGlrYW4gdGlkYWsgYWRhIG5pbGFpIG5lZ2F0aWYgZGkgeCBkYW4geQ0KZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCA8LSBwbWF4KDAsIGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzJHggPC0gcG1heCgwLCBkZW5zaXR5X3RhbnBhX291dGxpZXJzJHgpDQoNCiMgTWVtYnVhdCBwbG90IG1lbmdndW5ha2FuIFBsb3RseQ0KcGxvdCA8LSBwbG90X2x5KCkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJEZW5nYW4gT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJUYW5wYSBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyByYXRhLXJhdGEgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lYW5fZGVuZ2FuX291dGxpZXJzLCBtZWFuX2Rlbmdhbl9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSAiUmF0YS1yYXRhIChEZW5nYW4gT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyByYXRhLXJhdGEgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVhbl90YW5wYV9vdXRsaWVycywgbWVhbl90YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJSYXRhLXJhdGEgKFRhbnBhIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgTW9kdXMgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1vZHVzX2Rlbmdhbl9vdXRsaWVycywgbW9kdXNfZGVuZ2FuX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9IHBhc3RlKCJNb2R1cyAoRGVuZ2FuIE91dGxpZXJzKToiLCByb3VuZChtb2R1c19kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIE1vZHVzIHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1vZHVzX3RhbnBhX291dGxpZXJzLCBtb2R1c190YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9IHBhc3RlKCJNb2R1cyAoVGFucGEgT3V0bGllcnMpOiIsIHJvdW5kKG1vZHVzX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIGRhc2ggPSAnZG90JykNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiB0ZWtzIHVudHVrIE1lYW4sIE1lZGlhbiwgTW9kdXMgZGVuZ2FuIE91dGxpZXJzDQogIGFkZF9hbm5vdGF0aW9ucygNCiAgICB4ID0gbWVhbl9kZW5nYW5fb3V0bGllcnMsDQogICAgeSA9IG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSAqIDAuOCwNCiAgICB0ZXh0ID0gcGFzdGUoIk1lYW4gKERlbmdhbiBPdXRsaWVycyk6Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgIGFycm93aGVhZCA9IDIsDQogICAgYXggPSA0MCwNCiAgICBheSA9IC0zMCwNCiAgICBmb250ID0gbGlzdChzaXplID0gMTIsIGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknKQ0KICApICU+JQ0KICBhZGRfYW5ub3RhdGlvbnMoDQogICAgeCA9IG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsDQogICAgeSA9IG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSAqIDAuNywNCiAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbiAoRGVuZ2FuIE91dGxpZXJzKToiLCByb3VuZChtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICBhcnJvd2hlYWQgPSAyLA0KICAgIGF4ID0gNDAsDQogICAgYXkgPSAtMzAsDQogICAgZm9udCA9IGxpc3Qoc2l6ZSA9IDEyLCBjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJykNCiAgKSAlPiUNCiAgYWRkX2Fubm90YXRpb25zKA0KICAgIHggPSBtb2R1c19kZW5nYW5fb3V0bGllcnMsDQogICAgeSA9IG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSAqIDAuNiwNCiAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzIChEZW5nYW4gT3V0bGllcnMpOiIsIHJvdW5kKG1vZHVzX2Rlbmdhbl9vdXRsaWVycywgMikpLA0KICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgYXJyb3doZWFkID0gMiwNCiAgICBheCA9IDQwLA0KICAgIGF5ID0gLTMwLA0KICAgIGZvbnQgPSBsaXN0KHNpemUgPSAxMiwgY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gdGVrcyB1bnR1ayBNZWFuLCBNZWRpYW4sIE1vZHVzIHRhbnBhIE91dGxpZXJzDQogIGFkZF9hbm5vdGF0aW9ucygNCiAgICB4ID0gbWVhbl90YW5wYV9vdXRsaWVycywNCiAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjgsDQogICAgdGV4dCA9IHBhc3RlKCJNZWFuIChUYW5wYSBPdXRsaWVycyk6Iiwgcm91bmQobWVhbl90YW5wYV9vdXRsaWVycywgMikpLA0KICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgYXJyb3doZWFkID0gMiwNCiAgICBheCA9IDQwLA0KICAgIGF5ID0gLTMwLA0KICAgIGZvbnQgPSBsaXN0KHNpemUgPSAxMiwgY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScpDQogICkgJT4lDQogIGFkZF9hbm5vdGF0aW9ucygNCiAgICB4ID0gbWVkaWFuX3RhbnBhX291dGxpZXJzLA0KICAgIHkgPSBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSAqIDAuNywNCiAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbiAoVGFucGEgT3V0bGllcnMpOiIsIHJvdW5kKG1lZGlhbl90YW5wYV9vdXRsaWVycywgMikpLA0KICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgYXJyb3doZWFkID0gMiwNCiAgICBheCA9IDQwLA0KICAgIGF5ID0gLTMwLA0KICAgIGZvbnQgPSBsaXN0KHNpemUgPSAxMiwgY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScpDQogICkgJT4lDQogIGFkZF9hbm5vdGF0aW9ucygNCiAgICB4ID0gbW9kdXNfdGFucGFfb3V0bGllcnMsDQogICAgeSA9IG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpICogMC42LA0KICAgIHRleHQgPSBwYXN0ZSgiTW9kdXMgKFRhbnBhIE91dGxpZXJzKToiLCByb3VuZChtb2R1c190YW5wYV9vdXRsaWVycywgMikpLA0KICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgYXJyb3doZWFkID0gMiwNCiAgICBheCA9IDQwLA0KICAgIGF5ID0gLTMwLA0KICAgIGZvbnQgPSBsaXN0KHNpemUgPSAxMiwgY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScpDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQpgYGANCg0KIyMjIEFuYWxpc2lzDQoNCioqTWVhbiAoUmF0YS1yYXRhKSoqDQoNCk1lYW4gZGVuZ2FuIE91dGxpZXI6ICQyNzg4LDY1DQoNCk1lYW4gdGFucGEgT3V0bGllcjogJDI2NDEsODgNCg0KKkludGVycHJldGFzaToqICANCk5pbGFpIG1lYW4gbWVtYmVyaWthbiBnYW1iYXJhbiB0ZW50YW5nIHJhdGEtcmF0YSBnYWppIGJ1bGFuYW4ga2FyeWF3YW4gcGVydXNhaGFhbi4gUGVyYmVkYWFuIGFudGFyYSBtZWFuIGRlbmdhbiBvdXRsaWVyICgyNzg4LDY1KSBkYW4gbWVhbiB0YW5wYSBvdXRsaWVyICgyNjQxLDg4KSBtZW51bmp1a2thbiBiYWh3YSBrZWhhZGlyYW4gcmVudGFuZyBnYWppIHlhbmcgc2FuZ2F0IHRpbmdnaSAoJDUwMDAgLSAkNTk5OSkgeWFuZyBkaXdha2lsaSBvbGVoIHNlZGlraXQga2FyeWF3YW4gKDUgb3JhbmcpIHNlZGlraXQgbWVtcGVuZ2FydWhpIHJhdGEtcmF0YSBnYWppIGtlc2VsdXJ1aGFuLiBNZXNraXB1biBtYXlvcml0YXMga2FyeWF3YW4gbWVtaWxpa2kgZ2FqaSB5YW5nIGxlYmloIHJlbmRhaCwga2ViZXJhZGFhbiBnYWppIHlhbmcgc2FuZ2F0IHRpbmdnaSBpbmkgbWVuZG9yb25nIHJhdGEtcmF0YSBnYWppIGxlYmloIHRpbmdnaS4NCg0KKlBlbmdhcnVoIHRlcmhhZGFwIEthc3VzOiogIA0KSmlrYSBoYW55YSBtZWxpaGF0IG1lYW4gdGFucGEgb3V0bGllciAoMjY0MSw4OCksIHJhdGEtcmF0YSBnYWppIGthcnlhd2FuIGxlYmloIG1lbmNlcm1pbmthbiBkaXN0cmlidXNpIGdhamkgbWF5b3JpdGFzLCB5YW5nIGJlcmFkYSBkaSBiYXdhaCAkMzAwMC4gQXJ0aW55YSwgc2ViYWdpYW4gYmVzYXIga2FyeWF3YW4gbWVuZXJpbWEgZ2FqaSB5YW5nIHJlbGF0aWYgbGViaWggcmVuZGFoIGRpYmFuZGluZ2thbiBkZW5nYW4gbmlsYWkgcmF0YS1yYXRhIHlhbmcgdGVyY2F0YXQgc2FhdCBtZW1wZXJ0aW1iYW5na2FuIG91dGxpZXIuIEhhbCBpbmkgZGFwYXQgbWVuamFkaSBiYWhhbiBwZXJ0aW1iYW5nYW4gYmFnaSBwZXJ1c2FoYWFuIGRhbGFtIG1lcmFuY2FuZyBrZWJpamFrYW4gZ2FqaSBhZ2FyIGxlYmloIGFkaWwgZGFuIG1lcmF0YS4NCg0KKipNZWRpYW4qKg0KDQpNZWRpYW4gZGVuZ2FuIE91dGxpZXI6ICQyNzM5LDUNCg0KTWVkaWFuIHRhbnBhIE91dGxpZXI6ICQyNjM5LDUNCg0KKkludGVycHJldGFzaToqICANCk1lZGlhbiBtZW51bmp1a2thbiBuaWxhaSB0ZW5nYWggZGFyaSBkaXN0cmlidXNpIGdhamkuIERhbGFtIGhhbCBpbmksIHBlcmJlZGFhbiBhbnRhcmEgbWVkaWFuIGRlbmdhbiBvdXRsaWVyICgyNzM5LDUpIGRhbiBtZWRpYW4gdGFucGEgb3V0bGllciAoMjYzOSw1KSByZWxhdGlmIGtlY2lsLCBtZW51bmp1a2thbiBiYWh3YSBrZWhhZGlyYW4gZ2FqaSB0aW5nZ2kgdGlkYWsgdGVybGFsdSBtZW1wZW5nYXJ1aGkgbmlsYWkgdGVuZ2FoIGRpc3RyaWJ1c2kuIEluaSBtZW51bmp1a2thbiBiYWh3YSBzZWJhZ2lhbiBiZXNhciBrYXJ5YXdhbiBtZW1pbGlraSBnYWppIGRpIGJhd2FoICQzMDAwLCBtZXNraXB1biBhZGEgc2VqdW1sYWgga2VjaWwga2FyeWF3YW4geWFuZyBtZW5lcmltYSBnYWppIGphdWggbGViaWggdGluZ2dpLg0KDQoqUGVuZ2FydWggdGVyaGFkYXAgS2FzdXM6KiAgDQpOaWxhaSBtZWRpYW4geWFuZyBkZWthdCBkZW5nYW4gJDI3MDAgbWVudW5qdWtrYW4gYmFod2Egc2VwYXJ1aCBiZXNhciBrYXJ5YXdhbiBtZW1pbGlraSBnYWppIHlhbmcgdGlkYWsgamF1aCBkYXJpIGFuZ2thIHRlcnNlYnV0LCB5YW5nIG1lbnVuanVra2FuIHN0cnVrdHVyIGdhamkgeWFuZyBjdWt1cCBrb25zaXN0ZW4gZGkgYmF3YWggJDMwMDAuIE9sZWgga2FyZW5hIGl0dSwgcGVydXNhaGFhbiBtdW5na2luIHBlcmx1IG1lbmdldmFsdWFzaSBrZW1iYWxpIHJlbnRhbmcgZ2FqaSB1bnR1ayBtZW1hc3Rpa2FuIGtlYmVyYWdhbWFuIGtvbXBlbnNhc2kgeWFuZyBsZWJpaCBiYWlrIGRhbiBsZWJpaCBtZW5hcmlrIGJhZ2kgdGFsZW50YSB0ZXJiYWlrLg0KDQoqKk1vZHVzKioNCg0KTW9kdXMgZGVuZ2FuIE91dGxpZXI6ICQyNjY2LDE3DQoNCk1vZHVzIHRhbnBhIE91dGxpZXI6ICQyNjY2LDE3DQoNCipJbnRlcnByZXRhc2k6KiAgDQpNb2R1cyBhZGFsYWggbmlsYWkgeWFuZyBwYWxpbmcgc2VyaW5nIG11bmN1bCBkYWxhbSBkaXN0cmlidXNpIGdhamkuIERhbGFtIGhhbCBpbmksIGtlbGFzIGdhamkgeWFuZyBtZW1pbGlraSBmcmVrdWVuc2kgdGVydGluZ2dpIGFkYWxhaCAkMjAwMCAtICQyOTk5LCBkZW5nYW4gMjUga2FyeWF3YW4uIEJhaWsgZGVuZ2FuIG1hdXB1biB0YW5wYSBvdXRsaWVyLCBtb2R1cyB0ZXRhcCBiZXJhZGEgcGFkYSByZW50YW5nIGdhamkgaW5pLCB5YW5nIG1lbmVnYXNrYW4gYmFod2Egc2ViYWdpYW4gYmVzYXIga2FyeWF3YW4gYmVyYWRhIGRhbGFtIGtpc2FyYW4gZ2FqaSB0ZXJzZWJ1dC4NCg0KKlBlbmdhcnVoIHRlcmhhZGFwIEthc3VzOiogIA0KS2FyZW5hIG1vZHVzIG1lbnVuanVra2FuIG5pbGFpIHBhbGluZyB1bXVtIGF0YXUgc2VyaW5nIG11bmN1bCwgbWFrYSBkaXN0cmlidXNpIGdhamkgeWFuZyBwYWxpbmcgc2VyaW5nIGFkYWxhaCBkaSBraXNhcmFuICQyMDAwIC0gJDI5OTkuIEluaSBtZW51bmp1a2thbiBiYWh3YSBtYXlvcml0YXMga2FyeWF3YW4gbWVtaWxpa2kgZ2FqaSB5YW5nIGxlYmloIHJlbmRhaCwgZGFuIHBlcnVzYWhhYW4gbXVuZ2tpbiBwZXJsdSBtZW1wZXJ0aW1iYW5na2FuIHVudHVrIG1lbnllc3VhaWthbiBzdHJ1a3R1ciBnYWppIGFnYXIgbGViaWgga29tcGV0aXRpZiwgdGVydXRhbWEgZGkgbHVhciByZW50YW5nIGluaS4NCg0KIyMgS2VzZWhhdGFuDQoNClNlb3JhbmcgcGVuZWxpdGkgaW5naW4gbWVuZ2FuYWxpc2lzIGRpc3RyaWJ1c2kgSW5kZWtzIE1hc3NhIFR1YnVoIChJTVQpIHBhZGEgcG9wdWxhc2kgZGV3YXNhIGRpIHNlYnVhaCB3aWxheWFoLiBQZW5lbGl0aWFuIGluaSBiZXJ0dWp1YW4gdW50dWsgbWVtYWhhbWkgcG9sYSBkaXN0cmlidXNpIElNVCBzZXJ0YSBtZW5naWRlbnRpZmlrYXNpIGtlbG9tcG9rIHlhbmcgbXVuZ2tpbiBiZXJpc2lrbyBtZW5nYWxhbWkgb2Jlc2l0YXMuIERhdGEgSU1UIGRpa3VtcHVsa2FuIGRhcmkgMTk1IGluZGl2aWR1IGRhbiBkaWtlbG9tcG9ra2FuIGRhbGFtIGludGVydmFsIElNVCBtZW1pbGlraSBrYXRlZ29yaSBrYXRlZ29yaSBzZW5kaXJpIHRlcmhhZGFwIGludGVydmFsIElNVCBueWEgeWFpdHUgOg0KDQp8IEludGVydmFsIElNVCAoa2cvbcKyKSB8IEthdGVnb3JpICAgICAgICAgICAgfCANCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgMTUuMCAtIDE4LjQgICAgICAgICAgfCBCZXJhdCBiYWRhbiBrdXJhbmcgIHwgDQp8IDE4LjUgLSAyNC45ICAgICAgICAgIHwgTm9ybWFsICAgICAgICAgICAgICB8IA0KfCAyNS4wIC0gMjkuOSAgICAgICAgICB8IEJlcmF0IGJhZGFuIGxlYmloICAgfCANCnwgMzAuMCAtIDM0LjkgICAgICAgICAgfCBPYmVzaXRhcyBJICAgICAgICAgIHwgDQp8IDM1LjAgLSAzOS45ICAgICAgICAgIHwgT2Jlc2l0YXMgSUkgICAgICAgICB8DQp8IDQwLjAgLSA0NC45ICAgICAgICAgIHwgT2Jlc2l0YXMgSUlJICAgICAgICB8IA0KDQpEYXRhIElNVCBkYXJpIDE5NSBpbmRpdmlkdSB5YWl0dSBzZWJhZ2FpIGJlcmlrdXQ6DQoNCnwgSW50ZXJ2YWwgSU1UIChrZy9twrIpIHwgRnJla3VlbnNpIChcKGZcKSkgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDE1LjAgLSAxOC40ICAgICAgICAgICB8IDEwICAgICAgICAgICAgICAgIHwNCnwgMTguNSAtIDI0LjkgICAgICAgICAgIHwgNjAgICAgICAgICAgICAgICAgfA0KfCAyNS4wIC0gMjkuOSAgICAgICAgICAgfCA1MCAgICAgICAgICAgICAgICB8DQp8IDMwLjAgLSAzNC45ICAgICAgICAgICB8IDQwICAgICAgICAgICAgICAgIHwNCnwgMzUuMCAtIDM5LjkgICAgICAgICAgIHwgMzAgICAgICAgICAgICAgICAgfA0KfCA0MC4wIC0gNDQuOSAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICB8DQoNCkludGVydmFsIDQwLjAgLSA0NC45IGRpYW5nZ2FwIHNlYmFnYWkgb3V0bGllciBrYXJlbmEgZnJla3VlbnNpbnlhIHlhbmcgc2FuZ2F0IHJlbmRhaCAoNSksIHlhbmcgbWVudW5qdWtrYW4gYmFod2Egc2FuZ2F0IHNlZGlraXQgaW5kaXZpZHUgeWFuZyBtZW1pbGlraSBJTVQgZGFsYW0gcmVudGFuZyB0ZXJzZWJ1dCwgc2VydGEgcG9zaXNpbnlhIHlhbmcgamF1aCBsZWJpaCB0aW5nZ2kgZGliYW5kaW5na2FuIGludGVydmFsIGxhaW5ueWEuDQoNCnwgSW50ZXJ2YWwgSU1UIChrZy9twrIpIHwgRnJla3VlbnNpIChcKGZcKSkgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDE1LjAgLSAxOC40ICAgICAgICAgICB8IDEwICAgICAgICAgICAgICAgIHwNCnwgMTguNSAtIDI0LjkgICAgICAgICAgIHwgNjAgICAgICAgICAgICAgICAgfA0KfCAyNS4wIC0gMjkuOSAgICAgICAgICAgfCA1MCAgICAgICAgICAgICAgICB8DQp8IDMwLjAgLSAzNC45ICAgICAgICAgICB8IDQwICAgICAgICAgICAgICAgIHwNCnwgMzUuMCAtIDM5LjkgICAgICAgICAgIHwgMzAgICAgICAgICAgICAgICAgfA0KDQojIyMgTWVhbiBkZW5nYW4gT3V0bGllcg0KDQoxLk1lbmVudHVrYW4gbmlsYWkgdGVuZ2FoICgkeF9pJCkNCg0KKiBJbnRlcnZhbCAxNS4wIC0gMTguNCA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7MTQsNSsxOCw5fXsyfT0xNiw3JA0KDQoqIEludGVydmFsIDE4LjUgLSAyNC45IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHsxOCsyNSw0fXsyfT0yMSw3JA0KDQoqIEludGVydmFsIDI1LjAgLSAyOS45IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHsyNCw1KzMwLDR9ezJ9PTI3LDQ1JA0KDQoqIEludGVydmFsIDMwLjAgLSAzNC45IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHsyOSw1KzM1LDR9ezJ9PTMyLDQ1JA0KDQoqIEludGVydmFsIDM1LjAgLSAzOS45IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHszNCw1KzQwLDR9ezJ9PTM3LDQ1JA0KDQoqIEludGVydmFsIDQwLjAgLSA0NC45IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHszOSw1KzQ1LDR9ezJ9PTQyLDQ1JA0KDQp8IEludGVydmFsIElNVCAoa2cvbcKyKSB8IEZyZWt1ZW5zaSAoZikgfCBOaWxhaSBUZW5nYWggKHjhtaIpIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAxNS4wIC0gMTguNCAgICAgICAgICB8IDEwICAgICAgICAgICAgfCAxNi43ICAgICAgICAgICAgICB8DQp8IDE4LjUgLSAyNC45ICAgICAgICAgIHwgNjAgICAgICAgICAgICB8IDIxLjcgICAgICAgICAgICAgIHwNCnwgMjUuMCAtIDI5LjkgICAgICAgICAgfCA1MCAgICAgICAgICAgIHwgMjcuNDUgICAgICAgICAgICAgfA0KfCAzMC4wIC0gMzQuOSAgICAgICAgICB8IDQwICAgICAgICAgICAgfCAzMi40NSAgICAgICAgICAgICB8DQp8IDM1LjAgLSAzOS45ICAgICAgICAgIHwgMzAgICAgICAgICAgICB8IDM3LjQ1ICAgICAgICAgICAgIHwNCnwgNDAuMCAtIDQ0LjkgICAgICAgICAgfCA1ICAgICAgICAgICAgIHwgNDIuNDUgICAgICAgICAgICAgfA0KDQoyLiBNZW5na2FsaWthbiBmcmVrdWVuc2kgZGVuZ2FuIG5pbGFpIHRlbmdhaCAoJGYgXGNkb3QgeF9pJCkNCg0KKiBJbnRlcnZhbCAxNS4wIC0gMTguNCA6ICRmIFxjZG90IHhfaT0gMTAgXGNkb3QgMTYsNz0gMTY3JA0KDQoqIEludGVydmFsIDE4LjUgLSAyNC45IDogJGYgXGNkb3QgeF9pPSA2MCBcY2RvdCAyMSw3PSAxMzAyJA0KDQoqIEludGVydmFsIDI1LjAgLSAyOS45IDogJGYgXGNkb3QgeF9pPSA1MCBcY2RvdCAyNyw0NT0gMTM3Miw1JA0KDQoqIEludGVydmFsIDMwLjAgLSAzNC45IDogJGYgXGNkb3QgeF9pPSA0MCBcY2RvdCAzMiw0NT0gMTI5OCQNCg0KKiBJbnRlcnZhbCAzNS4wIC0gMzkuOSA6ICRmIFxjZG90IHhfaT0gMzAgXGNkb3QgMzcsNDU9IDExMjMsNSQNCg0KKiBJbnRlcnZhbCA0MC4wIC0gNDQuOSA6ICRmIFxjZG90IHhfaT0gNSBcY2RvdCA0Miw0NT0gMjEyLDI1JA0KDQp8IEludGVydmFsIElNVCAoa2cvbcKyKSB8IEZyZWt1ZW5zaSAoZikgfCBOaWxhaSBUZW5nYWggKHjhtaIpIHwgXCggZiBcY2RvdCB4X2kgXCkgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgMTUuMCAtIDE4LjQgICAgICAgICAgIHwgMTAgICAgICAgICAgICB8IDE2LjcgICAgICAgICAgICAgIHwgMTY3ICAgICAgICAgICAgICAgIHwNCnwgMTguNSAtIDI0LjkgICAgICAgICAgIHwgNjAgICAgICAgICAgICB8IDIxLjcgICAgICAgICAgICAgIHwgMTMwMiAgICAgICAgICAgICAgIHwNCnwgMjUuMCAtIDI5LjkgICAgICAgICAgIHwgNTAgICAgICAgICAgICB8IDI3LjQ1ICAgICAgICAgICAgIHwgMTM3Mi41ICAgICAgICAgICAgIHwNCnwgMzAuMCAtIDM0LjkgICAgICAgICAgIHwgNDAgICAgICAgICAgICB8IDMyLjQ1ICAgICAgICAgICAgIHwgMTI5OCAgICAgICAgICAgICAgIHwNCnwgMzUuMCAtIDM5LjkgICAgICAgICAgIHwgMzAgICAgICAgICAgICB8IDM3LjQ1ICAgICAgICAgICAgIHwgMTEyMy41ICAgICAgICAgICAgIHwNCnwgNDAuMCAtIDQ0LjkgICAgICAgICAgIHwgNSAgICAgICAgICAgICB8IDQyLjQ1ICAgICAgICAgICAgIHwgMjEyLjI1ICAgICAgICAgICAgIHwNCg0KMy4gTWVuZ2hpdHVuZyBqdW1sYWggdG90YWwgZGFyaSBwZXJrYWxpYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggKCTiiJFmIFxjZG90IHhfaSQpDQokJOKIkWYgXGNkb3QgeF9pPTE2NysxMzAyKzEzNzIsNSsxMjk4KzExMjMsNSsyMTIsMjU9NTQ3NSwyNSQkDQoNCjQuIE1lbmdoaXR1bmcganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSAo4oiRZikNCiQk4oiRZj0xMCs2MCs1MCs0MCszMCs1PTE5NSQkDQoNCjUuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMNCiQkXGJhcntYfSA9IFxmcmFjIHviiJFmIFxjZG90IHhfaX174oiRZn09IFxmcmFjIHs1NDc1LDI1fXsxOTV9PTI4LDA4JCQNCg0KDQojIyMgTWVhbiB0YW5wYSBPdXRsaWVyDQoNCjEuTWVuZW50dWthbiBuaWxhaSB0ZW5nYWggKCR4X2kkKQ0KDQoqIEludGVydmFsIDE1LjAgLSAxOC40IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHsxNCw1KzE4LDl9ezJ9PTE2LDckDQoNCiogSW50ZXJ2YWwgMTguNSAtIDI0LjkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezE4KzI1LDR9ezJ9PTIxLDckDQoNCiogSW50ZXJ2YWwgMjUuMCAtIDI5LjkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezI0LDUrMzAsNH17Mn09MjcsNDUkDQoNCiogSW50ZXJ2YWwgMzAuMCAtIDM0LjkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezI5LDUrMzUsNH17Mn09MzIsNDUkDQoNCiogSW50ZXJ2YWwgMzUuMCAtIDM5LjkgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezM0LDUrNDAsNH17Mn09MzcsNDUkDQoNCnwgSW50ZXJ2YWwgSU1UIChrZy9twrIpIHwgRnJla3VlbnNpIChmKSB8IE5pbGFpIFRlbmdhaCAoeOG1oikgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDE1LjAgLSAxOC40ICAgICAgICAgIHwgMTAgICAgICAgICAgICB8IDE2LjcgICAgICAgICAgICAgIHwNCnwgMTguNSAtIDI0LjkgICAgICAgICAgfCA2MCAgICAgICAgICAgIHwgMjEuNyAgICAgICAgICAgICAgfA0KfCAyNS4wIC0gMjkuOSAgICAgICAgICB8IDUwICAgICAgICAgICAgfCAyNy40NSAgICAgICAgICAgICB8DQp8IDMwLjAgLSAzNC45ICAgICAgICAgIHwgNDAgICAgICAgICAgICB8IDMyLjQ1ICAgICAgICAgICAgIHwNCnwgMzUuMCAtIDM5LjkgICAgICAgICAgfCAzMCAgICAgICAgICAgIHwgMzcuNDUgICAgICAgICAgICAgfA0KDQoyLiBNZW5na2FsaWthbiBmcmVrdWVuc2kgZGVuZ2FuIG5pbGFpIHRlbmdhaCAoJGYgXGNkb3QgeF9pJCkNCg0KKiBJbnRlcnZhbCAxNS4wIC0gMTguNCA6ICRmIFxjZG90IHhfaT0gMTAgXGNkb3QgMTYsNz0gMTY3JA0KDQoqIEludGVydmFsIDE4LjUgLSAyNC45IDogJGYgXGNkb3QgeF9pPSA2MCBcY2RvdCAyMSw3PSAxMzAyJA0KDQoqIEludGVydmFsIDI1LjAgLSAyOS45IDogJGYgXGNkb3QgeF9pPSA1MCBcY2RvdCAyNyw0NT0gMTM3Miw1JA0KDQoqIEludGVydmFsIDMwLjAgLSAzNC45IDogJGYgXGNkb3QgeF9pPSA0MCBcY2RvdCAzMiw0NT0gMTI5OCQNCg0KKiBJbnRlcnZhbCAzNS4wIC0gMzkuOSA6ICRmIFxjZG90IHhfaT0gMzAgXGNkb3QgMzcsNDU9IDExMjMsNSQNCg0KfCBJbnRlcnZhbCBJTVQgKGtnL23CsikgfCBGcmVrdWVuc2kgKGYpIHwgTmlsYWkgVGVuZ2FoICh44bWiKSB8IFwoIGYgXGNkb3QgeF9pIFwpICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDE1LjAgLSAxOC40ICAgICAgICAgICB8IDEwICAgICAgICAgICAgfCAxNi43ICAgICAgICAgICAgICB8IDE2NyAgICAgICAgICAgICAgICB8DQp8IDE4LjUgLSAyNC45ICAgICAgICAgICB8IDYwICAgICAgICAgICAgfCAyMS43ICAgICAgICAgICAgICB8IDEzMDIgICAgICAgICAgICAgICB8DQp8IDI1LjAgLSAyOS45ICAgICAgICAgICB8IDUwICAgICAgICAgICAgfCAyNy40NSAgICAgICAgICAgICB8IDEzNzIuNSAgICAgICAgICAgICB8DQp8IDMwLjAgLSAzNC45ICAgICAgICAgICB8IDQwICAgICAgICAgICAgfCAzMi40NSAgICAgICAgICAgICB8IDEyOTggICAgICAgICAgICAgICB8DQp8IDM1LjAgLSAzOS45ICAgICAgICAgICB8IDMwICAgICAgICAgICAgfCAzNy40NSAgICAgICAgICAgICB8IDExMjMuNSAgICAgICAgICAgICB8DQoNCjMuIE1lbmdoaXR1bmcganVtbGFoIHRvdGFsIGRhcmkgcGVya2FsaWFuIGZyZWt1ZW5zaSBkZW5nYW4gbmlsYWkgdGVuZ2FoICgk4oiRZiBcY2RvdCB4X2kkKQ0KJCTiiJFmIFxjZG90IHhfaT0xNjcrMTMwMisxMzcyLDUrMTI5OCsxMTIzLDU9NTI2MyQkDQoNCjQuIE1lbmdoaXR1bmcganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSAo4oiRZikNCiQk4oiRZj0xMCs2MCs1MCs0MCszMD0xOTAkJA0KDQo1LiBNZW1hc3Vra2FuIGtlIGRhbGFtIHJ1bXVzDQokJFxiYXJ7WH0gPSBcZnJhYyB74oiRZiBcY2RvdCB4X2l9e+KIkWZ9PSBcZnJhYyB7NTI2M317MTkwfT0yNyw3JCQNCg0KIyMjIE1lZGlhbiBkZW5nYW4gT3V0bGllcg0KDQoxLiBNZW5naGl0dW5nIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgKOKIkWYpDQokJOKIkWY9MTArNjArNTArNDArMzArNT0xOTUkJA0KDQoyLiBNZW1iYWdpIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgZGVuZ2FuIDIuDQokJCBcZnJhYyB74oiRZn17Mn0gPSBcZnJhYyB7MTk1fXsyfSA9IDk3LDUkJA0KDQozLiBNZW5lbnR1a2FuIGZyZWt1ZW5zaSBrdW11bGF0aWYNCg0KfCBJbnRlcnZhbCBJTVQgKGtnL23CsikgfCBGcmVrdWVuc2kgKFwoZlwpKSB8IEZyZWt1ZW5zaSBLdW11bGF0aWYgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAxNS4wIC0gMTguNCAgICAgICAgICAgfCAxMCAgICAgICAgICAgICAgICB8IDEwICAgICAgICAgICAgICAgICAgfA0KfCAxOC41IC0gMjQuOSAgICAgICAgICAgfCA2MCAgICAgICAgICAgICAgICB8IDcwICAgICAgICAgICAgICAgICAgfA0KfCAyNS4wIC0gMjkuOSAgICAgICAgICAgfCA1MCAgICAgICAgICAgICAgICB8IDEyMCAgICAgICAgICAgICAgICAgfA0KfCAzMC4wIC0gMzQuOSAgICAgICAgICAgfCA0MCAgICAgICAgICAgICAgICB8IDE2MCAgICAgICAgICAgICAgICAgfA0KfCAzNS4wIC0gMzkuOSAgICAgICAgICAgfCAzMCAgICAgICAgICAgICAgICB8IDE5MCAgICAgICAgICAgICAgICAgfA0KfCA0MC4wIC0gNDQuOSAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICB8IDE5NSAgICAgICAgICAgICAgICAgfA0KDQo0LiBNZW5lbnR1a2FuIGtlbGFzIG1lZGlhbg0KDQpLZWxhcyBtZWRpYW4gYWRhbGFoIDI1LjAgLSAyOS45IChmcmVrdWVuc2kga3VtdWxhdGlmIHNlYmVsdW0ga2VsYXMgaW5pIGFkYWxhaCA3MCwgZGFuIGt1bXVsYXRpZiBrZWxhcyBpbmkgbWVuY2FwYWkgMTIwKS4NCg0KNS4gTWVuZW50dWthbiBmcmVrdWVuc2kga3VtdWxhdGlmIHNlYmVsdW0ga2VsYXMgbWVkaWFuLg0KJCRmX2s9IDcwJCQNCg0KNi4gTWVuZW50dWthbiBmcmVrdWVuc2kga2VsYXMgbWVkaWFuLg0KJCRmX209IDUwJCQNCg0KNy4gTWVuZW50dWthbiBwYW5qYW5nIGludGVydmFsIGtlbGFzLg0KJCRwPSA1JCQNCg0KOC4gTWVuZW50dWthbiB0ZXBpIGJhd2FoIGtlbGFzIG1lZGlhbi4NCiQkVF9iID0gMjQsNSQkDQoNCjkuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMuDQokJA0KTV9lID0gVF9iICsgXGZyYWMge1xmcmFje+KIkWZ9ezJ9LWZfa317Zl9tfSBcY2RvdCBwID0gMjQsNSArIFxmcmFjIHs5Nyw1LTcwfXs1MH0gXGNkb3QgNSA9IDI3LDI1DQokJA0KDQojIyMgTWVkaWFuIHRhbnBhIE91dGxpZXINCg0KMS4gTWVuZ2hpdHVuZyBqdW1sYWggdG90YWwgZnJla3VlbnNpICjiiJFmKQ0KJCTiiJFmPTEwKzYwKzUwKzQwKzMwPTE5MCQkDQoNCjIuIE1lbWJhZ2kganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSBkZW5nYW4gMi4NCiQkIFxmcmFjIHviiJFmfXsyfSA9IFxmcmFjIHsxOTB9ezJ9ID0gOTUkJA0KDQozLiBNZW5lbnR1a2FuIGZyZWt1ZW5zaSBrdW11bGF0aWYNCg0KfCBJbnRlcnZhbCBJTVQgKGtnL23CsikgfCBGcmVrdWVuc2kgKFwoZlwpKSB8IEZyZWt1ZW5zaSBLdW11bGF0aWYgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAxNS4wIC0gMTguNCAgICAgICAgICAgfCAxMCAgICAgICAgICAgICAgICB8IDEwICAgICAgICAgICAgICAgICAgfA0KfCAxOC41IC0gMjQuOSAgICAgICAgICAgfCA2MCAgICAgICAgICAgICAgICB8IDcwICAgICAgICAgICAgICAgICAgfA0KfCAyNS4wIC0gMjkuOSAgICAgICAgICAgfCA1MCAgICAgICAgICAgICAgICB8IDEyMCAgICAgICAgICAgICAgICAgfA0KfCAzMC4wIC0gMzQuOSAgICAgICAgICAgfCA0MCAgICAgICAgICAgICAgICB8IDE2MCAgICAgICAgICAgICAgICAgfA0KfCAzNS4wIC0gMzkuOSAgICAgICAgICAgfCAzMCAgICAgICAgICAgICAgICB8IDE5MCAgICAgICAgICAgICAgICAgfA0KDQo0LiBNZW5lbnR1a2FuIGtlbGFzIG1lZGlhbg0KDQpLZWxhcyBtZWRpYW4gYWRhbGFoIDI1LjAgLSAyOS45IChmcmVrdWVuc2kga3VtdWxhdGlmIHNlYmVsdW0ga2VsYXMgaW5pIGFkYWxhaCA3MCwgZGFuIGt1bXVsYXRpZiBrZWxhcyBpbmkgbWVuY2FwYWkgMTIwKS4NCg0KNS4gTWVuZW50dWthbiBmcmVrdWVuc2kga3VtdWxhdGlmIHNlYmVsdW0ga2VsYXMgbWVkaWFuLg0KJCRmX2s9IDcwJCQNCjYuIE1lbmVudHVrYW4gZnJla3VlbnNpIGtlbGFzIG1lZGlhbi4NCiQkZl9tPSA1MCQkDQoNCjcuIE1lbmVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcy4NCiQkcD0gNSQkDQoNCjguIE1lbmVudHVrYW4gdGVwaSBiYXdhaCBrZWxhcyBtZWRpYW4uDQokJFRfYiA9IDI0LDUkJA0KDQo5LiBNZW1hc3Vra2FuIGtlIGRhbGFtIHJ1bXVzLg0KJCQNCk1fZSA9IFRfYiArIFxmcmFjIHtcZnJhY3viiJFmfXsyfS1mX2t9e2ZfbX0gXGNkb3QgcCA9IDI0LDUgKyBcZnJhYyB7OTUtNzB9ezUwfSBcY2RvdCA1ID0gMjcNCiQkDQoNCiMjIyBNb2R1cyBkZW5nYW4gT3V0bGllcg0KDQoxLiBNZW5naWRlbnRpZmlrYXNpIGtlbGFzIG1vZHVzDQoNCktlbGFzIG1vZHVzIGFkYWxhaCAxOC41IC0gMjQuOSBrYXJlbmEgbWVtaWxpa2kgZnJla3VlbnNpIHRlcnRpbmdnaSB5YWl0dSA2MCANCg0KMi4gTWVuZW50dWthbiB0ZXBpIGJhd2FoIGtlbGFzIG1vZHVzDQokJCBUX2IgPSAxOCAkJA0KDQozLiBNZW5lbnR1a2FuICRkXzEkDQokJCBkXzEgPSA2MC0xMCA9IDUwJCQNCg0KNC4gTWVuZW50dWthbiAkZF8yJA0KJCQgZF8yID0gNjAtNTAgPSAxMCQkDQoNCjUuIE1lbnR1a2FuIHBhbmphbmcgaW50ZXJ2YWwga2VsYXMNCiQkcD0gNSQkDQoNCjYuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMNCiQkDQpNX28gPSBUX2IgKyBcZnJhYyB7ZF8xfSB7ZF8xK2RfMn0gXGNkb3QgcD0gMTggKyBcZnJhYyB7NTB9ezUwKzEwfSBcY2RvdCA1ID0gMjIsMTcNCiQkDQoNCiMjIyBNb2R1cyB0YW5wYSBPdXRsaWVyDQoNCjEuIE1lbmdpZGVudGlmaWthc2kga2VsYXMgbW9kdXMNCg0KS2VsYXMgbW9kdXMgYWRhbGFoIDE4LjUgLSAyNC45IGthcmVuYSBtZW1pbGlraSBmcmVrdWVuc2kgdGVydGluZ2dpIHlhaXR1IDYwIA0KDQoyLiBNZW5lbnR1a2FuIHRlcGkgYmF3YWgga2VsYXMgbW9kdXMNCiQkIFRfYiA9IDE4ICQkDQoNCjMuIE1lbmVudHVrYW4gJGRfMSQNCiQkIGRfMSA9IDYwLTEwID0gNTAkJA0KDQo0LiBNZW5lbnR1a2FuICRkXzIkDQokJCBkXzIgPSA2MC01MCA9IDEwJCQNCg0KNS4gTWVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcw0KJCRwPSA1JCQNCg0KNi4gTWVtYXN1a2thbiBrZSBkYWxhbSBydW11cw0KJCQNCk1fbyA9IFRfYiArIFxmcmFjIHtkXzF9IHtkXzErZF8yfSBcY2RvdCBwPSAxOCArIFxmcmFjIHs1MH17NTArMTB9IFxjZG90IDUgPSAyMiwxNw0KJCQNCg0KIyMjIFZpc3VhbGlzYXNpIGRlbmdhbiBCb3hwbG90DQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIGtlbG9tcG9rIChpbnRlcnZhbCBuaWxhaSBkYW4gZnJla3VlbnNpKQ0KcmVudGFuZ19JTVQgPC0gYygiMTUuMCAtIDE4LjQiLCAiMTguNSAtIDI0LjkiLCAiMjUuMCAtIDI5LjkiLCAiMzAuMCAtIDM0LjkiLCAiMzUuMCAtIDM5LjkiLCAiNDAuMCAtIDQ0LjkiKQ0KZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycyA8LSBjKDEwLCA2MCwgNTAsIDQwLCAzMCwgNSkgICMgRGVuZ2FuIG91dGxpZXJzDQpmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMgPC0gYygxMCwgNjAsIDUwLCA0MCwgMzApICAgICAgIyBUYW5wYSBvdXRsaWVycyAobWVuZ2hhcHVzIGtlbGFzIDQwLjAgLSA0NC45KQ0KDQojIE1lbmdoaXR1bmcgbmlsYWkgdGVuZ2FoICh4X2kpIHVudHVrIHNldGlhcCBpbnRlcnZhbA0KbmlsYWlfdGVuZ2FoIDwtIGMoMTYuNywgMjEuNywgMjcuNDUsIDMyLjQ1LCAzNy40NSwgNDIuNDUpDQoNCiMgTWVuZ2hpdHVuZyB0b3RhbCBmcmVrdWVuc2kNCnRvdGFsX2ZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQp0b3RhbF9mcmVrdWVuc2lfdGFucGFfb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycykNCg0KIyBNZW5naGl0dW5nIE1lYW4gdW50dWsgZGVuZ2FuIGRhbiB0YW5wYSBvdXRsaWVycw0KbWVhbl9kZW5nYW5fb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMgKiBuaWxhaV90ZW5nYWgpIC8gdG90YWxfZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycw0KbWVhbl90YW5wYV9vdXRsaWVycyA8LSBzdW0oZnJla3VlbnNpX3RhbnBhX291dGxpZXJzICogbmlsYWlfdGVuZ2FoWzE6NV0pIC8gdG90YWxfZnJla3VlbnNpX3RhbnBhX291dGxpZXJzDQoNCiMgTWVuZ2hpdHVuZyBNZWRpYW4gdW50dWsgZGVuZ2FuIGRhbiB0YW5wYSBvdXRsaWVycw0KIyBNZW5naGl0dW5nIGZyZWt1ZW5zaSBrdW11bGF0aWYNCmZyZWt1ZW5zaV9rdW11bGF0aWZfZGVuZ2FuX291dGxpZXJzIDwtIGN1bXN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzKQ0KZnJla3VlbnNpX2t1bXVsYXRpZl90YW5wYV9vdXRsaWVycyA8LSBjdW1zdW0oZnJla3VlbnNpX3RhbnBhX291dGxpZXJzKQ0KDQojIE1lbmVudHVrYW4gbWVkaWFuDQptZWRpYW5fZGVuZ2FuX291dGxpZXJzIDwtIDI0LjUgKyAoKHRvdGFsX2ZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMgLyAyIC0gNzApIC8gNTApICogNQ0KbWVkaWFuX3RhbnBhX291dGxpZXJzIDwtIDI0LjUgKyAoKHRvdGFsX2ZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyAvIDIgLSA3MCkgLyA1MCkgKiA1DQoNCiMgTWVuZ2hpdHVuZyBNb2R1cyB1bnR1ayBkZW5nYW4gZGFuIHRhbnBhIG91dGxpZXJzDQojIE1vZHVzIHRlcmphZGkgcGFkYSBpbnRlcnZhbCBkZW5nYW4gZnJla3VlbnNpIHRlcnRpbmdnaSAoZGVuZ2FuIG91dGxpZXJzIGRhbiB0YW5wYSBvdXRsaWVycykNCm1vZHVzX2Rlbmdhbl9vdXRsaWVycyA8LSAxOCArICg1MCAvICg1MCArIDEwKSkgKiA1DQptb2R1c190YW5wYV9vdXRsaWVycyA8LSAxOCArICg1MCAvICg1MCArIDEwKSkgKiA1DQoNCiMgTWVuZ2dhYnVuZ2thbiBkYXRhIGtlIGRhbGFtIHNhdHUgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YV9kZW5nYW5fb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaCwgZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycykNCmRhdGFfdGFucGFfb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaFsxOjVdLCBmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpDQoNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgTmlsYWkgPSBjKGRhdGFfZGVuZ2FuX291dGxpZXJzLCBkYXRhX3RhbnBhX291dGxpZXJzKSwNCiAgS2Vsb21wb2sgPSByZXAoYygiRGVuZ2FuIE91dGxpZXJzIiwgIlRhbnBhIE91dGxpZXJzIiksIA0KICAgICAgICAgICAgICAgICB0aW1lcyA9IGMobGVuZ3RoKGRhdGFfZGVuZ2FuX291dGxpZXJzKSwgbGVuZ3RoKGRhdGFfdGFucGFfb3V0bGllcnMpKSkNCikNCg0KIyBNZW1idWF0IGJveHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQpwbG90IDwtIHBsb3RfbHkoDQogIGRhdGEgPSBkYXRhLCANCiAgeSA9IH5OaWxhaSwgDQogIGNvbG9yID0gfktlbG9tcG9rLCANCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gImFsbCIgICMgTWVuYW1waWxrYW4gc2VtdWEgdGl0aWsgZGF0YQ0KKSAlPiUgDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBNZWFuLCBNZWRpYW4sIGRhbiBNb2R1cyIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk5pbGFpIElNVCAoa2cvbcKyKSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbWVhbl90YW5wYV9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuOiIsIHJvdW5kKG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbWVkaWFuX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCByb3VuZChtZWRpYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1vZHVzX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNb2R1czoiLCByb3VuZChtb2R1c19kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbW9kdXNfdGFucGFfb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCmBgYA0KDQojIyMgVmlzdWFsaXNhc2kgZGVuZ2FuIEhpc3RvZ3JhbQ0KDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhOiBJbnRlcnZhbCBuaWxhaSBkYW4gZnJla3VlbnNpDQppbnRlcnZhbCA8LSBjKCIxNS4wIC0gMTguNCIsICIxOC41IC0gMjQuOSIsICIyNS4wIC0gMjkuOSIsICIzMC4wIC0gMzQuOSIsICIzNS4wIC0gMzkuOSIsICI0MC4wIC0gNDQuOSIpDQpmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIGMoMTAsIDYwLCA1MCwgNDAsIDMwLCA1KSAgIyBEZW5nYW4gb3V0bGllcnMNCmZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyA8LSBjKDEwLCA2MCwgNTAsIDQwLCAzMCkgICAgICAjIFRhbnBhIG91dGxpZXJzIChtZW5naGFwdXMga2VsYXMgNDAuMCAtIDQ0LjkpDQoNCiMgTWVuZ2hpdHVuZyBuaWxhaSB0ZW5nYWggKHhfaSkgdW50dWsgc2V0aWFwIGludGVydmFsDQpuaWxhaV90ZW5nYWggPC0gYygxNi43LCAyMS43LCAyNy40NSwgMzIuNDUsIDM3LjQ1LCA0Mi40NSkNCg0KIyBNZW5naGl0dW5nIHRvdGFsIGZyZWt1ZW5zaSB1bnR1ayBrZWR1YSBkYXRhc2V0DQp0b3RhbF9mcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzKQ0KdG90YWxfZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZ2hpdHVuZyByYXRhLXJhdGEgKG1lYW4pIHVudHVrIGtlZHVhIGRhdGFzZXQNCm1lYW5fZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzICogbmlsYWlfdGVuZ2FoKSAvIHRvdGFsX2ZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMNCm1lYW5fdGFucGFfb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyAqIG5pbGFpX3RlbmdhaFsxOjVdKSAvIHRvdGFsX2ZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycw0KDQojIE1lbmVudHVrYW4gbmlsYWkgbWVkaWFuDQptZWRpYW5fZGVuZ2FuX291dGxpZXJzIDwtIDI3LjI1ICAjIE5pbGFpIG1lZGlhbiBkZW5nYW4gb3V0bGllcnMNCm1lZGlhbl90YW5wYV9vdXRsaWVycyA8LSAyNyAgICAgICMgTmlsYWkgbWVkaWFuIHRhbnBhIG91dGxpZXJzDQoNCiMgTWVuZW50dWthbiBuaWxhaSBtb2R1cw0KbW9kdXNfZGVuZ2FuX291dGxpZXJzIDwtIDIyLjE3ICAjIE5pbGFpIG1vZHVzIHlhbmcgZGlrZXRhaHVpDQptb2R1c190YW5wYV9vdXRsaWVycyA8LSAyMi4xNyAgICMgTmlsYWkgbW9kdXMgeWFuZyBkaWtldGFodWkNCg0KIyBNZW1idWF0IGRlbnNpdHkgcGxvdCB1bnR1ayBtYXNpbmctbWFzaW5nIGRhdGFzZXQNCiMgRGF0YSBkZW5nYW4gb3V0bGllcnMNCmRhdGFfZGVuZ2FuX291dGxpZXJzIDwtIHJlcChuaWxhaV90ZW5nYWgsIGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQojIERhdGEgdGFucGEgb3V0bGllcnMNCmRhdGFfdGFucGFfb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaFsxOjVdLCBmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZ2hpdHVuZyBkZW5zaXR5IHBsb3QNCmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzIDwtIGRlbnNpdHkoZGF0YV9kZW5nYW5fb3V0bGllcnMpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzIDwtIGRlbnNpdHkoZGF0YV90YW5wYV9vdXRsaWVycykNCg0KIyBQYXN0aWthbiB0aWRhayBhZGEgbmlsYWkgbmVnYXRpZiBkaSB4IGRhbiB5DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4IDwtIHBtYXgoMCwgZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCkNCmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCA8LSBwbWF4KDAsIGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCkNCg0KIyBNZW1idWF0IHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQpwbG90IDwtIHBsb3RfbHkoKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIHJhdGEtcmF0YSB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVhbl9kZW5nYW5fb3V0bGllcnMsIG1lYW5fZGVuZ2FuX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJSYXRhLXJhdGEgKERlbmdhbiBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIHJhdGEtcmF0YSB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWFuX3RhbnBhX291dGxpZXJzLCBtZWFuX3RhbnBhX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIlJhdGEtcmF0YSAoVGFucGEgT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyBNb2R1cyB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobW9kdXNfZGVuZ2FuX291dGxpZXJzLCBtb2R1c19kZW5nYW5fb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gcGFzdGUoIk1vZHVzIChEZW5nYW4gT3V0bGllcnMpOiIsIHJvdW5kKG1vZHVzX2Rlbmdhbl9vdXRsaWVycywgMikpLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCBkYXNoID0gJ2RvdCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgTW9kdXMgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobW9kdXNfdGFucGFfb3V0bGllcnMsIG1vZHVzX3RhbnBhX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gcGFzdGUoIk1vZHVzIChUYW5wYSBPdXRsaWVycyk6Iiwgcm91bmQobW9kdXNfdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIE1lZGlhbiB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVkaWFuX2Rlbmdhbl9vdXRsaWVycywgbWVkaWFuX2Rlbmdhbl9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSBwYXN0ZSgiTWVkaWFuIChEZW5nYW4gT3V0bGllcnMpOiIsIHJvdW5kKG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjYpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIE1lZGlhbiB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWRpYW5fdGFucGFfb3V0bGllcnMsIG1lZGlhbl90YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9IHBhc3RlKCJNZWRpYW4gKFRhbnBhIE91dGxpZXJzKToiLCByb3VuZChtZWRpYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTWVhbiwgTWVkaWFuLCBkYW4gTW9kdXMiLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJJbmRla3MgTWFzc2EgVHVidWggKElNVCkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiS2VwYWRhdGFuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIHJhdGEtcmF0YSBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwgICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayByYXRhLXJhdGEgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fdGFucGFfb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00NSwgICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWRpYW4gZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWRpYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpICogMC44LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCByb3VuZChtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtNDUsDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBzaXplID0gMTIpDQogICAgICApLA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1lZGlhbiBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVkaWFuX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjgsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuOiIsIHJvdW5kKG1lZGlhbl90YW5wYV9vdXRsaWVycywgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTQ1LA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtb2R1cyBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1vZHVzX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSAqIDAuNywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNb2R1czoiLCByb3VuZChtb2R1c19kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC02MCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICAjIEFub3Rhc2kgdW50dWsgbW9kdXMgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1vZHVzX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjcsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC02MCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQpgYGANCg0KDQojIyMgQW5hbGlzaXMNCg0KKipNZWFuIChSYXRhLXJhdGEpKioNCg0KTWVhbiBkZW5nYW4gT3V0bGllcjogMjgsMDgNCg0KTWVhbiB0YW5wYSBPdXRsaWVyOiAyNyw3DQoNCipJbnRlcnByZXRhc2k6Kg0KDQpOaWxhaSBtZWFuIG1lbWJlcmlrYW4gZ2FtYmFyYW4gdGVudGFuZyBuaWxhaSByYXRhLXJhdGEgSU1UIHBhZGEgcG9wdWxhc2kgeWFuZyBkaXRlbGl0aS4gUGVyYmVkYWFuIGFudGFyYSBtZWFuIGRlbmdhbiBvdXRsaWVyICgyOCwwOCkgZGFuIG1lYW4gdGFucGEgb3V0bGllciAoMjcsNykgbWVudW5qdWtrYW4gYmFod2Ega2VoYWRpcmFuIGludGVydmFsIElNVCB5YW5nIHNhbmdhdCB0aW5nZ2kgKDQwLjAgLSA0NC45IGRlbmdhbiBmcmVrdWVuc2kgNSkgYmVycGVuZ2FydWggc2VkaWtpdCB0ZXJoYWRhcCByYXRhLXJhdGEga2VzZWx1cnVoYW4sIHRldGFwaSBjdWt1cCB1bnR1ayBtZW5haWtrYW4gbmlsYWkgcmF0YS1yYXRhIHRlcnNlYnV0LiBJbmkgYmVyYXJ0aSBiYWh3YSBtZXNraXB1biBzZWJhZ2lhbiBiZXNhciBpbmRpdmlkdSBtZW1pbGlraSBJTVQgeWFuZyBsZWJpaCByZW5kYWgsIGJlYmVyYXBhIGluZGl2aWR1IHlhbmcgbWVtaWxpa2kgSU1UIHNhbmdhdCB0aW5nZ2kgKG9iZXNpdGFzIG1vcmJpZCkgbWVuYXJpayByYXRhLXJhdGEgSU1UIGxlYmloIHRpbmdnaS4NCg0KKlBlbmdhcnVoIHRlcmhhZGFwIEthc3VzOioNCg0KSmlrYSBraXRhIGhhbnlhIG1lbGloYXQgbWVhbiB0YW5wYSBvdXRsaWVyICgyNyw3KSwgcmF0YS1yYXRhIElNVCBwb3B1bGFzaSBsZWJpaCByZWFsaXN0aXMgZGFuIG1lbnVuanVra2FuIGJhaHdhIHNlY2FyYSB1bXVtLCBwb3B1bGFzaSBpbmkgY2VuZGVydW5nIGJlcmFkYSBwYWRhIGthdGVnb3JpIG92ZXJ3ZWlnaHQgKGtlbGViaWhhbiBiZXJhdCBiYWRhbikuIEFydGlueWEsIG1lc2tpcHVuIGJhbnlhayBpbmRpdmlkdSBkYWxhbSBrYXRlZ29yaSBub3JtYWwgKElNVCAxOC41IC0gMjQuOSksIGFkYSBqdWdhIGtlbG9tcG9rIHlhbmcgY3VrdXAgYmVzYXIgeWFuZyBiZXJhZGEgcGFkYSBvdmVyd2VpZ2h0LCB5YW5nIG1lbmFuZGFrYW4gYWRhbnlhIHJpc2lrbyB0ZXJoYWRhcCBtYXNhbGFoIGtlc2VoYXRhbiB0ZXJrYWl0IG9iZXNpdGFzLg0KDQoqKk1lZGlhbioqDQoNCk1lZGlhbiBkZW5nYW4gT3V0bGllcjogMjcsMjUNCg0KTWVkaWFuIHRhbnBhIE91dGxpZXI6IDI3DQoNCipJbnRlcnByZXRhc2k6Kg0KDQpNZWRpYW4gbWVtYmVyaWthbiBuaWxhaSB0ZW5nYWggeWFuZyBtZW1iYWdpIGRhdGEgbWVuamFkaSBkdWEgYmFnaWFuIHlhbmcgc2FtYS4gTWVkaWFuIGRlbmdhbiBvdXRsaWVyICgyNywyNSkgZGFuIG1lZGlhbiB0YW5wYSBvdXRsaWVyICgyNykgc2FuZ2F0IG1pcmlwLCB5YW5nIG1lbnVuanVra2FuIGJhaHdhIHBvc2lzaSBuaWxhaSB0ZW5nYWggZGF0YSB0aWRhayBiYW55YWsgdGVycGVuZ2FydWggb2xlaCBkYXRhIGVrc3RyZW0gcGFkYSBpbnRlcnZhbCBJTVQgeWFuZyBzYW5nYXQgdGluZ2dpICg0MC4wIC0gNDQuOSkuIEFydGlueWEsIG1lZGlhbiBtZW1iZXJpa2FuIGdhbWJhcmFuIHlhbmcgbGViaWggc3RhYmlsIGRhbiB0aWRhayB0ZXJwZW5nYXJ1aCBvbGVoIG5pbGFpIGVrc3RyZW0sIHNlcnRhIG1lbmNlcm1pbmthbiBiYWh3YSBzZWJhZ2lhbiBiZXNhciBpbmRpdmlkdSBkYWxhbSBwb3B1bGFzaSBtZW1pbGlraSBJTVQgZGkgc2VraXRhciAyNywgeWFuZyBiZXJhZGEgcGFkYSBrYXRlZ29yaSBvdmVyd2VpZ2h0IChrZWxlYmloYW4gYmVyYXQgYmFkYW4pLg0KDQoqUGVuZ2FydWggdGVyaGFkYXAgS2FzdXM6Kg0KDQpOaWxhaSBtZWRpYW4geWFuZyBkZWthdCBkZW5nYW4gMjcgbWVudW5qdWtrYW4gYmFod2Egc2ViYWdpYW4gYmVzYXIgaW5kaXZpZHUgZGFsYW0gcG9wdWxhc2kgbWVtaWxpa2kgSU1UIHlhbmcgbGViaWggdGluZ2dpIGRhcmlwYWRhIGthdGVnb3JpIG5vcm1hbCAoMTguNSAtIDI0LjkpIHRldGFwaSB0aWRhayBtZW5jYXBhaSBsZXZlbCBvYmVzaXRhcyBiZXJhdC4gSW5pIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBhZGEga2VjZW5kZXJ1bmdhbiBwb3B1bGFzaSB1bnR1ayBtZW1pbGlraSBiZXJhdCBiYWRhbiBsZWJpaCBkYXJpIHlhbmcgZGlzYXJhbmthbiB1bnR1ayBrZXNlaGF0YW4sIGRlbmdhbiBsZWJpaCBiYW55YWsgaW5kaXZpZHUgZGkga2F0ZWdvcmkgb3ZlcndlaWdodC4NCg0KKipNb2R1cyoqDQoNCk1vZHVzIGRlbmdhbiBPdXRsaWVyOiAyMiwxNw0KDQpNb2R1cyB0YW5wYSBPdXRsaWVyOiAyMiwxNw0KDQoqSW50ZXJwcmV0YXNpOioNCg0KTW9kdXMgYWRhbGFoIG5pbGFpIHlhbmcgcGFsaW5nIHNlcmluZyBtdW5jdWwgZGFsYW0gZGF0YSwgeWFpdHUgaW50ZXJ2YWwgZGVuZ2FuIGZyZWt1ZW5zaSB0ZXJ0aW5nZ2kuIERhbGFtIGthc3VzIGluaSwgaW50ZXJ2YWwgMTguNSAtIDI0LjkgKE5vcm1hbCkgbWVtaWxpa2kgZnJla3VlbnNpIHRlcnRpbmdnaSB5YWl0dSA2MCBpbmRpdmlkdSwgeWFuZyBtZW51bmp1a2thbiBiYWh3YSBzZWJhZ2lhbiBiZXNhciBpbmRpdmlkdSBkYWxhbSBwb3B1bGFzaSBpbmkgbWVtaWxpa2kgSU1UIGRhbGFtIHJlbnRhbmcgeWFuZyBkaWFuZ2dhcCBzZWhhdCAobm9ybWFsKS4gQmFpayBkZW5nYW4gYXRhdSB0YW5wYSBvdXRsaWVyLCBtb2RhIHRldGFwIGJlcmFkYSBwYWRhIGludGVydmFsIGluaSwgeWFuZyBtZW1wZXJrdWF0IGtlc2ltcHVsYW4gYmFod2EgbWF5b3JpdGFzIGluZGl2aWR1IGJlcmFkYSBkYWxhbSBrYXRlZ29yaSBJTVQgeWFuZyBzZWhhdC4NCg0KKlBlbmdhcnVoIHRlcmhhZGFwIEthc3VzOioNCg0KTW9kdXMgeWFuZyBiZXJhZGEgcGFkYSBuaWxhaSAyMiwxNyBtZW5lZ2Fza2FuIGJhaHdhIG1lc2tpcHVuIGFkYSBrZWxvbXBvayBpbmRpdmlkdSB5YW5nIG1lbmdhbGFtaSBrZWxlYmloYW4gYmVyYXQgYmFkYW4gYXRhdSBvYmVzaXRhcywga2Vsb21wb2sgbm9ybWFsIChJTVQgMTguNSAtIDI0LjkpIGFkYWxhaCBrZWxvbXBvayB5YW5nIHBhbGluZyBkb21pbmFuLiBJbmkgbWVudW5qdWtrYW4gYmFod2EgbWVza2lwdW4gYWRhIHBlcm1hc2FsYWhhbiBvYmVzaXRhcyBkYWxhbSBwb3B1bGFzaSwgc2ViYWdpYW4gYmVzYXIgaW5kaXZpZHUgbWVtaWxpa2kgSU1UIHlhbmcgc2VoYXQuDQoNCiMjIFBlbmRpZGlrYW4NCg0KU2VidWFoIHNla29sYWggbWVsYWt1a2FuIHN1cnZlaSB1bnR1ayBtZW5nZXRhaHVpIGJlcmFwYSBsYW1hIHdha3R1IHlhbmcgZGloYWJpc2thbiBzaXN3YSB1bnR1ayBiZWxhamFyIHNlYmVsdW0gdWppYW4gYWtoaXIuIFdha3R1IGJlbGFqYXIgaW5pIGRpa2Vsb21wb2trYW4gZGFsYW0gaW50ZXJ2YWwgd2FrdHUgdGVydGVudHUuIERhdGEgcmVudGFuZyB3YWt0dSBiZWxhamFyIHNpc3dhIGRhbGFtIHNhdHVhbiBqYW0gZGVuZ2FuIGp1bWxhaCBzaXN3YSBzZWJhZ2FpIGZyZWt1ZW5zaSBhZGFsYWggc2VwZXJ0aSBiZXJpa3V0Og0KDQoNCnwgUmVudGFuZyBXYWt0dSBCZWxhamFyIChKYW0pIHwgSnVtbGFoIFNpc3dhIChmKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgMCAtIDEgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgfA0KfCAxIC0gMiAgICAgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICB8DQp8IDIgLSAzICAgICAgICAgICAgICAgICAgICAgICB8IDEyICAgICAgICAgICAgICAgIHwNCnwgMyAtIDQgICAgICAgICAgICAgICAgICAgICAgIHwgMjAgICAgICAgICAgICAgICAgfA0KfCA0IC0gNSAgICAgICAgICAgICAgICAgICAgICAgfCAxMCAgICAgICAgICAgICAgICB8DQp8IDUgLSA2ICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgICAgICAgICAgICAgIHwNCnwgNiAtIDcgICAgICAgICAgICAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgICAgfCANCg0KUmVudGFuZyB3YWt0dSA1LTYgamFtIGRhbiA2LTcgamFtIGRpYW5nZ2FwIG91dGxpZXIuIEhhbCBpbmkgdGVyamFkaSBrYXJlbmEganVtbGFoIHNpc3dhIHBhZGEgcmVudGFuZyB3YWt0dSBpbmkgc2FuZ2F0IGtlY2lsIGRpYmFuZGluZ2thbiBkZW5nYW4gcmVudGFuZyB3YWt0dSBsYWlubnlhIHlhbmcgbWVtaWxpa2kgbGViaWggYmFueWFrIHNpc3dhIHNlcnRhIGRpc3RyaWJ1c2kgd2FrdHUgYmVsYWphciBzaXN3YSBjZW5kZXJ1bmcgbGViaWggdGVya29uc2VudHJhc2kgZGkgc2VraXRhciB3YWt0dSB5YW5nIGxlYmloIHJlbmRhaCwgZGFuIHJlbnRhbmcgd2FrdHUgeWFuZyBsZWJpaCBwYW5qYW5nIG1lbWlsaWtpIHNlZGlraXQgc2lzd2EsIG1lbnVuanVra2FuIHBlbnlpbXBhbmdhbiB5YW5nIHNpZ25pZmlrYW4uDQoNCnwgUmVudGFuZyBXYWt0dSBCZWxhamFyIChKYW0pIHwgSnVtbGFoIFNpc3dhIChmKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgMCAtIDEgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgfA0KfCAxIC0gMiAgICAgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICB8DQp8IDIgLSAzICAgICAgICAgICAgICAgICAgICAgICB8IDEyICAgICAgICAgICAgICAgIHwNCnwgMyAtIDQgICAgICAgICAgICAgICAgICAgICAgIHwgMjAgICAgICAgICAgICAgICAgfA0KfCA0IC0gNSAgICAgICAgICAgICAgICAgICAgICAgfCAxMCAgICAgICAgICAgICAgICB8DQoNCg0KIyMjIE1lYW4gZGVuZ2FuIE91dGxpZXINCg0KMS5NZW5lbnR1a2FuIG5pbGFpIHRlbmdhaCAoJHhfaSQpDQoNCiogSW50ZXJ2YWwgMCAtIDEgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgey0wLDUrMSw1fXsyfT0wLDUkDQoNCiogSW50ZXJ2YWwgIDEgLSAyIDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHswLDUrMiw1fXsyfT0xLDUkDQoNCiogSW50ZXJ2YWwgMiAtIDMgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezEsNSszLDV9ezJ9PTIsNSQNCg0KKiBJbnRlcnZhbCAzIC0gNCA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7Miw1KzQsNX17Mn09Myw1JA0KDQoqIEludGVydmFsIDQgLSA1IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHszLDUrNSw1fXsyfT00LDUkDQoNCiogSW50ZXJ2YWwgNSAtIDYgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezQsNSs2LDV9ezJ9PTUsNSQNCg0KKiBJbnRlcnZhbCA2IC0gNyA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7NSw1KzcsNX17Mn09Niw1JA0KDQp8IFJlbnRhbmcgV2FrdHUgQmVsYWphciAoSmFtKSB8IEp1bWxhaCBTaXN3YSAoXChmXCkpIHwgTmlsYWkgVGVuZ2FoIChcKHhfaVwpKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAwIC0gMSAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICAgICAgICAgICAgICAgICB8IDAuNSAgICAgICAgICAgICAgICAgICAgIHwNCnwgMSAtIDIgICAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgfCAxLjUgICAgICAgICAgICAgICAgICAgICB8DQp8IDIgLSAzICAgICAgICAgICAgICAgICAgICAgICB8IDEyICAgICAgICAgICAgICAgICAgIHwgMi41ICAgICAgICAgICAgICAgICAgICAgfA0KfCAzIC0gNCAgICAgICAgICAgICAgICAgICAgICAgfCAyMCAgICAgICAgICAgICAgICAgICB8IDMuNSAgICAgICAgICAgICAgICAgICAgIHwNCnwgNCAtIDUgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgICAgICAgICAgICAgICAgICAgfCA0LjUgICAgICAgICAgICAgICAgICAgICB8DQp8IDUgLSA2ICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgICAgICAgICAgICAgICAgIHwgNS41ICAgICAgICAgICAgICAgICAgICAgfA0KfCA2IC0gNyAgICAgICAgICAgICAgICAgICAgICAgfCAxICAgICAgICAgICAgICAgICAgICB8IDYuNSAgICAgICAgICAgICAgICAgICAgIHwNCg0KMi4gTWVuZ2thbGlrYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggKCRmIFxjZG90IHhfaSQpDQoNCiogSW50ZXJ2YWwgMCAtIDEgOiAkZiBcY2RvdCB4X2k9IDMgXGNkb3QgMCw1PSAxLDUkDQoNCiogSW50ZXJ2YWwgMSAtIDIgOiAkZiBcY2RvdCB4X2k9IDggXGNkb3QgMSw1PSAxMiQNCg0KKiBJbnRlcnZhbCAyIC0gMyA6ICRmIFxjZG90IHhfaT0gMTIgXGNkb3QgMiw1PSAzMCQNCg0KKiBJbnRlcnZhbCAzIC0gNCA6ICRmIFxjZG90IHhfaT0gMjAgXGNkb3QgMyw1PSA3MCQNCg0KKiBJbnRlcnZhbCA0IC0gNSA6ICRmIFxjZG90IHhfaT0gMTAgXGNkb3QgNCw1PSA0NSQNCg0KKiBJbnRlcnZhbCA1IC0gNiA6ICRmIFxjZG90IHhfaT0gMiBcY2RvdCA1LDU9IDExJA0KDQoqIEludGVydmFsIDYgLSA3IDogJGYgXGNkb3QgeF9pPSAxIFxjZG90IDYsNT0gNiw1JA0KDQp8IFJlbnRhbmcgV2FrdHUgQmVsYWphciAoSmFtKSB8IEp1bWxhaCBTaXN3YSAoXChmXCkpIHwgTmlsYWkgVGVuZ2FoIChcKHhfaVwpKSB8IFwoZiBcY2RvdCB4X2lcKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfA0KfCAwIC0gMSAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICAgICAgICAgICAgICAgICB8IDAuNSAgICAgICAgICAgICAgICAgICAgIHwgMS41ICAgICAgICAgICAgIHwNCnwgMSAtIDIgICAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgfCAxLjUgICAgICAgICAgICAgICAgICAgICB8IDEyICAgICAgICAgICAgICB8DQp8IDIgLSAzICAgICAgICAgICAgICAgICAgICAgICB8IDEyICAgICAgICAgICAgICAgICAgIHwgMi41ICAgICAgICAgICAgICAgICAgICAgfCAzMCAgICAgICAgICAgICAgfA0KfCAzIC0gNCAgICAgICAgICAgICAgICAgICAgICAgfCAyMCAgICAgICAgICAgICAgICAgICB8IDMuNSAgICAgICAgICAgICAgICAgICAgIHwgNzAgICAgICAgICAgICAgIHwNCnwgNCAtIDUgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgICAgICAgICAgICAgICAgICAgfCA0LjUgICAgICAgICAgICAgICAgICAgICB8IDQ1ICAgICAgICAgICAgICB8DQp8IDUgLSA2ICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgICAgICAgICAgICAgICAgIHwgNS41ICAgICAgICAgICAgICAgICAgICAgfCAxMSAgICAgICAgICAgICAgfA0KfCA2IC0gNyAgICAgICAgICAgICAgICAgICAgICAgfCAxICAgICAgICAgICAgICAgICAgICB8IDYuNSAgICAgICAgICAgICAgICAgICAgIHwgNi41ICAgICAgICAgICAgIHwNCg0KMy4gTWVuZ2hpdHVuZyBqdW1sYWggdG90YWwgZGFyaSBwZXJrYWxpYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggKCTiiJFmIFxjZG90IHhfaSQpDQokJOKIkWYgXGNkb3QgeF9pPTEsNSsxMiszMCs3MCs0NSsxMSs2LDU9MTc2JCQNCg0KNC4gTWVuZ2hpdHVuZyBqdW1sYWggdG90YWwgZnJla3VlbnNpICjiiJFmKQ0KJCTiiJFmPTMrOCsxMisyMCsxMCsyKzE9NTYkJA0KDQo1LiBNZW1hc3Vra2FuIGtlIGRhbGFtIHJ1bXVzDQokJFxiYXJ7WH0gPSBcZnJhYyB74oiRZiBcY2RvdCB4X2l9e+KIkWZ9PSBcZnJhYyB7MTc2fXs1Nn09MywxNCQkDQoNCiMjIyBNZWFuIHRhbnBhIE91dGxpZXINCg0KMS5NZW5lbnR1a2FuIG5pbGFpIHRlbmdhaCAoJHhfaSQpDQoNCiogSW50ZXJ2YWwgMCAtIDEgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgey0wLDUrMSw1fXsyfT0wLDUkDQoNCiogSW50ZXJ2YWwgIDEgLSAyIDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHswLDUrMiw1fXsyfT0xLDUkDQoNCiogSW50ZXJ2YWwgMiAtIDMgOiAkeCA9IFxmcmFjIHt0ZXBpfmJhd2FofmtlbGFzfit+dGVwaX5hdGFzfmtlbGFzfXsyfT0gXGZyYWMgezEsNSszLDV9ezJ9PTIsNSQNCg0KKiBJbnRlcnZhbCAzIC0gNCA6ICR4ID0gXGZyYWMge3RlcGl+YmF3YWh+a2VsYXN+K350ZXBpfmF0YXN+a2VsYXN9ezJ9PSBcZnJhYyB7Miw1KzQsNX17Mn09Myw1JA0KDQoqIEludGVydmFsIDQgLSA1IDogJHggPSBcZnJhYyB7dGVwaX5iYXdhaH5rZWxhc34rfnRlcGl+YXRhc35rZWxhc317Mn09IFxmcmFjIHszLDUrNSw1fXsyfT00LDUkDQoNCnwgUmVudGFuZyBXYWt0dSBCZWxhamFyIChKYW0pIHwgSnVtbGFoIFNpc3dhIChcKGZcKSkgfCBOaWxhaSBUZW5nYWggKFwoeF9pXCkpIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDAgLSAxICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgICAgICAgICAgICAgICAgIHwgMC41ICAgICAgICAgICAgICAgICAgICAgfA0KfCAxIC0gMiAgICAgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICB8IDEuNSAgICAgICAgICAgICAgICAgICAgIHwNCnwgMiAtIDMgICAgICAgICAgICAgICAgICAgICAgIHwgMTIgICAgICAgICAgICAgICAgICAgfCAyLjUgICAgICAgICAgICAgICAgICAgICB8DQp8IDMgLSA0ICAgICAgICAgICAgICAgICAgICAgICB8IDIwICAgICAgICAgICAgICAgICAgIHwgMy41ICAgICAgICAgICAgICAgICAgICAgfA0KfCA0IC0gNSAgICAgICAgICAgICAgICAgICAgICAgfCAxMCAgICAgICAgICAgICAgICAgICB8IDQuNSAgICAgICAgICAgICAgICAgICAgIHwNCg0KMi4gTWVuZ2thbGlrYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggKCRmIFxjZG90IHhfaSQpDQoNCiogSW50ZXJ2YWwgMCAtIDEgOiAkZiBcY2RvdCB4X2k9IDMgXGNkb3QgMCw1PSAxLDUkDQoNCiogSW50ZXJ2YWwgMSAtIDIgOiAkZiBcY2RvdCB4X2k9IDggXGNkb3QgMSw1PSAxMiQNCg0KKiBJbnRlcnZhbCAyIC0gMyA6ICRmIFxjZG90IHhfaT0gMTIgXGNkb3QgMiw1PSAzMCQNCg0KKiBJbnRlcnZhbCAzIC0gNCA6ICRmIFxjZG90IHhfaT0gMjAgXGNkb3QgMyw1PSA3MCQNCg0KKiBJbnRlcnZhbCA0IC0gNSA6ICRmIFxjZG90IHhfaT0gMTAgXGNkb3QgNCw1PSA0NSQNCg0KfCBSZW50YW5nIFdha3R1IEJlbGFqYXIgKEphbSkgfCBKdW1sYWggU2lzd2EgKFwoZlwpKSB8IE5pbGFpIFRlbmdhaCAoXCh4X2lcKSkgfCBcKGYgXGNkb3QgeF9pXCkgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwNCnwgMCAtIDEgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgICAgfCAwLjUgICAgICAgICAgICAgICAgICAgICB8IDEuNSAgICAgICAgICAgICB8DQp8IDEgLSAyICAgICAgICAgICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgICAgICAgIHwgMS41ICAgICAgICAgICAgICAgICAgICAgfCAxMiAgICAgICAgICAgICAgfA0KfCAyIC0gMyAgICAgICAgICAgICAgICAgICAgICAgfCAxMiAgICAgICAgICAgICAgICAgICB8IDIuNSAgICAgICAgICAgICAgICAgICAgIHwgMzAgICAgICAgICAgICAgIHwNCnwgMyAtIDQgICAgICAgICAgICAgICAgICAgICAgIHwgMjAgICAgICAgICAgICAgICAgICAgfCAzLjUgICAgICAgICAgICAgICAgICAgICB8IDcwICAgICAgICAgICAgICB8DQp8IDQgLSA1ICAgICAgICAgICAgICAgICAgICAgICB8IDEwICAgICAgICAgICAgICAgICAgIHwgNC41ICAgICAgICAgICAgICAgICAgICAgfCA0NSAgICAgICAgICAgICAgfA0KDQozLiBNZW5naGl0dW5nIGp1bWxhaCB0b3RhbCBkYXJpIHBlcmthbGlhbiBmcmVrdWVuc2kgZGVuZ2FuIG5pbGFpIHRlbmdhaCAoJOKIkWYgXGNkb3QgeF9pJCkNCiQk4oiRZiBcY2RvdCB4X2k9MSw1KzEyKzMwKzcwKzQ1PTE1OCw1JCQNCg0KNC4gTWVuZ2hpdHVuZyBqdW1sYWggdG90YWwgZnJla3VlbnNpICjiiJFmKQ0KJCTiiJFmPTMrOCsxMisyMCsxMD01MyQkDQoNCjUuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMNCiQkXGJhcntYfSA9IFxmcmFjIHviiJFmIFxjZG90IHhfaX174oiRZn09IFxmcmFjIHsxNTgsNX17NTN9PTIsOTkkJA0KDQojIyMgTWVkaWFuIGRlbmdhbiBPdXRsaWVyDQoNCjEuIE1lbmdoaXR1bmcganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSAo4oiRZikNCiQk4oiRZj0zKzgrMTIrMjArMTArMisxPTU2JCQNCg0KMi4gTWVtYmFnaSBqdW1sYWggdG90YWwgZnJla3VlbnNpIGRlbmdhbiAyLg0KJCQgXGZyYWMge+KIkWZ9ezJ9ID0gXGZyYWMgezU2fXsyfSA9IDI4JCQNCg0KMy4gTWVuZW50dWthbiBmcmVrdWVuc2kga3VtdWxhdGlmDQoNCnwgUmVudGFuZyBXYWt0dSBCZWxhamFyIChKYW0pIHwgSnVtbGFoIFNpc3dhIChcKGZcKSkgfCBGcmVrdWVuc2kgS3VtdWxhdGlmIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgMCAtIDEgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgICAgfCAzICAgICAgICAgICAgICAgICAgIHwNCnwgMSAtIDIgICAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgfCAxMSAgICAgICAgICAgICAgICAgIHwNCnwgMiAtIDMgICAgICAgICAgICAgICAgICAgICAgIHwgMTIgICAgICAgICAgICAgICAgICAgfCAyMyAgICAgICAgICAgICAgICAgIHwNCnwgMyAtIDQgICAgICAgICAgICAgICAgICAgICAgIHwgMjAgICAgICAgICAgICAgICAgICAgfCA0MyAgICAgICAgICAgICAgICAgIHwNCnwgNCAtIDUgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgICAgICAgICAgICAgICAgICAgfCA1MyAgICAgICAgICAgICAgICAgIHwNCnwgNSAtIDYgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgICAgICAgfCA1NSAgICAgICAgICAgICAgICAgIHwNCnwgNiAtIDcgICAgICAgICAgICAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgICAgICAgfCA1NiAgICAgICAgICAgICAgICAgIHwNCg0KNC4gTWVuZW50dWthbiBrZWxhcyBtZWRpYW4NCg0KS2VsYXMgbWVkaWFuIGFkYWxhaCAzIC0gNCAoZnJla3VlbnNpIGt1bXVsYXRpZiBzZWJlbHVtIGtlbGFzIGluaSBhZGFsYWggMjMsIGRhbiBrdW11bGF0aWYga2VsYXMgaW5pIG1lbmNhcGFpIDQzKS4NCg0KNS4gTWVuZW50dWthbiBmcmVrdWVuc2kga3VtdWxhdGlmIHNlYmVsdW0ga2VsYXMgbWVkaWFuLg0KJCRmX2s9IDIzJCQNCg0KNi4gTWVuZW50dWthbiBmcmVrdWVuc2kga2VsYXMgbWVkaWFuLg0KJCRmX209IDIwJCQNCg0KNy4gTWVuZW50dWthbiBwYW5qYW5nIGludGVydmFsIGtlbGFzLg0KJCRwPSAxJCQNCg0KOC4gTWVuZW50dWthbiB0ZXBpIGJhd2FoIGtlbGFzIG1lZGlhbi4NCiQkVF9iID0gMiw1JCQNCg0KOS4gTWVtYXN1a2thbiBrZSBkYWxhbSBydW11cy4NCiQkDQpNX2UgPSBUX2IgKyBcZnJhYyB7XGZyYWN74oiRZn17Mn0tZl9rfXtmX219IFxjZG90IHAgPSAyLDUgKyBcZnJhYyB7MjgtMjN9ezIwfSBcY2RvdCAxID0gMiw3NQ0KJCQNCg0KIyMjIE1lZGlhbiB0YW5wYSBPdXRsaWVyDQoNCjEuIE1lbmdoaXR1bmcganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSAo4oiRZikNCiQk4oiRZj0zKzgrMTIrMjArMTA9NTMkJA0KDQoyLiBNZW1iYWdpIGp1bWxhaCB0b3RhbCBmcmVrdWVuc2kgZGVuZ2FuIDIuDQokJCBcZnJhYyB74oiRZn17Mn0gPSBcZnJhYyB7NTN9ezJ9ID0gMjYsNSQkDQoNCjMuIE1lbmVudHVrYW4gZnJla3VlbnNpIGt1bXVsYXRpZg0KDQp8IFJlbnRhbmcgV2FrdHUgQmVsYWphciAoSmFtKSB8IEp1bWxhaCBTaXN3YSAoXChmXCkpIHwgRnJla3VlbnNpIEt1bXVsYXRpZiB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IDAgLSAxICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgICB8DQp8IDEgLSAyICAgICAgICAgICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgICAgICAgIHwgMTEgICAgICAgICAgICAgICAgICB8DQp8IDIgLSAzICAgICAgICAgICAgICAgICAgICAgICB8IDEyICAgICAgICAgICAgICAgICAgIHwgMjMgICAgICAgICAgICAgICAgICB8DQp8IDMgLSA0ICAgICAgICAgICAgICAgICAgICAgICB8IDIwICAgICAgICAgICAgICAgICAgIHwgNDMgICAgICAgICAgICAgICAgICB8DQp8IDQgLSA1ICAgICAgICAgICAgICAgICAgICAgICB8IDEwICAgICAgICAgICAgICAgICAgIHwgNTMgICAgICAgICAgICAgICAgICB8DQoNCjQuIE1lbmVudHVrYW4ga2VsYXMgbWVkaWFuDQoNCktlbGFzIG1lZGlhbiBhZGFsYWggMyAtIDQgKGZyZWt1ZW5zaSBrdW11bGF0aWYgc2ViZWx1bSBrZWxhcyBpbmkgYWRhbGFoIDIzLCBkYW4ga3VtdWxhdGlmIGtlbGFzIGluaSBtZW5jYXBhaSA0MykuDQoNCjUuIE1lbmVudHVrYW4gZnJla3VlbnNpIGt1bXVsYXRpZiBzZWJlbHVtIGtlbGFzIG1lZGlhbi4NCiQkZl9rPSAyMyQkDQoNCjYuIE1lbmVudHVrYW4gZnJla3VlbnNpIGtlbGFzIG1lZGlhbi4NCiQkZl9tPSAyMCQkDQoNCjcuIE1lbmVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcy4NCiQkcD0gMSQkDQoNCjguIE1lbmVudHVrYW4gdGVwaSBiYXdhaCBrZWxhcyBtZWRpYW4uDQokJFRfYiA9IDIsNSQkDQoNCjkuIE1lbWFzdWtrYW4ga2UgZGFsYW0gcnVtdXMuDQokJA0KTV9lID0gVF9iICsgXGZyYWMge1xmcmFje+KIkWZ9ezJ9LWZfa317Zl9tfSBcY2RvdCBwID0gMiw1ICsgXGZyYWMgezI2LDUtMjN9ezIwfSBcY2RvdCAxID0gMiw2NzUNCiQkDQoNCg0KIyMjIE1vZHVzIGRlbmdhbiBPdXRsaWVyDQoNCjEuIE1lbmdpZGVudGlmaWthc2kga2VsYXMgbW9kdXMNCg0KS2VsYXMgbW9kdXMgYWRhbGFoIDMgLSA0IGthcmVuYSBtZW1pbGlraSBmcmVrdWVuc2kgdGVydGluZ2dpIHlhaXR1IDIwIA0KDQoyLiBNZW5lbnR1a2FuIHRlcGkgYmF3YWgga2VsYXMgbW9kdXMNCiQkIFRfYiA9IDIsNSAkJA0KDQozLiBNZW5lbnR1a2FuICRkXzEkDQokJCBkXzEgPSAyMC0xMiA9IDgkJA0KDQo0LiBNZW5lbnR1a2FuICRkXzIkDQokJCBkXzIgPSAyMC0xMCA9IDEwJCQNCg0KNS4gTWVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcw0KJCRwPSAxJCQNCg0KNi4gTWVtYXN1a2thbiBrZSBkYWxhbSBydW11cw0KJCQNCk1fbyA9IFRfYiArIFxmcmFjIHtkXzF9IHtkXzErZF8yfSBcY2RvdCBwPSAyLDUgKyBcZnJhYyB7OH17OCsxMH0gXGNkb3QgMSA9IDIsOTUNCiQkDQoNCiMjIyBNb2R1cyB0YW5wYSBPdXRsaWVyDQoNCjEuIE1lbmdpZGVudGlmaWthc2kga2VsYXMgbW9kdXMNCg0KS2VsYXMgbW9kdXMgYWRhbGFoIDMgLSA0IGthcmVuYSBtZW1pbGlraSBmcmVrdWVuc2kgdGVydGluZ2dpIHlhaXR1IDIwIA0KDQoyLiBNZW5lbnR1a2FuIHRlcGkgYmF3YWgga2VsYXMgbW9kdXMNCiQkIFRfYiA9IDIsNSAkJA0KDQozLiBNZW5lbnR1a2FuICRkXzEkDQokJCBkXzEgPSAyMC0xMiA9IDgkJA0KDQo0LiBNZW5lbnR1a2FuICRkXzIkDQokJCBkXzIgPSAyMC0xMCA9IDEwJCQNCg0KNS4gTWVudHVrYW4gcGFuamFuZyBpbnRlcnZhbCBrZWxhcw0KJCRwPSAxJCQNCg0KNi4gTWVtYXN1a2thbiBrZSBkYWxhbSBydW11cw0KJCQNCk1fbyA9IFRfYiArIFxmcmFjIHtkXzF9IHtkXzErZF8yfSBcY2RvdCBwPSAyLDUgKyBcZnJhYyB7OH17OCsxMH0gXGNkb3QgMSA9IDIsOTUNCiQkDQoNCiMjIyBWaXN1YWxpc2FzaSBkZW5nYW4gQm94cGxvdA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBrZWxvbXBvaw0KaW50ZXJ2YWwgPC0gYygiMCAtIDEiLCAiMSAtIDIiLCAiMiAtIDMiLCAiMyAtIDQiLCAiNCAtIDUiLCAiNSAtIDYiLCAiNiAtIDciKQ0KZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycyA8LSBjKDMsIDgsIDEyLCAyMCwgMTAsIDIsIDEpICAjIERlbmdhbiBvdXRsaWVycw0KZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIGMoMywgOCwgMTIsIDIwLCAxMCkgICAgICAgICAjIFRhbnBhIG91dGxpZXJzIChtZW5naGFwdXMga2VsYXMgNS02IGRhbiA2LTcpDQoNCiMgTmlsYWkgdGVuZ2FoICh4X2kpIHNldGlhcCBpbnRlcnZhbA0KbmlsYWlfdGVuZ2FoX2Rlbmdhbl9vdXRsaWVycyA8LSBjKDAuNSwgMS41LCAyLjUsIDMuNSwgNC41LCA1LjUsIDYuNSkNCm5pbGFpX3RlbmdhaF90YW5wYV9vdXRsaWVycyA8LSBjKDAuNSwgMS41LCAyLjUsIDMuNSwgNC41KQ0KDQojIE1lbmdoaXR1bmcgdG90YWwgZnJla3VlbnNpDQp0b3RhbF9mcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzKQ0KdG90YWxfZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZ2hpdHVuZyBNZWFuDQptZWFuX2Rlbmdhbl9vdXRsaWVycyA8LSBzdW0oZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycyAqIG5pbGFpX3RlbmdhaF9kZW5nYW5fb3V0bGllcnMpIC8gdG90YWxfZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycw0KbWVhbl90YW5wYV9vdXRsaWVycyA8LSBzdW0oZnJla3VlbnNpX3RhbnBhX291dGxpZXJzICogbmlsYWlfdGVuZ2FoX3RhbnBhX291dGxpZXJzKSAvIHRvdGFsX2ZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycw0KDQojIE1lZGlhbiAtIERlbmdhbiBPdXRsaWVycw0KIyBGcmVrdWVuc2kga3VtdWxhdGlmIHVudHVrIGtlbGFzIG1lZGlhbg0KZnJla3VlbnNpX2t1bXVsYXRpZl9kZW5nYW5fb3V0bGllcnMgPC0gY3Vtc3VtKGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQpuX2Rlbmdhbl9vdXRsaWVycyA8LSB0b3RhbF9mcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzDQptZWRpYW5fZGVuZ2FuX291dGxpZXJzIDwtIDIuNSArICgyOCAtIGZyZWt1ZW5zaV9rdW11bGF0aWZfZGVuZ2FuX291dGxpZXJzWzNdKSAvIGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnNbNF0gKiAxDQoNCiMgTWVkaWFuIC0gVGFucGEgT3V0bGllcnMNCiMgRnJla3VlbnNpIGt1bXVsYXRpZiB1bnR1ayBrZWxhcyBtZWRpYW4NCmZyZWt1ZW5zaV9rdW11bGF0aWZfdGFucGFfb3V0bGllcnMgPC0gY3Vtc3VtKGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycykNCm5fdGFucGFfb3V0bGllcnMgPC0gdG90YWxfZnJla3VlbnNpX3RhbnBhX291dGxpZXJzDQptZWRpYW5fdGFucGFfb3V0bGllcnMgPC0gMi41ICsgKDI2LjUgLSBmcmVrdWVuc2lfa3VtdWxhdGlmX3RhbnBhX291dGxpZXJzWzNdKSAvIGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVyc1s0XSAqIDENCg0KIyBNb2R1cyAtIERlbmdhbiBPdXRsaWVycw0KIyBNZW5naWRlbnRpZmlrYXNpIGtlbGFzIG1vZHVzDQprZWxhc19tb2R1c19kZW5nYW5fb3V0bGllcnMgPC0gMi41DQptb2R1bF9kZW5nYW5fb3V0bGllcnMgPC0gMi41ICsgKDIwIC0gMTIpIC8gKDggKyAxMCkgKiAxDQoNCg0KIyBNb2R1cyAtIFRhbnBhIE91dGxpZXJzDQojIE1lbmdpZGVudGlmaWthc2kga2VsYXMgbW9kdXMNCmtlbGFzX21vZHVzX3RhbnBhX291dGxpZXJzIDwtIDIuNQ0KbW9kdWxfdGFucGFfb3V0bGllcnMgPC0gMi41ICsgKDIwIC0gMTIpIC8gKDggKyAxMCkgKiAxDQoNCiMgTWVuZ2dhYnVuZ2thbiBkYXRhIGtlIGRhbGFtIHNhdHUgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YV9kZW5nYW5fb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaF9kZW5nYW5fb3V0bGllcnMsIGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQpkYXRhX3RhbnBhX291dGxpZXJzIDwtIHJlcChuaWxhaV90ZW5nYWhfdGFucGFfb3V0bGllcnMsIGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycykNCg0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBOaWxhaSA9IGMoZGF0YV9kZW5nYW5fb3V0bGllcnMsIGRhdGFfdGFucGFfb3V0bGllcnMpLA0KICBLZWxvbXBvayA9IHJlcChjKCJEZW5nYW4gT3V0bGllcnMiLCAiVGFucGEgT3V0bGllcnMiKSwgDQogICAgICAgICAgICAgICAgIHRpbWVzID0gYyhsZW5ndGgoZGF0YV9kZW5nYW5fb3V0bGllcnMpLCBsZW5ndGgoZGF0YV90YW5wYV9vdXRsaWVycykpKQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSA9IGRhdGEsIA0KICB5ID0gfk5pbGFpLCANCiAgY29sb3IgPSB+S2Vsb21wb2ssIA0KICB0eXBlID0gImJveCIsIA0KICBib3hwb2ludHMgPSAiYWxsIiAgIyBNZW5hbXBpbGthbiBzZW11YSB0aXRpayBkYXRhDQopICU+JSANCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlBlbmdhcnVoIE91dGxpZXJzIHRlcmhhZGFwIE1lYW4sIE1lZGlhbiwgZGFuIE1vZHVzIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiS2Vsb21wb2siKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtZWFuX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lYW5fdGFucGFfb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVhbjoiLCByb3VuZChtZWFuX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtZWRpYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCByb3VuZChtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lZGlhbl90YW5wYV9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46Iiwgcm91bmQobWVkaWFuX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtb2R1bF9kZW5nYW5fb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdWxfZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1vZHVsX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzOiIsIHJvdW5kKG1vZHVsX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQpgYGANCg0KIyMjIFZpc3VhbGlzYXNpIGRlbmdhbiBIaXN0b2dyYW0NCg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YTogSW50ZXJ2YWwgbmlsYWkgZGFuIGZyZWt1ZW5zaQ0KaW50ZXJ2YWwgPC0gYygiMCAtIDEiLCAiMSAtIDIiLCAiMiAtIDMiLCAiMyAtIDQiLCAiNCAtIDUiLCAiNSAtIDYiLCAiNiAtIDciKQ0KZnJla3VlbnNpX2Rlbmdhbl9vdXRsaWVycyA8LSBjKDMsIDgsIDEyLCAyMCwgMTAsIDIsIDEpICAjIERlbmdhbiBvdXRsaWVycw0KZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIGMoMywgOCwgMTIsIDIwLCAxMCkgICAgICAgICMgVGFucGEgb3V0bGllcnMgKG1lbmdoYXB1cyBrZWxhcyA2IC0gNykNCg0KIyBNZW5naGl0dW5nIG5pbGFpIHRlbmdhaCAoeF9pKSB1bnR1ayBzZXRpYXAgaW50ZXJ2YWwNCm5pbGFpX3RlbmdhaCA8LSBjKDAuNSwgMS41LCAyLjUsIDMuNSwgNC41LCA1LjUsIDYuNSkNCg0KIyBNZW5naGl0dW5nIHRvdGFsIGZyZWt1ZW5zaSB1bnR1ayBrZWR1YSBkYXRhc2V0DQp0b3RhbF9mcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzKQ0KdG90YWxfZnJla3VlbnNpX3RhbnBhX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZ2hpdHVuZyByYXRhLXJhdGEgKG1lYW4pIHVudHVrIGtlZHVhIGRhdGFzZXQNCm1lYW5fZGVuZ2FuX291dGxpZXJzIDwtIHN1bShmcmVrdWVuc2lfZGVuZ2FuX291dGxpZXJzICogbmlsYWlfdGVuZ2FoKSAvIHRvdGFsX2ZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMNCm1lYW5fdGFucGFfb3V0bGllcnMgPC0gc3VtKGZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyAqIG5pbGFpX3RlbmdhaFsxOjVdKSAvIHRvdGFsX2ZyZWt1ZW5zaV90YW5wYV9vdXRsaWVycyAgIyBIYW55YSA1IGludGVydmFsIHRhbnBhIG91dGxpZXJzDQoNCiMgTWVuZW50dWthbiBuaWxhaSBtZWRpYW4NCm1lZGlhbl9kZW5nYW5fb3V0bGllcnMgPC0gMi43NSAgIyBOaWxhaSBtZWRpYW4gZGVuZ2FuIG91dGxpZXJzDQptZWRpYW5fdGFucGFfb3V0bGllcnMgPC0gMi42NzUgICMgTmlsYWkgbWVkaWFuIHRhbnBhIG91dGxpZXJzDQoNCiMgTWVuZW50dWthbiBuaWxhaSBtb2R1cw0KbW9kdXNfZGVuZ2FuX291dGxpZXJzIDwtIDIuOTQ0ICAjIE5pbGFpIG1vZHVzIHlhbmcgZGlrZXRhaHVpDQptb2R1c190YW5wYV9vdXRsaWVycyA8LSAyLjk0NCAgICMgTmlsYWkgbW9kdXMgeWFuZyBkaWtldGFodWkNCg0KIyBNZW1idWF0IGRlbnNpdHkgcGxvdCB1bnR1ayBtYXNpbmctbWFzaW5nIGRhdGFzZXQNCiMgRGF0YSBkZW5nYW4gb3V0bGllcnMNCmRhdGFfZGVuZ2FuX291dGxpZXJzIDwtIHJlcChuaWxhaV90ZW5nYWgsIGZyZWt1ZW5zaV9kZW5nYW5fb3V0bGllcnMpDQojIERhdGEgdGFucGEgb3V0bGllcnMNCmRhdGFfdGFucGFfb3V0bGllcnMgPC0gcmVwKG5pbGFpX3RlbmdhaFsxOjVdLCBmcmVrdWVuc2lfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZ2hpdHVuZyBkZW5zaXR5IHBsb3QNCmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzIDwtIGRlbnNpdHkoZGF0YV9kZW5nYW5fb3V0bGllcnMpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzIDwtIGRlbnNpdHkoZGF0YV90YW5wYV9vdXRsaWVycykNCg0KIyBQYXN0aWthbiB0aWRhayBhZGEgbmlsYWkgbmVnYXRpZiBkaSB4IGRhbiB5DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4IDwtIHBtYXgoMCwgZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCkNCmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCA8LSBwbWF4KDAsIGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCkNCg0KIyBNZW1idWF0IHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQpwbG90IDwtIHBsb3RfbHkoKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIHJhdGEtcmF0YSB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVhbl9kZW5nYW5fb3V0bGllcnMsIG1lYW5fZGVuZ2FuX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJSYXRhLXJhdGEgKERlbmdhbiBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIHJhdGEtcmF0YSB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWFuX3RhbnBhX291dGxpZXJzLCBtZWFuX3RhbnBhX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIlJhdGEtcmF0YSAoVGFucGEgT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyBNb2R1cyB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobW9kdXNfZGVuZ2FuX291dGxpZXJzLCBtb2R1c19kZW5nYW5fb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gcGFzdGUoIk1vZHVzIChEZW5nYW4gT3V0bGllcnMpOiIsIHJvdW5kKG1vZHVzX2Rlbmdhbl9vdXRsaWVycywgMikpLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCBkYXNoID0gJ2RvdCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgTW9kdXMgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobW9kdXNfdGFucGFfb3V0bGllcnMsIG1vZHVzX3RhbnBhX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gcGFzdGUoIk1vZHVzIChUYW5wYSBPdXRsaWVycyk6Iiwgcm91bmQobW9kdXNfdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIE1lZGlhbiB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVkaWFuX2Rlbmdhbl9vdXRsaWVycywgbWVkaWFuX2Rlbmdhbl9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSBwYXN0ZSgiTWVkaWFuIChEZW5nYW4gT3V0bGllcnMpOiIsIHJvdW5kKG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjYpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIE1lZGlhbiB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWRpYW5fdGFucGFfb3V0bGllcnMsIG1lZGlhbl90YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9IHBhc3RlKCJNZWRpYW4gKFRhbnBhIE91dGxpZXJzKToiLCByb3VuZChtZWRpYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgZGFzaCA9ICdkb3QnKQ0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTWVhbiwgTWVkaWFuLCBkYW4gTW9kdXMiLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJSZW50YW5nIFdha3R1IEJlbGFqYXIgKEphbSkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiS2VwYWRhdGFuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIHJhdGEtcmF0YSBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwgICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayByYXRhLXJhdGEgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fdGFucGFfb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00NSwgICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWRpYW4gZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWRpYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpICogMC44LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCByb3VuZChtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtNDUsDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBzaXplID0gMTIpDQogICAgICApLA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1lZGlhbiBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVkaWFuX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjgsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuOiIsIHJvdW5kKG1lZGlhbl90YW5wYV9vdXRsaWVycywgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTQ1LA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtb2R1cyBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1vZHVzX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSAqIDAuNywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNb2R1czoiLCByb3VuZChtb2R1c19kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC02MCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICAjIEFub3Rhc2kgdW50dWsgbW9kdXMgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1vZHVzX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjcsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC02MCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQpgYGANCg0KIyMjIEFuYWxpc2lzDQoNCioqTWVhbiAoUmF0YS1yYXRhKSoqDQoNCk1lYW4gZGVuZ2FuIE91dGxpZXI6IDMsMTQNCg0KTWVhbiB0YW5wYSBPdXRsaWVyOiAyLDk5DQoNCipJbnRlcnByZXRhc2k6Kg0KDQpOaWxhaSBtZWFuIG1lbWJlcmlrYW4gZ2FtYmFyYW4gdGVudGFuZyB3YWt0dSBiZWxhamFyIHJhdGEtcmF0YSB5YW5nIGRpaGFiaXNrYW4gb2xlaCBzaXN3YS4gUGVyYmVkYWFuIGFudGFyYSBtZWFuIGRlbmdhbiBvdXRsaWVyICgzLDE0IGphbSkgZGFuIG1lYW4gdGFucGEgb3V0bGllciAoMiw5OSBqYW0pIG1lbnVuanVra2FuIGJhaHdhIGFkYW55YSBiZWJlcmFwYSBzaXN3YSB5YW5nIG1lbmdoYWJpc2thbiB3YWt0dSBiZWxhamFyIHNhbmdhdCBsYW1hIChtaXNhbG55YSA1LTcgamFtKSBtZW55ZWJhYmthbiByYXRhLXJhdGEga2VzZWx1cnVoYW4gbWVuamFkaSBsZWJpaCB0aW5nZ2kuIE1lc2tpcHVuIHNlYmFnaWFuIGJlc2FyIHNpc3dhIGJlbGFqYXIgZGFsYW0gcmVudGFuZyB3YWt0dSB5YW5nIGxlYmloIHBlbmRlaywga2VoYWRpcmFuIHNpc3dhIHlhbmcgYmVsYWphciBkYWxhbSB3YWt0dSBsYW1hIG1lbmFyaWsgcmF0YS1yYXRhIHdha3R1IGJlbGFqYXIga2UgYW5na2EgeWFuZyBsZWJpaCB0aW5nZ2kuDQoNCipQZW5nYXJ1aCB0ZXJoYWRhcCBLYXN1czoqDQoNCkppa2EgaGFueWEgbWVsaWhhdCBtZWFuIHRhbnBhIG91dGxpZXIgKDIsOTkgamFtKSwgcmF0YS1yYXRhIHdha3R1IGJlbGFqYXIgc2lzd2EgbGViaWggcmVhbGlzdGlzIGRhbiBtZW5jZXJtaW5rYW4ga2ViaWFzYWFuIGJlbGFqYXIgbWF5b3JpdGFzIHNpc3dhLCB5YW5nIG1lbmdoYWJpc2thbiB3YWt0dSBrdXJhbmcgZGFyaSAzIGphbS4gQXJ0aW55YSwgbWVza2lwdW4gYWRhIGJlYmVyYXBhIHNpc3dhIHlhbmcgYmVsYWphciBkYWxhbSB3YWt0dSBsYW1hLCBtYXlvcml0YXMgc2lzd2EgbGViaWggbWVtaWxpaCB1bnR1ayBiZWxhamFyIGRhbGFtIHdha3R1IHlhbmcgbGViaWggc2luZ2thdC4NCg0KKipNZWRpYW4qKg0KDQpNZWRpYW4gZGVuZ2FuIE91dGxpZXI6IDIsNzUNCg0KTWVkaWFuIHRhbnBhIE91dGxpZXI6IDIsNjc1DQoNCipJbnRlcnByZXRhc2k6Kg0KDQpNZWRpYW4gbWVtYmVyaWthbiBuaWxhaSB0ZW5nYWggZGFyaSBkYXRhIHlhbmcgdGVydXJ1dCwgbWVtYmFnaSBkYXRhIG1lbmphZGkgZHVhIGJhZ2lhbiB5YW5nIHNhbWEuIE1lZGlhbiBkZW5nYW4gb3V0bGllciAoMiw3NSBqYW0pIGRhbiBtZWRpYW4gdGFucGEgb3V0bGllciAoMiw2NzUgamFtKSBtZW51bmp1a2thbiBuaWxhaSB5YW5nIGhhbXBpciBzYW1hLCB5YW5nIG1lbnVuanVra2FuIGJhaHdhIHBvc2lzaSBuaWxhaSB0ZW5nYWggdGlkYWsgYmFueWFrIGRpcGVuZ2FydWhpIG9sZWggZGF0YSBla3N0cmltIChvdXRsaWVyKS4gTWVkaWFuIHRldGFwIG1lbWJlcmlrYW4gZ2FtYmFyYW4geWFuZyBzdGFiaWwgdGVudGFuZyBrZWJpYXNhYW4gd2FrdHUgYmVsYWphciBzaXN3YSwgdGFucGEgdGVycGVuZ2FydWggb2xlaCBzaXN3YSB5YW5nIG1lbmdoYWJpc2thbiB3YWt0dSBiZWxhamFyIGphdWggbGViaWggbGFtYS4NCg0KKlBlbmdhcnVoIHRlcmhhZGFwIEthc3VzOioNCg0KTmlsYWkgbWVkaWFuIHlhbmcgbWVuZGVrYXRpIDIsNyBtZW51bmp1a2thbiBiYWh3YSBzZWJhZ2lhbiBiZXNhciBzaXN3YSBtZW5naGFiaXNrYW4gd2FrdHUgYmVsYWphciBkYWxhbSByZW50YW5nIDAtMyBqYW0uIEluaSBtZW5lZ2Fza2FuIGJhaHdhIG1heW9yaXRhcyBzaXN3YSBiZWxhamFyIGRlbmdhbiBkdXJhc2kgeWFuZyBjdWt1cCBtb2RlcmF0LCB0YW5wYSB0ZXJwZW5nYXJ1aCBvbGVoIHNpc3dhIHlhbmcgbWVuZ2hhYmlza2FuIHdha3R1IGJlbGFqYXIgc2VjYXJhIGVrc3RyZW0uDQoNCioqTW9kdXMqKg0KDQpNb2R1cyBkZW5nYW4gT3V0bGllcjogMiw5NQ0KDQpNb2R1cyB0YW5wYSBPdXRsaWVyOiAyLDk1DQoNCipJbnRlcnByZXRhc2k6Kg0KDQpNb2R1cyBhZGFsYWggbmlsYWkgeWFuZyBwYWxpbmcgc2VyaW5nIG11bmN1bCBkYWxhbSBkYXRhLiBEYWxhbSBrYXN1cyBpbmksIHJlbnRhbmcgd2FrdHUgYmVsYWphciAzLTQgamFtIG1lbWlsaWtpIGZyZWt1ZW5zaSB0ZXJ0aW5nZ2ksIHlhaXR1IGxlYmloIGJhbnlhayBzaXN3YSB5YW5nIG1lbmdoYWJpc2thbiB3YWt0dSBiZWxhamFyIHBhZGEgcmVudGFuZyBpbmkuIEJhaWsgZGVuZ2FuIGF0YXUgdGFucGEgb3V0bGllciwgbW9kdXMgdGV0YXAgYmVyYWRhIHBhZGEgcmVudGFuZyAzLTQgamFtLCB5YW5nIG1lbnVuanVra2FuIGJhaHdhIHNlYmFnaWFuIGJlc2FyIHNpc3dhIGNlbmRlcnVuZyBiZWxhamFyIGRhbGFtIHdha3R1IHRlcnNlYnV0Lg0KDQoqUGVuZ2FydWggdGVyaGFkYXAgS2FzdXM6Kg0KDQpNb2R1cyB5YW5nIGJlcmFkYSBwYWRhIG5pbGFpIDIsOTUgamFtIG1lbnVuanVra2FuIGJhaHdhIG1heW9yaXRhcyBzaXN3YSBtZW5naGFiaXNrYW4gd2FrdHUgYmVsYWphciBhbnRhcmEgMy00IGphbS4gSW5pIG1lbmdpbmRpa2FzaWthbiBiYWh3YSByZW50YW5nIHdha3R1IGluaSBhZGFsYWggcGlsaWhhbiB5YW5nIHBhbGluZyB1bXVtIGRpIGFudGFyYSBzaXN3YSwgbWVza2lwdW4gYWRhIHZhcmlhc2kgd2FrdHUgYmVsYWphciB5YW5nIGxlYmloIGxhbWEgYXRhdSBsZWJpaCBzaW5na2F0IHBhZGEgYmViZXJhcGEgc2lzd2Eu