Tugas Individu

Soal Pengujian Hipotesis

Foto Diri

Soal Pengujian Hipotesis

1. Apa perbedaan pengambilan kesimpulan dan keputusan dalam statistika deskriptif dan statistika inferensial?

1.1 Statistika Deskriptif

Statistika deskriptif digunakan untuk menyajikan data dengan cara yang lebih sederhana dan mudah dipahami. Tujuan utamanya adalah menggambarkan atau meringkas data yang sudah ada tanpa mencoba membuat kesimpulan untuk populasi yang lebih besar. Pengambilan keputusan dalam statistika deskriptif hanya terbatas pada data yang dianalisis, seperti membuat tabel, grafik, atau menghitung rata-rata, median, dan ukuran lainnya. Hasil dari statistika deskriptif sifatnya hanya menggambarkan data yang ada tanpa interpretasi lebih jauh.

1.1.1 Ciri-ciri utama:

  1. Digunakan untuk menyajikan data dalam bentuk yang lebih sederhana.
  2. Menggunakan tabel, grafik, diagram, rata-rata, median, modus, variansi, atau standar deviasi.
  3. Fokus pada meringkas data yang ada tanpa membuat kesimpulan lebih jauh.
  4. Tidak memerlukan pengujian hipotesis karena hanya menggambarkan data.

1.1.2 Contoh:

“Dari data nilai ujian matematika 50 siswa, ditemukan bahwa rata-rata nilai adalah 80, standar deviasi 5, dan nilai tertinggi adalah 95.”

Perhitungan:

Rata-rata (Mean):
Rata-rata dihitung dengan menjumlahkan semua nilai dan membaginya dengan jumlah siswa:
\[ \text{Rata-rata} = \frac{\text{Jumlah semua nilai}}{\text{Jumlah siswa}} \]

Misalnya, jika total nilai adalah 4000:

\[ \text{Rata-rata} = \frac{4000}{50} = 80 \]

Standar Deviasi:
Standar deviasi mengukur seberapa jauh data menyebar dari rata-rata. Rumusnya:

\[ s = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n}} \]

Dengan: - \(x_i\): Nilai individu
- \(\bar{x}\): Rata-rata
- \(n\): Jumlah data

Jika nilai \(x_i\) diambil sebagai sampel kecil, seperti 75, 85, 80, dll., hitung selisih tiap nilai dengan rata-rata, kuadratkan selisih, lalu rata-rata hasilnya. Misalnya, hasilnya adalah 25:

\[ s = \sqrt{\frac{25}{50}} = 5 \]

Nilai Tertinggi:

Nilai tertinggi diambil langsung dari data, yaitu 95.

Hasil ini hanya menggambarkan data yang ada, tanpa kesimpulan untuk populasi.


1.2 Statistika Inferensial

Statistika inferensial digunakan untuk membuat kesimpulan atau generalisasi tentang populasi berdasarkan data sampel yang diambil. Metode ini digunakan untuk menguji hipotesis, membuat prediksi, atau memperkirakan parameter populasi. Pengambilan keputusan dalam statistika inferensial tidak hanya berfokus pada data sampel, tetapi juga mencoba memahami hubungan yang lebih luas dengan populasi. Hasilnya memungkinkan penyimpulan atau generalisasi terhadap data yang dianalisis, seperti memperkirakan tren, membuat prediksi, atau menentukan apakah ada perbedaan signifikan antara kelompok tertentu.

1.2.1 Ciri-ciri utama:

  1. Digunakan untuk membuat kesimpulan atau generalisasi tentang populasi berdasarkan data sampel.
  2. Melibatkan pengujian hipotesis, estimasi, dan prediksi.
  3. Menggunakan metode statistik seperti uji-t, ANOVA, regresi, atau interval kepercayaan.
  4. Membutuhkan tingkat signifikansi (α) untuk menentukan validitas hasil analisis.

1.2.2 Contoh:

“Dari data sampel 50 siswa, dilakukan uji hipotesis dengan tingkat signifikansi 5% untuk menentukan apakah rata-rata nilai siswa di seluruh sekolah lebih besar dari 75.”

Perhitungan:
1. Hipotesis Nol (H₀): Rata-rata nilai siswa = 75.
Hipotesis Alternatif (H₁): Rata-rata nilai siswa > 75.

  1. Statistik Uji (Z atau t):
    Statistik uji dihitung menggunakan:
    \[ t = \frac{\bar{x} - \mu}{s / \sqrt{n}} \]
    Dengan:

    • \(\bar{x}\): Rata-rata sampel (80).
    • \(\mu\): Rata-rata populasi menurut H₀ (75).
    • \(s\): Standar deviasi (5).
    • \(n\): Ukuran sampel (50).

    Masukkan nilai:
    \[ t = \frac{80 - 75}{5 / \sqrt{50}} = \frac{5}{5 / 7.07} = \frac{5}{0.707} \approx 7.07 \]

  2. Tingkat Signifikansi (α):
    Dengan α = 0.05 untuk uji satu sisi, nilai kritis t (dari tabel distribusi t) untuk \(n - 1 = 49\) adalah sekitar 1.68.

  3. Keputusan:
    Jika \(t > 1.68\), tolak H₀.
    Karena \(t = 7.07\), maka H₀ ditolak, dan dapat disimpulkan bahwa rata-rata nilai siswa secara signifikan lebih tinggi dari 75 pada tingkat signifikansi 5%.


Kesimpulan Perhitungan:

  • Statistika Deskriptif: Menggunakan rumus dasar untuk meringkas data, seperti rata-rata, standar deviasi, dan nilai tertinggi.
  • Statistika Inferensial: Melibatkan pengujian hipotesis menggunakan statistik uji, tingkat signifikansi, dan distribusi probabilitas untuk membuat kesimpulan tentang populasi.

Hasil perhitungan deskriptif menjadi dasar untuk melakukan analisis inferensial.


1.3 Perbedaan Utama: Statistika Deskriptif vs Inferensial

Aspek Statistika Deskriptif Statistika Inferensial
Definisi Meringkas dan menggambarkan data yang ada. Membuat kesimpulan atau generalisasi tentang populasi.
Tujuan Menyajikan data agar mudah dipahami. Menguji hipotesis atau memperkirakan parameter populasi.
Cakupan Terbatas pada data sampel/populasi yang dianalisis. Bertujuan menarik kesimpulan untuk populasi dari data sampel.
Metode Utama Grafik, tabel, rata-rata, median, modus, standar deviasi. Uji hipotesis (uji-t, ANOVA), regresi, estimasi interval kepercayaan.
Uji Hipotesis Tidak digunakan. Sangat penting untuk membuat keputusan berdasarkan data sampel.
Hasil Bersifat deskriptif dan hanya menggambarkan data. Bersifat inferensial dan berlaku untuk populasi yang lebih besar.
Contoh Output “Rata-rata nilai ujian adalah 80.” “Rata-rata nilai ujian siswa lebih tinggi dari 75 pada tingkat signifikansi 5%.”
Hubungan dengan Uji Hipotesis Tidak berkaitan langsung. Berkaitan erat karena digunakan untuk menguji klaim atau asumsi.

1.4 Relevansi untuk Uji Hipotesis

Dalam uji hipotesis, statistika inferensial menjadi alat utama. Data dari sampel digunakan untuk:
1. Menguji klaim tentang rata-rata populasi.
- Contoh: Apakah rata-rata nilai populasi siswa lebih dari 75?
2. Menentukan probabilitas kesalahan (misalnya, kesalahan tipe I atau II) ketika menarik kesimpulan.

Statistika deskriptif hanya membantu memberikan gambaran awal tentang data, tetapi tidak cukup untuk membuat keputusan atau kesimpulan tentang populasi.


1.5 Kesimpulan

Statistika deskriptif dan statistika inferensial memiliki perbedaan utama dalam cara pengambilan kesimpulan dan keputusan:

  1. Statistika Deskriptif:
    • Fokus pada penyajian dan penggambaran data yang ada.
    • Kesimpulan yang diambil hanya berlaku untuk data dalam sampel atau populasi yang dianalisis, tanpa membuat generalisasi.
    • Contohnya, rata-rata, standar deviasi, atau nilai maksimum digunakan untuk memberikan gambaran singkat mengenai distribusi data.
    • Tidak melibatkan pengujian hipotesis atau estimasi parameter populasi.
  2. Statistika Inferensial:
    • Bertujuan untuk membuat generalisasi atau menarik kesimpulan tentang populasi berdasarkan data sampel.
    • Menggunakan pengujian hipotesis, estimasi parameter, atau prediksi untuk mengambil keputusan.
    • Keputusan didasarkan pada tingkat signifikansi (\(α\)) untuk menentukan apakah hasil dari sampel dapat digeneralisasi ke populasi.
    • Misalnya, uji hipotesis dilakukan untuk menentukan apakah rata-rata sampel berbeda secara signifikan dari nilai populasi tertentu.

Ringkasan Inti

Statistika deskriptif menggambarkan apa yang terlihat dari data tanpa membuat klaim lebih jauh, sedangkan statistika inferensial mengambil langkah lebih jauh untuk menarik kesimpulan tentang populasi menggunakan data sampel.

Statistika deskriptif berfungsi sebagai dasar untuk memahami data dan sering menjadi langkah awal sebelum melanjutkan ke analisis inferensial, yang melibatkan pengambilan keputusan berdasarkan data tersebut.

2. Apa perbedaan antara Alpha (α) dan Beta (β) dalam uji hipotesis?

2.1 Alpha (α)

Alpha (α) adalah tingkat signifikansi dalam uji hipotesis. Ini adalah probabilitas maksimum yang kita tentukan sebelumnya, yang digunakan untuk menyatakan batas toleransi kesalahan jika kita salah menolak hipotesis nol (Type I Error). Dengan kata lain, α adalah kemungkinan kita salah dalam menyatakan bahwa ada efek atau hubungan yang signifikan padahal sebenarnya tidak ada.

2.1.1 Pengertian Alpha (α)

Alpha (α) adalah tingkat signifikansi yang ditentukan sebelumnya dalam sebuah uji hipotesis. Ini menunjukkan:
1. Probabilitas Kesalahan Tipe I (Type I Error):
- Kesalahan tipe I terjadi jika hipotesis nol (\(H_0\)) yang sebenarnya benar ditolak.
- Dengan kata lain, ini adalah risiko salah menganggap ada efek atau perbedaan (false positive).

  1. Fungsi Alpha dalam Uji Hipotesis:
    • Alpha digunakan sebagai batas atau ambang untuk membandingkan p-value.
    • Jika p-value lebih kecil dari alpha, maka hasil uji dianggap signifikan, dan hipotesis nol ditolak.
  2. Penentuan Nilai Alpha:
    • Biasanya diset pada 0.05 (5%), 0.01 (1%), atau 0.10 (10%) tergantung pada konteks penelitian.
    • Nilai ini menunjukkan toleransi terhadap kemungkinan membuat kesalahan tipe I.
      • α = 0.05 berarti menerima kemungkinan 5% untuk membuat klaim salah bahwa ada efek, meskipun sebenarnya tidak ada.
      • Nilai yang lebih kecil (misalnya 0.01) digunakan dalam penelitian yang membutuhkan keakuratan tinggi, seperti uji medis.

2.1.2 Contoh Penjelasan Alpha dengan Ilustrasi

Studi Kasus:
Seorang peneliti ingin menguji apakah program latihan baru dapat meningkatkan rata-rata kebugaran siswa.
- Hipotesis nol (\(H_0\)): Tidak ada peningkatan rata-rata kebugaran siswa.
- Hipotesis alternatif (\(H_A\)): Ada peningkatan rata-rata kebugaran siswa.
- Tingkat signifikansi (\(α\)): 0.05 (5%).

Hasil Uji Statistik:
- Peneliti melakukan uji-t dan mendapatkan p-value = 0.03.

Interpretasi Alpha dan P-Value:
1. Perbandingan dengan Alpha:
- Karena p-value (0.03) < α (0.05), hasilnya signifikan.
- Keputusan: Menolak \(H_0\) dan menyimpulkan bahwa program latihan memiliki efek positif.

  1. Hubungan dengan Kesalahan Tipe I:
    • Dengan α = 0.05, peneliti menerima risiko 5% bahwa klaim efek positif dari program latihan adalah salah.
    • Artinya, jika sebenarnya tidak ada peningkatan kebugaran siswa, maka ada kemungkinan 5% keputusan ini keliru.

2.1.3 Poin Penting Tentang Alpha

  1. Hubungan dengan Ketatnya Keputusan:
    • Semakin kecil nilai alpha (misalnya, 0.01), semakin ketat keputusan yang diambil, karena hanya hasil dengan p-value yang sangat kecil akan dianggap signifikan.
  2. Konsekuensi Praktis:
    • Dalam penelitian ilmiah biasa, α = 0.05 cukup umum digunakan.
    • Dalam penelitian kritis seperti uji klinis obat, α yang lebih kecil (misalnya, 0.01) sering digunakan untuk meminimalkan risiko klaim salah.
  3. Kesalahpahaman Umum:
    • Alpha bukan probabilitas hipotesis nol itu sendiri benar atau salah. Ini adalah probabilitas membuat kesalahan dalam pengambilan keputusan berdasarkan data.

Dengan memahami alpha secara mendalam, peneliti dapat menyesuaikan tingkat signifikansi berdasarkan kebutuhan spesifik penelitian untuk mencapai keseimbangan yang sesuai antara risiko kesalahan dan sensitivitas pengujian.


2.2 Beta (β)

Beta (β) adalah probabilitas kesalahan tipe II (Type II error), yaitu kemungkinan kita gagal menolak hipotesis nol padahal sebenarnya hipotesis alternatif yang benar. Dengan kata lain, β adalah kesalahan kita dalam tidak menemukan efek atau hubungan yang seharusnya ada.

2.2.1 Pengertian Beta (β)

Beta (β) adalah probabilitas terjadinya kesalahan tipe II (Type II Error) dalam uji hipotesis. Ini menunjukkan:
1. Probabilitas Kesalahan Tipe II:
- Kesalahan tipe II terjadi jika hipotesis nol (\(H_0\)) tidak ditolak, padahal sebenarnya hipotesis alternatif (\(H_A\)) benar.
- Dengan kata lain, ini adalah risiko gagal mendeteksi efek yang sebenarnya ada (false negative).

  1. Hubungan Beta dengan Power:
    • Power adalah kemampuan uji statistik untuk mendeteksi efek yang benar-benar ada, dan dirumuskan sebagai \(1 - \beta\).
    • Power yang tinggi (misalnya, 0.80 atau 80%) berarti risiko kesalahan tipe II kecil (β = 0.20).
  2. Faktor-Faktor yang Memengaruhi Beta:
    • Ukuran sampel: Sampel yang lebih besar meningkatkan power, sehingga menurunkan β.
    • Ukuran efek: Efek yang lebih besar lebih mudah dideteksi, sehingga mengurangi β.
    • Signifikansi (α): Menurunkan α untuk meminimalkan kesalahan tipe I sering meningkatkan β, karena pengujian menjadi lebih konservatif.

2.2.2 Contoh Penjelasan Beta dengan Ilustrasi

Studi Kasus:

Seorang peneliti ingin menguji apakah metode belajar baru meningkatkan nilai rata-rata siswa.
- Hipotesis nol (\(H_0\)): Tidak ada peningkatan nilai rata-rata siswa.
- Hipotesis alternatif (\(H_A\)): Ada peningkatan nilai rata-rata siswa.
- Tingkat signifikansi (\(α\)): 0.05 (5%).

Hasil Uji Statistik:

  • Dari uji statistik, diperoleh p-value = 0.06 (lebih besar dari α).
  • Keputusan: Gagal menolak \(H_0\), sehingga tidak ada bukti signifikan bahwa metode belajar baru meningkatkan nilai.

Kesalahan Tipe II (Beta):

Jika metode belajar baru sebenarnya memang meningkatkan nilai siswa, tetapi uji statistik gagal mendeteksinya, maka keputusan ini merupakan kesalahan tipe II.
- Misalkan power uji adalah 0.80, maka β = \(1 - \text{power}\) = \(1 - 0.80 = 0.20\).
- Artinya, ada 20% kemungkinan bahwa peneliti salah menyimpulkan metode belajar baru tidak efektif, padahal sebenarnya efektif.


2.2.3 Poin Penting Tentang Beta

  1. Beta dan Ukuran Sampel:
    • Ukuran sampel yang kecil meningkatkan β karena data tidak cukup untuk mendeteksi efek yang ada.
  2. Beta dan Signifikansi (α):
    • Menurunkan α untuk memperkecil risiko kesalahan tipe I akan meningkatkan risiko kesalahan tipe II (β), karena pengujian menjadi lebih ketat.
  3. Power Ideal:
    • Dalam penelitian, power biasanya disarankan minimal 0.80, sehingga risiko kesalahan tipe II (\(β\)) tidak lebih dari 20%.
  4. Kesalahpahaman Umum:
    • Beta bukan probabilitas bahwa hipotesis nol benar. Sebaliknya, itu adalah probabilitas gagal mendeteksi efek yang ada berdasarkan data yang digunakan.

Dengan memahami beta secara rinci, peneliti dapat merancang penelitian yang lebih sensitif dan mampu mendeteksi efek yang signifikan, sekaligus mempertimbangkan risiko yang seimbang antara kesalahan tipe I dan tipe II.


2.3 Perbedaan Utama:

Berikut adalah tabel yang jelas dan informatif untuk menjelaskan Alpha (α) dan Beta (β) dalam uji hipotesis:

Aspek Alpha (α) Beta (β)
Definisi Tingkat signifikansi; probabilitas kesalahan tipe I. Probabilitas kesalahan tipe II.
Kesalahan yang Diukur Kesalahan tipe I: Menolak H₀ padahal H₀ benar (False Positive). Kesalahan tipe II: Gagal menolak H₀ padahal H₁ benar (False Negative).
Nilai Umum Biasanya ditetapkan pada 0.05 (5%), tetapi dapat disesuaikan (misalnya 0.01). Bergantung pada banyak faktor, biasanya diusahakan < 0.2 (20%).
Fungsi Menentukan batas untuk menolak hipotesis nol (H₀). Mengukur kemungkinan gagal mendeteksi efek yang benar-benar ada.
Hubungan dengan Power Tidak secara langsung terkait. Power = 1 - β; power tinggi berarti β rendah.
Pengaruh terhadap Hasil Uji Semakin kecil α, semakin ketat uji hipotesis, meningkatkan risiko β. Semakin kecil β, semakin besar power, membutuhkan sampel lebih besar.
Contoh Aplikasi Mengontrol probabilitas salah menolak H₀ dalam eksperimen obat baru. Meminimalkan risiko gagal mendeteksi perbedaan signifikan dalam eksperimen.

2.4 Kesimpulan perbedaan Alpha dan Beta

Alpha (α) adalah probabilitas membuat kesalahan tipe I, yaitu menolak hipotesis nol (\(H_0\)) yang sebenarnya benar, sedangkan Beta (β) adalah probabilitas kesalahan tipe II, yaitu gagal menolak \(H_0\) padahal hipotesis alternatif (\(H_1\)) benar. Alpha ditentukan sebelumnya sebagai tingkat signifikansi (misalnya, 0.05), sementara Beta bergantung pada power uji (1 - β), yang idealnya di atas 80%. Alpha fokus pada menghindari false positive, sedangkan Beta fokus pada menghindari false negative, dan keduanya saling memengaruhi dalam pengambilan keputusan statistik.

3. Kapan menggunakan kesalahan type I dan type II dalam uji hipotesis?

Kesalahan Tipe I dan Tipe II dalam uji hipotesis menggambarkan dua jenis kesalahan yang bisa terjadi ketika kita membuat keputusan mengenai hipotesis nol (H₀). Memahami kapan dan bagaimana kedua jenis kesalahan ini berpengaruh sangat penting dalam pengambilan keputusan statistik. Berikut adalah penjelasan mengenai kapan kita perlu memperhatikan masing-masing kesalahan ini:

3.1.1 Kesalahan Tipe I (Type I Error)

Kapan Digunakan?

Kesalahan tipe I lebih dipertimbangkan atau diterima jika:
1. Mengutamakan Keamanan atau Pencegahan
- Situasi di mana risiko salah mendeteksi efek lebih kecil daripada risiko gagal mendeteksi bahaya.
2. Eksplorasi Awal
- Penelitian eksplorasi atau eksperimen awal di mana klaim palsu dapat dimaklumi untuk membuka arah penelitian lebih lanjut.
3. Penelitian Sensitif terhadap Kesalahan Positif
- Misalnya, deteksi dini penyakit berbahaya atau identifikasi bahaya lingkungan.

Contoh Penggunaan

  • Deteksi Dini Penyakit
    • Hipotesis nol (\(H_0\)): Tidak ada penyakit.
    • Hipotesis alternatif (\(H_A\)): Ada penyakit.
    • Menolak \(H_0\) berarti menyimpulkan ada penyakit meskipun sebenarnya tidak ada. Dalam konteks ini, lebih baik memberikan hasil “positif palsu” (Type I error) agar tindakan pencegahan segera dilakukan.

3.1.2 Kesalahan Tipe II (Type II Error)

Kapan Digunakan?

Kesalahan tipe II lebih dipertimbangkan atau diterima jika:
1. Menghindari Klaim Palsu
- Situasi di mana risiko membuat klaim salah lebih serius daripada gagal mendeteksi efek.
2. Penelitian dengan Konsekuensi Ekonomi/Sosial Tinggi
- Misalnya, pengujian efektivitas obat baru, di mana klaim salah tentang efektivitas dapat membahayakan banyak orang.
3. Penelitian Klinis atau Ilmiah dengan Standar Tinggi
- Dalam uji coba klinis atau studi ilmiah besar, lebih baik gagal mendeteksi efek (Type II error) daripada membuat klaim salah yang dapat merusak kepercayaan ilmiah.

Contoh Penggunaan

  • Uji Efektivitas Obat Baru
    • Hipotesis nol (\(H_0\)): Obat tidak efektif.
    • Hipotesis alternatif (\(H_A\)): Obat efektif.
    • Gagal menolak \(H_0\) berarti obat dianggap tidak efektif meskipun sebenarnya efektif. Dalam penelitian ini, risiko kesalahan tipe II lebih dapat diterima untuk menghindari klaim palsu tentang efektivitas obat.

3.2 Kesimpulan

  1. Kesalahan tipe I digunakan atau lebih dapat diterima dalam konteks:
    • Situasi darurat (deteksi bahaya)
    • Eksperimen eksplorasi awal
    • Keamanan atau tindakan pencegahan lebih diutamakan.
  2. Kesalahan tipe II digunakan atau lebih dapat diterima dalam konteks:
    • Studi klinis, obat, atau teknologi yang membutuhkan validasi tinggi.
    • Situasi di mana klaim palsu akan membawa dampak besar.
  3. Penentuan toleransi terhadap kesalahan (alpha dan beta) disesuaikan dengan konsekuensi dari masing-masing kesalahan pada penelitian atau pengujian tertentu.

Referensi

Bakti Siregar. (n.d.). Pengujian Hipotesis. Diakses dari https://bookdown.org/dsciencelabs/statistika_dasar/_book/Pengujian_Hipotesis.html

Data Tab. (n.d.). Uji Hipotesis [Video]. YouTube. Diakses dari https://youtu.be/2fgQ_8AKhJY

365 Data Science. (n.d.). Type 1 and Type 2 Errors in Hypothesis Testing [Video]. YouTube. Diakses dari https://youtu.be/a_l991xUAOU

Joko Ade. (n.d.). Statistika: Mengenal Alpha dan Beta dalam Memutuskan Perkara. Kompasiana. Diakses dari https://www.kompasiana.com/jokoade/54f67e08a3331191178b4be1/statistika-mengenal-alpha-dan-beta-dalam-memutuskan-perkara

Algoritma. (n.d.). Statistika Deskriptif dan Inferensial. Diakses dari https://algorit.ma/blog/statistika-deskriptif-inferensial/

Valensi Kautsar. (n.d.). Error Tipe I dan Tipe II. Diakses dari https://www.valensikautsar.com/artikel/statistika/error-tipe-i-dan-tipe-2

LS0tDQp0aXRsZTogIlR1Z2FzIEluZGl2aWR1Ig0Kc3VidGl0bGU6ICJTb2FsIFBlbmd1amlhbiBIaXBvdGVzaXMiDQphdXRob3I6ICJPbGl2aWEgTWVpbGluZGEgRGF2dGluIFBlc2lyZXJvbiINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAic3R5bGUuY3NzIg0KLS0tDQoNCjxpbWcgc3JjPSJsaXZpa2F0YW55YS5qcGciIHdpZHRoPSIzMDAiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIgYWx0PSJGb3RvIERpcmkiPg0KDQojIFNvYWwgUGVuZ3VqaWFuIEhpcG90ZXNpcw0KDQojIyAxLiBBcGEgcGVyYmVkYWFuIHBlbmdhbWJpbGFuIGtlc2ltcHVsYW4gZGFuIGtlcHV0dXNhbiBkYWxhbSBzdGF0aXN0aWthIGRlc2tyaXB0aWYgZGFuIHN0YXRpc3Rpa2EgaW5mZXJlbnNpYWw/DQoNCiMjIyAxLjEgKipTdGF0aXN0aWthIERlc2tyaXB0aWYqKiAgDQoNClN0YXRpc3Rpa2EgZGVza3JpcHRpZiBkaWd1bmFrYW4gdW50dWsgbWVueWFqaWthbiBkYXRhIGRlbmdhbiBjYXJhIHlhbmcgbGViaWggc2VkZXJoYW5hIGRhbiBtdWRhaCBkaXBhaGFtaS4gVHVqdWFuIHV0YW1hbnlhIGFkYWxhaCBtZW5nZ2FtYmFya2FuIGF0YXUgbWVyaW5na2FzIGRhdGEgeWFuZyBzdWRhaCBhZGEgdGFucGEgbWVuY29iYSBtZW1idWF0IGtlc2ltcHVsYW4gdW50dWsgcG9wdWxhc2kgeWFuZyBsZWJpaCBiZXNhci4gUGVuZ2FtYmlsYW4ga2VwdXR1c2FuIGRhbGFtIHN0YXRpc3Rpa2EgZGVza3JpcHRpZiBoYW55YSB0ZXJiYXRhcyBwYWRhIGRhdGEgeWFuZyBkaWFuYWxpc2lzLCBzZXBlcnRpIG1lbWJ1YXQgdGFiZWwsIGdyYWZpaywgYXRhdSBtZW5naGl0dW5nIHJhdGEtcmF0YSwgbWVkaWFuLCBkYW4gdWt1cmFuIGxhaW5ueWEuIEhhc2lsIGRhcmkgc3RhdGlzdGlrYSBkZXNrcmlwdGlmIHNpZmF0bnlhIGhhbnlhIG1lbmdnYW1iYXJrYW4gZGF0YSB5YW5nIGFkYSB0YW5wYSBpbnRlcnByZXRhc2kgbGViaWggamF1aC4NCg0KDQojIyMjIDEuMS4xICoqQ2lyaS1jaXJpIHV0YW1hKio6ICANCjEuIERpZ3VuYWthbiB1bnR1ayBtZW55YWppa2FuIGRhdGEgZGFsYW0gYmVudHVrIHlhbmcgbGViaWggc2VkZXJoYW5hLiAgDQoyLiBNZW5nZ3VuYWthbiB0YWJlbCwgZ3JhZmlrLCBkaWFncmFtLCByYXRhLXJhdGEsIG1lZGlhbiwgbW9kdXMsIHZhcmlhbnNpLCBhdGF1IHN0YW5kYXIgZGV2aWFzaS4gIA0KMy4gRm9rdXMgcGFkYSBtZXJpbmdrYXMgZGF0YSB5YW5nIGFkYSB0YW5wYSBtZW1idWF0IGtlc2ltcHVsYW4gbGViaWggamF1aC4gIA0KNC4gVGlkYWsgbWVtZXJsdWthbiBwZW5ndWppYW4gaGlwb3Rlc2lzIGthcmVuYSBoYW55YSBtZW5nZ2FtYmFya2FuIGRhdGEuICAgDQoNCiMjIyMgMS4xLjIgKipDb250b2gqKjogIA0KIkRhcmkgZGF0YSBuaWxhaSB1amlhbiBtYXRlbWF0aWthIDUwIHNpc3dhLCBkaXRlbXVrYW4gYmFod2EgcmF0YS1yYXRhIG5pbGFpIGFkYWxhaCA4MCwgc3RhbmRhciBkZXZpYXNpIDUsIGRhbiBuaWxhaSB0ZXJ0aW5nZ2kgYWRhbGFoIDk1LiIgIA0KDQoqKlBlcmhpdHVuZ2FuKio6ICANCg0KKipSYXRhLXJhdGEgKE1lYW4pKio6ICANCiAgIFJhdGEtcmF0YSBkaWhpdHVuZyBkZW5nYW4gbWVuanVtbGFoa2FuIHNlbXVhIG5pbGFpIGRhbiBtZW1iYWdpbnlhIGRlbmdhbiBqdW1sYWggc2lzd2E6ICANCiAgICQkDQogICBcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7XHRleHR7SnVtbGFoIHNlbXVhIG5pbGFpfX17XHRleHR7SnVtbGFoIHNpc3dhfX0NCiAgICQkDQogICANCiAgIE1pc2FsbnlhLCBqaWthIHRvdGFsIG5pbGFpIGFkYWxhaCA0MDAwOiAgDQogICANCiAgICQkDQogICBcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7NDAwMH17NTB9ID0gODANCiAgICQkDQoNCiAqKlN0YW5kYXIgRGV2aWFzaSoqOiAgDQogICBTdGFuZGFyIGRldmlhc2kgbWVuZ3VrdXIgc2ViZXJhcGEgamF1aCBkYXRhIG1lbnllYmFyIGRhcmkgcmF0YS1yYXRhLiBSdW11c255YTogIA0KICAgDQogICAkJA0KICAgcyA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxiYXJ7eH0pXjJ9e259fQ0KICAgJCQNCiAgIA0KICAgRGVuZ2FuOg0KICAgLSBcKCB4X2kgXCk6IE5pbGFpIGluZGl2aWR1ICANCiAgIC0gXCggXGJhcnt4fSBcKTogUmF0YS1yYXRhICANCiAgIC0gXCggbiBcKTogSnVtbGFoIGRhdGEgIA0KDQogICBKaWthIG5pbGFpIFwoIHhfaSBcKSBkaWFtYmlsIHNlYmFnYWkgc2FtcGVsIGtlY2lsLCBzZXBlcnRpIDc1LCA4NSwgODAsIGRsbC4sIGhpdHVuZyBzZWxpc2loIHRpYXAgbmlsYWkgZGVuZ2FuIHJhdGEtcmF0YSwga3VhZHJhdGthbiBzZWxpc2loLCBsYWx1IHJhdGEtcmF0YSBoYXNpbG55YS4gTWlzYWxueWEsIGhhc2lsbnlhIGFkYWxhaCAyNTogIA0KICAgDQogICAkJA0KICAgcyA9IFxzcXJ0e1xmcmFjezI1fXs1MH19ID0gNQ0KICAgJCQNCg0KICoqTmlsYWkgVGVydGluZ2dpKio6ICANCg0KICAgTmlsYWkgdGVydGluZ2dpIGRpYW1iaWwgbGFuZ3N1bmcgZGFyaSBkYXRhLCB5YWl0dSA5NS4gIA0KDQpIYXNpbCBpbmkgaGFueWEgbWVuZ2dhbWJhcmthbiBkYXRhIHlhbmcgYWRhLCB0YW5wYSBrZXNpbXB1bGFuIHVudHVrIHBvcHVsYXNpLg0KDQoNCi0tLQ0KDQojIyMgMS4yICoqU3RhdGlzdGlrYSBJbmZlcmVuc2lhbCoqICANClN0YXRpc3Rpa2EgaW5mZXJlbnNpYWwgZGlndW5ha2FuIHVudHVrIG1lbWJ1YXQga2VzaW1wdWxhbiBhdGF1IGdlbmVyYWxpc2FzaSB0ZW50YW5nIHBvcHVsYXNpIGJlcmRhc2Fya2FuIGRhdGEgc2FtcGVsIHlhbmcgZGlhbWJpbC4gTWV0b2RlIGluaSBkaWd1bmFrYW4gdW50dWsgbWVuZ3VqaSBoaXBvdGVzaXMsIG1lbWJ1YXQgcHJlZGlrc2ksIGF0YXUgbWVtcGVya2lyYWthbiBwYXJhbWV0ZXIgcG9wdWxhc2kuIFBlbmdhbWJpbGFuIGtlcHV0dXNhbiBkYWxhbSBzdGF0aXN0aWthIGluZmVyZW5zaWFsIHRpZGFrIGhhbnlhIGJlcmZva3VzIHBhZGEgZGF0YSBzYW1wZWwsIHRldGFwaSBqdWdhIG1lbmNvYmEgbWVtYWhhbWkgaHVidW5nYW4geWFuZyBsZWJpaCBsdWFzIGRlbmdhbiBwb3B1bGFzaS4gSGFzaWxueWEgbWVtdW5na2lua2FuIHBlbnlpbXB1bGFuIGF0YXUgZ2VuZXJhbGlzYXNpIHRlcmhhZGFwIGRhdGEgeWFuZyBkaWFuYWxpc2lzLCBzZXBlcnRpIG1lbXBlcmtpcmFrYW4gdHJlbiwgbWVtYnVhdCBwcmVkaWtzaSwgYXRhdSBtZW5lbnR1a2FuIGFwYWthaCBhZGEgcGVyYmVkYWFuIHNpZ25pZmlrYW4gYW50YXJhIGtlbG9tcG9rIHRlcnRlbnR1Lg0KDQojIyMjIDEuMi4xICoqQ2lyaS1jaXJpIHV0YW1hKio6ICANCg0KMS4gRGlndW5ha2FuIHVudHVrIG1lbWJ1YXQga2VzaW1wdWxhbiBhdGF1IGdlbmVyYWxpc2FzaSB0ZW50YW5nIHBvcHVsYXNpIGJlcmRhc2Fya2FuIGRhdGEgc2FtcGVsLiAgDQoyLiBNZWxpYmF0a2FuIHBlbmd1amlhbiBoaXBvdGVzaXMsIGVzdGltYXNpLCBkYW4gcHJlZGlrc2kuICANCjMuIE1lbmdndW5ha2FuIG1ldG9kZSBzdGF0aXN0aWsgc2VwZXJ0aSB1amktdCwgQU5PVkEsIHJlZ3Jlc2ksIGF0YXUgaW50ZXJ2YWwga2VwZXJjYXlhYW4uICANCjQuIE1lbWJ1dHVoa2FuIHRpbmdrYXQgc2lnbmlmaWthbnNpICjOsSkgdW50dWsgbWVuZW50dWthbiB2YWxpZGl0YXMgaGFzaWwgYW5hbGlzaXMuICANCg0KIyMjIyAxLjIuMiAqKkNvbnRvaCoqOiAgDQoNCiJEYXJpIGRhdGEgc2FtcGVsIDUwIHNpc3dhLCBkaWxha3VrYW4gdWppIGhpcG90ZXNpcyBkZW5nYW4gdGluZ2thdCBzaWduaWZpa2Fuc2kgNSUgdW50dWsgbWVuZW50dWthbiBhcGFrYWggcmF0YS1yYXRhIG5pbGFpIHNpc3dhIGRpIHNlbHVydWggc2Vrb2xhaCBsZWJpaCBiZXNhciBkYXJpIDc1LiIgIA0KDQoqKlBlcmhpdHVuZ2FuKio6ICANCjEuICoqSGlwb3Rlc2lzIE5vbCAoSOKCgCkqKjogUmF0YS1yYXRhIG5pbGFpIHNpc3dhID0gNzUuICANCiAgICoqSGlwb3Rlc2lzIEFsdGVybmF0aWYgKEjigoEpKio6IFJhdGEtcmF0YSBuaWxhaSBzaXN3YSA+IDc1LiAgDQoNCjIuICoqU3RhdGlzdGlrIFVqaSAoWiBhdGF1IHQpKio6ICANCiAgIFN0YXRpc3RpayB1amkgZGloaXR1bmcgbWVuZ2d1bmFrYW46ICANCiAgIFxbDQogICB0ID0gXGZyYWN7XGJhcnt4fSAtIFxtdX17cyAvIFxzcXJ0e259fQ0KICAgXF0gIA0KICAgRGVuZ2FuOiAgDQogICAtIFwoIFxiYXJ7eH0gXCk6IFJhdGEtcmF0YSBzYW1wZWwgKDgwKS4gIA0KICAgLSBcKCBcbXUgXCk6IFJhdGEtcmF0YSBwb3B1bGFzaSBtZW51cnV0IEjigoAgKDc1KS4gIA0KICAgLSBcKCBzIFwpOiBTdGFuZGFyIGRldmlhc2kgKDUpLiAgDQogICAtIFwoIG4gXCk6IFVrdXJhbiBzYW1wZWwgKDUwKS4gIA0KDQogICBNYXN1a2thbiBuaWxhaTogIA0KICAgJCQNCiAgIHQgPSBcZnJhY3s4MCAtIDc1fXs1IC8gXHNxcnR7NTB9fSA9IFxmcmFjezV9ezUgLyA3LjA3fSA9IFxmcmFjezV9ezAuNzA3fSBcYXBwcm94IDcuMDcNCiAgICQkDQoNCjMuICoqVGluZ2thdCBTaWduaWZpa2Fuc2kgKM6xKSoqOiAgDQogICBEZW5nYW4gzrEgPSAwLjA1IHVudHVrIHVqaSBzYXR1IHNpc2ksIG5pbGFpIGtyaXRpcyB0IChkYXJpIHRhYmVsIGRpc3RyaWJ1c2kgdCkgdW50dWsgXCggbiAtIDEgPSA0OSBcKSBhZGFsYWggc2VraXRhciAxLjY4LiAgDQoNCjQuICoqS2VwdXR1c2FuKio6ICANCiAgIEppa2EgXCggdCA+IDEuNjggXCksIHRvbGFrIEjigoAuICANCiAgIEthcmVuYSBcKCB0ID0gNy4wNyBcKSwgbWFrYSBI4oKAIGRpdG9sYWssIGRhbiBkYXBhdCBkaXNpbXB1bGthbiBiYWh3YSByYXRhLXJhdGEgbmlsYWkgc2lzd2Egc2VjYXJhIHNpZ25pZmlrYW4gbGViaWggdGluZ2dpIGRhcmkgNzUgcGFkYSB0aW5na2F0IHNpZ25pZmlrYW5zaSA1JS4NCg0KLS0tDQoNCiMjIyAqKktlc2ltcHVsYW4gUGVyaGl0dW5nYW4qKjogIA0KLSAqKlN0YXRpc3Rpa2EgRGVza3JpcHRpZioqOiBNZW5nZ3VuYWthbiBydW11cyBkYXNhciB1bnR1ayBtZXJpbmdrYXMgZGF0YSwgc2VwZXJ0aSByYXRhLXJhdGEsIHN0YW5kYXIgZGV2aWFzaSwgZGFuIG5pbGFpIHRlcnRpbmdnaS4gIA0KLSAqKlN0YXRpc3Rpa2EgSW5mZXJlbnNpYWwqKjogTWVsaWJhdGthbiBwZW5ndWppYW4gaGlwb3Rlc2lzIG1lbmdndW5ha2FuIHN0YXRpc3RpayB1amksIHRpbmdrYXQgc2lnbmlmaWthbnNpLCBkYW4gZGlzdHJpYnVzaSBwcm9iYWJpbGl0YXMgdW50dWsgbWVtYnVhdCBrZXNpbXB1bGFuIHRlbnRhbmcgcG9wdWxhc2kuICANCg0KSGFzaWwgcGVyaGl0dW5nYW4gZGVza3JpcHRpZiBtZW5qYWRpIGRhc2FyIHVudHVrIG1lbGFrdWthbiBhbmFsaXNpcyBpbmZlcmVuc2lhbC4NCg0KLS0tDQoNCiMjIyAxLjMgKipQZXJiZWRhYW4gVXRhbWE6IFN0YXRpc3Rpa2EgRGVza3JpcHRpZiB2cyBJbmZlcmVuc2lhbCoqICANCg0KDQp8ICoqQXNwZWsqKiAgICAgICAgICAgICAgICAgfCAqKlN0YXRpc3Rpa2EgRGVza3JpcHRpZioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqU3RhdGlzdGlrYSBJbmZlcmVuc2lhbCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKkRlZmluaXNpKiogICAgICAgICAgICAgIHwgTWVyaW5na2FzIGRhbiBtZW5nZ2FtYmFya2FuIGRhdGEgeWFuZyBhZGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVtYnVhdCBrZXNpbXB1bGFuIGF0YXUgZ2VuZXJhbGlzYXNpIHRlbnRhbmcgcG9wdWxhc2kuICAgICAgICAgICAgfA0KfCAqKlR1anVhbioqICAgICAgICAgICAgICAgIHwgTWVueWFqaWthbiBkYXRhIGFnYXIgbXVkYWggZGlwYWhhbWkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVuZ3VqaSBoaXBvdGVzaXMgYXRhdSBtZW1wZXJraXJha2FuIHBhcmFtZXRlciBwb3B1bGFzaS4gICAgICAgICAgfA0KfCAqKkNha3VwYW4qKiAgICAgICAgICAgICAgIHwgVGVyYmF0YXMgcGFkYSBkYXRhIHNhbXBlbC9wb3B1bGFzaSB5YW5nIGRpYW5hbGlzaXMuICAgICAgICAgICAgICAgICAgIHwgQmVydHVqdWFuIG1lbmFyaWsga2VzaW1wdWxhbiB1bnR1ayBwb3B1bGFzaSBkYXJpIGRhdGEgc2FtcGVsLiAgICAgfA0KfCAqKk1ldG9kZSBVdGFtYSoqICAgICAgICAgIHwgR3JhZmlrLCB0YWJlbCwgcmF0YS1yYXRhLCBtZWRpYW4sIG1vZHVzLCBzdGFuZGFyIGRldmlhc2kuICAgICAgICAgICAgIHwgVWppIGhpcG90ZXNpcyAodWppLXQsIEFOT1ZBKSwgcmVncmVzaSwgZXN0aW1hc2kgaW50ZXJ2YWwga2VwZXJjYXlhYW4uIHwNCnwgKipVamkgSGlwb3Rlc2lzKiogICAgICAgICB8IFRpZGFrIGRpZ3VuYWthbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2FuZ2F0IHBlbnRpbmcgdW50dWsgbWVtYnVhdCBrZXB1dHVzYW4gYmVyZGFzYXJrYW4gZGF0YSBzYW1wZWwuICB8DQp8ICoqSGFzaWwqKiAgICAgICAgICAgICAgICAgfCBCZXJzaWZhdCBkZXNrcmlwdGlmIGRhbiBoYW55YSBtZW5nZ2FtYmFya2FuIGRhdGEuICAgICAgICAgICAgICAgICAgICB8IEJlcnNpZmF0IGluZmVyZW5zaWFsIGRhbiBiZXJsYWt1IHVudHVrIHBvcHVsYXNpIHlhbmcgbGViaWggYmVzYXIuIHwNCnwgKipDb250b2ggT3V0cHV0KiogICAgICAgICB8ICJSYXRhLXJhdGEgbmlsYWkgdWppYW4gYWRhbGFoIDgwLiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIlJhdGEtcmF0YSBuaWxhaSB1amlhbiBzaXN3YSBsZWJpaCB0aW5nZ2kgZGFyaSA3NSBwYWRhIHRpbmdrYXQgc2lnbmlmaWthbnNpIDUlLiIgfA0KfCAqKkh1YnVuZ2FuIGRlbmdhbiBVamkgSGlwb3Rlc2lzKiogfCBUaWRhayBiZXJrYWl0YW4gbGFuZ3N1bmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJlcmthaXRhbiBlcmF0IGthcmVuYSBkaWd1bmFrYW4gdW50dWsgbWVuZ3VqaSBrbGFpbSBhdGF1IGFzdW1zaS4gfA0KLS0tDQoNCiMjIyAxLjQgKipSZWxldmFuc2kgdW50dWsgVWppIEhpcG90ZXNpcyoqIA0KDQpEYWxhbSB1amkgaGlwb3Rlc2lzLCAqKnN0YXRpc3Rpa2EgaW5mZXJlbnNpYWwqKiBtZW5qYWRpIGFsYXQgdXRhbWEuIERhdGEgZGFyaSBzYW1wZWwgZGlndW5ha2FuIHVudHVrOiAgDQoxLiBNZW5ndWppIGtsYWltIHRlbnRhbmcgKipyYXRhLXJhdGEgcG9wdWxhc2kqKi4gIA0KICAgLSBDb250b2g6IEFwYWthaCByYXRhLXJhdGEgbmlsYWkgcG9wdWxhc2kgc2lzd2EgbGViaWggZGFyaSA3NT8gIA0KMi4gTWVuZW50dWthbiBwcm9iYWJpbGl0YXMgKiprZXNhbGFoYW4qKiAobWlzYWxueWEsIGtlc2FsYWhhbiB0aXBlIEkgYXRhdSBJSSkga2V0aWthIG1lbmFyaWsga2VzaW1wdWxhbi4gIA0KDQpTdGF0aXN0aWthIGRlc2tyaXB0aWYgaGFueWEgbWVtYmFudHUgbWVtYmVyaWthbiBnYW1iYXJhbiBhd2FsIHRlbnRhbmcgZGF0YSwgdGV0YXBpIHRpZGFrIGN1a3VwIHVudHVrIG1lbWJ1YXQga2VwdXR1c2FuIGF0YXUga2VzaW1wdWxhbiB0ZW50YW5nIHBvcHVsYXNpLg0KDQoNCi0tLQ0KDQojIyMgMS41ICoqS2VzaW1wdWxhbioqICANCioqU3RhdGlzdGlrYSBkZXNrcmlwdGlmKiogZGFuICoqc3RhdGlzdGlrYSBpbmZlcmVuc2lhbCoqIG1lbWlsaWtpIHBlcmJlZGFhbiB1dGFtYSBkYWxhbSBjYXJhIHBlbmdhbWJpbGFuIGtlc2ltcHVsYW4gZGFuIGtlcHV0dXNhbjogIA0KDQoxLiAqKlN0YXRpc3Rpa2EgRGVza3JpcHRpZioqOiAgDQogICAtIEZva3VzIHBhZGEgKipwZW55YWppYW4gZGFuIHBlbmdnYW1iYXJhbiBkYXRhKiogeWFuZyBhZGEuICANCiAgIC0gS2VzaW1wdWxhbiB5YW5nIGRpYW1iaWwgaGFueWEgYmVybGFrdSB1bnR1ayBkYXRhIGRhbGFtIHNhbXBlbCBhdGF1IHBvcHVsYXNpIHlhbmcgZGlhbmFsaXNpcywgdGFucGEgbWVtYnVhdCBnZW5lcmFsaXNhc2kuICANCiAgIC0gQ29udG9obnlhLCByYXRhLXJhdGEsIHN0YW5kYXIgZGV2aWFzaSwgYXRhdSBuaWxhaSBtYWtzaW11bSBkaWd1bmFrYW4gdW50dWsgbWVtYmVyaWthbiBnYW1iYXJhbiBzaW5na2F0IG1lbmdlbmFpIGRpc3RyaWJ1c2kgZGF0YS4gIA0KICAgLSBUaWRhayBtZWxpYmF0a2FuIHBlbmd1amlhbiBoaXBvdGVzaXMgYXRhdSBlc3RpbWFzaSBwYXJhbWV0ZXIgcG9wdWxhc2kuICANCg0KMi4gKipTdGF0aXN0aWthIEluZmVyZW5zaWFsKio6ICANCiAgIC0gQmVydHVqdWFuIHVudHVrICoqbWVtYnVhdCBnZW5lcmFsaXNhc2kgYXRhdSBtZW5hcmlrIGtlc2ltcHVsYW4qKiB0ZW50YW5nIHBvcHVsYXNpIGJlcmRhc2Fya2FuIGRhdGEgc2FtcGVsLiAgDQogICAtIE1lbmdndW5ha2FuIHBlbmd1amlhbiBoaXBvdGVzaXMsIGVzdGltYXNpIHBhcmFtZXRlciwgYXRhdSBwcmVkaWtzaSB1bnR1ayBtZW5nYW1iaWwga2VwdXR1c2FuLiAgDQogICAtIEtlcHV0dXNhbiBkaWRhc2Fya2FuIHBhZGEgdGluZ2thdCBzaWduaWZpa2Fuc2kgKFwozrFcKSkgdW50dWsgbWVuZW50dWthbiBhcGFrYWggaGFzaWwgZGFyaSBzYW1wZWwgZGFwYXQgZGlnZW5lcmFsaXNhc2kga2UgcG9wdWxhc2kuICANCiAgIC0gTWlzYWxueWEsIHVqaSBoaXBvdGVzaXMgZGlsYWt1a2FuIHVudHVrIG1lbmVudHVrYW4gYXBha2FoIHJhdGEtcmF0YSBzYW1wZWwgYmVyYmVkYSBzZWNhcmEgc2lnbmlmaWthbiBkYXJpIG5pbGFpIHBvcHVsYXNpIHRlcnRlbnR1LiAgDQoNCiMjIyAqKlJpbmdrYXNhbiBJbnRpKiogIA0KU3RhdGlzdGlrYSBkZXNrcmlwdGlmIG1lbmdnYW1iYXJrYW4gYXBhIHlhbmcgdGVybGloYXQgZGFyaSBkYXRhIHRhbnBhIG1lbWJ1YXQga2xhaW0gbGViaWggamF1aCwgc2VkYW5na2FuIHN0YXRpc3Rpa2EgaW5mZXJlbnNpYWwgbWVuZ2FtYmlsIGxhbmdrYWggbGViaWggamF1aCB1bnR1ayBtZW5hcmlrIGtlc2ltcHVsYW4gdGVudGFuZyBwb3B1bGFzaSBtZW5nZ3VuYWthbiBkYXRhIHNhbXBlbC4gIA0KDQpTdGF0aXN0aWthIGRlc2tyaXB0aWYgYmVyZnVuZ3NpIHNlYmFnYWkgZGFzYXIgdW50dWsgbWVtYWhhbWkgZGF0YSBkYW4gc2VyaW5nIG1lbmphZGkgbGFuZ2thaCBhd2FsIHNlYmVsdW0gbWVsYW5qdXRrYW4ga2UgYW5hbGlzaXMgaW5mZXJlbnNpYWwsIHlhbmcgbWVsaWJhdGthbiBwZW5nYW1iaWxhbiBrZXB1dHVzYW4gYmVyZGFzYXJrYW4gZGF0YSB0ZXJzZWJ1dC4NCg0KDQojIyAyLiBBcGEgcGVyYmVkYWFuIGFudGFyYSBBbHBoYSAozrEpIGRhbiBCZXRhICjOsikgZGFsYW0gdWppIGhpcG90ZXNpcz8NCg0KIyMjIDIuMSAqKkFscGhhICjOsSkqKiAgDQoqKkFscGhhICjOsSkqKiBhZGFsYWggdGluZ2thdCAqKnNpZ25pZmlrYW5zaSoqIGRhbGFtIHVqaSBoaXBvdGVzaXMuIEluaSBhZGFsYWggcHJvYmFiaWxpdGFzIG1ha3NpbXVtIHlhbmcga2l0YSB0ZW50dWthbiBzZWJlbHVtbnlhLCB5YW5nIGRpZ3VuYWthbiB1bnR1ayAqKm1lbnlhdGFrYW4gYmF0YXMgdG9sZXJhbnNpIGtlc2FsYWhhbioqIGppa2Ega2l0YSBzYWxhaCBtZW5vbGFrIGhpcG90ZXNpcyBub2wgKCoqVHlwZSBJIEVycm9yKiopLiBEZW5nYW4ga2F0YSBsYWluLCDOsSBhZGFsYWggKiprZW11bmdraW5hbiBraXRhIHNhbGFoIGRhbGFtIG1lbnlhdGFrYW4gYmFod2EgYWRhIGVmZWsgYXRhdSBodWJ1bmdhbioqIHlhbmcgc2lnbmlmaWthbiBwYWRhaGFsIHNlYmVuYXJueWEgdGlkYWsgYWRhLiANCg0KDQojIyMjICoqMi4xLjEgUGVuZ2VydGlhbiBBbHBoYSAozrEpKiogIA0KQWxwaGEgKM6xKSBhZGFsYWggdGluZ2thdCBzaWduaWZpa2Fuc2kgeWFuZyBkaXRlbnR1a2FuIHNlYmVsdW1ueWEgZGFsYW0gc2VidWFoIHVqaSBoaXBvdGVzaXMuIEluaSBtZW51bmp1a2thbjogIA0KMS4gKipQcm9iYWJpbGl0YXMgS2VzYWxhaGFuIFRpcGUgSSAoVHlwZSBJIEVycm9yKToqKiAgDQogICAtIEtlc2FsYWhhbiB0aXBlIEkgdGVyamFkaSBqaWthIGhpcG90ZXNpcyBub2wgKFwoSF8wXCkpIHlhbmcgc2ViZW5hcm55YSBiZW5hciBkaXRvbGFrLiAgDQogICAtIERlbmdhbiBrYXRhIGxhaW4sIGluaSBhZGFsYWggcmlzaWtvIHNhbGFoIG1lbmdhbmdnYXAgYWRhIGVmZWsgYXRhdSBwZXJiZWRhYW4gKGZhbHNlIHBvc2l0aXZlKS4gIA0KDQoyLiAqKkZ1bmdzaSBBbHBoYSBkYWxhbSBVamkgSGlwb3Rlc2lzOioqICANCiAgIC0gQWxwaGEgZGlndW5ha2FuIHNlYmFnYWkgKipiYXRhcyBhdGF1IGFtYmFuZyoqIHVudHVrIG1lbWJhbmRpbmdrYW4gcC12YWx1ZS4gIA0KICAgLSBKaWthIHAtdmFsdWUgbGViaWgga2VjaWwgZGFyaSBhbHBoYSwgbWFrYSBoYXNpbCB1amkgZGlhbmdnYXAgc2lnbmlmaWthbiwgZGFuIGhpcG90ZXNpcyBub2wgZGl0b2xhay4gIA0KDQozLiAqKlBlbmVudHVhbiBOaWxhaSBBbHBoYToqKiAgDQogICAtIEJpYXNhbnlhIGRpc2V0IHBhZGEgMC4wNSAoNSUpLCAwLjAxICgxJSksIGF0YXUgMC4xMCAoMTAlKSB0ZXJnYW50dW5nIHBhZGEga29udGVrcyBwZW5lbGl0aWFuLiAgDQogICAtIE5pbGFpIGluaSBtZW51bmp1a2thbiB0b2xlcmFuc2kgdGVyaGFkYXAga2VtdW5na2luYW4gbWVtYnVhdCBrZXNhbGFoYW4gdGlwZSBJLiAgDQogICAgIC0gKirOsSA9IDAuMDUqKiBiZXJhcnRpIG1lbmVyaW1hIGtlbXVuZ2tpbmFuIDUlIHVudHVrIG1lbWJ1YXQga2xhaW0gc2FsYWggYmFod2EgYWRhIGVmZWssIG1lc2tpcHVuIHNlYmVuYXJueWEgdGlkYWsgYWRhLiAgDQogICAgIC0gTmlsYWkgeWFuZyBsZWJpaCBrZWNpbCAobWlzYWxueWEgMC4wMSkgZGlndW5ha2FuIGRhbGFtIHBlbmVsaXRpYW4geWFuZyBtZW1idXR1aGthbiBrZWFrdXJhdGFuIHRpbmdnaSwgc2VwZXJ0aSB1amkgbWVkaXMuICANCg0KLS0tDQoNCiMjIyMgKioyLjEuMiBDb250b2ggUGVuamVsYXNhbiBBbHBoYSBkZW5nYW4gSWx1c3RyYXNpKioNCg0KKipTdHVkaSBLYXN1czoqKiAgDQpTZW9yYW5nIHBlbmVsaXRpIGluZ2luIG1lbmd1amkgYXBha2FoIHByb2dyYW0gbGF0aWhhbiBiYXJ1IGRhcGF0IG1lbmluZ2thdGthbiByYXRhLXJhdGEga2VidWdhcmFuIHNpc3dhLiAgDQotIEhpcG90ZXNpcyBub2wgKFwoSF8wXCkpOiBUaWRhayBhZGEgcGVuaW5na2F0YW4gcmF0YS1yYXRhIGtlYnVnYXJhbiBzaXN3YS4gIA0KLSBIaXBvdGVzaXMgYWx0ZXJuYXRpZiAoXChIX0FcKSk6IEFkYSBwZW5pbmdrYXRhbiByYXRhLXJhdGEga2VidWdhcmFuIHNpc3dhLiAgDQotIFRpbmdrYXQgc2lnbmlmaWthbnNpIChcKM6xXCkpOiAwLjA1ICg1JSkuICANCg0KDQogKipIYXNpbCBVamkgU3RhdGlzdGlrOioqICANCi0gUGVuZWxpdGkgbWVsYWt1a2FuIHVqaS10IGRhbiBtZW5kYXBhdGthbiAqKnAtdmFsdWUgPSAwLjAzKiouICANCg0KKipJbnRlcnByZXRhc2kgQWxwaGEgZGFuIFAtVmFsdWU6KiogIA0KMS4gKipQZXJiYW5kaW5nYW4gZGVuZ2FuIEFscGhhOioqICANCiAgIC0gS2FyZW5hICoqcC12YWx1ZSAoMC4wMykgPCDOsSAoMC4wNSkqKiwgaGFzaWxueWEgc2lnbmlmaWthbi4gIA0KICAgLSBLZXB1dHVzYW46IE1lbm9sYWsgXChIXzBcKSBkYW4gbWVueWltcHVsa2FuIGJhaHdhIHByb2dyYW0gbGF0aWhhbiBtZW1pbGlraSBlZmVrIHBvc2l0aWYuICANCg0KMi4gKipIdWJ1bmdhbiBkZW5nYW4gS2VzYWxhaGFuIFRpcGUgSToqKiAgDQogICAtIERlbmdhbiDOsSA9IDAuMDUsIHBlbmVsaXRpIG1lbmVyaW1hIHJpc2lrbyA1JSBiYWh3YSBrbGFpbSBlZmVrIHBvc2l0aWYgZGFyaSBwcm9ncmFtIGxhdGloYW4gYWRhbGFoIHNhbGFoLiAgDQogICAtIEFydGlueWEsIGppa2Egc2ViZW5hcm55YSB0aWRhayBhZGEgcGVuaW5na2F0YW4ga2VidWdhcmFuIHNpc3dhLCBtYWthIGFkYSBrZW11bmdraW5hbiA1JSBrZXB1dHVzYW4gaW5pIGtlbGlydS4gIA0KDQotLS0NCg0KIyMjIyAyLjEuMyAqKlBvaW4gUGVudGluZyBUZW50YW5nIEFscGhhKioNCjEuICoqSHVidW5nYW4gZGVuZ2FuIEtldGF0bnlhIEtlcHV0dXNhbjoqKiAgDQogICAtIFNlbWFraW4ga2VjaWwgbmlsYWkgYWxwaGEgKG1pc2FsbnlhLCAwLjAxKSwgc2VtYWtpbiBrZXRhdCBrZXB1dHVzYW4geWFuZyBkaWFtYmlsLCBrYXJlbmEgaGFueWEgaGFzaWwgZGVuZ2FuIHAtdmFsdWUgeWFuZyBzYW5nYXQga2VjaWwgYWthbiBkaWFuZ2dhcCBzaWduaWZpa2FuLiAgDQoNCjIuICoqS29uc2VrdWVuc2kgUHJha3RpczoqKiAgDQogICAtIERhbGFtIHBlbmVsaXRpYW4gaWxtaWFoIGJpYXNhLCDOsSA9IDAuMDUgY3VrdXAgdW11bSBkaWd1bmFrYW4uICANCiAgIC0gRGFsYW0gcGVuZWxpdGlhbiBrcml0aXMgc2VwZXJ0aSB1amkga2xpbmlzIG9iYXQsIM6xIHlhbmcgbGViaWgga2VjaWwgKG1pc2FsbnlhLCAwLjAxKSBzZXJpbmcgZGlndW5ha2FuIHVudHVrIG1lbWluaW1hbGthbiByaXNpa28ga2xhaW0gc2FsYWguICANCg0KMy4gKipLZXNhbGFocGFoYW1hbiBVbXVtOioqICANCiAgIC0gQWxwaGEgYnVrYW4gcHJvYmFiaWxpdGFzIGhpcG90ZXNpcyBub2wgaXR1IHNlbmRpcmkgYmVuYXIgYXRhdSBzYWxhaC4gSW5pIGFkYWxhaCBwcm9iYWJpbGl0YXMgbWVtYnVhdCBrZXNhbGFoYW4gZGFsYW0gcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIGJlcmRhc2Fya2FuIGRhdGEuICANCg0KRGVuZ2FuIG1lbWFoYW1pIGFscGhhIHNlY2FyYSBtZW5kYWxhbSwgcGVuZWxpdGkgZGFwYXQgbWVueWVzdWFpa2FuIHRpbmdrYXQgc2lnbmlmaWthbnNpIGJlcmRhc2Fya2FuIGtlYnV0dWhhbiBzcGVzaWZpayBwZW5lbGl0aWFuIHVudHVrIG1lbmNhcGFpIGtlc2VpbWJhbmdhbiB5YW5nIHNlc3VhaSBhbnRhcmEgcmlzaWtvIGtlc2FsYWhhbiBkYW4gc2Vuc2l0aXZpdGFzIHBlbmd1amlhbi4NCg0KLS0tDQoNCiMjIyAyLjIgKipCZXRhICjOsikqKiAgDQoqKkJldGEgKM6yKSoqIGFkYWxhaCBwcm9iYWJpbGl0YXMga2VzYWxhaGFuICoqdGlwZSBJSSoqIChUeXBlIElJIGVycm9yKSwgeWFpdHUgKiprZW11bmdraW5hbiBraXRhIGdhZ2FsIG1lbm9sYWsgaGlwb3Rlc2lzIG5vbCoqIHBhZGFoYWwgc2ViZW5hcm55YSBoaXBvdGVzaXMgYWx0ZXJuYXRpZiB5YW5nIGJlbmFyLiBEZW5nYW4ga2F0YSBsYWluLCDOsiBhZGFsYWggKiprZXNhbGFoYW4ga2l0YSBkYWxhbSB0aWRhayBtZW5lbXVrYW4gZWZlayBhdGF1IGh1YnVuZ2FuIHlhbmcgc2VoYXJ1c255YSBhZGEqKi4NCg0KIyMjIyAqKjIuMi4xIFBlbmdlcnRpYW4gQmV0YSAozrIpKiogIA0KQmV0YSAozrIpIGFkYWxhaCBwcm9iYWJpbGl0YXMgdGVyamFkaW55YSAqKmtlc2FsYWhhbiB0aXBlIElJIChUeXBlIElJIEVycm9yKSoqIGRhbGFtIHVqaSBoaXBvdGVzaXMuIEluaSBtZW51bmp1a2thbjogIA0KMS4gKipQcm9iYWJpbGl0YXMgS2VzYWxhaGFuIFRpcGUgSUk6KiogIA0KICAgLSBLZXNhbGFoYW4gdGlwZSBJSSB0ZXJqYWRpIGppa2EgaGlwb3Rlc2lzIG5vbCAoXChIXzBcKSkgdGlkYWsgZGl0b2xhaywgcGFkYWhhbCBzZWJlbmFybnlhIGhpcG90ZXNpcyBhbHRlcm5hdGlmIChcKEhfQVwpKSBiZW5hci4gIA0KICAgLSBEZW5nYW4ga2F0YSBsYWluLCBpbmkgYWRhbGFoIHJpc2lrbyBnYWdhbCBtZW5kZXRla3NpIGVmZWsgeWFuZyBzZWJlbmFybnlhIGFkYSAoZmFsc2UgbmVnYXRpdmUpLiAgDQoNCjIuICoqSHVidW5nYW4gQmV0YSBkZW5nYW4gUG93ZXI6KiogIA0KICAgLSBQb3dlciBhZGFsYWgga2VtYW1wdWFuIHVqaSBzdGF0aXN0aWsgdW50dWsgbWVuZGV0ZWtzaSBlZmVrIHlhbmcgYmVuYXItYmVuYXIgYWRhLCBkYW4gZGlydW11c2thbiBzZWJhZ2FpIFwoMSAtIFxiZXRhXCkuICANCiAgIC0gUG93ZXIgeWFuZyB0aW5nZ2kgKG1pc2FsbnlhLCAwLjgwIGF0YXUgODAlKSBiZXJhcnRpIHJpc2lrbyBrZXNhbGFoYW4gdGlwZSBJSSBrZWNpbCAozrIgPSAwLjIwKS4gIA0KDQozLiAqKkZha3Rvci1GYWt0b3IgeWFuZyBNZW1lbmdhcnVoaSBCZXRhOioqICANCiAgIC0gKipVa3VyYW4gc2FtcGVsKio6IFNhbXBlbCB5YW5nIGxlYmloIGJlc2FyIG1lbmluZ2thdGthbiBwb3dlciwgc2VoaW5nZ2EgbWVudXJ1bmthbiDOsi4gIA0KICAgLSAqKlVrdXJhbiBlZmVrKio6IEVmZWsgeWFuZyBsZWJpaCBiZXNhciBsZWJpaCBtdWRhaCBkaWRldGVrc2ksIHNlaGluZ2dhIG1lbmd1cmFuZ2kgzrIuICANCiAgIC0gKipTaWduaWZpa2Fuc2kgKM6xKSoqOiBNZW51cnVua2FuIM6xIHVudHVrIG1lbWluaW1hbGthbiBrZXNhbGFoYW4gdGlwZSBJIHNlcmluZyBtZW5pbmdrYXRrYW4gzrIsIGthcmVuYSBwZW5ndWppYW4gbWVuamFkaSBsZWJpaCBrb25zZXJ2YXRpZi4gIA0KDQotLS0NCg0KIyMjIyAqKjIuMi4yIENvbnRvaCBQZW5qZWxhc2FuIEJldGEgZGVuZ2FuIElsdXN0cmFzaSoqICANCiMjIyMgKipTdHVkaSBLYXN1czoqKiAgDQpTZW9yYW5nIHBlbmVsaXRpIGluZ2luIG1lbmd1amkgYXBha2FoIG1ldG9kZSBiZWxhamFyIGJhcnUgbWVuaW5na2F0a2FuIG5pbGFpIHJhdGEtcmF0YSBzaXN3YS4gIA0KLSBIaXBvdGVzaXMgbm9sIChcKEhfMFwpKTogVGlkYWsgYWRhIHBlbmluZ2thdGFuIG5pbGFpIHJhdGEtcmF0YSBzaXN3YS4gIA0KLSBIaXBvdGVzaXMgYWx0ZXJuYXRpZiAoXChIX0FcKSk6IEFkYSBwZW5pbmdrYXRhbiBuaWxhaSByYXRhLXJhdGEgc2lzd2EuICANCi0gVGluZ2thdCBzaWduaWZpa2Fuc2kgKFwozrFcKSk6IDAuMDUgKDUlKS4gIA0KDQojIyMjICoqSGFzaWwgVWppIFN0YXRpc3RpazoqKiAgDQotIERhcmkgdWppIHN0YXRpc3RpaywgZGlwZXJvbGVoICoqcC12YWx1ZSA9IDAuMDYqKiAobGViaWggYmVzYXIgZGFyaSDOsSkuICANCi0gS2VwdXR1c2FuOiBHYWdhbCBtZW5vbGFrIFwoSF8wXCksIHNlaGluZ2dhIHRpZGFrIGFkYSBidWt0aSBzaWduaWZpa2FuIGJhaHdhIG1ldG9kZSBiZWxhamFyIGJhcnUgbWVuaW5na2F0a2FuIG5pbGFpLiAgDQoNCiMjIyMgKipLZXNhbGFoYW4gVGlwZSBJSSAoQmV0YSk6KiogIA0KSmlrYSBtZXRvZGUgYmVsYWphciBiYXJ1ICoqc2ViZW5hcm55YSBtZW1hbmcgbWVuaW5na2F0a2FuIG5pbGFpIHNpc3dhKiosIHRldGFwaSB1amkgc3RhdGlzdGlrIGdhZ2FsIG1lbmRldGVrc2lueWEsIG1ha2Ega2VwdXR1c2FuIGluaSBtZXJ1cGFrYW4ga2VzYWxhaGFuIHRpcGUgSUkuICANCi0gTWlzYWxrYW4gcG93ZXIgdWppIGFkYWxhaCAwLjgwLCBtYWthIM6yID0gXCgxIC0gXHRleHR7cG93ZXJ9XCkgPSBcKDEgLSAwLjgwID0gMC4yMFwpLiAgDQotIEFydGlueWEsIGFkYSAyMCUga2VtdW5na2luYW4gYmFod2EgcGVuZWxpdGkgc2FsYWggbWVueWltcHVsa2FuIG1ldG9kZSBiZWxhamFyIGJhcnUgdGlkYWsgZWZla3RpZiwgcGFkYWhhbCBzZWJlbmFybnlhIGVmZWt0aWYuICANCg0KLS0tDQoNCiMjIyMgIDIuMi4zICoqUG9pbiBQZW50aW5nIFRlbnRhbmcgQmV0YSoqICANCjEuICoqQmV0YSBkYW4gVWt1cmFuIFNhbXBlbDoqKiAgDQogICAtIFVrdXJhbiBzYW1wZWwgeWFuZyBrZWNpbCBtZW5pbmdrYXRrYW4gzrIga2FyZW5hIGRhdGEgdGlkYWsgY3VrdXAgdW50dWsgbWVuZGV0ZWtzaSBlZmVrIHlhbmcgYWRhLiAgDQoNCjIuICoqQmV0YSBkYW4gU2lnbmlmaWthbnNpICjOsSk6KiogIA0KICAgLSBNZW51cnVua2FuIM6xIHVudHVrIG1lbXBlcmtlY2lsIHJpc2lrbyBrZXNhbGFoYW4gdGlwZSBJIGFrYW4gbWVuaW5na2F0a2FuIHJpc2lrbyBrZXNhbGFoYW4gdGlwZSBJSSAozrIpLCBrYXJlbmEgcGVuZ3VqaWFuIG1lbmphZGkgbGViaWgga2V0YXQuICANCg0KMy4gKipQb3dlciBJZGVhbDoqKiAgDQogICAtIERhbGFtIHBlbmVsaXRpYW4sIHBvd2VyIGJpYXNhbnlhIGRpc2FyYW5rYW4gbWluaW1hbCAwLjgwLCBzZWhpbmdnYSByaXNpa28ga2VzYWxhaGFuIHRpcGUgSUkgKFwozrJcKSkgdGlkYWsgbGViaWggZGFyaSAyMCUuICANCg0KNC4gKipLZXNhbGFocGFoYW1hbiBVbXVtOioqICANCiAgIC0gQmV0YSBidWthbiBwcm9iYWJpbGl0YXMgYmFod2EgaGlwb3Rlc2lzIG5vbCBiZW5hci4gU2ViYWxpa255YSwgaXR1IGFkYWxhaCBwcm9iYWJpbGl0YXMgZ2FnYWwgbWVuZGV0ZWtzaSBlZmVrIHlhbmcgYWRhIGJlcmRhc2Fya2FuIGRhdGEgeWFuZyBkaWd1bmFrYW4uICANCg0KDQpEZW5nYW4gbWVtYWhhbWkgYmV0YSBzZWNhcmEgcmluY2ksIHBlbmVsaXRpIGRhcGF0IG1lcmFuY2FuZyBwZW5lbGl0aWFuIHlhbmcgbGViaWggc2Vuc2l0aWYgZGFuIG1hbXB1IG1lbmRldGVrc2kgZWZlayB5YW5nIHNpZ25pZmlrYW4sIHNla2FsaWd1cyBtZW1wZXJ0aW1iYW5na2FuIHJpc2lrbyB5YW5nIHNlaW1iYW5nIGFudGFyYSBrZXNhbGFoYW4gdGlwZSBJIGRhbiB0aXBlIElJLg0KDQotLS0NCg0KIyMjIDIuMyAqKlBlcmJlZGFhbiBVdGFtYSoqOg0KDQpCZXJpa3V0IGFkYWxhaCB0YWJlbCB5YW5nIGplbGFzIGRhbiBpbmZvcm1hdGlmIHVudHVrIG1lbmplbGFza2FuICoqQWxwaGEgKM6xKSoqIGRhbiAqKkJldGEgKM6yKSoqIGRhbGFtIHVqaSBoaXBvdGVzaXM6ICANCg0KfCAqKkFzcGVrKiogICAgICAgICAgICAgICB8ICoqQWxwaGEgKM6xKSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqQmV0YSAozrIpKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqRGVmaW5pc2kqKiAgICAgICAgICAgIHwgVGluZ2thdCBzaWduaWZpa2Fuc2k7IHByb2JhYmlsaXRhcyBrZXNhbGFoYW4gdGlwZSBJLiAgICAgICAgICAgICAgICAgICAgICAgIHwgUHJvYmFiaWxpdGFzIGtlc2FsYWhhbiB0aXBlIElJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqS2VzYWxhaGFuIHlhbmcgRGl1a3VyKip8IEtlc2FsYWhhbiB0aXBlIEk6IE1lbm9sYWsgSOKCgCBwYWRhaGFsIEjigoAgYmVuYXIgKEZhbHNlIFBvc2l0aXZlKS4gICAgICAgICAgICAgfCBLZXNhbGFoYW4gdGlwZSBJSTogR2FnYWwgbWVub2xhayBI4oKAIHBhZGFoYWwgSOKCgSBiZW5hciAoRmFsc2UgTmVnYXRpdmUpLiB8DQp8ICoqTmlsYWkgVW11bSoqICAgICAgICAgIHwgQmlhc2FueWEgZGl0ZXRhcGthbiBwYWRhIDAuMDUgKDUlKSwgdGV0YXBpIGRhcGF0IGRpc2VzdWFpa2FuIChtaXNhbG55YSAwLjAxKS4gfCBCZXJnYW50dW5nIHBhZGEgYmFueWFrIGZha3RvciwgYmlhc2FueWEgZGl1c2FoYWthbiA8IDAuMiAoMjAlKS4gIHwNCnwgKipGdW5nc2kqKiAgICAgICAgICAgICAgfCBNZW5lbnR1a2FuIGJhdGFzIHVudHVrIG1lbm9sYWsgaGlwb3Rlc2lzIG5vbCAoSOKCgCkuICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVuZ3VrdXIga2VtdW5na2luYW4gZ2FnYWwgbWVuZGV0ZWtzaSBlZmVrIHlhbmcgYmVuYXItYmVuYXIgYWRhLiB8DQp8ICoqSHVidW5nYW4gZGVuZ2FuIFBvd2VyKip8IFRpZGFrIHNlY2FyYSBsYW5nc3VuZyB0ZXJrYWl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBvd2VyID0gMSAtIM6yOyBwb3dlciB0aW5nZ2kgYmVyYXJ0aSDOsiByZW5kYWguICAgICAgICAgICAgICAgICAgICB8DQp8ICoqUGVuZ2FydWggdGVyaGFkYXAgSGFzaWwgVWppKiogfCBTZW1ha2luIGtlY2lsIM6xLCBzZW1ha2luIGtldGF0IHVqaSBoaXBvdGVzaXMsIG1lbmluZ2thdGthbiByaXNpa28gzrIuICAgICAgICB8IFNlbWFraW4ga2VjaWwgzrIsIHNlbWFraW4gYmVzYXIgcG93ZXIsIG1lbWJ1dHVoa2FuIHNhbXBlbCBsZWJpaCBiZXNhci4gfA0KfCAqKkNvbnRvaCBBcGxpa2FzaSoqICAgICB8IE1lbmdvbnRyb2wgcHJvYmFiaWxpdGFzIHNhbGFoIG1lbm9sYWsgSOKCgCBkYWxhbSBla3NwZXJpbWVuIG9iYXQgYmFydS4gICAgICAgICB8IE1lbWluaW1hbGthbiByaXNpa28gZ2FnYWwgbWVuZGV0ZWtzaSBwZXJiZWRhYW4gc2lnbmlmaWthbiBkYWxhbSBla3NwZXJpbWVuLiB8DQoNCi0tLQ0KDQojIyMgMi40ICoqS2VzaW1wdWxhbiBwZXJiZWRhYW4gQWxwaGEgZGFuIEJldGEqKiANCg0KQWxwaGEgKM6xKSBhZGFsYWggcHJvYmFiaWxpdGFzIG1lbWJ1YXQga2VzYWxhaGFuIHRpcGUgSSwgeWFpdHUgbWVub2xhayBoaXBvdGVzaXMgbm9sIChcKEhfMFwpKSB5YW5nIHNlYmVuYXJueWEgYmVuYXIsIHNlZGFuZ2thbiBCZXRhICjOsikgYWRhbGFoIHByb2JhYmlsaXRhcyBrZXNhbGFoYW4gdGlwZSBJSSwgeWFpdHUgZ2FnYWwgbWVub2xhayBcKEhfMFwpIHBhZGFoYWwgaGlwb3Rlc2lzIGFsdGVybmF0aWYgKFwoSF8xXCkpIGJlbmFyLiBBbHBoYSBkaXRlbnR1a2FuIHNlYmVsdW1ueWEgc2ViYWdhaSB0aW5na2F0IHNpZ25pZmlrYW5zaSAobWlzYWxueWEsIDAuMDUpLCBzZW1lbnRhcmEgQmV0YSBiZXJnYW50dW5nIHBhZGEgcG93ZXIgdWppICgxIC0gzrIpLCB5YW5nIGlkZWFsbnlhIGRpIGF0YXMgODAlLiBBbHBoYSBmb2t1cyBwYWRhIG1lbmdoaW5kYXJpIGZhbHNlIHBvc2l0aXZlLCBzZWRhbmdrYW4gQmV0YSBmb2t1cyBwYWRhIG1lbmdoaW5kYXJpIGZhbHNlIG5lZ2F0aXZlLCBkYW4ga2VkdWFueWEgc2FsaW5nIG1lbWVuZ2FydWhpIGRhbGFtIHBlbmdhbWJpbGFuIGtlcHV0dXNhbiBzdGF0aXN0aWsuDQoNCg0KIyMgMy4gS2FwYW4gbWVuZ2d1bmFrYW4ga2VzYWxhaGFuIHR5cGUgSSBkYW4gdHlwZSBJSSBkYWxhbSB1amkgaGlwb3Rlc2lzPw0KDQpLZXNhbGFoYW4gKipUaXBlIEkqKiBkYW4gKipUaXBlIElJKiogZGFsYW0gdWppIGhpcG90ZXNpcyBtZW5nZ2FtYmFya2FuIGR1YSBqZW5pcyBrZXNhbGFoYW4geWFuZyBiaXNhIHRlcmphZGkga2V0aWthIGtpdGEgbWVtYnVhdCBrZXB1dHVzYW4gbWVuZ2VuYWkgKipoaXBvdGVzaXMgbm9sIChI4oKAKSoqLiBNZW1haGFtaSBrYXBhbiBkYW4gYmFnYWltYW5hIGtlZHVhIGplbmlzIGtlc2FsYWhhbiBpbmkgYmVycGVuZ2FydWggc2FuZ2F0IHBlbnRpbmcgZGFsYW0gcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIHN0YXRpc3Rpay4gQmVyaWt1dCBhZGFsYWggcGVuamVsYXNhbiBtZW5nZW5haSAqKmthcGFuKioga2l0YSBwZXJsdSBtZW1wZXJoYXRpa2FuIG1hc2luZy1tYXNpbmcga2VzYWxhaGFuIGluaToNCg0KLS0tDQojIyMgMy4xICoqS2FwYW4gTWVuZ2d1bmFrYW4gS2VzYWxhaGFuIFRpcGUgSSBkYW4gVGlwZSBJSSBkYWxhbSBVamkgSGlwb3Rlc2lzPyoqICANCg0KUGVuZ2d1bmFhbiBrZXNhbGFoYW4gKip0aXBlIEkgKFR5cGUgSSBlcnJvcikqKiBkYW4gKip0aXBlIElJIChUeXBlIElJIGVycm9yKSoqIHRlcmdhbnR1bmcgcGFkYSAqKmtvbnRla3MgcGVuZWxpdGlhbioqIGRhbiAqKmtvbnNla3VlbnNpIGRhcmkgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuKiouIEJlcmlrdXQgYWRhbGFoIGtvbnNlcCBwZW5nZ3VuYWFubnlhOiAgDQoNCi0tLQ0KDQojIyMjIDMuMS4xICoqS2VzYWxhaGFuIFRpcGUgSSAoVHlwZSBJIEVycm9yKSoqICANCiMjIyMgKipLYXBhbiBEaWd1bmFrYW4/KiogIA0KS2VzYWxhaGFuIHRpcGUgSSBsZWJpaCBkaXBlcnRpbWJhbmdrYW4gYXRhdSBkaXRlcmltYSBqaWthOiAgDQoxLiAqKk1lbmd1dGFtYWthbiBLZWFtYW5hbiBhdGF1IFBlbmNlZ2FoYW4qKiAgDQogICAtIFNpdHVhc2kgZGkgbWFuYSByaXNpa28gc2FsYWggbWVuZGV0ZWtzaSBlZmVrIGxlYmloIGtlY2lsIGRhcmlwYWRhIHJpc2lrbyBnYWdhbCBtZW5kZXRla3NpIGJhaGF5YS4gIA0KMi4gKipFa3NwbG9yYXNpIEF3YWwqKiAgDQogICAtIFBlbmVsaXRpYW4gZWtzcGxvcmFzaSBhdGF1IGVrc3BlcmltZW4gYXdhbCBkaSBtYW5hIGtsYWltIHBhbHN1IGRhcGF0IGRpbWFrbHVtaSB1bnR1ayBtZW1idWthIGFyYWggcGVuZWxpdGlhbiBsZWJpaCBsYW5qdXQuICANCjMuICoqUGVuZWxpdGlhbiBTZW5zaXRpZiB0ZXJoYWRhcCBLZXNhbGFoYW4gUG9zaXRpZioqICANCiAgIC0gTWlzYWxueWEsIGRldGVrc2kgZGluaSBwZW55YWtpdCBiZXJiYWhheWEgYXRhdSBpZGVudGlmaWthc2kgYmFoYXlhIGxpbmdrdW5nYW4uDQoNCiMjIyMgKipDb250b2ggUGVuZ2d1bmFhbioqICANCi0gKipEZXRla3NpIERpbmkgUGVueWFraXQqKiAgDQogIC0gSGlwb3Rlc2lzIG5vbCAoXChIXzBcKSk6IFRpZGFrIGFkYSBwZW55YWtpdC4gIA0KICAtIEhpcG90ZXNpcyBhbHRlcm5hdGlmIChcKEhfQVwpKTogQWRhIHBlbnlha2l0LiAgDQogIC0gTWVub2xhayBcKEhfMFwpIGJlcmFydGkgbWVueWltcHVsa2FuIGFkYSBwZW55YWtpdCBtZXNraXB1biBzZWJlbmFybnlhIHRpZGFrIGFkYS4gRGFsYW0ga29udGVrcyBpbmksIGxlYmloIGJhaWsgbWVtYmVyaWthbiBoYXNpbCAicG9zaXRpZiBwYWxzdSIgKFR5cGUgSSBlcnJvcikgYWdhciB0aW5kYWthbiBwZW5jZWdhaGFuIHNlZ2VyYSBkaWxha3VrYW4uICANCg0KLS0tDQoNCiMjIyMgMy4xLjIgKipLZXNhbGFoYW4gVGlwZSBJSSAoVHlwZSBJSSBFcnJvcikqKiAgDQojIyMjICoqS2FwYW4gRGlndW5ha2FuPyoqICANCktlc2FsYWhhbiB0aXBlIElJIGxlYmloIGRpcGVydGltYmFuZ2thbiBhdGF1IGRpdGVyaW1hIGppa2E6ICANCjEuICoqTWVuZ2hpbmRhcmkgS2xhaW0gUGFsc3UqKiAgDQogICAtIFNpdHVhc2kgZGkgbWFuYSByaXNpa28gbWVtYnVhdCBrbGFpbSBzYWxhaCBsZWJpaCBzZXJpdXMgZGFyaXBhZGEgZ2FnYWwgbWVuZGV0ZWtzaSBlZmVrLiAgDQoyLiAqKlBlbmVsaXRpYW4gZGVuZ2FuIEtvbnNla3VlbnNpIEVrb25vbWkvU29zaWFsIFRpbmdnaSoqICANCiAgIC0gTWlzYWxueWEsIHBlbmd1amlhbiBlZmVrdGl2aXRhcyBvYmF0IGJhcnUsIGRpIG1hbmEga2xhaW0gc2FsYWggdGVudGFuZyBlZmVrdGl2aXRhcyBkYXBhdCBtZW1iYWhheWFrYW4gYmFueWFrIG9yYW5nLiAgDQozLiAqKlBlbmVsaXRpYW4gS2xpbmlzIGF0YXUgSWxtaWFoIGRlbmdhbiBTdGFuZGFyIFRpbmdnaSoqICANCiAgIC0gRGFsYW0gdWppIGNvYmEga2xpbmlzIGF0YXUgc3R1ZGkgaWxtaWFoIGJlc2FyLCBsZWJpaCBiYWlrIGdhZ2FsIG1lbmRldGVrc2kgZWZlayAoVHlwZSBJSSBlcnJvcikgZGFyaXBhZGEgbWVtYnVhdCBrbGFpbSBzYWxhaCB5YW5nIGRhcGF0IG1lcnVzYWsga2VwZXJjYXlhYW4gaWxtaWFoLiAgDQoNCiMjIyMgKipDb250b2ggUGVuZ2d1bmFhbioqICANCi0gKipVamkgRWZla3Rpdml0YXMgT2JhdCBCYXJ1KiogIA0KICAtIEhpcG90ZXNpcyBub2wgKFwoSF8wXCkpOiBPYmF0IHRpZGFrIGVmZWt0aWYuICANCiAgLSBIaXBvdGVzaXMgYWx0ZXJuYXRpZiAoXChIX0FcKSk6IE9iYXQgZWZla3RpZi4gIA0KICAtIEdhZ2FsIG1lbm9sYWsgXChIXzBcKSBiZXJhcnRpIG9iYXQgZGlhbmdnYXAgdGlkYWsgZWZla3RpZiBtZXNraXB1biBzZWJlbmFybnlhIGVmZWt0aWYuIERhbGFtIHBlbmVsaXRpYW4gaW5pLCByaXNpa28ga2VzYWxhaGFuIHRpcGUgSUkgbGViaWggZGFwYXQgZGl0ZXJpbWEgdW50dWsgbWVuZ2hpbmRhcmkga2xhaW0gcGFsc3UgdGVudGFuZyBlZmVrdGl2aXRhcyBvYmF0LiAgDQoNCi0tLQ0KDQojIyMgMy4yICoqS2VzaW1wdWxhbioqICANCjEuICoqS2VzYWxhaGFuIHRpcGUgSSoqIGRpZ3VuYWthbiBhdGF1IGxlYmloIGRhcGF0IGRpdGVyaW1hIGRhbGFtIGtvbnRla3M6ICANCiAgIC0gU2l0dWFzaSBkYXJ1cmF0IChkZXRla3NpIGJhaGF5YSkgIA0KICAgLSBFa3NwZXJpbWVuIGVrc3Bsb3Jhc2kgYXdhbCAgDQogICAtIEtlYW1hbmFuIGF0YXUgdGluZGFrYW4gcGVuY2VnYWhhbiBsZWJpaCBkaXV0YW1ha2FuLiAgDQoNCjIuICoqS2VzYWxhaGFuIHRpcGUgSUkqKiBkaWd1bmFrYW4gYXRhdSBsZWJpaCBkYXBhdCBkaXRlcmltYSBkYWxhbSBrb250ZWtzOiAgDQogICAtIFN0dWRpIGtsaW5pcywgb2JhdCwgYXRhdSB0ZWtub2xvZ2kgeWFuZyBtZW1idXR1aGthbiB2YWxpZGFzaSB0aW5nZ2kuICANCiAgIC0gU2l0dWFzaSBkaSBtYW5hIGtsYWltIHBhbHN1IGFrYW4gbWVtYmF3YSBkYW1wYWsgYmVzYXIuICANCg0KMy4gUGVuZW50dWFuIHRvbGVyYW5zaSB0ZXJoYWRhcCBrZXNhbGFoYW4gKGFscGhhIGRhbiBiZXRhKSBkaXNlc3VhaWthbiBkZW5nYW4gKiprb25zZWt1ZW5zaSBkYXJpIG1hc2luZy1tYXNpbmcga2VzYWxhaGFuKiogcGFkYSBwZW5lbGl0aWFuIGF0YXUgcGVuZ3VqaWFuIHRlcnRlbnR1Lg0KDQoNCiMjIFJlZmVyZW5zaQ0KDQoNCkJha3RpIFNpcmVnYXIuIChuLmQuKS4gKlBlbmd1amlhbiBIaXBvdGVzaXMqLiBEaWFrc2VzIGRhcmkgW2h0dHBzOi8vYm9va2Rvd24ub3JnL2RzY2llbmNlbGFicy9zdGF0aXN0aWthX2Rhc2FyL19ib29rL1Blbmd1amlhbl9IaXBvdGVzaXMuaHRtbF0oaHR0cHM6Ly9ib29rZG93bi5vcmcvZHNjaWVuY2VsYWJzL3N0YXRpc3Rpa2FfZGFzYXIvX2Jvb2svUGVuZ3VqaWFuX0hpcG90ZXNpcy5odG1sKSAgDQoNCkRhdGEgVGFiLiAobi5kLikuICpVamkgSGlwb3Rlc2lzIFtWaWRlb10qLiBZb3VUdWJlLiBEaWFrc2VzIGRhcmkgW2h0dHBzOi8veW91dHUuYmUvMmZnUV84QUtoSlldKGh0dHBzOi8veW91dHUuYmUvMmZnUV84QUtoSlkpICANCg0KMzY1IERhdGEgU2NpZW5jZS4gKG4uZC4pLiAqVHlwZSAxIGFuZCBUeXBlIDIgRXJyb3JzIGluIEh5cG90aGVzaXMgVGVzdGluZyBbVmlkZW9dKi4gWW91VHViZS4gRGlha3NlcyBkYXJpIFtodHRwczovL3lvdXR1LmJlL2FfbDk5MXhVQU9VXShodHRwczovL3lvdXR1LmJlL2FfbDk5MXhVQU9VKSAgDQoNCkpva28gQWRlLiAobi5kLikuICpTdGF0aXN0aWthOiBNZW5nZW5hbCBBbHBoYSBkYW4gQmV0YSBkYWxhbSBNZW11dHVza2FuIFBlcmthcmEqLiBLb21wYXNpYW5hLiBEaWFrc2VzIGRhcmkgW2h0dHBzOi8vd3d3LmtvbXBhc2lhbmEuY29tL2pva29hZGUvNTRmNjdlMDhhMzMzMTE5MTE3OGI0YmUxL3N0YXRpc3Rpa2EtbWVuZ2VuYWwtYWxwaGEtZGFuLWJldGEtZGFsYW0tbWVtdXR1c2thbi1wZXJrYXJhXShodHRwczovL3d3dy5rb21wYXNpYW5hLmNvbS9qb2tvYWRlLzU0ZjY3ZTA4YTMzMzExOTExNzhiNGJlMS9zdGF0aXN0aWthLW1lbmdlbmFsLWFscGhhLWRhbi1iZXRhLWRhbGFtLW1lbXV0dXNrYW4tcGVya2FyYSkgIA0KDQpBbGdvcml0bWEuIChuLmQuKS4gKlN0YXRpc3Rpa2EgRGVza3JpcHRpZiBkYW4gSW5mZXJlbnNpYWwqLiBEaWFrc2VzIGRhcmkgW2h0dHBzOi8vYWxnb3JpdC5tYS9ibG9nL3N0YXRpc3Rpa2EtZGVza3JpcHRpZi1pbmZlcmVuc2lhbC9dKGh0dHBzOi8vYWxnb3JpdC5tYS9ibG9nL3N0YXRpc3Rpa2EtZGVza3JpcHRpZi1pbmZlcmVuc2lhbC8pICANCg0KVmFsZW5zaSBLYXV0c2FyLiAobi5kLikuICpFcnJvciBUaXBlIEkgZGFuIFRpcGUgSUkqLiBEaWFrc2VzIGRhcmkgW2h0dHBzOi8vd3d3LnZhbGVuc2lrYXV0c2FyLmNvbS9hcnRpa2VsL3N0YXRpc3Rpa2EvZXJyb3ItdGlwZS1pLWRhbi10aXBlLTJdKGh0dHBzOi8vd3d3LnZhbGVuc2lrYXV0c2FyLmNvbS9hcnRpa2VsL3N0YXRpc3Rpa2EvZXJyb3ItdGlwZS1pLWRhbi10aXBlLTIpICANCg0K